adding encoding management to z3950
[koha_fer] / cataloguing / additem.pl
index 75ca348..b806a0a 100755 (executable)
@@ -23,9 +23,12 @@ use strict;
 use C4::Auth;
 use C4::Output;
 use C4::Biblio;
+use C4::Items;
 use C4::Context;
 use C4::Koha; # XXX subfield_is_koha_internal_p
 use C4::Branch; # XXX subfield_is_koha_internal_p
+use C4::ClassSource;
+
 use Date::Calc qw(Today);
 
 use MARC::File::XML;
@@ -113,7 +116,7 @@ if ($op eq "additem") {
     my $exist_itemnumber = get_item_from_barcode($addedolditem->{'barcode'});
     push @errors,"barcode_not_unique" if($exist_itemnumber);
     # if barcode exists, don't create, but report The problem.
-    my ($oldbiblionumber,$oldbibnum,$oldbibitemnum) = AddItem($record,$biblionumber) unless ($exist_itemnumber);
+    my ($oldbiblionumber,$oldbibnum,$oldbibitemnum) = AddItemFromMarc($record,$biblionumber) unless ($exist_itemnumber);
     if ($exist_itemnumber) {
         $nextop = "additem";
         $itemrecord = $record;
@@ -124,7 +127,7 @@ if ($op eq "additem") {
 } elsif ($op eq "edititem") {
 #-------------------------------------------------------------------------------
 # retrieve item if exist => then, it's a modif
-    $itemrecord = GetMarcItem($biblionumber,$itemnumber);
+    $itemrecord = C4::Items::GetMarcItem($biblionumber,$itemnumber);
     $nextop="saveitem";
 #-------------------------------------------------------------------------------
 } elsif ($op eq "delitem") {
@@ -133,13 +136,23 @@ if ($op eq "additem") {
     my $sth=$dbh->prepare("select * from issues i where i.returndate is null and i.itemnumber=?");
     $sth->execute($itemnumber);
     my $onloan=$sth->fetchrow;
+       $sth->finish();
     push @errors,"book_on_loan" if ($onloan); ##error book_on_loan added to template as well
     if ($onloan){
-    $nextop="additem";
+               $nextop="additem";
     } else {
-        &DelItem($dbh,$biblionumber,$itemnumber);
-        print $input->redirect("additem.pl?biblionumber=$biblionumber&frameworkcode=$frameworkcode");
-        #$nextop="additem";
+               # check it doesnt have a waiting reserve
+               $sth=$dbh->prepare("SELECT * FROM reserves WHERE found = 'w' AND cancellationdate IS NULL AND itemnumber = ?");
+               $sth->execute($itemnumber);
+               my $reserve=$sth->fetchrow;
+               if ($reserve){
+                       push @errors,"book_reserved";
+                       $nextop="additem";
+               }
+               else {
+                       &DelItem($dbh,$biblionumber,$itemnumber);
+                       print $input->redirect("additem.pl?biblionumber=$biblionumber&frameworkcode=$frameworkcode");
+               }
     }
 #-------------------------------------------------------------------------------
 } elsif ($op eq "saveitem") {
@@ -153,16 +166,16 @@ if ($op eq "additem") {
     my @indicator = $input->param('indicator');
     #    my $itemnumber = $input->param('itemnumber');
     my $xml = TransformHtmlToXml(\@tags,\@subfields,\@values,\@indicator,\@ind_tag,'ITEM');
-    $itemrecord=MARC::Record::new_from_xml($xml, 'UTF-8');
+    my $itemtosave=MARC::Record::new_from_xml($xml, 'UTF-8');
     # MARC::Record builded => now, record in DB
     # warn "R: ".$record->as_formatted;
     # check that the barcode don't exist already
-    my $addedolditem = TransformMarcToKoha($dbh,$itemrecord);
+    my $addedolditem = TransformMarcToKoha($dbh,$itemtosave);
     my $exist_itemnumber = get_item_from_barcode($addedolditem->{'barcode'});
     if ($exist_itemnumber && $exist_itemnumber != $itemnumber) {
         push @errors,"barcode_not_unique";
     } else {
-        my ($oldbiblionumber,$oldbibnum,$oldbibitemnum) = ModItem($itemrecord,$biblionumber,$itemnumber,0);
+        my ($oldbiblionumber,$oldbibnum,$oldbibitemnum) = ModItemFromMarc($itemtosave,$biblionumber,$itemnumber);
     $itemnumber="";
     }
     $nextop="additem";
@@ -339,6 +352,26 @@ foreach my $tag (sort keys %{$tagslib}) {
           }
           $value = $itemtype unless ($value);
   
+          #---- class_sources
+      }
+      elsif ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "cn_source" ) {
+          push @authorised_values, ""
+            unless ( $tagslib->{$tag}->{$subfield}->{mandatory} );
+            
+          my $class_sources = GetClassSources();
+
+          my $default_source = C4::Context->preference("DefaultClassificationSource");
+          
+          foreach my $class_source (sort keys %$class_sources) {
+              next unless $class_sources->{$class_source}->{'used'} or
+                          ($value and $class_source eq $value) or
+                          ($class_source eq $default_source);
+              push @authorised_values, $class_source;
+              $authorised_lib{$class_source} = $class_sources->{$class_source}->{'description'};
+              $value = $class_source unless ($value);
+              $value = $default_source unless ($value);
+          }
+  
           #---- "true" authorised value
       }
       else {
@@ -408,7 +441,7 @@ foreach my $tag (sort keys %{$tagslib}) {
                             size=\"67\"
                             maxlength=\"255\" 
                             onblur=\"Blur$function_name(".$subfield_data{random}."); \" \/>
-                            <a href=\"#\" class=\"buttonDot\" onclick=\"Clic$function_name('$subfield_data{id}'; return false;)\" title=\"Tag Editor\">...</a>
+                            <a href=\"#\" class=\"buttonDot\" onclick=\"Clic$function_name('$subfield_data{id}'); return false;\" title=\"Tag Editor\">...</a>
                     $javascript";
         } else {
             warn "Plugin Failed: $plugin";