Bugzilla – Attachment 8793 Details for
Bug 3966
receiving items should allow for entering barcode
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
patch
0001-bug_3966-Update-items-on-receive.patch (text/plain), 39.68 KB, created by
Srdjan Jankovic
on 2012-04-03 03:44:56 UTC
(
hide
)
Description:
patch
Filename:
MIME Type:
Creator:
Srdjan Jankovic
Created:
2012-04-03 03:44:56 UTC
Size:
39.68 KB
patch
obsolete
>From bf27216ce40d0e77f80c3b1c4453eebc2fa95545 Mon Sep 17 00:00:00 2001 >From: Srdjan <srdjan@catalyst.net.nz> >Date: Tue, 3 Apr 2012 15:40:48 +1200 >Subject: [PATCH] bug_3966: Update items on receive > >Use sane interface for items as when creating order. >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 | 115 +++++++++----- > acqui/orderreceive.pl | 60 ++++---- > cataloguing/additem.pl | 8 +- > .../prog/en/modules/acqui/orderreceive.tt | 157 ++++++++++---------- > .../prog/en/modules/services/itemrecorddisplay.tt | 3 +- > 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 +- > 15 files changed, 246 insertions(+), 245 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 56cd94e..8ba2807 100644 >--- a/C4/Biblio.pm >+++ b/C4/Biblio.pm >@@ -2603,8 +2603,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 0b2f99b..0f01492 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 >@@ -455,6 +457,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; >@@ -462,7 +465,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. >@@ -525,6 +528,8 @@ sub ModItem { > ModZebra( $biblionumber, "specialUpdate", "biblioserver", undef, undef ); > > logaction("CATALOGUING", "MODIFY", $itemnumber, Dumper($item)) if C4::Context->preference("CataloguingLog"); >+ >+ return $item; > } > > =head2 ModItemTransfer >@@ -2540,7 +2545,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 > >@@ -2718,14 +2723,14 @@ sub PrepareItemrecordDisplay { > my $extended_param = plugin_parameters( $dbh, $temp, $tagslib, $subfield_data{id}, undef ); > my ( $function_name, $javascript ) = plugin_javascript( $dbh, $temp, $tagslib, $subfield_data{id}, undef ); > $subfield_data{random} = int(rand(1000000)); # why do we need 2 different randoms? >- $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..651903b 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,89 @@ 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'); >+my @itemnumber = $input->param('itemnumber'); >+#Rebuilding ALL the data for items into a hash >+# parting them on $itemid. >+# XXX this is all too flakey. HTML spec says explicitly that input order is arbitrary, yet we >+# depend on the order for multiple items. This whole thing should be rewritten. >+my %itemhash; >+my $countdistinct = 0; >+my $range=scalar(@itemid); >+for (my $i=0; $i<$range; $i++){ >+ unless ($itemhash{$itemid[$i]}){ >+ $itemhash{$itemid[$i]}->{'itemnumber'} = $itemnumber[$countdistinct]; >+ $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 $itemnumber = $itemhash{$id}->{'itemnumber'}; >+ 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; >+ if ($itemnumber) { >+ $item = ModItemFromMarc($record,$biblionumber, $itemnumber); >+ } else { >+ $item = AddItemFromMarc($record,$biblionumber); >+ } >+ if ($item) { >+ $itemnumber = $item->{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 +148,4 @@ sub update_item { > replacementpricedate => $datereceived, > }, $biblionumber, $itemnumber ); > } >+ >diff --git a/acqui/orderreceive.pl b/acqui/orderreceive.pl >index 2b59698..46783e0d 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,7 +108,14 @@ 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 @itemnumbers = GetItemnumbersFromOrder($ordernumber); >+ $template->param(items => \@itemnumbers); >+ >+ my $AcqCreateItem = C4::Context->preference('AcqCreateItem'); >+ if ($AcqCreateItem eq 'receiving' || $AcqCreateItem eq 'ordering') { > # Check if ACQ framework exists > my $marc = GetMarcStructure(1, 'ACQ'); > unless($marc) { >@@ -127,12 +126,9 @@ if ( $count == 1 ) { > UniqueItemFields => C4::Context->preference('UniqueItemFields'), > ); > } >- >- 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'}); >@@ -144,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(@itemnumbers), >+ 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 9c8120e..c6a9b3f 100755 >--- a/cataloguing/additem.pl >+++ b/cataloguing/additem.pl >@@ -347,8 +347,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) { >@@ -415,8 +415,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 bb706ec..b8cfca5 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/orderreceive.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/orderreceive.tt >@@ -6,7 +6,6 @@ > <script type="text/javascript"> > //<![CDATA[ > function Check(form) { >- [% IF (AcqCreateItemReceiving) %] > // Remove last itemblock if it is not in items_list > var lastitemblock = $("#outeritemblock > div:last"); > var tobedeleted = true; >@@ -27,7 +26,6 @@ > } > return false; > }; >- [% END %] > > return true; > } >@@ -86,48 +84,81 @@ > </fieldset> > [% END %] > >- [% IF (AcqCreateItemReceiving) %] >- <div id="items_list" style="display:none"> >- <p><b>Items list</b></p> >- <div style="width:100%;overflow:auto;"> >- <table> >- <thead> >- <tr> >- <th> </th> >- <th> </th> >- <th>Barcode</th> >- <th>Home branch</th> >- <th>Holding branch</th> >- <th>Not for loan</th> >- <th>Restricted</th> >- <th>Location</th> >- <th>Call number</th> >- <th>Copy number</th> >- <th>Stock number</th> >- <th>Collection code</th> >- <th>Item type</th> >- <th>Materials</th> >- <th>Notes</th> >- </tr> >- </thead> >- <tbody> >- </tbody> >- </table> >- </div> >+ <div id="items_list" style="display:none"> >+ <p><b>Items list</b></p> >+ <div style="width:100%;overflow:auto;"> >+ <table> >+ <thead> >+ <tr> >+ <th> </th> >+ <th> </th> >+ <th>Barcode</th> >+ <th>Home branch</th> >+ <th>Holding branch</th> >+ <th>Not for loan</th> >+ <th>Restricted</th> >+ <th>Location</th> >+ <th>Call number</th> >+ <th>Copy number</th> >+ <th>Stock number</th> >+ <th>Collection code</th> >+ <th>Item type</th> >+ <th>Materials</th> >+ <th>Notes</th> >+ </tr> >+ </thead> >+ <tbody> >+ </tbody> >+ </table> > </div> >+ </div> >+ >+ <fieldset class="rows" id="itemfieldset"> >+ <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 %] >+ <div id="outeritemblock"> >+ [% IF ( items ) %] >+ [% itemid = 1 %] >+ [% FOREACH itemnumber IN items %] >+ <div id="itemblock[% itemid %]" style="display:none"></div> >+ <script type="text/javascript"> >+ $(document).ready(function() { >+ var unique_item_fields = 'barcode'; >+ $.ajax({ >+ url: "/cgi-bin/koha/services/itemrecorddisplay.pl", >+ dataType: 'html', >+ data: { >+ frameworkcode: 'ACQ', >+ biblionumber: [% biblionumber %], >+ itemnumber: [% itemnumber %] >+ }, >+ success: function(data, textStatus, jqXHR) { >+ /* Create the item block */ >+ var buttonPlus = '<a name="buttonPlus" style="cursor:pointer; margin:0 1em;" onclick="addItem(this,\'' + unique_item_fields + '\')">Update</a>'; >+ var buttonClear = '<a name="buttonClear" style="cursor:pointer;" onclick="clearItemBlock(this)">' + (window.MSG_ADDITEM_JS_CLEAR || 'Clear') + '</a>'; >+ >+ $("#itemblock[% itemid %]").append(data).append(buttonPlus).append(buttonClear); >+ $("#itemblock[% itemid %]").find("input[name='itemid']").each(function(){ >+ $(this).val([% itemid %]); >+ }); >+ } >+ }); >+ >+ addItemInList("itemblock[% itemid %]", unique_item_fields); >+ }); >+ </script> >+ [% itemid = itemid + 1 %] >+ [% END %] <!-- /items --> >+ [% END %] <!-- if items --> >+ </div> >+ </fieldset> > >- <fieldset class="rows" id="itemfieldset"> >- <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 %] >- <div id="outeritemblock"></div> >- </fieldset> >- [% END %][%# IF (AcqCreateItemReceiving) %] > <input type="hidden" name="biblionumber" value="[% biblionumber %]" /> > <input type="hidden" name="ordernumber" value="[% ordernumber %]" /> > <input type="hidden" name="biblioitemnumber" value="[% biblioitemnumber %]" /> >@@ -139,42 +170,16 @@ > <div class="yui-u"> > <fieldset class="rows"> > <legend>Accounting details</legend> >- <ol> >- <li><label for="datereceived">Date received: </label><span> [% datereceived %] </span></li> >- <li><label for="bookfund">Budget: </label><span> [% bookfund %] </span></li> >- <li><label for="creator">Created by: </label><span> [% IF ( memberfirstname and membersurname ) %][% IF ( memberfirstname ) %][% memberfirstname %][% END %] [% membersurname %][% ELSE %]No name[% END %]</span></li> >- <li><label for="quantityto">Quantity to receive: </label><span class="label"> >- [% IF ( edit ) %] >- <input type="text" id="quantity_to_receive" name="quantity" value="[% quantity %]" /> >- [% ELSE %] >- <input type="text" readonly="readonly" id="quantity_to_receive" name="quantity" value="[% quantity %]" /> >- [% END %] >+ <ol> >+ <li><label for="datereceived">Date received: </label><span> [% datereceived %] </span></li> >+ <li><label for="bookfund">Budget: </label><span> [% bookfund %] </span></li> >+ <li><label for="creator">Created by: </label><span> [% IF ( memberfirstname and membersurname ) %][% IF ( memberfirstname ) %][% memberfirstname %][% END %] [% membersurname %][% ELSE %]No name[% END %]</span></li> >+ <li><label for="quantity">Quantity to receive: </label><span class="label"> >+ <input type="text" readonly="readonly" name="quantity" value="[% quantity %]" /> > </span></li> > <li><label for="quantity">Quantity received: </label> >- [% IF (AcqCreateItemReceiving) %] >- <input readonly="readonly" type="text" size="20" name="quantityrec" id="quantity" value="0" /> >- [% ELSE %] >- [% 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 %]" /> >- [% ELSE %] >- <input type="text" size="20" name="quantityrec" id="quantity" value="[% quantityreceivedplus1 %]" /> >- [% END %] >- <input id="origquantityrec" READONLY type="hidden" name="origquantityrec" value="[% quantityreceived %]" /> >- [% END %] >- [% ELSE %] >- [% IF ( items ) %] >- <input READONLY type="text" id="quantity" size="20" name="quantityrec" value="1" /> >- [% ELSE %] >- <input type="text" size="20" id="quantity" name="quantityrec" value="1" /> >- [% END %] >- <input id="origquantityrec" READONLY type="hidden" name="origquantityrec" value="0" /> >- [% END %] >- [% END %][%# IF (AcqCreateItemReceiving) %] >+ <input readonly="readonly" type="text" size="20" name="quantityrec" id="quantity" value="[% quantityreceived || 0 %]" /> >+ <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/koha-tmpl/intranet-tmpl/prog/en/modules/services/itemrecorddisplay.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/services/itemrecorddisplay.tt >index 6790b3d..1b92907 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/services/itemrecorddisplay.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/services/itemrecorddisplay.tt >@@ -13,7 +13,7 @@ > [% END %] > </label> > [% iteminfo.marc_value %] >- <input type="hidden" name="itemid" value="1" /> >+ <input type="hidden" name="itemid" /> > <input type="hidden" name="kohafield" value="[% iteminfo.kohafield %]" /> > <input type="hidden" name="tag" value="[% iteminfo.tag %]" /> > <input type="hidden" name="subfield" value="[% iteminfo.subfield %]" /> >@@ -22,3 +22,4 @@ > </li> > [% END %] > </ol> >+<input type="hidden" name="itemnumber" value="[% itemnumber %]" /> >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 >
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 3966
:
5421
|
5556
|
6128
|
8047
|
8195
|
8465
| 8793