@@ -, +, @@ --- C4/Serials.pm | 34 +++++++++++++++---- .../prog/en/modules/serials/subscription-add.tt | 1 + .../prog/en/modules/serials/subscription-detail.tt | 8 ++++- .../intranet-tmpl/prog/js/subscription-add.js | 38 ++++++++++++++++++++-- serials/serials-collection.pl | 15 +++++++-- serials/showpredictionpattern.pl | 9 +++++ serials/subscription-add.pl | 8 +++++ 7 files changed, 100 insertions(+), 13 deletions(-) --- a/C4/Serials.pm +++ a/C4/Serials.pm @@ -862,8 +862,13 @@ sub GetNextSeq { } } - my $numberingmethod = $pattern->{numberingmethod}; my $calculated = ""; + my $numberingmethod = ""; + if ($pattern eq "pubdate"){ + $calculated = dt_from_string( $planneddate )->strftime( '%Y %B %d' ); + } else { + $numberingmethod = $pattern->{numberingmethod}; + } if ($numberingmethod) { $calculated = $numberingmethod; my $locale = $subscription->{locale}; @@ -943,6 +948,10 @@ the sequence in string format sub GetSeq { my ($subscription, $pattern) = @_; + if ($pattern->{numberingmethod} eq ''){ + return "pubdate"; + } + return unless ($subscription and $pattern); my $locale = $subscription->{locale}; @@ -1150,15 +1159,22 @@ sub ModSerialStatus { my $subscription = GetSubscription($subscriptionid); my $pattern = C4::Serials::Numberpattern::GetSubscriptionNumberpattern($subscription->{numberpattern}); + my $nextpublisheddate = GetNextDate($subscription, $publisheddate, 1); + my ( $newserialseq, $newlastvalue1, $newlastvalue2, $newlastvalue3, + $newinnerloop1, $newinnerloop2, $newinnerloop3 ); + + if (!defined $pattern){ + $pattern = "pubdate"; + ( $newserialseq, $newlastvalue1, $newlastvalue2, $newlastvalue3, + $newinnerloop1, $newinnerloop2, $newinnerloop3 ) = GetNextSeq( $subscription, $pattern, $nextpublisheddate ); + } else { + ( $newserialseq, $newlastvalue1, $newlastvalue2, $newlastvalue3, + $newinnerloop1, $newinnerloop2, $newinnerloop3 ) = GetNextSeq( $subscription, $pattern, $publisheddate ); + } + # next issue number - my ( - $newserialseq, $newlastvalue1, $newlastvalue2, $newlastvalue3, - $newinnerloop1, $newinnerloop2, $newinnerloop3 - ) - = GetNextSeq( $subscription, $pattern, $publisheddate ); # next date (calculated from actual date & frequency parameters) - my $nextpublisheddate = GetNextDate($subscription, $publisheddate, 1); my $nextpubdate = $nextpublisheddate; $query = "UPDATE subscription SET lastvalue1=?, lastvalue2=?, lastvalue3=?, innerloop1=?, innerloop2=?, innerloop3=? WHERE subscriptionid = ?"; @@ -1424,6 +1440,10 @@ sub NewSubscription { # calculate issue number my $serialseq = GetSeq($subscription, $pattern) || q{}; + if ($serialseq eq "pubdate"){ + $serialseq = dt_from_string( $firstacquidate )->strftime('%Y %B %d'); + } + Koha::Serial->new( { serialseq => $serialseq, --- a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-add.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-add.tt @@ -302,6 +302,7 @@ fieldset.rows li.radio { width: 100%; } /* override staff-global.css */ [% numberpattern.label | html %] [% END %] +
  • --- a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-detail.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-detail.tt @@ -168,8 +168,13 @@ [% END %]
  • Number pattern: - [% numberpattern.label | html %] + [% IF ( numberpattern ) %] + [% numberpattern.label | html %] + [% ELSE %] + Uses publication date + [% END %]
  • + [% IF ( numberpattern ) %]
  • @@ -196,6 +201,7 @@ [% END %]
    Starting with:
  • + [% END %] [% IF ( irregular_issues ) %]
  • Irregularity: [% irregular_issues | html %] issues
  • --- a/koha-tmpl/intranet-tmpl/prog/js/subscription-add.js +++ a/koha-tmpl/intranet-tmpl/prog/js/subscription-add.js @@ -198,6 +198,24 @@ function modifyAdvancedPattern() { advancedpatternlocked = 0; } +function clearAdvancedPattern() { + $("#patternname").prop('readOnly', false).val(''); + $("#numberingmethod").prop('readOnly', false).val(''); + + $("#advancedpredictionpatternt input").each(function() { + $(this).prop('readOnly', false).val(''); + }); + $("#advancedpredictionpatternt select").each(function() { + $(this).prop('disabled', false).val(''); + }); + + $("#restoreadvancedpatternbutton").hide(); + $("#saveadvancedpatternbutton").hide(); + $("#modifyadvancedpatternbutton").hide(); + + advancedpatternlocked = 1; +} + function restoreAdvancedPattern() { $("#patternname").prop('readOnly', true).val(globalnumpatterndata.label); $("#numberingmethod").prop('readOnly', true).val(globalnumpatterndata.numberingmethod); @@ -362,6 +380,15 @@ function show_page_2() { displaymoreoptions(); } +function usedatepattern() { + $("#more_options").hide(); + clearAdvancedPattern(); + if ($("#advancedpredictionpattern").is(":visible")){ + $("#advancedpredictionpattern").toggle(); + $(".toggle_advanced_pattern").toggle(); + } +} + $(document).ready(function() { $("#aqbooksellerid").on('keypress', function(e) { @@ -383,7 +410,12 @@ $(document).ready(function() { }); $("select#numberpattern").change(function(){ patternneedtobetested = 1; - numberpatternload(); + console.log($("select#numberpattern").val()); + if ($("select#numberpattern").val() == "0"){ + usedatepattern(); + } else { + numberpatternload(); + } }); $("#subtype").change(function(){ $("input[name='enddate']").val(''); @@ -432,7 +464,7 @@ $(document).ready(function() { if($("#frequency").val() != ""){ frequencyload(); } - if($("#numberpattern").val() != ""){ + if($("#numberpattern").val() != "0" && $("#numberpattern").val() != ""){ numberpatternload(); } @@ -496,4 +528,4 @@ $(document).ready(function() { e.preventDefault(); testPredictionPattern(); }); -}); +}); --- a/serials/serials-collection.pl +++ a/serials/serials-collection.pl @@ -83,6 +83,10 @@ if($op eq 'gennext' && @subscriptionid){ $newinnerloop1, $newinnerloop2, $newinnerloop3 ) = GetNextSeq($subscription, $pattern, $expected->{publisheddate}); + if (!defined $pattern && !defined $newserialseq){ + $newserialseq = $expected->{publisheddate}; + } + ## We generate the next publication date my $nextpublisheddate = GetNextDate($subscription, $expected->{publisheddate}, 1); my $planneddate = $date_received_today ? dt_from_string : $nextpublisheddate; @@ -128,8 +132,11 @@ if (@subscriptionid){ $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; + my $numberpattern = C4::Serials::Numberpattern::GetSubscriptionNumberpattern($subs->{numberpattern}); + if (!defined $numberpattern){ + $numberpattern->{label} = "Uses publication date"; + } $subs->{numberpattern} = $numberpattern; $subs->{'hasRouting'} = check_routing($subscriptionid); push @$subscriptiondescs,$subs; @@ -148,7 +155,11 @@ if (@subscriptionid){ my $frequency = C4::Serials::Frequency::GetSubscriptionFrequency($s->{periodicity}); my $numberpattern = C4::Serials::Numberpattern::GetSubscriptionNumberpattern($s->{numberpattern}); $s->{frequency} = $frequency; - $s->{numberpattern} = $numberpattern; + if (!defined $numberpattern){ + $numberpattern->{label} = "pubdate"; + } else { + $s->{numberpattern} = $numberpattern; + } } my $subscriptioninformation = GetFullSubscriptionsFromBiblionumber($biblionumber); $subscriptions=PrepareSerialsData($subscriptioninformation); --- a/serials/showpredictionpattern.pl +++ a/serials/showpredictionpattern.pl @@ -31,6 +31,7 @@ publication date, based on frequency and first publication date. use Modern::Perl; use CGI qw ( -utf8 ); +use POSIX qw(strftime); use Date::Calc qw(Today Day_of_Year Week_of_Year Day_of_Week Days_in_Year Delta_Days Add_Delta_Days Add_Delta_YM); use C4::Auth; use C4::Output; @@ -112,6 +113,11 @@ if(defined $subscriptionid) { my @predictions_loop; my ($calculated) = GetSeq(\%subscription, \%pattern); + +if ($calculated eq "pubdate"){ + $calculated = dt_from_string( $date )->strftime('%Y %B %d'); +} + push @predictions_loop, { number => $calculated, publicationdate => $date, @@ -159,6 +165,9 @@ while( $i < 1000 ) { ($calculated, $subscription{'lastvalue1'}, $subscription{'lastvalue2'}, $subscription{'lastvalue3'}, $subscription{'innerloop1'}, $subscription{'innerloop2'}, $subscription{'innerloop3'}) = GetNextSeq(\%subscription, \%pattern); $issuenumber++; $line{'number'} = $calculated; + if ($calculated eq ''){ + $line{'number'} = dt_from_string( $date )->strftime('%Y %B %d'); + } $line{'issuenumber'} = $issuenumber; if(@irreg && $issuenumber == $irreg[0]){ $line{'not_published'} = 1; --- a/serials/subscription-add.pl +++ a/serials/subscription-add.pl @@ -338,6 +338,10 @@ sub redirect_add_subscription { } } + if ($numberpattern == "0"){ # using publication date as numbering pattern + $numberpattern = undef; + } + my $subscriptionid = NewSubscription( $auser, $branchcode, $aqbooksellerid, $cost, $aqbudgetid, $biblionumber, $startdate, $periodicity, $numberlength, $weeklength, @@ -422,6 +426,10 @@ sub redirect_mod_subscription { $firstissuedate = $nextacquidate if($nextexpected->{isfirstissue}); } + if ($numberpattern == "0"){ # using publication date as numbering pattern + $numberpattern = undef; + } + ModSubscription( $auser, $branchcode, $aqbooksellerid, $cost, $aqbudgetid, $startdate, $periodicity, $firstacquidate, join(";",@irregularity), --