(MT 3267) Add Homebranch and Holdingbranch search criterion on circulation stat.
[koha.git] / C4 / Record.pm
index 65f3f7a..25df9ad 100644 (file)
@@ -328,12 +328,12 @@ sub marc2endnote {
        
 }
 
-=head2 marcrecords2csv - Convert several records from UNIMARC to CSV
+=head2 marc2csv - Convert several records from UNIMARC to CSV
 Pre and postprocessing can be done through a YAML file
 
 =over 4
 
-my ($csv) = marcrecords2csv($biblios, $csvprofileid);
+my ($csv) = marc2csv($biblios, $csvprofileid);
 
 Returns a CSV scalar
 
@@ -360,7 +360,6 @@ sub marc2csv {
         ($preprocess,$postprocess, $fieldprocessing) = YAML::LoadFile($configfile);
     }
 
-    warn $fieldprocessing;
     # Preprocessing
     eval $preprocess if ($preprocess);
 
@@ -376,11 +375,11 @@ sub marc2csv {
     return $output;
 }
 
-=head2 marc2csv - Convert a single record from UNIMARC to CSV
+=head2 marcrecord2csv - Convert a single record from UNIMARC to CSV
 
 =over 4
 
-my ($csv) = marc2csv($biblio, $csvprofileid, $header);
+my ($csv) = marcrecord2csv($biblio, $csvprofileid, $header);
 
 Returns a CSV scalar
 
@@ -416,7 +415,6 @@ sub marcrecord2csv {
 
     # Getting output encoding
     my $encoding          = $profile->{encoding} || 'utf8';
-
     # Getting separators
     my $csvseparator      = $profile->{csv_separator}      || ',';
     my $fieldseparator    = $profile->{field_separator}    || '#';
@@ -427,7 +425,8 @@ sub marcrecord2csv {
     if ($fieldseparator eq '\t') { $fieldseparator = "\t" }
     if ($subfieldseparator eq '\t') { $subfieldseparator = "\t" }
 
-    $csv->encoding_out($encoding) if ($encoding ne 'utf8');
+
+    $csv = $csv->encoding_out($encoding) ;
     $csv->sep_char($csvseparator);
 
     # Getting the marcfields
@@ -486,6 +485,10 @@ sub marcrecord2csv {
     my @fieldstab;
     foreach (@marcfields) {
        my $marcfield = $_->{field};
+
+       # Remove any blank char that might have unintentionally insered into the tag name
+       $marcfield =~ s/\s+//g; 
+
        # If it is a subfield
        if (index($marcfield, '$') > 0) {
            my ($fieldtag, $subfieldtag) = split('\$', $marcfield);
@@ -514,8 +517,19 @@ sub marcrecord2csv {
            foreach (@fields) {
                my $value;
 
-               # Getting authorised value
-               $value = defined $authvalues->{$_->as_string} ? $authvalues->{$_->as_string} : $_->as_string;
+               # If it is a control field
+               if ($_->is_control_field) {
+                   $value = defined $authvalues->{$_->as_string} ? $authvalues->{$_->as_string} : $_->as_string;
+               } else {
+
+                   # If it is a field, we gather all subfields, joined by the subfield separator
+                   my @subvaluesarray;
+                   my @subfields = $_->subfields;
+                   foreach my $subfield (@subfields) {
+                       push (@subvaluesarray, defined $authvalues->{$subfield->[1]} ? $authvalues->{$subfield->[1]} : $subfield->[1]);
+                   }
+                   $value = join ($subfieldseparator, @subvaluesarray);
+               }
 
                # Field processing
                eval $fieldprocessing if ($fieldprocessing);
@@ -528,7 +542,7 @@ sub marcrecord2csv {
 
     $csv->combine(@fieldstab);
     $output .= $csv->string() . "\n";
-   
+
     return $output;
 
 }