@@ -, +, @@ --- 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%) --- a/C4/Acquisition.pm +++ a/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; } --- a/acqui/lateorders-export.pl +++ a/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"; --- a/acqui/lateorders.pl +++ a/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" ) { --- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/lateorders.tt +++ a/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 %] - + + [% IF Supplier %] + + [% ELSE %] + + [% END %] @@ -82,18 +108,16 @@ $(document).ready(function() { - [% IF Supplier %] - - [% ELSE %] - - [% END %] - - - [% FOREACH lateorder IN lateorders %] + + + [% FOREACH lateorder IN lateorders %] [% UNLESS ( loop.odd ) %] [% ELSE %][% END %] + - - - [% END %] - - - + [% END %] + + + @@ -150,11 +168,19 @@ $(document).ready(function() { - +
Check all
Uncheck all
Order date Estimated delivery date VendorBasket Claims count Claimed dateCheck all
Uncheck all
+ + ([% lateorder.supplierid %]) [% lateorder.orderdate %] ([% lateorder.latesince %] days) @@ -130,17 +154,11 @@ $(document).ready(function() { [% lateorder.claims_count %] [% lateorder.claimed_date %] - [% UNLESS lateorder.budget_lock %] - - [% END %] -
Total        - +
+
+ +

+ + [% UNLESS lateorder.budget_lock %] + + [% END %] +

[% ELSE %]

There are no late orders.

[% END %] --- a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/claims.tt +++ a/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 %]