-# DEFAULT - DISPLAY AQPERIODS TABLE
-# -------------------------------------------------------------------
-# display the list of budget periods
- my $results = GetBudgetPeriods();
- $template->param( period_button_only => 1 ) unless (@$results) ;
- my $page = $input->param('page') || 1;
- my $first = ( $page - 1 ) * $pagesize;
- # if we are on the last page, the number of the last word to display
- # must not exceed the length of the results array
- my $last = min( $first + $pagesize - 1, scalar @{$results} - 1, );
- my $toggle = 0;
- my @period_loop;
- foreach my $result ( @{$results}[ $first .. $last ] ) {
- my $budgetperiod = $result;
- FormatData($budgetperiod);
- $budgetperiod->{'budget_period_total'} = $num->format_price( $budgetperiod->{'budget_period_total'} );
- $budgetperiod->{budget_active} = 1;
- push( @period_loop, $budgetperiod );
+# display the form for duplicating
+elsif ( $op eq 'duplicate_form'){
+ my $budgetperiod = GetBudgetPeriod($budget_period_id, $input);
+ $template->param(
+ 'duplicate_form' => '1',
+ 'budget_period_id' => $budget_period_id,
+ 'budgetperiod' => $budgetperiod,
+ );
+}
+
+# handle the actual duplication
+elsif ( $op eq 'duplicate_budget' ){
+ die "please specify a budget period id\n" if( !defined $budget_period_id || $budget_period_id eq '' );
+
+ my $budget_period_startdate = dt_from_string scalar $input->param('budget_period_startdate');
+ my $budget_period_enddate = dt_from_string scalar $input->param('budget_period_enddate');
+ my $budget_period_description = $input->param('budget_period_description');
+ my $amount_change_percentage = $input->param('amount_change_percentage');
+ my $amount_change_round_increment = $input->param('amount_change_round_increment');
+ 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(
+ {
+ budget_period_id => $budget_period_id,
+ budget_period_startdate => $budget_period_startdate,
+ budget_period_enddate => $budget_period_enddate,
+ budget_period_description => $budget_period_description,
+ amount_change_percentage => $amount_change_percentage,
+ amount_change_round_increment => $amount_change_round_increment,
+ mark_original_budget_as_inactive => $mark_original_budget_as_inactive,
+ reset_all_budgets => $reset_all_budgets,
+ }
+ );
+
+ # display the list of budgets
+ $op = 'else';
+}
+
+elsif ( $op eq 'close_form' ) {
+
+ my $budget_period = GetBudgetPeriod($budget_period_id);
+
+ my $active_budget_periods =
+ C4::Budgets::GetBudgetPeriods( { budget_period_active => 1 } );
+
+ # Remove the budget period from the list
+ $active_budget_periods =
+ [ map { ( $_->{budget_period_id} == $budget_period_id ) ? () : $_ }
+ @$active_budget_periods ];
+
+ my $budgets_to_move = GetBudgetHierarchy($budget_period_id);
+
+ my $number_of_unreceived_orders = 0;
+ for my $budget (@$budgets_to_move) {
+
+ # We want to move funds from this budget
+ my $unreceived_orders = C4::Acquisition::SearchOrders(
+ {
+ budget_id => $budget->{budget_id},
+ pending => 1,
+ }
+ );
+ $budget->{unreceived_orders} = $unreceived_orders;
+ $number_of_unreceived_orders += scalar(@$unreceived_orders);