Bugzilla – Attachment 17313 Details for
Bug 7294
status "in order"
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 7294: Adds acquisition informations in marc record
Bug-7294-Adds-acquisition-informations-in-marc-rec.patch (text/plain), 18.43 KB, created by
Jonathan Druart
on 2013-04-09 15:56:44 UTC
(
hide
)
Description:
Bug 7294: Adds acquisition informations in marc record
Filename:
MIME Type:
Creator:
Jonathan Druart
Created:
2013-04-09 15:56:44 UTC
Size:
18.43 KB
patch
obsolete
>From 7b382f804160011194926bdfe7e38dd7794dcc20 Mon Sep 17 00:00:00 2001 >From: Jonathan Druart <jonathan.druart@biblibre.com> >Date: Tue, 9 Apr 2013 17:56:24 +0200 >Subject: [PATCH] Bug 7294: Adds acquisition informations in marc record > >--- > C4/Acquisition.pm | 169 ++++++++++++-------- > acqui/addorder.pl | 41 +++-- > acqui/addorderiso2709.pl | 5 +- > t/db_dependent/lib/KohaTest/Acquisition.pm | 3 +- > .../lib/KohaTest/Acquisition/NewOrder.pm | 9 +- > 5 files changed, 137 insertions(+), 90 deletions(-) > >diff --git a/C4/Acquisition.pm b/C4/Acquisition.pm >index ca0cc72..793a325 100644 >--- a/C4/Acquisition.pm >+++ b/C4/Acquisition.pm >@@ -24,6 +24,7 @@ use Carp; > use C4::Context; > use C4::Debug; > use C4::Dates qw(format_date format_date_in_iso); >+use MARC::Field; > use MARC::Record; > use C4::Suggestions; > use C4::Biblio; >@@ -1130,6 +1131,7 @@ sub NewOrder { > > my $ordernumber=InsertInTable("aqorders",$orderinfo); > if (not $orderinfo->{parent_ordernumber}) { >+ $orderinfo->{parent_ordernumber} = $ordernumber; > my $sth = $dbh->prepare(" > UPDATE aqorders > SET parent_ordernumber = ordernumber >@@ -1137,7 +1139,9 @@ sub NewOrder { > "); > $sth->execute($ordernumber); > } >- return ( $orderinfo->{'basketno'}, $ordernumber ); >+ >+ $orderinfo->{ordernumber} = $ordernumber; >+ return $orderinfo; > } > > >@@ -1388,18 +1392,30 @@ sub ModReceiveOrder { > > $sth->execute($order->{quantity} - $quantrec, $ordernumber); > >- $sth->finish; >+ $order->{quantity} -= $quantrec; >+ >+ UpdateMarcOrder( { >+ biblionumber => $biblionumber, >+ order => $order, >+ } ); > > delete $order->{'ordernumber'}; > $order->{'quantity'} = $quantrec; >+ $order->{'orderstatus'} = 3; # totally received > $order->{'quantityreceived'} = $quantrec; > $order->{'datereceived'} = $datereceived; > $order->{'invoiceid'} = $invoiceid; > $order->{'unitprice'} = $cost; > $order->{'rrp'} = $rrp; > $order->{ecost} = $ecost; >- $order->{'orderstatus'} = 3; # totally received >- $new_ordernumber = NewOrder($order); >+ >+ my $neworder = NewOrder( $order ); >+ my $newordernumber = $neworder->{ordernumber}; >+ >+ UpdateMarcOrder( { >+ biblionumber => $biblionumber, >+ order => $order, >+ } ); > > if ($received_items) { > foreach my $itemnumber (@$received_items) { >@@ -1407,68 +1423,18 @@ sub ModReceiveOrder { > } > } > >- # create a new order for the remaining items, and set its bookfund. >- foreach my $orderkey ( "linenumber", "allocation" ) { >- delete($order->{'$orderkey'}); >- } >- $order->{'quantity'} -= $quantrec; >- $order->{'quantityreceived'} = 0; >- >- my ($newOrder, $newordernumber) = NewOrder($order); >- # Change ordernumber in aqorders_items for items not received >- my @orderitems = GetItemnumbersFromOrder( $order->{'ordernumber'} ); >- my $count = scalar @orderitems; >- >- for (my $i=0; $i<$count; $i++){ >- foreach (@$received_items){ >- splice (@orderitems, $i, 1) if ($orderitems[$i] == $_); >- } >- } >- foreach (@orderitems) { >- ModItemOrder($_, $newOrder); >- } >- >- # Do we have to update order informations from the marc record? >- my ($ordertag, $ordersubtag) = GetMarcFromKohaField('aqorders.ordernumber', 'ACQ'); >- >- # Updating MARC order field if exists >- if ($ordertag and $ordersubtag) { >- $debug and warn "updating MARC"; >- # Getting record >- my $record = GetMarcBiblio($biblionumber); >- if ($record) { >- $debug and warn "updating Record"; >- foreach ($record->field($ordertag)) { >- if ($_->subfield($ordersubtag) eq $ordernumber) { >- # Updating ordernumber >- $debug and warn "updating ordernumber $ordernumber => $newordernumber"; >- $_->update($ordersubtag => $newordernumber); >- >- # Updating quantity >- my ($quantitytag, $quantitysubtag) = GetMarcFromKohaField('aqorders.quantity', 'ACQ'); >- if ($quantitysubtag) { >- $debug and warn "updating quantity " . $order->{quantity}; >- $_->update($quantitysubtag => $order->{quantity}); >- } >- } >- } >- >- # Applying changes >- ModBiblio($record, $biblionumber, 'ACQ'); >- } >- } >- >- > } else { > $sth=$dbh->prepare("update aqorders > set quantityreceived=?,datereceived=?,invoiceid=?, > unitprice=?,rrp=?,ecost=? > where biblionumber=? and ordernumber=?"); > $sth->execute($quantrec,$datereceived,$invoiceid,$cost,$rrp,$ecost,$biblionumber,$ordernumber); >- $sth->finish; > > # Removing MARC order field if exists >- DelMarcOrder($biblionumber, $ordernumber); >+ DelMarcOrder({ >+ biblionumber => $biblionumber, >+ ordernumber => $ordernumber >+ } ); > } > return ($datereceived, $new_ordernumber); > } >@@ -1520,6 +1486,8 @@ sub CancelReceipt { > }; > $sth = $dbh->prepare($query); > $sth->execute(0, undef, undef, $ordernumber); >+ >+ UpdateMarcOrder( { ordernumber => $ordernumber } ); > } else { > # The order line has a parent, increase parent quantity and delete > # the order line. >@@ -1582,6 +1550,8 @@ sub CancelReceipt { > $sth = $dbh->prepare($query); > $sth->execute($ordernumber); > >+ DelMarcOrder( { ordernumber => $ordernumber } ); >+ UpdateMarcOrder( { ordernumber => $parent_ordernumber } ); > } > > return $parent_ordernumber; >@@ -1690,7 +1660,10 @@ sub DelOrder { > $sth->finish; > > # Removing MARC order field if exists >- DelMarcOrder($bibnum, $ordernumber); >+ DelMarcOrder( { >+ biblionumber => $bibnum, >+ ordernumber => $ordernumber, >+ } ); > > my @itemnumbers = GetItemnumbersFromOrder( $ordernumber ); > foreach my $itemnumber (@itemnumbers){ >@@ -1711,7 +1684,13 @@ in parameter > =cut > > sub DelMarcOrder { >- my ($biblionumber, $ordernumber) = @_; >+ my ( $params ) = @_; >+ my $biblionumber = $params->{biblionumber}; >+ my $ordernumber = $params->{ordernumber}; >+ >+ unless ( $biblionumber ) { >+ $biblionumber = GetBiblionumberFromOrdernumber( $ordernumber ); >+ } > > # Do we have to remove order informations from the marc record? > my ($ordertag, $ordersubtag) = GetMarcFromKohaField('aqorders.ordernumber', 'ACQ'); >@@ -1722,9 +1701,9 @@ sub DelMarcOrder { > my $record = GetMarcBiblio($biblionumber); > if ($record) { > # Looking for the right field >- foreach ($record->field($ordertag)) { >- if ($_->subfield($ordersubtag) eq $ordernumber) { >- $record->delete_field($_); >+ foreach my $field ( $record->field($ordertag) ) { >+ if ($field->subfield($ordersubtag) eq $ordernumber) { >+ $record->delete_field($field); > } > } > # Applying changes >@@ -1733,6 +1712,70 @@ sub DelMarcOrder { > } > } > >+sub GetBiblionumberFromOrdernumber { >+ my $ordernumber = shift; >+ my $dbh = C4::Context->dbh; >+ my $biblionumber = $dbh->selectrow_array(q| >+ SELECT biblionumber >+ FROM aqorders >+ WHERE ordernumber = ? >+ |, {}, $ordernumber ); >+ >+ return $biblionumber; >+} >+ >+sub UpdateMarcOrder { >+ my ( $params ) = @_; >+ my $biblionumber = $params->{biblionumber}; >+ my $order = $params->{order}; >+ my $ordernumber = $params->{ordernumber}; >+ my $old_ordernumber = $params->{old_ordernumber}; >+ >+ if ( $ordernumber and not $order ) { >+ $order = GetOrder( $ordernumber ); >+ } >+ unless ( $order ) { >+ carp "A parameter is missing, ordernumber or order is required"; >+ return; >+ } >+ unless ( $biblionumber ) { >+ $biblionumber = GetBiblionumberFromOrdernumber( $ordernumber ); >+ } >+ $old_ordernumber ||= $order->{ordernumber}; >+ >+ # Do we have to update order informations from the marc record? >+ my ($ordertag, $ordersubtag) = GetMarcFromKohaField('aqorders.ordernumber', 'ACQ'); >+ >+ return 0 unless $ordertag or $ordersubtag; >+ >+ # Updating MARC order field if exists >+ my $record = GetMarcBiblio($biblionumber); >+ return unless $record; >+ my $matching_field; >+ foreach my $field ($record->field($ordertag)) { >+ if ( $field->subfield($ordersubtag) eq $old_ordernumber ) { >+ $matching_field = $field; >+ last; >+ } >+ } >+ >+ unless ( $matching_field ) { >+ $matching_field = MARC::Field->new( $ordertag, '', '', $ordersubtag => $order->{ordernumber} ); >+ $record->insert_fields_ordered( $matching_field ); >+ } >+ # Updating ordernumber >+ $matching_field->update($ordersubtag => $order->{ordernumber}); >+ >+ # Updating quantity >+ my ($quantitytag, $quantitysubtag) = GetMarcFromKohaField('aqorders.quantity', 'ACQ'); >+ if ($quantitysubtag) { >+ $matching_field->update($quantitysubtag => $order->{quantity}); >+ } >+ >+ # Applying changes >+ ModBiblio($record, $biblionumber, 'ACQ'); >+} >+ > =head2 FUNCTIONS ABOUT PARCELS > > =cut >diff --git a/acqui/addorder.pl b/acqui/addorder.pl >index 932c901..19c0776 100755 >--- a/acqui/addorder.pl >+++ b/acqui/addorder.pl >@@ -194,6 +194,7 @@ if ( $orderinfo->{quantity} ne '0' ) { > "biblioitems.editionstatement"=> $$orderinfo{editionstatement}? $$orderinfo{editionstatement}: "", > "aqorders.branchcode" => $$orderinfo{branchcode} ? $$orderinfo{branchcode} : "", > "aqorders.quantity" => $$orderinfo{quantity} ? $$orderinfo{quantity} : "", >+ "aqorders.quantityreceived" => $$orderinfo{quantityreceived}? $$orderinfo{quantityreceived}: "", > "aqorders.listprice" => $$orderinfo{listprice} ? $$orderinfo{listprice} : "", > "aqorders.uncertainprice" => $$orderinfo{uncertainprice} ? $$orderinfo{uncertainprice} : "", > "aqorders.rrp" => $$orderinfo{rrp} ? $$orderinfo{rrp} : "", >@@ -224,66 +225,62 @@ if ( $orderinfo->{quantity} ne '0' ) { > # Getting record > $record = GetMarcBiblio($orderinfo->{biblionumber}); > >- >- >- # if we already have $ordernumber, then it's an ordermodif >+ # if we already have $ordernumber, then it's an ordermodif > if ( $orderinfo->{ordernumber} ) { > ModOrder($orderinfo); > $ordermodif = 1; > > } else { # else, it's a new line >- @$orderinfo{qw(basketno ordernumber )} = NewOrder($orderinfo); >+ my $neworder = NewOrder($orderinfo); >+ $orderinfo->{basketno} = $neworder->{basketno}; >+ $orderinfo->{ordernumber} = $neworder->{ordernumber}; > > # We have to add the ordernumber in the designated subfield >- if ($ordertag && $record && !$ordermodif) { >+ if ( $ordertag and $record ) { > > # If it's a new line, but we don't have any $ordertag field yet, >- if (!$record->field($ordertag)) { >+ if ( not $record->field($ordertag) ) { > # We add a new $ordertag field, with the ordernumber as subfield (other fields will be populated later) > $record->insert_fields_ordered(new MARC::Field($ordertag, '', '', $ordersubtag => $orderinfo->{ordernumber})) if (!$record->field($ordertag)); > } else { > # Else, it's a new line, and we already have a $ordertag field >- foreach ($record->field($ordertag)) { >+ foreach my $field ( $record->field($ordertag) ) { > # If there's a $ordertag field without ordernumber, we create it >- if (!$_->subfield($ordersubtag)) { >- $_->update($ordersubtag, $orderinfo->{ordernumber}); >+ if ( not $field->subfield($ordersubtag) ) { >+ $field->update($ordersubtag, $orderinfo->{ordernumber}); > } > } > } > ModBiblio($record, $orderinfo->{biblionumber}, 'ACQ'); > } >- >- > } > > if ($record) { >- > # If we have to add order infos to the marc record > if ($ordertag) { >- > # If the order was made on an existing biblio and it is not a modification, we add the field >- $record->insert_fields_ordered(new MARC::Field($ordertag, '', '', $ordersubtag => $$orderinfo{ordernumber})) if (!$ordermodif && $existingbiblio); >+ if ( not $ordermodif and $existingbiblio and not $record->field($ordertag) ) { >+ $record->insert_fields_ordered(new MARC::Field($ordertag, '', '', $ordersubtag => $$orderinfo{ordernumber})) >+ } > >- foreach ($record->field($ordertag)) { >+ foreach my $field ($record->field($ordertag)) { > # Looking for the matching one >- if ($_->subfield($ordersubtag) eq $orderinfo->{ordernumber}) { >+ if ($field->subfield($ordersubtag) eq $orderinfo->{ordernumber}) { > > # Replacing or creating subfields > my ($t, $st); >- for my $tablefield (qw/branchcode quantity listprice uncertainprice rrp ecost notes supplierreference sort1 sort2/) { >+ for my $tablefield (qw/branchcode quantity quantityreceived listprice uncertainprice rrp ecost notes supplierreference sort1 sort2/) { > ($t, $st) = GetMarcFromKohaField("aqorders.$tablefield", 'ACQ'); >- $_->update($st, $orderinfo->{$tablefield}) if ($orderinfo->{$tablefield} and $st); >+ $field->update($st, $orderinfo->{$tablefield}) >+ if $orderinfo->{$tablefield} and $st; > } > ModBiblio($record, $orderinfo->{biblionumber}, 'ACQ'); > } > } >- > } >- > } > >- >- # now, add items if applicable >+ # now, add items if applicable > if ( C4::Context->preference('AcqCreateItem') eq 'ordering' ) { > > my @tags = $input->param('tag'); >diff --git a/acqui/addorderiso2709.pl b/acqui/addorderiso2709.pl >index abfb870..c234b65 100755 >--- a/acqui/addorderiso2709.pl >+++ b/acqui/addorderiso2709.pl >@@ -233,8 +233,9 @@ if ($op eq ""){ > > # remove uncertainprice flag if we have found a price in the MARC record > $orderinfo{uncertainprice} = 0 if $orderinfo{listprice}; >- my $basketno; >- ( $basketno, $ordernumber ) = NewOrder( \%orderinfo ); >+ my $order = NewOrder( \%orderinfo ); >+ my $basketno = $order->{basketno}; >+ $ordernumber = $order->{ordernumber}; > > # 4th, add items if applicable > # parse the item sent by the form, and create an item just for the import_record_id we are dealing with >diff --git a/t/db_dependent/lib/KohaTest/Acquisition.pm b/t/db_dependent/lib/KohaTest/Acquisition.pm >index e7618c9..9507695 100644 >--- a/t/db_dependent/lib/KohaTest/Acquisition.pm >+++ b/t/db_dependent/lib/KohaTest/Acquisition.pm >@@ -76,7 +76,7 @@ sub create_new_basket { > # $basketnote, $basketbooksellernote, $basketcontractnumber ); > # The following keys are used: "biblionumber", "title", "basketno", "quantity", "notes", "biblioitemnumber", "rrp", "ecost", "gst", "unitprice", "subscription", "sort1", "sort2", "booksellerinvoicenumber", "listprice", "budgetdate", "purchaseordernumber", "branchcode", "booksellerinvoicenumber", "bookfundid". > my $budget_id = AddBudget( { budget_name => "Budget $rand" } ); >- my ( undef, $ordernumber ) = NewOrder( { >+ my $order = NewOrder( { > basketno => $basketno, > budget_id => $budget_id, > biblionumber => $self->{'biblios'}[0], >@@ -86,6 +86,7 @@ sub create_new_basket { > ecost => 1, > booksellerinvoicenumber => $param{'invoice'}, > } ); >+ my $ordernumber = $order->{ordernumber}; > ok( $basketno, "my basket number is $basketno" ); > ok( $ordernumber, "my order number is $ordernumber" ); > >diff --git a/t/db_dependent/lib/KohaTest/Acquisition/NewOrder.pm b/t/db_dependent/lib/KohaTest/Acquisition/NewOrder.pm >index 972cde2..803ab9a 100644 >--- a/t/db_dependent/lib/KohaTest/Acquisition/NewOrder.pm >+++ b/t/db_dependent/lib/KohaTest/Acquisition/NewOrder.pm >@@ -25,7 +25,8 @@ sub new_order_no_budget : Test( 4 ) { > localtime->year() + 1900, > localtime->mon() + 1, > localtime->mday() ); >- my ( $basketno, $ordernumber ) = NewOrder( undef, # $basketno, >+ >+ my $order = NewOrder( undef, # $basketno, > 1, # $bibnum, > undef, # $title, > undef, # $quantity, >@@ -47,6 +48,8 @@ sub new_order_no_budget : Test( 4 ) { > undef, # $purchaseorder, > undef, # $branchcode > ); >+ my $basketno = $order->{basketno}; >+ my $ordernumber = $order->{ordernumber}; > ok( $basketno, "my basket number is $basketno" ); > ok( $ordernumber, "my order number is $ordernumber" ); > >@@ -73,7 +76,7 @@ sub new_order_set_budget : Test( 4 ) { > localtime->year() + 1900, > localtime->mon() + 1, > localtime->mday() ); >- my ( $basketno, $ordernumber ) = NewOrder( undef, # $basketno, >+ my $order = NewOrder( undef, # $basketno, > 1, # $bibnum, > undef, # $title, > undef, # $quantity, >@@ -95,6 +98,8 @@ sub new_order_set_budget : Test( 4 ) { > undef, # $purchaseorder, > undef, # $branchcode > ); >+ my $basketno = $order->{basketno}; >+ my $ordernumber = $order->{ordernumber}; > ok( $basketno, "my basket number is $basketno" ); > ok( $ordernumber, "my order number is $ordernumber" ); > >-- >1.7.10.4
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 7294
:
7773
|
7834
|
8084
|
8345
|
8916
|
8922
|
9980
|
10121
|
10745
|
11661
|
12301
|
12302
|
12303
|
12332
|
14072
|
14076
|
14918
|
16017
|
16247
|
16464
| 17313