From a9c5f502758fad5229356c8d8d292ebc89bff6d8 Mon Sep 17 00:00:00 2001 From: tipaul Date: Mon, 20 Sep 2004 15:03:27 +0000 Subject: [PATCH] adding barcode generator to Koha --- C4/Barcodes/PrinterConfig.pm | 220 +++++++++++++++++ barcodes/barcodes.pl | 143 +++++++++++ barcodes/barcodesGenerator.pl | 220 +++++++++++++++++ barcodes/pdfViewer.pl | 38 +++ barcodes/printerConfig.pl | 116 +++++++++ .../default/en/barcodes/barcodes-bottom.inc | 17 ++ .../default/en/barcodes/barcodes-top.inc | 229 ++++++++++++++++++ .../default/en/barcodes/barcodes.tmpl | 180 ++++++++++++++ .../default/en/barcodes/printerConfig.tmpl | 104 ++++++++ .../en/includes/countryCodes/countryCodes.dat | 14 ++ .../labelConfig/itemsLabelConfig.conf | 8 + 11 files changed, 1289 insertions(+) create mode 100644 C4/Barcodes/PrinterConfig.pm create mode 100755 barcodes/barcodes.pl create mode 100755 barcodes/barcodesGenerator.pl create mode 100755 barcodes/pdfViewer.pl create mode 100755 barcodes/printerConfig.pl create mode 100644 koha-tmpl/intranet-tmpl/default/en/barcodes/barcodes-bottom.inc create mode 100644 koha-tmpl/intranet-tmpl/default/en/barcodes/barcodes-top.inc create mode 100644 koha-tmpl/intranet-tmpl/default/en/barcodes/barcodes.tmpl create mode 100644 koha-tmpl/intranet-tmpl/default/en/barcodes/printerConfig.tmpl create mode 100644 koha-tmpl/intranet-tmpl/default/en/includes/countryCodes/countryCodes.dat create mode 100644 koha-tmpl/intranet-tmpl/default/en/includes/labelConfig/itemsLabelConfig.conf diff --git a/C4/Barcodes/PrinterConfig.pm b/C4/Barcodes/PrinterConfig.pm new file mode 100644 index 0000000000..44e08c3a81 --- /dev/null +++ b/C4/Barcodes/PrinterConfig.pm @@ -0,0 +1,220 @@ +package C4::Barcodes::PrinterConfig; + +# 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 + +use strict; +require Exporter; +use vars qw($VERSION @EXPORT); + +use PDF::API2; +use PDF::API2::Page; + +# set the version for version checking +$VERSION = 0.01; + +=head1 NAME + +C4::Barcodes::PrinterConfig - Koha module dealing with labels in a PDF. + +=head1 SYNOPSIS + + use C4::Barcodes::PrinterConfig; + +=head1 DESCRIPTION + +This package is used to deal with labels in a pdf file. Giving some parameters, +this package contains several functions to handle every label considering the +environment of the pdf file. + +=head1 FUNCTIONS + +=over 2 + +=cut + +@EXPORT = qw(&labelsPage &getLabelPosition setPositionsForX setPositionsForY); + +my @positionsForX; # Takes all the X positions of the pdf file. +my @positionsForY; # Takes all the Y positions of the pdf file. +my $firstLabel = 1; # Test if the label passed as a parameter is the first label to be printed into the pdf file. + +=item setPositionsForX + + C4::Barcodes::PrinterConfig::setPositionsForX($marginLeft, $labelWidth, $columns, $pageType); + +Calculate and stores all the X positions across the pdf page. + +C<$marginLeft> Indicates how much left margin do you want in your page type. + +C<$labelWidth> Indicates the width of the label that you are going to use. + +C<$columns> Indicates how many columns do you want in your page type. + +C<$pageType> Page type to print (eg: a4, legal, etc). + +=cut +#' +sub setPositionsForX { + my ($marginLeft, $labelWidth, $columns, $pageType) = @_; + my $defaultDpi = 72/25.4; # By default we know 25.4 mm -> 1 inch -> 72 dots per inch + my $whereToStart = ($marginLeft + ($labelWidth/2)); + my $firstLabel = $whereToStart*$defaultDpi; + my $spaceBetweenLabels = $labelWidth*$defaultDpi; + my @positions; + for (my $i = 0; $i < $columns ; $i++) { + push @positions, ($firstLabel+($spaceBetweenLabels*$i)); + } + @positionsForX = @positions; +} + +=item setPositionsForY + + C4::Barcodes::PrinterConfig::setPositionsForY($marginBottom, $labelHeigth, $rows, $pageType); + +Calculate and stores all tha Y positions across the pdf page. + +C<$marginBottom> Indicates how much bottom margin do you want in your page type. + +C<$labelHeigth> Indicates the height of the label that you are going to use. + +C<$rows> Indicates how many rows do you want in your page type. + +C<$pageType> Page type to print (eg: a4, legal, etc). + +=cut +#' +sub setPositionsForY { + my ($marginBottom, $labelHeigth, $rows, $pageType) = @_; + my $defaultDpi = 72/25.4; # By default we know 25.4 mm -> 1 inch -> 72 dots per inch + my $whereToStart = ($marginBottom + ($labelHeigth/2)); + my $firstLabel = $whereToStart*$defaultDpi; + my $spaceBetweenLabels = $labelHeigth*$defaultDpi; + my @positions; + for (my $i = 0; $i < $rows; $i++) { + unshift @positions, ($firstLabel+($spaceBetweenLabels*$i)); + } + @positionsForY = @positions; +} + +=item getLabelPosition + + (my $x, my $y, $pdfObject, $pageObject, $gfxObject, $textObject, $coreObject, $labelPosition) = + C4::Barcodes::PrinterConfig::getLabelPosition($labelPosition, + $pdfObject, + $page, + $gfx, + $text, + $fontObject, + $pageType); + +Return the (x,y) position of the label that you are going to print considering the environment. + +C<$labelPosition> Indicates which label positions do you want to place by x and y coordinates. + +C<$pdfObject> The PDF object in use. + +C<$page> The page in use. + +C<$gfx> The gfx resource to handle with barcodes objects. + +C<$text> The text resource to handle with text. + +C<$fontObject> The font object + +C<$pageType> Page type to print (eg: a4, legal, etc). + +=cut +#' +sub getLabelPosition { + my ($labelNum, $pdf, $page, $gfxObject, $textObject, $fontObject, $pageType) = @_; + my $indexX = $labelNum % @positionsForX; + my $indexY = int($labelNum / @positionsForX); + # Calculates the next label position and return that label number + my $nextIndexX = $labelNum % @positionsForX; + my $nextIndexY = $labelNum % @positionsForY; + if ($firstLabel) { + $page = $pdf->page; + $page->mediabox($pageType); + $gfxObject = $page->gfx; + $textObject = $page->text; + $textObject->font($fontObject, 7); + $firstLabel = 0; + } elsif (($nextIndexX == 0) && ($nextIndexY == 0)) { + $page = $pdf->page; + $page->mediabox($pageType); + $gfxObject = $page->gfx; + $textObject = $page->text; + $textObject->font($fontObject, 7); + } + $labelNum = $labelNum + 1; + if ($labelNum == (@positionsForX*@positionsForY)) { + $labelNum = 0; + } + return ($positionsForX[$indexX], $positionsForY[$indexY], $pdf, $page, $gfxObject, $textObject, $fontObject, $labelNum); +} + +=item labelsPage + + my @labelTable = C4::Barcodes::PrinterConfig::labelsPage($rows, $columns); + +This function will help you to build the labels panel, where you can choose +wich label position do you want to start the printer process. + +C<$rows> Indicates how many rows do you want in your page type. + +C<$columns> Indicates how many rows do you want in your page type. + +=cut +#' +sub labelsPage{ + my ($rows, $columns) = @_; + my @pageType; + my $tagname = 0; + my $labelname = 1; + my $check; + for (my $i = 1; $i <= $rows; $i++) { + my @column; + for (my $j = 1; $j <= $columns; $j++) { + my %cell; + if ($tagname == 0) { + $check = 'checked'; + } else { + $check = ''; + } + %cell = (check => $check, + tagname => $tagname, + labelname => $labelname); + $tagname = $tagname + 1; + $labelname = $labelname + 1; + push @column, \%cell; + } + my %columns = (columns => \@column); + push @pageType, \%columns; + } + return @pageType; +} + +1; + +__END__ + +=back + +=head1 AUTHOR + +Koha Physics Library UNLP + +=cut \ No newline at end of file diff --git a/barcodes/barcodes.pl b/barcodes/barcodes.pl new file mode 100755 index 0000000000..fb6b3c6e05 --- /dev/null +++ b/barcodes/barcodes.pl @@ -0,0 +1,143 @@ +#!/usr/bin/perl + +# script to generate items barcodes +# written 07/04 +# by Veleda Matias - matias_veleda@hotmail.com - Physics Library UNLP Argentina and +# Castañeda Sebastian - seba3c@yahoo.com.ar - Physics Library UNLP Argentina and + +# 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 + +use strict; +use CGI; +use C4::Auth; +use C4::Output; +use C4::Interface::CGI::Output; +use C4::Database; +use HTML::Template; +use C4::Context; +use C4::Barcodes::PrinterConfig; + + + +# This function returns the path to deal with the correct files, considering +# templates set and language. +sub getPath { + my $type = shift @_; + my $templatesSet = C4::Context->preference('template'); + my $lang = C4::Context->preference('opaclanguages'); + if ($type eq "intranet") { + return "$ENV{'DOCUMENT_ROOT'}/intranet-tmpl/$templatesSet/$lang"; + } else { + return "$ENV{'DOCUMENT_ROOT'}/opac-tmpl/$templatesSet/$lang"; + } +} + +# Load a configuration file. Before use this function, check if that file exists. +sub loadConfFromFile { + my $fileName = shift @_; + my %keyValues; + open FILE, "<$fileName"; + while () { + chomp; + if (/\s*([\w_]*)\s*=\s*([\[\]\<\>\w_\s:@,\.-]*)\s*/) { + $keyValues{$1} = $2; + } + } + close FILE; + return %keyValues; +} + +# Save settings to a configuration file. It delete previous configuration settings. +sub saveConfToFile { + my $fileName = shift @_; + my %keyValues = %{shift @_}; + my $i; + open FILE, ">$fileName"; + my $i; + foreach $i (keys(%keyValues)) { + print FILE $i." = ".$keyValues{$i}."\n"; + } + close FILE; +} + +# Load the config file. +my $filenameConf = &getPath("intranet")."/includes/labelConfig/itemsLabelConfig.conf"; +my %labelConfig = &loadConfFromFile($filenameConf); + +my $input = new CGI; +# Defines type of page to use in the printer process +my @labelTable = C4::Barcodes::PrinterConfig::labelsPage($labelConfig{'rows'}, $labelConfig{'columns'}); + +# It creates a list of posible intervals to choose codes to generate +my %list = ('continuous' => 'Continuous Range', 'individuals' => 'Individual Codes'); +my @listValues = keys(%list); +my $rangeType = CGI::scrolling_list(-name => 'rangeType', + -values => \@listValues, + -labels => \%list, + -size => 1, + -default => ['continuous'], + -multiple => 0, + -id => "rangeType", + -onChange => "changeRange(this)"); +# It creates a list of posible standard codifications. First checks if the user has just added a new code. +if ($input->param('addCode')) { + my $newCountryName = $input->param('countryName'); + my $newCountryCode = $input->param('countryCode'); + + my $countryCodesFilename = &getPath("intranet")."/includes/countryCodes/countryCodes.dat"; + open COUNTRY_CODES, ">>$countryCodesFilename"; + print COUNTRY_CODES $newCountryCode." = ".$newCountryName."\n"; + close COUNTRY_CODES; +} + +# Takes the country codes from a file and use them to set the country list. +my $countryCodes = &getPath("intranet")."/includes/countryCodes/countryCodes.dat"; +my %list = &loadConfFromFile($countryCodes); +@listValues = keys(%list); +my $number_system = CGI::scrolling_list(-name => 'numbersystem', + -values => \@listValues, + -labels => \%list, + -size => 1, + -multiple => 0); + +# Set the script name +my $script_name = "/cgi-bin/koha/barcodes/barcodesGenerator.pl"; + + +# Get the template to use +my ($template, $loggedinuser, $cookie) + = get_template_and_user({template_name => "barcodes/barcodes.tmpl", + type => "intranet", + query => $input, + authnotrequired => 0, + flagsrequired => {parameters => 1}, + debug => 1, + }); + +# Replace the template values with the real ones +$template->param(SCRIPT_NAME => $script_name); +$template->param(NUMBER_SYSTEM => $number_system); +$template->param(PAGES => $labelConfig{'pageType'}); +$template->param(RANGE_TYPE => $rangeType); +$template->param(LABEL_TABLE => \@labelTable); +$template->param(COL_SPAN => $labelConfig{'columns'}); +if ($input->param('error')) { + $template->param(ERROR => 1); +} else { + $template->param(ERROR => 0); +} +# Shows the template with the real values replaced +output_html_with_http_headers $input, $cookie, $template->output; \ No newline at end of file diff --git a/barcodes/barcodesGenerator.pl b/barcodes/barcodesGenerator.pl new file mode 100755 index 0000000000..867f9ee90c --- /dev/null +++ b/barcodes/barcodesGenerator.pl @@ -0,0 +1,220 @@ +#!/usr/bin/perl + +# script to generate items barcodes +# written 07/04 +# by Veleda Matias - matias_veleda@hotmail.com - Physics Library UNLP Argentina and +# Castañeda Sebastian - seba3c@yahoo.com.ar - Physics Library UNLP Argentina and + +# 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 + +require Exporter; + +use strict; + +use CGI; +use C4::Context; +use C4::Output; +use HTML::Template; +use PDF::API2; +use PDF::API2::Page; +use PDF::API2::PDF::Utils; +use C4::Barcodes::PrinterConfig; +use Time::localtime; + + +# This function returns the path to deal with the correct files, considering +# templates set and language. +sub getPath { + my $type = shift @_; + my $templatesSet = C4::Context->preference('template'); + my $lang = C4::Context->preference('opaclanguages'); + if ($type eq "intranet") { + return "$ENV{'DOCUMENT_ROOT'}/intranet-tmpl/$templatesSet/$lang"; + } else { + return "$ENV{'DOCUMENT_ROOT'}/opac-tmpl/$templatesSet/$lang"; + } +} + +# Load a configuration file. Before use this function, check if that file exists. +sub loadConfFromFile { + my $fileName = shift @_; + my %keyValues; + open FILE, "<$fileName"; + while () { + chomp; + if (/\s*([\w_]*)\s*=\s*([\[\]\<\>\w_\s:@,\.-]*)\s*/) { + $keyValues{$1} = $2; + } + } + close FILE; + return %keyValues; +} + +# Save settings to a configuration file. It delete previous configuration settings. +sub saveConfToFile { + my $fileName = shift @_; + my %keyValues = %{shift @_}; + my $i; + open FILE, ">$fileName"; + my $i; + foreach $i (keys(%keyValues)) { + print FILE $i." = ".$keyValues{$i}."\n"; + } + close FILE; +} + +# Load the config file. +my $filenameConf = &getPath("intranet")."/includes/labelConfig/itemsLabelConfig.conf"; +my %labelConfig = &loadConfFromFile($filenameConf); + +# Creates a CGI object and take its parameters +my $cgi = new CGI; +my $from = $cgi->param('from'); +my $to = $cgi->param('to'); +my $individualCodes = $cgi->param('individualCodes'); +my $pageType = $cgi->param('pages'); +my $label = $cgi->param('label'); +my $numbersystem = $cgi->param('numbersystem'); + +# Generate the checksum from an inventary code +sub checksum { + + sub calculateDigit { + my $code = shift @_; + my $sum = 0; + my $odd_parity = 1; + my $i; + for ($i = length($code) - 1; $i >= 0; $i--){ + if ( $odd_parity ) { + $sum = $sum + ( 3 * substr($code, $i, 1) ); + } else { + $sum = $sum + substr($code, $i, 1); } + $odd_parity = !$odd_parity; + } + my $check_digit = 10 - ($sum%10); + if ($check_digit==10) { + $check_digit=0; + } + return $code.$check_digit; + } + + my $currentCode = shift @_; + $currentCode = &calculateDigit($currentCode); + return $currentCode; +} + +# Assigns a temporary name to the PDF file +sub assingFilename { + my ($from, $to) = @_; + my $ip = $cgi->remote_addr(); + my $random = int(rand(1000000)); + my $timeObj = localtime(); + my ($day, $month, $year, $hour, $min, $sec) = ($timeObj->mday, + $timeObj->mon + 1, + $timeObj->year + 1900, + $timeObj->hour, + $timeObj->min, + $timeObj->sec); + my $tmpFileName = $random.'-'.$ip.'-(From '.$from.' to '.$to.')-['.$day.'.'.$month.'.'.$year.']-['.$hour.':'.$min.':'.$sec.'].pdf'; + return $tmpFileName; +} + +# Takes inventary codes from database and if they are between +# the interval specify by parameters, it generates the correspond barcodes +sub barcodesGenerator { + my ($from, $to, $individualCodes) = @_; + # Returns a database handler + my $dbh = C4::Context->dbh; + # Create the query to database + my $rangeCondition; + if ($individualCodes ne "") { + $rangeCondition = "AND (I.barcode IN " . $individualCodes . ")"; + } else { + $rangeCondition = "AND (I.barcode >= " . $from . " AND I.barcode <=" . $to . " )"; + } + + my $query = "SELECT CONCAT('$numbersystem',REPEAT('0',((12 - LENGTH('$numbersystem')) - LENGTH(I.barcode))), I.barcode) AS Codigo, B.title, B.author FROM biblio B, items I WHERE (I.biblionumber = B.biblioNumber ) " .$rangeCondition. " AND (I.barcode <> 'FALTA') ORDER BY Codigo"; + + # Prepare the query + my $sth = $dbh->prepare($query); + # Executes the query + $sth->execute; + if ($sth->rows) { # There are inventary codes + # Set the temp directory for pdf´s files + if (!defined($ENV{'TEMP'})) { + $ENV{'TEMP'} = '/tmp/'; + } + # Assigns a temporary filename for the pdf file + my $tmpFileName = &assingFilename($from, $to); + $tmpFileName = $ENV{'TEMP'}.$tmpFileName; + # Creates a PDF object + my $pdf = PDF::API2->new(-file => $tmpFileName); + # Set the positions where barcodes are going to be placed + C4::Barcodes::PrinterConfig::setPositionsForX($labelConfig{'marginLeft'}, $labelConfig{'labelWidth'}, $labelConfig{'columns'}, $labelConfig{'pageType'}); + C4::Barcodes::PrinterConfig::setPositionsForY($labelConfig{'marginBottom'}, $labelConfig{'labelHeigth'}, $labelConfig{'rows'}, $labelConfig{'pageType'}); + # Creates a font object + my $tr = $pdf->corefont('Helvetica-Bold'); + # Barcode position + my ($page, $gfx, $text); + while (my ($code,$title,$author) = $sth->fetchrow_array) { + # Generetase checksum + $code = &checksum($code); + # Generate the corresponde barcode to $code + my $barcode = $pdf->barcode(-font => $tr, # The font object to use + -type => 'ean13', # Standard of codification + -code => $code, # Text to codify + -extn => '012345', # Barcode extension (if it is aplicable) + -umzn => 10, # Top limit of the finished bar + -lmzn => 10, # Bottom limit of the finished bar + -zone => 15, # Bars size + -quzn => 0, # Space destinated for legend + -ofwt => 0.01, # Bars width + -fnsz => 8, # Font size + -text => '' + ); + + (my $x, my $y, $pdf, $page, $gfx, $text, $tr, $label) = C4::Barcodes::PrinterConfig::getLabelPosition( + $label, + $pdf, + $page, + $gfx, + $text, + $tr, + $pageType); + # Assigns a barcodes to $gfx + $gfx->barcode($barcode, $x, $y , (72/$labelConfig{'systemDpi'})); + # Assigns the additional information to the barcode (Legend) + $text->translate($x - 48, $y - 22); + $text->text(substr $title, 0, 30); + $text->translate($x - 48, $y - 29); + $text->text(substr $author, 0, 30); + } + # Writes the objects added in $gfx to $page + $pdf->finishobjects($page,$gfx, $text); + # Save changes to the PDF + $pdf->saveas; + # Close the conection with the PDF file + $pdf->end; + # Show the PDF file + print $cgi->redirect("/cgi-bin/koha/barcodes/pdfViewer.pl?tmpFileName=$tmpFileName"); + } else { + # Rollback and shows the error legend + print $cgi->redirect("/cgi-bin/koha/barcodes/barcodes.pl?error=1"); + } + $sth->finish; +} + +barcodesGenerator($from, $to, $individualCodes); \ No newline at end of file diff --git a/barcodes/pdfViewer.pl b/barcodes/pdfViewer.pl new file mode 100755 index 0000000000..b80d23df3d --- /dev/null +++ b/barcodes/pdfViewer.pl @@ -0,0 +1,38 @@ +#!/usr/bin/perl + +# script to show a PDF file. +# written 07/04 +# by Veleda Matias - matias_veleda@hotmail.com - Physics Library UNLP Argentina and +# Castañeda Sebastian - seba3c@yahoo.com.ar - Physics Library UNLP Argentina and + +# 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 + +require Exporter; + +use strict; +use C4::Context; +use CGI; + +# This script take a pdf filename as a parameter and output it to the browser. +my $cgi = new CGI; +my $tmpFileName = $cgi->param('tmpFileName'); +print $cgi->header(-type => 'application/pdf'), + $cgi->start_html(-title=>"Codify to PDF"); +open fh, "<$tmpFileName"; +while () { + print; +} +print $cgi->end_html(); \ No newline at end of file diff --git a/barcodes/printerConfig.pl b/barcodes/printerConfig.pl new file mode 100755 index 0000000000..62e6e50291 --- /dev/null +++ b/barcodes/printerConfig.pl @@ -0,0 +1,116 @@ +#!/usr/bin/perl + +# script to set the labels configuration for the printer process. +# written 07/04 +# by Veleda Matias - matias_veleda@hotmail.com - Physics Library UNLP Argentina and + +# 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 + +require Exporter; + +use strict; + +use CGI; +use C4::Context; +use C4::Output; +use C4::Auth; +use HTML::Template; +use PDF::API2; +use PDF::API2::Page; +use PDF::API2::PDF::Utils; +use C4::Interface::CGI::Output; + +# This function returns the path to deal with the correct files, considering +# templates set and language. +sub getPath { + my $type = shift @_; + my $templatesSet = C4::Context->preference('template'); + my $lang = C4::Context->preference('opaclanguages'); + if ($type eq "intranet") { + return "$ENV{'DOCUMENT_ROOT'}/intranet-tmpl/$templatesSet/$lang"; + } else { + return "$ENV{'DOCUMENT_ROOT'}/opac-tmpl/$templatesSet/$lang"; + } +} + +# Load a configuration file. +sub loadConfFromFile { + my $fileName = shift @_; + my %keyValues; + open FILE, "<$fileName"; + while () { + chomp; + if (/\s*([\w_]*)\s*=\s*([\[\]\<\>\w_\s:@,\.-]*)\s*/) { + $keyValues{$1} = $2; + } + } + close FILE; + return %keyValues; +} + +# Save settings to a configuration file. +sub saveConfToFile { + my $fileName = shift @_; + my %keyValues = %{shift @_}; + my $i; + open FILE, ">$fileName"; + my $i; + foreach $i (keys(%keyValues)) { + print FILE $i." = ".$keyValues{$i}."\n"; + } + close FILE; +} + +# Creates a CGI object and take his parameters +my $input = new CGI; + +if ($input->param('saveSettings')) { + my $labelConf = &getPath("intranet")."/includes/labelConfig/itemsLabelConfig.conf"; + my %newConfiguration = (pageType => $input->param('pageType'), + columns => $input->param('columns'), + rows => $input->param('rows'), + systemDpi => $input->param('systemDpi'), + labelWidth => $input->param('labelWidth'), + labelHeigth => $input->param('labelHeigth'), + marginBottom => $input->param('marginBottom'), + marginLeft => $input->param('marginLeft')); + saveConfToFile($labelConf, \%newConfiguration); + print $input->redirect('/cgi-bin/koha/barcodes/barcodes.pl') +} + +# Get the template to use +my ($template, $loggedinuser, $cookie) + = get_template_and_user({template_name => "barcodes/printerConfig.tmpl", + type => "intranet", + query => $input, + authnotrequired => 0, + flagsrequired => {parameters => 1}, + debug => 1, + }); + +my $filenameConf = &getPath("intranet")."/includes/labelConfig/itemsLabelConfig.conf"; +my %labelConfig = &loadConfFromFile($filenameConf); + +$template->param(COLUMNS => $labelConfig{'columns'}); +$template->param(ROWS => $labelConfig{'rows'}); +$template->param(SYSTEM_DPI => $labelConfig{'systemDpi'}); +$template->param(LABEL_WIDTH => $labelConfig{'labelWidth'}); +$template->param(LABEL_HEIGTH => $labelConfig{'labelHeigth'}); +$template->param(MARGIN_TOP => $labelConfig{'marginBottom'}); +$template->param(MARGIN_LEFT => $labelConfig{'marginLeft'}); +$template->param(SCRIPT_NAME => '/cgi-bin/koha/barcodes/printerConfig.pl'); +$template->param("$labelConfig{'pageType'}" => 1); +output_html_with_http_headers $input, $cookie, $template->output; \ No newline at end of file diff --git a/koha-tmpl/intranet-tmpl/default/en/barcodes/barcodes-bottom.inc b/koha-tmpl/intranet-tmpl/default/en/barcodes/barcodes-bottom.inc new file mode 100644 index 0000000000..0872ba581a --- /dev/null +++ b/koha-tmpl/intranet-tmpl/default/en/barcodes/barcodes-bottom.inc @@ -0,0 +1,17 @@ +
+

 

