diff --git a/C4/Acquisition.pm b/C4/Acquisition.pm index 1df612165d..a599fdd216 100644 --- a/C4/Acquisition.pm +++ b/C4/Acquisition.pm @@ -20,6 +20,7 @@ package C4::Acquisition; use strict; use C4::Context; +use C4::Debug; use C4::Dates qw(format_date); use MARC::Record; use C4::Suggestions; @@ -977,107 +978,81 @@ sub GetLateOrders { my $dbh = C4::Context->dbh; #BEWARE, order of parenthesis and LEFT JOIN is important for speed - my $strsth; my $dbdriver = C4::Context->config("db_scheme") || "mysql"; - my @query_params = (); - - # warn " $dbdriver"; - if ( $dbdriver eq "mysql" ) { - $strsth = " - SELECT aqbasket.basketno,aqorders.ordernumber, - DATE(aqbasket.closedate) AS orderdate, - aqorders.quantity - IFNULL(aqorders.quantityreceived,0) AS quantity, - aqorders.rrp AS unitpricesupplier, - aqorders.ecost AS unitpricelib, - (aqorders.quantity - IFNULL(aqorders.quantityreceived,0)) * aqorders.rrp AS subtotal, - aqbookfund.bookfundname AS budget, - borrowers.branchcode AS branch, - aqbooksellers.name AS supplier, - aqorders.title, - biblio.author, - biblioitems.publishercode AS publisher, - biblioitems.publicationyear, - DATEDIFF(CURDATE( ),closedate) AS latesince - FROM ((( - (aqorders LEFT JOIN biblio ON biblio.biblionumber = aqorders.biblionumber) - LEFT JOIN biblioitems ON biblioitems.biblionumber=biblio.biblionumber) - LEFT JOIN aqorderbreakdown ON aqorders.ordernumber = aqorderbreakdown.ordernumber) - LEFT JOIN aqbookfund ON aqorderbreakdown.bookfundid = aqbookfund.bookfundid), - (aqbasket LEFT JOIN borrowers ON aqbasket.authorisedby = borrowers.borrowernumber) - LEFT JOIN aqbooksellers ON aqbasket.booksellerid = aqbooksellers.id - WHERE aqorders.basketno = aqbasket.basketno - AND (closedate <= DATE_SUB(CURDATE( ),INTERVAL ? DAY)) - AND ((datereceived = '' OR datereceived is null) - OR (aqorders.quantityreceived < aqorders.quantity) ) - "; - - push @query_params, $delay; - - if ( defined $supplierid ) { - $strsth .= ' AND aqbasket.booksellerid = ? '; - push @query_params, $supplierid; - } - - if ( defined $branch ) { - $strsth .= ' AND borrowers.branchcode like ? '; - push @query_params, $branch; - } - - if ( C4::Context->preference("IndependantBranches") + my @query_params = ($delay); # delay is the first argument regardless + my $select = " + SELECT aqbasket.basketno, + aqorders.ordernumber, + DATE(aqbasket.closedate) AS orderdate, + aqorders.rrp AS unitpricesupplier, + aqorders.ecost AS unitpricelib, + aqbookfund.bookfundname AS budget, + borrowers.branchcode AS branch, + aqbooksellers.name AS supplier, + aqorders.title, + biblio.author, + biblioitems.publishercode AS publisher, + biblioitems.publicationyear, + "; + my $from = " + FROM ((( + (aqorders LEFT JOIN biblio ON biblio.biblionumber = aqorders.biblionumber) + LEFT JOIN biblioitems ON biblioitems.biblionumber = biblio.biblionumber) + LEFT JOIN aqorderbreakdown ON aqorders.ordernumber = aqorderbreakdown.ordernumber) + LEFT JOIN aqbookfund ON aqorderbreakdown.bookfundid = aqbookfund.bookfundid), + (aqbasket LEFT JOIN borrowers ON aqbasket.authorisedby = borrowers.borrowernumber) + LEFT JOIN aqbooksellers ON aqbasket.booksellerid = aqbooksellers.id + WHERE aqorders.basketno = aqbasket.basketno + AND ( (datereceived = '' OR datereceived IS NULL) + OR (aqorders.quantityreceived < aqorders.quantity) + ) + "; + 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, + DATEDIFF(CURDATE( ),closedate) AS latesince + "; + $from .= " AND (closedate <= DATE_SUB(CURDATE( ),INTERVAL ? DAY)) "; + $having = " + HAVING quantity <> 0 + AND unitpricesupplier <> 0 + AND unitpricelib <> 0 + "; + } else { + # FIXME: account for IFNULL as above + $select .= " + aqorders.quantity AS quantity, + aqorders.quantity * aqorders.rrp AS subtotal, + (CURDATE - closedate) AS latesince + "; + $from .= " AND (closedate <= (CURDATE -(INTERVAL ? DAY)) "; + } + if (defined $supplierid) { + $from .= ' AND aqbasket.booksellerid = ? '; + push @query_params, $supplierid; + } + if (defined $branch) { + $from .= ' AND borrowers.branchcode LIKE ? '; + push @query_params, $branch; + } + if (C4::Context->preference("IndependantBranches") && C4::Context->userenv && C4::Context->userenv->{flags} != 1 ) { - $strsth .= ' AND borrowers.branchcode like ? '; - push @query_params, C4::Context->userenv->{branch}; - } - - $strsth .= " HAVING quantity <> 0 - AND unitpricesupplier <> 0 - AND unitpricelib <> 0 - ORDER BY latesince, basketno, borrowers.branchcode, supplier "; - } else { - $strsth = " - SELECT aqbasket.basketno, - DATE(aqbasket.closedate) AS orderdate, - aqorders.quantity, aqorders.rrp AS unitpricesupplier, - aqorders.ecost as unitpricelib, - aqorders.quantity * aqorders.rrp AS subtotal - aqbookfund.bookfundname AS budget, - borrowers.branchcode AS branch, - aqbooksellers.name AS supplier, - biblio.title, - biblio.author, - biblioitems.publishercode AS publisher, - biblioitems.publicationyear, - (CURDATE - closedate) AS latesince - FROM(( ( - (aqorders LEFT JOIN biblio on biblio.biblionumber = aqorders.biblionumber) - LEFT JOIN biblioitems on biblioitems.biblionumber=biblio.biblionumber) - LEFT JOIN aqorderbreakdown on aqorders.ordernumber = aqorderbreakdown.ordernumber) - LEFT JOIN aqbookfund ON aqorderbreakdown.bookfundid = aqbookfund.bookfundid), - (aqbasket LEFT JOIN borrowers on aqbasket.authorisedby = borrowers.borrowernumber) LEFT JOIN aqbooksellers ON aqbasket.booksellerid = aqbooksellers.id - WHERE aqorders.basketno = aqbasket.basketno - AND (closedate <= (CURDATE -(INTERVAL $delay DAY)) - AND ((datereceived = '' OR datereceived is null) - OR (aqorders.quantityreceived < aqorders.quantity) ) "; - $strsth .= " AND aqbasket.booksellerid = $supplierid " if ($supplierid); - - $strsth .= " AND borrowers.branchcode like \'" . $branch . "\'" if ($branch); - $strsth .=" AND borrowers.branchcode like \'". C4::Context->userenv->{branch} . "\'" - if (C4::Context->preference("IndependantBranches") && C4::Context->userenv->{flags} != 1 ); - $strsth .=" ORDER BY latesince,basketno,borrowers.branchcode, supplier"; + $from .= ' AND borrowers.branchcode LIKE ? '; + push @query_params, C4::Context->userenv->{branch}; } - my $sth = $dbh->prepare($strsth); - $sth->execute( @query_params ); + my $query = "$select $from $having\nORDER BY latesince, basketno, borrowers.branchcode, supplier"; + $debug and print STDERR "GetLateOrders query: $query\nGetLateOrders args: " . join(" ",@query_params); + my $sth = $dbh->prepare($query); + $sth->execute(@query_params); my @results; - my $hilighted = 1; - while ( my $data = $sth->fetchrow_hashref ) { - $data->{hilighted} = $hilighted if ( $hilighted > 0 ); - $data->{orderdate} = format_date( $data->{orderdate} ); + while (my $data = $sth->fetchrow_hashref) { + $data->{orderdate} = format_date($data->{orderdate}); push @results, $data; - $hilighted = -$hilighted; } - $sth->finish; return @results; } diff --git a/C4/Bookseller.pm b/C4/Bookseller.pm index d3e63c7cc5..332d3bc477 100644 --- a/C4/Bookseller.pm +++ b/C4/Bookseller.pm @@ -110,7 +110,7 @@ Searches for suppliers with late orders. =cut sub GetBooksellersWithLateOrders { - my ($delay,$branch) = @_; + my ($delay,$branch) = @_; # FIXME: Branch argument unused. my $dbh = C4::Context->dbh; # FIXME NOT quite sure that this operation is valid for DBMs different from Mysql, HOPING so diff --git a/acqui/lateorders.pl b/acqui/lateorders.pl index 7c7a766456..222b233634 100755 --- a/acqui/lateorders.pl +++ b/acqui/lateorders.pl @@ -43,6 +43,7 @@ To know on which branch this script have to display late order. =cut use strict; +use warnings; use CGI; use C4::Bookseller; use C4::Auth; @@ -54,67 +55,61 @@ use C4::Letters; use C4::Branch; # GetBranches my $input = new CGI; -my ($template, $loggedinuser, $cookie) -= get_template_and_user( - {template_name => "acqui/lateorders.tmpl", - query => $input, - type => "intranet", - authnotrequired => 0, - flagsrequired => {acquisition => 1}, - debug => 1, - }); +my ($template, $loggedinuser, $cookie) = get_template_and_user({ + template_name => "acqui/lateorders.tmpl", + query => $input, + type => "intranet", + authnotrequired => 0, + flagsrequired => {acquisition => 1}, + debug => 1, +}); -my $supplierid = $input->param('supplierid'); -my $delay = $input->param('delay'); -my $branch = $input->param('branch'); +my $supplierid = $input->param('supplierid') || undef; # we don't want "" or 0 +my $delay = $input->param('delay'); +my $branch = $input->param('branch'); +my $op = $input->param('op'); -#default value for delay -$delay = 30 unless $delay; - -my %supplierlist = GetBooksellersWithLateOrders($delay,$branch); -my @select_supplier; -push @select_supplier,""; -foreach my $supplierid (keys %supplierlist){ - push @select_supplier, $supplierid; +my @errors = (); +$delay = 30 unless defined $delay; +unless ($delay =~ /^\d{1,3}$/) { + push @errors, {delay_digits => 1, bad_delay => $delay}; + $delay = 30; #default value for delay } -my $CGIsupplier=CGI::scrolling_list( -name => 'supplierid', - -values => \@select_supplier, - -default => $supplierid, - -id => 'supplierid', - -labels => \%supplierlist, - -size => 1, - -tabindex=>'', - -multiple => 0 ); - +my %supplierlist = GetBooksellersWithLateOrders($delay,$branch); +my (@sloopy); # supplier loop +foreach (keys %supplierlist){ + push @sloopy, (($supplierid and $supplierid eq $_ ) ? + {id=>$_, name=>$supplierlist{$_}, selected=>1} : + {id=>$_, name=>$supplierlist{$_}} ) ; +} +$template->param(SUPPLIER_LOOP => \@sloopy); $template->param(Supplier=>$supplierlist{$supplierid}) if ($supplierid); my @lateorders = GetLateOrders($delay,$supplierid,$branch); -my $count = scalar @lateorders; my $total; -foreach my $lateorder (@lateorders){ - $total+=$lateorder->{subtotal}; +foreach (@lateorders){ + $total += $_->{subtotal}; } my @letters; my $letters=GetLetters("claimacquisition"); foreach (keys %$letters){ - push @letters ,{code=>$_,name=>$letters->{$_}}; + push @letters, {code=>$_,name=>$letters->{$_}}; } - $template->param(letters=>\@letters) if (@letters); -my $op=$input->param("op"); -if ($op eq "send_alert"){ - my @ordernums=$input->param("claim_for"); - SendAlerts('claimacquisition',\@ordernums,$input->param("letter_code")); + +if ($op and $op eq "send_alert"){ + my @ordernums = $input->param("claim_for"); # FIXME: Fallback values? + SendAlerts('claimacquisition',\@ordernums,$input->param("letter_code")); # FIXME: Fallback value? } -$template->param(delay=>$delay) if ($delay); +$template->param(ERROR_LOOP => \@errors) if (@errors); $template->param( - CGIsupplier => $CGIsupplier, lateorders => \@lateorders, - total=>$total, + delay => $delay, + total => $total, intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"), - ); +); output_html_with_http_headers $input, $cookie, $template->output; diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/lateorders.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/lateorders.tmpl index 5b0deeb9f8..16788baf34 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/lateorders.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/lateorders.tmpl @@ -6,7 +6,7 @@ -
+There are no late orders.
+ +There are no late orders.
+