Bug 35646: Allow use of publication date fields in serial numbering pattern

This patch extends the numbering pattern field to accept subsititutions for:
{Year} {Day} {DayName} {Month} {MonthName}

These fields are based on the publication date for the serial issue.

To test:
0 - Apply patch
1 - Setup a enw numbering pattern
    Serials->Manage numbering patterns + New numbering pattern
2 - In the numbering formula enter: {X} {Y} {Z} {Year} {Month} {Day} {MonthName} {DayName}
3 - Populate X/Y/Z in the table as you wish, these should be unaffected by patch
4 - Set a Frequency /  First issue plublication date / Subscription length
5 - Click 'Test pattern'
6 - Confirm the dates in the Number match the publication date values
7 - Try with different frequencies to confirm they match
8 - Save the pattern
9 - Create a new subscription and use the new pattern
10 - Confirm it works as expected

Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
This commit is contained in:
Nick Clemens 2023-12-22 18:20:09 +00:00 committed by Katrin Fischer
parent 36d96180ae
commit 15424f9b2f
Signed by: kfischer
GPG key ID: 0EF6E2C03357A834
2 changed files with 17 additions and 1 deletions

View file

@ -42,6 +42,7 @@ use C4::Serials::Frequency qw( GetSubscriptionFrequency );
use C4::Serials::Numberpattern;
use Koha::AdditionalFieldValues;
use Koha::Biblios;
use Koha::DateUtils qw( dt_from_string );
use Koha::Serial;
use Koha::SharedContent;
use Koha::Subscription::Histories;
@ -909,6 +910,13 @@ sub GetNextSeq {
$calculated =~ s/\{Z\}/$newlastvalue3string/g;
}
my $dt = dt_from_string($planneddate);
$calculated =~ s/\{Month\}/$dt->month/eg;
$calculated =~ s/\{MonthName\}/$dt->month_name/eg;
$calculated =~ s/\{Year\}/$dt->year/eg;
$calculated =~ s/\{Day\}/$dt->day/eg;
$calculated =~ s/\{DayName\}/$dt->day_name/eg;
}
return ($calculated,
@ -947,6 +955,14 @@ sub GetSeq {
my $newlastvalue3 = $subscription->{'lastvalue3'} || 0;
$newlastvalue3 = _numeration($newlastvalue3, $pattern->{numbering3}, $locale) if ($pattern->{numbering3}); # reset counter if needed.
$calculated =~ s/\{Z\}/$newlastvalue3/g;
my $dt = dt_from_string( $subscription->{firstaquidate} );
$calculated =~ s/\{Month\}/$dt->month/eg;
$calculated =~ s/\{MonthName\}/$dt->month_name/eg;
$calculated =~ s/\{Year\}/$dt->year/eg;
$calculated =~ s/\{Day\}/$dt->day/eg;
$calculated =~ s/\{DayName\}/$dt->day_name/eg;
return $calculated;
}

View file

@ -163,7 +163,7 @@ while( $i < 1000 ) {
last;
}
($calculated, $subscription{'lastvalue1'}, $subscription{'lastvalue2'}, $subscription{'lastvalue3'}, $subscription{'innerloop1'}, $subscription{'innerloop2'}, $subscription{'innerloop3'}) = GetNextSeq(\%subscription, \%pattern, $frequency);
($calculated, $subscription{'lastvalue1'}, $subscription{'lastvalue2'}, $subscription{'lastvalue3'}, $subscription{'innerloop1'}, $subscription{'innerloop2'}, $subscription{'innerloop3'}) = GetNextSeq(\%subscription, \%pattern, $frequency, $date);
$issuenumber++;
$line{'number'} = $calculated;
$line{'issuenumber'} = $issuenumber;