From c8fbe2d8b09cd1b87184f19da1187b3f5045dc43 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Tue, 30 Sep 2014 16:56:46 +0200 Subject: [PATCH] Bug 13014: Notify budget owner on new suggestion - UT Content-Type: text/plain; charset=utf-8 When a suggestion is created and linked to a fund, a mail will be generated, using a cronjob, to notify the budget owner. A suggestion is considered as "can be treated" if its status is "ASKED". Signed-off-by: Frederic Demians Signed-off-by: Marcel de Rooy --- C4/Suggestions.pm | 18 ++++++++++++++++++ t/db_dependent/Suggestions.t | 36 ++++++++++++++++++++++++++++++++++-- 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/C4/Suggestions.pm b/C4/Suggestions.pm index f34c942..889a186 100644 --- a/C4/Suggestions.pm +++ b/C4/Suggestions.pm @@ -49,6 +49,7 @@ our @EXPORT = qw( NewSuggestion SearchSuggestion DelSuggestionsOlderThan + GetUnprocessedSuggestions ); =head1 NAME @@ -597,6 +598,23 @@ sub DelSuggestionsOlderThan { $sth->execute("-$days"); } +sub GetUnprocessedSuggestions { + my ( $number_of_days_since_the_last_modification ) = @_; + + $number_of_days_since_the_last_modification ||= 0; + + my $dbh = C4::Context->dbh; + + my $s = $dbh->selectall_arrayref(q| + SELECT * + FROM suggestions + WHERE STATUS = 'ASKED' + AND budgetid IS NOT NULL + AND CAST(NOW() AS DATE) - INTERVAL ? DAY = CAST(suggesteddate AS DATE) + |, { Slice => {} }, $number_of_days_since_the_last_modification ); + return $s; +} + 1; __END__ diff --git a/t/db_dependent/Suggestions.t b/t/db_dependent/Suggestions.t index 7e12df9..df8e93b 100644 --- a/t/db_dependent/Suggestions.t +++ b/t/db_dependent/Suggestions.t @@ -21,11 +21,12 @@ use C4::Context; use C4::Members; use C4::Letters; use C4::Branch; -use C4::Budgets; +use C4::Budgets qw( AddBudgetPeriod AddBudget ); use Koha::DateUtils qw( dt_from_string ); -use Test::More tests => 104; +use DateTime::Duration; +use Test::More tests => 105; use Test::Warn; BEGIN { @@ -362,3 +363,34 @@ $my_suggestion->{budgetid} = ''; # If budgetid == '', NULL should be set in DB ModSuggestion( $my_suggestion ); $suggestion = GetSuggestion($my_suggestionid_test_budgetid); is( $suggestion->{budgetid}, undef, 'NewSuggestion Should set budgetid to NULL if equals an empty string' ); + +subtest 'GetUnprocessedSuggestions' => sub { + plan tests => 9; + $dbh->do(q|DELETE FROM suggestions|); + my $my_suggestionid = NewSuggestion($my_suggestion); + my $unprocessed_suggestions = C4::Suggestions::GetUnprocessedSuggestions; + is( scalar(@$unprocessed_suggestions), 0, 'GetUnprocessedSuggestions should return 0 if a suggestion has been processed but not linked to a fund' ); + my $status = ModSuggestion($mod_suggestion1); + my $suggestion = GetSuggestion($my_suggestionid); + is( $suggestion->{budgetid}, undef, 'ModSuggestion should set budgetid to NULL if not given' ); + ModSuggestion( { suggestionid => $my_suggestionid, budgetid => $budget_id } ); + $suggestion = GetSuggestion($my_suggestionid); + is( $suggestion->{budgetid}, $budget_id, 'ModSuggestion should modify budgetid if given' ); + + $unprocessed_suggestions = C4::Suggestions::GetUnprocessedSuggestions; + is( scalar(@$unprocessed_suggestions), 1, 'GetUnprocessedSuggestions should return the suggestion if the suggestion is linked to a fund and has not been processed yet' ); + + ModSuggestion( { suggestionid => $my_suggestionid, STATUS => 'REJECTED' } ); + $unprocessed_suggestions = C4::Suggestions::GetUnprocessedSuggestions; + is( scalar(@$unprocessed_suggestions), 0, 'GetUnprocessedSuggestions should return the suggestion if the suggestion is linked to a fund and has not been processed yet' ); + + ModSuggestion( { suggestionid => $my_suggestionid, STATUS => 'ASKED', suggesteddate => dt_from_string->add_duration( DateTime::Duration->new( days => -4 ) ) } ); + $unprocessed_suggestions = C4::Suggestions::GetUnprocessedSuggestions; + is( scalar(@$unprocessed_suggestions), 0, 'GetUnprocessedSuggestions should use 0 as default value for days' ); + $unprocessed_suggestions = C4::Suggestions::GetUnprocessedSuggestions(4); + is( scalar(@$unprocessed_suggestions), 1, 'GetUnprocessedSuggestions should return the suggestion suggested 4 days ago' ); + $unprocessed_suggestions = C4::Suggestions::GetUnprocessedSuggestions(3); + is( scalar(@$unprocessed_suggestions), 0, 'GetUnprocessedSuggestions should not return the suggestion, it has not been suggested 3 days ago' ); + $unprocessed_suggestions = C4::Suggestions::GetUnprocessedSuggestions(5); + is( scalar(@$unprocessed_suggestions), 0, 'GetUnprocessedSuggestions should not return the suggestion, it has not been suggested 5 days ago' ); +}; -- 1.7.10.4