Browse Source

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 <kyle@bywatersolutions.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@gmail.com>
3.20.x
Olli-Antti Kivilahti 8 years ago
committed by Tomas Cohen Arazi
parent
commit
0057fa933a
  1. 6
      C4/Serials.pm
  2. 10
      t/db_dependent/Serials/GetNextDate.t

6
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}++;
}

10
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');

Loading…
Cancel
Save