+ +
+Home || +Catalogue || +Members || +Acquisitions || +Circulation || +Reports || +Parameters || +About || +Help +
+ + + \ No newline at end of file diff --git a/koha-tmpl/intranet-tmpl/default/en/barcodes/barcodes-top.inc b/koha-tmpl/intranet-tmpl/default/en/barcodes/barcodes-top.inc new file mode 100644 index 0000000000..28d7f01011 --- /dev/null +++ b/koha-tmpl/intranet-tmpl/default/en/barcodes/barcodes-top.inc @@ -0,0 +1,229 @@ + + + + +KOHA: INTRANET: Parameters + +/includes/common-style.css"> + + + + + + + + + + +

Logged in as: [Log Out]

+ +

Log In to Koha

+ diff --git a/koha-tmpl/intranet-tmpl/default/en/barcodes/barcodes.tmpl b/koha-tmpl/intranet-tmpl/default/en/barcodes/barcodes.tmpl new file mode 100644 index 0000000000..16557e53e1 --- /dev/null +++ b/koha-tmpl/intranet-tmpl/default/en/barcodes/barcodes.tmpl @@ -0,0 +1,180 @@ + + + + + + +
+
+ + + + + + + + + + + + + +
+ Add a new Country Code +
+ Country Name  + + Country Code  +
+ + + +
+
+
+ + + + + +
+

