Bug 10855: Additional marc fields are not inserted
[koha.git] / serials / subscription-add.pl
index ce6f91d..fedb7da 100755 (executable)
@@ -32,6 +32,7 @@ use C4::Serials;
 use C4::Serials::Frequency;
 use C4::Serials::Numberpattern;
 use C4::Letters;
+use Koha::AdditionalField;
 use Carp;
 
 #use Smart::Comments;
@@ -151,6 +152,16 @@ my $locations_loop = GetAuthorisedValues("LOC",$subs->{'location'});
 $template->param(branchloop => $branchloop,
     locations_loop=>$locations_loop,
 );
+
+
+my $additional_fields = Koha::AdditionalField->all( { tablename => 'subscription' } );
+for my $field ( @$additional_fields ) {
+    if ( $field->{authorised_value_category} ) {
+        $field->{authorised_value_choices} = GetAuthorisedValues( $field->{authorised_value_category} );
+    }
+}
+$template->param( additional_fields_for_subscription => $additional_fields );
+
 # prepare template variables common to all $op conditions:
 if ($op!~/^mod/) {
     my $letters = get_letter_loop();
@@ -333,6 +344,9 @@ sub redirect_add_subscription {
         $skip_serialseq
     );
 
+    my $additional_fields = Koha::AdditionalField->all( { tablename => 'subscription' } );
+    insert_additional_fields( $additional_fields, $biblionumber, $subscriptionid );
+
     print $query->redirect("/cgi-bin/koha/serials/subscription-detail.pl?subscriptionid=$subscriptionid");
     return;
 }
@@ -408,6 +422,33 @@ sub redirect_mod_subscription {
         $skip_serialseq
     );
 
+    my $additional_fields = Koha::AdditionalField->all( { tablename => 'subscription' } );
+    insert_additional_fields( $additional_fields, $biblionumber, $subscriptionid );
+
     print $query->redirect("/cgi-bin/koha/serials/subscription-detail.pl?subscriptionid=$subscriptionid");
     return;
 }
+
+sub insert_additional_fields {
+    my ( $additional_fields, $biblionumber, $subscriptionid ) = @_;
+    my @additional_field_values;
+    my $record = GetMarcBiblio( $biblionumber, 1 );
+    for my $field ( @$additional_fields ) {
+        my $af = Koha::AdditionalField->new({ id => $field->{id} })->fetch;
+        if ( $af->{marcfield} ) {
+            my ( $field, $subfield ) = split /\$/, $af->{marcfield};
+            $af->{values} = undef;
+            if ( $field and $subfield ) {
+                my $value = $record->subfield( $field, $subfield );
+                $af->{values} = {
+                    $subscriptionid => $value
+                };
+            }
+        } else {
+            $af->{values} = {
+                $subscriptionid => $query->param('additional_field_' . $field->{id})
+            } if defined $query->param('additional_field_' . $field->{id});
+        }
+        $af->insert_values;
+    }
+}