Merge branch 'bug_9506' into 3.12-master
This commit is contained in:
commit
8a97ab05a8
3 changed files with 131 additions and 88 deletions
|
@ -53,6 +53,7 @@ use C4::Output;
|
|||
use CGI;
|
||||
|
||||
use C4::Bookseller qw/GetBookSellerFromId/;
|
||||
use C4::Budgets qw/ConvertCurrency/;
|
||||
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/;
|
||||
|
@ -210,11 +211,8 @@ sub printbasketgrouppdf{
|
|||
my @ba_orders;
|
||||
my @ords = &GetOrders($basket->{basketno});
|
||||
for my $ord (@ords) {
|
||||
# ba_order is filled with :
|
||||
# 0 1 2 3 4 5 6 7 8 9
|
||||
#isbn, itemtype, author, title, publishercode, quantity, listprice ecost discount gstrate
|
||||
my @ba_order;
|
||||
if ( $ord->{biblionumber} && $ord->{quantity}> 0 ) {
|
||||
|
||||
next unless ( $ord->{biblionumber} or $ord->{quantity}> 0 );
|
||||
eval {
|
||||
require C4::Biblio;
|
||||
import C4::Biblio;
|
||||
|
@ -229,26 +227,36 @@ sub printbasketgrouppdf{
|
|||
if ($@){
|
||||
croak $@;
|
||||
}
|
||||
|
||||
$ord->{rrp} = ConvertCurrency( $ord->{'currency'}, $ord->{rrp} );
|
||||
if ( $bookseller->{'listincgst'} ) {
|
||||
$ord->{rrpgsti} = sprintf( "%.2f", $ord->{rrp} );
|
||||
$ord->{gstgsti} = sprintf( "%.2f", $ord->{gstrate} * 100 );
|
||||
$ord->{rrpgste} = sprintf( "%.2f", $ord->{rrp} / ( 1 + ( $ord->{gstgsti} / 100 ) ) );
|
||||
$ord->{gstgste} = sprintf( "%.2f", $ord->{gstgsti} / ( 1 + ( $ord->{gstgsti} / 100 ) ) );
|
||||
$ord->{ecostgsti} = sprintf( "%.2f", $ord->{ecost} );
|
||||
$ord->{ecostgste} = sprintf( "%.2f", $ord->{ecost} / ( 1 + ( $ord->{gstgsti} / 100 ) ) );
|
||||
$ord->{gstvalue} = sprintf( "%.2f", ( $ord->{ecostgsti} - $ord->{ecostgste} ) * $ord->{quantity});
|
||||
$ord->{totalgste} = sprintf( "%.2f", $ord->{quantity} * $ord->{ecostgste} );
|
||||
$ord->{totalgsti} = sprintf( "%.2f", $ord->{quantity} * $ord->{ecostgsti} );
|
||||
} else {
|
||||
$ord->{rrpgsti} = sprintf( "%.2f", $ord->{rrp} * ( 1 + ( $ord->{gstrate} ) ) );
|
||||
$ord->{rrpgste} = sprintf( "%.2f", $ord->{rrp} );
|
||||
$ord->{gstgsti} = sprintf( "%.2f", $ord->{gstrate} * 100 );
|
||||
$ord->{gstgste} = sprintf( "%.2f", $ord->{gstrate} * 100 );
|
||||
$ord->{ecostgsti} = sprintf( "%.2f", $ord->{ecost} * ( 1 + ( $ord->{gstrate} ) ) );
|
||||
$ord->{ecostgste} = sprintf( "%.2f", $ord->{ecost} );
|
||||
$ord->{gstvalue} = sprintf( "%.2f", ( $ord->{ecostgsti} - $ord->{ecostgste} ) * $ord->{quantity});
|
||||
$ord->{totalgste} = sprintf( "%.2f", $ord->{quantity} * $ord->{ecostgste} );
|
||||
$ord->{totalgsti} = sprintf( "%.2f", $ord->{quantity} * $ord->{ecostgsti} );
|
||||
}
|
||||
my $bib = GetBiblioData($ord->{biblionumber});
|
||||
my $itemtypes = GetItemTypes();
|
||||
if($ord->{isbn}){
|
||||
push(@ba_order, $ord->{isbn});
|
||||
} else {
|
||||
push(@ba_order, undef);
|
||||
}
|
||||
if ($ord->{itemtype} and $bib->{itemtype}){
|
||||
push(@ba_order, $itemtypes->{$bib->{itemtype}}->{description});
|
||||
} else {
|
||||
push(@ba_order, undef);
|
||||
}
|
||||
# } else {
|
||||
# push(@ba_order, undef, undef);
|
||||
for my $key (qw/author title publishercode quantity listprice ecost/) {
|
||||
push(@ba_order, $ord->{$key}); #Order lines
|
||||
}
|
||||
push(@ba_order, $bookseller->{discount});
|
||||
push(@ba_order, $bookseller->{gstrate}*100 // C4::Context->preference("gist") // 0);
|
||||
push(@ba_orders, \@ba_order);
|
||||
|
||||
#FIXME DELETE ME
|
||||
# 0 1 2 3 4 5 6 7 8 9
|
||||
#isbn, itemtype, author, title, publishercode, quantity, listprice ecost discount gstrate
|
||||
|
||||
# Editor Number
|
||||
my $en;
|
||||
my $marcrecord=eval{MARC::Record::new_from_xml( $ord->{marcxml},'UTF-8' )};
|
||||
|
@ -259,14 +267,19 @@ sub printbasketgrouppdf{
|
|||
$en = $marcrecord->subfield( '037', "a" );
|
||||
}
|
||||
}
|
||||
if($en){
|
||||
push(@ba_order, $en);
|
||||
} else {
|
||||
push(@ba_order, undef);
|
||||
|
||||
my $ba_order = {
|
||||
isbn => ($ord->{isbn} ? $ord->{isbn} : undef),
|
||||
itemtype => ( $ord->{itemtype} and $bib->{itemtype} ? $itemtypes->{$bib->{itemtype}}->{description} : undef ),
|
||||
en => ( $en ? $en : undef ),
|
||||
};
|
||||
for my $key ( qw/ gstrate author title itemtype publishercode discount quantity rrpgsti rrpgste gstgsti gstgste ecostgsti ecostgste gstvalue totalgste totalgsti / ) {
|
||||
$ba_order->{$key} = $ord->{$key};
|
||||
}
|
||||
|
||||
push(@ba_orders, $ba_order);
|
||||
}
|
||||
}
|
||||
$orders{$basket->{basketno}}=\@ba_orders;
|
||||
$orders{$basket->{basketno}} = \@ba_orders;
|
||||
}
|
||||
print $input->header(
|
||||
-type => 'application/pdf',
|
||||
|
|
|
@ -82,7 +82,7 @@ sub printorders {
|
|||
|
||||
my $abaskets;
|
||||
my $arrbasket;
|
||||
my @keys = ('Basket (N°)','Document','Qty','RRT GST Inc.','Discount','Discount price GST Exc.','GST', 'Total GST Inc.');
|
||||
my @keys = ('Basket (N°)', 'Document', 'Qty', 'RRP tax inc.', 'Discount', 'GST', 'Total tax exc.', 'Total tax inc.');
|
||||
for my $bkey (@keys) {
|
||||
push(@$arrbasket, $bkey);
|
||||
}
|
||||
|
@ -93,13 +93,13 @@ sub printorders {
|
|||
$arrbasket = undef;
|
||||
push( @$arrbasket,
|
||||
$basket->{basketno},
|
||||
@$line[3]." / ".@$line[2].(@$line[0]?" ISBN : ".@$line[0]:'').(@$line[10]?" EN : ".@$line[10]:'').", ".@$line[1].(@$line[4]?' published by '.@$line[4]:''),
|
||||
@$line[5],
|
||||
$num->format_price(@$line[6]),
|
||||
$num->format_price(@$line[8]).'%',
|
||||
$num->format_price(@$line[7]/(1+@$line[9]/100)),
|
||||
$num->format_price(@$line[9]).'%',
|
||||
$num->format_price($num->round(@$line[7])*@$line[5])
|
||||
$line->{title} . " / " . $line->{author} . ( $line->{isbn} ? " ISBN : " . $line->{isbn} : '' ) . ( $line->{en} ? " EN : " . $line->{en} : '' ) . ", " . $line->{itemtype} . ( $line->{publishercode} ? ' published by '. $line->{publishercode} : ""),
|
||||
$line->{quantity},
|
||||
$num->format_price($line->{rrpgsti}),
|
||||
$num->format_price($line->{discount}).'%',
|
||||
$num->format_price($line->{gstrate} * 100).'%',
|
||||
$num->format_price($line->{totalgste}),
|
||||
$num->format_price($line->{totalgsti}),
|
||||
);
|
||||
push(@$abaskets, $arrbasket);
|
||||
}
|
||||
|
|
|
@ -25,6 +25,7 @@ package pdfformat::layout3pages;
|
|||
use vars qw($VERSION @ISA @EXPORT);
|
||||
use Number::Format qw(format_price);
|
||||
use MIME::Base64;
|
||||
use List::MoreUtils qw/uniq/;
|
||||
use strict;
|
||||
use warnings;
|
||||
use utf8;
|
||||
|
@ -102,15 +103,24 @@ sub printorders {
|
|||
my $pdftable = new PDF::Table();
|
||||
my $abaskets;
|
||||
my $arrbasket;
|
||||
my @keys = ('Document','Qty','RRT GST Inc.','Discount','Discount price GST Exc.','GST', 'Total GST Inc.');
|
||||
my @keys = ('Document', 'Qty', 'RRP tax exc.', 'RRP tax inc.', 'Discount', 'Discount price', 'GST rate', 'Total tax exc.', 'Total tax inc.');
|
||||
for my $bkey (@keys) {
|
||||
push(@$arrbasket, $bkey);
|
||||
}
|
||||
push(@$abaskets, $arrbasket);
|
||||
# @{$orders->{$basket->{basketno}}});
|
||||
foreach my $line (@{$orders->{$basket->{basketno}}}) {
|
||||
$arrbasket = undef;
|
||||
push(@$arrbasket, @$line[3]." / ".@$line[2].(@$line[0]?" ISBN : ".@$line[0]:'').(@$line[10]?" EN : ".@$line[10]:'').", ".@$line[1].(@$line[4]?' published by '.@$line[4]:''), @$line[5],$num->format_price(@$line[6]),$num->format_price(@$line[8]).'%',$num->format_price(@$line[7]/(1+@$line[9]/100)),$num->format_price(@$line[9]).'%',$num->format_price($num->round(@$line[7])*@$line[5]));
|
||||
push( @$arrbasket,
|
||||
$line->{title} . " / " . $line->{author} . ( $line->{isbn} ? " ISBN : " . $line->{isbn} : '' ) . ( $line->{en} ? " EN : " . $line->{en} : '' ) . ", " . $line->{itemtype} . ( $line->{publishercode} ? ' published by '. $line->{publishercode} : ""),
|
||||
$line->{quantity},
|
||||
$num->format_price($line->{rrpgste}),
|
||||
$num->format_price($line->{rrpgsti}),
|
||||
$num->format_price($line->{discount}).'%',
|
||||
$num->format_price($line->{rrpgste} - $line->{ecostgste}),
|
||||
$num->format_price($line->{gstrate} * 100).'%',
|
||||
$num->format_price($line->{totalgste}),
|
||||
$num->format_price($line->{totalgsti}),
|
||||
);
|
||||
push(@$abaskets, $arrbasket);
|
||||
}
|
||||
|
||||
|
@ -128,13 +138,19 @@ sub printorders {
|
|||
font_size => 3/mm,
|
||||
header_props => {
|
||||
font => $pdf->corefont("Times", -encoding => "utf8"),
|
||||
font_size => 10,
|
||||
font_size => 9,
|
||||
bg_color => 'gray',
|
||||
repeat => 1,
|
||||
},
|
||||
column_props => [
|
||||
{
|
||||
min_w => 100/mm, # Minimum column width.
|
||||
min_w => 85/mm, # Minimum column width.
|
||||
},
|
||||
{
|
||||
justify => 'right', # One of left|right ,
|
||||
},
|
||||
{
|
||||
justify => 'right', # One of left|right ,
|
||||
},
|
||||
{
|
||||
justify => 'right', # One of left|right ,
|
||||
|
@ -203,34 +219,54 @@ sub printbaskets {
|
|||
my $abaskets;
|
||||
my $arrbasket;
|
||||
# header of the table
|
||||
my @keys = ('Lot', 'Basket (N°)', 'RRT GST Inc.', 'Discount', 'Discount price','GST rate', 'Total GST exc.','GST', 'Total GST Inc.');
|
||||
my @keys = ('Lot', 'Basket (N°)','Total RRP tax exc.', 'Total RRP tax inc.', 'GST rate', 'GST', 'Total discount', 'Total tax exc.', 'Total tax inc.');
|
||||
for my $bkey (@keys) {
|
||||
push(@$arrbasket, $bkey);
|
||||
}
|
||||
my $grandtotal=0;
|
||||
my $grandgst=0;
|
||||
my ($grandtotalrrpgsti, $grandtotalrrpgste, $grandtotalgsti, $grandtotalgste, $grandtotalgstvalue, $grandtotaldiscount);
|
||||
# calculate each basket total
|
||||
push(@$abaskets, $arrbasket);
|
||||
for my $basket (@$hbaskets) {
|
||||
my @gst;
|
||||
$arrbasket = undef;
|
||||
my ($total, $gst, $totallist) = (0, 0, 0);
|
||||
my ($totalrrpgste, $totalrrpgsti, $totalgste, $totalgsti, $totalgstvalue, $totaldiscount);
|
||||
my $ords = $orders->{$basket->{basketno}};
|
||||
my $ordlength = @$ords;
|
||||
foreach my $ord (@$ords) {
|
||||
$total += @$ord[5] * @$ord[7];
|
||||
$gst += (@$ord[5] * @$ord[7]) * $GSTrate/(1+$GSTrate);
|
||||
$totallist += @$ord[5]*@$ord[6];
|
||||
$totalgste += $ord->{totalgste};
|
||||
$totalgsti += $ord->{totalgsti};
|
||||
$totalgstvalue += $ord->{gstvalue};
|
||||
$totaldiscount += ($ord->{rrpgste} - $ord->{ecostgste} ) * $ord->{quantity};
|
||||
$totalrrpgste += $ord->{rrpgste} * $ord->{quantity};
|
||||
$totalrrpgsti += $ord->{rrpgsti} * $ord->{quantity};
|
||||
push @gst, $ord->{gstrate};
|
||||
}
|
||||
$total=$num->round($total);
|
||||
$gst=$num->round($gst);
|
||||
$grandtotal +=$total;
|
||||
$grandgst +=$gst;
|
||||
push(@$arrbasket, $basket->{contractname}, $basket->{basketname}.'(N°'.$basket->{basketno}.')',$num->format_price($totallist), $num->format_price($bookseller->{discount}).'%', $num->format_price($total), $num->format_price($GSTrate*100).'%', $num->format_price($total-$gst), $num->format_price($gst), $num->format_price($total));
|
||||
@gst = uniq map { $_ * 100 } @gst;
|
||||
$totalgsti = $num->round($totalgsti);
|
||||
$totalgste = $num->round($totalgste);
|
||||
$grandtotalrrpgste += $totalrrpgste;
|
||||
$grandtotalrrpgsti += $totalrrpgsti;
|
||||
$grandtotalgsti += $totalgsti;
|
||||
$grandtotalgste += $totalgste;
|
||||
$grandtotalgstvalue += $totalgstvalue;
|
||||
$grandtotaldiscount += $totaldiscount;
|
||||
my @gst_string = map{$num->format_price( $_ ) . '%'} @gst;
|
||||
push(@$arrbasket,
|
||||
$basket->{contractname},
|
||||
$basket->{basketname} . ' (N°' . $basket->{basketno} . ')',
|
||||
$num->format_price($totalrrpgste),
|
||||
$num->format_price($totalrrpgsti),
|
||||
"@gst_string",
|
||||
$num->format_price($totalgstvalue),
|
||||
$num->format_price($totaldiscount),
|
||||
$num->format_price($totalgste),
|
||||
$num->format_price($totalgsti)
|
||||
);
|
||||
push(@$abaskets, $arrbasket);
|
||||
}
|
||||
# now, push total
|
||||
undef $arrbasket;
|
||||
push @$arrbasket,'','','','Total',$num->format_price($grandtotal),'',$num->format_price($grandtotal-$grandgst), $num->format_price($grandgst),$num->format_price($grandtotal);
|
||||
push @$arrbasket,'','Total', $num->format_price($grandtotalrrpgste), $num->format_price($grandtotalrrpgsti), '', $num->format_price($grandtotalgstvalue), $num->format_price($grandtotaldiscount), $num->format_price($grandtotalgste), $num->format_price($grandtotalgsti);
|
||||
push @$abaskets,$arrbasket;
|
||||
# height is width and width is height in this function, as the pdf is in landscape mode for the Tables.
|
||||
|
||||
|
@ -270,12 +306,6 @@ sub printbaskets {
|
|||
{
|
||||
justify => 'right',
|
||||
},
|
||||
{
|
||||
justify => 'right',
|
||||
},
|
||||
{
|
||||
justify => 'right',
|
||||
},
|
||||
],
|
||||
);
|
||||
$pdf->mediabox($height/mm, $width/mm);
|
||||
|
|
Loading…
Reference in a new issue