[Koha-patches] [PATCH] Labels update- print any marc field and add csv output.
Ryan Higgins
rch at liblime.com
Thu Apr 17 23:24:42 CEST 2008
Make any MARC data available to labels module;
Also add a csv output option, allowing export of relevant
biblio data do a 3rd party label layout application.
Note: This patch REQUIRES a forthcoming updatedatabase patch !
---
C4/Labels.pm | 198 +++++++++++++-------
.../intranet-tmpl/prog/en/css/staff-global.css | 4 +
.../prog/en/includes/tools-labels-toolbar.inc | 2 +-
.../prog/en/modules/labels/label-edit-layout.tmpl | 67 ++++++-
.../prog/en/modules/labels/label-manager.tmpl | 4 +-
labels/label-create-layout.pl | 10 +-
labels/label-manager.pl | 33 ++--
labels/label-print-csv.pl | 57 ++++++
8 files changed, 276 insertions(+), 99 deletions(-)
create mode 100755 labels/label-print-csv.pl
diff --git a/C4/Labels.pm b/C4/Labels.pm
index 6365c56..ea89a31 100644
--- a/C4/Labels.pm
+++ b/C4/Labels.pm
@@ -25,7 +25,9 @@ use Text::Wrap;
use Algorithm::CheckDigits;
use C4::Members;
use C4::Branch;
- use Data::Dumper;
+use C4::Biblio;
+use Text::CSV_XS;
+use Data::Dumper;
# use Smart::Comments;
BEGIN {
@@ -49,7 +51,7 @@ BEGIN {
&GetItemFields
&get_text_fields
get_layout &save_layout &add_layout
- &set_active_layout &by_order
+ &set_active_layout
&build_text_dropbox
&delete_layout &get_active_layout
&get_highest_batch
@@ -151,11 +153,12 @@ sub get_printingtypes {
my ($layout_id) = @_;
my @printtypes;
# FIXME: hard coded print types
- push( @printtypes, { code => 'BAR', desc => "barcode" } );
- push( @printtypes, { code => 'BIB', desc => "biblio" } );
+ push( @printtypes, { code => 'BAR', desc => "barcode only" } );
+ push( @printtypes, { code => 'BIB', desc => "biblio only" } );
push( @printtypes, { code => 'BARBIB', desc => "barcode / biblio" } );
push( @printtypes, { code => 'BIBBAR', desc => "biblio / barcode" } );
push( @printtypes, { code => 'ALT', desc => "alternating labels" } );
+ push( @printtypes, { code => 'CSV', desc => "csv output" } );
push( @printtypes, { code => 'PATCRD', desc => "patron cards" } );
my $conf = get_layout($layout_id);
@@ -165,12 +168,15 @@ sub get_printingtypes {
foreach my $printtype (@printtypes) {
if ( $printtype->{'code'} eq $active_printtype ) {
- $printtype->{'active'} = 'MOO';
+ $printtype->{'active'} = 1;
}
}
return @printtypes;
}
+# this sub (build_text_dropbox) is deprecated and should be deleted.
+# rch 2008.04.15
+#
sub build_text_dropbox {
my ($order) = @_;
@@ -195,88 +201,89 @@ sub build_text_dropbox {
sub get_text_fields {
my ($layout_id, $sorttype) = @_;
-
- my ( $a, $b, $c, $d, $e, $f, $g, $h, $i ,$j, $k );
-
+ my @sorted_fields;
+ my $error;
my $sortorder = get_layout($layout_id);
-
+ if( $sortorder->{formatstring}) {
+ if(! $sorttype) {
+ return $sortorder->{formatstring} ;
+ } else {
+ my $csv = Text::CSV_XS->new( { allow_whitespace => 1 } ) ;
+ my $line= $sortorder->{formatstring} ;
+ my $status = $csv->parse( $line );
+ @sorted_fields = map {{ 'code' => $_ , desc => $_ } } $csv->fields() ;
+ $error = $csv->error_input();
+ warn $error if $error ; # TODO - do more with this.
+ }
+ } else {
# These fields are hardcoded based on the template for label-edit-layout.pl
-
- $a = {
+ my @text_fields = (
+ {
code => 'itemtype',
desc => "Item Type",
order => $sortorder->{'itemtype'}
- };
-
- $b = {
+ },
+ {
code => 'dewey',
desc => "Dewey",
order => $sortorder->{'dewey'}
- };
-
- $c = {
+ },
+ {
code => 'issn',
desc => "ISSN",
order => $sortorder->{'issn'}
- };
-
- $d = {
+ },
+ {
code => 'isbn',
desc => "ISBN",
order => $sortorder->{'isbn'}
- };
-
- $e = {
+ },
+ {
code => 'class',
desc => "Classification",
order => $sortorder->{'class'}
- };
-
- $f = {
+ },
+ {
code => 'subclass',
desc => "Sub-Class",
order => $sortorder->{'subclass'}
- };
-
- $g = {
+ },
+ {
code => 'barcode',
desc => "Barcode",
order => $sortorder->{'barcode'}
- };
-
- $h = {
+ },
+ {
code => 'author',
desc => "Author",
order => $sortorder->{'author'}
- };
-
- $i = {
+ },
+ {
code => 'title',
desc => "Title",
order => $sortorder->{'title'}
- };
-
- $j = {
+ },
+ {
code => 'itemcallnumber',
desc => "Call Number",
order => $sortorder->{'itemcallnumber'}
- };
-
- $k = {
+ },
+ {
code => 'subtitle',
desc => "Subtitle",
order => $sortorder->{'subtitle'}
- };
+ }
+ );
- my @text_fields = ( $a, $b, $c, $d, $e, $f, $g, $h, $i ,$j, $k );
- my @new_fields;
- foreach my $field (@text_fields) {
- push( @new_fields, $field ) if $field->{'order'} > 0;
+ my @new_fields;
+ foreach my $field (@text_fields) {
+ push( @new_fields, $field ) if $field->{'order'} > 0;
+ }
+
+ @sorted_fields = sort { $$a{order} <=> $$b{order} } @new_fields;
}
-
- my @sorted_fields = sort by_order @new_fields;
-
+ # if we have a 'formatstring', then we ignore these hardcoded fields.
my $active_fields;
if ($sorttype eq 'codes') { # FIXME: This sub should really always return the array of hashrefs and let the caller take what he wants from that -fbcit
@@ -290,10 +297,6 @@ sub get_text_fields {
}
-sub by_order {
- $$a{order} <=> $$b{order};
-}
-
=head2 sub add_batch
=over 4
add_batch($batch_type,\@batch_list);
@@ -568,7 +571,7 @@ sub add_layout {
$barcodetype, $title, $subtitle, $isbn, $issn,
$itemtype, $bcn, $dcn, $classif,
$subclass, $itemcallnumber, $author, $tmpl_id,
- $printingtype, $guidebox, $startlabel, $layoutname
+ $printingtype, $guidebox, $startlabel, $layoutname, $formatstring
) = @_;
my $dbh = C4::Context->dbh;
@@ -586,7 +589,7 @@ sub add_layout {
$itemtype, $bcn, $dcn, $classif,
$subclass, $itemcallnumber, $author, $printingtype,
- $guidebox, $startlabel, $layoutname
+ $guidebox, $startlabel, $layoutname, $formatstring
);
$sth2->finish;
@@ -600,7 +603,7 @@ sub save_layout {
$barcodetype, $title, $subtitle, $isbn, $issn,
$itemtype, $bcn, $dcn, $classif,
$subclass, $itemcallnumber, $author, $tmpl_id,
- $printingtype, $guidebox, $startlabel, $layoutname,
+ $printingtype, $guidebox, $startlabel, $layoutname, $formatstring,
$layout_id
) = @_;
### $layoutname
@@ -611,13 +614,13 @@ sub save_layout {
barcodetype=?, title=?, subtitle=?, isbn=?,issn=?,
itemtype=?, barcode=?, dewey=?, classification=?,
subclass=?, itemcallnumber=?, author=?, printingtype=?,
- guidebox=?, startlabel=?, layoutname=? where id = ?";
+ guidebox=?, startlabel=?, layoutname=?, formatstring=? where id = ?";
my $sth2 = $dbh->prepare($query2);
$sth2->execute(
$barcodetype, $title, $subtitle, $isbn, $issn,
$itemtype, $bcn, $dcn, $classif,
$subclass, $itemcallnumber, $author, $printingtype,
- $guidebox, $startlabel, $layoutname, $layout_id
+ $guidebox, $startlabel, $layoutname, $formatstring, $layout_id
);
$sth2->finish;
@@ -852,6 +855,57 @@ sub GetItemFields {
return @fields;
}
+=head GetBarcodeData
+
+=over 4
+Parse labels_conf.formatstring value
+(one value of the csv, which has already been split)
+and return string from koha tables or MARC record.
+=back
+=cut
+#'
+sub GetBarcodeData {
+ my ($f,$item,$record) = @_;
+ my $kohatables= &_descKohaTables();
+ my $datastring;
+ my $last_f = $f;
+ my $match_kohatable = join('|', (@{$kohatables->{biblio}},@{$kohatables->{biblioitems}},@{$kohatables->{items}}) );
+ while( $f ) {
+ if( $f =~ /^'(.*)'.*/ ) {
+ # single quotes indicate a static text string.
+ $datastring .= $1 ;
+ $f = $';
+ } elsif ( $f =~ /^($match_kohatable).*/ ) {
+ # grep /$f/, (@$kohatables->{biblio},@$kohatables->{biblioitems},@$kohatables->{items}) ) {
+ $datastring .= $item->{$f};
+ $f = $';
+ } elsif ( $f =~ /^([0-9a-z]{3})(\w)(\W*).*/ ) {
+ $datastring .= $record->subfield($1,$2) . $3 if($record->subfield($1,$2)) ;
+ $f = $';
+ }
+ last if ( $f eq $last_f ); # failed to match
+ }
+ return $datastring;
+}
+
+=head descKohaTables
+Return a hashref of an array of hashes,
+with name,type keys.
+=cut
+
+sub _descKohaTables {
+ my $dbh = C4::Context->dbh();
+ my $kohatables;
+ for my $table ( 'biblio','biblioitems','items' ) {
+ my $sth = $dbh->column_info(undef,undef,$table,'%');
+ while (my $info = $sth->fetchrow_hashref()){
+ push @{$kohatables->{$table}} , $info->{'COLUMN_NAME'} ;
+ }
+ $sth->finish;
+ }
+ return $kohatables;
+}
+
sub GetPatronCardItems {
my ( $batch_id ) = @_;
@@ -942,28 +996,34 @@ sub DrawSpineText {
my $vPos = ( $y_pos + ( $label_height - $top_text_margin ) );
my @str_fields = get_text_fields($layout_id, 'codes' );
- my @fields;
- foreach my $field (@str_fields) {
- push (@fields, $field->{'code'});
- }
+ my $record = GetMarcBiblio($$item->{biblionumber});
+ # FIXME - returns all items, so you can't get data from an embedded holdings field.
+ # TODO - add a GetMarcBiblio1item(bibnum,itemnum) or a GetMarcItem(itemnum).
my $old_fontname = $fontname; # We need to keep track of the original font passed in...
- foreach my $field (@fields) {
+ for my $field (@str_fields) {
+
+ if ($$conf_data->{'formatstring'}) {
+ $field->{'data'} = GetBarcodeData($field->{'code'},$$item,$record) ;
+ } else {
+ $field->{data} = $$item{$field->{'code'}} ;
+ }
+
# This allows us to print the title in italic (oblique) type... (Times Roman has a different nomenclature.)
# It seems there should be a better way to handle fonts in the label/patron card tool altogether -fbcit
- ($field eq 'title') ? (($old_fontname =~ /T/) ? ($fontname = 'TI') : ($fontname = ($old_fontname . 'O'))) : ($fontname = $old_fontname);
+ ($field->{code} eq 'title') ? (($old_fontname =~ /T/) ? ($fontname = 'TI') : ($fontname = ($old_fontname . 'O'))) : ($fontname = $old_fontname);
my $font = prFont($fontname);
# if the display option for this field is selected in the DB,
# and the item record has some values for this field, display it.
- if ( $$conf_data->{"$field"} && $$item->{"$field"} ) {
+ if ( ($$conf_data->{'formatstring'}) || ( $$conf_data->{$field->{code}} && $$item->{$field->{code}} ) ) {
# get the string
- $str = $$item->{"$field"};
+ my $str = $field->{data} ;
# strip out naughty existing nl/cr's
$str =~ s/\n//g;
$str =~ s/\r//g;
my @strings;
- if ($field eq 'itemcallnumber') { # If the field contains the call number, we do some special processing on it here...
+ if ($field->{code} eq 'itemcallnumber') { # If the field contains the call number, we do some special processing on it here...
if (($nowrap == 0) || (!$nowrap)) { # wrap lines based on segmentation markers: '/' (other types of segmentation markers can be added as needed here or this could be added as a syspref.)
while ( $str =~ /\// ) {
$str =~ /^(.*)\/(.*)$/;
@@ -993,8 +1053,8 @@ sub DrawSpineText {
PrintText( $hPos, $vPos, $font, $fontsize, $str );
$vPos = $vPos - $line_spacer;
}
- } # if field is
- } #foreach feild
+ }
+ } #foreach field
}
sub PrintText {
diff --git a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css b/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css
index 7b1b26e..d89a6a6 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css
+++ b/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css
@@ -479,6 +479,10 @@ fieldset.rows fieldset {
padding : .3em;
}
+fieldset.disabled {
+ color: #999 !important;
+}
+
.yui-b fieldset.rows label, .yui-b fieldset.rows span.label {
width: 9em;
}
diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/tools-labels-toolbar.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/tools-labels-toolbar.inc
index 144b0d6..99736b9 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/includes/tools-labels-toolbar.inc
+++ b/koha-tmpl/intranet-tmpl/prog/en/includes/tools-labels-toolbar.inc
@@ -21,7 +21,7 @@
//]]>
</script>
<ul class="toolbar">
- <li><a id="newlabel" href="/cgi-bin/koha/labels/label-create-layout.pl">New Layout</a></li>
+ <li><a id="newlabel" href="/cgi-bin/koha/labels/label-edit-layout.pl">New Layout</a></li>
<li><a id="newtemplate" href="/cgi-bin/koha/labels/label-create-template.pl?op=blank">New Label Template</a></li>
<li><a id="newprofile" href="/cgi-bin/koha/labels/label-create-profile.pl?op=blank">New Printer Profile</a></li>
<li><a id="newlabelbatch" href="/cgi-bin/koha/labels/label-manager.pl?op=add_batch&type=labels">New Label Batch</a></li>
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/labels/label-edit-layout.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/labels/label-edit-layout.tmpl
index e35eb11..a2082e3 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/labels/label-edit-layout.tmpl
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/labels/label-edit-layout.tmpl
@@ -1,21 +1,54 @@
<!-- TMPL_INCLUDE NAME="doc-head-open.inc" --><title>Koha › Tools › Labels</title>
<!-- TMPL_INCLUDE NAME="doc-head-close.inc" -->
+<script>
+function jscss(action,o,c1,c2)
+{
+ // from: http://onlinetools.org/articles/unobtrusivejavascript/cssjsseparation.html
+ switch (action){
+ case 'swap':
+ o.className=!jscss('check',o,c1)?o.className.replace(c2,c1): o.className.replace(c1,c2);
+ break;
+ case 'add':
+ if(!jscss('check',o,c1)){o.className+=o.className?' '+c1:c1;}
+ break;
+ case 'remove':
+ var rep=o.className.match(' '+c1)?' '+c1:c1;
+ o.className=o.className.replace(rep,'');
+ break;
+ case 'check':
+ return new RegExp('\\b'+c1+'\\b').test(o.className)
+ break;
+ }
+}
+function chooselayoutspec(rb) {
+ stringspec=document.getElementById("formatstring");
+ if(rb.value == 'layout_string') {
+ stringspec.disabled=0;
+ jscss('remove',document.getElementById('layout_string'),'disabled','');
+ jscss('add',document.getElementById('layout_tx'),'disabled','');
+ } else {
+ stringspec.disabled=1;
+ jscss('remove',document.getElementById('layout_tx'),'disabled','');
+ jscss('add',document.getElementById('layout_string'),'disabled','');
+ }
+}
+</script>
</head>
<body>
<!-- TMPL_INCLUDE NAME="header.inc" -->
<!-- TMPL_INCLUDE NAME="cat-search.inc" -->
-<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> › <a href="/cgi-bin/koha/tools/tools-home.pl">Tools</a> › <a href="/cgi-bin/koha/labels/label-home.pl">Labels</a> › Edit Label Layout</div>
+<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> › <a href="/cgi-bin/koha/tools/tools-home.pl">Tools</a> › <a href="/cgi-bin/koha/labels/label-home.pl">Labels</a> › <!-- TMPL_IF NAME="layout_id" -->Edit<!-- TMPL_ELSE -->Create<!-- /TMPL_IF --> Label Layout</div>
<div id="doc3" class="yui-t2">
<div id="bd">
<div id="yui-main">
<div class="yui-b">
-
+ <!-- TMPL_INCLUDE NAME="tools-labels-toolbar.inc" -->
<form name="input" action="/cgi-bin/koha/labels/label-manager.pl" method="get">
<fieldset class="rows">
-<legend>Edit Label Layout</legend>
+<legend><!-- TMPL_IF NAME="layout_id" -->Edit<!-- TMPL_ELSE -->Create<!-- /TMPL_IF --> Label Layout</legend>
<ol>
<li><label for="layoutname">Layout Name</label>
<input type="text" name="layoutname" id="layoutname" size="20" value="<!-- TMPL_VAR NAME="layoutname" -->" /></li>
@@ -43,10 +76,14 @@
<!-- /TMPL_LOOP -->
</select></li>
-<li><fieldset class="rows">
+
+<li>
+<fieldset class="rows">
<legend>
- Choose Order Of Text Fields to Print
+Bibliographic Data to Print
</legend>
+<input type="radio" name="layoutchoice" value="layout_tx" <!-- TMPL_UNLESS NAME="layout_string" -->checked="checked"<!-- /TMPL_UNLESS --> onclick="chooselayoutspec(this);" >Choose Order Of Text Fields to Print</input>
+<fieldset id="layout_tx" <!-- TMPL_IF NAME="layout_string" -->class="disabled"<!-- /TMPL_IF -->>
<table summary="fields to print">
<tr>
<td>
@@ -221,9 +258,21 @@
<td> </td>
</tr>
</table>
-</fieldset></li>
-
-<li><label for="startlabel">Start printing from Label number: </label><input type="text" name="startlabel" id="startlabel" size="1" value="<!-- TMPL_VAR NAME="startlabel" -->" /></li>
+</fieldset>
+<br />
+<input type="radio" name="layoutchoice" value="layout_string" <!-- TMPL_IF NAME="layout_string" -->checked="checked"<!-- /TMPL_IF --> onclick="chooselayoutspec(this);"> List Fields </input>
+<fieldset id="layout_string" <!-- TMPL_UNLESS NAME="layout_string" -->class="disabled"<!-- /TMPL_UNLESS -->>
+<label for="layoutname">Data Fields</label>
+ <input type="text" name="formatstring" id="formatstring" size="60" value="<!-- TMPL_VAR NAME="formatstring" -->" <!-- TMPL_UNLESS NAME="layout_string" -->disabled="true"<!-- /TMPL_UNLESS --> />
+ <div class="help">
+ <p>Enter a comma separated list of fields to print. You may include any <em>Koha field</em> or MARC subfield.</p>
+ <p>See online help for advanced options</p>
+ <p>ex: barcode, itemcallnumber, title, "050a 050b", 300a </p>
+ </div>
+</fieldset>
+</fieldset>
+</li>
+<li><label for="startlabel">Start printing from Label number: </label><input type="text" name="startlabel" id="startlabel" size="1" value="<!-- TMPL_IF NAME="startlabel" --><!-- TMPL_VAR NAME="startlabel" --><!-- TMPL_ELSE -->1<!-- /TMPL_IF -->" /></li>
<li><label for="guidebox">Draw Guide Boxes</label>
@@ -237,7 +286,7 @@
</fieldset>
<fieldset class="action">
<input type="submit" value="Submit" /> <a class="cancel" href="/cgi-bin/koha/labels/label-home.pl">Cancel</a>
- <input type="hidden" name="op" value="save_layout" />
+ <input type="hidden" name="op" value="<!-- TMPL_IF NAME="layout_id" -->save<!-- TMPL_ELSE -->add<!-- /TMPL_IF -->_layout" />
<input type="hidden" name="layout_id" value="<!-- TMPL_VAR NAME="layout_id" -->" />
</fieldset>
</form>
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/labels/label-manager.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/labels/label-manager.tmpl
index 1ac48c3..c52fdac 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/labels/label-manager.tmpl
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/labels/label-manager.tmpl
@@ -93,7 +93,7 @@
<td><!-- TMPL_VAR NAME="num" --> records</td>
<td><a href="/cgi-bin/koha/labels/label-manager.pl?batch_id=<!-- TMPL_VAR NAME="batch_id" -->&type=labels">Edit</a></td>
<td><a href="/cgi-bin/koha/labels/label-manager.pl?op=delete_batch&batch_id=<!-- TMPL_VAR NAME="batch_id" -->&type=labels">Delete</a><!-- FIXME: should use POST to change server state, not GET --></td>
- <td><a style="float: left;" href="/cgi-bin/koha/labels/label-print-pdf.pl?batch_id=<!-- TMPL_VAR NAME="batch_id" -->&type=labels">Generate PDF for Batch <!-- TMPL_VAR NAME="batch_id" --></a></td>
+ <td><a style="float: left;" href="/cgi-bin/koha/labels/label-print-<!-- TMPL_VAR NAME="outputformat" -->.pl?batch_id=<!-- TMPL_VAR NAME="batch_id" -->&type=labels">Generate and download <!-- TMPL_VAR NAME="batch_id" --></a></td>
</tr>
<!-- /TMPL_LOOP -->
</table>
@@ -136,7 +136,7 @@
<td><!-- TMPL_VAR NAME="num" --> records</td>
<td><a href="/cgi-bin/koha/labels/label-manager.pl?batch_id=<!-- TMPL_VAR NAME="batch_id" -->&type=patroncards">Edit</a></td>
<td><a href="/cgi-bin/koha/labels/label-manager.pl?op=delete_batch&batch_id=<!-- TMPL_VAR NAME="batch_id" -->&type=patroncards">Delete</a><!-- FIXME: should use POST to change server state, not GET --></td>
- <td><a style="float: left;" href="/cgi-bin/koha/labels/label-print-pdf.pl?batch_id=<!-- TMPL_VAR NAME="batch_id" -->&type=patroncards">Generate PDF for Batch <!-- TMPL_VAR NAME="batch_id" --></a></td>
+ <td><a style="float: left;" href="/cgi-bin/koha/labels/label-print-<!-- TMPL_VAR NAME="outputformat" -->.pl?batch_id=<!-- TMPL_VAR NAME="batch_id" -->&type=patroncards">Generate and download <!-- TMPL_VAR NAME="batch_id" --></a></td>
</tr>
<!-- /TMPL_LOOP -->
</table>
diff --git a/labels/label-create-layout.pl b/labels/label-create-layout.pl
index 413ecbb..dc3381c 100755
--- a/labels/label-create-layout.pl
+++ b/labels/label-create-layout.pl
@@ -8,9 +8,7 @@ use C4::Labels;
use C4::Context;
use HTML::Template::Pro;
-#use Data::Dumper;
-#use Smart::Comments;
-
+my $dbh = = C4::Context->dbh;
my $query = new CGI;
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
{
@@ -25,6 +23,7 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
my $data = get_label_options();
my $op = $query->param('op');
+my $layout_id = $query->param('layout_id');
my $active_template = GetActiveLabelTemplate();
my @label_templates = GetAllLabelTemplates();
@@ -33,7 +32,10 @@ my @layouts = get_layouts();
my @barcode_types = get_barcode_types();
my @batches = get_batches();
-### $data
+my @barcode_types = get_barcode_types($layout_id);
+my @printingtypes = get_printingtypes($layout_id);
+my $layout;
+$layout = get_layout($layout_id) if($layout_id);
$template->param( guidebox => 1 ) if ( $data->{'guidebox'} );
$template->param( "papertype_$data->{'papertype'}" => 1 );
diff --git a/labels/label-manager.pl b/labels/label-manager.pl
index c6684b8..3bd54e0 100755
--- a/labels/label-manager.pl
+++ b/labels/label-manager.pl
@@ -40,6 +40,7 @@ my $startlabel = $query->param('startlabel');
my $printingtype = $query->param('printingtype');
my $guidebox = $query->param('guidebox');
my $fontsize = $query->param('fontsize');
+my $formatstring = $query->param('formatstring');
my @itemnumber;
($query->param('type') eq 'labels') ? (@itemnumber = $query->param('itemnumber')) : (@itemnumber = $query->param('borrowernumber'));
my $batch_type = $query->param('type');
@@ -72,24 +73,25 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
}
);
-if ( $op eq 'save_conf' ) { # this early sub is depreciated, use save_layout()
- SaveConf(
- $barcodetype, $title, $isbn,
- $issn, $itemtype, $bcn, $dcn,
- $classif, $subclass, $itemcallnumber, $author,
- $tmpl_id, $printingtype, $guidebox, $startlabel, $layoutname
- );
- print $query->redirect("label-home.pl");
- exit;
-}
-elsif ( $op eq 'save_layout' ) {
+#if ( $op eq 'save_conf' ) { # this early sub is depreciated, use save_layout()
+# SaveConf(
+# $barcodetype, $title, $isbn,
+# $issn, $itemtype, $bcn, $dcn,
+# $classif, $subclass, $itemcallnumber, $author,
+# $tmpl_id, $printingtype, $guidebox, $startlabel, $layoutname
+# );
+# print $query->redirect("label-home.pl");
+# exit;
+#}
+#elsif ( $op eq 'save_layout' ) {
+if ( $op eq 'save_layout' ) {
save_layout(
$barcodetype, $title, $subtitle, $isbn,
$issn, $itemtype, $bcn, $dcn,
$classif, $subclass, $itemcallnumber, $author,
$tmpl_id, $printingtype, $guidebox, $startlabel, $layoutname,
- $layout_id
- );
+ , $formatstring , $layout_id
+ );
### $layoutname
print $query->redirect("label-home.pl");
exit;
@@ -100,7 +102,7 @@ elsif ( $op eq 'add_layout' ) {
$issn, $itemtype, $bcn, $dcn,
$classif, $subclass, $itemcallnumber, $author,
$tmpl_id, $printingtype, $guidebox, $startlabel, $layoutname,
- $layout_id
+ $formatstring , $layout_id
);
### $layoutname
print $query->redirect("label-home.pl");
@@ -184,6 +186,9 @@ $template->param(
batch_count => scalar @resultsloop,
active_layout_name => $active_layout_name,
active_template_name => $active_template_name,
+ outputformat => ( $active_layout->{'printingtype'} eq 'CSV' ) ? 'csv' : 'pdf' ,
+ layout_tx => ( $active_layout->{'formatstring'}) ? 0 : 1 ,
+ layout_string => ( $active_layout->{'formatstring'}) ? 1 : 0 ,
resultsloop => \@resultsloop,
batches => \@batches,
diff --git a/labels/label-print-csv.pl b/labels/label-print-csv.pl
new file mode 100755
index 0000000..36c9903
--- /dev/null
+++ b/labels/label-print-csv.pl
@@ -0,0 +1,57 @@
+#!/usr/bin/perl
+
+use strict;
+use CGI;
+use C4::Labels;
+use C4::Auth;
+use C4::Output;
+use C4::Context;
+use C4::Biblio;
+use Text::CSV_XS;
+
+my $DEBUG = 0;
+my $DEBUG_LPT = 0;
+
+my $htdocs_path = C4::Context->config('intrahtdocs');
+my $cgi = new CGI;
+
+
+# get the printing settings
+my $template = GetActiveLabelTemplate();
+my $conf_data = get_label_options();
+
+my $batch_id = $cgi->param('batch_id');
+my $exportname = 'koha_label_' . $batch_id . '.csv';
+
+print $cgi->header(-type => 'application/vnd.sun.xml.calc',
+ -encoding => 'utf-8',
+ -attachment => $exportname,
+ -filename => $exportname );
+
+my $batch_type = $conf_data->{'type'};
+my $barcodetype = $conf_data->{'barcodetype'};
+my $printingtype = $conf_data->{'printingtype'};
+
+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 = ($conf_data->{'formatstring'}) ?
+ map { C4::Labels::GetBarcodeData($_->{'code'},$item,$record) } @str_fields
+ : map { $_->{'code'} } @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 ?
+
+
+
--
1.5.2.1
More information about the Koha-patches
mailing list