Bug 11650: multiplicated authorities after link_bibs_to_authorities.pl
[koha_fer] / C4 / Budgets.pm
index 7236a06..30b9079 100644 (file)
@@ -20,10 +20,8 @@ package C4::Budgets;
 use strict;
 #use warnings; FIXME - Bug 2505
 use C4::Context;
-use C4::Dates qw(format_date format_date_in_iso);
-use C4::SQLHelper qw<:all>;
+use Koha::Database;
 use C4::Debug;
-
 use vars qw($VERSION @ISA @EXPORT);
 
 BEGIN {
@@ -35,6 +33,7 @@ BEGIN {
 
         &GetBudget
         &GetBudgetByOrderNumber
+        &GetBudgetByCode
         &GetBudgets
         &GetBudgetHierarchy
            &AddBudget
@@ -44,7 +43,8 @@ BEGIN {
         &GetBudgetOrdered
         &GetBudgetName
         &GetPeriodsCount
-        &GetChildBudgetsSpent
+        GetBudgetHierarchySpent
+        GetBudgetHierarchyOrdered
 
         &GetBudgetUsers
         &ModBudgetUsers
@@ -57,8 +57,6 @@ BEGIN {
         &AddBudgetPeriod
            &DelBudgetPeriod
 
-        &GetAuthvalueDropbox
-
         &ModBudgetPlan
 
         &GetCurrency
@@ -137,7 +135,10 @@ sub CheckBudgetParentPerm {
 
 sub AddBudgetPeriod {
     my ($budgetperiod) = @_;
-       return InsertInTable("aqbudgetperiods",$budgetperiod);
+    return unless($budgetperiod->{budget_period_startdate} && $budgetperiod->{budget_period_enddate});
+
+    my $resultset = Koha::Database->new()->schema->resultset('Aqbudgetperiod');
+    return $resultset->create($budgetperiod)->id;
 }
 # -------------------------------------------------------------------
 sub GetPeriodsCount {
@@ -401,47 +402,13 @@ sub GetBudgetAuthCats  {
 }
 
 # -------------------------------------------------------------------
-sub GetAuthvalueDropbox {
-    my ( $authcat, $default ) = @_;
-    my $branch_limit = C4::Context->userenv ? C4::Context->userenv->{"branch"} : "";
-    my $dbh = C4::Context->dbh;
-
-    my $query = qq{
-        SELECT *
-        FROM authorised_values
-    };
-    $query .= qq{
-          LEFT JOIN authorised_values_branches ON ( id = av_id )
-    } if $branch_limit;
-    $query .= qq{
-        WHERE category = ?
-    };
-    $query .= " AND ( branchcode = ? OR branchcode IS NULL )" if $branch_limit;
-    $query .= " GROUP BY lib ORDER BY category, lib, lib_opac";
-    my $sth = $dbh->prepare($query);
-    $sth->execute( $authcat, $branch_limit ? $branch_limit : () );
-
-
-    my $option_list = [];
-    my @authorised_values = ( q{} );
-    while (my $av = $sth->fetchrow_hashref) {
-        push @{$option_list}, {
-            value => $av->{authorised_value},
-            label => $av->{lib},
-            default => ($default eq $av->{authorised_value}),
-        };
-    }
-
-    if ( @{$option_list} ) {
-        return $option_list;
-    }
-    return;
-}
-
-# -------------------------------------------------------------------
 sub GetBudgetPeriods {
        my ($filters,$orderby) = @_;
-    return SearchInTable("aqbudgetperiods",$filters, $orderby, undef,undef, undef, "wide");
+
+    my $rs = Koha::Database->new()->schema->resultset('Aqbudgetperiod');
+    $rs = $rs->search( $filters, { order_by => $orderby } );
+    $rs->result_class('DBIx::Class::ResultClass::HashRefInflator');
+    return [ $rs->all ];
 }
 # -------------------------------------------------------------------
 sub GetBudgetPeriod {
@@ -488,8 +455,12 @@ sub DelBudgetPeriod{
 
 # -------------------------------------------------------------------
 sub ModBudgetPeriod {
-       my ($budget_period_information) = @_;
-       return UpdateInTable("aqbudgetperiods",$budget_period_information);
+    my ($budget_period) = @_;
+    my $result = Koha::Database->new()->schema->resultset('Aqbudgetperiod')->find($budget_period);
+    return unless($result);
+
+    $result = $result->update($budget_period);
+    return $result->in_storage;
 }
 
 # -------------------------------------------------------------------
@@ -594,48 +565,34 @@ sub GetBudgetHierarchy {
                last if $children == 0;
        }
 
-# add budget-percent and allocation, and flags for html-template
-       foreach my $r (@sort) {
-               my $subs_href = $r->{'child'};
-        my @subs_arr = ();
-        if ( defined $subs_href ) {
-            @subs_arr = @{$subs_href};
-        }
-
-        my $moo = $r->{'budget_code_indent'};
-        $moo =~ s/\ /\&nbsp\;/g;
-        $r->{'budget_code_indent'} =  $moo;
-
-        $moo = $r->{'budget_name_indent'};
-        $moo =~ s/\ /\&nbsp\;/g;
-        $r->{'budget_name_indent'} = $moo;
 
-        $r->{'budget_spent'}       = GetBudgetSpent( $r->{'budget_id'} );
-        $r->{budget_ordered} = GetBudgetOrdered( $r->{budget_id} );
-
-        $r->{budget_spent_sublevels} = 0;
-        $r->{budget_ordered_sublevels} = 0;
-        # foreach sub-levels
-               foreach my $sub (@subs_arr) {
-                       my $sub_budget = GetBudget($sub);
-            $r->{budget_spent_sublevels} += GetBudgetSpent( $sub_budget->{'budget_id'} );
-            $r->{budget_ordered_sublevels} += GetBudgetOrdered($sub);
-               }
-       }
-       return \@sort;
+    foreach my $budget (@sort) {
+        $budget->{budget_spent}   = GetBudgetSpent( $budget->{budget_id} );
+        $budget->{budget_ordered} = GetBudgetOrdered( $budget->{budget_id} );
+        $budget->{total_spent} = GetBudgetHierarchySpent( $budget->{budget_id} );
+        $budget->{total_ordered} = GetBudgetHierarchyOrdered( $budget->{budget_id} );
+    }
+    return \@sort;
 }
 
 # -------------------------------------------------------------------
 
 sub AddBudget {
     my ($budget) = @_;
-       return InsertInTable("aqbudgets",$budget);
+    return unless ($budget);
+
+    my $resultset = Koha::Database->new()->schema->resultset('Aqbudget');
+    return $resultset->create($budget)->id;
 }
 
 # -------------------------------------------------------------------
 sub ModBudget {
     my ($budget) = @_;
-       return UpdateInTable("aqbudgets",$budget);
+    my $result = Koha::Database->new()->schema->resultset('Aqbudget')->find($budget);
+    return unless($result);
+
+    $result = $result->update($budget);
+    return $result->in_storage;
 }
 
 # -------------------------------------------------------------------
@@ -695,33 +652,79 @@ sub GetBudgetByOrderNumber {
     return $result;
 }
 
-=head2 GetChildBudgetsSpent
+=head2 GetBudgetByCode
 
-  &GetChildBudgetsSpent($budget-id);
+    my $budget = &GetBudgetByCode($budget_code);
 
-gets the total spent of the level and sublevels of $budget_id
+Retrieve all aqbudgets fields as a hashref for the budget that has
+given budget_code
 
 =cut
 
-# -------------------------------------------------------------------
-sub GetChildBudgetsSpent {
-    my ( $budget_id ) = @_;
+sub GetBudgetByCode {
+    my ( $budget_code ) = @_;
+
     my $dbh = C4::Context->dbh;
-    my $query = "
+    my $query = qq{
         SELECT *
+        FROM aqbudgets
+        WHERE budget_code = ?
+        ORDER BY budget_id DESC
+        LIMIT 1
+    };
+    my $sth = $dbh->prepare( $query );
+    $sth->execute( $budget_code );
+    return $sth->fetchrow_hashref;
+}
+
+=head2 GetBudgetHierarchySpent
+
+  my $spent = GetBudgetHierarchySpent( $budget_id );
+
+Gets the total spent of the level and sublevels of $budget_id
+
+=cut
+
+sub GetBudgetHierarchySpent {
+    my ( $budget_id ) = @_;
+    my $dbh = C4::Context->dbh;
+    my $children_ids = $dbh->selectcol_arrayref(q|
+        SELECT budget_id
         FROM   aqbudgets
-        WHERE  budget_parent_id=?
-        ";
-    my $sth = $dbh->prepare($query);
-    $sth->execute( $budget_id );
-    my $result = $sth->fetchall_arrayref({});
-    my $total_spent = GetBudgetSpent($budget_id);
-    if ($result){
-        $total_spent += GetChildBudgetsSpent($_->{"budget_id"}) foreach @$result;    
+        WHERE  budget_parent_id = ?
+    |, {}, $budget_id );
+
+    my $total_spent = GetBudgetSpent( $budget_id );
+    for my $child_id ( @$children_ids ) {
+        $total_spent += GetBudgetHierarchySpent( $child_id );
     }
     return $total_spent;
 }
 
+=head2 GetBudgetHierarchyOrdered
+
+  my $ordered = GetBudgetHierarchyOrdered( $budget_id );
+
+Gets the total ordered of the level and sublevels of $budget_id
+
+=cut
+
+sub GetBudgetHierarchyOrdered {
+    my ( $budget_id ) = @_;
+    my $dbh = C4::Context->dbh;
+    my $children_ids = $dbh->selectcol_arrayref(q|
+        SELECT budget_id
+        FROM   aqbudgets
+        WHERE  budget_parent_id = ?
+    |, {}, $budget_id );
+
+    my $total_ordered = GetBudgetOrdered( $budget_id );
+    for my $child_id ( @$children_ids ) {
+        $total_ordered += GetBudgetHierarchyOrdered( $child_id );
+    }
+    return $total_ordered;
+}
+
 =head2 GetBudgets
 
   &GetBudgets($filter, $order_by);
@@ -732,9 +735,13 @@ gets all budgets
 
 # -------------------------------------------------------------------
 sub GetBudgets {
-    my $filters = shift;
-    my $orderby = shift || 'budget_name';
-    return SearchInTable("aqbudgets",$filters, $orderby, undef,undef, undef, "wide");
+    my ($filters, $orderby) = @_;
+    $orderby = 'budget_name' unless($orderby);
+
+    my $rs = Koha::Database->new()->schema->resultset('Aqbudget');
+    $rs = $rs->search( $filters, { order_by => $orderby } );
+    $rs->result_class('DBIx::Class::ResultClass::HashRefInflator');
+    return [ $rs->all  ];
 }
 
 =head2 GetBudgetUsers
@@ -825,30 +832,52 @@ sub CanUserUseBudget {
         }
 
         # Budget restricted to owner
-        if ($budget->{budget_permission} == 1
-        && $budget->{budget_owner_id}
-        && $budget->{budget_owner_id} != $borrower->{borrowernumber}) {
-            return 0;
+        if ( $budget->{budget_permission} == 1 ) {
+            if (    $budget->{budget_owner_id}
+                and $budget->{budget_owner_id} != $borrower->{borrowernumber} )
+            {
+                return 0;
+            }
         }
 
-        my @budget_users = GetBudgetUsers($budget->{budget_id});
-
         # Budget restricted to owner, users and library
-        if ($budget->{budget_permission} == 2
-        && $budget->{budget_owner_id}
-        && $budget->{budget_owner_id} != $borrower->{borrowernumber}
-        && (0 == grep {$borrower->{borrowernumber} == $_} @budget_users)
-        && defined $budget->{budget_branchcode}
-        && $budget->{budget_branchcode} ne C4::Context->userenv->{branch}) {
-            return 0;
+        elsif ( $budget->{budget_permission} == 2 ) {
+            my @budget_users = GetBudgetUsers( $budget->{budget_id} );
+
+            if (
+                (
+                        $budget->{budget_owner_id}
+                    and $budget->{budget_owner_id} !=
+                    $borrower->{borrowernumber}
+                    or not $budget->{budget_owner_id}
+                )
+                and ( 0 == grep { $borrower->{borrowernumber} == $_ }
+                    @budget_users )
+                and defined $budget->{budget_branchcode}
+                and $budget->{budget_branchcode} ne
+                C4::Context->userenv->{branch}
+              )
+            {
+                return 0;
+            }
         }
 
         # Budget restricted to owner and users
-        if ($budget->{budget_permission} == 3
-        && $budget->{budget_owner_id}
-        && $budget->{budget_owner_id} != $borrower->{borrowernumber}
-        && (0 == grep {$borrower->{borrowernumber} == $_} @budget_users)) {
-            return 0;
+        elsif ( $budget->{budget_permission} == 3 ) {
+            my @budget_users = GetBudgetUsers( $budget->{budget_id} );
+            if (
+                (
+                        $budget->{budget_owner_id}
+                    and $budget->{budget_owner_id} !=
+                    $borrower->{borrowernumber}
+                    or not $budget->{budget_owner_id}
+                )
+                and ( 0 == grep { $borrower->{borrowernumber} == $_ }
+                    @budget_users )
+              )
+            {
+                return 0;
+            }
         }
     }