From b346a1a2ae7e9208f2942568cfa58d1f776d2a6c Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Mon, 2 Jun 2014 10:16:13 +0200 Subject: [PATCH] Bug 12164: On cloning budget periods, add a "reset all funds" option This patch adds a checkbox "reset all funds" (budgets). If it is checked, the new created budgets (funds) will be reset. Signed-off-by: Paola Rossi Signed-off-by: Katrin Fischer --- C4/Budgets.pm | 19 +++++++++++--- admin/aqbudgetperiods.pl | 2 ++ .../prog/en/modules/admin/aqbudgetperiods.tt | 5 ++++ t/db_dependent/Budgets.t | 29 +++++++++++++++++++++- 4 files changed, 51 insertions(+), 4 deletions(-) diff --git a/C4/Budgets.pm b/C4/Budgets.pm index 4095488..aed5e82 100644 --- a/C4/Budgets.pm +++ b/C4/Budgets.pm @@ -1013,15 +1013,19 @@ sub ConvertCurrency { my $new_budget_period_id = CloneBudgetPeriod({ budget_period_id => $budget_period_id, - budget_period_startdate => $budget_period_startdate; - budget_period_enddate => $budget_period_enddate; - mark_original_budget_as_inactive => 1 + budget_period_startdate => $budget_period_startdate, + budget_period_enddate => $budget_period_enddate, + mark_original_budget_as_inactive => 1n + reset_all_budgets => 1, }); Clone a budget period with all budgets. If the mark_origin_budget_as_inactive is set (0 by default), the original budget will be marked as inactive. +If the reset_all_budgets is set (0 by default), all budget (fund) +amounts will be reset. + =cut sub CloneBudgetPeriod { @@ -1031,6 +1035,7 @@ sub CloneBudgetPeriod { my $budget_period_enddate = $params->{budget_period_enddate}; my $mark_original_budget_as_inactive = $params->{mark_original_budget_as_inactive} || 0; + my $reset_all_budgets = $params->{reset_all_budgets} || 0; my $budget_period = GetBudgetPeriod($budget_period_id); @@ -1057,6 +1062,14 @@ sub CloneBudgetPeriod { ); } + if ( $reset_all_budgets ) { + my $budgets = GetBudgets({ budget_period_id => $new_budget_period_id }); + for my $budget ( @$budgets ) { + $budget->{budget_amount} = 0; + ModBudget( $budget ); + } + } + return $new_budget_period_id; } diff --git a/admin/aqbudgetperiods.pl b/admin/aqbudgetperiods.pl index 6309530..013d207 100755 --- a/admin/aqbudgetperiods.pl +++ b/admin/aqbudgetperiods.pl @@ -189,6 +189,7 @@ elsif ( $op eq 'duplicate_budget' ){ my $budget_period_startdate = dt_from_string $input->param('budget_period_startdate'); my $budget_period_enddate = dt_from_string $input->param('budget_period_enddate'); my $mark_original_budget_as_inactive = $input->param('mark_original_budget_as_inactive'); + my $reset_all_budgets = $input->param('reset_all_budgets'); my $new_budget_period_id = C4::Budgets::CloneBudgetPeriod( { @@ -196,6 +197,7 @@ elsif ( $op eq 'duplicate_budget' ){ budget_period_startdate => $budget_period_startdate, budget_period_enddate => $budget_period_enddate, mark_original_budget_as_inactive => $mark_original_budget_as_inactive, + reset_all_budgets => $reset_all_budgets, } ); diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgetperiods.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgetperiods.tt index 0f4bca6..6dc9a4d 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgetperiods.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgetperiods.tt @@ -190,6 +190,11 @@ +
  • + + +
  • + diff --git a/t/db_dependent/Budgets.t b/t/db_dependent/Budgets.t index e471b75..bf40821 100755 --- a/t/db_dependent/Budgets.t +++ b/t/db_dependent/Budgets.t @@ -1,5 +1,5 @@ use Modern::Perl; -use Test::More tests => 69; +use Test::More tests => 71; BEGIN { use_ok('C4::Budgets') @@ -382,6 +382,14 @@ is( $budget_period->{budget_period_active}, 1, 'CloneBudgetPeriod does not mark as inactive the budgetperiod if not needed' ); +$budget_hierarchy_cloned = GetBudgetHierarchy($budget_period_id_cloned); +my $number_of_budgets_not_reset = 0; +for my $budget (@$budget_hierarchy_cloned) { + $number_of_budgets_not_reset++ if $budget->{budget_amount} > 0; +} +is( $number_of_budgets_not_reset, 5, + 'CloneBudgetPeriod does not reset budgets (funds) if not needed' ); + $budget_period_id_cloned = C4::Budgets::CloneBudgetPeriod( { budget_period_id => $budget_period_id, @@ -407,6 +415,25 @@ is( $budget_period->{budget_period_active}, 0, 'CloneBudgetPeriod (with inactive param) marks as inactive the budgetperiod' ); +# CloneBudgetPeriod with param reset_all_budgets +$budget_period_id_cloned = C4::Budgets::CloneBudgetPeriod( + { + budget_period_id => $budget_period_id, + budget_period_startdate => '2014-01-01', + budget_period_enddate => '2014-12-31', + reset_all_budgets => 1, + } +); + +$budget_hierarchy_cloned = GetBudgetHierarchy($budget_period_id_cloned); +$number_of_budgets_not_reset = 0; +for my $budget (@$budget_hierarchy_cloned) { + $number_of_budgets_not_reset++ if $budget->{budget_amount} > 0; +} +is( $number_of_budgets_not_reset, 0, + 'CloneBudgetPeriod has reset all budgets (funds)' ); + + sub _get_dependencies { my ($budget_hierarchy) = @_; my $graph; -- 2.0.0.rc2