Barcodes Generator

+ + + + +
Generate barcodes from inventary codes
+
    +
  • Select a range of inventary codes. You can select wether a continuous range or individual inventary codes
  • +
  • Select the standard type to generate barcodes.
  • +
  • Define the page size for output the PDF.
  • +
  • Depending on page size, Koha will show you how the page is arranged + for each barcode. You can define wich point to start printing the page. +
  • +
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
+

Can´t find inventary codes on that range. Please try again.

+
+ + + + + + + +
Type of Interval
+
+
+ + + + + + + + + +
From:
To:
+
+ +
+ + + + + + + +
Country Code
+
+ /images/more.gif" hspace="0" vspace="0" border="0" + style="vertical-align:bottom;cursor:pointer" + onclick="javascript: addCountryCode()"> + +
+
+
+ + + + + + + +
Page Size
+ " + size="10"> + [Go to Printer Configuration] +
+
+ + + + + + + + + + + +
">Label number to start printing
+ " + name="label" > + Label +
+
+ + + +
+
+
+ diff --git a/koha-tmpl/intranet-tmpl/default/en/barcodes/printerConfig.tmpl b/koha-tmpl/intranet-tmpl/default/en/barcodes/printerConfig.tmpl new file mode 100644 index 0000000000..55bb0cabbc --- /dev/null +++ b/koha-tmpl/intranet-tmpl/default/en/barcodes/printerConfig.tmpl @@ -0,0 +1,104 @@ + +
+

