BEGIN {
# set the version for version checking
- $VERSION = 3.01;
+ $VERSION = 3.07.00.049;
require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(
&GetBudget
+ &GetBudgetByOrderNumber
&GetBudgets
&GetBudgetHierarchy
&AddBudget
&DelBudget
&GetBudgetSpent
&GetBudgetOrdered
+ &GetBudgetName
&GetPeriodsCount
&GetChildBudgetsSpent
+ &GetBudgetUsers
+ &ModBudgetUsers
+ &CanUserUseBudget
+ &CanUserModifyBudget
+
&GetBudgetPeriod
&GetBudgetPeriods
&ModBudgetPeriod
quantityreceived > 0 AND
datecancellationprinted IS NULL
|);
-
$sth->execute($budget_id);
my $sum = $sth->fetchrow_array;
+
+ $sth = $dbh->prepare(qq|
+ SELECT SUM(shipmentcost) AS sum
+ FROM aqinvoices
+ WHERE shipmentcost_budgetid = ?
+ AND closedate IS NOT NULL
+ |);
+ $sth->execute($budget_id);
+ my ($shipmentcost_sum) = $sth->fetchrow_array;
+ $sum += $shipmentcost_sum;
+
return $sum;
}
quantityreceived = 0 AND
datecancellationprinted IS NULL
|);
-
$sth->execute($budget_id);
my $sum = $sth->fetchrow_array;
+
+ $sth = $dbh->prepare(qq|
+ SELECT SUM(shipmentcost) AS sum
+ FROM aqinvoices
+ WHERE shipmentcost_budgetid = ?
+ AND closedate IS NULL
+ |);
+ $sth->execute($budget_id);
+ my ($shipmentcost_sum) = $sth->fetchrow_array;
+ $sum += $shipmentcost_sum;
+
return $sum;
}
+=head2 GetBudgetName
+
+ my $budget_name = &GetBudgetName($budget_id);
+
+get the budget_name for a given budget_id
+
+=cut
+
+sub GetBudgetName {
+ my ( $budget_id ) = @_;
+ my $dbh = C4::Context->dbh;
+ my $sth = $dbh->prepare(
+ qq|
+ SELECT budget_name
+ FROM aqbudgets
+ WHERE budget_id = ?
+ |);
+
+ $sth->execute($budget_id);
+ return $sth->fetchrow_array;
+}
+
# -------------------------------------------------------------------
sub GetBudgetAuthCats {
my ($budget_period_id) = shift;
# -------------------------------------------------------------------
sub GetAuthvalueDropbox {
my ( $authcat, $default ) = @_;
+ my $branch_limit = C4::Context->userenv ? C4::Context->userenv->{"branch"} : "";
my $dbh = C4::Context->dbh;
- my $sth = $dbh->prepare(
- 'SELECT authorised_value,lib FROM authorised_values
- WHERE category = ? ORDER BY lib'
- );
- $sth->execute( $authcat );
+
+ 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 ($value, $lib) = $sth->fetchrow_array) {
+ while (my $av = $sth->fetchrow_hashref) {
push @{$option_list}, {
- value => $value,
- label => $lib,
- default => ($default eq $value),
+ value => $av->{authorised_value},
+ label => $av->{lib},
+ default => ($default eq $av->{authorised_value}),
};
}
return $result;
}
+=head2 GetBudgetByOrderNumber
+
+ &GetBudgetByOrderNumber($ordernumber);
+
+get a specific budget by order number
+
+=cut
+
+# -------------------------------------------------------------------
+sub GetBudgetByOrderNumber {
+ my ( $ordernumber ) = @_;
+ my $dbh = C4::Context->dbh;
+ my $query = "
+ SELECT aqbudgets.*
+ FROM aqbudgets, aqorders
+ WHERE ordernumber=?
+ AND aqorders.budget_id = aqbudgets.budget_id
+ ";
+ my $sth = $dbh->prepare($query);
+ $sth->execute( $ordernumber );
+ my $result = $sth->fetchrow_hashref;
+ return $result;
+}
+
=head2 GetChildBudgetsSpent
&GetChildBudgetsSpent($budget-id);
# -------------------------------------------------------------------
sub GetBudgets {
- my ($filters,$orderby) = @_;
+ my $filters = shift;
+ my $orderby = shift || 'budget_name';
return SearchInTable("aqbudgets",$filters, $orderby, undef,undef, undef, "wide");
}
+=head2 GetBudgetUsers
+
+ my @borrowernumbers = &GetBudgetUsers($budget_id);
+
+Return the list of borrowernumbers linked to a budget
+
+=cut
+
+sub GetBudgetUsers {
+ my ($budget_id) = @_;
+
+ my $dbh = C4::Context->dbh;
+ my $query = qq{
+ SELECT borrowernumber
+ FROM aqbudgetborrowers
+ WHERE budget_id = ?
+ };
+ my $sth = $dbh->prepare($query);
+ $sth->execute($budget_id);
+
+ my @borrowernumbers;
+ while (my ($borrowernumber) = $sth->fetchrow_array) {
+ push @borrowernumbers, $borrowernumber
+ }
+
+ return @borrowernumbers;
+}
+
+=head2 ModBudgetUsers
+
+ &ModBudgetUsers($budget_id, @borrowernumbers);
+
+Modify the list of borrowernumbers linked to a budget
+
+=cut
+
+sub ModBudgetUsers {
+ my ($budget_id, @budget_users_id) = @_;
+
+ return unless $budget_id;
+
+ my $dbh = C4::Context->dbh;
+ my $query = "DELETE FROM aqbudgetborrowers WHERE budget_id = ?";
+ my $sth = $dbh->prepare($query);
+ $sth->execute($budget_id);
+
+ $query = qq{
+ INSERT INTO aqbudgetborrowers (budget_id, borrowernumber)
+ VALUES (?,?)
+ };
+ $sth = $dbh->prepare($query);
+ foreach my $borrowernumber (@budget_users_id) {
+ next unless $borrowernumber;
+ $sth->execute($budget_id, $borrowernumber);
+ }
+}
+
+sub CanUserUseBudget {
+ my ($borrower, $budget, $userflags) = @_;
+
+ if (not ref $borrower) {
+ $borrower = C4::Members::GetMember(borrowernumber => $borrower);
+ }
+ if (not ref $budget) {
+ $budget = GetBudget($budget);
+ }
+
+ return 0 unless ($borrower and $budget);
+
+ if (not defined $userflags) {
+ $userflags = C4::Auth::getuserflags($borrower->{flags},
+ $borrower->{userid});
+ }
+
+ unless ($userflags->{superlibrarian}
+ || (ref $userflags->{acquisition}
+ && $userflags->{acquisition}->{budget_manage_all})
+ || (!ref $userflags->{acquisition} && $userflags->{acquisition}))
+ {
+ if (not exists $userflags->{acquisition}) {
+ return 0;
+ }
+
+ if (!ref $userflags->{acquisition} && !$userflags->{acquisition}) {
+ return 0;
+ }
+
+ # Budget restricted to owner
+ if ($budget->{budget_permission} == 1
+ && $budget->{budget_owner_id}
+ && $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;
+ }
+
+ # 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;
+ }
+ }
+
+ return 1;
+}
+
+sub CanUserModifyBudget {
+ my ($borrower, $budget, $userflags) = @_;
+
+ if (not ref $borrower) {
+ $borrower = C4::Members::GetMember(borrowernumber => $borrower);
+ }
+ if (not ref $budget) {
+ $budget = GetBudget($budget);
+ }
+
+ return 0 unless ($borrower and $budget);
+
+ if (not defined $userflags) {
+ $userflags = C4::Auth::getuserflags($borrower->{flags},
+ $borrower->{userid});
+ }
+
+ unless ($userflags->{superlibrarian}
+ || (ref $userflags->{acquisition}
+ && $userflags->{acquisition}->{budget_manage_all})
+ || (!ref $userflags->{acquisition} && $userflags->{acquisition}))
+ {
+ if (!CanUserUseBudget($borrower, $budget, $userflags)) {
+ return 0;
+ }
+
+ if (ref $userflags->{acquisition}
+ && !$userflags->{acquisition}->{budget_modify}) {
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
# -------------------------------------------------------------------
=head2 GetCurrencies