From 0057fa933af260b01f29a9f648ce652999eddb32 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. Signed-off-by: Kyle M Hall Signed-off-by: Tomas Cohen Arazi --- 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 b203c32a4d..46d019da4d 100644 --- a/C4/Serials.pm +++ b/C4/Serials.pm @@ -2444,7 +2444,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}++; } @@ -2465,7 +2466,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 c9fe98c132..fe6059fd73 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'); -- 2.39.5