Printer Configuration

+ + + + +
Set de printer configuration corresponding to your environment
+
    +
  • Set width and heigth of the label that you are going to work with.
  • +
  • Set your system dpi by default.
  • +
  • Set the page type.
  • +
  • Select how many columns and rows are in your page type.
  • +
  • Set margin left and margin bottom of the page that you are going to use. This parameters will + help to center the barcodes into the labels.
  • +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ Label width (Expressed in mm) + + Label heigth (Expressed in mm) + + System dpi + + Page Type + + Columns + + Rows + + Margin Bottom (Expressed in mm) + + Margin Left (Expressed in mm) +
+ "> + + "> + + "> + + + + "> + + "> + + "> + + "> +
+ +
+
+
+ diff --git a/koha-tmpl/intranet-tmpl/default/en/includes/countryCodes/countryCodes.dat b/koha-tmpl/intranet-tmpl/default/en/includes/countryCodes/countryCodes.dat new file mode 100644 index 0000000000..a67e05dfb9 --- /dev/null +++ b/koha-tmpl/intranet-tmpl/default/en/includes/countryCodes/countryCodes.dat @@ -0,0 +1,14 @@ +00 = USA I +93 = Australia +94 = New Zealand +779 = Argentina +773 = Uruguay +30 = France I +84 = Spain +45 = Japan +777 = Bolivia +80 = Italy I +73 = Sweden +40 = Germany +31 = France II +254 = Ucrania diff --git a/koha-tmpl/intranet-tmpl/default/en/includes/labelConfig/itemsLabelConfig.conf b/koha-tmpl/intranet-tmpl/default/en/includes/labelConfig/itemsLabelConfig.conf new file mode 100644 index 0000000000..5283a51f24 --- /dev/null +++ b/koha-tmpl/intranet-tmpl/default/en/includes/labelConfig/itemsLabelConfig.conf @@ -0,0 +1,8 @@ +marginBottom = 12 +pageType = A4 +columns = 3 +systemDpi = 96 +labelHeigth = 20 +rows = 11 +marginLeft = 4 +labelWidth = 70 -- 2.39.2