X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=acqui%2Forderreceive.pl;h=a9d3201246b03b16766aecbb4526a63959a40892;hb=3101a132a46369a23082ff8baaa8f6a718159f11;hp=202e8cee2f798bf50da09edb399c7502c9eb6e59;hpb=fc70c3a4bc9175c2f4f250aeb0bd40ae048df721;p=koha.git diff --git a/acqui/orderreceive.pl b/acqui/orderreceive.pl index 202e8cee2f..a9d3201246 100755 --- a/acqui/orderreceive.pl +++ b/acqui/orderreceive.pl @@ -58,25 +58,26 @@ The biblionumber of this order. =cut -use strict; -use warnings; +use Modern::Perl; 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::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::Bookseller; - +use Koha::Acquisition::Booksellers; +use Koha::Acquisition::Currencies; +use Koha::Acquisition::Orders; +use Koha::DateUtils qw( dt_from_string ); +use Koha::ItemTypes; +use Koha::Patrons; my $input = new CGI; @@ -85,12 +86,9 @@ 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'); -$datereceived = $datereceived ? C4::Dates->new($datereceived, 'iso') : C4::Dates->new(); - -my $bookseller = Koha::Acquisition::Bookseller->fetch({ id => $booksellerid }); +my $bookseller = Koha::Acquisition::Booksellers->find( $booksellerid ); my $results; $results = SearchOrders({ ordernumber => $ordernumber @@ -114,14 +112,17 @@ unless ( $results and @$results) { # prepare the form for receiving my $order = $results->[0]; +my $order_object = Koha::Acquisition::Orders->find( $ordernumber ); +my $basket = $order_object->basket; +my $active_currency = Koha::Acquisition::Currencies->get_active; # Check if ACQ framework exists -my $acq_fw = GetMarcStructure(1, 'ACQ'); +my $acq_fw = GetMarcStructure( 1, 'ACQ', { unsafe => 1 } ); unless($acq_fw) { $template->param('NoACQframework' => 1); } -my $AcqCreateItem = C4::Context->preference('AcqCreateItem'); +my $AcqCreateItem = $basket->effective_create_items; if ($AcqCreateItem eq 'receiving') { $template->param( AcqCreateItemReceiving => 1, @@ -129,73 +130,95 @@ if ($AcqCreateItem eq 'receiving') { ); } elsif ($AcqCreateItem eq 'ordering') { my $fw = ($acq_fw) ? 'ACQ' : ''; - my @itemnumbers = GetItemnumbersFromOrder($order->{ordernumber}); + my $items = $order_object->items; 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}); + while ( my $i = $items->next ) { + my $item = $i->unblessed; + 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($i->effective_itemtype); + if (defined $itemtype) { + # We should not do that here, but call ->itemtype->description when needed instead + $item->{itemtype} = $itemtype->description; # FIXME Should not it be translated_description? } - my $itemtype = getitemtypeinfo($item->{itype}); - $item->{itemtype} = $itemtype->{description}; 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} ); + +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 { - 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}; + $rrp = $order->{rrp_tax_excluded}; + $ecost = $order->{ecost_tax_excluded}; + unless ( $unitprice != 0 and defined $unitprice) { + $unitprice = $order->{ecost_tax_excluded}; } - } +} + +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 $suggestion = GetSuggestionInfoFromBiblionumber($order->{biblionumber}); -my $authorisedby = $order->{authorisedby}; -my $member = GetMember( borrowernumber => $authorisedby ); +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") ); + +my $order_internalnote = $order->{order_internalnote}; +my $order_vendornote = $order->{order_vendornote}; +if ( $order->{subscriptionid} ) { + # Order from a subscription, we will display an history of what has been received + my $orders = Koha::Acquisition::Orders->search( + { + subscriptionid => $order->{subscriptionid}, + parent_ordernumber => $order->{ordernumber}, + ordernumber => { '!=' => $order->{ordernumber} } + } + ); + if ( $order->{parent_ordernumber} != $order->{ordernumber} ) { + my $parent_order = Koha::Acquisition::Orders->find($order->{parent_ordernumber}); + $order_internalnote = $parent_order->{order_internalnote}; + $order_vendornote = $parent_order->{order_vendornote}; + } + $template->param( + orders => $orders, + ); +} + $template->param( AcqCreateItem => $AcqCreateItem, count => 1, @@ -204,8 +227,11 @@ $template->param( subscriptionid => $order->{subscriptionid}, booksellerid => $order->{'booksellerid'}, freight => $freight, - name => $bookseller->{'name'}, - date => format_date($order->{entrydate}), + name => $bookseller->name, + cur_active_sym => $active_currency->symbol, + cur_active => $active_currency->currency, + listincgst => $bookseller->listincgst, + invoiceincgst => $bookseller->invoiceincgst, title => $order->{'title'}, author => $order->{'author'}, copyrightdate => $order->{'copyrightdate'}, @@ -215,22 +241,24 @@ $template->param( quantity => $order->{'quantity'}, quantityreceivedplus1 => $order->{'quantityreceived'} + 1, quantityreceived => $order->{'quantityreceived'}, - rrp => sprintf( "%.2f", $rrp ), - ecost => sprintf( "%.2f", $ecost ), - memberfirstname => $member->{firstname} || "", - membersurname => $member->{surname} || "", + rrp => $rrp, + replacementprice => $order->{'replacementprice'}, + ecost => $ecost, + unitprice => $unitprice, + tax_rate => $tax_rate, + creator => $creator, invoiceid => $invoice->{invoiceid}, invoice => $invoice->{invoicenumber}, - datereceived => $datereceived->output(), - datereceived_iso => $datereceived->output('iso'), - order_internalnote => $order->{order_internalnote}, - order_vendornote => $order->{order_vendornote}, + datereceived => $datereceived, + order_internalnote => $order_internalnote, + order_vendornote => $order_vendornote, suggestionid => $suggestion->{suggestionid}, surnamesuggestedby => $suggestion->{surnamesuggestedby}, firstnamesuggestedby => $suggestion->{firstnamesuggestedby}, + gst_values => \@gst_values, ); -my $borrower = GetMember( 'borrowernumber' => $loggedinuser ); +my $patron = Koha::Patrons->find( $loggedinuser )->unblessed; my @budget_loop; my $periods = GetBudgetPeriods( ); foreach my $period (@$periods) { @@ -241,7 +269,7 @@ foreach my $period (@$periods) { my $budget_hierarchy = GetBudgetHierarchy( $period->{'budget_period_id'} ); my @funds; foreach my $r ( @{$budget_hierarchy} ) { - next unless ( CanUserUseBudget( $borrower, $r, $userflags ) ); + next unless ( CanUserUseBudget( $patron, $r, $userflags ) ); if ( !defined $r->{budget_amount} || $r->{budget_amount} == 0 ) { next; } @@ -265,15 +293,6 @@ foreach my $period (@$periods) { $template->{'VARS'}->{'budget_loop'} = \@budget_loop; -# regardless of the content of $unitprice e.g 0 or '' or any string will return in these cases 0.00 -# and the 'IF' in the .tt will show 0.00 and not 'ecost' (see BZ 7129) -# So if $unitprice == 0 we don't create unitprice -if ( $unitprice != 0) { - $template->param( - unitprice => sprintf( "%.2f", $unitprice), - ); -} - my $op = $input->param('op'); if ($op and $op eq 'edit'){ $template->param(edit => 1);