From dd234dedc3b9cfaee55cae487db8aef04d81692f Mon Sep 17 00:00:00 2001
From: Jonathan Druart
Date: Wed, 18 Dec 2019 17:24:17 +0100
Subject: [PATCH] Bug 24163: Allow to define CSV profile for late orders export
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This new enhancement adds the ability to create a CSV profile for the late
orders export.
Prior to this, the CSV profile was hardcoded in a template and not
editable (unless you modify the .tt file of course).
The main difficulty of the request was to make the multiple claims dates
accessible from the CSV profile. So far we only accept columns from the
database. However we would like to use the Koha::Acquisition::Order
object to make things easier (it had a ->claims method to access the
different claims).
To acchieve this, we are going to accept the TT syntax for that CSV profile.
It means that only CSV profiles created for 'late_orders' will have the
capability to use the TT syntax (can be extended later of course if
needed).
The alternative was to use specific placeholders, like %claims_count%,
%claimed_date%, but it sounded more powerful and flexible to allow the
TT syntax instead.
Note that the former export (template based) still exists and is the
default option.
Test plan:
0. Apply the patches and execute the update database entry
1. Create some orders, close the basket
2. Claim some of the orders
3. Note the new button at the bottom of the table that have several
entries.
=> The first entry will generate a CSV file using the previous method
=> The second entry will generate it using the new CSV profile, note
that the number of claims as well as the different claims date are
displayed.
4. Bonus point: Edit the CSV profile (Home › Tools › CSV export
profiles) that is named "Late orders (csv profile)", or create a new
one, and modify it.
Export the late orders using this CSV profile and confirm that the
generated CSV file is the one you expect.
Sponsored-by: Institute of Technology Tralee
Signed-off-by: David Nind
Signed-off-by: Angela O'Connor Desmond
---
acqui/lateorders-export.pl | 91 +++++++++++++---------
acqui/lateorders.pl | 2 +
.../prog/en/modules/acqui/lateorders.tt | 23 +++++-
.../prog/en/modules/tools/csv-profiles.tt | 8 +-
4 files changed, 82 insertions(+), 42 deletions(-)
diff --git a/acqui/lateorders-export.pl b/acqui/lateorders-export.pl
index eb04ba7635..31e21a8e75 100755
--- a/acqui/lateorders-export.pl
+++ b/acqui/lateorders-export.pl
@@ -33,40 +33,61 @@ my ($template, $loggedinuser, $cookie) = get_template_and_user({
});
my @ordernumbers = $input->multi_param('ordernumber');
-my @orders;
-for my $ordernumber ( @ordernumbers ) {
- my $order = GetOrder $ordernumber;
- my $order_object = Koha::Acquisition::Orders->find($ordernumber);
- my $claims = $order_object->claims;
- push @orders, {
- orderdate => $order->{orderdate},
- latesince => $order->{latesince},
- estimateddeliverydate => $order->{estimateddeliverydate},
- supplier => $order->{supplier},
- supplierid => $order->{supplierid},
- title => $order->{title},
- author => $order->{author},
- publisher => $order->{publisher},
- unitpricesupplier => $order->{unitpricesupplier},
- quantity_to_receive => $order->{quantity_to_receive},
- subtotal => $order->{subtotal},
- budget => $order->{budget},
- basketname => $order->{basketname},
- basketno => $order->{basketno},
- claims_count => $claims->count,
- claimed_date => $claims->count ? $claims->last->claimed_on : undef,
- internalnote => $order->{order_internalnote},
- vendornote => $order->{order_vendornote},
- isbn => $order->{isbn},
- }
- ;
-}
+my $csv_profile_id = $input->param('csv_profile');
+
+unless ( $csv_profile_id ) {
+ my @orders;
+ for my $ordernumber ( @ordernumbers ) {
+ my $order = GetOrder $ordernumber;
+ my $order_object = Koha::Acquisition::Orders->find($ordernumber);
+ my $claims = $order_object->claims;
+ push @orders, {
+ orderdate => $order->{orderdate},
+ latesince => $order->{latesince},
+ estimateddeliverydate => $order->{estimateddeliverydate},
+ supplier => $order->{supplier},
+ supplierid => $order->{supplierid},
+ title => $order->{title},
+ author => $order->{author},
+ publisher => $order->{publisher},
+ unitpricesupplier => $order->{unitpricesupplier},
+ quantity_to_receive => $order->{quantity_to_receive},
+ subtotal => $order->{subtotal},
+ budget => $order->{budget},
+ basketname => $order->{basketname},
+ basketno => $order->{basketno},
+ claims_count => $claims->count,
+ claimed_date => $claims->count ? $claims->last->claimed_on : undef,
+ internalnote => $order->{order_internalnote},
+ vendornote => $order->{order_vendornote},
+ isbn => $order->{isbn},
+ }
+ ;
+ }
+
+ # We want to export using the default profile, using the template acqui/csv/lateorders.tt
+ print $input->header(
+ -type => 'text/csv',
+ -attachment => 'lateorders.csv',
+ );
+ $template->param( orders => \@orders );
+ for my $line ( split '\n', $template->output ) {
+ print "$line\n" unless $line =~ m|^\s*$|;
+ }
+ exit;
+} else {
+ my $csv_profile = Koha::CsvProfiles->find($csv_profile_id);
+ my $content = '[% SET separator = "'.$csv_profile->csv_separator.'" ~%]' . $csv_profile->content;
+
+ my $csv = C4::Letters::_process_tt({
+ content => $content,
+ loops => { aqorders => \@ordernumbers },
+ });
-print $input->header(
- -type => 'text/csv',
- -attachment => 'lateorders.csv',
-);
-$template->param( orders => \@orders );
-for my $line ( split '\n', $template->output ) {
- print "$line\n" unless $line =~ m|^\s*$|;
+ print $input->header(
+ -type => 'text/csv',
+ -attachment => 'lateorders.csv',
+ );
+ print $csv;
+ exit;
}
diff --git a/acqui/lateorders.pl b/acqui/lateorders.pl
index 8bf7da2f6c..0750de6915 100755
--- a/acqui/lateorders.pl
+++ b/acqui/lateorders.pl
@@ -54,6 +54,7 @@ use C4::Acquisition;
use C4::Letters;
use Koha::DateUtils;
use Koha::Acquisition::Orders;
+use Koha::CsvProfiles;
my $input = new CGI;
my ($template, $loggedinuser, $cookie) = get_template_and_user(
@@ -172,5 +173,6 @@ $template->param(
estimateddeliverydatefrom => $estimateddeliverydatefrom,
estimateddeliverydateto => $estimateddeliverydateto,
intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"),
+ csv_profiles => [ Koha::CsvProfiles->search({ type => 'sql', used_for => 'late_orders' }) ],
);
output_html_with_http_headers $input, $cookie, $template->output;
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 d29539bafe..ddf3abeb04 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/lateorders.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/lateorders.tt
@@ -181,8 +181,20 @@