From 03c51600a01878dcf0b319f4779db40c40cac185 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jean-Andr=C3=A9=20Santoni?= Date: Fri, 13 Nov 2009 12:33:17 +0100 Subject: [PATCH] [3.2.x](bug #3623) Alternative 2 pages layout for hte PDF This new template shows the order list of all the baskets in one big table. --- acqui/pdfformat/layout2pages.odt | Bin 0 -> 12688 bytes acqui/pdfformat/layout2pages.pdf | Bin 0 -> 25541 bytes acqui/pdfformat/layout2pages.pm | 254 +++++++++++++++++++++++++++++++ 3 files changed, 254 insertions(+) create mode 100644 acqui/pdfformat/layout2pages.odt create mode 100644 acqui/pdfformat/layout2pages.pdf create mode 100755 acqui/pdfformat/layout2pages.pm diff --git a/acqui/pdfformat/layout2pages.odt b/acqui/pdfformat/layout2pages.odt new file mode 100644 index 0000000000000000000000000000000000000000..e07288329a985e27c838f90b055eb51659aef505 GIT binary patch literal 12688 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 Wn4|O0v;jf5pd46qbYcqPSpNgsr_&w) literal 0 HcmV?d00001 diff --git a/acqui/pdfformat/layout2pages.pm b/acqui/pdfformat/layout2pages.pm new file mode 100755 index 0000000000..78ca0c4877 --- /dev/null +++ b/acqui/pdfformat/layout2pages.pm @@ -0,0 +1,254 @@ +#!/usr/bin/perl + +#example script to print a basketgroup +#written 07/11/08 by john.soros@biblibre.com and paul.poulain@biblibre.com + +# Copyright 2008-2009 BibLibre SARL +# +# 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., 59 Temple Place, +# Suite 330, Boston, MA 02111-1307 USA + +#you can use any PDF::API2 module, all you need to do is return the stringifyed pdf object from the printpdf sub. +package pdfformat::layout2pages; +use vars qw($VERSION @ISA @EXPORT); +use Number::Format qw(format_price); +use MIME::Base64; +use strict; +use warnings; +use utf8; + +use C4::Branch qw(GetBranchDetail); + +BEGIN { + use Exporter (); + our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); + # set the version for version checking + $VERSION = 1.00; + @ISA = qw(Exporter); + @EXPORT = qw(printpdf); +} + + +#be careful, all the sizes (height, width, etc...) are in mm, not PostScript points (the default measurment of PDF::API2). +#The constants exported tranform that into PostScript points (/mm for milimeter, /in for inch, pt is postscript point, and as so is there only to show what is happening. +use constant mm => 25.4 / 72; +use constant in => 1 / 72; +use constant pt => 1; + +use PDF::API2; +#A4 paper specs +my ($height, $width) = (297, 210); +use PDF::Table; + +sub printorders { + my ($pdf, $basketgroup, $baskets, $orders) = @_; + + my $cur_format = C4::Context->preference("CurrencyFormat"); + my $num; + + if ( $cur_format eq 'FR' ) { + $num = new Number::Format( + 'decimal_fill' => '2', + 'decimal_point' => ',', + 'int_curr_symbol' => '', + 'mon_thousands_sep' => ' ', + 'thousands_sep' => ' ', + 'mon_decimal_point' => ',' + ); + } else { # US by default.. + $num = new Number::Format( + 'int_curr_symbol' => '', + 'mon_thousands_sep' => ',', + 'mon_decimal_point' => '.' + ); + } + + $pdf->mediabox($height/mm, $width/mm); + my $page = $pdf->page(); + + my $pdftable = new PDF::Table(); + + my $abaskets; + my $arrbasket; + my @keys = ('Basket (N°)','Document','Qty','RRT GST Inc.','Discount','Discount price GST Exc.','GST', 'Total GST Inc.'); + for my $bkey (@keys) { + push(@$arrbasket, $bkey); + } + push(@$abaskets, $arrbasket); + + for my $basket (@$baskets){ + for my $line (@{$orders->{$basket->{basketno}}}) { + $arrbasket = undef; + push( @$arrbasket, + $basket->{basketno}, + @$line[3]." / ".@$line[2].(@$line[0]?" ISBN : ".@$line[0]:'').(@$line[10]?" EN : ".@$line[10]:'').", ".@$line[1].(@$line[4]?' publié par '.@$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(@$abaskets, $arrbasket); + } + } + + $pdftable->table($pdf, $page, $abaskets, + x => 10/mm, + w => ($width - 20)/mm, + start_y => 285/mm, + next_y => 285/mm, + start_h => 260/mm, + next_h => 260/mm, + padding => 5, + padding_right => 5, + background_color_odd => "lightgray", + font => $pdf->corefont("Times", -encoding => "utf8"), + font_size => 3/mm, + header_props => { + font => $pdf->corefont("Times", -encoding => "utf8"), + font_size => 10, + bg_color => 'gray', + repeat => 1, + }, + column_props => [ + { justify => 'left' }, + { min_w => 90/mm }, + { justify => 'right' }, + { justify => 'right' }, + { justify => 'right' }, + { justify => 'right' }, + { justify => 'right' }, + { justify => 'right' }, + ], + ); + + $pdf->mediabox($width/mm, $height/mm); +} + +sub printhead { + my ($pdf, $basketgroup, $bookseller) = @_; + + # get library name + my $libraryname = C4::Context->preference("LibraryName"); + # get branch details + my $billingdetails = GetBranchDetail( $basketgroup->{billingplace} ); + my $deliverydetails = GetBranchDetail( $basketgroup->{deliveryplace} ); + # get the subject + my $subject; + + # open 1st page (with the header) + my $page = $pdf->openpage(1); + + # create a text + my $text = $page->text; + + # print the libraryname in the header + $text->font( $pdf->corefont("Times", -encoding => "utf8"), 6/mm ); + $text->translate(30/mm, ($height-28.5)/mm); + $text->text($libraryname); + + # print order info, on the default PDF + $text->font( $pdf->corefont("Times", -encoding => "utf8"), 8/mm ); + $text->translate(100/mm, ($height-5-48)/mm); + $text->text($basketgroup->{'id'}); + + # print the date + my $today = C4::Dates->today(); + $text->translate(130/mm, ($height-5-48)/mm); + $text->text($today); + + $text->font( $pdf->corefont("Times", -encoding => "utf8"), 4/mm ); + + # print billing infos + $text->translate(100/mm, ($height-86)/mm); + $text->text($libraryname); + $text->translate(100/mm, ($height-97)/mm); + $text->text($billingdetails->{branchname}); + $text->translate(100/mm, ($height-108.5)/mm); + $text->text($billingdetails->{branchphone}); + $text->translate(100/mm, ($height-115.5)/mm); + $text->text($billingdetails->{branchfax}); + $text->translate(100/mm, ($height-122.5)/mm); + $text->text($billingdetails->{branchaddress1}); + $text->translate(100/mm, ($height-127.5)/mm); + $text->text($billingdetails->{branchaddress2}); + $text->translate(100/mm, ($height-132.5)/mm); + $text->text($billingdetails->{branchaddress3}); + $text->translate(100/mm, ($height-137.5)/mm); + $text->text(join(' ', $billingdetails->{branchzip}, $billingdetails->{branchcity}, $billingdetails->{branchcountry})); + $text->translate(100/mm, ($height-147.5)/mm); + $text->text($billingdetails->{branchemail}); + + # print subject + $text->translate(100/mm, ($height-145.5)/mm); + $text->text($subject); + + # print bookseller infos + $text->translate(100/mm, ($height-180)/mm); + $text->text($bookseller->{name}); + $text->translate(100/mm, ($height-185)/mm); + $text->text($bookseller->{postal}); + $text->translate(100/mm, ($height-190)/mm); + $text->text($bookseller->{address1}); + $text->translate(100/mm, ($height-195)/mm); + $text->text($bookseller->{address2}); + $text->translate(100/mm, ($height-200)/mm); + $text->text($bookseller->{address3}); + + # print delivery infos + $text->font( $pdf->corefont("Times-Bold", -encoding => "utf8"), 4/mm ); + $text->translate(50/mm, ($height-237)/mm); + $text->text($deliverydetails->{branchaddress1}); + $text->translate(50/mm, ($height-242)/mm); + $text->text($deliverydetails->{branchaddress2}); + $text->translate(50/mm, ($height-247)/mm); + $text->text($deliverydetails->{branchaddress3}); + $text->translate(50/mm, ($height-252)/mm); + $text->text(join(' ', $deliverydetails->{branchzip}, $deliverydetails->{branchcity}, $deliverydetails->{branchcountry})); + $text->translate(50/mm, ($height-262)/mm); + $text->text($basketgroup->{deliverycomment}); +} + +sub printfooters { + my $pdf = shift; + for ( 1..$pdf->pages ) { + my $page = $pdf->openpage($_); + my $text = $page->text; + $text->font( $pdf->corefont("Times", -encoding => "utf8"), 3/mm ); + $text->translate(10/mm, 10/mm); + $text->text("Page $_ / ".$pdf->pages); + } +} + +sub printpdf { + my ($basketgroup, $bookseller, $baskets, $orders, $GST) = @_; + # open the default PDF that will be used for base (1st page already filled) + my $template = C4::Context->preference("OrderPdfTemplate"); + $template = decode_base64($template); + my $pdf = PDF::API2->openScalar($template); + $pdf->pageLabel( 0, { + -style => 'roman', + } ); # start with roman numbering + # fill the 1st page (basketgroup information) + printhead($pdf, $basketgroup, $bookseller); + # fill other pages (orders) + printorders($pdf, $basketgroup, $baskets, $orders); + # print something on each page (usually the footer, but you could also put a header + printfooters($pdf); + return $pdf->stringify; +} + +1; -- 2.39.5