&GetBasketsByBookseller &GetBasketsByBasketgroup
&GetBasketsInfosByBookseller
+ &GetBasketUsers &ModBasketUsers
+ &CanUserManageBasket
+
&ModBasketHeader
&ModBasketgroup &NewBasketgroup &DelBasketgroup &GetBasketgroup &CloseBasketgroup
my $dbh = C4::Context->dbh;
my $query = "
SELECT aqbasket.*,
- concat( b.firstname,' ',b.surname) AS authorisedbyname,
- b.branchcode AS branch
+ concat( b.firstname,' ',b.surname) AS authorisedbyname
FROM aqbasket
LEFT JOIN borrowers b ON aqbasket.authorisedby=b.borrowernumber
WHERE basketno=?
return $sth->fetchall_arrayref({});
}
+=head3 GetBasketUsers
+
+ $basketusers_ids = &GetBasketUsers($basketno);
+
+Returns a list of all borrowernumbers that are in basket users list
+
+=cut
+
+sub GetBasketUsers {
+ my $basketno = shift;
+
+ return unless $basketno;
+
+ my $query = qq{
+ SELECT borrowernumber
+ FROM aqbasketusers
+ WHERE basketno = ?
+ };
+ my $dbh = C4::Context->dbh;
+ my $sth = $dbh->prepare($query);
+ $sth->execute($basketno);
+ my $results = $sth->fetchall_arrayref( {} );
+ $sth->finish();
+
+ my @borrowernumbers;
+ foreach (@$results) {
+ push @borrowernumbers, $_->{'borrowernumber'};
+ }
+
+ return @borrowernumbers;
+}
+
+=head3 ModBasketUsers
+
+ my @basketusers_ids = (1, 2, 3);
+ &ModBasketUsers($basketno, @basketusers_ids);
+
+Delete all users from basket users list, and add users in C<@basketusers_ids>
+to this users list.
+
+=cut
+
+sub ModBasketUsers {
+ my ($basketno, @basketusers_ids) = @_;
+
+ return unless $basketno;
+
+ my $dbh = C4::Context->dbh;
+ my $query = qq{
+ DELETE FROM aqbasketusers
+ WHERE basketno = ?
+ };
+ my $sth = $dbh->prepare($query);
+ $sth->execute($basketno);
+ $sth->finish();
+
+ $query = qq{
+ INSERT INTO aqbasketusers (basketno, borrowernumber)
+ VALUES (?, ?)
+ };
+ $sth = $dbh->prepare($query);
+ foreach my $basketuser_id (@basketusers_ids) {
+ $sth->execute($basketno, $basketuser_id);
+ }
+}
+
+=head3 CanUserManageBasket
+
+ my $bool = CanUserManageBasket($borrower, $basket[, $userflags]);
+ my $bool = CanUserManageBasket($borrowernumber, $basketno[, $userflags]);
+
+Check if a borrower can manage a basket, according to system preference
+AcqViewBaskets, user permissions and basket properties (creator, users list,
+branch).
+
+First parameter can be either a borrowernumber or a hashref as returned by
+C4::Members::GetMember.
+
+Second parameter can be either a basketno or a hashref as returned by
+C4::Acquisition::GetBasket.
+
+The third parameter is optional. If given, it should be a hashref as returned
+by C4::Auth::getuserflags. If not, getuserflags is called.
+
+If user is authorised to manage basket, returns 1.
+Otherwise returns 0.
+
+=cut
+
+sub CanUserManageBasket {
+ my ($borrower, $basket, $userflags) = @_;
+
+ if (!ref $borrower) {
+ $borrower = C4::Members::GetMember(borrowernumber => $borrower);
+ }
+ if (!ref $basket) {
+ $basket = GetBasket($basket);
+ }
+
+ return 0 unless ($basket and $borrower);
+
+ my $borrowernumber = $borrower->{borrowernumber};
+ my $basketno = $basket->{basketno};
+
+ my $AcqViewBaskets = C4::Context->preference('AcqViewBaskets');
+
+ if (!defined $userflags) {
+ my $dbh = C4::Context->dbh;
+ my $sth = $dbh->prepare("SELECT flags FROM borrowers WHERE borrowernumber = ?");
+ $sth->execute($borrowernumber);
+ my ($flags) = $sth->fetchrow_array;
+ $sth->finish;
+
+ $userflags = C4::Auth::getuserflags($flags, $borrower->{userid}, $dbh);
+ }
+
+ unless ($userflags->{superlibrarian}
+ || (ref $userflags->{acquisition} && $userflags->{acquisition}->{order_manage_all})
+ || (!ref $userflags->{acquisition} && $userflags->{acquisition}))
+ {
+ if (not exists $userflags->{acquisition}) {
+ return 0;
+ }
+
+ if ( (ref $userflags->{acquisition} && !$userflags->{acquisition}->{order_manage})
+ || (!ref $userflags->{acquisition} && !$userflags->{acquisition}) ) {
+ return 0;
+ }
+
+ if ($AcqViewBaskets eq 'user'
+ && $basket->{authorisedby} != $borrowernumber
+ && grep($borrowernumber, GetBasketUsers($basketno)) == 0) {
+ return 0;
+ }
+
+ if ($AcqViewBaskets eq 'branch' && defined $basket->{branch}
+ && $basket->{branch} ne $borrower->{branchcode}) {
+ return 0;
+ }
+ }
+
+ return 1;
+}
#------------------------------------------------------------#
aqbasket.closedate,
aqbasket.creationdate,
aqbasket.basketname,
+ aqbasketgroups.id as basketgroupid,
+ aqbasketgroups.name as basketgroupname,
aqorders.*
FROM aqorders
LEFT JOIN aqbasket ON aqorders.basketno = aqbasket.basketno
title
author
name
+ isbn
+ ean
from_placed_on
to_placed_on
basket - search both basket name and number
booksellerinvoicenumber
+ basketgroupname
+ budget
+ orderstatus (note that orderstatus '' will retrieve orders
+ of any status except cancelled)
+ biblionumber
+ get_canceled_order (if set to a true value, cancelled orders will
+ be included)
returns:
$order_loop is a list of hashrefs that each look like this:
my $basketgroupname = $params{basketgroupname};
my $budget = $params{budget};
my $orderstatus = $params{orderstatus};
+ my $biblionumber = $params{biblionumber};
+ my $get_canceled_order = $params{get_canceled_order} || 0;
my @order_loop;
my $total_qty = 0;
$query .= " WHERE 1 ";
- $query .= " AND (datecancellationprinted is NULL or datecancellationprinted='0000-00-00') " if $orderstatus ne 'cancelled';
+ unless ($get_canceled_order or (defined $orderstatus and $orderstatus eq 'cancelled')) {
+ $query .= " AND (datecancellationprinted is NULL or datecancellationprinted='0000-00-00') ";
+ }
my @query_params = ();
+ if ( $biblionumber ) {
+ $query .= " AND biblio.biblionumber = ?";
+ push @query_params, $biblionumber;
+ }
+
if ( $title ) {
$query .= " AND biblio.title LIKE ? ";
$title =~ s/\s+/%/g;
my @invoices = GetInvoices(
invoicenumber => $invoicenumber,
+ supplierid => $supplierid,
suppliername => $suppliername,
shipmentdatefrom => $shipmentdatefrom, # ISO format
shipmentdateto => $shipmentdateto, # ISO format
FROM aqinvoices
LEFT JOIN aqbooksellers ON aqbooksellers.id = aqinvoices.booksellerid
LEFT JOIN aqorders ON aqorders.invoiceid = aqinvoices.invoiceid
+ LEFT JOIN aqbasket ON aqbasket.basketno=aqorders.basketno
+ LEFT JOIN borrowers ON aqbasket.authorisedby=borrowers.borrowernumber
LEFT JOIN biblio ON aqorders.biblionumber = biblio.biblionumber
LEFT JOIN biblioitems ON biblio.biblionumber = biblioitems.biblionumber
LEFT JOIN subscription ON biblio.biblionumber = subscription.biblionumber
push @bind_args, "%$args{suppliername}%";
}
if($args{shipmentdatefrom}) {
- push @bind_strs, " aqinvoices.shipementdate >= ? ";
+ push @bind_strs, " aqinvoices.shipmentdate >= ? ";
push @bind_args, $args{shipmentdatefrom};
}
if($args{shipmentdateto}) {
- push @bind_strs, " aqinvoices.shipementdate <= ? ";
+ push @bind_strs, " aqinvoices.shipmentdate <= ? ";
push @bind_args, $args{shipmentdateto};
}
if($args{billingdatefrom}) {
push @bind_args, $args{billingdateto};
}
if($args{isbneanissn}) {
- push @bind_strs, " (biblioitems.isbn LIKE ? OR biblioitems.ean LIKE ? OR biblioitems.issn LIKE ? ) ";
+ push @bind_strs, " (biblioitems.isbn LIKE CONCAT('%', ?, '%') OR biblioitems.ean LIKE CONCAT('%', ?, '%') OR biblioitems.issn LIKE CONCAT('%', ?, '%') ) ";
push @bind_args, $args{isbneanissn}, $args{isbneanissn}, $args{isbneanissn};
}
if($args{title}) {
- push @bind_strs, " biblio.title LIKE ? ";
+ push @bind_strs, " biblio.title LIKE CONCAT('%', ?, '%') ";
push @bind_args, $args{title};
}
if($args{author}) {
- push @bind_strs, " biblio.author LIKE ? ";
+ push @bind_strs, " biblio.author LIKE CONCAT('%', ?, '%') ";
push @bind_args, $args{author};
}
if($args{publisher}) {
- push @bind_strs, " biblioitems.publishercode LIKE ? ";
+ push @bind_strs, " biblioitems.publishercode LIKE CONCAT('%', ?, '%') ";
push @bind_args, $args{publisher};
}
if($args{publicationyear}) {
- push @bind_strs, " biblioitems.publicationyear = ? ";
- push @bind_args, $args{publicationyear};
+ push @bind_strs, " ((biblioitems.publicationyear LIKE CONCAT('%', ?, '%')) OR (biblio.copyrightdate LIKE CONCAT('%', ?, '%'))) ";
+ push @bind_args, $args{publicationyear}, $args{publicationyear};
}
if($args{branchcode}) {
- push @bind_strs, " aqorders.branchcode = ? ";
+ push @bind_strs, " borrowers.branchcode = ? ";
push @bind_args, $args{branchcode};
}