Bugzilla – Attachment 64315 Details for
Bug 18607
Fix date calculations for monthly frequencies in Serials
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 18607: Fix date calculations for monthly frequencies in Serials
Bug-18607-Fix-date-calculations-for-monthly-freque.patch (text/plain), 4.43 KB, created by
Kyle M Hall (khall)
on 2017-06-15 13:06:47 UTC
(
hide
)
Description:
Bug 18607: Fix date calculations for monthly frequencies in Serials
Filename:
MIME Type:
Creator:
Kyle M Hall (khall)
Created:
2017-06-15 13:06:47 UTC
Size:
4.43 KB
patch
obsolete
>From aa12ed0c90047596cb0a24d744e5daf134b674c9 Mon Sep 17 00:00:00 2001 >From: Marcel de Rooy <m.de.rooy@rijksmuseum.nl> >Date: Tue, 16 May 2017 14:46:55 +0200 >Subject: [PATCH] Bug 18607: Fix date calculations for monthly frequencies in > Serials > >Similarly to the solution of bug 18356, this patch fixes the date >calculation for monthly frequencies. > >The calculation in GetFictiveIssueNumber now makes use of the new >_delta_units sub introduced on bug 18356. > >The calculation in _get_next_date_month is also very similar to the one >in _get_next_date_year. I do not merge them here, but this could still >be considered later on. At least consistency is achieved now between >both routines. The connection with firstacquidate has been cut thru >just like for year units. > >Test plan: >[1] Without this patch, look at the prediction pattern for a > subscription with first issue on Feb 21 and 5 per month. The first > issues will be 21, 22, 23, 24, 25. Then jumping to 21, 23, 25, etc. >[2] Apply the patch. Look at the same prediction pattern. You will now > see 6 day intervals and a new cycle starting on the 21st. > So Feb 21, 27, Mar 5, 11, 17 and Mar 21, 27, etc. >[3] Edit an subscription. Try a few other monthly frequencies. >[4] The next patch adjusts related unit tests. > >Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl> > >Signed-off-by: Josef Moravec <josef.moravec@gmail.com> > >Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com> >--- > C4/Serials.pm | 40 +++++++++++++++++++--------------------- > 1 file changed, 19 insertions(+), 21 deletions(-) > >diff --git a/C4/Serials.pm b/C4/Serials.pm >index 7f91826..b631c77 100644 >--- a/C4/Serials.pm >+++ b/C4/Serials.pm >@@ -2294,12 +2294,8 @@ sub GetFictiveIssueNumber { > ($wkno, $year) = Week_of_Year($year, $month, $day); > my ($fa_wkno, $fa_yr) = Week_of_Year($fa_year, $fa_month, $fa_day); > $delta = ($fa_yr == $year) ? ($wkno - $fa_wkno) : ( ($year-$fa_yr-1)*52 + (52-$fa_wkno+$wkno) ); >- } elsif($unit eq 'month') { >- $delta = ($fa_year == $year) >- ? ($month - $fa_month) >- : ( ($year-$fa_year-1)*12 + (12-$fa_month+$month) ); >- } elsif( $unit eq 'year' ) { >- $delta = _delta_units( [ $fa_year, $fa_month, $fa_day ], [ $year, $month, $day ], 'year' ); >+ } elsif( $unit eq 'month' || $unit eq 'year' ) { >+ $delta = _delta_units( [$fa_year, $fa_month, $fa_day], [$year, $month, $day], $unit ); > } > if($frequency->{'unitsperissue'} == 1) { > $issueno = $delta * $frequency->{'issuesperunit'} + $subscription->{'countissuesperunit'}; >@@ -2373,24 +2369,26 @@ sub _get_next_date_week { > sub _get_next_date_month { > my ($subscription, $freqdata, $year, $month, $day) = @_; > >- my $fa_day; >- (undef, undef, $fa_day) = split /-/, $subscription->{firstacquidate}; >+ my @newissue; # ( yy, mm, dd ) >+ my $delta_days = int( 30 / $freqdata->{issuesperunit} ); > >- if ($subscription->{countissuesperunit} + 1 > $freqdata->{issuesperunit}){ >- $subscription->{countissuesperunit} = 1; >- ($year,$month,$day) = Add_Delta_YM($year,$month,$day, 0, >- $freqdata->{unitsperissue}); >- my $days_in_month = Days_in_Month($year, $month); >- $day = $fa_day <= $days_in_month ? $fa_day : $days_in_month; >- } else { >- # Try to guess the next day in month >- 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); >+ if( $freqdata->{issuesperunit} == 1 ) { >+ # Add full months >+ @newissue = Add_Delta_YM( >+ $year, $month, $day, 0, $freqdata->{"unitsperissue"} ); >+ } elsif ( $subscription->{countissuesperunit} < $freqdata->{issuesperunit} ) { >+ # Add rounded number of days based on frequency. >+ @newissue = Add_Delta_Days( $year, $month, $day, $delta_days ); > $subscription->{countissuesperunit}++; >+ } else { >+ # We finished a cycle of issues within a unit. >+ # Subtract delta * (issues - 1), add 1 month >+ @newissue = Add_Delta_Days( $year, $month, $day, >+ -$delta_days * ($freqdata->{issuesperunit} - 1) ); >+ @newissue = Add_Delta_YM( @newissue, 0, 1 ); >+ $subscription->{countissuesperunit} = 1; > } >- >- return ($year, $month, $day); >+ return @newissue; > } > > sub _get_next_date_year { >-- >2.10.2
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 18607
:
63841
|
63842
|
63843
|
63844
|
63873
|
63874
|
64023
|
64024
| 64315 |
64316