From 16a19d9f85181b2ad1bb39d81c56b851f75c39f2 Mon Sep 17 00:00:00 2001 From: Aleisha Amohia Date: Fri, 29 Jul 2022 10:36:37 +1200 Subject: [PATCH] Bug 31257: Add a new English 1 page layout to export basketgroup This patch adds a new English 1 page layout to be used when exporting a basketgroup as PDF. This has been modelled after an example PDF from another library system. To test: 1) Go to Koha Administration -> Libraries. Ensure Library A has an address, phone and fax. 2) Go to Koha Administration -> System preferences. Search for OrderPdfFormat. Set this to the new English 1-page layout option. 3) Go to Acquisitions. Use an existing vendor or create a new one. Ensure the vendor has a postal address, phone, fax and accout number. 4) Create a basket for this vendor. Add a few orders to the basket. 5) Close the basket and add it to a basket group of the same name. 6) Edit the basket group. Add an address in the delivery place, and a delivery comment. Check the box to close the basket group and Save. 7) Click the button to Export as PDF. 8) View the exported PDF. Confirm all of the information displayed is correct. 9) Reopen the basketgroup. Edit the details and remove the delivery place text. Re-close the basketgroup. 10) Repeat steps 7 and 8. Sponsored-by: Pymble Ladies' College --- Koha/pdfformat/layout1page.pm | 240 +++++++++++++++++++++ acqui/basketgroup.pl | 2 +- .../en/modules/admin/preferences/acquisitions.pref | 1 + koha-tmpl/intranet-tmpl/prog/pdf/layout1page.odt | Bin 0 -> 10258 bytes koha-tmpl/intranet-tmpl/prog/pdf/layout1page.pdf | Bin 0 -> 19437 bytes 5 files changed, 242 insertions(+), 1 deletion(-) create mode 100644 Koha/pdfformat/layout1page.pm create mode 100644 koha-tmpl/intranet-tmpl/prog/pdf/layout1page.odt create mode 100644 koha-tmpl/intranet-tmpl/prog/pdf/layout1page.pdf diff --git a/Koha/pdfformat/layout1page.pm b/Koha/pdfformat/layout1page.pm new file mode 100644 index 00000000000..8badf759fe4 --- /dev/null +++ b/Koha/pdfformat/layout1page.pm @@ -0,0 +1,240 @@ +package Koha::pdfformat::layout1page; + +# Copyright 2022 Catalyst IT +# +# 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 3 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, see . + +#you can use any PDF::API2 module, all you need to do is return the stringifyed pdf object from the printpdf sub. +use vars qw(@ISA @EXPORT); +use Modern::Perl; +use utf8; + +use Koha::Number::Price; +use Koha::DateUtils qw( dt_from_string output_pref ); +use Koha::Libraries; + +BEGIN { + use Exporter (); + our (@ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); + @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 transform 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"); + + $pdf->mediabox($height/mm, $width/mm); + my $page = $pdf->openpage(1); + + my $pdftable = PDF::Table->new(); + + my $abaskets; + my $arrbasket; + my @keys = ('Document', 'Qty', 'RRP tax inc.', 'Discount', 'Tax', 'Total tax exc.', 'Total tax inc.'); + for my $bkey (@keys) { + push(@$arrbasket, $bkey); + } + push(@$abaskets, $arrbasket); + + my $titleinfo; + for my $basket (@$baskets){ + for my $line (@{$orders->{$basket->{basketno}}}) { + $arrbasket = undef; + $titleinfo = ""; + if ( C4::Context->preference("marcflavour") eq 'UNIMARC' ) { + $titleinfo = $line->{title} . " / " . $line->{author} . + ( $line->{isbn} ? " ISBN: " . $line->{isbn} : '' ) . + ( $line->{en} ? " EN: " . $line->{en} : '' ) . + ( $line->{itemtype} ? ", " . $line->{itemtype} : '' ) . + ( $line->{edition} ? ", " . $line->{edition} : '' ) . + ( $line->{publishercode} ? ' published by '. $line->{publishercode} : '') . + ( $line->{publicationyear} ? ', '. $line->{publicationyear} : ''); + } + else { # MARC21 + $titleinfo = $line->{title} . " " . $line->{author} . + ( $line->{isbn} ? " ISBN: " . $line->{isbn} : '' ) . + ( $line->{en} ? " EN: " . $line->{en} : '' ) . + ( $line->{itemtype} ? " " . $line->{itemtype} : '' ) . + ( $line->{edition} ? ", " . $line->{edition} : '' ) . + ( $line->{publishercode} ? ' published by '. $line->{publishercode} : '') . + ( $line->{copyrightdate} ? ' '. $line->{copyrightdate} : ''); + } + push( @$arrbasket, + $titleinfo. ($line->{order_vendornote} ? "\n----------------\nNote for vendor : " . $line->{order_vendornote} : '' ), + $line->{quantity}, + Koha::Number::Price->new( $line->{rrp_tax_included} )->format, + Koha::Number::Price->new( $line->{discount} )->format . '%', + Koha::Number::Price->new( $line->{tax_rate} * 100 )->format . '%', + Koha::Number::Price->new( $line->{total_tax_excluded} )->format, + Koha::Number::Price->new( $line->{total_tax_included} )->format, + ); + push(@$abaskets, $arrbasket); + } + } + + $pdftable->table($pdf, $page, $abaskets, + x => 10/mm, + w => ($width - 20)/mm, + start_y => 170/mm, + next_y => 170/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"); + my $billing_library = Koha::Libraries->find( $basketgroup->{billingplace} ); + my $delivery_library = Koha::Libraries->find( $basketgroup->{deliveryplace} ); + my $freedeliveryplace = $basketgroup->{freedeliveryplace}; + + # open 1st page (with the header) + my $page = $pdf->openpage(1); + + # create a text + my $text = $page->text; + $text->font( $pdf->corefont("Times", -encoding => "utf8"), 4/mm ); + + # print order info, on the default PDF + $text->translate(42/mm, ($height-62)/mm); + $text->text($basketgroup->{'id'}); + + # print the date + my $today = output_pref({ dt => dt_from_string, dateonly => 1 }); + $text->translate(41/mm, ($height-67)/mm); + $text->text($today); + + # print billing infos + $text->font( $pdf->corefont("Times-Bold", -encoding => "utf8"), 4/mm ); + $text->translate(107/mm, ($height-67)/mm); + $text->text($libraryname); + + $text->font( $pdf->corefont("Times", -encoding => "utf8"), 4/mm ); + $text->translate(107/mm, ($height-71)/mm); + $text->text($billing_library->branchname); + $text->translate(116/mm, ($height-97)/mm); + $text->text($billing_library->branchphone); + $text->translate(155/mm, ($height-97)/mm); + $text->text($billing_library->branchfax); + + # print bookseller infos + $text->translate(20/mm, ($height-33)/mm); + $text->text($bookseller->name); + $text->translate(20/mm, ($height-37)/mm); + if ( $bookseller->postal ) { + my $start = 41; + my @postal = split('\n', $bookseller->postal); + foreach (@postal) { + $text->text($_); + $text->translate( 20 / mm, ( $height - $start ) / mm ); + $start += 4; + } + } + $text->translate(20/mm, ($height-50)/mm); + $text->text($bookseller->accountnumber); + + # print delivery infos + $text->translate(107/mm, ($height-75)/mm); + if ($freedeliveryplace) { + my $start = 79; + my @fdp = split('\n', $freedeliveryplace); + foreach (@fdp) { + $text->text($_); + $text->translate( 107 / mm, ( $height - $start ) / mm ); + $start += 4; + } + } else { + $text->text( $delivery_library->branchaddress1 ); + $text->translate( 107 / mm, ( $height - 75 ) / mm ); + $text->text( $delivery_library->branchaddress2 ); + $text->translate( 107 / mm, ( $height - 79 ) / mm ); + $text->text( $delivery_library->branchaddress3 ); + $text->translate( 107 / mm, ( $height - 83 ) / mm ); + $text->text( join( ' ', $delivery_library->branchcity, $delivery_library->branchzip, $delivery_library->branchcountry ) ); + } + $text->translate( 20 / mm, ( $height - 120 ) / 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 $pdf_template = C4::Context->config('intrahtdocs') . '/' . C4::Context->preference('template') . '/pdf/layout1page.pdf'; + my $pdf = PDF::API2->open($pdf_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; diff --git a/acqui/basketgroup.pl b/acqui/basketgroup.pl index 336a8fb4d2f..38f7b6b44c5 100755 --- a/acqui/basketgroup.pl +++ b/acqui/basketgroup.pl @@ -125,7 +125,7 @@ sub printbasketgrouppdf{ my ($basketgroupid) = @_; my $pdfformat = C4::Context->preference("OrderPdfFormat"); - my @valid_pdfformats = qw(pdfformat::layout3pages pdfformat::layout2pages pdfformat::layout3pagesfr pdfformat::layout2pagesde); + my @valid_pdfformats = qw(pdfformat::layout3pages pdfformat::layout2pages pdfformat::layout3pagesfr pdfformat::layout2pagesde pdfformat::layout1page); if (grep {$_ eq $pdfformat} @valid_pdfformats) { $pdfformat = "Koha::$pdfformat"; my $pdfformat_filepath = File::Spec->catfile(split /::/, $pdfformat) . '.pm'; diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/acquisitions.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/acquisitions.pref index fd9475d15e8..62c57505aab 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/acquisitions.pref +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/acquisitions.pref @@ -118,6 +118,7 @@ Acquisitions: - Use the - pref: OrderPdfFormat choices: + "pdfformat::layout1page": English 1-page "pdfformat::layout2pages": English 2-page "pdfformat::layout3pages": English 3-page "pdfformat::layout3pagesfr": French 3-page diff --git a/koha-tmpl/intranet-tmpl/prog/pdf/layout1page.odt b/koha-tmpl/intranet-tmpl/prog/pdf/layout1page.odt new file mode 100644 index 0000000000000000000000000000000000000000..77ee285fc175fd22e262f013ecea4663435dfdd3 GIT binary patch literal 10258 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