Bug 10855: New fields on adding/updating a subscription
authorJonathan Druart <jonathan.druart@biblibre.com>
Thu, 29 Aug 2013 11:37:40 +0000 (13:37 +0200)
committerTomas Cohen Arazi <tomascohen@theke.io>
Fri, 2 Oct 2015 18:10:30 +0000 (15:10 -0300)
This patch adds the ability to add values for additional fields when
adding/updating a subscription.

Test plan (test the following on adding a new subscription and on
editing an existent one):
- add/edit a subscription.
- verify all additional fields appears into the "Additional fields"
  block.
- fill a value for af1 and af3.
- fill others values if you are adding a new subscription.
- save.
- verify values appears on the detail of the subscription page.
- verify the af2 field is automatically filled with the specified
  marc field of the notice.

Signed-off-by: Brendan Gallagher <brendan@bywatersolutions.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
C4/Serials.pm
koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-add.tt
koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-detail.tt
serials/subscription-add.pl
serials/subscription-detail.pl

index 5e52bdb..03362fc 100644 (file)
@@ -31,6 +31,7 @@ use C4::Log;    # logaction
 use C4::Debug;
 use C4::Serials::Frequency;
 use C4::Serials::Numberpattern;
+use Koha::AdditionalField;
 
 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
 
@@ -316,7 +317,16 @@ sub GetSubscription {
     my $sth = $dbh->prepare($query);
     $sth->execute($subscriptionid);
     my $subscription = $sth->fetchrow_hashref;
+
     $subscription->{cannotedit} = not can_edit_subscription( $subscription );
+
+    # Add additional fields to the subscription into a new key "additional_fields"
+    my $additional_field_values = Koha::AdditionalField->fetch_all_values({
+            tablename => 'subscription',
+            record_id => $subscriptionid,
+    });
+    $subscription->{additional_fields} = $additional_field_values->{$subscriptionid};
+
     return $subscription;
 }
 
index 12fc1f2..926c5b1 100644 (file)
@@ -851,6 +851,40 @@ $(document).ready(function() {
                                     </div>
                                 </ol>
                             </fieldset>
+
+                            [% IF additional_fields_for_subscription %]
+                              <div id="subscription_additional_fields">
+                                <fieldset class="rows">
+                                  <legend>Additional fields</legend>
+                                  <ol>
+                                    [% FOR field IN additional_fields_for_subscription %]
+                                      <li>
+                                        <label for="additional_fields_[% field.name %]"> [% field.name %]: </label>
+                                        [% IF field.authorised_value_choices %]
+                                          <select name="additional_fields_[% field.name %]">
+                                            [% FOREACH av IN field.authorised_value_choices %]
+                                              [% IF av.authorised_value == additional_fields.${field.name} %]
+                                                <option value="[% av.authorised_value %]" selected="selected">[% av.lib %]</option>
+                                              [% ELSE %]
+                                                <option value="[% av.authorised_value %]">[% av.lib %]</option>
+                                              [% END %]
+                                            [% END %]
+                                          </select> (Authorised values for [% field.authorised_value_category %])
+                                        [% ELSE %]
+                                          [% IF field.marcfield %]
+                                            <input type="text" value="[% additional_fields.${field.name} %]" name="additional_fields_[% field.name %]" readonly="readonly" />
+                                            This value will be filled with the [% field.marcfield %] subfield of the selected biblio.
+                                          [% ELSE %]
+                                            <input type="text" value="[% additional_fields.${field.name} %]" name="additional_fields_[% field.name %]" />
+                                          [% END %]
+                                        [% END %]
+                                      </li>
+                                    [% END %]
+                                  </ol>
+                                </fieldset>
+                              </div>
+                            [% END %]
+
                             <fieldset class="action">
                                 <input type="button" value="<< Previous" onclick="show_page_1();" style="float:left;"/>
                                 <input id="testpatternbutton" type="button" value="Test prediction pattern" onclick="testPredictionPattern();" />
index b684e5e..9222779 100644 (file)
@@ -1,4 +1,5 @@
 [% USE Branches %]
+[% USE KohaAuthorisedValues %]
 [% INCLUDE 'doc-head-open.inc' %]
 <title>Koha &rsaquo; Serials &rsaquo; Details for subscription #[% subscriptionid %]</title>
 [% INCLUDE 'doc-head-close.inc' %]
@@ -122,7 +123,29 @@ $(document).ready(function() {
      </ol>
      </div>
      </div>
-</div>
+     </div>
+
+     [% IF additional_fields_for_subscription %]
+    <div class="yui-g">
+      <div class="yui-u first">
+        <div class="rows">
+          <legend>Additional fields:</legend>
+          <ol>
+            [% FOR field IN additional_fields_for_subscription %]
+              <li>
+                <span class="label">[% field.name %]:</span>
+                [% IF field.authorised_value_category %]
+                  [% KohaAuthorisedValues.GetByCode( field.authorised_value_category, additional_fields.${field.name} ) %]
+                [% ELSE %]
+                  [% additional_fields.${field.name} %]
+                [% END %]
+              </li>
+            [% END %]
+          </ol>
+        </div>
+      </div>
+      </div>
+     [% END %]
 </div>
 
     <div id="subscription_planning">
index ce6f91d..fa71236 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( { table => '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,16 @@ sub redirect_add_subscription {
         $skip_serialseq
     );
 
+    my $additional_fields = Koha::AdditionalField->all( { table => 'subscription' } );
+    my @additional_field_values;
+    for my $field ( @$additional_fields ) {
+        my $af = Koha::AdditionalField->new({ id => $field->{id} });
+        $af->{values} = {
+            $subscriptionid => $query->param('additional_fields_' . $field->{name})
+        };
+        $af->insert_values;
+    }
+
     print $query->redirect("/cgi-bin/koha/serials/subscription-detail.pl?subscriptionid=$subscriptionid");
     return;
 }
@@ -408,6 +429,26 @@ sub redirect_mod_subscription {
         $skip_serialseq
     );
 
+    my $additional_fields = Koha::AdditionalField->all( { table => 'subscription' } );
+    my @additional_field_values;
+    for my $field ( @$additional_fields ) {
+        my $af = Koha::AdditionalField->new({ id => $field->{id} })->fetch;
+        if ( $af->{marcfield} ) {
+            my $record = GetMarcBiblio( $biblionumber, 1 );
+            my ( $field, $subfield ) = split /\$/, $af->{marcfield};
+            next unless $field and $subfield;
+            my $value = $record->subfield( $field, $subfield );
+            $af->{values} = {
+                $subscriptionid => $value
+            };
+        } else {
+            $af->{values} = {
+                $subscriptionid => $query->param('additional_fields_' . $field->{name})
+            };
+        }
+        $af->insert_values;
+    }
+
     print $query->redirect("/cgi-bin/koha/serials/subscription-detail.pl?subscriptionid=$subscriptionid");
     return;
 }
index 1453306..45ce5b0 100755 (executable)
@@ -139,6 +139,14 @@ if ( defined $subscriptionid ) {
     }
 }
 
+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 );
+
 $template->param(
     subscriptionid => $subscriptionid,
     serialslist => \@serialslist,