X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=acqui%2Forderreceive.pl;h=4dbb5f0cb6d54d9753af8597c7fa58f8550ebada;hb=948704964073dd8dea146d959ad5ed690ccafe67;hp=17c2d5ea732d6a8a30c71431485b6cf3955abff0;hpb=7886297f05ece48185b2f046ae025a57643ee65c;p=koha.git diff --git a/acqui/orderreceive.pl b/acqui/orderreceive.pl index 17c2d5ea73..4dbb5f0cb6 100755 --- a/acqui/orderreceive.pl +++ b/acqui/orderreceive.pl @@ -1,25 +1,25 @@ #!/usr/bin/perl -#script to recieve orders +#script to receive orders #written by chris@katipo.co.nz 24/2/2000 # Copyright 2000-2002 Katipo Communications # # This file is part of Koha. # -# Koha is free software; you can redistribute it and/or modify it under the -# terms of the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any later -# version. +# Koha is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. # -# Koha is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# Koha is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. # -# You should have received a copy of the GNU General Public License along -# with Koha; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . =head1 NAME @@ -38,8 +38,6 @@ It permit to write a new order as 'received'. to know on what supplier this script has to display receive order. -=item receive - =item invoiceid the id of this invoice. @@ -60,24 +58,25 @@ The biblionumber of this order. =cut -use strict; -use warnings; +use Modern::Perl; -use CGI; +use CGI qw ( -utf8 ); use C4::Context; -use C4::Koha; # GetKohaAuthorisedValues GetItemTypes use C4::Acquisition; use C4::Auth; use C4::Output; -use C4::Dates qw/format_date/; -use C4::Bookseller qw/ GetBookSellerFromId /; -use C4::Budgets qw/ GetBudget /; +use C4::Budgets qw/ GetBudget GetBudgetHierarchy CanUserUseBudget GetBudgetPeriods /; use C4::Members; -use C4::Branch; # GetBranches use C4::Items; use C4::Biblio; use C4::Suggestions; +use C4::Koha; +use Koha::Acquisition::Booksellers; +use Koha::Acquisition::Orders; +use Koha::DateUtils qw( dt_from_string ); +use Koha::ItemTypes; +use Koha::Patrons; my $input = new CGI; @@ -86,18 +85,17 @@ my $invoiceid = $input->param('invoiceid'); my $invoice = GetInvoice($invoiceid); my $booksellerid = $invoice->{booksellerid}; my $freight = $invoice->{shipmentcost}; -my $datereceived = $invoice->{shipmentdate}; my $ordernumber = $input->param('ordernumber'); -my $search = $input->param('receive'); - -$datereceived = $datereceived ? C4::Dates->new($datereceived, 'iso') : C4::Dates->new(); -my $bookseller = GetBookSellerFromId($booksellerid); -my $results = SearchOrder($ordernumber,$search); +my $bookseller = Koha::Acquisition::Booksellers->find( $booksellerid ); +my $results; +$results = SearchOrders({ + ordernumber => $ordernumber +}) if $ordernumber; -my ( $template, $loggedinuser, $cookie ) = get_template_and_user( +my ( $template, $loggedinuser, $cookie, $userflags ) = get_template_and_user( { - template_name => "acqui/orderreceive.tmpl", + template_name => "acqui/orderreceive.tt", query => $input, type => "intranet", authnotrequired => 0, @@ -106,148 +104,165 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( } ); -my $count = scalar @$results; +unless ( $results and @$results) { + output_html_with_http_headers $input, $cookie, $template->output; + exit; +} + # prepare the form for receiving -if ( $count == 1 ) { - my $order = $results->[0]; +my $order = $results->[0]; +my $basket = Koha::Acquisition::Orders->find( $ordernumber )->basket; - # Check if ACQ framework exists - my $acq_fw = GetMarcStructure(1, 'ACQ'); - unless($acq_fw) { - $template->param('NoACQframework' => 1); - } +# Check if ACQ framework exists +my $acq_fw = GetMarcStructure( 1, 'ACQ', { unsafe => 1 } ); +unless($acq_fw) { + $template->param('NoACQframework' => 1); +} - my $AcqCreateItem = C4::Context->preference('AcqCreateItem'); - if ($AcqCreateItem eq 'receiving') { - $template->param( - AcqCreateItemReceiving => 1, - UniqueItemFields => C4::Context->preference('UniqueItemFields'), - ); - } elsif ($AcqCreateItem eq 'ordering') { - my $fw = ($acq_fw) ? 'ACQ' : ''; - my @itemnumbers = GetItemnumbersFromOrder($order->{ordernumber}); - my @items; - foreach (@itemnumbers) { - my $item = GetItem($_); - if($item->{homebranch}) { - $item->{homebranchname} = GetBranchName($item->{homebranch}); - } - if($item->{holdingbranch}) { - $item->{holdingbranchname} = GetBranchName($item->{holdingbranch}); - } - if(my $code = GetAuthValCode("items.notforloan", $fw)) { - $item->{notforloan} = GetKohaAuthorisedValueLib($code, $item->{notforloan}); - } - if(my $code = GetAuthValCode("items.restricted", $fw)) { - $item->{restricted} = GetKohaAuthorisedValueLib($code, $item->{restricted}); - } - if(my $code = GetAuthValCode("items.location", $fw)) { - $item->{location} = GetKohaAuthorisedValueLib($code, $item->{location}); - } - if(my $code = GetAuthValCode("items.ccode", $fw)) { - $item->{collection} = GetKohaAuthorisedValueLib($code, $item->{ccode}); - } - if(my $code = GetAuthValCode("items.materials", $fw)) { - $item->{materials} = GetKohaAuthorisedValueLib($code, $item->{materials}); - } - my $itemtype = getitemtypeinfo($item->{itype}); - $item->{itemtype} = $itemtype->{description}; - push @items, $item; +my $AcqCreateItem = $basket->effective_create_items; +if ($AcqCreateItem eq 'receiving') { + $template->param( + AcqCreateItemReceiving => 1, + UniqueItemFields => C4::Context->preference('UniqueItemFields'), + ); +} elsif ($AcqCreateItem eq 'ordering') { + my $fw = ($acq_fw) ? 'ACQ' : ''; + my @itemnumbers = GetItemnumbersFromOrder($order->{ordernumber}); + my @items; + foreach (@itemnumbers) { + my $item = GetItem($_); + my $descriptions; + $descriptions = Koha::AuthorisedValues->get_description_by_koha_field({frameworkcode => $fw, kohafield => 'items.notforloan', authorised_value => $item->{notforloan} }); + $item->{notforloan} = $descriptions->{lib} // ''; + + $descriptions = Koha::AuthorisedValues->get_description_by_koha_field({frameworkcode => $fw, kohafield => 'items.restricted', authorised_value => $item->{restricted} }); + $item->{restricted} = $descriptions->{lib} // ''; + + $descriptions = Koha::AuthorisedValues->get_description_by_koha_field({frameworkcode => $fw, kohafield => 'items.location', authorised_value => $item->{location} }); + $item->{location} = $descriptions->{lib} // ''; + + $descriptions = Koha::AuthorisedValues->get_description_by_koha_field({frameworkcode => $fw, kohafield => 'items.collection', authorised_value => $item->{collection} }); + $item->{collection} = $descriptions->{lib} // ''; + + $descriptions = Koha::AuthorisedValues->get_description_by_koha_field({frameworkcode => $fw, kohafield => 'items.materials', authorised_value => $item->{materials} }); + $item->{materials} = $descriptions->{lib} // ''; + + my $itemtype = Koha::ItemTypes->find( $item->{itype} ); + if (defined $itemtype) { + $item->{itemtype} = $itemtype->description; # FIXME Should not it be translated_description? } - $template->param(items => \@items); + push @items, $item; } + $template->param(items => \@items); +} - $order->{quantityreceived} = '' if $order->{quantityreceived} == 0; - $order->{unitprice} = '' if $order->{unitprice} == 0; - - my $rrp; - my $ecost; - my $unitprice; - if ( $bookseller->{listincgst} ) { - if ( $bookseller->{invoiceincgst} ) { - $rrp = $order->{rrp}; - $ecost = $order->{ecost}; - $unitprice = $order->{unitprice}; - } else { - $rrp = $order->{rrp} / ( 1 + $order->{gstrate} ); - $ecost = $order->{ecost} / ( 1 + $order->{gstrate} ); - $unitprice = $order->{unitprice} / ( 1 + $order->{gstrate} ); - } - } else { - if ( $bookseller->{invoiceincgst} ) { - $rrp = $order->{rrp} * ( 1 + $order->{gstrate} ); - $ecost = $order->{ecost} * ( 1 + $order->{gstrate} ); - $unitprice = $order->{unitprice} * ( 1 + $order->{gstrate} ); - } else { - $rrp = $order->{rrp}; - $ecost = $order->{ecost}; - $unitprice = $order->{unitprice}; - } - } +$order->{quantityreceived} = '' if $order->{quantityreceived} == 0; - my $suggestion = GetSuggestionInfoFromBiblionumber($order->{biblionumber}); +my $unitprice = $order->{unitprice}; +my ( $rrp, $ecost ); +if ( $bookseller->invoiceincgst ) { + $rrp = $order->{rrp_tax_included}; + $ecost = $order->{ecost_tax_included}; + unless ( $unitprice != 0 and defined $unitprice) { + $unitprice = $order->{ecost_tax_included}; + } +} else { + $rrp = $order->{rrp_tax_excluded}; + $ecost = $order->{ecost_tax_excluded}; + unless ( $unitprice != 0 and defined $unitprice) { + $unitprice = $order->{ecost_tax_excluded}; + } +} - my $authorisedby = $order->{authorisedby}; - my $member = GetMember( borrowernumber => $authorisedby ); +my $tax_rate; +if( defined $order->{tax_rate_on_receiving} ) { + $tax_rate = $order->{tax_rate_on_receiving} + 0.0; +} else { + $tax_rate = $order->{tax_rate_on_ordering} + 0.0; +} - my $budget = GetBudget( $order->{budget_id} ); +my $suggestion = GetSuggestionInfoFromBiblionumber($order->{biblionumber}); + +my $creator = Koha::Patrons->find( $order->{created_by} ); + +my $budget = GetBudget( $order->{budget_id} ); + +my $datereceived = $order->{datereceived} ? dt_from_string( $order->{datereceived} ) : dt_from_string; + +# get option values for gist syspref +my @gst_values = map { + option => $_ + 0.0 +}, split( '\|', C4::Context->preference("gist") ); + +$template->param( + AcqCreateItem => $AcqCreateItem, + count => 1, + biblionumber => $order->{'biblionumber'}, + ordernumber => $order->{'ordernumber'}, + subscriptionid => $order->{subscriptionid}, + booksellerid => $order->{'booksellerid'}, + freight => $freight, + name => $bookseller->name, + title => $order->{'title'}, + author => $order->{'author'}, + copyrightdate => $order->{'copyrightdate'}, + isbn => $order->{'isbn'}, + seriestitle => $order->{'seriestitle'}, + bookfund => $budget->{budget_name}, + quantity => $order->{'quantity'}, + quantityreceivedplus1 => $order->{'quantityreceived'} + 1, + quantityreceived => $order->{'quantityreceived'}, + rrp => $rrp, + ecost => $ecost, + unitprice => $unitprice, + tax_rate => $tax_rate, + creator => $creator, + invoiceid => $invoice->{invoiceid}, + invoice => $invoice->{invoicenumber}, + datereceived => $datereceived, + order_internalnote => $order->{order_internalnote}, + order_vendornote => $order->{order_vendornote}, + suggestionid => $suggestion->{suggestionid}, + surnamesuggestedby => $suggestion->{surnamesuggestedby}, + firstnamesuggestedby => $suggestion->{firstnamesuggestedby}, + gst_values => \@gst_values, +); - $template->param( - AcqCreateItem => $AcqCreateItem, - count => 1, - biblionumber => $order->{'biblionumber'}, - ordernumber => $order->{'ordernumber'}, - biblioitemnumber => $order->{'biblioitemnumber'}, - booksellerid => $order->{'booksellerid'}, - freight => $freight, - gstrate => $order->{gstrate} || $bookseller->{gstrate} || C4::Context->preference("gist") || 0, - name => $bookseller->{'name'}, - date => format_date($order->{entrydate}), - title => $order->{'title'}, - author => $order->{'author'}, - copyrightdate => $order->{'copyrightdate'}, - isbn => $order->{'isbn'}, - seriestitle => $order->{'seriestitle'}, - bookfund => $budget->{budget_name}, - quantity => $order->{'quantity'}, - quantityreceivedplus1 => $order->{'quantityreceived'} + 1, - quantityreceived => $order->{'quantityreceived'}, - rrp => sprintf( "%.2f", $rrp ), - ecost => sprintf( "%.2f", $ecost ), - unitprice => sprintf( "%.2f", $unitprice), - memberfirstname => $member->{firstname} || "", - membersurname => $member->{surname} || "", - invoiceid => $invoice->{invoiceid}, - invoice => $invoice->{invoicenumber}, - datereceived => $datereceived->output(), - datereceived_iso => $datereceived->output('iso'), - notes => $order->{notes}, - suggestionid => $suggestion->{suggestionid}, - surnamesuggestedby => $suggestion->{surnamesuggestedby}, - firstnamesuggestedby => $suggestion->{firstnamesuggestedby}, - ); -} -else { - my @loop; - for ( my $i = 0 ; $i < $count ; $i++ ) { - my %line = %{ @$results[$i] }; - - $line{invoice} = $invoice->{invoicenumber}; - $line{datereceived} = $datereceived->output(); - $line{freight} = $freight; - $line{gstrate} = @$results[$i]->{'gstrate'} || $bookseller->{gstrate} || C4::Context->preference("gist") || 0; - $line{title} = @$results[$i]->{'title'}; - $line{author} = @$results[$i]->{'author'}; - $line{booksellerid} = $booksellerid; - push @loop, \%line; +my $patron = Koha::Patrons->find( $loggedinuser )->unblessed; +my @budget_loop; +my $periods = GetBudgetPeriods( ); +foreach my $period (@$periods) { + if ($period->{'budget_period_id'} == $budget->{'budget_period_id'}) { + $template->{'VARS'}->{'budget_period_description'} = $period->{'budget_period_description'}; + } + next if $period->{'budget_period_locked'} || !$period->{'budget_period_description'}; + my $budget_hierarchy = GetBudgetHierarchy( $period->{'budget_period_id'} ); + my @funds; + foreach my $r ( @{$budget_hierarchy} ) { + next unless ( CanUserUseBudget( $patron, $r, $userflags ) ); + if ( !defined $r->{budget_amount} || $r->{budget_amount} == 0 ) { + next; + } + push @funds, + { + b_id => $r->{budget_id}, + b_txt => $r->{budget_name}, + b_sel => ( $r->{budget_id} == $order->{budget_id} ) ? 1 : 0, + }; } - $template->param( - loop => \@loop, - booksellerid => $booksellerid, - invoiceid => $invoice->{invoiceid}, - ); + @funds = sort { uc( $a->{b_txt} ) cmp uc( $b->{b_txt} ) } @funds; + + push @budget_loop, + { + 'id' => $period->{'budget_period_id'}, + 'description' => $period->{'budget_period_description'}, + 'funds' => \@funds + }; } + +$template->{'VARS'}->{'budget_loop'} = \@budget_loop; + my $op = $input->param('op'); if ($op and $op eq 'edit'){ $template->param(edit => 1);