From 3fa07f0a88d109d4bc5e11946c04cb26d4741ec6 Mon Sep 17 00:00:00 2001
From: Jonathan Druart
Date: Fri, 22 Jun 2012 11:10:57 +0200
Subject: [PATCH] [SIGNED-OFF] Bug 7298 Export late orders as csv
Signed-off-by: Nicole C. Engard
---
C4/Acquisition.pm | 33 ++++++--
acqui/lateorders-export.pl | 64 ++++++++++++++++
acqui/lateorders.pl | 3 +-
.../prog/en/modules/acqui/lateorders.tt | 80 +++++++++++++-------
.../prog/en/modules/serials/claims.tt | 4 +-
.../{lateissues-excel.pl => lateissues-export.pl} | 0
6 files changed, 146 insertions(+), 38 deletions(-)
create mode 100755 acqui/lateorders-export.pl
rename serials/{lateissues-excel.pl => lateissues-export.pl} (100%)
diff --git a/C4/Acquisition.pm b/C4/Acquisition.pm
index 9678ffc..8840dfc 100644
--- a/C4/Acquisition.pm
+++ b/C4/Acquisition.pm
@@ -959,17 +959,34 @@ C<$order> are fields from the biblio, biblioitems, aqorders tables of the Koha d
sub GetOrder {
my ($ordernumber) = @_;
my $dbh = C4::Context->dbh;
- my $query = "
- SELECT biblioitems.*, biblio.*, aqorders.*
- FROM aqorders
- LEFT JOIN biblio on biblio.biblionumber=aqorders.biblionumber
- LEFT JOIN biblioitems on biblioitems.biblionumber=aqorders.biblionumber
- WHERE aqorders.ordernumber=?
-
- ";
+ my $query = qq{SELECT biblio.*,biblioitems.*,
+ aqorders.*,
+ aqbudgets.*,
+ aqbasket.*,
+ aqorders.rrp AS unitpricesupplier,
+ aqorders.ecost AS unitpricelib,
+ aqorders.claims_count AS claims_count,
+ aqorders.claimed_date AS claimed_date,
+ aqbudgets.budget_name AS budget,
+ aqbooksellers.name AS supplier,
+ aqbooksellers.id AS supplierid,
+ biblioitems.publishercode AS publisher,
+ ADDDATE(aqbasket.closedate, INTERVAL aqbooksellers.deliverytime DAY) AS estimateddeliverydate,
+ DATE(aqbasket.closedate) AS orderdate,
+ aqorders.quantity - IFNULL(aqorders.quantityreceived,0) AS quantity,
+ (aqorders.quantity - IFNULL(aqorders.quantityreceived,0)) * aqorders.rrp AS subtotal,
+ 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 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
+ WHERE aqorders.basketno = aqbasket.basketno
+ AND ordernumber=?};
my $sth= $dbh->prepare($query);
$sth->execute($ordernumber);
my $data = $sth->fetchrow_hashref;
+ $data->{orderdate} = format_date( $data->{orderdate} );
$sth->finish;
return $data;
}
diff --git a/acqui/lateorders-export.pl b/acqui/lateorders-export.pl
new file mode 100755
index 0000000..e3bf603
--- /dev/null
+++ b/acqui/lateorders-export.pl
@@ -0,0 +1,64 @@
+#!/usr/bin/perl
+
+# This file is part of Koha.
+#
+# Koha is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any later
+# version.
+#
+# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with Koha; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+use Modern::Perl;
+use CGI;
+use C4::Auth;
+use C4::Serials;
+use C4::Acquisition;
+use C4::Output;
+use C4::Context;
+
+use Text::CSV::Encoded;
+use open qw/ :std :utf8 /;
+
+my $csv = Text::CSV::Encoded->new ({
+ encoding => undef,
+ quote_char => '"',
+ escape_char => '"',
+ sep_char => ',',
+ binary => 1,
+ });
+
+my $query = new CGI;
+my @ordernumbers = $query->param('ordernumber');
+
+print $query->header(
+ -type => 'text/csv',
+ -attachment => "lateorders.csv",
+);
+
+print "LATE ORDERS\n\n";
+print "ORDER DATE,ESTIMATED DELIVERY DATE,VENDOR,INFORMATION,TOTAL COST,BASKET,CLAIMS COUNT,CLAIMED DATE\n";
+
+for my $ordernumber ( @ordernumbers ) {
+ my $order = GetOrder $ordernumber;
+ $csv->combine(
+ "(" . $$order{supplierid} . ") " . $$order{orderdate} . " (" . $$order{latesince} . " days)",
+ $$order{estimateddeliverydate},
+ $$order{supplier},
+ $$order{title} . ( $$order{author} ? " Author: $$order{author}" : "" ) . ( $$order{publisher} ? " Published by: $$order{publisher}" : "" ),
+ $$order{unitpricesupplier} . "x" . $$order{quantity} . " = " . $$order{subtotal} . " (" . $$order{budget} . ")",
+ $$order{basketname} . " (" . $$order{basketno} . ")",
+ $$order{claims_count},
+ $$order{claimed_date}
+ );
+ my $string = $csv->string;
+ print $string, "\n";
+}
+
+print ",,Total Number Late, " . scalar @ordernumbers . "\n";
diff --git a/acqui/lateorders.pl b/acqui/lateorders.pl
index 3c66eb8..b95865a 100755
--- a/acqui/lateorders.pl
+++ b/acqui/lateorders.pl
@@ -78,7 +78,7 @@ if ( $delay and not $delay =~ /^\d{1,3}$/ ) {
}
if ($op and $op eq "send_alert"){
- my @ordernums = $input->param("claim_for");# FIXME: Fallback values?
+ my @ordernums = $input->param("ordernumber");# FIXME: Fallback values?
my $err;
eval {
$err = SendAlerts( 'claimacquisition', \@ordernums, $input->param("letter_code") ); # FIXME: Fallback value?
@@ -86,6 +86,7 @@ if ($op and $op eq "send_alert"){
AddClaim ( $_ ) for @ordernums;
}
};
+
if ( $@ ) {
$template->param(error_claim => $@);
} elsif ( ref $err and exists $err->{error} and $err->{error} eq "no_email" ) {
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/lateorders.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/lateorders.tt
index b146060..3df1bbc 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/lateorders.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/lateorders.tt
@@ -14,21 +14,42 @@
$(document).ready(function() {
var late_orderst = $("#late_orders").dataTable($.extend(true, {}, dataTablesDefaults, {
"aoColumnDefs": [
- { "aTargets": [ -1 ], "bSortable": false, "bSearchable": false },
+ { "aTargets": [ 0 ], "bSortable": false, "bSearchable": false },
],
- "sPaginationType": "four_button"
+ "sPaginationType": "four_button",
+ "bAutoWidth": false,
} ) );
- $("input:checkbox[name=claim_for]").click(function(){
+ $("input:checkbox[name=ordernumber]").click(function(){
var booksellerid = $(this).attr('booksellerid');
- if ( $("input:checkbox[name=claim_for]:checked").length > 0) {
- $("input:checkbox[name=claim_for][booksellerid!="+booksellerid+"]").attr('disabled', true);
+ if ( $("input:checkbox[name=ordernumber]:checked").length > 0) {
+ $("input:checkbox[name=ordernumber][booksellerid!="+booksellerid+"]").attr('disabled', true);
} else {
- $("input:checkbox[name=claim_for]").attr('disabled', false);
+ $("input:checkbox[name=ordernumber]").attr('disabled', false);
}
});
+
$('#CheckAll').click(function(){ $("#late_orders td").checkCheckboxes();});
$('#CheckNone').click(function(){ $("#late_orders td").unCheckCheckboxes();});
+
+ // Generates a dynamic link for exporting the selection's data as CSV
+ $("#ExportSelected").click(function() {
+ var selected = $("input[name='ordernumber']:checked");
+
+ if (selected.length == 0) {
+ alert(_('Please select at least one item to export.'));
+ return false;
+ }
+
+ // Building the url from currently checked boxes
+ var url = '/cgi-bin/koha/acqui/lateorders-export.pl?op=export';
+ for (var i = 0; i < selected.length; i++) {
+ url += '&ordernumber=' + selected[i].value;
+ }
+ // And redirecting to the CSV page
+ location.href = url;
+ return false;
+ });
});
//]]>
@@ -72,8 +93,13 @@ $(document).ready(function() {
[% END %]
+
+
+
+
+ [% UNLESS lateorder.budget_lock %]
+
+ [% END %]
+
[% ELSE %]There are no late orders.
[% END %]
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/claims.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/serials/claims.tt
index b47b51b..4cd7ff8 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/claims.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/serials/claims.tt
@@ -43,7 +43,7 @@
}
// Building the url from currently checked boxes
- var url = '/cgi-bin/koha/serials/lateissues-excel.pl?supplierid=&op=claims';
+ var url = '/cgi-bin/koha/serials/lateissues-export.pl?supplierid=&op=claims';
for (var i = 0; i < selected.length; i++) {
url += '&serialid=' + selected[i].value;
}
@@ -292,7 +292,7 @@
[% missingissue.claimdate %]
- Export item data
+ Export item data
[% END %]
diff --git a/serials/lateissues-excel.pl b/serials/lateissues-export.pl
similarity index 100%
rename from serials/lateissues-excel.pl
rename to serials/lateissues-export.pl
--
1.7.2.3