From f1a6a32b7c4a726f572009b9c90a630a19096861 Mon Sep 17 00:00:00 2001 From: Jesse Weaver Date: Wed, 10 Feb 2016 12:29:06 -0700 Subject: [PATCH] Bug 15774: Add additional fields to order baskets This also moves the admin page for additional fields for all tables to a single common screen, and factors out display/input parsing logic. Test plan: 1. Create an additional field for a subscription (under Serials -> Add subscription fields). 2. Apply patch. 3. Visit Additional fields under administration, and verify that the field created above still shows under the list for the subscription table. 4. Create at least four fields for aqbasket for each combination of searchable/not-searchable and with/without an authorized value. 5. Create an order basket, and verify that all fields are visible and correctly save. 6. Edit the basket, verifying that changes to these additional fields are saved. 7. Add an order to the basket (contents are irrelevant). 8. Go to advanced search within acquisitions. 9. Verify that only the searchable fields show in the form, and that their contents may be searched. --- C4/Acquisition.pm | 12 ++ Koha/AdditionalField.pm | 98 +++++++++++ acqui/basket.pl | 7 + acqui/basketheader.pl | 16 ++ acqui/histsearch.pl | 9 + .../add_fields.pl => admin/additional-fields.pl | 14 +- .../prog/en/includes/additional-fields-display.inc | 11 ++ .../prog/en/includes/additional-fields-entry.inc | 33 ++++ .../intranet-tmpl/prog/en/includes/admin-menu.inc | 1 + .../prog/en/includes/serials-menu.inc | 1 - .../intranet-tmpl/prog/en/modules/acqui/basket.tt | 1 + .../prog/en/modules/acqui/basketheader.tt | 5 + .../prog/en/modules/acqui/histsearch.tt | 3 + .../prog/en/modules/admin/additional-fields.tt | 194 +++++++++++++++++++++ .../prog/en/modules/admin/admin-home.tt | 2 + .../prog/en/modules/serials/add_fields.tt | 176 ------------------- .../prog/en/modules/serials/serials-search.tt | 16 +- .../prog/en/modules/serials/subscription-add.tt | 33 +--- serials/serials-search.pl | 21 +-- serials/subscription-add.pl | 48 ++--- 20 files changed, 424 insertions(+), 277 deletions(-) rename serials/add_fields.pl => admin/additional-fields.pl (88%) create mode 100644 koha-tmpl/intranet-tmpl/prog/en/includes/additional-fields-display.inc create mode 100644 koha-tmpl/intranet-tmpl/prog/en/includes/additional-fields-entry.inc create mode 100755 koha-tmpl/intranet-tmpl/prog/en/modules/admin/additional-fields.tt delete mode 100644 koha-tmpl/intranet-tmpl/prog/en/modules/serials/add_fields.tt diff --git a/C4/Acquisition.pm b/C4/Acquisition.pm index 4044556..4c7d274 100644 --- a/C4/Acquisition.pm +++ b/C4/Acquisition.pm @@ -2161,6 +2161,7 @@ sub GetHistory { my $ordernumber = $params{ordernumber}; my $search_children_too = $params{search_children_too} || 0; my $created_by = $params{created_by} || []; + my $additional_fields = $params{additional_fields} // []; my @order_loop; my $total_qty = 0; @@ -2302,6 +2303,17 @@ sub GetHistory { push @query_params, @$created_by; } + if ( @$additional_fields ) { + my $matching_record_ids_for_additional_fields = Koha::AdditionalField->get_matching_record_ids( { + fields => $additional_fields, + tablename => 'aqbasket', + exact_match => 0, + } ); + return [] unless @$matching_record_ids_for_additional_fields; + + # No parameterization because record IDs come directly from DB + $query .= ' AND aqbasket.basketno IN ( ' . join( ',', @$matching_record_ids_for_additional_fields ) . ' )'; + } if ( C4::Context->preference("IndependentBranches") ) { unless ( C4::Context->IsSuperLibrarian() ) { diff --git a/Koha/AdditionalField.pm b/Koha/AdditionalField.pm index 563a7f3..7c4903a 100644 --- a/Koha/AdditionalField.pm +++ b/Koha/AdditionalField.pm @@ -265,6 +265,63 @@ sub get_matching_record_ids { ] } +sub update_fields_from_query { + my ( $class, $args ) = @_; + die "BAD CALL: Don't use update_fields_from_query as an instance method" + if ref $class and UNIVERSAL::can($class,'can'); + + my $query = $args->{query}; + my $additional_fields = Koha::AdditionalField->all( { tablename => $args->{tablename} } ); + 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 ( $args->{marc_record} and $field and $subfield ) { + my $value = $args->{marc_record}->subfield( $field, $subfield ); + $af->{values} = { + $args->{record_id} => $value + }; + } + } else { + $af->{values} = { + $args->{record_id} => $query->param( 'additional_field_' . $field->{id} ) + } if defined $query->param( 'additional_field_' . $field->{id} ); + } + $af->insert_values; + } +} + +sub get_filters_from_query { + my ( $class, $args ) = @_; + die "BAD CALL: Don't use get_filters_from_query as an instance method" + if ref $class and UNIVERSAL::can($class,'can'); + + my $query = $args->{query}; + my $additional_fields = Koha::AdditionalField->all( { tablename => $args->{tablename}, searchable => 1 } ); + my @additional_field_filters; + for my $field ( @$additional_fields ) { + my $filter_value = $query->param( 'additional_field_' . $field->{id} ); + if ( defined $filter_value and $filter_value ne q|| ) { + push @additional_field_filters, { + name => $field->{name}, + value => $filter_value, + authorised_value_category => $field->{authorised_value_category}, + }; + } + } + + return \@additional_field_filters; +} + +sub get_filters_as_values { + my ( $class, $filters ) = @_; + die "BAD CALL: Don't use get_filters_as_values as an instance method" + if ref $class and UNIVERSAL::can($class,'can'); + + return { map { $_->{name} => $_->{value} } @$filters }; +} + 1; __END__ @@ -414,6 +471,47 @@ This is a static method. } ); +=head2 update_fields_from_query + +Updates fields based on user input (best paired with additional-fields-entry.pl) and optionally a MARC record. + +This is a static method. + + Koha::AdditionalField->update_fields_from_query( { + tablename => 'aqbasket', + input => $input, + record_id => $basketno, + marc_record => GetBiblio( $biblionumber ), + } ); + +=head2 get_filters_from_query + +Extracts a list of search filters from user input, to be used with C and +C. + +This is a static method. + + my $filters = Koha::AdditionalField->get_filters_from_query( { + tablename => 'aqbasket', + input => $input, + } ); + +=head2 get_filters_as_values + +Transforms the result of C into a hashref of C => C, so +user-entered filters can be redisplayed. + + $template->param( + additional_field_values => Koha::AdditionalField->get_filters_as_values( + $filters + ), + ); + + [% INCLUDE 'additional-field-entry.inc' + values=additional_field_values + available=available_additional_fields + %] + =head1 AUTHOR Jonathan Druart diff --git a/acqui/basket.pl b/acqui/basket.pl index 5fa94f8..c620bbd 100755 --- a/acqui/basket.pl +++ b/acqui/basket.pl @@ -37,6 +37,8 @@ use C4::Items; use C4::Suggestions; use Date::Calc qw/Add_Delta_Days/; +use Koha::AdditionalField; + =head1 NAME basket.pl @@ -392,6 +394,11 @@ if ( $op eq 'delete_confirm' ) { unclosable => @orders ? 0 : 1, has_budgets => $has_budgets, duplinbatch => $duplinbatch, + available_additional_fields => Koha::AdditionalField->all( { tablename => 'aqbasket' } ), + additional_field_values => Koha::AdditionalField->fetch_all_values( { + tablename => 'aqbasket', + record_id => $basketno, + } )->{$basketno}, ); } diff --git a/acqui/basketheader.pl b/acqui/basketheader.pl index a4ef0b9..1ddea7c 100755 --- a/acqui/basketheader.pl +++ b/acqui/basketheader.pl @@ -56,6 +56,7 @@ use C4::Acquisition qw/GetBasket NewBasket ModBasketHeader/; use C4::Contract qw/GetContracts/; use Koha::Acquisition::Bookseller; +use Koha::AdditionalField; my $input = new CGI; my ( $template, $loggedinuser, $cookie ) = get_template_and_user( @@ -77,6 +78,8 @@ my $basket; my $op = $input ->param('op'); my $is_an_edit= $input ->param('is_an_edit'); +$template->param( available_additional_fields => scalar Koha::AdditionalField->all( { tablename => 'aqbasket' } ) ); + if ( $op eq 'add_form' ) { my @contractloop; if ( $basketno ) { @@ -97,6 +100,12 @@ if ( $op eq 'add_form' ) { } } $template->param( is_an_edit => 1); + $template->param( + additional_field_values => Koha::AdditionalField->fetch_all_values( { + tablename => 'aqbasket', + record_id => $basketno, + } )->{$basketno}, + ); } else { #new basket my $basket; @@ -161,6 +170,13 @@ if ( $op eq 'add_form' ) { $input->param('billingplace'), ); } + + Koha::AdditionalField->update_fields_from_query( { + tablename => 'aqbasket', + record_id => $basketno, + query => $input, + } ); + print $input->redirect('basket.pl?basketno='.$basketno); exit 0; } diff --git a/acqui/histsearch.pl b/acqui/histsearch.pl index efb9468..f8c502e 100755 --- a/acqui/histsearch.pl +++ b/acqui/histsearch.pl @@ -58,6 +58,7 @@ use C4::Acquisition; use C4::Debug; use C4::Branch; use C4::Koha; +use Koha::AdditionalField; use Koha::DateUtils; my $input = new CGI; @@ -95,6 +96,12 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( } ); +$template->param( available_additional_fields => scalar Koha::AdditionalField->all( { tablename => 'aqbasket', searchable => 1 } ) ); +my $additional_field_filters = Koha::AdditionalField->get_filters_from_query( { + tablename => 'aqbasket', + query => $input, +} ); + my $order_loop; # If we're supplied any value then we do a search. Otherwise we don't. if ($do_search) { @@ -114,6 +121,7 @@ if ($do_search) { ordernumber => $ordernumber, search_children_too => $search_children_too, created_by => \@created_by, + additional_fields => $additional_field_filters, ); } @@ -146,6 +154,7 @@ $template->param( budget_id => $budget, bp_loop => $bp_loop, search_done => $do_search, + additional_field_filters => Koha::AdditionalField->get_filters_as_values( $additional_field_filters ), debug => $debug || $input->param('debug') || 0, uc(C4::Context->preference("marcflavour")) => 1 ); diff --git a/serials/add_fields.pl b/admin/additional-fields.pl similarity index 88% rename from serials/add_fields.pl rename to admin/additional-fields.pl index 9451a1b..a01f71a 100755 --- a/serials/add_fields.pl +++ b/admin/additional-fields.pl @@ -27,16 +27,17 @@ my $input = new CGI; my ( $template, $loggedinuser, $cookie ) = get_template_and_user( { - template_name => "serials/add_fields.tt", + template_name => "admin/additional-fields.tt", query => $input, type => "intranet", authnotrequired => 0, - flagsrequired => { serials => '*' }, + flagsrequired => { parameters => 1 }, debug => 1, } ); -my $op = $input->param('op') // 'list'; +my $tablename = $input->param('tablename'); +my $op = $input->param('op') // ( $tablename ? 'list' : 'list_tables' ); my $field_id = $input->param('field_id'); my @messages; @@ -65,7 +66,7 @@ if ( $op eq 'add' ) { my $inserted = 0; eval { my $af = Koha::AdditionalField->new({ - tablename => 'subscription', + tablename => $tablename, name => $name, authorised_value_category => $authorised_value_category, marcfield => $marcfield, @@ -107,6 +108,8 @@ if ( $op eq 'add_form' ) { $field = Koha::AdditionalField->new( { id => $field_id } )->fetch; } + $tablename = $field->{tablename}; + $template->param( field => $field, categories => $categories, @@ -114,12 +117,13 @@ if ( $op eq 'add_form' ) { } if ( $op eq 'list' ) { - my $fields = Koha::AdditionalField->all( { tablename => 'subscription' } ); + my $fields = Koha::AdditionalField->all( { tablename => $tablename } ); $template->param( fields => $fields ); } $template->param( op => $op, + tablename => $tablename, messages => \@messages, ); diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/additional-fields-display.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/additional-fields-display.inc new file mode 100644 index 0000000..41771a8 --- /dev/null +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/additional-fields-display.inc @@ -0,0 +1,11 @@ +[% USE AuthorisedValues %] +[% FOR field IN available %] +
  • + [% field.name %]: + [% IF field.authorised_value_category %] + [% AuthorisedValues.GetByCode( field.authorised_value_category, values.${field.name} ) %] + [% ELSE %] + [% values.${field.name} %] + [% END %] +
  • +[% END %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/additional-fields-entry.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/additional-fields-entry.inc new file mode 100644 index 0000000..a961e55 --- /dev/null +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/additional-fields-entry.inc @@ -0,0 +1,33 @@ +[% USE AuthorisedValues %] +[% IF wrap_fieldset != 0 %] +
    + Additional fields +
      +[% END %] + [% FOR field IN available %] +
    1. + + [% IF field.authorised_value_category %] + (Authorised values for [% field.authorised_value_category %]) + [% ELSE %] + [% IF field.marcfield %] + + This value will be filled with the [% field.marcfield %] subfield of the selected biblio. + [% ELSE %] + + [% END %] + [% END %] +
    2. + [% END %] +[% IF wrap_fieldset != 0 %] +
    +
    +[% END %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/admin-menu.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/admin-menu.inc index 6e6fa49..d57a141 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/admin-menu.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/admin-menu.inc @@ -72,6 +72,7 @@
  • Did you mean?
  • Columns settings
  • Audio alerts
  • +
  • Additional fields
  • diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/serials-menu.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/serials-menu.inc index 21dff3a..b6c4b32 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/serials-menu.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/serials-menu.inc @@ -30,5 +30,4 @@ Manage numbering patterns -
  • Add subscription fields
  • diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basket.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basket.tt index 3b3e1b1..f8b4710 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basket.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basket.tt @@ -306,6 +306,7 @@ [% IF ( creationdate ) %]
  • Opened on: [% creationdate | $KohaDates %]
  • [% END %] [% IF ( closedate ) %]
  • Closed on: [% closedate | $KohaDates %]
  • [% END %] [% IF ( estimateddeliverydate ) %]
  • Estimated delivery date: [% estimateddeliverydate | $KohaDates %]
  • [% END %] + [% INCLUDE 'additional-fields-display.inc' available=available_additional_fields values=additional_field_values %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketheader.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketheader.tt index 84b318c..18ce2b5 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketheader.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketheader.tt @@ -115,6 +115,11 @@ [% END %] + + [% IF available_additional_fields %] + [% INCLUDE 'additional-fields-entry.inc' available=available_additional_fields values=additional_field_values %] + [% END %] +
    diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/histsearch.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/histsearch.tt index 988fd27..fa2d88e 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/histsearch.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/histsearch.tt @@ -70,6 +70,9 @@ var MSG_REMOVE_PATRON = _("Remove"); + + [% INCLUDE 'additional-fields-entry.inc' available=available_additional_fields values=additional_field_filters wrap_fieldset=0 %] +
  • diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/additional-fields.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/additional-fields.tt new file mode 100755 index 0000000..68aa704 --- /dev/null +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/additional-fields.tt @@ -0,0 +1,194 @@ +[% INCLUDE 'doc-head-open.inc' %] +Koha › Administration › + [% SWITCH op %] + [% CASE 'add_form' %][% IF field %]Modify additional field '[% field.name %]'[% ELSE %]Add additional field[% END %] + [% CASE %]Manage additional fields + [% END %] + +[% INCLUDE 'doc-head-close.inc' %] + +[% INCLUDE "datatables.inc" %] + + + + + [% INCLUDE 'header.inc' %] + [% INCLUDE 'cat-search.inc' %] + + + +
    +
    +
    +
    + [% IF op == 'list' %] + + [% END %] + + [% IF messages %] + [% FOR message IN messages %] + [% IF message.code == 'insert' %] + [% IF message.number > 0 %] +
    The field has been inserted
    + [% ELSE %] +
    The field has not been inserted (name still exist?)
    + [% END %] + [% ELSIF message.code == 'update' %] + [% IF message.number > 0 %] +
    The field has been updated
    + [% ELSE %] +
    The field has not been updated (name still exist?)
    + [% END %] + [% ELSIF message.code == 'delete' %] + [% IF message.number > 0 %] +
    The field has been deleted
    + [% ELSE %] +
    The field has not been deleted
    + [% END %] + [% END %] + [% END %] + [% END %] + + [% IF op == 'list_tables' %] +

    Additional fields

    +

    Select a table:

    + [% BLOCK table_option %] +
  • [% content %] ([% value %])
  • + [% END %] +
      + [% WRAPPER table_option value="aqbasket" %]Order baskets[% END %] + [% WRAPPER table_option value="subscription" %]Subscriptions[% END %] +
    + [% ELSIF op == 'list' %] +

    Additional fields for '[% tablename %]'

    + [% IF fields %] + + + + + + + + + + + + [% FOR field IN fields %] + + + + + + + + [% END %] + +
    NameAuthorised value categoryMARC fieldSearchableActions
    [% field.name %][% field.authorised_value_category %][% field.marcfield %] + [% IF field.searchable %]Yes[% ELSE %]No[% END %] + + Edit + Delete +
    + [% ELSE %] + [% IF tablename %]There are no additional fields defined for this table.[% END %] + [% END %] + [% ELSIF op == 'add_form' %] + [% IF field %] +

    Modify field

    + [% ELSE %] +

    Add field

    + [% END %] +
    +
    +
      +
    1. + + +
    2. +
    3. + + +
    4. +
    5. + + +
    6. +
    7. + + [% IF field.searchable %] + + [% ELSE %] + + [% END %] +
    8. +
    +
    +
    + [% IF field %] + + [% END %] + + + + Cancel +
    +
    + [% END %] + + + + +
    +[% INCLUDE 'admin-menu.inc' %] +
    + +[% INCLUDE 'intranet-bottom.inc' %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/admin-home.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/admin-home.tt index d0f65f2..95ed880 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/admin-home.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/admin-home.tt @@ -115,6 +115,8 @@
    SMS cellular providers
    Define a list of cellular providers for sending SMS messages via email.
    [% END %] +
    Additional fields
    +
    Add additional fields to certain tables
    diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/add_fields.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/serials/add_fields.tt deleted file mode 100644 index a7f847b..0000000 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/add_fields.tt +++ /dev/null @@ -1,176 +0,0 @@ -[% INCLUDE 'doc-head-open.inc' %] -Koha › Serials › Manage new fields for subscriptions - [% IF op == "list" %] › List of fields - [% ELSIF op == "add_form" %] - [% IF field %] › Modify field - [% ELSE %] › Add field - [% END %] - [% END %] - -[% INCLUDE 'doc-head-close.inc' %] - -[% INCLUDE "datatables.inc" %] - - - - - [% INCLUDE 'header.inc' %] - [% INCLUDE 'serials-search.inc' %] - - - -
    -
    -
    -
    - [% IF op == 'list' %] - - [% END %] - - [% IF messages %] - [% FOR message IN messages %] - [% IF message.code == 'insert' %] - [% IF message.number > 0 %] -
    The field has been inserted
    - [% ELSE %] -
    The field has not been inserted (name still exist?)
    - [% END %] - [% ELSIF message.code == 'update' %] - [% IF message.number > 0 %] -
    The field has been updated
    - [% ELSE %] -
    The field has not been updated (name still exist?)
    - [% END %] - [% ELSIF message.code == 'delete' %] - [% IF message.number > 0 %] -
    The field has been deleted
    - [% ELSE %] -
    The field has not been deleted
    - [% END %] - [% END %] - [% END %] - [% END %] - - [% IF op == 'list' %] -

    Additional fields for subscriptions

    - [% IF fields %] - - - - - - - - - - - - [% FOR field IN fields %] - - - - - - - - [% END %] - -
    NameAuthorised value categoryMarc fieldSearchableActions
    [% field.name %][% field.authorised_value_category %][% field.marcfield %] - [% IF field.searchable %]Yes[% ELSE %]No[% END %] - - Edit - Delete -
    - [% ELSE %] - There is no field defined. - [% END %] - [% ELSIF op == 'add_form' %] - [% IF field %] -

    Modify field

    - [% ELSE %] -

    Add field

    - [% END %] -
    -
    -
      -
    1. - - -
    2. -
    3. - - -
    4. -
    5. - - -
    6. -
    7. - - [% IF field.searchable %] - - [% ELSE %] - - [% END %] -
    8. -
    -
    -
    - [% IF field %] - - [% END %] - - - Cancel -
    -
    - [% END %] - -
    -
    - -
    -[% INCLUDE 'serials-menu.inc' %] -
    -
    -[% INCLUDE 'intranet-bottom.inc' %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-search.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-search.tt index be67cfa..aafe43d 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-search.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-search.tt @@ -117,21 +117,7 @@ - [% FOR field IN additional_fields_for_subscription %] -
  • - - [% IF field.authorised_value_choices %] - - [% ELSE %] - - [% END %] -
  • - [% END %] + [% INCLUDE 'additional-fields-entry.inc' available=additional_fields_for_subscription values=additional_field_filters wrap_fieldset=0 %]
    diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-add.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-add.tt index 39c809c..89b5ad5 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-add.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-add.tt @@ -856,36 +856,9 @@ $(document).ready(function() {
    [% IF additional_fields_for_subscription %] -
    -
    - Additional fields -
      - [% FOR field IN additional_fields_for_subscription %] -
    1. - - [% IF field.authorised_value_choices %] - (Authorised values for [% field.authorised_value_category %]) - [% ELSE %] - [% IF field.marcfield %] - - This value will be filled with the [% field.marcfield %] subfield of the selected biblio. - [% ELSE %] - - [% END %] - [% END %] -
    2. - [% END %] -
    -
    -
    +
    + [% INCLUDE 'additional-fields-entry.inc' available=additional_fields_for_subscription values=additional_fields %] +
    [% END %]
    diff --git a/serials/serials-search.pl b/serials/serials-search.pl index 3e73c56..54fdeeb 100755 --- a/serials/serials-search.pl +++ b/serials/serials-search.pl @@ -79,19 +79,10 @@ if ( $op and $op eq "close" ) { my $additional_fields = Koha::AdditionalField->all( { tablename => 'subscription', searchable => 1 } ); -my $additional_field_filters; -for my $field ( @$additional_fields ) { - my $filter_value = $query->param('additional_field_' . $field->{id} . '_filter'); - if ( defined $filter_value and $filter_value ne q|| ) { - $additional_field_filters->{ $field->{name} } = { - value => $filter_value, - authorised_value_category => $field->{authorised_value_category}, - }; - } - if ( $field->{authorised_value_category} ) { - $field->{authorised_value_choices} = GetAuthorisedValues( $field->{authorised_value_category} ); - } -} +my $additional_field_filters = Koha::AdditionalField->get_filters_from_query( { + tablename => 'subscription', + query => $query, +} ); my $expiration_date_dt = $expiration_date ? dt_from_string( $expiration_date ) : undef; my @subscriptions; @@ -106,7 +97,7 @@ if ($searched){ publisher => $publisher, bookseller => $bookseller, branch => $branch, - additional_fields => [ map{ { name => $_, value => $additional_field_filters->{$_}{value}, authorised_value_category => $additional_field_filters->{$_}{authorised_value_category} } } keys %$additional_field_filters ], + additional_fields => $additional_field_filters, location => $location, expiration_date => $expiration_date_dt, } @@ -160,7 +151,7 @@ $template->param( branches_loop => \@branches_loop, done_searched => $searched, routing => $routing, - additional_field_filters => $additional_field_filters, + additional_field_filters => Koha::AdditionalField->get_filters_as_values( $additional_field_filters ), additional_fields_for_subscription => $additional_fields, marcflavour => (uc(C4::Context->preference("marcflavour"))) ); diff --git a/serials/subscription-add.pl b/serials/subscription-add.pl index 31a1e35..d9da294 100755 --- a/serials/subscription-add.pl +++ b/serials/subscription-add.pl @@ -152,14 +152,7 @@ $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 ); +$template->param( additional_fields_for_subscription => scalar Koha::AdditionalField->all( { tablename => 'subscription' } ) ); # prepare template variables common to all $op conditions: if ($op!~/^mod/) { @@ -346,8 +339,12 @@ sub redirect_add_subscription { $skip_serialseq ); - my $additional_fields = Koha::AdditionalField->all( { tablename => 'subscription' } ); - insert_additional_fields( $additional_fields, $biblionumber, $subscriptionid ); + Koha::AdditionalField->update_fields_from_query( { + tablename => 'subscription', + record_id => $subscriptionid, + query => $query, + marc_record => GetMarcBiblio( $biblionumber, 1 ) + } ); print $query->redirect("/cgi-bin/koha/serials/subscription-detail.pl?subscriptionid=$subscriptionid"); return; @@ -428,32 +425,13 @@ sub redirect_mod_subscription { $skip_serialseq ); - my $additional_fields = Koha::AdditionalField->all( { tablename => 'subscription' } ); - insert_additional_fields( $additional_fields, $biblionumber, $subscriptionid ); + Koha::AdditionalField->update_fields_from_query( { + tablename => 'subscription', + record_id => $subscriptionid, + query => $query, + marc_record => GetMarcBiblio( $biblionumber, 1 ) + } ); print $query->redirect("/cgi-bin/koha/serials/subscription-detail.pl?subscriptionid=$subscriptionid"); return; } - -sub insert_additional_fields { - my ( $additional_fields, $biblionumber, $subscriptionid ) = @_; - 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; - } -} -- 2.7.0