@@ -, +, @@ issues per unit. Added support for real month and year lenghts. --- C4/Serials.pm | 6 ++++-- t/db_dependent/Serials/GetNextDate.t | 10 +++++----- 2 files changed, 9 insertions(+), 7 deletions(-) --- a/C4/Serials.pm +++ a/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}++; } --- a/t/db_dependent/Serials/GetNextDate.t +++ a/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'); --