Bug 12671: Guess next serial date when there are several issues per unit. Added suppo...
authorOlli-Antti Kivilahti <olli-antti.kivilahti@jns.fi>
Tue, 23 Dec 2014 07:55:06 +0000 (09:55 +0200)
committerTomas Cohen Arazi <tomascohen@gmail.com>
Tue, 5 May 2015 18:22:10 +0000 (15:22 -0300)
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>
C4/Serials.pm
t/db_dependent/Serials/GetNextDate.t

index b203c32..46d019d 100644 (file)
@@ -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}++;
     }
index c9fe98c..fe6059f 100644 (file)
@@ -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');