Browse Source

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.

Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de>
Tested together with bug 5356.
3.10.x
Jonathan Druart 12 years ago
committed by Paul Poulain
parent
commit
a6c93961b1
  1. 146
      C4/Acquisition.pm
  2. 4
      C4/Output.pm
  3. 9
      acqui/basket.pl
  4. 12
      acqui/basketgroup.pl
  5. 3
      koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketgroup.tt
  6. 3
      koha-tmpl/intranet-tmpl/prog/en/modules/acqui/csv/basket.tt
  7. 3
      koha-tmpl/intranet-tmpl/prog/en/modules/acqui/csv/basketgroup.tt

146
C4/Acquisition.pm

@ -29,6 +29,8 @@ use C4::Suggestions;
use C4::Biblio;
use C4::Debug;
use C4::SQLHelper qw(InsertInTable);
use C4::Bookseller qw(GetBookSellerFromId);
use C4::Templates qw(gettemplate);
use Time::localtime;
use HTML::Entities;
@ -42,7 +44,7 @@ BEGIN {
@ISA = qw(Exporter);
@EXPORT = qw(
&GetBasket &NewBasket &CloseBasket &DelBasket &ModBasket
&GetBasketAsCSV
&GetBasketAsCSV &GetBasketGroupAsCSV
&GetBasketsByBookseller &GetBasketsByBasketgroup
&GetBasketsInfosByBookseller
@ -227,54 +229,127 @@ sub CloseBasket {
Export a basket as CSV
$cgi parameter is needed for column name translation
=cut
sub GetBasketAsCSV {
my ($basketno) = @_;
my ($basketno, $cgi) = @_;
my $basket = GetBasket($basketno);
my @orders = GetOrders($basketno);
my $contract = GetContract($basket->{'contractnumber'});
my $csv = Text::CSV->new();
my $output;
# TODO: Translate headers
my @headers = qw(contractname ordernumber entrydate isbn author title publishercode collectiontitle notes quantity rrp);
$csv->combine(@headers);
$output = $csv->string() . "\n";
my $template = C4::Templates::gettemplate("acqui/csv/basket.tmpl", "intranet", $cgi);
my @rows;
foreach my $order (@orders) {
my @cols;
# newlines are not valid characters for Text::CSV combine()
$order->{'notes'} =~ s/[\r\n]+//g;
push(@cols,
$contract->{'contractname'},
$order->{'ordernumber'},
$order->{'entrydate'},
$order->{'isbn'},
$order->{'author'},
$order->{'title'},
$order->{'publishercode'},
$order->{'collectiontitle'},
$order->{'notes'},
$order->{'quantity'},
$order->{'rrp'},
);
push (@rows, \@cols);
my $bd = GetBiblioData( $order->{'biblionumber'} );
my $row = {
contractname => $contract->{'contractname'},
ordernumber => $order->{'ordernumber'},
entrydate => $order->{'entrydate'},
isbn => $order->{'isbn'},
author => $bd->{'author'},
title => $bd->{'title'},
publicationyear => $bd->{'publicationyear'},
publishercode => $bd->{'publishercode'},
collectiontitle => $bd->{'collectiontitle'},
notes => $order->{'notes'},
quantity => $order->{'quantity'},
rrp => $order->{'rrp'},
deliveryplace => $basket->{'deliveryplace'},
billingplace => $basket->{'billingplace'}
};
foreach(qw(
contractname author title publishercode collectiontitle notes
deliveryplace billingplace
) ) {
# Double the quotes to not be interpreted as a field end
$row->{$_} =~ s/"/""/g if $row->{$_};
}
push @rows, $row;
}
foreach my $row (@rows) {
$csv->combine(@$row);
$output .= $csv->string() . "\n";
@rows = sort {
if(defined $a->{publishercode} and defined $b->{publishercode}) {
$a->{publishercode} cmp $b->{publishercode};
}
} @rows;
}
return $output;
$template->param(rows => \@rows);
return $template->output;
}
=head3 GetBasketGroupAsCSV
=over 4
&GetBasketGroupAsCSV($basketgroupid);
Export a basket group as CSV
$cgi parameter is needed for column name translation
=back
=cut
sub GetBasketGroupAsCSV {
my ($basketgroupid, $cgi) = @_;
my $baskets = GetBasketsByBasketgroup($basketgroupid);
my $template = C4::Templates::gettemplate('acqui/csv/basketgroup.tmpl', 'intranet', $cgi);
my @rows;
for my $basket (@$baskets) {
my @orders = GetOrders( $$basket{basketno} );
my $contract = GetContract( $$basket{contractnumber} );
my $bookseller = GetBookSellerFromId( $$basket{booksellerid} );
foreach my $order (@orders) {
my $bd = GetBiblioData( $order->{'biblionumber'} );
my $row = {
clientnumber => $bookseller->{accountnumber},
basketname => $basket->{basketname},
ordernumber => $order->{ordernumber},
author => $bd->{author},
title => $bd->{title},
publishercode => $bd->{publishercode},
publicationyear => $bd->{publicationyear},
collectiontitle => $bd->{collectiontitle},
isbn => $order->{isbn},
quantity => $order->{quantity},
rrp => $order->{rrp},
discount => $bookseller->{discount},
ecost => $order->{ecost},
notes => $order->{notes},
entrydate => $order->{entrydate},
booksellername => $bookseller->{name},
bookselleraddress => $bookseller->{address1},
booksellerpostal => $bookseller->{postal},
contractnumber => $contract->{contractnumber},
contractname => $contract->{contractname},
};
foreach(qw(
basketname author title publishercode collectiontitle notes
booksellername bookselleraddress booksellerpostal contractname
basketgroupdeliveryplace basketgroupbillingplace
basketdeliveryplace basketbillingplace
) ) {
# Double the quotes to not be interpreted as a field end
$row->{$_} =~ s/"/""/g if $row->{$_};
}
push @rows, $row;
}
}
$template->param(rows => \@rows);
return $template->output;
}
=head3 CloseBasketgroup
&CloseBasketgroup($basketgroupno);
@ -514,8 +589,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);

4
C4/Output.pm

@ -42,13 +42,13 @@ BEGIN {
@ISA = qw(Exporter);
@EXPORT_OK = qw(&is_ajax ajax_fail); # More stuff should go here instead
%EXPORT_TAGS = ( all =>[qw(&themelanguage &gettemplate setlanguagecookie pagination_bar
%EXPORT_TAGS = ( all =>[qw(&themelanguage &gettemplate setlanguagecookie pagination_bar &gettemplate
&output_with_http_headers &output_ajax_with_http_headers &output_html_with_http_headers)],
ajax =>[qw(&output_with_http_headers &output_ajax_with_http_headers is_ajax)],
html =>[qw(&output_with_http_headers &output_html_with_http_headers)]
);
push @EXPORT, qw(
&themelanguage &gettemplate setlanguagecookie getlanguagecookie pagination_bar
&themelanguage &gettemplate setlanguagecookie getlanguagecookie pagination_bar &gettemplate
);
push @EXPORT, qw(
&output_html_with_http_headers &output_ajax_with_http_headers &output_with_http_headers FormatData FormatNumber

9
acqui/basket.pl

@ -146,7 +146,7 @@ if ( $op eq 'delete_confirm' ) {
-type => 'text/csv',
-attachment => 'basket' . $basket->{'basketno'} . '.csv',
);
print GetBasketAsCSV($query->param('basketno'));
print GetBasketAsCSV($query->param('basketno'), $query);
exit;
} elsif ($op eq 'close') {
my $confirm = $query->param('confirm') || $confirm_pref eq '2';
@ -156,8 +156,15 @@ if ( $op eq 'delete_confirm' ) {
$basketno =~ /^\d+$/ and CloseBasket($basketno);
# if requested, create basket group, close it and attach the basket
if ($query->param('createbasketgroup')) {
my $branchcode;
if(C4::Context->userenv and C4::Context->userenv->{'branch'}
and C4::Context->userenv->{'branch'} ne "NO_LIBRARY_SET") {
$branchcode = C4::Context->userenv->{'branch'};
}
my $basketgroupid = NewBasketgroup( { name => $basket->{basketname},
booksellerid => $booksellerid,
deliveryplace => $branchcode,
billingplace => $branchcode,
closed => 1,
});
ModBasket( { basketno => $basketno,

12
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, $input );
exit;
}elsif( $op eq "delete"){
my $basketgroupid = $input->param('basketgroupid');
DelBasketgroup($basketgroupid);

3
koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketgroup.tt

@ -315,6 +315,9 @@ function yuiToolbar() {
<form action="/cgi-bin/koha/acqui/basketgroup.pl" method="get"><input type="hidden" name="op" value="reopen" /><input type="hidden" name="booksellerid" value="[% basketgroup.booksellerid %]" /><input type="hidden" name="basketgroupid" value="[% basketgroup.id %]" /><input type="submit" value="Reopen" /></form>
<form action="/cgi-bin/koha/acqui/basketgroup.pl" method="get"><input type="hidden" name="op" value="print" /><input type="hidden" name="basketgroupid" value="[% basketgroup.id %]" /><input type="submit" value="Print" /></form>
</td>
<td>
<form action="/cgi-bin/koha/acqui/basketgroup.pl" method="get"><input type="hidden" name="op" value="export" /><input type="hidden" name="basketgroupid" value="[% basketgroup.id %]" /><input type="submit" value="Export as CSV" /></form>
</td>
</tr>
[% END %]
[% END %]

3
koha-tmpl/intranet-tmpl/prog/en/modules/acqui/csv/basket.tt

@ -0,0 +1,3 @@
Contract name,Order number,Entry date,ISBN,Author,Title,Publication year,Publisher code,Collection title,Notes,Quantity,RRP,Delivery place,Billing place
[% FOREACH r IN rows %]"[% r.contractname %]",[% r.ordernumber %],[% r.entrydate %],[% r.isbn %],"[% r.author %]","[% r.title %]",[% r.publicationyear %],"[% r.publishercode %]","[% r.collectiontitle %]","[% r.notes %]",[% r.quantity %],[% r.rrp %],"[% r.deliveryplace %]","[% r.billingplace %]"
[% END %]

3
koha-tmpl/intranet-tmpl/prog/en/modules/acqui/csv/basketgroup.tt

@ -0,0 +1,3 @@
Client number,Basket name,Order number,Author,Title,Publisher code,Publication year,Collection title,ISBN,Quantity,RRP,Discount,Estimated cost,Notes,Entry date,Bookseller name,Bookseller physical address,Bookseller postal address,Contract number,Contract name,Basket group delivery place,Basket group billing place,Basket delivery place,Basket billing place
[% FOREACH r IN rows %][% r.clientnumber %],"[% r.basketname %]",[% r.ordernumber %],"[% r.author %]","[% r.title %]","[% r.publishercode %]",[% r.publicationyear %],"[% r.collectiontitle %]",[% r.isbn %],[% r.quantity %],[% r.rrp %],[% r.discount %],[% r.ecost %],"[% r.notes %]",[% r.entrydate %],"[% r.booksellername %]","[% r.bookselleraddress %]","[% r.booksellerpostal %]",[% r.contractnumber %],"[% r.contractname %]","[% r.basketgroupdeliveryplace %]","[% r.basketgroupbillingplace %]","[% r.basketdeliveryplace %]","[% r.basketbillingplace %]"
[% END %]
Loading…
Cancel
Save