X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=C4%2FAcquisition.pm;h=b6fab5de8142fda56cd60f5f53a383bb71ce3b5c;hb=bc87274c66a50712dccb15656001d97f2a36fba5;hp=17330e5dd912370576c91af36d8e8acea94a182e;hpb=0f6487bc32d80ad91cf11627b8aded8b48ab9c71;p=koha.git diff --git a/C4/Acquisition.pm b/C4/Acquisition.pm index 17330e5dd9..b6fab5de81 100644 --- a/C4/Acquisition.pm +++ b/C4/Acquisition.pm @@ -53,12 +53,12 @@ BEGIN { &ModBasketgroup &NewBasketgroup &DelBasketgroup &GetBasketgroup &CloseBasketgroup &GetBasketgroups &ReOpenBasketgroup - &NewOrder &DelOrder &ModOrder &GetPendingOrders &GetOrder &GetOrders + &NewOrder &DelOrder &ModOrder &GetPendingOrders &GetOrder &GetOrders &GetOrdersByBiblionumber &GetOrderNumber &GetLateOrders &GetOrderFromItemnumber &SearchOrder &GetHistory &GetRecentAcqui &ModReceiveOrder &CancelReceipt &ModOrderBiblioitemNumber &GetCancelledOrders - + &GetLastOrderNotReceivedFromSubscriptionid &GetLastOrderReceivedFromSubscriptionid &NewOrderItem &ModOrderItem &ModItemOrder &GetParcels &GetParcel @@ -190,18 +190,21 @@ The other parameters are optional, see ModBasketHeader for more info on them. =cut sub NewBasket { - my ( $booksellerid, $authorisedby, $basketname, $basketnote, $basketbooksellernote, $basketcontractnumber, $deliveryplace, $billingplace ) = @_; + 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, $deliveryplace || undef, $billingplace || undef ); + 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; } @@ -565,7 +568,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 @@ -575,7 +582,7 @@ Returns in a arrayref of hashref all about booksellers baskets, plus: =cut sub GetBasketsInfosByBookseller { - my ($supplierid) = @_; + my ($supplierid, $allbaskets) = @_; return unless $supplierid; @@ -592,9 +599,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({}); @@ -640,8 +650,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. @@ -653,8 +667,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}); } @@ -697,6 +711,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. @@ -798,14 +814,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({}); } #------------------------------------------------------------# @@ -860,7 +874,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 = '')"; @@ -942,6 +956,41 @@ sub GetOrders { return @$results; } +#------------------------------------------------------------# +=head3 GetOrdersByBiblionumber + + @orders = &GetOrdersByBiblionumber($biblionumber); + +Looks up the orders with linked to a specific $biblionumber, including +cancelled orders and received orders. + +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 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); + my $results = $sth->fetchall_arrayref({}); + $sth->finish; + return @$results; +} + #------------------------------------------------------------# =head3 GetOrderNumber @@ -1006,6 +1055,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 @@ -1032,7 +1142,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", "biblioitemnumber", "rrp", "ecost", "gstrate", "unitprice", "subscription", "sort1", "sort2", "booksellerinvoicenumber", "listprice", "budgetdate", "purchaseordernumber", "branchcode", "booksellerinvoicenumber", "budget_id". =back @@ -1124,6 +1234,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)){ @@ -1491,7 +1604,7 @@ C<@results> is an array of references-to-hash with the following keys: =item C -=item C +=item C =back @@ -1624,7 +1737,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 = ? @@ -1843,7 +1956,7 @@ sub GetLateOrders { 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 ? '; @@ -1940,6 +2053,7 @@ sub GetHistory { aqorders.quantityreceived, aqorders.ecost, aqorders.ordernumber, + aqorders.invoiceid, aqinvoices.invoicenumber, aqbooksellers.id as id, aqorders.biblionumber @@ -1952,7 +2066,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') "; @@ -2012,7 +2126,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 ='' ) "; @@ -2319,9 +2433,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{ @@ -2333,7 +2449,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.*