X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=acqui%2Ffinishreceive.pl;h=c2d51686eb26a478ff1f399513e1911f227a469b;hb=f72b8cbd3eb77ded61e08714b68969f7cacc8224;hp=7bec8658df123e49baa3d85cc0b36a100e4c30b6;hpb=520afc589076b15dd796aacaee0c6699730bfc11;p=koha-ffzg.git diff --git a/acqui/finishreceive.pl b/acqui/finishreceive.pl index 7bec8658df..c2d51686eb 100755 --- a/acqui/finishreceive.pl +++ b/acqui/finishreceive.pl @@ -20,24 +20,24 @@ # You should have received a copy of the GNU General Public License # along with Koha; if not, see . -use strict; -use warnings; +use Modern::Perl; use CGI qw ( -utf8 ); -use C4::Auth; +use C4::Auth qw( checkauth ); +use JSON qw( encode_json ); use C4::Output; use C4::Context; -use C4::Acquisition; -use C4::Biblio; -use C4::Items; +use C4::Acquisition qw( GetInvoice GetOrder populate_order_with_prices ModReceiveOrder ); +use C4::Biblio qw( GetFrameworkCode GetMarcFromKohaField TransformHtmlToXml ); +use C4::Items qw( GetMarcItem ModItemFromMarc AddItemFromMarc ); +use C4::Log qw(logaction); use C4::Search; use Koha::Number::Price; use Koha::Acquisition::Booksellers; use Koha::Acquisition::Orders; -use List::MoreUtils qw/any/; -my $input=new CGI; +my $input=CGI->new; my $flagsrequired = {acquisition => 'order_receive'}; checkauth($input, 0, $flagsrequired, 'intranet'); @@ -49,28 +49,42 @@ my $origquantityrec = $input->param('origquantityrec'); my $quantityrec = $input->param('quantityrec'); my $quantity = $input->param('quantity'); my $unitprice = $input->param('unitprice'); -my $datereceived = $input->param('datereceived'), +my $replacementprice = $input->param('replacementprice'); +my $datereceived = $input->param('datereceived'); my $invoiceid = $input->param('invoiceid'); my $invoice = GetInvoice($invoiceid); my $invoiceno = $invoice->{invoicenumber}; my $booksellerid = $input->param('booksellerid'); my $cnt = 0; my $bookfund = $input->param("bookfund"); +my $suggestion_id = $input->param("suggestionid"); my $order = GetOrder($ordernumber); my $new_ordernumber = $ordernumber; +#bug18723 regression fix +if (C4::Context->preference("CurrencyFormat") eq 'FR') { + if (rindex($unitprice, '.') ge 0) { + substr($unitprice, rindex($unitprice, '.'), 1, ','); + } + if (rindex($replacementprice,'.') ge 0) { + substr($replacementprice, rindex($replacementprice, '.'), 1, ','); + } +} + $unitprice = Koha::Number::Price->new( $unitprice )->unformat(); -my $basket = Koha::Acquisition::Orders->find( $ordernumber )->basket; +$replacementprice = Koha::Number::Price->new( $replacementprice )->unformat(); +my $order_obj = Koha::Acquisition::Orders->find( $ordernumber ); +my $basket = $order_obj->basket; #need old receivedate if we update the order, parcel.pl only shows the right parcel this way FIXME if ($quantityrec > $origquantityrec ) { my @received_items = (); if ($basket->effective_create_items eq 'ordering') { - @received_items = $input->param('items_to_receive'); + @received_items = $input->multi_param('items_to_receive'); my @affects = split q{\|}, C4::Context->preference("AcqItemSetSubfieldsWhenReceived"); if ( @affects ) { my $frameworkcode = GetFrameworkCode($biblionumber); - my ( $itemfield ) = GetMarcFromKohaField( 'items.itemnumber', $frameworkcode ); + my ( $itemfield ) = GetMarcFromKohaField( 'items.itemnumber' ); for my $in ( @received_items ) { my $item = C4::Items::GetMarcItem( $biblionumber, $in ); for my $affect ( @affects ) { @@ -86,6 +100,7 @@ if ($quantityrec > $origquantityrec ) { $order->{order_internalnote} = $input->param("order_internalnote"); $order->{tax_rate_on_receiving} = $input->param("tax_rate"); + $order->{replacementprice} = $replacementprice; $order->{unitprice} = $unitprice; $order = C4::Acquisition::populate_order_with_prices( @@ -98,6 +113,10 @@ if ($quantityrec > $origquantityrec ) { # save the quantity received. if ( $quantityrec > 0 ) { + if ( $order_obj->subscriptionid ) { + # Quantity can only be modified if linked to a subscription + $order->{quantity} = $quantity; # quantityrec will be deduced from this value in ModReceiveOrder + } ( $datereceived, $new_ordernumber ) = ModReceiveOrder( { biblionumber => $biblionumber, @@ -106,6 +125,7 @@ if ($quantityrec > $origquantityrec ) { user => $user, invoice => $invoice, budget_id => $bookfund, + datereceived => $datereceived, received_items => \@received_items, } ); @@ -119,8 +139,6 @@ if ($quantityrec > $origquantityrec ) { my @field_values = $input->multi_param('field_value'); my @serials = $input->multi_param('serial'); my @itemid = $input->multi_param('itemid'); - my @ind_tag = $input->multi_param('ind_tag'); - my @indicator = $input->multi_param('indicator'); #Rebuilding ALL the data for items into a hash # parting them on $itemid. my %itemhash; @@ -133,16 +151,14 @@ if ($quantityrec > $origquantityrec ) { push @{$itemhash{$itemid[$i]}->{'tags'}},$tags[$i]; push @{$itemhash{$itemid[$i]}->{'subfields'}},$subfields[$i]; push @{$itemhash{$itemid[$i]}->{'field_values'}},$field_values[$i]; - push @{$itemhash{$itemid[$i]}->{'ind_tag'}},$ind_tag[$i]; - push @{$itemhash{$itemid[$i]}->{'indicator'}},$indicator[$i]; } my $new_order = Koha::Acquisition::Orders->find( $new_ordernumber ); foreach my $item (keys %itemhash){ my $xml = TransformHtmlToXml( $itemhash{$item}->{'tags'}, $itemhash{$item}->{'subfields'}, $itemhash{$item}->{'field_values'}, - $itemhash{$item}->{'indicator'}, - $itemhash{$item}->{'ind_tag'}, + undef, + undef, 'ITEM' ); my $record=MARC::Record::new_from_xml($xml, 'UTF-8'); my (undef,$bibitemnum,$itemnumber) = AddItemFromMarc($record,$biblionumber); @@ -151,17 +167,43 @@ if ($quantityrec > $origquantityrec ) { } } -ModItem( - { - booksellerid => $booksellerid, - dateaccessioned => $datereceived, - datelastseen => $datereceived, - price => $unitprice, - replacementprice => $order->{rrp}, +my $new_order_object = Koha::Acquisition::Orders->find( $new_ordernumber ); # FIXME we should not need to refetch it +my $items = $new_order_object->items; +while ( my $item = $items->next ) { + $item->update({ + booksellerid => $booksellerid, + dateaccessioned => $datereceived, + datelastseen => $datereceived, + price => $unitprice, + replacementprice => $replacementprice, replacementpricedate => $datereceived, - }, - $biblionumber, - $_ -) foreach GetItemnumbersFromOrder($new_ordernumber); + }); +} + +if ($suggestion_id) { + my $reason = $input->param("reason") || ''; + my $other_reason = $input->param("other_reason"); + $reason = $other_reason if $reason eq 'other'; + my $suggestion = Koha::Suggestions->find($suggestion_id); + $suggestion->update( { reason => $reason } ) if $suggestion; +} + +# Log the receipt +if (C4::Context->preference("AcquisitionLog")) { + my $infos = { + quantityrec => $quantityrec, + bookfund => $bookfund || 'unchanged', + tax_rate => $input->param("tax_rate"), + replacementprice => $replacementprice, + unitprice => $unitprice + }; + + logaction( + 'ACQUISITIONS', + 'RECEIVE_ORDER', + $ordernumber, + encode_json($infos) + ); +} -print $input->redirect("/cgi-bin/koha/acqui/parcel.pl?invoiceid=$invoiceid&sticky_filters=1"); +print $input->redirect("/cgi-bin/koha/acqui/parcel.pl?invoiceid=$invoiceid");