From e36c85420651fe0b035eddf5cac4ac16ef709362 Mon Sep 17 00:00:00 2001 From: Olli-Antti Kivilahti Date: Tue, 23 Dec 2014 09:55:06 +0200 Subject: [PATCH] Bug 12671: Guess next serial date when there are several issues per unit. Added support for real month and year lenghts. When getting the next frequency number, use the real number of days for each month and each year. Unit tests updated. --- C4/Serials.pm | 6 ++++-- t/db_dependent/Serials/GetNextDate.t | 10 +++++----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/C4/Serials.pm b/C4/Serials.pm index a0f15bb..f4cb7b9 100644 --- a/C4/Serials.pm +++ b/C4/Serials.pm @@ -2540,7 +2540,8 @@ sub _get_next_date_month { $day = $fa_day <= $days_in_month ? $fa_day : $days_in_month; } else { # Try to guess the next day in month - my $delta_days = int((28 - ($fa_day - 1)) / $freqdata->{issuesperunit}); + my $days_in_month = Days_in_Month($year, $month); + my $delta_days = int(($days_in_month - ($fa_day - 1)) / $freqdata->{issuesperunit}); ($year,$month,$day) = Add_Delta_Days($year, $month, $day, $delta_days); $subscription->{countissuesperunit}++; } @@ -2561,7 +2562,8 @@ sub _get_next_date_year { $day = $fa_day <= $days_in_month ? $fa_day : $days_in_month; } else { # Try to guess the next day in year - my $delta_days = int((365 - ($fa_day - 1)) / $freqdata->{issuesperunit}); + my $days_in_year = Days_in_Year($year,12); #Sum the days of all the months of this year + my $delta_days = int(($days_in_year - ($fa_day - 1)) / $freqdata->{issuesperunit}); ($year,$month,$day) = Add_Delta_Days($year, $month, $day, $delta_days); $subscription->{countissuesperunit}++; } diff --git a/t/db_dependent/Serials/GetNextDate.t b/t/db_dependent/Serials/GetNextDate.t index c9fe98c..fe6059f 100644 --- a/t/db_dependent/Serials/GetNextDate.t +++ b/t/db_dependent/Serials/GetNextDate.t @@ -371,11 +371,11 @@ $subscription = { }; $publisheddate = $subscription->{firstacquidate}; $publisheddate = GetNextDate($subscription, $publisheddate); -is($publisheddate, '1970-01-15'); +is($publisheddate, '1970-01-16', 'January has 31 days'); $publisheddate = GetNextDate($subscription, $publisheddate); is($publisheddate, '1970-02-01'); $publisheddate = GetNextDate($subscription, $publisheddate); -is($publisheddate, '1970-02-15'); +is($publisheddate, '1970-02-15', 'February has only 28 days'); $publisheddate = GetNextDate($subscription, $publisheddate); is($publisheddate, '1970-03-01'); @@ -388,13 +388,13 @@ $subscription = { }; $publisheddate = $subscription->{firstacquidate}; $publisheddate = GetNextDate($subscription, $publisheddate); -is($publisheddate, '1970-01-15'); +is($publisheddate, '1970-01-16', 'January has 31 days'); $publisheddate = GetNextDate($subscription, $publisheddate); -is($publisheddate, '1970-02-15'); +is($publisheddate, '1970-02-15', 'February has only 28 days'); $publisheddate = GetNextDate($subscription, $publisheddate); is($publisheddate, '1970-04-01'); $publisheddate = GetNextDate($subscription, $publisheddate); -is($publisheddate, '1970-04-15'); +is($publisheddate, '1970-04-16', 'April has 30 days'); $publisheddate = GetNextDate($subscription, $publisheddate); is($publisheddate, '1970-05-01'); -- 1.7.9.5