# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-use strict;
-use warnings;
+use Modern::Perl;
use Carp;
use C4::Context;
use C4::Debug;
use MARC::Record;
use C4::Suggestions;
use C4::Biblio;
+use C4::Contract;
use C4::Debug;
-use C4::SQLHelper qw(InsertInTable UpdateInTable);
use C4::Bookseller qw(GetBookSellerFromId);
use C4::Templates qw(gettemplate);
&NewOrderItem &ModItemOrder
&GetParcels &GetParcel
- &GetContracts &GetContract
&GetInvoices
&GetInvoice
my ($basketno, $cgi) = @_;
my $basket = GetBasket($basketno);
my @orders = GetOrders($basketno);
- my $contract = GetContract($basket->{'contractnumber'});
+ my $contract = GetContract({
+ contractnumber => $basket->{'contractnumber'}
+ });
- my $template = C4::Templates::gettemplate("acqui/csv/basket.tmpl", "intranet", $cgi);
+ my $template = C4::Templates::gettemplate("acqui/csv/basket.tt", "intranet", $cgi);
my @rows;
foreach my $order (@orders) {
publicationyear => $bd->{'publicationyear'},
publishercode => $bd->{'publishercode'},
collectiontitle => $bd->{'collectiontitle'},
- notes => $order->{'order_internalnote'},
+ notes => $order->{'order_vendornote'},
quantity => $order->{'quantity'},
rrp => $order->{'rrp'},
deliveryplace => C4::Branch::GetBranchName( $basket->{'deliveryplace'} ),
my ($basketgroupid, $cgi) = @_;
my $baskets = GetBasketsByBasketgroup($basketgroupid);
- my $template = C4::Templates::gettemplate('acqui/csv/basketgroup.tmpl', 'intranet', $cgi);
+ my $template = C4::Templates::gettemplate('acqui/csv/basketgroup.tt', 'intranet', $cgi);
my @rows;
for my $basket (@$baskets) {
- my @orders = GetOrders( $$basket{basketno} );
- my $contract = GetContract( $$basket{contractnumber} );
+ my @orders = GetOrders( $basket->{basketno} );
+ my $contract = GetContract({
+ contractnumber => $basket->{contractnumber}
+ });
my $bookseller = GetBookSellerFromId( $$basket{booksellerid} );
my $basketgroup = GetBasketgroup( $$basket{basketgroupid} );
rrp => $order->{rrp},
discount => $bookseller->{discount},
ecost => $order->{ecost},
- notes => $order->{order_internalnote},
+ notes => $order->{order_vendornote},
entrydate => $order->{entrydate},
booksellername => $bookseller->{name},
bookselleraddress => $bookseller->{address1},
return unless $supplierid;
my $dbh = C4::Context->dbh;
- my $query = qq{
+ my $query = q{
SELECT aqbasket.*,
SUM(aqorders.quantity) AS total_items,
+ SUM(
+ IF ( aqorders.orderstatus = 'cancelled', aqorders.quantity, 0 )
+ ) AS total_items_cancelled,
COUNT(DISTINCT aqorders.biblionumber) AS total_biblios,
SUM(
IF(aqorders.datereceived IS NULL
FROM aqbasket
LEFT JOIN aqorders ON aqorders.basketno = aqbasket.basketno
WHERE booksellerid = ?};
- if(!$allbaskets) {
+
+ unless ( $allbaskets ) {
$query.=" AND (closedate IS NULL OR (aqorders.quantity > aqorders.quantityreceived AND datecancellationprinted IS NULL))";
}
$query.=" GROUP BY aqbasket.basketno";
my $sth = $dbh->prepare($query);
$sth->execute($supplierid);
- return $sth->fetchall_arrayref({});
+ my $baskets = $sth->fetchall_arrayref({});
+
+ # Retrieve the number of biblios cancelled
+ my $cancelled_biblios = $dbh->selectall_hashref( q|
+ SELECT COUNT(DISTINCT(biblionumber)) AS total_biblios_cancelled, aqbasket.basketno
+ FROM aqbasket
+ LEFT JOIN aqorders ON aqorders.basketno = aqbasket.basketno
+ WHERE booksellerid = ?
+ AND aqorders.orderstatus = 'cancelled'
+ GROUP BY aqbasket.basketno
+ |, 'basketno', {}, $supplierid );
+ map {
+ $_->{total_biblios_cancelled} = $cancelled_biblios->{$_->{basketno}}{total_biblios_cancelled} || 0
+ } @$baskets;
+
+ return $baskets;
}
=head3 GetBasketUsers
SELECT biblio.*,biblioitems.*,
aqorders.*,
aqbudgets.*,
- biblio.title,
aqorders_transfers.ordernumber_from AS transferred_from,
aqorders_transfers.timestamp AS transferred_from_timestamp
FROM aqorders
croak "Mandatory parameter $key missing" unless $orderinfo->{$key};
}
- if ( defined $orderinfo->{subscription} && $orderinfo->{'subscription'} eq 'yes' ) {
- $orderinfo->{'subscription'} = 1;
- } else {
- $orderinfo->{'subscription'} = 0;
- }
$orderinfo->{'entrydate'} ||= C4::Dates->new()->output("iso");
if (!$orderinfo->{quantityreceived}) {
$orderinfo->{quantityreceived} = 0;
}
- my $ordernumber=InsertInTable("aqorders",$orderinfo);
- if (not $orderinfo->{parent_ordernumber}) {
+ # get only the columns of Aqorder
+ my $schema = Koha::Database->new()->schema;
+ my $columns = ' '.join(' ', $schema->source('Aqorder')->columns).' ';
+ my $new_order = { map { $columns =~ / $_ / ? ($_ => $orderinfo->{$_}) : () } keys(%$orderinfo) };
+
+ my $rs = $schema->resultset('Aqorder');
+ my $ordernumber = $rs->create($new_order)->id;
+ if (not $new_order->{parent_ordernumber}) {
my $sth = $dbh->prepare("
UPDATE aqorders
SET parent_ordernumber = ordernumber
");
$sth->execute($ordernumber);
}
- return ( $orderinfo->{'basketno'}, $ordernumber );
+ return ( $new_order->{'basketno'}, $ordernumber );
}
};
$sth = $dbh->prepare($query);
$sth->execute(0, undef, undef, $ordernumber);
+ _cancel_items_receipt( $ordernumber );
} else {
# The order line has a parent, increase parent quantity and delete
# the order line.
" receipt";
return;
}
- if(C4::Context->preference('AcqCreateItem') eq 'receiving') {
- # Remove items that were created at receipt
- $query = qq{
- DELETE FROM items, aqorders_items
- USING items, aqorders_items
- WHERE items.itemnumber = ? AND aqorders_items.itemnumber = ?
- };
- $sth = $dbh->prepare($query);
- my @itemnumbers = GetItemnumbersFromOrder($ordernumber);
- foreach my $itemnumber (@itemnumbers) {
- $sth->execute($itemnumber, $itemnumber);
- }
- } else {
- # Update items
- my @itemnumbers = GetItemnumbersFromOrder($ordernumber);
- foreach my $itemnumber (@itemnumbers) {
- ModItemOrder($itemnumber, $parent_ordernumber);
- }
- }
+ _cancel_items_receipt( $ordernumber, $parent_ordernumber );
# Delete order line
$query = qq{
DELETE FROM aqorders
return $parent_ordernumber;
}
+sub _cancel_items_receipt {
+ my ( $ordernumber, $parent_ordernumber ) = @_;
+ $parent_ordernumber ||= $ordernumber;
+
+ my @itemnumbers = GetItemnumbersFromOrder($ordernumber);
+ if(C4::Context->preference('AcqCreateItem') eq 'receiving') {
+ # Remove items that were created at receipt
+ my $query = qq{
+ DELETE FROM items, aqorders_items
+ USING items, aqorders_items
+ WHERE items.itemnumber = ? AND aqorders_items.itemnumber = ?
+ };
+ my $dbh = C4::Context->dbh;
+ my $sth = $dbh->prepare($query);
+ foreach my $itemnumber (@itemnumbers) {
+ $sth->execute($itemnumber, $itemnumber);
+ }
+ } else {
+ # Update items
+ foreach my $itemnumber (@itemnumbers) {
+ ModItemOrder($itemnumber, $parent_ordernumber);
+ }
+ }
+}
+
#------------------------------------------------------------#
=head3 SearchOrders
my $owner = $params->{owner};
my $pending = $params->{pending};
my $ordered = $params->{ordered};
+ my $biblionumber = $params->{biblionumber};
+ my $budget_id = $params->{budget_id};
my $dbh = C4::Context->dbh;
my @args = ();
LEFT JOIN borrowers ON aqbasket.authorisedby=borrowers.borrowernumber
LEFT JOIN biblio ON aqorders.biblionumber=biblio.biblionumber
LEFT JOIN biblioitems ON biblioitems.biblionumber=biblio.biblionumber
+ };
+
+ # If we search on ordernumber, we retrieve the transfered order if a transfer has been done.
+ $query .= q{
+ LEFT JOIN aqorders_transfers ON aqorders_transfers.ordernumber_to = aqorders.ordernumber
+ } if $ordernumber;
+
+ $query .= q{
WHERE (datecancellationprinted is NULL)
};
}
if ( $ordernumber ) {
- $query .= ' AND (aqorders.ordernumber=?)';
- push @args, $ordernumber;
+ $query .= ' AND ( aqorders.ordernumber = ? OR aqorders_transfers.ordernumber_from = ? ) ';
+ push @args, ( $ordernumber, $ordernumber );
+ }
+ if ( $biblionumber ) {
+ $query .= 'AND aqorders.biblionumber = ?';
+ push @args, $biblionumber;
}
if( $search ) {
$query .= ' AND (biblio.title LIKE ? OR biblio.author LIKE ? OR biblioitems.isbn LIKE ?)';
push @args, $userenv->{'number'};
}
+ if ( $budget_id ) {
+ $query .= ' AND aqorders.budget_id = ?';
+ push @args, $budget_id;
+ }
+
$query .= ' ORDER BY aqbasket.basketno';
my $sth = $dbh->prepare($query);
$sth->execute( $bibnum, $ordernumber );
my @itemnumbers = GetItemnumbersFromOrder( $ordernumber );
foreach my $itemnumber (@itemnumbers){
- C4::Items::DelItem( $dbh, $bibnum, $itemnumber );
+ C4::Items::DelItem(
+ {
+ biblionumber => $bibnum,
+ itemnumber => $itemnumber
+ }
+ );
}
return;
}
SELECT aqbasket.basketno,
aqorders.ordernumber,
DATE(aqbasket.closedate) AS orderdate,
+ aqbasket.basketname AS basketname,
+ aqbasket.basketgroupid AS basketgroupid,
+ aqbasketgroups.name AS basketgroupname,
aqorders.rrp AS unitpricesupplier,
aqorders.ecost AS unitpricelib,
aqorders.claims_count AS claims_count,
LEFT JOIN aqbudgets ON aqorders.budget_id = aqbudgets.budget_id,
aqbasket LEFT JOIN borrowers ON aqbasket.authorisedby = borrowers.borrowernumber
LEFT JOIN aqbooksellers ON aqbasket.booksellerid = aqbooksellers.id
+ LEFT JOIN aqbasketgroups ON aqbasket.basketgroupid = aqbasketgroups.id
WHERE aqorders.basketno = aqbasket.basketno
AND ( datereceived = ''
OR datereceived IS NULL
$sth->execute(@query_params);
my @results;
while (my $data = $sth->fetchrow_hashref) {
- $data->{orderdate} = format_date($data->{orderdate});
- $data->{claimed_date} = format_date($data->{claimed_date});
push @results, $data;
}
return @results;
my $orderstatus = $params{orderstatus};
my $biblionumber = $params{biblionumber};
my $get_canceled_order = $params{get_canceled_order} || 0;
+ my $ordernumber = $params{ordernumber};
+ my $search_children_too = $params{search_children_too} || 0;
my @order_loop;
my $total_qty = 0;
push @query_params, "%$basketgroupname%";
}
+ if ($ordernumber) {
+ $query .= " AND (aqorders.ordernumber = ? ";
+ push @query_params, $ordernumber;
+ if ($search_children_too) {
+ $query .= " OR aqorders.parent_ordernumber = ? ";
+ push @query_params, $ordernumber;
+ }
+ $query .= ") ";
+ }
+
+
if ( C4::Context->preference("IndependentBranches") ) {
unless ( C4::Context->IsSuperLibrarian() ) {
$query .= " AND (borrowers.branchcode = ? OR borrowers.branchcode ='' ) ";
return $results;
}
-=head3 GetContracts
-
- $contractlist = &GetContracts($booksellerid, $activeonly);
-
-Looks up the contracts that belong to a bookseller
-
-Returns a list of contracts
-
-=over
-
-=item C<$booksellerid> is the "id" field in the "aqbooksellers" table.
-
-=item C<$activeonly> if exists get only contracts that are still active.
-
-=back
-
-=cut
-
-sub GetContracts {
- my ( $booksellerid, $activeonly ) = @_;
- my $dbh = C4::Context->dbh;
- my $query;
- if (! $activeonly) {
- $query = "
- SELECT *
- FROM aqcontract
- WHERE booksellerid=?
- ";
- } else {
- $query = "SELECT *
- FROM aqcontract
- WHERE booksellerid=?
- AND contractenddate >= CURDATE( )";
- }
- my $result_set =
- $dbh->selectall_arrayref( $query, { Slice => {} }, $booksellerid );
- return @{$result_set};
-}
-
#------------------------------------------------------------#
-=head3 GetContract
-
- $contract = &GetContract($contractID);
-
-Looks up the contract that has PRIMKEY (contractnumber) value $contractID
-
-Returns a contract
-
-=cut
-
-sub GetContract {
- my ( $contractno ) = @_;
- my $dbh = C4::Context->dbh;
- my $query = "
- SELECT *
- FROM aqcontract
- WHERE contractnumber=?
- ";
-
- my $sth = $dbh->prepare($query);
- $sth->execute( $contractno );
- my $result = $sth->fetchrow_hashref;
- return $result;
-}
-
=head3 AddClaim
=over
NULL
)
) AS receivedbiblios,
+ COUNT(
+ DISTINCT IF(
+ aqorders.subscriptionid IS NOT NULL,
+ aqorders.subscriptionid,
+ NULL
+ )
+ ) AS is_linked_to_subscriptions,
SUM(aqorders.quantityreceived) AS receiveditems
FROM aqinvoices
LEFT JOIN aqbooksellers ON aqbooksellers.id = aqinvoices.booksellerid