=cut
-use strict;
-use warnings;
+use Modern::Perl;
use CGI qw ( -utf8 );
-use Encode qw( decode is_utf8 );
-use C4::Auth;
-use C4::Biblio;
-use C4::Items;
-use C4::Koha;
-use C4::Output;
+use Encode;
+use C4::Auth qw( get_template_and_user haspermission );
+use C4::Biblio qw( GetMarcFromKohaField TransformHtmlToXml );
+use C4::Items qw( AddItemFromMarc ModItemFromMarc PrepareItemrecordDisplay );
+use C4::Output qw( output_html_with_http_headers );
use C4::Context;
-use C4::Serials;
-use C4::Search qw/enabled_staff_search_views/;
-use Koha::DateUtils;
+use C4::Serials qw( GetSerials GetSerials2 GetSerialInformation HasSubscriptionExpired GetSubscription abouttoexpire NewIssue ModSerialStatus GetPreviousSerialid AddItem2Serial );
+use C4::Search qw( enabled_staff_search_views );
-use List::MoreUtils qw/uniq/;
+use Koha::DateUtils qw( dt_from_string output_pref );
+use Koha::Items;
+use Koha::Serial::Items;
+
+use List::MoreUtils qw( uniq );
my $query = CGI->new();
my $dbh = C4::Context->dbh;
-my @serialids = $query->param('serialid');
-my @serialseqs = $query->param('serialseq');
-my @planneddates = $query->param('planneddate');
-my @publisheddates = $query->param('publisheddate');
-my @publisheddatetexts = $query->param('publisheddatetext');
-my @status = $query->param('status');
-my @notes = $query->param('notes');
-my @subscriptionids = $query->param('subscriptionid');
+my @serialids = $query->multi_param('serialid');
+my @serialseqs = $query->multi_param('serialseq');
+my @planneddates = $query->multi_param('planneddate');
+my @publisheddates = $query->multi_param('publisheddate');
+my @publisheddatetexts = $query->multi_param('publisheddatetext');
+my @status = $query->multi_param('status');
+my @notes = $query->multi_param('notes');
+my @subscriptionids = $query->multi_param('subscriptionid');
my $op = $query->param('op');
if ( scalar(@subscriptionids) == 1 && index( $subscriptionids[0], q|,| ) > 0 ) {
@subscriptionids = split( /,/, $subscriptionids[0] );
$string =~ s/,$//;
print $query->redirect($string);
+ exit;
}
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
template_name => 'serials/serials-edit.tt',
query => $query,
type => 'intranet',
- authnotrequired => 0,
flagsrequired => { serials => 'receive_serials' },
- debug => 1,
}
);
$processedserialid{$serialid} = 1;
}
}
-my $biblio = GetBiblioData( $serialdatalist[0]->{'biblionumber'} );
+my $biblio = Koha::Biblios->find( $serialdatalist[0]->{biblionumber} );
my @newserialloop;
my @subscriptionloop;
$plan_date,
$pub_date,
$publisheddatetexts[$i],
- $notes[$i]
+ $notes[$i],
+ $serialdatalist[0]->{'routingnotes'}
);
}
}
$notes[$i]
);
}
+ my $makePreviousSerialAvailable = C4::Context->preference('makePreviousSerialAvailable');
+ if ($makePreviousSerialAvailable && $serialids[$i] ne "NEW") {
+ # We already have created the new expected serial at this point, so we get the second previous serial
+ my $previous = GetPreviousSerialid($subscriptionids[$i]);
+ if ($previous) {
+
+ my $serialitem = Koha::Serial::Items->search( {serialid => $previous} )->next;
+ my $itemnumber = $serialitem ? $serialitem->itemnumber : undef;
+ if ($itemnumber) {
+
+ # Getting the itemtype to set from the database
+ my $subscriptioninfos = GetSubscription($subscriptionids[$i]);
+
+ # Changing the status to "available" and the itemtype according to the previousitemtype db field
+ my $item = Koha::Items->find($itemnumber);
+ $item->set(
+ {
+ notforloan => 0,
+ itype => $subscriptioninfos->{'previousitemtype'}
+ }
+ )->store;
+ }
+ }
+ }
+
}
- my @moditems = $query->param('moditem');
+ my @moditems = $query->multi_param('moditem');
if ( scalar(@moditems) ) {
- my @tags = $query->param('tag');
- my @subfields = $query->param('subfield');
- my @field_values = $query->param('field_value');
- my @serials = $query->param('serial');
- my @bibnums = $query->param('bibnum');
- my @itemid = $query->param('itemid');
- my @ind_tag = $query->param('ind_tag');
- my @indicator = $query->param('indicator');
+ my @tags = $query->multi_param('tag');
+ my @subfields = $query->multi_param('subfield');
+ my @field_values = $query->multi_param('field_value');
+ my @serials = $query->multi_param('serial');
+ my @bibnums = $query->multi_param('bibnum');
+ 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.
my %itemhash;
- my $countdistinct;
+ my $countdistinct = 0;
my $range = scalar(@itemid);
for ( my $i = 0 ; $i < $range ; $i++ ) {
unless ( $itemhash{ $itemid[$i] } ) {
$itemhash{ $itemid[$i] }->{'serial'} = $newserial;
}
$itemhash{ $itemid[$i] }->{'bibnum'} = $bibnums[$countdistinct];
+ $itemhash{ $itemid[$i] }->{'num_copies'} = $num_copies[$countdistinct];
$countdistinct++;
}
push @{ $itemhash{ $itemid[$i] }->{'tags'} }, $tags[$i];
$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'};){
+
+ # New Item
# if autoBarcode is set to 'incremental', calculate barcode...
- my ( $barcodetagfield, $barcodetagsubfield ) =
- GetMarcFromKohaField(
- 'items.barcode',
- GetFrameworkCode(
- $serialdatalist[0]->{'biblionumber'}
- )
- );
+ my ( $barcodetagfield, $barcodetagsubfield ) = GetMarcFromKohaField( 'items.barcode' );
if ( C4::Context->preference('autoBarcode') eq
'incremental' )
{
$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
- )
- )
- {
- $exists = GetItemnumberFromBarcode(
- $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});
}
# push @errors,"barcode_not_unique" if($exists);
AddItem2Serial( $itemhash{$item}->{serial},
$itemnumber );
}
+ $copy++;
}
+
+ } # if ( $item =~ /^N/ ) {
+
else {
#modify item
print $query->redirect($redirect);
}
}
-my $location = GetAuthorisedValues('LOC', $serialdatalist[0]->{'location'});
-my $locationlib;
-foreach (@$location) {
- $locationlib = $_->{'lib'} if $_->{'selected'};
-}
+my $location = $serialdatalist[0]->{'location'};
my $default_bib_view = get_default_view();
$template->param(
+ subscriptionid => $serialdatalist[0]->{subscriptionid},
serialsadditems => $serialdatalist[0]->{'serialsadditems'},
callnumber => $serialdatalist[0]->{'callnumber'},
internalnotes => $serialdatalist[0]->{'internalnotes'},
- bibliotitle => $biblio->{'title'},
+ bibliotitle => $biblio->title,
biblionumber => $serialdatalist[0]->{'biblionumber'},
serialslist => \@serialdatalist,
default_bib_view => $default_bib_view,
- location => $locationlib,
+ location => $location,
(uc(C4::Context->preference("marcflavour"))) => 1
);