From 45c7edbde955c0a2c8820ff19c8d71dcda4ae820 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Thu, 16 Feb 2012 14:32:03 +0100 Subject: [PATCH 1/1] Bug 7302: Export basketgroup as CSV Adds new action export for basketgroup. This action is available only if your basketgroup is closed. This export generates a csv file with order informations. --- C4/Acquisition.pm | 68 ++++++++++++++++++- acqui/basketgroup.pl | 12 +++- .../prog/en/modules/acqui/basketgroup.tt | 7 ++- 3 files changed, 79 insertions(+), 8 deletions(-) diff --git a/C4/Acquisition.pm b/C4/Acquisition.pm index 0a96a02..8821c04 100644 --- a/C4/Acquisition.pm +++ b/C4/Acquisition.pm @@ -29,9 +29,12 @@ use C4::Suggestions; use C4::Biblio; use C4::Debug; use C4::SQLHelper qw(InsertInTable); +use C4::Bookseller qw(GetBookSellerFromId); use Time::localtime; use HTML::Entities; +use Text::CSV::Encoded; +use utf8; use vars qw($VERSION @ISA @EXPORT); @@ -42,7 +45,7 @@ BEGIN { @ISA = qw(Exporter); @EXPORT = qw( &GetBasket &NewBasket &CloseBasket &DelBasket &ModBasket - &GetBasketAsCSV + &GetBasketAsCSV &GetBasketGroupAsCSV &GetBasketsByBookseller &GetBasketsByBasketgroup &ModBasketHeader @@ -233,7 +236,7 @@ sub GetBasketAsCSV { my $basket = GetBasket($basketno); my @orders = GetOrders($basketno); my $contract = GetContract($basket->{'contractnumber'}); - my $csv = Text::CSV->new(); + my $csv = Text::CSV::Encoded->new ({ encoding => "utf8" }); my $output; # TODO: Translate headers @@ -274,6 +277,60 @@ sub GetBasketAsCSV { } +=head3 GetBasketGroupAsCSV + +=over 4 + +&GetBasketGroupAsCSV($basketgroupid); + +Export a basket group as CSV + +=back + +=cut + +sub GetBasketGroupAsCSV { + my ($basketgroupid) = @_; + my $baskets = GetBasketsByBasketgroup($basketgroupid); + + # TODO: Translate headers + my @headers = qw(booksellername bookselleraddress booksellerpostal accountnumber contractnumber contractname ordernumber entrydate isbn author title publishercode collectiontitle notes quantity rrp); + + my $csv = Text::CSV::Encoded->new ({ encoding => "utf8" }); + + my $output; + $csv->combine(@headers); + $output = $csv->string() . "\n"; + + for my $basket (@$baskets) { + my @orders = GetOrders( $$basket{basketno} ); + my $contract = GetContract( $$basket{contractnumber} ); + my $bookseller = GetBookSellerFromId( $$basket{booksellerid} ); + + my @rows; + foreach my $order (@orders) { + my @cols; + my $bd = GetBiblioData( $order->{'biblionumber'} ); + push( @cols, + $bookseller->{name}, $bookseller->{address1}, $bookseller->{postal}, $bookseller->{accountnumber}, + $contract->{contractnumber}, $contract->{contractname}, + $order->{ordernumber}, $order->{entrydate}, $order->{isbn}, + $bd->{author}, $bd->{title}, $bd->{publishercode}, $bd->{collectiontitle}, + $order->{notes}, $order->{quantity}, $order->{rrp}, ); + push( @rows, \@cols ); + } + + foreach my $row (@rows) { + $csv->combine(@$row); + $output .= $csv->string() . "\n"; + + } + } + + return $output; + +} + =head3 CloseBasketgroup &CloseBasketgroup($basketgroupno); @@ -476,8 +533,11 @@ Returns a reference to all baskets that belong to basketgroup $basketgroupid. sub GetBasketsByBasketgroup { my $basketgroupid = shift; - my $query = "SELECT * FROM aqbasket - LEFT JOIN aqcontract USING(contractnumber) WHERE basketgroupid=?"; + my $query = qq{ + SELECT *, aqbasket.booksellerid as booksellerid + FROM aqbasket + LEFT JOIN aqcontract USING(contractnumber) WHERE basketgroupid=? + }; my $dbh = C4::Context->dbh; my $sth = $dbh->prepare($query); $sth->execute($basketgroupid); diff --git a/acqui/basketgroup.pl b/acqui/basketgroup.pl index d2e1856..babfd49 100755 --- a/acqui/basketgroup.pl +++ b/acqui/basketgroup.pl @@ -53,7 +53,7 @@ use C4::Output; use CGI; use C4::Bookseller qw/GetBookSellerFromId/; -use C4::Acquisition qw/CloseBasketgroup ReOpenBasketgroup GetOrders GetBasketsByBasketgroup GetBasketsByBookseller ModBasketgroup NewBasketgroup DelBasketgroup GetBasketgroups ModBasket GetBasketgroup GetBasket/; +use C4::Acquisition qw/CloseBasketgroup ReOpenBasketgroup GetOrders GetBasketsByBasketgroup GetBasketsByBookseller ModBasketgroup NewBasketgroup DelBasketgroup GetBasketgroups ModBasket GetBasketgroup GetBasket GetBasketGroupAsCSV/; use C4::Bookseller qw/GetBookSellerFromId/; use C4::Branch qw/GetBranches/; use C4::Members qw/GetMember/; @@ -277,7 +277,7 @@ sub printbasketgrouppdf{ } -my $op = $input->param('op'); +my $op = $input->param('op') || 'display'; my $booksellerid = $input->param('booksellerid'); $template->param(booksellerid => $booksellerid); @@ -417,6 +417,14 @@ if ( $op eq "add" ) { printbasketgrouppdf($basketgroupid); exit; +}elsif ( $op eq "export" ) { + my $basketgroupid = $input->param('basketgroupid'); + print $input->header( + -type => 'text/csv', + -attachment => 'basketgroup' . $basketgroupid . '.csv', + ); + print GetBasketGroupAsCSV( $basketgroupid ); + exit; }elsif( $op eq "delete"){ my $basketgroupid = $input->param('basketgroupid'); DelBasketgroup($basketgroupid); diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketgroup.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketgroup.tt index 2c29865..84ffc3b 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketgroup.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketgroup.tt @@ -285,7 +285,7 @@ function yuiToolbar() { - + @@ -293,7 +293,7 @@ function yuiToolbar() { [% IF ( basketgroup.closed ) %] + [% END %] [% END %] -- 1.7.7.3
Basket GroupActionBasket GroupAction
- [% IF ( basketgroup.name ) %] + [% IF ( basketgroup.name ) %] [% basketgroup.name %] [% ELSE %] Basket group no. [% basketgroup.id %] @@ -305,6 +305,9 @@ function yuiToolbar() {
+
+