From 3dd8516cb3501ef0522e8e036a1c015c67d88390 Mon Sep 17 00:00:00 2001 From: Matt Blenkinsop Date: Wed, 2 Oct 2024 11:00:31 +0000 Subject: [PATCH] Bug 38061: Tidy serials-collection.pl --- serials/serials-collection.pl | 279 ++++++++++++++++++---------------- 1 file changed, 146 insertions(+), 133 deletions(-) diff --git a/serials/serials-collection.pl b/serials/serials-collection.pl index fa73e2765d..853a02aa91 100755 --- a/serials/serials-collection.pl +++ b/serials/serials-collection.pl @@ -18,11 +18,11 @@ # You should have received a copy of the GNU General Public License # along with Koha; if not, see . - use Modern::Perl; -use CGI qw ( -utf8 ); +use CGI qw ( -utf8 ); use C4::Auth qw( get_template_and_user ); -use C4::Serials qw( ModSerialStatus GetSubscription GetNextExpected GetNextSeq GetNextDate NewIssue HasSubscriptionExpired abouttoexpire check_routing GetFullSubscription PrepareSerialsData CountSubscriptionFromBiblionumber GetSubscriptionsFromBiblionumber GetFullSubscriptionsFromBiblionumber ); +use C4::Serials + qw( ModSerialStatus GetSubscription GetNextExpected GetNextSeq GetNextDate NewIssue HasSubscriptionExpired abouttoexpire check_routing GetFullSubscription PrepareSerialsData CountSubscriptionFromBiblionumber GetSubscriptionsFromBiblionumber GetFullSubscriptionsFromBiblionumber ); use C4::Output qw( output_and_exit output_html_with_http_headers ); use C4::Context; use Koha::Serial::Items; @@ -31,187 +31,200 @@ use Koha::DateUtils qw( dt_from_string ); use List::MoreUtils qw( uniq ); - -my $query = CGI->new; -my $op = $query->param('op') || q{}; -my $nbissues=$query->param('nbissues'); +my $query = CGI->new; +my $op = $query->param('op') || q{}; +my $nbissues = $query->param('nbissues'); my $date_received_today = $query->param('date_received_today') || 0; -my $dbh = C4::Context->dbh; - -my ($template, $loggedinuser, $cookie) - = get_template_and_user({template_name => "serials/serials-collection.tt", - query => $query, - type => "intranet", - flagsrequired => {serials => '*'}, - }); -my $biblionumber = $query->param('biblionumber'); +my $dbh = C4::Context->dbh; + +my ( $template, $loggedinuser, $cookie ) = get_template_and_user( + { + template_name => "serials/serials-collection.tt", + query => $query, + type => "intranet", + flagsrequired => { serials => '*' }, + } +); +my $biblionumber = $query->param('biblionumber'); my @subscriptionid = $query->multi_param('subscriptionid'); -my $skip_issues = $query->param('skip_issues') || 0; -my $count_forward = $skip_issues + 1; +my $skip_issues = $query->param('skip_issues') || 0; +my $count_forward = $skip_issues + 1; -@subscriptionid= uniq @subscriptionid; -@subscriptionid= sort @subscriptionid; +@subscriptionid = uniq @subscriptionid; +@subscriptionid = sort @subscriptionid; my $subscriptiondescs; my $subscriptions; -if($op eq 'cud-gennext' && @subscriptionid){ +if ( $op eq 'cud-gennext' && @subscriptionid ) { my $subscriptionid = $subscriptionid[0]; - my $sth = $dbh->prepare(" + my $sth = $dbh->prepare( " SELECT publisheddate, publisheddatetext, serialid, serialseq, planneddate, notes, routingnotes FROM serial WHERE status = 1 AND subscriptionid = ? - "); - my $status = defined( $nbissues ) ? 2 : 3; + " ); + my $status = defined($nbissues) ? 2 : 3; $nbissues ||= 1; - for ( my $i = 0; $i < $nbissues; $i++ ){ + for ( my $i = 0 ; $i < $nbissues ; $i++ ) { $sth->execute($subscriptionid); + # modify actual expected issue, to generate the next if ( my $issue = $sth->fetchrow_hashref ) { my $planneddate = $date_received_today ? dt_from_string : $issue->{planneddate}; - ModSerialStatus( $issue->{serialid}, $issue->{serialseq}, - $planneddate, $issue->{publisheddate}, - $issue->{publisheddatetext}, $status, "", $count_forward ); + ModSerialStatus( + $issue->{serialid}, $issue->{serialseq}, + $planneddate, $issue->{publisheddate}, + $issue->{publisheddatetext}, $status, "", $count_forward + ); } else { require C4::Serials::Numberpattern; my $subscription = GetSubscription($subscriptionid); - my $pattern = C4::Serials::Numberpattern::GetSubscriptionNumberpattern($subscription->{numberpattern}); - my $frequency = C4::Serials::Frequency::GetSubscriptionFrequency($subscription->{periodicity}); - my $expected = GetNextExpected($subscriptionid); + my $pattern = C4::Serials::Numberpattern::GetSubscriptionNumberpattern( $subscription->{numberpattern} ); + my $frequency = C4::Serials::Frequency::GetSubscriptionFrequency( $subscription->{periodicity} ); + my $expected = GetNextExpected($subscriptionid); my ( - $newserialseq, $newlastvalue1, $newlastvalue2, $newlastvalue3, - $newinnerloop1, $newinnerloop2, $newinnerloop3 - ) = GetNextSeq($subscription, $pattern, $frequency, $expected->{publisheddate}, $count_forward); - - ## We generate the next publication date - my $nextpublisheddate = GetNextDate($subscription, $expected->{publisheddate}, $frequency, 1); - my $planneddate = $date_received_today ? dt_from_string : $nextpublisheddate; - ## Creating the new issue - NewIssue( $newserialseq, $subscriptionid, $subscription->{'biblionumber'}, - 1, $planneddate, $nextpublisheddate, undef, - $issue->{notes}, $issue->{routingnotes} ); - - ## Updating the subscription seq status - my $squery = "UPDATE subscription SET lastvalue1=?, lastvalue2=?, lastvalue3=?, innerloop1=?, innerloop2=?, innerloop3=? + $newserialseq, $newlastvalue1, $newlastvalue2, $newlastvalue3, + $newinnerloop1, $newinnerloop2, $newinnerloop3 + ) = GetNextSeq( $subscription, $pattern, $frequency, $expected->{publisheddate}, $count_forward ); + + ## We generate the next publication date + my $nextpublisheddate = GetNextDate( $subscription, $expected->{publisheddate}, $frequency, 1 ); + my $planneddate = $date_received_today ? dt_from_string : $nextpublisheddate; + ## Creating the new issue + NewIssue( + $newserialseq, $subscriptionid, $subscription->{'biblionumber'}, + 1, $planneddate, $nextpublisheddate, undef, + $issue->{notes}, $issue->{routingnotes} + ); + + ## Updating the subscription seq status + my $squery = + "UPDATE subscription SET lastvalue1=?, lastvalue2=?, lastvalue3=?, innerloop1=?, innerloop2=?, innerloop3=? WHERE subscriptionid = ?"; - my $seqsth = $dbh->prepare($squery); - $seqsth->execute( - $newlastvalue1, $newlastvalue2, $newlastvalue3, $newinnerloop1, - $newinnerloop2, $newinnerloop3, $subscriptionid - ); + my $seqsth = $dbh->prepare($squery); + $seqsth->execute( + $newlastvalue1, $newlastvalue2, $newlastvalue3, $newinnerloop1, + $newinnerloop2, $newinnerloop3, $subscriptionid + ); } last if $nbissues == 1; last if HasSubscriptionExpired($subscriptionid) > 0; } - print $query->redirect('/cgi-bin/koha/serials/serials-collection.pl?subscriptionid='.$subscriptionid); + print $query->redirect( '/cgi-bin/koha/serials/serials-collection.pl?subscriptionid=' . $subscriptionid ); exit; } -my $countitems = 0; -my @serialsid = $query->multi_param('serialid'); +my $countitems = 0; +my @serialsid = $query->multi_param('serialid'); my $subscriptionid = $subscriptionid[0]; -if($op eq 'delete_confirm'){ - foreach my $serialid (@serialsid){ - $countitems += Koha::Serial::Items->search({serialid => $serialid})->count(); +if ( $op eq 'delete_confirm' ) { + foreach my $serialid (@serialsid) { + $countitems += Koha::Serial::Items->search( { serialid => $serialid } )->count(); } -}elsif($op eq 'cud-delete_confirmed'){ - if($query->param('delitems') eq "Yes"){ +} elsif ( $op eq 'cud-delete_confirmed' ) { + if ( $query->param('delitems') eq "Yes" ) { my @itemnumbers; - foreach my $serialid (@serialsid){ - my @ids = Koha::Serial::Items->search({serialid => $serialid})->get_column('itemnumber'); - push(@itemnumbers, @ids); + foreach my $serialid (@serialsid) { + my @ids = Koha::Serial::Items->search( { serialid => $serialid } )->get_column('itemnumber'); + push( @itemnumbers, @ids ); } - my $items = Koha::Items->search({ itemnumber => \@itemnumbers }); + my $items = Koha::Items->search( { itemnumber => \@itemnumbers } ); while ( my $item = $items->next ) { my $deleted = $item->safe_delete; - $template->param(error_delitem => 1) + $template->param( error_delitem => 1 ) unless $deleted; } } - for my $serialid (@serialsid){ + for my $serialid (@serialsid) { my $serial = Koha::Serials->find($serialid); - ModSerialStatus($serialid, $serial->serialseq, $serial->planneddate, $serial->publisheddate, $serial->publisheddatetext, 6, ""); + ModSerialStatus( + $serialid, $serial->serialseq, $serial->planneddate, $serial->publisheddate, + $serial->publisheddatetext, 6, "" + ); } } my $subscriptioncount; -my ($location, $callnumber); -if (@subscriptionid){ - my @subscriptioninformation=(); - my $closed = 0; - foreach my $subscriptionid (@subscriptionid){ - my $subs= GetSubscription($subscriptionid); - next unless $subs; - $closed = 1 if $subs->{closed}; - - ##these are display information - $subs->{'abouttoexpire'}=abouttoexpire($subs->{'subscriptionid'}); - $subs->{'subscriptionexpired'}=HasSubscriptionExpired($subs->{'subscriptionid'}); - $subs->{'subscriptionid'} = $subscriptionid; # FIXME - why was this lost ? - $location = $subs->{'location'}; - $callnumber = $subs->{callnumber}; - my $frequency = C4::Serials::Frequency::GetSubscriptionFrequency($subs->{periodicity}); - my $numberpattern = C4::Serials::Numberpattern::GetSubscriptionNumberpattern($subs->{numberpattern}); - $subs->{frequency} = $frequency; - $subs->{numberpattern} = $numberpattern; - $subs->{'hasRouting'} = check_routing($subscriptionid); - push @$subscriptiondescs,$subs; - my $tmpsubscription= GetFullSubscription($subscriptionid); - @subscriptioninformation=(@$tmpsubscription,@subscriptioninformation); - } - - output_and_exit( $query, $cookie, $template, 'unknown_subscription') unless @subscriptioninformation; - - $template->param(closed => $closed); - $subscriptions=PrepareSerialsData(\@subscriptioninformation, 1); - $subscriptioncount = CountSubscriptionFromBiblionumber($subscriptiondescs->[0]{'biblionumber'}); +my ( $location, $callnumber ); +if (@subscriptionid) { + my @subscriptioninformation = (); + my $closed = 0; + foreach my $subscriptionid (@subscriptionid) { + my $subs = GetSubscription($subscriptionid); + next unless $subs; + $closed = 1 if $subs->{closed}; + + ##these are display information + $subs->{'abouttoexpire'} = abouttoexpire( $subs->{'subscriptionid'} ); + $subs->{'subscriptionexpired'} = HasSubscriptionExpired( $subs->{'subscriptionid'} ); + $subs->{'subscriptionid'} = $subscriptionid; # FIXME - why was this lost ? + $location = $subs->{'location'}; + $callnumber = $subs->{callnumber}; + my $frequency = C4::Serials::Frequency::GetSubscriptionFrequency( $subs->{periodicity} ); + my $numberpattern = C4::Serials::Numberpattern::GetSubscriptionNumberpattern( $subs->{numberpattern} ); + $subs->{frequency} = $frequency; + $subs->{numberpattern} = $numberpattern; + $subs->{'hasRouting'} = check_routing($subscriptionid); + push @$subscriptiondescs, $subs; + my $tmpsubscription = GetFullSubscription($subscriptionid); + @subscriptioninformation = ( @$tmpsubscription, @subscriptioninformation ); + } + + output_and_exit( $query, $cookie, $template, 'unknown_subscription' ) unless @subscriptioninformation; + + $template->param( closed => $closed ); + $subscriptions = PrepareSerialsData( \@subscriptioninformation, 1 ); + $subscriptioncount = CountSubscriptionFromBiblionumber( $subscriptiondescs->[0]{'biblionumber'} ); } else { - $subscriptiondescs = GetSubscriptionsFromBiblionumber($biblionumber); - foreach my $s (@$subscriptiondescs) { - my $frequency = C4::Serials::Frequency::GetSubscriptionFrequency($s->{periodicity}); - my $numberpattern = C4::Serials::Numberpattern::GetSubscriptionNumberpattern($s->{numberpattern}); - $s->{frequency} = $frequency; - $s->{numberpattern} = $numberpattern; - } - my $subscriptioninformation = GetFullSubscriptionsFromBiblionumber($biblionumber); - $subscriptions=PrepareSerialsData($subscriptioninformation, 1); + $subscriptiondescs = GetSubscriptionsFromBiblionumber($biblionumber); + foreach my $s (@$subscriptiondescs) { + my $frequency = C4::Serials::Frequency::GetSubscriptionFrequency( $s->{periodicity} ); + my $numberpattern = C4::Serials::Numberpattern::GetSubscriptionNumberpattern( $s->{numberpattern} ); + $s->{frequency} = $frequency; + $s->{numberpattern} = $numberpattern; + } + my $subscriptioninformation = GetFullSubscriptionsFromBiblionumber($biblionumber); + $subscriptions = PrepareSerialsData( $subscriptioninformation, 1 ); } my $title = $subscriptiondescs->[0]{bibliotitle}; -my $yearmax=($subscriptions->[0]{year} eq "manage" && scalar(@$subscriptions)>1)? $subscriptions->[1]{year} :$subscriptions->[0]{year}; -my $yearmin=$subscriptions->[scalar(@$subscriptions)-1]{year}; -my $subscriptionidlist=""; -foreach my $subscription (@$subscriptiondescs){ - $subscriptionidlist.=$subscription->{'subscriptionid'}."," ; - $biblionumber = $subscription->{'bibnum'} unless ($biblionumber); - $subscription->{'hasRouting'} = check_routing($subscription->{'subscriptionid'}); +my $yearmax = + ( $subscriptions->[0]{year} eq "manage" && scalar(@$subscriptions) > 1 ) + ? $subscriptions->[1]{year} + : $subscriptions->[0]{year}; +my $yearmin = $subscriptions->[ scalar(@$subscriptions) - 1 ]{year}; +my $subscriptionidlist = ""; +foreach my $subscription (@$subscriptiondescs) { + $subscriptionidlist .= $subscription->{'subscriptionid'} . ","; + $biblionumber = $subscription->{'bibnum'} unless ($biblionumber); + $subscription->{'hasRouting'} = check_routing( $subscription->{'subscriptionid'} ); } chop $subscriptionidlist; $template->param( - subscriptionidlist => $subscriptionidlist, - biblionumber => $biblionumber, - subscriptions => $subscriptiondescs, - years => $subscriptions, - yearmin => $yearmin, - yearmax =>$yearmax, - bibliotitle => $title, - suggestion => C4::Context->preference("suggestion"), - virtualshelves => C4::Context->preference("virtualshelves"), - routing => C4::Context->preference("RoutingSerials"), - subscr=>scalar $query->param('subscriptionid'), - subscriptioncount => $subscriptioncount, - location => $location, - callnumber => $callnumber, - uc(C4::Context->preference("marcflavour")) => 1, - serialsadditems => $subscriptiondescs->[0]{'serialsadditems'}, - delete => ($op eq 'delete_confirm'), - subscriptionid => $subscriptionid, - countitems => $countitems, - serialnumber => scalar @serialsid, - serialsid => \@serialsid, - ); + subscriptionidlist => $subscriptionidlist, + biblionumber => $biblionumber, + subscriptions => $subscriptiondescs, + years => $subscriptions, + yearmin => $yearmin, + yearmax => $yearmax, + bibliotitle => $title, + suggestion => C4::Context->preference("suggestion"), + virtualshelves => C4::Context->preference("virtualshelves"), + routing => C4::Context->preference("RoutingSerials"), + subscr => scalar $query->param('subscriptionid'), + subscriptioncount => $subscriptioncount, + location => $location, + callnumber => $callnumber, + uc( C4::Context->preference("marcflavour") ) => 1, + serialsadditems => $subscriptiondescs->[0]{'serialsadditems'}, + delete => ( $op eq 'delete_confirm' ), + subscriptionid => $subscriptionid, + countitems => $countitems, + serialnumber => scalar @serialsid, + serialsid => \@serialsid, +); output_html_with_http_headers $query, $cookie, $template->output; -- 2.39.3 (Apple Git-146)