FFZG #390 - Signatura zatvorenog spremišta ffzg-390-signatura-zatvorenog-spremista+tt
authorDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 1 Jan 2012 12:18:50 +0000 (13:18 +0100)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Mon, 2 Jan 2012 14:01:01 +0000 (15:01 +0100)
Implementirati višestruke nizove signatura prema formatu

Ovo je port na Template Toolkit za Kohu 3.4 i novije

cataloguing/additem.pl
cataloguing/value_builder/ffzg-signatura-zatvoreno-spremiste.pl [new file with mode: 0755]
ffzg/ffzg-390-signatura-zatvorenog-spremista/ffzg_zs_seq.sql [new file with mode: 0644]
koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/value_builder/ffzg-signatura-zatvoreno-spremiste.tt [new file with mode: 0644]

index a734d0f..cee96cb 100755 (executable)
@@ -306,6 +306,29 @@ my ($template, $loggedinuser, $cookie)
                  });
 
 
+# XXX dpavlin -- signatura zatvorenog spremista
+sub ffzg_zs_callnumber {
+       my ($record) = @_;
+       my ($tagfield,$tagsubfield) = &GetMarcFromKohaField("items.itemcallnumber",$frameworkcode);
+       if ($record->field($tagfield)->subfield($tagsubfield) =~ m/^ZS#(\w\w)\s(\d+)-(\d+)$/ ) {
+               my ( $prefix, $min, $max ) = ( $1, $2, $3 );
+               my $sth = $dbh->prepare(qq{ select ffzg_zs_nextval(?) });
+               $sth->execute( $prefix );
+               my ($itemcallnumber) = $sth->fetchrow;
+
+warn "ZS: $prefix $min - $max => $itemcallnumber\n";
+
+               if ( $itemcallnumber < $min || $itemcallnumber > $max ) {
+                       die "can't find next itemcallnumber for $prefix $min-$max, got: $itemcallnumber";
+               }
+               my $fieldItem = $record->field($tagfield);
+               $fieldItem->update($tagsubfield => $prefix . ' ' . $itemcallnumber);
+       }
+       return $record;
+}
+
+
+
 my $today_iso = C4::Dates->today('iso');
 $template->param(today_iso => $today_iso);
 
@@ -338,6 +361,8 @@ if ($op eq "additem") {
         $record = _increment_barcode($record, $frameworkcode);
     }
 
+       $record = ffzg_zs_callnumber( $record ); # XXX dpavlin
+
     my $addedolditem = TransformMarcToKoha($dbh,$record);
 
     # If we have to add or add & duplicate, we add the item
