koha-cvs
[Top][All Lists]
Advanced

[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;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]