Bug 7162; Factorize code for order cancellation (QA fixes)
[koha.git] / C4 / Budgets.pm
index 075cef7..1a7f7e4 100644 (file)
@@ -1029,18 +1029,20 @@ amounts will be reset.
 =cut
 
 sub CloneBudgetPeriod {
-    my ($params)                = @_;
-    my $budget_period_id        = $params->{budget_period_id};
-    my $budget_period_startdate = $params->{budget_period_startdate};
-    my $budget_period_enddate   = $params->{budget_period_enddate};
+    my ($params)                  = @_;
+    my $budget_period_id          = $params->{budget_period_id};
+    my $budget_period_startdate   = $params->{budget_period_startdate};
+    my $budget_period_enddate     = $params->{budget_period_enddate};
+    my $budget_period_description = $params->{budget_period_description};
     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);
 
-    $budget_period->{budget_period_startdate} = $budget_period_startdate;
-    $budget_period->{budget_period_enddate}   = $budget_period_enddate;
+    $budget_period->{budget_period_startdate}   = $budget_period_startdate;
+    $budget_period->{budget_period_enddate}     = $budget_period_enddate;
+    $budget_period->{budget_period_description} = $budget_period_description;
     # The new budget (budget_period) should be active by default
     $budget_period->{budget_period_active}    = 1;
     my $original_budget_period_id = $budget_period->{budget_period_id};
@@ -1109,7 +1111,7 @@ sub CloneBudgetHierarchy {
 
         my $tidy_budget =
           { map { join( ' ', @columns ) =~ /$_/ ? ( $_ => $budget->{$_} ) : () }
-              keys($budget) };
+              keys %$budget };
         my $new_budget_id = AddBudget(
             {
                 %$tidy_budget,
@@ -1136,7 +1138,7 @@ sub CloneBudgetHierarchy {
     to_budget_period_id   => $to_budget_period_id,
   });
 
-Clone a budget hierarchy.
+Move orders from one budget period to another.
 
 =cut
 
@@ -1144,6 +1146,7 @@ sub MoveOrders {
     my ($params)              = @_;
     my $from_budget_period_id = $params->{from_budget_period_id};
     my $to_budget_period_id   = $params->{to_budget_period_id};
+    my $move_remaining_unspent = $params->{move_remaining_unspent};
     return
       if not $from_budget_period_id
           or not $to_budget_period_id
@@ -1162,6 +1165,13 @@ sub MoveOrders {
             WHERE ordernumber = ?
         |
     );
+    my $sth_update_budget_amount = $dbh->prepare(
+        q|
+            UPDATE aqbudgets
+            SET budget_amount = ?
+            WHERE budget_id = ?
+        |
+    );
     my $from_budgets = GetBudgetHierarchy($from_budget_period_id);
     for my $from_budget (@$from_budgets) {
         my $new_budget_id = $dbh->selectcol_arrayref(
@@ -1178,7 +1188,7 @@ sub MoveOrders {
             push @report,
               {
                 moved       => 0,
-                budget_code => $from_budget->{budget_code},
+                budget      => $from_budget,
                 error       => 'budget_code_not_exists',
               };
             next;
@@ -1193,14 +1203,29 @@ sub MoveOrders {
         my @orders_moved;
         for my $order (@$orders_to_move) {
             $sth_update_aqorders->execute( $new_budget->{budget_id}, $order->{ordernumber} );
-            push @orders_moved, $order->{ordernumber};
+            push @orders_moved, $order;
+        }
+
+        my $unspent_moved = 0;
+        if ($move_remaining_unspent) {
+            my $spent   = GetBudgetHierarchySpent( $from_budget->{budget_id} );
+            my $unspent = $from_budget->{budget_amount} - $spent;
+            my $new_budget_amount = $new_budget->{budget_amount};
+            if ( $unspent > 0 ) {
+                $new_budget_amount += $unspent;
+                $unspent_moved = $unspent;
+            }
+            $new_budget->{budget_amount} = $new_budget_amount;
+            $sth_update_budget_amount->execute( $new_budget_amount,
+                $new_budget->{budget_id} );
         }
 
         push @report,
           {
-            budget => $new_budget,
+            budget        => $new_budget,
             orders_moved  => \@orders_moved,
             moved         => 1,
+            unspent_moved => $unspent_moved,
           };
     }
     return \@report;