Remove bottleneck making claims page unuseable

While the idea of showing the number of late serials against the
vendor name was nice it does not scale and on large sites selecting claims
was just timing out. Improved the speed of the initial query but have removed
the big query for each user just to get a count.
Check for 0000-00-00 dates so that C4::Dates does not log error
Removed a variable that was never set and the bit of template used
if the impossible happened
This commit is contained in:
Colin Campbell 2010-04-08 17:58:20 +01:00
parent bf0eed8d31
commit 5226371ea3
3 changed files with 24 additions and 38 deletions

View File

@ -91,15 +91,12 @@ the array is in name order
sub GetSuppliersWithLateIssues {
my $dbh = C4::Context->dbh;
my $query = qq|
SELECT DISTINCT id, name
FROM subscription
LEFT JOIN serial ON serial.subscriptionid=subscription.subscriptionid
LEFT JOIN aqbooksellers ON subscription.aqbooksellerid = aqbooksellers.id
WHERE subscription.subscriptionid = serial.subscriptionid
AND (planneddate < now() OR serial.STATUS = 3 OR serial.STATUS = 4)
ORDER BY name
|;
my $query = q|
SELECT DISTINCT aqbooksellerid as id, aqbooksellers.name as name
FROM subscription
LEFT JOIN serial ON serial.subscriptionid=subscription.subscriptionid
LEFT JOIN aqbooksellers ON subscription.aqbooksellerid = aqbooksellers.id
WHERE (planneddate < now() OR serial.STATUS = 3 OR serial.STATUS = 4) ORDER BY name|;
return $dbh->selectall_arrayref($query, { Slice => {} });
}
@ -1708,7 +1705,7 @@ sub DelIssue {
=head2 GetLateOrMissingIssues
@issuelist = &GetLateMissingIssues($supplierid,$serialid)
@issuelist = GetLateMissingIssues($supplierid,$serialid)
this function selects missing issues on database - where serial.status = 4 or serial.status=3 or planneddate<now
@ -1766,10 +1763,11 @@ sub GetLateOrMissingIssues {
$sth->execute;
my @issuelist;
while ( my $line = $sth->fetchrow_hashref ) {
if ($line->{planneddate}) {
if ($line->{planneddate} && $line->{planneddate} !~/^0+\-/) {
$line->{planneddate} = format_date( $line->{planneddate} );
}
if ($line->{claimdate}) {
if ($line->{claimdate} && $line->{claimdate} !~/^0+\-/) {
$line->{claimdate} = format_date( $line->{claimdate} );
}
$line->{"status".$line->{status}} = 1;

View File

@ -292,10 +292,6 @@
<!-- /TMPL_LOOP --></tbody>
</table>
<p><span class="exportSelected"></span></p>
<!-- TMPL_IF Name="singlesupplier"-->
<input type="hidden" name="supplierid" value="<!--TMPL_VAR NAME="supplierid"-->" />
<!-- <a href="claims.pl?supplierid=<!-- TMPL_VAR name="supplierid" -->&amp;op=preview" onclick="popup(<!-- TMPL_VAR name="supplierid" -->,''); return false" class="button">Vendor Group Claim Notice</a></p> -->
<!-- /TMPL_IF -->
<!--TMPL_IF Name="letter" -->
<fieldset class="action"> <label for="letter_code">Select notice:</label>

View File

@ -10,7 +10,7 @@ use C4::Output;
use C4::Bookseller;
use C4::Context;
use C4::Letters;
my $input = new CGI;
my $input = CGI->new;
my $serialid = $input->param('serialid');
my $op = $input->param('op');
@ -18,26 +18,26 @@ my $claimletter = $input->param('claimletter');
my $supplierid = $input->param('supplierid');
my $suppliername = $input->param('suppliername');
my $order = $input->param('order');
my $supplierlist = GetSuppliersWithLateIssues;
my $supplierlist = GetSuppliersWithLateIssues();
if ($supplierid) {
foreach my $s ( @{$supplierlist} ) {
if ($s->{id} == $supplierid ) {
$s->{selected} = 1;
last;
}
}
}
# open template first (security & userenv set here)
my ($template, $loggedinuser, $cookie)
= get_template_and_user({template_name => "serials/claims.tmpl",
= get_template_and_user({template_name => 'serials/claims.tmpl',
query => $input,
type => "intranet",
type => 'intranet',
authnotrequired => 0,
flagsrequired => {serials => 1},
debug => 1,
});
for my $supplier ( @{$supplierlist} ) {
my @dummy = GetLateOrMissingIssues($supplier->{id},q{},$order);
my $counting = scalar @dummy;
$supplier->{name} .= " ($counting)";
if ($supplierid && $supplierid == $supplier->{id}) {
$supplier->{selected} = 1;
}
}
my $letters = GetLetters('claimissues');
my @letters;
@ -47,17 +47,10 @@ foreach (keys %{$letters}){
my $letter=((scalar(@letters)>1) || ($letters[0]->{name}||$letters[0]->{code}));
my @missingissues;
my @supplierinfo;
if ($supplierid) {
@missingissues = GetLateOrMissingIssues($supplierid,$serialid,$order);
}
my ($singlesupplier,@supplierinfo);
if($supplierid){
(@supplierinfo)=GetBookSeller($supplierid);
} else { # set up supplierid for the claim links out of main table if all suppliers is chosen
for my $mi (@missingissues){
$mi->{supplierid} = getsupplierbyserialid($mi->{serialid});
}
@supplierinfo=GetBookSeller($supplierid);
}
my $preview=0;
@ -82,7 +75,6 @@ $template->param(
missingissues => \@missingissues,
supplierid => $supplierid,
claimletter => $claimletter,
singlesupplier => $singlesupplier,
supplierloop => \@supplierinfo,
dateformat => C4::Context->preference("dateformat"),
DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(),