[24/40] Adding single/multiple label printing to label export code and interface.
[srvgit] / labels / label-create-csv.pl
index be29afa..7b1cc8f 100755 (executable)
@@ -1,55 +1,95 @@
 #!/usr/bin/perl
+# Copyright 2009 Foundations Bible College.
+#
+# 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 warnings;
+
 use CGI;
-use C4::Labels;
-use C4::Auth;
-use C4::Output;
-use C4::Context;
-use C4::Biblio;
+use Sys::Syslog qw(syslog);
 use Text::CSV_XS;
+use Data::Dumper;
 
-my $DEBUG = 0;
-my $DEBUG_LPT = 0;
+use C4::Debug;
+use C4::Labels::Batch 1.000000;
+use C4::Labels::Template 1.000000;
+use C4::Labels::Layout 1.000000;
+use C4::Labels::PDF 1.000000;
+use C4::Labels::Label 1.000000;
 
-my $htdocs_path = C4::Context->config('intrahtdocs');
-my $cgi         = new CGI;
+=head
 
+=cut
 
-# get the printing settings
-my $template    = GetActiveLabelTemplate();
-my $conf_data   = get_label_options();
+my $cgi = new CGI;
 
-my $batch_id =   $cgi->param('batch_id');
-my $exportname = 'koha_label_' . $batch_id . '.csv';
+my $batch_id    = $cgi->param('batch_id') if $cgi->param('batch_id');
+my $template_id = $cgi->param('template_id') || undef;
+my $layout_id   = $cgi->param('layout_id') || undef;
+my @label_ids   = $cgi->param('label_id') if $cgi->param('label_id');
+my @item_numbers  = $cgi->param('item_number') if $cgi->param('item_number');
 
-print $cgi->header(-type => 'application/vnd.sun.xml.calc',
-                            -encoding    => 'utf-8',
-                            -attachment => $exportname,
-                            -filename => $exportname );
+my $items = undef;
 
-my $batch_type   = $conf_data->{'type'};
-my $barcodetype  = $conf_data->{'barcodetype'};
-my $printingtype = $conf_data->{'printingtype'};
+my $csv_file = (@label_ids || @item_numbers ? "label_single_" . scalar(@label_ids || @item_numbers) : "label_batch_$batch_id");
+print $cgi->header(-type        => 'application/vnd.sun.xml.calc',
+                   -encoding    => 'utf-8',
+                   -attachment  => "$csv_file.csv",
+                    );
 
-my @resultsloop = GetLabelItems($batch_id);
-my $csv = Text::CSV_XS->new();
-my @str_fields = get_text_fields($conf_data->{'id'}, 'codes' );
-for my $item (@resultsloop) {
-    my $record = GetMarcBiblio($item->{biblionumber});
-    my @datafields = map { C4::Labels::GetBarcodeData($_->{'code'},$item,$record) } @str_fields ;
-       my $csvout ;
-       if($csv->combine(@datafields)) {
-               $csvout = $csv->string();
-               print "$csvout\n";
-       } else {
-               warn "CSV ERROR: " . $csv->error_input;
-       }
-
-}    # end for item loop
 
-exit(1);
-# is that the right way to do this ?
+my $batch = C4::Labels::Batch->retrieve(batch_id => $batch_id);
+my $template = C4::Labels::Template->retrieve(template_id => $template_id, profile_id => 1);
+my $layout = C4::Labels::Layout->retrieve(layout_id => $layout_id);
 
 
+if (@label_ids) {
+    my $batch_items = $batch->get_attr('items');
+    grep {
+        my $label_id = $_;
+        push(@{$items}, grep{$_->{'label_id'} == $label_id;} @{$batch_items});
+    } @label_ids;
+}
+elsif (@item_numbers) {
+    grep {
+        push(@{$items}, {item_number => $_});
+    } @item_numbers;
+}
+else {
+    $items = $batch->get_attr('items');
+}
 
+my $csv = Text::CSV_XS->new();
+
+CSV_ITEMS:
+foreach my $item (@$items) {
+    my $label = C4::Labels::Label->new(
+                                    batch_id            => $batch_id,
+                                    item_number         => $item->{'item_number'},
+                                    format_string       => $layout->get_attr('format_string'),
+                                      );
+    my $csv_fields = $label->csv_data();
+    if ($csv->combine(@$csv_fields)) {
+        print $csv->string() . "\n";
+    }
+    else {
+        syslog("LOG_ERR", "labels/label-create-csv.pl : Text::CSV_XS->combine() returned the following error: %s", $csv->error_input);
+        next CSV_ITEMS;
+    }
+}
+
+exit(1);