X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=C4%2FAcquisition.pm;h=ed9c215127cf4f9571327f13b87ae4779b4ef2b2;hb=745bcfe0a6066a552d53d813ed4aed625c7e52b4;hp=05cae14b3ab38c433add15e74b40603859cdb732;hpb=d7faf087a3331bfee0348860a31518cc6f0c0075;p=koha.git diff --git a/C4/Acquisition.pm b/C4/Acquisition.pm index 05cae14b3a..ed9c215127 100644 --- a/C4/Acquisition.pm +++ b/C4/Acquisition.pm @@ -53,13 +53,13 @@ BEGIN { &ModBasketgroup &NewBasketgroup &DelBasketgroup &GetBasketgroup &CloseBasketgroup &GetBasketgroups &ReOpenBasketgroup - &NewOrder &DelOrder &ModOrder &GetPendingOrders &GetOrder &GetOrders - &GetOrderNumber &GetLateOrders &GetOrderFromItemnumber + &NewOrder &DelOrder &ModOrder &GetPendingOrders &GetOrder &GetOrders &GetOrdersByBiblionumber + &GetLateOrders &GetOrderFromItemnumber &SearchOrder &GetHistory &GetRecentAcqui - &ModReceiveOrder &CancelReceipt &ModOrderBiblioitemNumber - &GetCancelledOrders - - &NewOrderItem &ModOrderItem &ModItemOrder + &ModReceiveOrder &CancelReceipt + &GetCancelledOrders &TransferOrder + &GetLastOrderNotReceivedFromSubscriptionid &GetLastOrderReceivedFromSubscriptionid + &NewOrderItem &ModItemOrder &GetParcels &GetParcel &GetContracts &GetContract @@ -71,6 +71,7 @@ BEGIN { &ModInvoice &CloseInvoice &ReopenInvoice + &DelInvoice &GetItemnumbersFromOrder @@ -173,7 +174,7 @@ sub GetBasket { =head3 NewBasket $basket = &NewBasket( $booksellerid, $authorizedby, $basketname, - $basketnote, $basketbooksellernote, $basketcontractnumber ); + $basketnote, $basketbooksellernote, $basketcontractnumber, $deliveryplace, $billingplace ); Create a new basket in aqbasket table @@ -189,21 +190,22 @@ The other parameters are optional, see ModBasketHeader for more info on them. =cut -# FIXME : this function seems to be unused. - sub NewBasket { - my ( $booksellerid, $authorisedby, $basketname, $basketnote, $basketbooksellernote, $basketcontractnumber ) = @_; + my ( $booksellerid, $authorisedby, $basketname, $basketnote, + $basketbooksellernote, $basketcontractnumber, $deliveryplace, + $billingplace ) = @_; my $dbh = C4::Context->dbh; - my $query = " - INSERT INTO aqbasket - (creationdate,booksellerid,authorisedby) - VALUES (now(),'$booksellerid','$authorisedby') - "; - my $sth = - $dbh->do($query); -#find & return basketno MYSQL dependant, but $dbh->last_insert_id always returns null :-( - my $basket = $dbh->{'mysql_insertid'}; - ModBasketHeader($basket, $basketname || '', $basketnote || '', $basketbooksellernote || '', $basketcontractnumber || undef, $booksellerid); + my $query = + 'INSERT INTO aqbasket (creationdate,booksellerid,authorisedby) ' + . 'VALUES (now(),?,?)'; + $dbh->do( $query, {}, $booksellerid, $authorisedby ); + + my $basket = $dbh->{mysql_insertid}; + $basketname ||= q{}; # default to empty strings + $basketnote ||= q{}; + $basketbooksellernote ||= q{}; + ModBasketHeader( $basket, $basketname, $basketnote, $basketbooksellernote, + $basketcontractnumber, $booksellerid, $deliveryplace, $billingplace ); return $basket; } @@ -265,8 +267,8 @@ sub GetBasketAsCSV { notes => $order->{'notes'}, quantity => $order->{'quantity'}, rrp => $order->{'rrp'}, - deliveryplace => $basket->{'deliveryplace'}, - billingplace => $basket->{'billingplace'} + deliveryplace => C4::Branch::GetBranchName( $basket->{'deliveryplace'} ), + billingplace => C4::Branch::GetBranchName( $basket->{'billingplace'} ), }; foreach(qw( contractname author title publishercode collectiontitle notes @@ -315,6 +317,7 @@ sub GetBasketGroupAsCSV { my @orders = GetOrders( $$basket{basketno} ); my $contract = GetContract( $$basket{contractnumber} ); my $bookseller = GetBookSellerFromId( $$basket{booksellerid} ); + my $basketgroup = GetBasketgroup( $$basket{basketgroupid} ); foreach my $order (@orders) { my $bd = GetBiblioData( $order->{'biblionumber'} ); @@ -339,6 +342,10 @@ sub GetBasketGroupAsCSV { booksellerpostal => $bookseller->{postal}, contractnumber => $contract->{contractnumber}, contractname => $contract->{contractname}, + basketgroupdeliveryplace => C4::Branch::GetBranchName( $basketgroup->{deliveryplace} ), + basketgroupbillingplace => C4::Branch::GetBranchName( $basketgroup->{billingplace} ), + basketdeliveryplace => C4::Branch::GetBranchName( $basket->{deliveryplace} ), + basketbillingplace => C4::Branch::GetBranchName( $basket->{billingplace} ), }; foreach(qw( basketname author title publishercode collectiontitle notes @@ -486,17 +493,25 @@ Modifies a basket's header. =item C<$booksellerid> is the id (foreign) key in the "aqbooksellers" table for the vendor. +=item C<$deliveryplace> is the "deliveryplace" field in the aqbasket table. + +=item C<$billingplace> is the "billingplace" field in the aqbasket table. + =back =cut sub ModBasketHeader { - my ($basketno, $basketname, $note, $booksellernote, $contractnumber, $booksellerid) = @_; + my ($basketno, $basketname, $note, $booksellernote, $contractnumber, $booksellerid, $deliveryplace, $billingplace) = @_; + my $query = qq{ + UPDATE aqbasket + SET basketname=?, note=?, booksellernote=?, booksellerid=?, deliveryplace=?, billingplace=? + WHERE basketno=? + }; - my $query = "UPDATE aqbasket SET basketname=?, note=?, booksellernote=?, booksellerid=? WHERE basketno=?"; my $dbh = C4::Context->dbh; my $sth = $dbh->prepare($query); - $sth->execute($basketname,$note,$booksellernote,$booksellerid,$basketno); + $sth->execute($basketname, $note, $booksellernote, $booksellerid, $deliveryplace, $billingplace, $basketno); if ( $contractnumber ) { my $query2 ="UPDATE aqbasket SET contractnumber=? WHERE basketno=?"; @@ -554,7 +569,11 @@ sub GetBasketsByBookseller { =head3 GetBasketsInfosByBookseller - my $baskets = GetBasketsInfosByBookseller($supplierid); + my $baskets = GetBasketsInfosByBookseller($supplierid, $allbaskets); + +The optional second parameter allbaskets is a boolean allowing you to +select all baskets from the supplier; by default only active baskets (open or +closed but still something to receive) are returned. Returns in a arrayref of hashref all about booksellers baskets, plus: total_biblios: Number of distinct biblios in basket @@ -564,7 +583,7 @@ Returns in a arrayref of hashref all about booksellers baskets, plus: =cut sub GetBasketsInfosByBookseller { - my ($supplierid) = @_; + my ($supplierid, $allbaskets) = @_; return unless $supplierid; @@ -581,9 +600,12 @@ sub GetBasketsInfosByBookseller { ) AS expected_items FROM aqbasket LEFT JOIN aqorders ON aqorders.basketno = aqbasket.basketno - WHERE booksellerid = ? - GROUP BY aqbasket.basketno - }; + WHERE booksellerid = ?}; + if(!$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({}); @@ -629,8 +651,12 @@ $hashref->{'name'} is the 'name' field of the basketgroup in the aqbasketgroups $hashref->{'basketlist'} is a list reference of the 'id's of the baskets that belong to this group, +$hashref->{'billingplace'} is the 'billingplace' field of the basketgroup in the aqbasketgroups table, + $hashref->{'deliveryplace'} is the 'deliveryplace' field of the basketgroup in the aqbasketgroups table, +$hashref->{'freedeliveryplace'} is the 'freedeliveryplace' field of the basketgroup in the aqbasketgroups table, + $hashref->{'deliverycomment'} is the 'deliverycomment' field of the basketgroup in the aqbasketgroups table, $hashref->{'closed'} is the 'closed' field of the aqbasketgroups table, it is false if 0, true otherwise. @@ -642,8 +668,8 @@ sub NewBasketgroup { die "booksellerid is required to create a basketgroup" unless $basketgroupinfo->{'booksellerid'}; my $query = "INSERT INTO aqbasketgroups ("; my @params; - foreach my $field ('name', 'deliveryplace', 'deliverycomment', 'closed') { - if ( $basketgroupinfo->{$field} ) { + foreach my $field (qw(name billingplace deliveryplace freedeliveryplace deliverycomment closed)) { + if ( defined $basketgroupinfo->{$field} ) { $query .= "$field, "; push(@params, $basketgroupinfo->{$field}); } @@ -686,6 +712,8 @@ $hashref->{'billingplace'} is the 'billingplace' field of the basketgroup in the $hashref->{'deliveryplace'} is the 'deliveryplace' field of the basketgroup in the aqbasketgroups table, +$hashref->{'freedeliveryplace'} is the 'freedeliveryplace' field of the basketgroup in the aqbasketgroups table, + $hashref->{'deliverycomment'} is the 'deliverycomment' field of the basketgroup in the aqbasketgroups table, $hashref->{'closed'} is the 'closed' field of the aqbasketgroups table, it is false if 0, true otherwise. @@ -787,14 +815,12 @@ Returns a reference to the array of all the basketgroups of bookseller $booksell sub GetBasketgroups { my $booksellerid = shift; - die "bookseller id is required to edit a basketgroup" unless $booksellerid; - my $query = "SELECT * FROM aqbasketgroups WHERE booksellerid=? ORDER BY `id` DESC"; + die 'bookseller id is required to edit a basketgroup' unless $booksellerid; + my $query = 'SELECT * FROM aqbasketgroups WHERE booksellerid=? ORDER BY id DESC'; my $dbh = C4::Context->dbh; my $sth = $dbh->prepare($query); $sth->execute($booksellerid); - my $results = $sth->fetchall_arrayref({}); - $sth->finish; - return $results + return $sth->fetchall_arrayref({}); } #------------------------------------------------------------# @@ -849,7 +875,7 @@ sub GetPendingOrders { AND datecancellationprinted IS NULL"; my @query_params; my $userenv = C4::Context->userenv; - if ( C4::Context->preference("IndependantBranches") ) { + if ( C4::Context->preference("IndependentBranches") ) { if ( ($userenv) && ( $userenv->{flags} != 1 ) ) { $strsth .= " AND (borrowers.branchcode = ? or borrowers.branchcode = '')"; @@ -913,11 +939,14 @@ sub GetOrders { SELECT biblio.*,biblioitems.*, aqorders.*, aqbudgets.*, - biblio.title + biblio.title, + aqorders_transfers.ordernumber_from AS transferred_from, + aqorders_transfers.timestamp AS transferred_from_timestamp FROM aqorders LEFT JOIN aqbudgets ON aqbudgets.budget_id = aqorders.budget_id LEFT JOIN biblio ON biblio.biblionumber = aqorders.biblionumber LEFT JOIN biblioitems ON biblioitems.biblionumber =biblio.biblionumber + LEFT JOIN aqorders_transfers ON aqorders_transfers.ordernumber_to = aqorders.ordernumber WHERE basketno=? AND (datecancellationprinted IS NULL OR datecancellationprinted='0000-00-00') "; @@ -932,36 +961,38 @@ sub GetOrders { } #------------------------------------------------------------# +=head3 GetOrdersByBiblionumber -=head3 GetOrderNumber - - $ordernumber = &GetOrderNumber($biblioitemnumber, $biblionumber); - -Looks up the ordernumber with the given biblionumber and biblioitemnumber. + @orders = &GetOrdersByBiblionumber($biblionumber); -Returns the number of this order. - -=over +Looks up the orders with linked to a specific $biblionumber, including +cancelled orders and received orders. -=item C<$ordernumber> is the order number. - -=back +return : +C<@orders> is an array of references-to-hash, whose keys are the +fields from the aqorders, biblio, and biblioitems tables in the Koha database. =cut -sub GetOrderNumber { - my ( $biblionumber,$biblioitemnumber ) = @_; - my $dbh = C4::Context->dbh; - my $query = " - SELECT ordernumber - FROM aqorders - WHERE biblionumber=? - AND biblioitemnumber=? +sub GetOrdersByBiblionumber { + my $biblionumber = shift; + return unless $biblionumber; + my $dbh = C4::Context->dbh; + my $query =" + SELECT biblio.*,biblioitems.*, + aqorders.*, + aqbudgets.* + FROM aqorders + LEFT JOIN aqbudgets ON aqbudgets.budget_id = aqorders.budget_id + LEFT JOIN biblio ON biblio.biblionumber = aqorders.biblionumber + LEFT JOIN biblioitems ON biblioitems.biblionumber =biblio.biblionumber + WHERE aqorders.biblionumber=? "; my $sth = $dbh->prepare($query); - $sth->execute( $biblionumber, $biblioitemnumber ); - - return $sth->fetchrow; + $sth->execute($biblionumber); + my $results = $sth->fetchall_arrayref({}); + $sth->finish; + return @$results; } #------------------------------------------------------------# @@ -995,6 +1026,67 @@ sub GetOrder { return $data; } +=head3 GetLastOrderNotReceivedFromSubscriptionid + + $order = &GetLastOrderNotReceivedFromSubscriptionid($subscriptionid); + +Returns a reference-to-hash describing the last order not received for a subscription. + +=cut + +sub GetLastOrderNotReceivedFromSubscriptionid { + my ( $subscriptionid ) = @_; + my $dbh = C4::Context->dbh; + my $query = qq| + SELECT * FROM aqorders + LEFT JOIN subscription + ON ( aqorders.subscriptionid = subscription.subscriptionid ) + WHERE aqorders.subscriptionid = ? + AND aqorders.datereceived IS NULL + LIMIT 1 + |; + my $sth = $dbh->prepare( $query ); + $sth->execute( $subscriptionid ); + my $order = $sth->fetchrow_hashref; + return $order; +} + +=head3 GetLastOrderReceivedFromSubscriptionid + + $order = &GetLastOrderReceivedFromSubscriptionid($subscriptionid); + +Returns a reference-to-hash describing the last order received for a subscription. + +=cut + +sub GetLastOrderReceivedFromSubscriptionid { + my ( $subscriptionid ) = @_; + my $dbh = C4::Context->dbh; + my $query = qq| + SELECT * FROM aqorders + LEFT JOIN subscription + ON ( aqorders.subscriptionid = subscription.subscriptionid ) + WHERE aqorders.subscriptionid = ? + AND aqorders.datereceived = + ( + SELECT MAX( aqorders.datereceived ) + FROM aqorders + LEFT JOIN subscription + ON ( aqorders.subscriptionid = subscription.subscriptionid ) + WHERE aqorders.subscriptionid = ? + AND aqorders.datereceived IS NOT NULL + ) + ORDER BY ordernumber DESC + LIMIT 1 + |; + my $sth = $dbh->prepare( $query ); + $sth->execute( $subscriptionid, $subscriptionid ); + my $order = $sth->fetchrow_hashref; + return $order; + +} + + #------------------------------------------------------------# =head3 NewOrder @@ -1021,7 +1113,7 @@ Else, the upcoming July 1st is used. =item defaults entrydate to Now -The following keys are used: "biblionumber", "title", "basketno", "quantity", "notes", "biblioitemnumber", "rrp", "ecost", "gstrate", "unitprice", "subscription", "sort1", "sort2", "booksellerinvoicenumber", "listprice", "budgetdate", "purchaseordernumber", "branchcode", "booksellerinvoicenumber", "bookfundid". +The following keys are used: "biblionumber", "title", "basketno", "quantity", "notes", "rrp", "ecost", "gstrate", "unitprice", "subscription", "sort1", "sort2", "booksellerinvoicenumber", "listprice", "budgetdate", "purchaseordernumber", "branchcode", "booksellerinvoicenumber", "budget_id". =back @@ -1113,6 +1205,9 @@ sub ModOrder { my $sth = $dbh->prepare("SELECT * FROM aqorders LIMIT 1;"); $sth->execute; my $colnames = $sth->{NAME}; + #FIXME Be careful. If aqorders would have columns with diacritics, + #you should need to decode what you get back from NAME. + #See report 10110 and guided_reports.pl my $query = "UPDATE aqorders SET "; foreach my $orderinfokey (grep(!/ordernumber/, keys %$orderinfo)){ @@ -1133,37 +1228,6 @@ sub ModOrder { #------------------------------------------------------------# -=head3 ModOrderItem - - &ModOrderItem(\%hashref); - -Modifies the itemnumber in the aqorders_items table. The input hash needs three entities: - -=over - -=item - itemnumber: the old itemnumber -=item - ordernumber: the order this item is attached to -=item - newitemnumber: the new itemnumber we want to attach the line to - -=back - -=cut - -sub ModOrderItem { - my $orderiteminfo = shift; - if (! $orderiteminfo->{'ordernumber'} || ! $orderiteminfo->{'itemnumber'} || ! $orderiteminfo->{'newitemnumber'}){ - die "Ordernumber, itemnumber and newitemnumber is required"; - } - - my $dbh = C4::Context->dbh; - - my $query = "UPDATE aqorders_items set itemnumber=? where itemnumber=? and ordernumber=?"; - my @params = ($orderiteminfo->{'newitemnumber'}, $orderiteminfo->{'itemnumber'}, $orderiteminfo->{'ordernumber'}); - my $sth = $dbh->prepare($query); - $sth->execute(@params); - return 0; -} - =head3 ModItemOrder ModItemOrder($itemnumber, $ordernumber); @@ -1189,29 +1253,6 @@ sub ModItemOrder { #------------------------------------------------------------# - -=head3 ModOrderBibliotemNumber - - &ModOrderBiblioitemNumber($biblioitemnumber,$ordernumber, $biblionumber); - -Modifies the biblioitemnumber for an existing order. -Updates the order with order number C<$ordernum> and biblionumber C<$biblionumber>. - -=cut - -#FIXME: is this used at all? -sub ModOrderBiblioitemNumber { - my ($biblioitemnumber,$ordernumber, $biblionumber) = @_; - my $dbh = C4::Context->dbh; - my $query = " - UPDATE aqorders - SET biblioitemnumber = ? - WHERE ordernumber = ? - AND biblionumber = ?"; - my $sth = $dbh->prepare($query); - $sth->execute( $biblioitemnumber, $ordernumber, $biblionumber ); -} - =head3 GetCancelledOrders my @orders = GetCancelledOrders($basketno, $orderby); @@ -1227,11 +1268,18 @@ sub GetCancelledOrders { my $dbh = C4::Context->dbh; my $query = " - SELECT biblio.*, biblioitems.*, aqorders.*, aqbudgets.* + SELECT + biblio.*, + biblioitems.*, + aqorders.*, + aqbudgets.*, + aqorders_transfers.ordernumber_to AS transferred_to, + aqorders_transfers.timestamp AS transferred_to_timestamp FROM aqorders LEFT JOIN aqbudgets ON aqbudgets.budget_id = aqorders.budget_id LEFT JOIN biblio ON biblio.biblionumber = aqorders.biblionumber LEFT JOIN biblioitems ON biblioitems.biblionumber = biblio.biblionumber + LEFT JOIN aqorders_transfers ON aqorders_transfers.ordernumber_from = aqorders.ordernumber WHERE basketno = ? AND (datecancellationprinted IS NOT NULL AND datecancellationprinted <> '0000-00-00') @@ -1253,8 +1301,7 @@ sub GetCancelledOrders { =head3 ModReceiveOrder &ModReceiveOrder($biblionumber, $ordernumber, $quantityreceived, $user, - $unitprice, $invoiceid, $biblioitemnumber, - $bookfund, $rrp, \@received_itemnumbers); + $cost, $ecost, $invoiceid, rrp, budget_id, datereceived, \@received_itemnumbers); Updates an order, to reflect the fact that it was received, at least in part. All arguments not mentioned below update the fields with the @@ -1318,7 +1365,8 @@ sub ModReceiveOrder { $order->{'rrp'} = $rrp; $order->{ecost} = $ecost; $order->{'orderstatus'} = 3; # totally received - $new_ordernumber = NewOrder($order); + my $basketno; + ( $basketno, $new_ordernumber ) = NewOrder($order); if ($received_items) { foreach my $itemnumber (@$received_items) { @@ -1480,7 +1528,7 @@ C<@results> is an array of references-to-hash with the following keys: =item C -=item C +=item C =back @@ -1558,6 +1606,64 @@ sub DelOrder { } +=head3 TransferOrder + + my $newordernumber = TransferOrder($ordernumber, $basketno); + +Transfer an order line to a basket. +Mark $ordernumber as cancelled with an internal note 'Cancelled and transfered +to BOOKSELLER on DATE' and create new order with internal note +'Transfered from BOOKSELLER on DATE'. +Move all attached items to the new order. +Received orders cannot be transfered. +Return the ordernumber of created order. + +=cut + +sub TransferOrder { + my ($ordernumber, $basketno) = @_; + + return unless ($ordernumber and $basketno); + + my $order = GetOrder( $ordernumber ); + return if $order->{datereceived}; + my $basket = GetBasket($basketno); + return unless $basket; + + my $dbh = C4::Context->dbh; + my ($query, $sth, $rv); + + $query = qq{ + UPDATE aqorders + SET datecancellationprinted = CAST(NOW() AS date) + WHERE ordernumber = ? + }; + $sth = $dbh->prepare($query); + $rv = $sth->execute($ordernumber); + + delete $order->{'ordernumber'}; + $order->{'basketno'} = $basketno; + my $newordernumber; + (undef, $newordernumber) = NewOrder($order); + + $query = qq{ + UPDATE aqorders_items + SET ordernumber = ? + WHERE ordernumber = ? + }; + $sth = $dbh->prepare($query); + $sth->execute($newordernumber, $ordernumber); + + $query = q{ + INSERT INTO aqorders_transfers (ordernumber_from, ordernumber_to) + VALUES (?, ?) + }; + $sth = $dbh->prepare($query); + $sth->execute($ordernumber, $newordernumber); + + return $newordernumber; +} + =head2 FUNCTIONS ABOUT PARCELS =cut @@ -1613,7 +1719,7 @@ sub GetParcel { AND aqorders.datereceived = ? "; my @query_params = ( $supplierid, $code, $datereceived ); - if ( C4::Context->preference("IndependantBranches") ) { + if ( C4::Context->preference("IndependentBranches") ) { my $userenv = C4::Context->userenv; if ( ($userenv) && ( $userenv->{flags} != 1 ) ) { $strsth .= " and (borrowers.branchcode = ? @@ -1784,8 +1890,8 @@ sub GetLateOrders { my $having = ""; if ($dbdriver eq "mysql") { $select .= " - aqorders.quantity - IFNULL(aqorders.quantityreceived,0) AS quantity, - (aqorders.quantity - IFNULL(aqorders.quantityreceived,0)) * aqorders.rrp AS subtotal, + aqorders.quantity - COALESCE(aqorders.quantityreceived,0) AS quantity, + (aqorders.quantity - COALESCE(aqorders.quantityreceived,0)) * aqorders.rrp AS subtotal, DATEDIFF(CAST(now() AS date),closedate) AS latesince "; if ( defined $delay ) { @@ -1817,19 +1923,22 @@ sub GetLateOrders { $from .= ' AND borrowers.branchcode LIKE ? '; push @query_params, $branch; } + + if ( defined $estimateddeliverydatefrom or defined $estimateddeliverydateto ) { + $from .= ' AND aqbooksellers.deliverytime IS NOT NULL '; + } if ( defined $estimateddeliverydatefrom ) { - $from .= ' - AND aqbooksellers.deliverytime IS NOT NULL - AND ADDDATE(aqbasket.closedate, INTERVAL aqbooksellers.deliverytime DAY) >= ?'; + $from .= ' AND ADDDATE(aqbasket.closedate, INTERVAL aqbooksellers.deliverytime DAY) >= ?'; push @query_params, $estimateddeliverydatefrom; } - if ( defined $estimateddeliverydatefrom and defined $estimateddeliverydateto ) { + if ( defined $estimateddeliverydateto ) { $from .= ' AND ADDDATE(aqbasket.closedate, INTERVAL aqbooksellers.deliverytime DAY) <= ?'; push @query_params, $estimateddeliverydateto; - } elsif ( defined $estimateddeliverydatefrom ) { + } + if ( defined $estimateddeliverydatefrom and not defined $estimateddeliverydateto ) { $from .= ' AND ADDDATE(aqbasket.closedate, INTERVAL aqbooksellers.deliverytime DAY) <= CAST(now() AS date)'; } - if (C4::Context->preference("IndependantBranches") + if (C4::Context->preference("IndependentBranches") && C4::Context->userenv && C4::Context->userenv->{flags} != 1 ) { $from .= ' AND borrowers.branchcode LIKE ? '; @@ -1926,6 +2035,7 @@ sub GetHistory { aqorders.quantityreceived, aqorders.ecost, aqorders.ordernumber, + aqorders.invoiceid, aqinvoices.invoicenumber, aqbooksellers.id as id, aqorders.biblionumber @@ -1938,7 +2048,7 @@ sub GetHistory { LEFT JOIN aqinvoices ON aqorders.invoiceid = aqinvoices.invoiceid"; $query .= " LEFT JOIN borrowers ON aqbasket.authorisedby=borrowers.borrowernumber" - if ( C4::Context->preference("IndependantBranches") ); + if ( C4::Context->preference("IndependentBranches") ); $query .= " WHERE (datecancellationprinted is NULL or datecancellationprinted='0000-00-00') "; @@ -1998,7 +2108,7 @@ sub GetHistory { push @query_params, "%$basketgroupname%"; } - if ( C4::Context->preference("IndependantBranches") ) { + if ( C4::Context->preference("IndependentBranches") ) { my $userenv = C4::Context->userenv; if ( $userenv && ($userenv->{flags} || 0) != 1 ) { $query .= " AND (borrowers.branchcode = ? OR borrowers.branchcode ='' ) "; @@ -2305,9 +2415,11 @@ Orders informations are in $invoice->{orders} (array ref) sub GetInvoiceDetails { my ($invoiceid) = @_; - my $invoice; - return unless $invoiceid; + if ( !defined $invoiceid ) { + carp 'GetInvoiceDetails called without an invoiceid'; + return; + } my $dbh = C4::Context->dbh; my $query = qq{ @@ -2319,7 +2431,7 @@ sub GetInvoiceDetails { my $sth = $dbh->prepare($query); $sth->execute($invoiceid); - $invoice = $sth->fetchrow_hashref; + my $invoice = $sth->fetchrow_hashref; $query = qq{ SELECT aqorders.*, biblio.* @@ -2477,6 +2589,39 @@ sub ReopenInvoice { $sth->execute($invoiceid); } +=head3 DelInvoice + + DelInvoice($invoiceid); + +Delete an invoice if there are no items attached to it. + +=cut + +sub DelInvoice { + my ($invoiceid) = @_; + + return unless $invoiceid; + + my $dbh = C4::Context->dbh; + my $query = qq{ + SELECT COUNT(*) + FROM aqorders + WHERE invoiceid = ? + }; + my $sth = $dbh->prepare($query); + $sth->execute($invoiceid); + my $res = $sth->fetchrow_arrayref; + if ( $res && $res->[0] == 0 ) { + $query = qq{ + DELETE FROM aqinvoices + WHERE invoiceid = ? + }; + my $sth = $dbh->prepare($query); + return ( $sth->execute($invoiceid) > 0 ); + } + return; +} + 1; __END__