bugfix : don't show previously entered values again after saving an item
[koha_fer] / cataloguing / addbiblio.pl
index c6a34f3..394290b 100755 (executable)
@@ -31,6 +31,7 @@ use C4::Log;
 use C4::Koha;    # XXX subfield_is_koha_internal_p
 use C4::Branch;    # XXX subfield_is_koha_internal_p
 use C4::ClassSource;
+use C4::ImportBatch;
 
 use Date::Calc qw(Today);
 use MARC::File::USMARC;
@@ -44,9 +45,9 @@ our($tagslib,$authorised_values_sth,$is_a_modif,$usedTagsLib,$mandatory_z3950);
 
 =item MARCfindbreeding
 
-    $record = MARCfindbreeding($dbh, $breedingid);
+    $record = MARCfindbreeding($breedingid);
 
-Look up the breeding farm with database handle $dbh, for the
+Look up the import record repository for the record with
 record with id $breedingid.  If found, returns the decoded
 MARC::Record; otherwise, -1 is returned (FIXME).
 Returns as second parameter the character encoding.
@@ -54,11 +55,8 @@ Returns as second parameter the character encoding.
 =cut
 
 sub MARCfindbreeding {
-    my ( $dbh, $id ) = @_;
-    my $sth =
-      $dbh->prepare("select file,marc,encoding from marc_breeding where id=?");
-    $sth->execute($id);
-    my ( $file, $marc, $encoding ) = $sth->fetchrow;
+    my ( $id ) = @_;
+    my ($marc, $encoding) = GetImportRecordMarc($id);
     # remove the - in isbn, koha store isbn without any -
     if ($marc) {
         my $record = MARC::Record->new_from_usmarc($marc);
@@ -382,8 +380,7 @@ sub create_input {
                             size=\"67\"
                             maxlength=\"255\" 
                             onblur=\"Blur$function_name($index_tag); \" \/>
-                            <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>
+                            <a href=\"#\" class=\"buttonDot\" onclick=\"Clic$function_name('$subfield_data{id}'); return false;\" title=\"Tag Editor\">...</a>
                     $javascript";
         } else {
             warn "Plugin Failed: $plugin";
@@ -665,30 +662,37 @@ AND (authtypecode IS NOT NULL AND authtypecode<>\"\")|);
   $query->execute($frameworkcode);
   my ($countcreated,$countlinked);
   while (my $data=$query->fetchrow_hashref){
-    if ($record->field($data->{tagfield})){
-      next if ($record->subfield($data->{tagfield},'3')||$record->subfield($data->{tagfield},'9'));
+    foreach my $field ($record->field($data->{tagfield})){
+      next if ($field->subfield('3')||$field->subfield('9'));
       # No authorities id in the tag.
       # Search if there is any authorities to link to.
       my $query='at='.$data->{authtypecode}.' ';
-      map {$query.= " and he=".$_->[1] if ($_->[0]=~/[A-z]/)}  $record->field($data->{tagfield})->subfields();
+      map {$query.= " and he,ext=".$_->[1] if ($_->[0]=~/[A-z]/)}  $field->subfields();
+      warn $query;   
       my ($error,$results)=SimpleSearch($query,"authorityserver");
-    # there is at least 1 result => return the 1st one
-      if (@$results>1) {
+    # there is only 1 result 
+      if (scalar(@$results)==1) {
         my $marcrecord = MARC::File::USMARC::decode($results->[0]);
-        $record->field($data->{tagfield})->add_subfields('9'=>$marcrecord->field('001')->data);
+        $field->add_subfields('9'=>$marcrecord->field('001')->data);
+        $countlinked++;
+      }elsif (scalar(@$results)>1) {
+   #More than One result 
+   #This can comes out of a lack of a subfield.
+#         my $marcrecord = MARC::File::USMARC::decode($results->[0]);
+#         $record->field($data->{tagfield})->add_subfields('9'=>$marcrecord->field('001')->data);
   $countlinked++;
       } else {
   #There are no results, build authority record, add it to Authorities, get authid and add it to 9
-  ###NOTICE : This is only valid if a subfield is linked to one and only one authtypecode
-     
-        my $authtypedata=GetAuthType($data->{authtypecode});
-        my $marcrecordauth=MARC::Record->new();
-        my $field=MARC::Field->new($authtypedata->{auth_tag_to_report},'','',"a"=>"".$record->subfield($data->{tagfield},'a'));
-        map { $field->add_subfields($_->[0]=>$_->[1]) if ($_->[0]=~/[A-z]/ && $_->[0] ne "a" )}  $record->field($data->{tagfield})->subfields();
-        $marcrecordauth->insert_fields_ordered($field);
-        my $authid=AddAuthority($marcrecordauth,'',$data->{authtypecode});
-        $countcreated++;
-        $record->field($data->{tagfield})->add_subfields('9'=>$authid);
+  ###NOTICE : This is only valid if a subfield is linked to one and only one authtypecode     
+  ###NOTICE : This can be a problem. We should also look into other types and rejected forms.
+         my $authtypedata=GetAuthType($data->{authtypecode});
+         my $marcrecordauth=MARC::Record->new();
+         my $authfield=MARC::Field->new($authtypedata->{auth_tag_to_report},'','',"a"=>"".$field->subfield('a'));
+         map { $authfield->add_subfields($_->[0]=>$_->[1]) if ($_->[0]=~/[A-z]/ && $_->[0] ne "a" )}  $field->subfields();
+         $marcrecordauth->insert_fields_ordered($authfield);
+         my $authid=AddAuthority($marcrecordauth,'',$data->{authtypecode});
+         $countcreated++;
+         $field->add_subfields('9'=>$authid);
       }
     }  
   }
@@ -769,7 +773,7 @@ if (($biblionumber) && !($breedingid)){
        $record = GetMarcBiblio($biblionumber);
 }
 if ($breedingid) {
-    ( $record, $encoding ) = MARCfindbreeding( $dbh, $breedingid ) ;
+    ( $record, $encoding ) = MARCfindbreeding( $breedingid ) ;
 }
 
 $is_a_modif = 0;