[Koha-patches] [PATCH] bug_3966: Update items on receive

Srdjan srdjan at catalyst.net.nz
Thu Mar 22 08:24:18 CET 2012


Put back "-" button for partial receiving
Changed AddItem() and ModItem() interface so now they return item
record.
AddItemFromMarc() looks for itemnumber, and calls ModItem() if one is
found.
---
 C4/Acquisition.pm                                  |   51 +++-------
 C4/Biblio.pm                                       |    2 -
 C4/ImportBatch.pm                                  |    4 +-
 C4/Items.pm                                        |   25 +++--
 acqui/addorder.pl                                  |    5 +-
 acqui/addorderiso2709.pl                           |    4 +-
 acqui/finishreceive.pl                             |  105 ++++++++++++--------
 acqui/orderreceive.pl                              |   63 ++++++-------
 cataloguing/additem.pl                             |    8 +-
 .../prog/en/modules/acqui/orderreceive.tt          |   51 +++++-----
 t/db_dependent/lib/KohaTest.pm                     |   16 +--
 .../lib/KohaTest/Acquisition/GetParcel.pm          |   17 +---
 .../lib/KohaTest/Acquisition/GetParcels.pm         |   18 +---
 t/db_dependent/lib/KohaTest/Biblio/ModBiblio.pm    |    6 +-
 14 files changed, 179 insertions(+), 196 deletions(-)

