[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 matiasveleda at users.sourceforge.net
Wed Sep 1 19:33:57 CEST 2004


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 - matias_veleda at hotmail.com - Physics Library UNLP Argentina and
#    Castañeda Sebastian - seba3c at 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 (<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 => \@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;
--- NEW FILE ---
#!/usr/bin/perl

# script to generate items barcodes
# written 07/04
# by Veleda Matias - matias_veleda at hotmail.com - Physics Library UNLP Argentina and
#    Castañeda Sebastian - seba3c at 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 (<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 - matias_veleda at hotmail.com - Physics Library UNLP Argentina and
#    Castañeda Sebastian - seba3c at 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 (<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 - matias_veleda at 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 (<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;




More information about the Koha-cvs mailing list