X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=serials%2Fsubscription-add.pl;h=f60910281772575df36a3582a783d3873a708bb4;hb=a8428e141eb533ac5fafe80d38931a36d927a329;hp=4fbf8c2f129afa47729465d4bf0ed50687d77fbf;hpb=868b8cdbaa079a948a6015f713fa3384a7f404b5;p=koha_fer diff --git a/serials/subscription-add.pl b/serials/subscription-add.pl index 4fbf8c2f12..f609102817 100755 --- a/serials/subscription-add.pl +++ b/serials/subscription-add.pl @@ -11,15 +11,15 @@ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR # A PARTICULAR PURPOSE. See the GNU General Public License for more details. # -# You should have received a copy of the GNU General Public License along with -# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, -# Suite 330, Boston, MA 02111-1307 USA +# You should have received a copy of the GNU General Public License along +# with Koha; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. use strict; use warnings; use CGI; -use Date::Calc qw(Today Day_of_Year Week_of_Year Add_Delta_Days); +use Date::Calc qw(Today Day_of_Year Week_of_Year Add_Delta_Days Add_Delta_YM); use C4::Koha; use C4::Biblio; use C4::Auth; @@ -29,188 +29,320 @@ use C4::Output; use C4::Context; use C4::Branch; # GetBranches use C4::Serials; +use C4::Serials::Frequency; +use C4::Serials::Numberpattern; use C4::Letters; +use Carp; #use Smart::Comments; -my $query = new CGI; +our $query = CGI->new; my $op = $query->param('op') || ''; my $dbh = C4::Context->dbh; -my ($subscriptionid,$auser,$branchcode,$librarian,$cost,$aqbooksellerid, $aqbooksellername,$aqbudgetid, $bookfundid, $startdate, $periodicity, - $firstacquidate, $dow, $irregularity, $numberpattern, $numberlength, $weeklength, $monthlength, $sublength, - $add1,$every1,$whenmorethan1,$setto1,$lastvalue1,$innerloop1, - $add2,$every2,$whenmorethan2,$setto2,$lastvalue2,$innerloop2, - $add3,$every3,$whenmorethan3,$setto3,$lastvalue3,$innerloop3, - $numberingmethod, $status, $biblionumber, - $bibliotitle, $callnumber, $notes, $hemisphere, $letter, $manualhistory,$serialsadditems, $location); - - my @budgets; +my $sub_length; + +my @budgets; + +# Permission needed if it is a modification : edit_subscription +# Permission needed otherwise (nothing or dup) : create_subscription +my $permission = ($op eq "modify") ? "edit_subscription" : "create_subscription"; + my ($template, $loggedinuser, $cookie) -= get_template_and_user({template_name => "serials/subscription-add.tmpl", += get_template_and_user({template_name => "serials/subscription-add.tt", query => $query, type => "intranet", authnotrequired => 0, - flagsrequired => {serials => 1}, + flagsrequired => {serials => $permission}, debug => 1, }); my $sub_on; -my @subscription_types = ( - 'issues', 'weeks', 'months' - ); +my @subscription_types = (qw(issues weeks months)); my @sub_type_data; my $subs; -my $firstissuedate; -my $nextexpected; +our $firstissuedate; -if ($op eq 'mod' || $op eq 'dup' || $op eq 'modsubscription') { +if ($op eq 'modify' || $op eq 'dup' || $op eq 'modsubscription') { - $subscriptionid = $query->param('subscriptionid'); - $subs = &GetSubscription($subscriptionid); -## FIXME : Check rights to edit if mod. Could/Should display an error message. - if ($subs->{'cannotedit'} && $op eq 'mod'){ - warn "Attempt to modify subscription $subscriptionid by ".C4::Context->userenv->{'id'}." not allowed"; + my $subscriptionid = $query->param('subscriptionid'); + $subs = GetSubscription($subscriptionid); + + ## FIXME : Check rights to edit if mod. Could/Should display an error message. + if ($subs->{'cannotedit'} && $op eq 'modify'){ + carp "Attempt to modify subscription $subscriptionid by ".C4::Context->userenv->{'id'}." not allowed"; print $query->redirect("/cgi-bin/koha/serials/subscription-detail.pl?subscriptionid=$subscriptionid"); } - $firstissuedate = $subs->{firstacquidate}; # in iso format. + $firstissuedate = $subs->{firstacquidate} || ''; # in iso format. for (qw(startdate firstacquidate histstartdate enddate histenddate)) { next unless defined $subs->{$_}; # TODO : Handle date formats properly. if ($subs->{$_} eq '0000-00-00') { $subs->{$_} = '' } else { - $subs->{$_} = format_date($subs->{$_}); + $subs->{$_} = $subs->{$_}; } } - $subs->{'letter'}='' unless($subs->{'letter'}); + if (!defined $subs->{letter}) { + $subs->{letter}= q{}; + } letter_loop($subs->{'letter'}, $template); - $irregularity = $subs->{'irregularity'}; - $numberpattern = $subs->{'numberpattern'}; - $nextexpected = GetNextExpected($subscriptionid); - $nextexpected->{'isfirstissue'} = $nextexpected->{planneddate}->output('iso') eq $firstissuedate ; - $subs->{nextacquidate} = $nextexpected->{planneddate}->output() if($op eq 'mod'); + my $nextexpected = GetNextExpected($subscriptionid); + $nextexpected->{'isfirstissue'} = $nextexpected->{planneddate} eq $firstissuedate ; + $subs->{nextacquidate} = $nextexpected->{planneddate} if($op eq 'modify'); unless($op eq 'modsubscription') { - foreach my $length_unit qw(numberlength weeklength monthlength){ - if ($subs->{$length_unit}){ - $sublength=$subs->{$length_unit}; - $sub_on=$length_unit; - last; - } - } - - $template->param($subs); - $template->param("dow".$subs->{'dow'} => 1) if defined $subs->{'dow'}; + foreach my $length_unit (qw(numberlength weeklength monthlength)) { + if ($subs->{$length_unit}) { + $sub_length=$subs->{$length_unit}; + $sub_on=$length_unit; + last; + } + } + + $template->param( %{$subs} ); $template->param( $op => 1, "subtype_$sub_on" => 1, - sublength =>$sublength, - history => ($op eq 'mod' && $subs->{manualhistory} == 1 ), - "periodicity".$subs->{'periodicity'} => 1, - "numberpattern".$subs->{'numberpattern'} => 1, + sublength =>$sub_length, + history => ($op eq 'modify'), firstacquiyear => substr($firstissuedate,0,4), ); + + if($op eq 'modify') { + my ($serials_number) = GetSerials($subscriptionid); + if($serials_number > 1) { + $template->param(more_than_one_serial => 1); + } + } + } + + if ( $op eq 'dup' ) { + my $dont_copy_fields = C4::Context->preference('SubscriptionDuplicateDroppedInput'); + my @fields_id = map { fieldid => $_ }, split '\|', $dont_copy_fields; + $template->param( dont_export_field_loop => \@fields_id ); } } -my $onlymine=C4::Context->preference('IndependantBranches') && - C4::Context->userenv && - C4::Context->userenv->{flags} % 2 !=1 && - C4::Context->userenv->{branch}; +my $onlymine = + C4::Context->preference('IndependentBranches') + && C4::Context->userenv + && !C4::Context->IsSuperLibrarian + && ( + not C4::Auth::haspermission( C4::Context->userenv->{id}, { serials => 'superserials' } ) + ) + && C4::Context->userenv->{branch}; my $branches = GetBranches($onlymine); -my @branchloop; -for my $thisbranch (sort { $branches->{$a}->{branchname} cmp $branches->{$b}->{branchname} } keys %$branches) { +my $branchloop; +for my $thisbranch (sort { $branches->{$a}->{branchname} cmp $branches->{$b}->{branchname} } keys %{$branches}) { my $selected = 0; - $selected = 1 if ($thisbranch eq C4::Context->userenv->{'branch'}); $selected = 1 if (defined($subs) && $thisbranch eq $subs->{'branchcode'}); - my %row =(value => $thisbranch, - selected => $selected, - branchname => $branches->{$thisbranch}->{'branchname'}, - ); - push @branchloop, \%row; + push @{$branchloop}, { + value => $thisbranch, + selected => $selected, + branchname => $branches->{$thisbranch}->{'branchname'}, + }; } -$template->param(branchloop => \@branchloop, - DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(), + +my $locations_loop = GetAuthorisedValues("LOC",$subs->{'location'}); + +$template->param(branchloop => $branchloop, + locations_loop=>$locations_loop, ); -my $count = 0; # prepare template variables common to all $op conditions: -$template->param( 'dateformat_' . C4::Context->preference('dateformat') => 1 , - ); +if ($op!~/^mod/) { + letter_loop(q{}, $template); +} if ($op eq 'addsubscription') { - my $auser = $query->param('user'); - my $branchcode = $query->param('branchcode'); - my $aqbooksellerid = $query->param('aqbooksellerid'); - my $cost = $query->param('cost'); - my $aqbudgetid = $query->param('aqbudgetid'); - my $startdate = $query->param('startdate'); - my $firstacquidate = $query->param('firstacquidate'); - my $periodicity = $query->param('periodicity'); - my $dow = $query->param('dow'); - my @irregularity = $query->param('irregularity_select'); - my $numberlength = 0; - my $weeklength = 0; - my $monthlength = 0; - my $numberpattern = $query->param('numbering_pattern'); - my $sublength = $query->param('sublength'); - my $subtype = $query->param('subtype'); - my $graceperiod = $query->param('graceperiod') || 0; + redirect_add_subscription(); +} elsif ($op eq 'modsubscription') { + redirect_mod_subscription(); +} else { + while (@subscription_types) { + my $sub_type = shift @subscription_types; + my %row = ( 'name' => $sub_type ); + if ( defined $sub_on and $sub_on eq $sub_type ) { + $row{'selected'} = ' selected'; + } else { + $row{'selected'} = ''; + } + push( @sub_type_data, \%row ); + } + $template->param(subtype => \@sub_type_data); - if ($subtype eq 'months'){ - $monthlength = $sublength; - } elsif ($subtype eq 'weeks'){ - $weeklength = $sublength; + letter_loop( '', $template ) if ($op ne 'modsubscription' && $op ne 'dup' && $op ne 'modify'); + + my $new_biblionumber = $query->param('biblionumber_for_new_subscription'); + if (defined $new_biblionumber) { + my $bib = GetBiblioData($new_biblionumber); + if (defined $bib) { + $template->param(bibnum => $new_biblionumber); + $template->param(bibliotitle => $bib->{title}); + } + } + + $template->param((uc(C4::Context->preference("marcflavour"))) => 1); + + my @frequencies = GetSubscriptionFrequencies; + my @frqloop; + foreach my $freq (@frequencies) { + my $selected = 0; + $selected = 1 if ($subs->{periodicity} and $freq->{id} eq $subs->{periodicity}); + my $row = { + id => $freq->{'id'}, + selected => $selected, + label => $freq->{'description'}, + }; + push @frqloop, $row; + } + $template->param(frequencies => \@frqloop); + + my @numpatterns = GetSubscriptionNumberpatterns; + my @numberpatternloop; + foreach my $numpattern (@numpatterns) { + my $selected = 0; + $selected = 1 if($subs->{numberpattern} and $numpattern->{id} eq $subs->{numberpattern}); + my $row = { + id => $numpattern->{'id'}, + selected => $selected, + label => $numpattern->{'label'}, + }; + push @numberpatternloop, $row; + } + $template->param(numberpatterns => \@numberpatternloop); + + # Get installed locales + # FIXME this will not work with all environments. + # If call to locale fails, @locales will be an empty array, which is fine. + my @locales = map { + chomp; + # we don't want POSIX and C locales + /^C|^POSIX$/ ? () : $_ + } `locale -a`; + $template->param(locales => \@locales); + + output_html_with_http_headers $query, $cookie, $template->output; +} + +sub letter_loop { + my ($selected_letter, $templte) = @_; + my $letters = GetLetters('serial'); + my $letterloop; + foreach my $thisletter (keys %{$letters}) { + push @{$letterloop}, { + value => $thisletter, + selected => $thisletter eq $selected_letter, + lettername => $letters->{$thisletter}, + }; + } + $templte->param(letterloop => $letterloop); + return; +} + +sub _get_sub_length { + my ($type, $length) = @_; + return + ( + $type eq 'issues' ? $length : 0, + $type eq 'weeks' ? $length : 0, + $type eq 'months' ? $length : 0, + ); +} + +sub _guess_enddate { + my ($startdate_iso, $frequencyid, $numberlength, $weeklength, $monthlength) = @_; + my ($year, $month, $day); + my $enddate; + if($numberlength != 0) { + my $frequency = GetSubscriptionFrequency($frequencyid); + if($frequency->{'unit'} eq 'day') { + ($year, $month, $day) = Add_Delta_Days(split(/-/, $startdate_iso), $numberlength * $frequency->{'unitsperissue'} / $frequency->{'issuesperunit'}); + } elsif($frequency->{'unit'} eq 'week') { + ($year, $month, $day) = Add_Delta_Days(split(/-/, $startdate_iso), $numberlength * 7 * $frequency->{'unitsperissue'} / $frequency->{'issuesperunit'}); + } elsif($frequency->{'unit'} eq 'month') { + ($year, $month, $day) = Add_Delta_YM(split(/-/, $startdate_iso), 0, $numberlength * $frequency->{'unitsperissue'} / $frequency->{'issuesperunit'}); + } elsif($frequency->{'unit'} eq 'year') { + ($year, $month, $day) = Add_Delta_YM(split(/-/, $startdate_iso), $numberlength * $frequency->{'unitsperissue'} / $frequency->{'issuesperunit'}, 0); + } + } elsif($weeklength != 0) { + ($year, $month, $day) = Add_Delta_Days(split(/-/, $startdate_iso), $weeklength * 7); + } elsif($monthlength != 0) { + ($year, $month, $day) = Add_Delta_YM(split(/-/, $startdate_iso), 0, $monthlength); + } + if(defined $year) { + $enddate = sprintf("%04d-%02d-%02d", $year, $month, $day); } else { - $numberlength = $sublength; + undef $enddate; + } + return $enddate; +} + +sub redirect_add_subscription { + my $auser = $query->param('user'); + my $branchcode = $query->param('branchcode'); + my $aqbooksellerid = $query->param('aqbooksellerid'); + my $cost = $query->param('cost'); + my $aqbudgetid = $query->param('aqbudgetid'); + my $periodicity = $query->param('frequency'); + my @irregularity = $query->param('irregularity'); + my $numberpattern = $query->param('numbering_pattern'); + my $locale = $query->param('locale'); + my $graceperiod = $query->param('graceperiod') || 0; + + my $subtype = $query->param('subtype'); + my $sublength = $query->param('sublength'); + my ( $numberlength, $weeklength, $monthlength ) + = _get_sub_length( $subtype, $sublength ); + my $add1 = $query->param('add1'); + my $lastvalue1 = $query->param('lastvalue1'); + my $innerloop1 = $query->param('innerloop1'); + my $innerloop2 = $query->param('innerloop2'); + my $lastvalue2 = $query->param('lastvalue2'); + my $lastvalue3 = $query->param('lastvalue3'); + my $innerloop3 = $query->param('innerloop3'); + my $status = 1; + my $biblionumber = $query->param('biblionumber'); + my $callnumber = $query->param('callnumber'); + my $notes = $query->param('notes'); + my $internalnotes = $query->param('internalnotes'); + my $letter = $query->param('letter'); + my $manualhistory = $query->param('manualhist') ? 1 : 0; + my $serialsadditems = $query->param('serialsadditems'); + my $staffdisplaycount = $query->param('staffdisplaycount'); + my $opacdisplaycount = $query->param('opacdisplaycount'); + my $location = $query->param('location'); + my $skip_serialseq = $query->param('skip_serialseq'); + my $startdate = format_date_in_iso( $query->param('startdate') ); + my $enddate = format_date_in_iso( $query->param('enddate') ); + my $firstacquidate = format_date_in_iso($query->param('firstacquidate')); + if(!defined $enddate || $enddate eq '') { + if($subtype eq "issues") { + $enddate = _guess_enddate($firstacquidate, $periodicity, $numberlength, $weeklength, $monthlength); + } else { + $enddate = _guess_enddate($startdate, $periodicity, $numberlength, $weeklength, $monthlength); + } } - my $add1 = $query->param('add1'); - my $every1 = $query->param('every1'); - my $whenmorethan1 = $query->param('whenmorethan1'); - my $setto1 = $query->param('setto1'); - my $lastvalue1 = $query->param('lastvalue1'); - my $innerloop1 =$query->param('innerloop1'); - my $add2 = $query->param('add2'); - my $every2 = $query->param('every2'); - my $whenmorethan2 = $query->param('whenmorethan2'); - my $setto2 = $query->param('setto2'); - my $innerloop2 =$query->param('innerloop2'); - my $lastvalue2 = $query->param('lastvalue2'); - my $add3 = $query->param('add3'); - my $every3 = $query->param('every3'); - my $whenmorethan3 = $query->param('whenmorethan3'); - my $setto3 = $query->param('setto3'); - my $lastvalue3 = $query->param('lastvalue3'); - my $innerloop3 =$query->param('innerloop3'); - my $numberingmethod = $query->param('numberingmethod'); - my $status = 1; - my $biblionumber = $query->param('biblionumber'); - my $callnumber = $query->param('callnumber'); - my $notes = $query->param('notes'); - my $internalnotes = $query->param('internalnotes'); - my $hemisphere = $query->param('hemisphere') || 1; - my $letter = $query->param('letter'); - # ## BugFIX : hdl doesnot know what innerloops or letter stand for but it seems necessary. So he adds them. - my $manualhistory = $query->param('manualhist'); - my $serialsadditems = $query->param('serialsadditems'); - my $staffdisplaycount = $query->param('staffdisplaycount'); - my $opacdisplaycount = $query->param('opacdisplaycount'); - my $location = $query->param('location'); - my $subscriptionid = NewSubscription($auser,$branchcode,$aqbooksellerid,$cost,$aqbudgetid,$biblionumber, - $startdate,$periodicity,$dow,$numberlength,$weeklength,$monthlength, - $add1,$every1,$whenmorethan1,$setto1,$lastvalue1,$innerloop1, - $add2,$every2,$whenmorethan2,$setto2,$lastvalue2,$innerloop2, - $add3,$every3,$whenmorethan3,$setto3,$lastvalue3,$innerloop3, - $numberingmethod, $status, $notes,$letter,$firstacquidate,join(",",@irregularity), - $numberpattern, $callnumber, $hemisphere,($manualhistory?$manualhistory:0),$internalnotes, - $serialsadditems,$staffdisplaycount,$opacdisplaycount,$graceperiod,$location - ); + + my $subscriptionid = NewSubscription( + $auser, $branchcode, $aqbooksellerid, $cost, $aqbudgetid, $biblionumber, + $startdate, $periodicity, $numberlength, $weeklength, + $monthlength, $lastvalue1, $innerloop1, $lastvalue2, $innerloop2, + $lastvalue3, $innerloop3, $status, $notes, $letter, $firstacquidate, + join(";",@irregularity), $numberpattern, $locale, $callnumber, + $manualhistory, $internalnotes, $serialsadditems, + $staffdisplaycount, $opacdisplaycount, $graceperiod, $location, $enddate, + $skip_serialseq + ); print $query->redirect("/cgi-bin/koha/serials/subscription-detail.pl?subscriptionid=$subscriptionid"); -} elsif ($op eq 'modsubscription') { + return; +} + +sub redirect_mod_subscription { my $subscriptionid = $query->param('subscriptionid'); - my @irregularity = $query->param('irregularity_select'); + my @irregularity = $query->param('irregularity'); my $auser = $query->param('user'); my $librarian => $query->param('librarian'), my $branchcode = $query->param('branchcode'); @@ -219,125 +351,66 @@ if ($op eq 'addsubscription') { my $biblionumber = $query->param('biblionumber'); my $aqbudgetid = $query->param('aqbudgetid'); my $startdate = format_date_in_iso($query->param('startdate')); + my $firstacquidate = format_date_in_iso( $query->param('firstacquidate') ); my $nextacquidate = $query->param('nextacquidate') ? format_date_in_iso($query->param('nextacquidate')): - format_date_in_iso($query->param('startdate')); - my $periodicity = $query->param('periodicity'); - my $dow = $query->param('dow'); - my $sublength = $query->param('sublength'); - my $subtype = $query->param('subtype'); + $firstacquidate; + my $enddate = format_date_in_iso($query->param('enddate')); + my $periodicity = $query->param('frequency'); - if($subtype eq 'months'){ - $monthlength = $sublength; - } elsif ($subtype eq 'weeks'){ - $weeklength = $sublength; - } else { - $numberlength = $sublength; - } + my $subtype = $query->param('subtype'); + my $sublength = $query->param('sublength'); + my ($numberlength, $weeklength, $monthlength) + = _get_sub_length( $subtype, $sublength ); my $numberpattern = $query->param('numbering_pattern'); - my $add1 = $query->param('add1'); - my $every1 = $query->param('every1'); - my $whenmorethan1 = $query->param('whenmorethan1'); - my $setto1 = $query->param('setto1'); + my $locale = $query->param('locale'); my $lastvalue1 = $query->param('lastvalue1'); my $innerloop1 = $query->param('innerloop1'); - my $add2 = $query->param('add2'); - my $every2 = $query->param('every2'); - my $whenmorethan2 = $query->param('whenmorethan2'); - my $setto2 = $query->param('setto2'); my $lastvalue2 = $query->param('lastvalue2'); my $innerloop2 = $query->param('innerloop2'); - my $add3 = $query->param('add3'); - my $every3 = $query->param('every3'); - my $whenmorethan3 = $query->param('whenmorethan3'); - my $setto3 = $query->param('setto3'); my $lastvalue3 = $query->param('lastvalue3'); my $innerloop3 = $query->param('innerloop3'); - my $numberingmethod = $query->param('numberingmethod'); my $status = 1; my $callnumber = $query->param('callnumber'); my $notes = $query->param('notes'); my $internalnotes = $query->param('internalnotes'); - my $hemisphere = $query->param('hemisphere'); my $letter = $query->param('letter'); - my $manualhistory = $query->param('manualhist'); - my $enddate = $query->param('enddate'); + my $manualhistory = $query->param('manualhist') ? 1 : 0; my $serialsadditems = $query->param('serialsadditems'); - # subscription history - my $histenddate = format_date_in_iso($query->param('histenddate')); - my $histstartdate = format_date_in_iso($query->param('histstartdate')); - my $recievedlist = $query->param('recievedlist'); - my $missinglist = $query->param('missinglist'); - my $opacnote = $query->param('opacnote'); - my $librariannote = $query->param('librariannote'); - my $history_only = $query->param('history_only'); my $staffdisplaycount = $query->param('staffdisplaycount'); my $opacdisplaycount = $query->param('opacdisplaycount'); my $graceperiod = $query->param('graceperiod') || 0; my $location = $query->param('location'); - # If it's a mod, we need to check the current 'expected' issue, and mod it in the serials table if necessary. - if ( $nextacquidate ne $nextexpected->{planneddate}->output('iso') ) { - ModNextExpected($subscriptionid,C4::Dates->new($nextacquidate,'iso')); - # if we have not received any issues yet, then we also must change the firstacquidate for the subs. - $firstissuedate = $nextacquidate if($nextexpected->{isfirstissue}); - } - - if ($history_only) { - ModSubscriptionHistory ($subscriptionid,$histstartdate,$histenddate,$recievedlist,$missinglist,$opacnote,$librariannote); - } else { - &ModSubscription( - $auser, $branchcode, $aqbooksellerid, $cost, - $aqbudgetid, $startdate, $periodicity, $firstissuedate, - $dow, join(",",@irregularity), $numberpattern, $numberlength, - $weeklength, $monthlength, $add1, $every1, - $whenmorethan1, $setto1, $lastvalue1, $innerloop1, - $add2, $every2, $whenmorethan2, $setto2, - $lastvalue2, $innerloop2, $add3, $every3, - $whenmorethan3, $setto3, $lastvalue3, $innerloop3, - $numberingmethod, $status, $biblionumber, $callnumber, - $notes, $letter, $hemisphere, $manualhistory,$internalnotes, - $serialsadditems, $subscriptionid,$staffdisplaycount,$opacdisplaycount,$graceperiod,$location - ); - } - print $query->redirect("/cgi-bin/koha/serials/subscription-detail.pl?subscriptionid=$subscriptionid"); -} else { + my $skip_serialseq = $query->param('skip_serialseq'); - while (@subscription_types) { - my $sub_type = shift @subscription_types; - my %row = ( 'name' => $sub_type ); - if ( defined $sub_on and $sub_on eq $sub_type ) { - $row{'selected'} = ' selected'; - } else { - $row{'selected'} = ''; - } - push( @sub_type_data, \%row ); - } - $template->param(subtype => \@sub_type_data, - ); - - my $new_biblionumber = $query->param('biblionumber_for_new_subscription'); - if (defined $new_biblionumber) { - my $bib = GetBiblioData($new_biblionumber); - if (defined $bib) { - $template->param(bibnum => $new_biblionumber); - $template->param(bibliotitle => $bib->{title}); + # Guess end date + if(!defined $enddate || $enddate eq '') { + if($subtype eq "issues") { + $enddate = _guess_enddate($nextacquidate, $periodicity, $numberlength, $weeklength, $monthlength); + } else { + $enddate = _guess_enddate($startdate, $periodicity, $numberlength, $weeklength, $monthlength); } } - output_html_with_http_headers $query, $cookie, $template->output; -} -sub letter_loop { - my ($selected_letter, $template) = @_; - my $letters = GetLetters('serial'); - my @letterloop; - foreach my $thisletter (keys %$letters) { - my $selected = $thisletter eq $selected_letter ? 1 : 0; - push @letterloop, { - value => $thisletter, - selected => $selected, - lettername => $letters->{$thisletter}, - }; + my $nextexpected = GetNextExpected($subscriptionid); + # If it's a mod, we need to check the current 'expected' issue, and mod it in the serials table if necessary. + if ( $nextexpected->{planneddate} && $nextacquidate ne $nextexpected->{planneddate} ) { + ModNextExpected($subscriptionid, $nextacquidate); + # if we have not received any issues yet, then we also must change the firstacquidate for the subs. + $firstissuedate = $nextacquidate if($nextexpected->{isfirstissue}); } - $template->param(letterloop => \@letterloop) if @letterloop; + + ModSubscription( + $auser, $branchcode, $aqbooksellerid, $cost, $aqbudgetid, $startdate, + $periodicity, $firstacquidate, join(";",@irregularity), + $numberpattern, $locale, $numberlength, $weeklength, $monthlength, $lastvalue1, + $innerloop1, $lastvalue2, $innerloop2, $lastvalue3, $innerloop3, + $status, $biblionumber, $callnumber, $notes, $letter, + $manualhistory, $internalnotes, $serialsadditems, $staffdisplaycount, + $opacdisplaycount, $graceperiod, $location, $enddate, $subscriptionid, + $skip_serialseq + ); + + print $query->redirect("/cgi-bin/koha/serials/subscription-detail.pl?subscriptionid=$subscriptionid"); return; }