diff --git a/C4/Acquisition.pm b/C4/Acquisition.pm
index 4fd5cc2..cd64368 100644
--- a/C4/Acquisition.pm
+++ b/C4/Acquisition.pm
@@ -1118,16 +1118,14 @@ sub GetCancelledOrders {
 
 =head3 ModReceiveOrder
 
-  &ModReceiveOrder($biblionumber, $ordernumber, $quantityreceived, $user,
-    $unitprice, $booksellerinvoicenumber, $biblioitemnumber,
-    $freight, $bookfund, $rrp);
+  &ModReceiveOrder($biblionumber, $ordernumber, $quantityreceived, $receiveditems);
 
 Updates an order, to reflect the fact that it was received, at least
-in part. All arguments not mentioned below update the fields with the
-same name in the aqorders table of the Koha database.
+in part.
 
 If a partial order is received, splits the order into two.  The received
-portion must have a booksellerinvoicenumber.
+portion must have a booksellerinvoicenumber. If $receiveditems are supplied,
+the rest of the items will be moved to the new order.
 
 Updates the order with bibilionumber C<$biblionumber> and ordernumber
 C<$ordernumber>.
@@ -1136,13 +1134,9 @@ C<$ordernumber>.
 
 
 sub ModReceiveOrder {
-    my (
-        $biblionumber,    $ordernumber,  $quantrec, $user, $cost,
-        $invoiceno, $freight, $rrp, $budget_id, $datereceived
-    )
-    = @_;
+    my ( $biblionumber, $ordernumber,  $quantrec, $receiveditems ) = @_;
     my $dbh = C4::Context->dbh;
-    $datereceived = C4::Dates->output('iso') unless $datereceived;
+
     my $suggestionid = GetSuggestionFromBiblionumber( $dbh, $biblionumber );
     if ($suggestionid) {
         ModSuggestion( {suggestionid=>$suggestionid,
@@ -1160,36 +1154,23 @@ sub ModReceiveOrder {
     $sth->finish();
 
     if ( $order->{quantity} > $quantrec ) {
-        $sth=$dbh->prepare("
-            UPDATE aqorders
-            SET quantityreceived=?
-                , datereceived=?
-                , booksellerinvoicenumber=?
-                , unitprice=?
-                , freight=?
-                , rrp=?
-                , quantity=?
-            WHERE biblionumber=? AND ordernumber=?");
-
-        $sth->execute($quantrec,$datereceived,$invoiceno,$cost,$freight,$rrp,$quantrec,$biblionumber,$ordernumber);
-        $sth->finish;
-
         # 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 = NewOrder($order);
-} else {
-        $sth=$dbh->prepare("update aqorders
-                            set quantityreceived=?,datereceived=?,booksellerinvoicenumber=?,
-                                unitprice=?,freight=?,rrp=?
-                            where biblionumber=? and ordernumber=?");
-        $sth->execute($quantrec,$datereceived,$invoiceno,$cost,$freight,$rrp,$biblionumber,$ordernumber);
-        $sth->finish;
+        my (undef, $newOrder) = NewOrder($order);
+
+        if ($receiveditems && @$receiveditems) {
+            my $sql = "
+                UPDATE aqorders_items
+                SET ordernumber = ?
+                WHERE ordernumber = ?
+                AND itemnumber NOT IN (".join(",", map "?", @$receiveditems).")";
+            $dbh->do($sql, undef, $newOrder, $ordernumber, @$receiveditems);
+        }
     }
-    return $datereceived;
 }
 #------------------------------------------------------------#
 
diff --git a/C4/Biblio.pm b/C4/Biblio.pm
index 39a2b7a..234bc55 100644
--- a/C4/Biblio.pm
+++ b/C4/Biblio.pm
@@ -2600,8 +2600,6 @@ sub TransformMarcToKohaOneField {
 }
 
 
-#"
-
 #
 # true ModZebra commented until indexdata fixes zebraDB crashes (it seems they occur on multiple updates
 # at the same time
diff --git a/C4/ImportBatch.pm b/C4/ImportBatch.pm
index 63cc60b..cc054ad 100644
--- a/C4/ImportBatch.pm
+++ b/C4/ImportBatch.pm
@@ -547,10 +547,10 @@ sub BatchCommitItems {
             $updsth->execute();
             $num_items_errored++;
         } else {
-            my ($item_biblionumber, $biblioitemnumber, $itemnumber) = AddItemFromMarc($item_marc, $biblionumber);
+            my $item = AddItemFromMarc($item_marc, $biblionumber);
             my $updsth = $dbh->prepare("UPDATE import_items SET status = ?, itemnumber = ? WHERE import_items_id = ?");
             $updsth->bind_param(1, 'imported');
-            $updsth->bind_param(2, $itemnumber);
+            $updsth->bind_param(2, $item->{itemnumber});
             $updsth->bind_param(3, $row->{'import_items_id'});
             $updsth->execute();
             $updsth->finish();
diff --git a/C4/Items.pm b/C4/Items.pm
index 2f32c98..60c8d1f 100644
--- a/C4/Items.pm
+++ b/C4/Items.pm
@@ -195,11 +195,11 @@ sub CartToShelf {
 
 =head2 AddItemFromMarc
 
-  my ($biblionumber, $biblioitemnumber, $itemnumber) 
-      = AddItemFromMarc($source_item_marc, $biblionumber);
+  my $item = AddItemFromMarc($source_item_marc, $biblionumber);
 
 Given a MARC::Record object containing an embedded item
-record and a biblionumber, create a new item record.
+record and a biblionumber, create a new item record or update
+existing one.
 
 =cut
 
@@ -215,13 +215,15 @@ sub AddItemFromMarc {
 	$localitemmarc->append_fields($source_item_marc->field($itemtag));
     my $item = &TransformMarcToKoha( $dbh, $localitemmarc, $frameworkcode ,'items');
     my $unlinked_item_subfields = _get_unlinked_item_subfields($localitemmarc, $frameworkcode);
+    if (my $itemnumber = $item->{itemnumber}) {
+        return ModItem($item, $biblionumber, $itemnumber, $dbh, $frameworkcode, $unlinked_item_subfields);
+    }
     return AddItem($item, $biblionumber, $dbh, $frameworkcode, $unlinked_item_subfields);
 }
 
 =head2 AddItem
 
-  my ($biblionumber, $biblioitemnumber, $itemnumber) 
-      = AddItem($item, $biblionumber[, $dbh, $frameworkcode, $unlinked_item_subfields]);
+  my $item = AddItem($item, $biblionumber[, $dbh, $frameworkcode, $unlinked_item_subfields]);
 
 Given a hash containing item column names as keys,
 create a new Koha item record.
@@ -273,7 +275,7 @@ sub AddItem {
    
     logaction("CATALOGUING", "ADD", $itemnumber, "item") if C4::Context->preference("CataloguingLog");
     
-    return ($item->{biblionumber}, $item->{biblioitemnumber}, $itemnumber);
+    return $item;
 }
 
 =head2 AddItemBatchFromMarc
@@ -452,6 +454,7 @@ sub ModItemFromMarc {
         $item->{$item_field} = $default_values_for_mod_from_marc{$item_field} unless (exists $item->{$item_field});
     }
     my $unlinked_item_subfields = _get_unlinked_item_subfields( $localitemmarc, $frameworkcode );
+    $itemnumber ||= $item->{itemnumber};
 
     ModItem($item, $biblionumber, $itemnumber, $dbh, $frameworkcode, $unlinked_item_subfields); 
     return $item;
@@ -459,7 +462,7 @@ sub ModItemFromMarc {
 
 =head2 ModItem
 
-  ModItem({ column => $newvalue }, $biblionumber, $itemnumber);
+  my $item = ModItem({ column => $newvalue }, $biblionumber, $itemnumber);
 
 Change one or more columns in an item record and update
 the MARC representation of the item.
@@ -522,6 +525,8 @@ sub ModItem {
     ModZebra( $biblionumber, "specialUpdate", "biblioserver", undef, undef );
 
     logaction("CATALOGUING", "MODIFY", $itemnumber, Dumper($item)) if C4::Context->preference("CataloguingLog");
+
+    return $item;
 }
 
 =head2 ModItemTransfer
@@ -2535,7 +2540,7 @@ sub _find_value {
 
 =head2 PrepareItemrecordDisplay
 
-  PrepareItemrecordDisplay($itemrecord,$bibnum,$itemumber,$frameworkcode);
+  PrepareItemrecordDisplay(bibnum,$itemumber,$itemrecord,$$frameworkcode);
 
 Returns a hash with all the fields for Display a given item data in a template
 
@@ -2714,14 +2719,14 @@ sub PrepareItemrecordDisplay {
                             $subfield_data{random}     = int(rand(1000000));    # why do we need 2 different randoms?
                             my $index_subfield = int(rand(1000000));
                             $subfield_data{id} = "tag_".$tag."_subfield_".$subfield."_".$index_subfield;
-                            $subfield_data{marc_value} = qq[<input tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255"
+                            $subfield_data{marc_value} = qq[<input tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255" value="$defaultvalue"
                                 onfocus="Focus$function_name($subfield_data{random}, '$subfield_data{id}');"
                                  onblur=" Blur$function_name($subfield_data{random}, '$subfield_data{id}');" />
                                 <a href="#" class="buttonDot" onclick="Clic$function_name('$subfield_data{id}'); return false;" title="Tag Editor">...</a>
                                 $javascript];
                         } else {
                             warn "Plugin Failed: $plugin";
-                            $subfield_data{marc_value} = qq(<input tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255" />); # supply default input form
+                            $subfield_data{marc_value} = qq(<input tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255" value="$defaultvalue" />); # supply default input form
                         }
                 }
                 elsif ( $tag eq '' ) {       # it's an hidden field
diff --git a/acqui/addorder.pl b/acqui/addorder.pl
index 279084b..e977c23 100755
--- a/acqui/addorder.pl
+++ b/acqui/addorder.pl
@@ -262,9 +262,8 @@ if ( $orderinfo->{quantity} ne '0' ) {
                                     $itemhash{$item}->{'indicator'},
                                     'ITEM');
             my $record=MARC::Record::new_from_xml($xml, 'UTF-8');
-            my ($biblionumber,$bibitemnum,$itemnumber) = AddItemFromMarc($record,$$orderinfo{biblionumber});
-            NewOrderItem($itemnumber, $$orderinfo{ordernumber});
-
+            my $item = AddItemFromMarc($record,$$orderinfo{biblionumber});
+            NewOrderItem($item->{itemnumber}, $$orderinfo{ordernumber});
         }
     }
 
diff --git a/acqui/addorderiso2709.pl b/acqui/addorderiso2709.pl
index 8d9c0e3..ef17469 100755
--- a/acqui/addorderiso2709.pl
+++ b/acqui/addorderiso2709.pl
@@ -259,8 +259,8 @@ if ($op eq ""){
             my $xml = TransformHtmlToXml( \@tags, \@subfields, \@field_values, \@ind_tag, \@indicator );
             my $record = MARC::Record::new_from_xml( $xml, 'UTF-8' );
             for (my $qtyloop=1;$qtyloop <=$quantity;$qtyloop++) {
-                my ( $biblionumber, $bibitemnum, $itemnumber ) = AddItemFromMarc( $record, $biblionumber );
-                NewOrderItem( $itemnumber, $ordernumber );
+                my $item = AddItemFromMarc( $record, $biblionumber );
+                NewOrderItem( $item->{itemnumber}, $ordernumber );
             }
         } else {
             SetImportRecordStatus( $biblio->{'import_record_id'}, 'imported' );
diff --git a/acqui/finishreceive.pl b/acqui/finishreceive.pl
index d09a40a..21b2a07 100755
--- a/acqui/finishreceive.pl
+++ b/acqui/finishreceive.pl
@@ -26,10 +26,10 @@ use CGI;
 use C4::Auth;
 use C4::Output;
 use C4::Context;
+use C4::Dates;
 use C4::Acquisition;
 use C4::Biblio;
 use C4::Items;
-use C4::Search;
 use List::MoreUtils qw/any/;
 
 my $input=new CGI;
@@ -46,57 +46,79 @@ my $quantityrec=$input->param('quantityrec');
 my $quantity=$input->param('quantity');
 my $unitprice=$input->param('cost');
 my $invoiceno=$input->param('invoice');
-my $datereceived=$input->param('datereceived');
+my $datereceived=$input->param('datereceived') || C4::Dates->output('iso');
 my $replacement=$input->param('rrp');
 my $gst=$input->param('gst');
 my $freight=$input->param('freight');
 my $booksellerid = $input->param('booksellerid');
 my $cnt=0;
-my $error_url_str;
+my $error_url_str = '';
 my $ecost = $input->param('ecost');
 my $note = $input->param("note");
 
+my $order = GetOrder($ordernumber);
+$order->{booksellerinvoicenumber} = $invoiceno;
+$order->{datereceived} = $datereceived;
+$order->{freight} = $freight;
+$order->{quantity} = $quantity;
+$order->{quantityreceived} = $quantityrec;
+$order->{notes} = $note;
+$order->{rrp} = $replacement;
+$order->{ecost} = $ecost;
+$order->{unitprice} = $unitprice;
+ModOrder($order);
+
 #need old recievedate if we update the order, parcel.pl only shows the right parcel this way FIXME
-if ($quantityrec > $origquantityrec ) {
-    # now, add items if applicable
-    if (C4::Context->preference('AcqCreateItem') eq 'receiving') {
-
-        my @tags         = $input->param('tag');
-        my @subfields    = $input->param('subfield');
-        my @field_values = $input->param('field_value');
-        my @serials      = $input->param('serial');
-        my @itemid       = $input->param('itemid');
-        my @ind_tag      = $input->param('ind_tag');
-        my @indicator    = $input->param('indicator');
-        #Rebuilding ALL the data for items into a hash
-        # parting them on $itemid.
-        my %itemhash;
-        my $countdistinct;
-        my $range=scalar(@itemid);
-        for (my $i=0; $i<$range; $i++){
-            unless ($itemhash{$itemid[$i]}){
-            $countdistinct++;
-            }
-            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];
-        }
-        foreach my $item (keys %itemhash){
-            my $xml = TransformHtmlToXml( $itemhash{$item}->{'tags'},
-                                          $itemhash{$item}->{'subfields'},
-                                          $itemhash{$item}->{'field_values'},
-                                          $itemhash{$item}->{'ind_tag'},
-                                          $itemhash{$item}->{'indicator'},'ITEM');
-            my $record=MARC::Record::new_from_xml($xml, 'UTF-8');
-            my (undef,$bibitemnum,$itemnumber) = AddItemFromMarc($record,$biblionumber);
-            NewOrderItem($itemnumber, $ordernumber);
-        }
+
+# now, add or update items if applicable
+my @tags         = $input->param('tag');
+my @subfields    = $input->param('subfield');
+my @field_values = $input->param('field_value');
+my @serials      = $input->param('serial');
+my @itemid       = $input->param('itemid');
+my @ind_tag      = $input->param('ind_tag');
+my @indicator    = $input->param('indicator');
+#Rebuilding ALL the data for items into a hash
+# parting them on $itemid.
+my %itemhash;
+my $countdistinct;
+my $range=scalar(@itemid);
+for (my $i=0; $i<$range; $i++){
+    unless ($itemhash{$itemid[$i]}){
+        $countdistinct++;
+    }
+    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 $error;
+my %itemnumbers = map { $_ => 1 } GetItemnumbersFromOrder($ordernumber);
+my @received;
+foreach my $id (keys %itemhash){
+    my $xml = TransformHtmlToXml( $itemhash{$id}->{'tags'},
+                                  $itemhash{$id}->{'subfields'},
+                                  $itemhash{$id}->{'field_values'},
+                                  $itemhash{$id}->{'ind_tag'},
+                                  $itemhash{$id}->{'indicator'},'ITEM');
+    my $record=MARC::Record::new_from_xml($xml, 'UTF-8');
+    my $item = AddItemFromMarc($record,$biblionumber);
+    my $itemnumber = $item ? $item->{itemnumber} : undef;
+    if ($itemnumber) {
+        push @received, $itemnumber;
+        NewOrderItem($itemnumber, $ordernumber) unless $itemnumbers{$itemnumber};
+    } else {
+        $error++;
     }
-    
+}
+
+if ($error) {
+    $error_url_str = "&error=Datbase+write+error";
+}
+else {
     # save the quantity received.
-    $datereceived = ModReceiveOrder($biblionumber,$ordernumber, $quantityrec ,$user,$unitprice,$invoiceno,$freight,$replacement,undef,$datereceived);
+    ModReceiveOrder($biblionumber,$ordernumber, $quantityrec, \@received);
 }
 
 update_item( $_ ) foreach GetItemnumbersFromOrder( $ordernumber );
@@ -116,3 +138,4 @@ sub update_item {
         replacementpricedate => $datereceived,
     }, $biblionumber, $itemnumber );
 }
+
diff --git a/acqui/orderreceive.pl b/acqui/orderreceive.pl
index 659c103..3f2995d 100755
--- a/acqui/orderreceive.pl
+++ b/acqui/orderreceive.pl
@@ -87,21 +87,13 @@ my $search       = $input->param('receive');
 my $invoice      = $input->param('invoice');
 my $freight      = $input->param('freight');
 my $datereceived = $input->param('datereceived');
-
-
 $datereceived = $datereceived ? C4::Dates->new($datereceived, 'iso') : C4::Dates->new();
 
 my $bookseller = GetBookSellerFromId($booksellerid);
 my $input_gst = ($input->param('gst') eq '' ? undef : $input->param('gst'));
 my $gst= $input_gst // $bookseller->{gstrate} // C4::Context->preference("gist") // 0;
 my $results = SearchOrder($ordernumber,$search);
-
-
 my $count   = scalar @$results;
-my $order 	= GetOrder($ordernumber);
-
-
-my $date = @$results[0]->{'entrydate'};
 
 my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
     {
@@ -116,24 +108,27 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
 
 # prepare the form for receiving
 if ( $count == 1 ) {
-    if (C4::Context->preference('AcqCreateItem') eq 'receiving') {
+    my $order 	= GetOrder($results->[0]->{ordernumber});
+    my $biblionumber = $order->{biblionumber};
+
+    my @itemloop;
+    if ( my @itemnumbers = GetItemnumbersFromOrder($ordernumber) ) {
+        @itemloop = map PrepareItemrecordDisplay($biblionumber,$_), @itemnumbers;
+    }
+    elsif (C4::Context->preference('AcqCreateItem') eq 'receiving') {
         # prepare empty item form
         my $cell = PrepareItemrecordDisplay('','','','ACQ');
         unless ($cell) {
             $cell = PrepareItemrecordDisplay('','','','');
             $template->param('NoACQframework' => 1);
         }
-        my @itemloop;
         push @itemloop,$cell;
-        
-        $template->param(items => \@itemloop);
     }
+        
+    $template->param(items => \@itemloop) if @itemloop;
 
-    if ( @$results[0]->{'quantityreceived'} == 0 ) {
-        @$results[0]->{'quantityreceived'} = '';
-    }
-    if ( @$results[0]->{'unitprice'} == 0 ) {
-        @$results[0]->{'unitprice'} = '';
+    if ( $order->{'unitprice'} == 0 ) {
+        $order->{'unitprice'} = '';
     }
 
     my $suggestion   = GetSuggestionInfoFromBiblionumber(@$results[0]->{'biblionumber'});
@@ -145,26 +140,26 @@ if ( $count == 1 ) {
 
     $template->param(
         count                 => 1,
-        biblionumber          => @$results[0]->{'biblionumber'},
-        ordernumber           => @$results[0]->{'ordernumber'},
-        biblioitemnumber      => @$results[0]->{'biblioitemnumber'},
-        booksellerid            => @$results[0]->{'booksellerid'},
+        biblionumber          => $biblionumber,
+        ordernumber           => $order->{'ordernumber'},
+        biblioitemnumber      => $order->{'biblioitemnumber'},
+        booksellerid          => $booksellerid,
         freight               => $freight,
         gst                   => $gst,
         name                  => $bookseller->{'name'},
-        date                  => format_date($date),
-        title                 => @$results[0]->{'title'},
-        author                => @$results[0]->{'author'},
-        copyrightdate         => @$results[0]->{'copyrightdate'},
-        isbn                  => @$results[0]->{'isbn'},
-        seriestitle           => @$results[0]->{'seriestitle'},
-        bookfund              => $budget->{budget_name},
-        quantity              => @$results[0]->{'quantity'},
-        quantityreceivedplus1 => @$results[0]->{'quantityreceived'} + 1,
-        quantityreceived      => @$results[0]->{'quantityreceived'},
-        rrp                   => @$results[0]->{'rrp'},
-        ecost                 => @$results[0]->{'ecost'},
-        unitprice             => @$results[0]->{'unitprice'},
+        date                  => format_date($order->{'entrydate'}),
+        title                 => $order->{'title'},
+        author                => $order->{'author'},
+        copyrightdate         => $order->{'copyrightdate'},
+        isbn                  => $order->{'isbn'},
+        seriestitle           => $order->{'seriestitle'},
+        bookfund              => $order->{'bookfundid'},
+        quantity              => $order->{'quantity'},
+        quantityreceived      => scalar(@itemloop) || 1,
+        origquantityrec       => $order->{'quantityreceived'},
+        rrp                   => $order->{'rrp'},
+        ecost                 => $order->{'ecost'},
+        unitprice             => $order->{'unitprice'},
         memberfirstname       => $member->{firstname} || "",
         membersurname         => $member->{surname} || "",
         invoice               => $invoice,
diff --git a/cataloguing/additem.pl b/cataloguing/additem.pl
index 4bf06b5..8e2f81b 100755
--- a/cataloguing/additem.pl
+++ b/cataloguing/additem.pl
@@ -348,8 +348,8 @@ if ($op eq "additem") {
 	push @errors,"barcode_not_unique" if($exist_itemnumber);
 	# if barcode exists, don't create, but report The problem.
     unless ($exist_itemnumber) {
-	    my ($oldbiblionumber,$oldbibnum,$oldbibitemnum) = AddItemFromMarc($record,$biblionumber);
-        set_item_default_location($oldbibitemnum);
+	    my $item = AddItemFromMarc($record,$biblionumber);
+        set_item_default_location($item->{biblioitemnumber});
     }
 	$nextop = "additem";
 	if ($exist_itemnumber) {
@@ -416,8 +416,8 @@ if ($op eq "additem") {
 
 		# Adding the item
         if (!$exist_itemnumber) {
-            my ($oldbiblionumber,$oldbibnum,$oldbibitemnum) = AddItemFromMarc($record,$biblionumber);
-            set_item_default_location($oldbibitemnum);
+	        my $item = AddItemFromMarc($record,$biblionumber);
+            set_item_default_location($item->{biblioitemnumber});
 
             # We count the item only if it was really added
             # That way, all items are added, even if there was some already existing barcodes
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/orderreceive.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/orderreceive.tt
index 3eb3e23..6765960 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/orderreceive.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/orderreceive.tt
@@ -49,21 +49,24 @@
     [% END %]
 
     [% IF ( items ) %]
-    <fieldset class="rows">
-        <legend>Item</legend>
         [% IF ( NoACQframework ) %]
             <p class="required">No ACQ framework, using default. You should create a framework with code ACQ, the items framework would be used</p>
         [% END %]
-
+        [% itemid = 1 %]
         [% FOREACH item IN items %]
-        <div id="outeritemblock">
-        <div id="itemblock">
-            <ol>[% FOREACH iteminformatio IN item.iteminformation %]<li style="[% iteminformatio.hidden %];">
+    <fieldset class="rows">
+        <legend>Item</legend>
+        <div id="itemblock[% itemid %]">
+            <a class="addItem" onclick="cloneItemBlock('itemblock[% itemid %]')">+ Add similar</a>&nbsp;&nbsp;
+            <a style=class="delItem" onclick="deleteItemBlock('itemblock[% itemid %]')">- Remove</a>
+            <ol>
+            [% FOREACH iteminformatio IN item.iteminformation %]
+                <li style="[% iteminformatio.hidden %];">
                 <div class="subfield_line" id="subfield[% iteminformatio.serialid %][% iteminformatio.countitems %][% iteminformatio.subfield %][% iteminformatio.random %]">
                                 
                     <label>[% iteminformatio.subfield %] - [% IF ( iteminformatio.mandatory ) %]<b>[% END %][% iteminformatio.marc_lib %][% IF ( iteminformatio.mandatory ) %] *</b>[% END %]</label>
                     [% iteminformatio.marc_value %]
-                    <input type="hidden" name="itemid" value="1" />
+                    <input type="hidden" name="itemid" value="[% itemid %]" />
                     <input type="hidden" name="kohafield" value="[% iteminformatio.kohafield %]" />
                     <input type="hidden" name="tag" value="[% iteminformatio.tag %]" />
                     <input type="hidden" name="subfield" value="[% iteminformatio.subfield %]" />
@@ -73,23 +76,21 @@
                     [% END %]
             
                 </div></li>
-            [% END %]
+            [% END %]<!-- /iteminformation -->
             </ol>
-            <a class="addItem" onclick="cloneItemBlock('itemblock[% item.itemBlockIndex %]')">Add</a>
-            <a class="delItem" style="display:none;" onclick="deleteItemBlock('itemblock[% item.itemBlockIndex %]')">Delete</a>
-        </div><!-- /iteminformation -->
+
+            <input type="hidden" name="moditem" value="" /> 
+            <input type="hidden" name="tag" value="[% item.itemtagfield %]" />
+            <input type="hidden" name="subfield" value="[% item.itemtagsubfield %]" />
+            <input type="hidden" name="serial" value="[% item.serialid %]" />
+            <input type="hidden" name="bibnum" value="[% item.biblionumber %]" />
+            <input type="hidden" name="itemid" value="[% itemid %]" />
+            <input type="hidden" name="field_value" value="[% item.itemnumber %]" />
         </div>
-        
-        <input type="hidden" name="moditem" value="" /> 
-        <input type="hidden" name="tag" value="[% item.itemtagfield %]" />
-        <input type="hidden" name="subfield" value="[% item.itemtagsubfield %]" />
-        <input type="hidden" name="serial" value="[% item.serialid %]" />
-        <input type="hidden" name="bibnum" value="[% item.biblionumber %]" />
-        <input type="hidden" name="itemid" value="1" />
-        <input type="hidden" name="field_value" value="[% item.itemnumber %]" />
-        [% END %] <!-- /items -->
     </fieldset>
-    [% END %] <!-- items -->
+        [% itemid = itemid + 1 %]
+        [% END %] <!-- /items -->
+    [% END %] <!-- if items -->
     <input type="hidden" name="biblionumber" value="[% biblionumber %]" />
     <input type="hidden" name="ordernumber" value="[% ordernumber %]" />
     <input type="hidden" name="biblioitemnumber" value="[% biblioitemnumber %]" />
@@ -116,14 +117,12 @@
             [% IF ( quantityreceived ) %]
                 [% IF ( edit ) %]
                     <input type="text" size="20" name="quantityrec" id="quantity" value="[% quantityreceived %]" />
-                    <input id="origquantityrec" READONLY type="hidden" name="origquantityrec" value="[% quantityreceived %]" />
                 [% ELSE %]
                 [% IF ( items ) %]
-                    <input READONLY type="text" size="20" name="quantityrec" id="quantity" value="[% quantityreceivedplus1 %]" />
+                    <input READONLY type="text" size="20" name="quantityrec" id="quantity" value="[% quantityreceived %]" />
                 [% ELSE %]
-                    <input type="text" size="20" name="quantityrec" id="quantity" value="[% quantityreceivedplus1 %]" />
+                    <input type="text" size="20" name="quantityrec" id="quantity" value="[% quantityreceived %]" />
                 [% END %]
-                <input id="origquantityrec" READONLY type="hidden" name="origquantityrec" value="[% quantityreceived %]" />
                 [% END %]
             [% ELSE %]
                 [% IF ( items ) %]
@@ -131,8 +130,8 @@
                 [% ELSE %]
                     <input type="text" size="20" id="quantity" name="quantityrec" value="1" />
                 [% END %]
-                <input id="origquantityrec" READONLY type="hidden" name="origquantityrec" value="0" />
             [% END %]
+            <input id="origquantityrec" type="hidden" name="origquantityrec" value="[% origquantityrec %]" />
 		</li>
         <li><label for="rrp">Replacement cost: </label><input type="text" size="20" name="rrp" id="rrp" value="[% rrp %]" /></li>
         <li><label for="ecost">Budgeted cost: </label><input type="text" size="20" name="ecost" id="ecost" value="[% ecost %]" /></li>
diff --git a/t/db_dependent/lib/KohaTest.pm b/t/db_dependent/lib/KohaTest.pm
index d8cf495..c632740 100644
--- a/t/db_dependent/lib/KohaTest.pm
+++ b/t/db_dependent/lib/KohaTest.pm
@@ -572,16 +572,12 @@ sub add_biblios {
         ok( $biblionumber, "the biblionumber is $biblionumber" );
         ok( $biblioitemnumber, "the biblioitemnumber is $biblioitemnumber" );
         if ( $param{'add_items'} ) {
-            # my @iteminfo = AddItem( {}, $biblionumber );
-            my @iteminfo = AddItemFromMarc( $marcrecord, $biblionumber );
-            is( $iteminfo[0], $biblionumber,     "biblionumber is $biblionumber" );
-            is( $iteminfo[1], $biblioitemnumber, "biblioitemnumber is $biblioitemnumber" );
-            ok( $iteminfo[2], "itemnumber is $iteminfo[2]" );
-        push @{ $self->{'items'} },
-          { biblionumber     => $iteminfo[0],
-            biblioitemnumber => $iteminfo[1],
-            itemnumber       => $iteminfo[2],
-          };
+            # my $item = AddItem( {}, $biblionumber );
+            my $item = AddItemFromMarc( $marcrecord, $biblionumber );
+            is( $item->{biblionumber},     "biblionumber is $biblionumber" );
+            is( $item->{biblioitemnumber}, "biblioitemnumber is $biblioitemnumber" );
+            ok( $item->{itemnumber}, "itemnumber is $item->{itemnumber}" );
+            push @{ $self->{'items'} }, $item;
         }
         push @{$self->{'biblios'}}, $biblionumber;
     }
diff --git a/t/db_dependent/lib/KohaTest/Acquisition/GetParcel.pm b/t/db_dependent/lib/KohaTest/Acquisition/GetParcel.pm
index c26e5f2..b42ea9c 100644
--- a/t/db_dependent/lib/KohaTest/Acquisition/GetParcel.pm
+++ b/t/db_dependent/lib/KohaTest/Acquisition/GetParcel.pm
@@ -43,18 +43,11 @@ sub one_parcel : Test( 17 ) {
     
     ok( $basketno, "my basket number is $basketno" );
     ok( $ordernumber,   "my order number is $ordernumber" );
-    my $datereceived = ModReceiveOrder( $self->{'biblios'}[0],             # biblionumber
-                                        $ordernumber,       # $ordernumber,
-                                        undef,         # $quantrec,
-                                        undef,         # $user,
-                                        undef,         # $cost,
-                                        $invoice,         # $invoiceno,
-                                        undef,         # $freight,
-                                        undef,         # $rrp,
-                                        $self->{'bookfundid'},         # $bookfund,
-                                        $today,         # $datereceived
-                                   );
-    is( $datereceived, $today, "the parcel was received on $datereceived" );
+    ModReceiveOrder( $self->{'biblios'}[0],             # biblionumber
+                     $ordernumber,       # $ordernumber,
+                     1,         # $quantrec,
+                   );
+    pass( "the parcel was received" );
 
     my @parcel = GetParcel( $self->{'booksellerid'}, $invoice, $today );
     is( scalar @parcel, 1, 'we found one (1) parcel.' )
diff --git a/t/db_dependent/lib/KohaTest/Acquisition/GetParcels.pm b/t/db_dependent/lib/KohaTest/Acquisition/GetParcels.pm
index fd3ad0f..b14095f 100644
--- a/t/db_dependent/lib/KohaTest/Acquisition/GetParcels.pm
+++ b/t/db_dependent/lib/KohaTest/Acquisition/GetParcels.pm
@@ -271,18 +271,12 @@ sub create_order {
 
     my ( $basketno, $ordernumber ) = $self->create_new_basket( %param );
 
-    my $datereceived = ModReceiveOrder( $self->{'biblios'}[0],             # biblionumber
-                                        $ordernumber,       # $ordernumber,
-                                        undef,         # $quantrec,
-                                        undef,         # $user,
-                                        undef,         # $cost,
-                                        $param{'invoice'},         # $invoiceno,
-                                        undef,         # $freight,
-                                        undef,         # $rrp,
-                                        $self->{'bookfundid'},         # $bookfund,
-                                        $param{'date'},         # $datereceived
-                                   );
-    is( $datereceived, $param{'date'}, "the parcel was received on $datereceived" );
+    ModReceiveOrder( $self->{'biblios'}[0],             # biblionumber
+                     $ordernumber,       # $ordernumber,
+                     1,         # $quantrec,
+                   );
+    # XXX Needs proper tests for partial receiving
+    pass( "the parcel was received" );
 
 }
 
diff --git a/t/db_dependent/lib/KohaTest/Biblio/ModBiblio.pm b/t/db_dependent/lib/KohaTest/Biblio/ModBiblio.pm
index 5b29ea8..8a83268 100644
--- a/t/db_dependent/lib/KohaTest/Biblio/ModBiblio.pm
+++ b/t/db_dependent/lib/KohaTest/Biblio/ModBiblio.pm
@@ -31,10 +31,10 @@ sub add_bib_to_modify : Test( startup => 3 ) {
     $self->{'bib_to_modify'} = $bibnum;
 
     # add an item
-    my ($item_bibnum, $item_bibitemnum, $itemnumber) = AddItem({ homebranch => 'CPL', holdingbranch => 'CPL' } , $bibnum);
+    my $item = AddItem({ homebranch => 'CPL', holdingbranch => 'CPL' } , $bibnum);
 
-    cmp_ok($item_bibnum, '==', $bibnum, "new item is linked to correct biblionumber"); 
-    cmp_ok($item_bibitemnum, '==', $bibitemnum, "new item is linked to correct biblioitemnumber"); 
+    cmp_ok($item->{biblionumber}, '==', $bibnum, "new item is linked to correct biblionumber"); 
+    cmp_ok($item->{biblioitemnumber}, '==', $bibitemnum, "new item is linked to correct biblioitemnumber"); 
 
     $self->reindex_marc(); 
 
-- 
1.7.5.4



More information about the Koha-patches mailing list