[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Koha-cvs] CVS: koha/barcodes barcodes.pl,NONE,1.1.2.1 barcodesGenerator
From: |
Matias |
Subject: |
[Koha-cvs] CVS: koha/barcodes barcodes.pl,NONE,1.1.2.1 barcodesGenerator.pl,NONE,1.1.2.1 pdfViewer.pl,NONE,1.1.2.1 printerConfig.pl,NONE,1.1.2.1 |
Date: |
Wed, 01 Sep 2004 10:33:57 -0700 |
Update of /cvsroot/koha/koha/barcodes
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28331/barcodes
Added Files:
Tag: R_2-4
barcodes.pl barcodesGenerator.pl pdfViewer.pl printerConfig.pl
Log Message:
Adding barcodes support.
--- NEW FILE ---
#!/usr/bin/perl
# script to generate items barcodes
# written 07/04
# by Veleda Matias - address@hidden - Physics Library UNLP Argentina and
# Castañeda Sebastian - address@hidden - 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 (<FILE>) {
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 => address@hidden,
-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 => address@hidden,
-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 => address@hidden);
$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;
--- NEW FILE ---
#!/usr/bin/perl
# script to generate items barcodes
# written 07/04
# by Veleda Matias - address@hidden - Physics Library UNLP Argentina and
# Castañeda Sebastian - address@hidden - 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 (<FILE>) {
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'} =
'/usr/local/koha21/intranet/htdocs/uploaded-files/temp-pdf/';
}
# 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);
--- NEW FILE ---
#!/usr/bin/perl
# script to show a PDF file.
# written 07/04
# by Veleda Matias - address@hidden - Physics Library UNLP Argentina and
# Castañeda Sebastian - address@hidden - 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 (<fh>) {
print;
}
print $cgi->end_html();
--- NEW FILE ---
#!/usr/bin/perl
# script to set the labels configuration for the printer process.
# written 07/04
# by Veleda Matias - address@hidden - 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 (<FILE>) {
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;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Koha-cvs] CVS: koha/barcodes barcodes.pl,NONE,1.1.2.1 barcodesGenerator.pl,NONE,1.1.2.1 pdfViewer.pl,NONE,1.1.2.1 printerConfig.pl,NONE,1.1.2.1,
Matias <=