@@ -511,6 +536,9 @@ if ($op eq "additem") {
     # MARC::Record builded => now, record in DB
     # warn "R: ".$record->as_formatted;
     # check that the barcode don't exist already
+
+       $itemtosave = ffzg_zs_callnumber( $itemtosave ); # XXX dpavlin
+
     my $addedolditem = TransformMarcToKoha($dbh,$itemtosave);
     my $exist_itemnumber = get_item_from_barcode($addedolditem->{'barcode'});
     if ($exist_itemnumber && $exist_itemnumber != $itemnumber) {
diff --git a/cataloguing/value_builder/ffzg-signatura-zatvoreno-spremiste.pl b/cataloguing/value_builder/ffzg-signatura-zatvoreno-spremiste.pl
new file mode 100755 (executable)
index 0000000..14512f3
--- /dev/null
@@ -0,0 +1,126 @@
+#!/usr/bin/perl
+
+use strict;
+use C4::Auth;
+use CGI;
+use C4::Context;
+
+use C4::Search;
+use C4::Output;
+
+=head1 NAME
+
+plugin ffzg-signatura-zatvoreno-spremiste
+
+=head1 SYNOPSIS
+
+generate signatura
+
+=head1 DESCRIPTION
+
+=head1 FUNCTIONS
+
+=over 2
+
+=cut
+
+sub plugin_parameters {
+my ($dbh,$record,$tagslib,$i,$tabloop) = @_;
+return "";
+}
+
+sub plugin_javascript {
+       my ($dbh,$record,$tagslib,$field_number,$tabloop) = @_;
+       my $function_name= $field_number;
+       my $res="
+<script type=\"text/javascript\">
+//<![CDATA[
+
+function Focus$function_name(subfield_managed) {
+
+/*
+       if ( document.getElementById(\"$field_number\").value ) {
+       }
+       else {
+               document.getElementById(\"$field_number\").value='default value for onclick';
+       }
+*/
+    return 1;
+}
+
+function Blur$function_name(subfield_managed) {
+       return 1;
+}
+
+function Clic$function_name(i) {
+       defaultvalue=document.getElementById(\"$field_number\").value;
+       newin=window.open(\"../cataloguing/plugin_launcher.pl?plugin_name=ffzg-signatura-zatvoreno-spremiste.pl&index=$field_number&result=\"+defaultvalue,\"Odabir signature u zatvorenom spremištu\",'width=800,height=600,toolbar=false,scrollbars=yes');
+
+}
+//]]>
+</script>
+";
+
+       return ($function_name,$res);
+}
+
+
+my $signature = [
+       "knjige (formalno signiranje)" => [
+               [ "PA 100001-999999", "do 18 cm" ],
+               [ "PB 100001-999999", "18,1-25 cm" ],
+               [ "PC 100001-999999", "25,1-35 cm" ],
+               [ "PD 100001-999999", "iznad 35 cm" ],
+               [ "PE 100001-999999", "poprečni format" ],
+       ],
+       "posebne zbirke" => [
+               [ "DD 100001-999999", "Doktorske disertacije" ],
+               [ "MR 100001-999999", "Magistarski i specijalistički radovi" ],
+               [ "DR 100001-999999", "Diplomski i završni radovi" ],
+               [ "FO 100001-999999", "Fotokopije" ],
+               [ "SE 100001-999999", "Separati" ],
+       ],
+];
+
+
+sub plugin {
+       my ($input) = @_;
+       my $index= $input->param('index');
+       my $index2= $input->param('index2');
+       $index2=-1 unless($index2);
+       my $result= $input->param('result');
+
+
+       my @optgroup;
+
+       while( my $optgroup = shift @$signature ) {
+
+               my $g = { label => $optgroup };
+
+               my $o = shift @$signature;
+               foreach my $option ( @$o ) {
+
+                       my ( $template, $display ) = @$option;
+                       push @{ $g->{option} }, { display => $display, value => $template };
+               }
+               push @optgroup, $g;
+       }
+
+       my ($template, $loggedinuser, $cookie)
+       = get_template_and_user({template_name => "cataloguing/value_builder/ffzg-signatura-zatvoreno-spremiste.tmpl",
+                                       query => $input,
+                                       type => "intranet",
+                                       authnotrequired => 0,
+                                       flagsrequired => {editcatalogue => 1},
+                                       debug => 1,
+                                       });
+       $template->param(
+               index => $index,
+               index2 => $index2,
+               "f1_$result" => "f1_".$result,
+               optgroup => [ @optgroup ],
+       );
+       output_html_with_http_headers $input, $cookie, $template->output;
+}
+
+1;
diff --git a/ffzg/ffzg-390-signatura-zatvorenog-spremista/ffzg_zs_seq.sql b/ffzg/ffzg-390-signatura-zatvorenog-spremista/ffzg_zs_seq.sql
new file mode 100644 (file)
index 0000000..2a225ee
--- /dev/null
@@ -0,0 +1,41 @@
+
+drop table if exists ffzg_zs_seq;
+
+create table ffzg_zs_seq (
+       name varchar(2) unique not null,
+       current integer unsigned not null
+);
+
+insert into ffzg_zs_seq values ('PA',100000);
+insert into ffzg_zs_seq values ('PB',100000);
+insert into ffzg_zs_seq values ('PC',100000);
+insert into ffzg_zs_seq values ('PD',100000);
+insert into ffzg_zs_seq values ('PE',100000);
+insert into ffzg_zs_seq values ('DD',100000);
+insert into ffzg_zs_seq values ('MR',100000);
+insert into ffzg_zs_seq values ('DR',100000);
+insert into ffzg_zs_seq values ('FO',100000);
+insert into ffzg_zs_seq values ('SE',100000);
+
+update ffzg_zs_seq
+set current=(
+       select
+               max(substring_index(itemcallnumber,' ',-1))
+       from items
+       where substring_index(itemcallnumber,' ',1) = ffzg_zs_seq.name
+);
+
+update ffzg_zs_seq set current = 100000 where current < 100000 ;
+
+select * from ffzg_zs_seq ;
+
+delimiter |
+
+create function ffzg_zs_nextval( seq_name varchar(2) )
+returns integer unsigned
+begin
+       update ffzg_zs_seq set current = ( @next_val := current + 1 ) where name = seq_name ;
+        return @next_val;
+end|
+
+delimiter ;
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/value_builder/ffzg-signatura-zatvoreno-spremiste.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/value_builder/ffzg-signatura-zatvoreno-spremiste.tt
new file mode 100644 (file)
index 0000000..aa9b502
--- /dev/null
@@ -0,0 +1,56 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD Xhtml 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>Signature za zatvoreno spremište</title>
+<style type=text/css>
+
+label {
+       font-family: monospace;
+       font-weight: bold;
+}
+
+</style>
+<script type="text/javascript" src="[% themelang %]/lib/jquery/jquery.js"></script>
+</head>
+<body>
+<h1>Signature za zatvoreno spremište</h1>
+<form name="f_pop" onSubmit="return report()">
+<input type="hidden" name="plugin_name" value="ffzg-signatura-zatvoreno-spremiste.pl" />
+<table>
+
+       [% FOREACH group IN optgroup %]
+               <tr><th colspan=2>[% group.label %]</th></tr>
+
+               [% FOREACH opt IN group.option %]
+                       <tr><td>
+                               <input type=radio name=f1 value="ZS#[% opt.value %]" id="r[% opt.value %]">
+                               <label for="r[% opt.value %]">[% opt.value %]</label>
+                       </td><td>[% opt.display %]</td><tr>
+               [% END %]
+       [% END %]
+
+       <tr><th colspan="2">
+               <input type="submit" value="OK" />
+               <input type="button" value="Cancel" onClick="self.close()">
+       </th></tr>
+</table>
+</form>
+<script>
+
+function report() {
+
+       var doc = opener.document; 
+       var field = doc.getElementById("[% index %]");
+       field.value = $('input:radio:checked').val();   
+       field.readOnly = true;
+       self.close();
+       return false;
+
+}
+
+</script>
+</body>
+</html>