@@ -, +, @@ 2 should find items due in 2 days from now. 1 should find items due tomorrow. 0 should only find items due today. - Check out 2 items, due dates should be today, sometime in the past and one day after tomorrow. - Edit the message options - activate DUE and PREDUE notices with days in advance = 2 - Run the advance_notices.pl script with -v -c Result: Only a PREDUE notice is generated - Run the advance_notices.pl script with -v -c -m 2 Result: Only the PREDUE message is generated correctly. - Run t/db_dependent/Circulation.t - without first patch: all tests pass. - with first patch: some tests will fail. - Rerun script, now PREDUE and DUE notices should be generated. - Run t/db_dependent/Circulation.t again, all tests should pass. - Apply the patch --- C4/Circulation.pm | 2 +- t/db_dependent/Circulation.t | 59 ++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 55 insertions(+), 6 deletions(-) --- a/C4/Circulation.pm +++ a/C4/Circulation.pm @@ -2433,7 +2433,7 @@ FROM issues LEFT JOIN items USING (itemnumber) LEFT OUTER JOIN branches USING (branchcode) WHERE returndate is NULL -HAVING days_until_due > 0 AND days_until_due < ? +HAVING days_until_due >= 0 AND days_until_due <= ? END_SQL my @bind_parameters = ( $params->{'days_in_advance'} ); --- a/t/db_dependent/Circulation.t +++ a/t/db_dependent/Circulation.t @@ -9,7 +9,7 @@ use C4::Items; use C4::Members; use C4::Reserves; -use Test::More tests => 38; +use Test::More tests => 44; BEGIN { use_ok('C4::Circulation'); @@ -336,8 +336,28 @@ C4::Context->dbh->do("DELETE FROM accountlines"); # GetUpcomingDueIssues tests my $barcode = 'R00000342'; my $barcode2 = 'R00000343'; + my $barcode3 = 'R00000344'; my $branch = 'MPL'; + #Create another record + my $biblio2 = MARC::Record->new(); + my $title2 = 'Something is worng here'; + $biblio2->append_fields( + MARC::Field->new('100', ' ', ' ', a => 'Anonymous'), + MARC::Field->new('245', ' ', ' ', a => $title2), + ); + my ($biblionumber2, $biblioitemnumber2) = AddBiblio($biblio2, ''); + + #Create third item + AddItem( + { + homebranch => $branch, + holdingbranch => $branch, + barcode => $barcode3 + }, + $biblionumber2 + ); + # Create a borrower my %a_borrower_data = ( firstname => 'Fridolyn', @@ -351,23 +371,52 @@ C4::Context->dbh->do("DELETE FROM accountlines"); my $yesterday = DateTime->today(time_zone => C4::Context->tz())->add( days => -1 ); my $two_days_ahead = DateTime->today(time_zone => C4::Context->tz())->add( days => 2 ); + my $today = DateTime->today(time_zone => C4::Context->tz()); my $datedue = AddIssue( $a_borrower, $barcode, $yesterday ); my $datedue2 = AddIssue( $a_borrower, $barcode2, $two_days_ahead ); + my $upcoming_dues; + diag( "GetUpcomingDueIssues tests" ); - for my $i(0..2) { - my $upcoming_dues = C4::Circulation::GetUpcomingDueIssues( { days_in_advance => $i } ); - is ( scalar( @$upcoming_dues ), 0, "No items due in less than two days ($i days in advance)" ); + for my $i(0..1) { + $upcoming_dues = C4::Circulation::GetUpcomingDueIssues( { days_in_advance => $i } ); + is ( scalar( @$upcoming_dues ), 0, "No items due in less than one day ($i days in advance)" ); } + #days_in_advance needs to be inclusive, so 1 matches items due tomorrow, 0 items due today etc. + $upcoming_dues = C4::Circulation::GetUpcomingDueIssues( { days_in_advance => 2 } ); + is ( scalar ( @$upcoming_dues), 1, "Only one item due in 2 days or less" ); + for my $i(3..5) { - my $upcoming_dues = C4::Circulation::GetUpcomingDueIssues( { days_in_advance => $i } ); + $upcoming_dues = C4::Circulation::GetUpcomingDueIssues( { days_in_advance => $i } ); is ( scalar( @$upcoming_dues ), 1, "Bug 9362: Only one item due in more than 2 days ($i days in advance)" ); } + # Bug 11218 - Due notices not generated - GetUpcomingDueIssues needs to select due today items as well + + my $datedue2 = AddIssue( $a_borrower, $barcode3, $today ); + + $upcoming_dues = C4::Circulation::GetUpcomingDueIssues( { days_in_advance => -1 } ); + is ( scalar ( @$upcoming_dues), 0, "Overdues can not be selected" ); + + $upcoming_dues = C4::Circulation::GetUpcomingDueIssues( { days_in_advance => 0 } ); + is ( scalar ( @$upcoming_dues), 1, "1 item is due today" ); + + $upcoming_dues = C4::Circulation::GetUpcomingDueIssues( { days_in_advance => 1 } ); + is ( scalar ( @$upcoming_dues), 1, "1 item is due today, none tomorrow" ); + + $upcoming_dues = C4::Circulation::GetUpcomingDueIssues( { days_in_advance => 2 } ); + is ( scalar ( @$upcoming_dues), 2, "2 items are due withing 2 days" ); + + $upcoming_dues = C4::Circulation::GetUpcomingDueIssues( { days_in_advance => 3 } ); + is ( scalar ( @$upcoming_dues), 2, "2 items are due withing 2 days" ); + + $upcoming_dues = C4::Circulation::GetUpcomingDueIssues(); + is ( scalar ( @$upcoming_dues), 2, "days_in_advance is 7 in GetUpcomingDueIssues if not provided" ); + } $dbh->rollback; --