Bug 23435: Add multiple copies of an item when receiving in serials

This feature allows you to add multiple item records when receiving a
serial, if the subscription is set to 'create item record when receiving
serials'. Please note this is not the same as multi-receiving, more like
multi-adding!

To test:
1) Create a subscription, ensure the 'Create an item record when
receiving this serial' option is selected
2) Receive a serial
3) Expand the item form by selecting 'click to add item'
4) Fill in details, including a barcode. Leave 'number of copies' as 1
and Save.
5) Confirm the serial is received as expected.
6) In another tab, open the bibliographic record attached to this
subscription
7) Confirm the item record was created upon receiving the serial
8) Go back to the serial collection and receive next serial
9) Expand the item form by selecting 'click to add item'
10) Fill in details again, this time change 'number of copies' to a
different number e.g. 3, and Save
11) Confirm the serial is received as expected.
12) Check back at the biblio record that 3 item records were created and
the barcode was incremented for each additional item.

Sponsored-by: Brimbank City Council
Signed-off-by: Maryse Simard <maryse.simard@inlibro.com>
Signed-off-by: Kelly McElligott <kelly@bywatersolutions.com>
Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
This commit is contained in:
Aleisha Amohia 2019-08-09 03:34:45 +00:00 committed by Martin Renvoize
parent f1fb18c1d1
commit 5bdb43c35e
No known key found for this signature in database
GPG Key ID: 422B469130441A0F
2 changed files with 37 additions and 13 deletions

View File

@ -258,8 +258,14 @@ $(document).ready(function() {
[% END %]
[% IF ( iteminformatio.mandatory ) %] <span class="required">Required</span>[% END %]
</div></li>
[% END %]</ol></div><!-- /iteminformation -->
<hr>
<div class="subfield_line">
<label for="number_of_copies">Number of copies to be made of this item </label> <input type="text" id="number_of_copies[% newserialloo.serialid | html %][% newserialloo.countitems | html %][% iteminformatio.subfield | html %][% iteminformatio.random | html %]" name="number_of_copies" value="1" size="2"> <span class="hint">The barcode you enter will be incremented for each additional item.</p>
</div>
<input type="hidden" name="moditem" value="" />
<input type="hidden" name="tag" value="[% item.itemtagfield | html %]" />
<input type="hidden" name="subfield" value="[% item.itemtagsubfield | html %]" />
@ -405,7 +411,12 @@ $(document).ready(function() {
[% IF ( iteminformatio.mandatory ) %] <span class="required">Required</span>[% END %]
</div>
</li>[% END %]</ol>
<hr>
<div class="subfield_line">
<label for="number_of_copies">Number of copies to be made of this item </label> <input type="text" id="number_of_copies[% newserialloo.serialid | html %][% newserialloo.countitems | html %][% iteminformatio.subfield | html %][% iteminformatio.random | html %]" name="number_of_copies" value="1" size="2"> <span class="hint">The barcode you enter will be incremented for each additional item.</p>
</div>
<input type="hidden" name="moditem" value="" />
<input type="hidden" name="tag" value="[% newserialloo.itemtagfield | html %]" />
<input type="hidden" name="subfield" value="[% newserialloo.itemtagsubfield | html %]" />

View File

@ -284,6 +284,7 @@ if ( $op and $op eq 'serialchangestatus' ) {
my @itemid = $query->multi_param('itemid');
my @ind_tag = $query->multi_param('ind_tag');
my @indicator = $query->multi_param('indicator');
my @num_copies = $query->multi_param('number_of_copies');
#Rebuilding ALL the data for items into a hash
# parting them on $itemid.
@ -310,6 +311,7 @@ if ( $op and $op eq 'serialchangestatus' ) {
$field_values[$i];
push @{ $itemhash{ $itemid[$i] }->{'ind_tag'} }, $ind_tag[$i];
push @{ $itemhash{ $itemid[$i] }->{'indicator'} }, $indicator[$i];
push @{ $itemhash{ $itemid[$i] }->{'num_copies'} }, $num_copies[$i];
}
foreach my $item ( keys %itemhash ) {
@ -333,11 +335,15 @@ if ( $op and $op eq 'serialchangestatus' ) {
$itemhash{$item}->{'ind_tag'}
);
# warn $xml;
# warn $xml;
my $bib_record = MARC::Record::new_from_xml( $xml, 'UTF-8' );
if ( $item =~ /^N/ ) {
#New Item
$itemhash{$item}->{'num_copies'} //= 1;
for (my $copy = 0; $copy < $itemhash{$item}->{'num_copies'}[$index];){
# New Item
# if autoBarcode is set to 'incremental', calculate barcode...
my ( $barcodetagfield, $barcodetagsubfield ) = GetMarcFromKohaField( 'items.barcode' );
@ -356,21 +362,24 @@ if ( $op and $op eq 'serialchangestatus' ) {
$sth_barcode->execute;
my ($newbarcode) = $sth_barcode->fetchrow;
# OK, we have the new barcode, add the entry in MARC record # FIXME -> should be using barcode plugin here.
$bib_record->field($barcodetagfield)
->update( $barcodetagsubfield => ++$newbarcode );
# OK, we have the new barcode, add the entry in MARC record # FIXME -> should be using barcode plugin here.
$bib_record->field($barcodetagfield)->update( $barcodetagsubfield => ++$newbarcode );
}
}
# check for item barcode # being unique
my $exists;
if (
$bib_record->subfield(
$barcodetagfield, $barcodetagsubfield
)
)
{
if ( $bib_record->subfield( $barcodetagfield, $barcodetagsubfield ) ) {
my $barcode = $bib_record->subfield( $barcodetagfield, $barcodetagsubfield );
if ($copy > 0){
use C4::Barcodes;
my $barcodeobj = C4::Barcodes->new;
my $newbarcode = $barcodeobj->next_value($barcode);
$barcode = $newbarcode;
$bib_record->field($barcodetagfield)->update($barcodetagsubfield => $barcode);
}
$exists = Koha::Items->find({barcode => $barcode});
}
@ -387,7 +396,11 @@ if ( $op and $op eq 'serialchangestatus' ) {
AddItem2Serial( $itemhash{$item}->{serial},
$itemnumber );
}
$copy++;
}
} # num_copies for loop
else {
#modify item