View | Details | Raw Unified | Return to bug 15774
Collapse All | Expand All

(-)a/C4/Acquisition.pm (+11 lines)
Lines 2280-2285 sub GetHistory { Link Here
2280
    my $search_children_too = $params{search_children_too} || 0;
2280
    my $search_children_too = $params{search_children_too} || 0;
2281
    my $created_by = $params{created_by} || [];
2281
    my $created_by = $params{created_by} || [];
2282
    my $ordernumbers = $params{ordernumbers} || [];
2282
    my $ordernumbers = $params{ordernumbers} || [];
2283
    my $additional_fields = $params{additional_fields} // [];
2283
2284
2284
    my @order_loop;
2285
    my @order_loop;
2285
    my $total_qty         = 0;
2286
    my $total_qty         = 0;
Lines 2443-2448 sub GetHistory { Link Here
2443
    if ( @$ordernumbers ) {
2444
    if ( @$ordernumbers ) {
2444
        $query .= ' AND (aqorders.ordernumber IN ( ' . join (',', ('?') x @$ordernumbers ) . '))';
2445
        $query .= ' AND (aqorders.ordernumber IN ( ' . join (',', ('?') x @$ordernumbers ) . '))';
2445
        push @query_params, @$ordernumbers;
2446
        push @query_params, @$ordernumbers;
2447
    if ( @$additional_fields ) {
2448
        my $matching_record_ids_for_additional_fields = Koha::AdditionalField->get_matching_record_ids( {
2449
            fields => $additional_fields,
2450
            tablename => 'aqbasket',
2451
            exact_match => 0,
2452
        } );
2453
        return [] unless @$matching_record_ids_for_additional_fields;
2454
2455
        # No parameterization because record IDs come directly from DB
2456
        $query .= ' AND aqbasket.basketno IN ( ' . join( ',', @$matching_record_ids_for_additional_fields ) . ' )';
2446
    }
2457
    }
2447
2458
2448
    if ( C4::Context->preference("IndependentBranches") ) {
2459
    if ( C4::Context->preference("IndependentBranches") ) {
(-)a/Koha/AdditionalField.pm (+98 lines)
Lines 265-270 sub get_matching_record_ids { Link Here
265
    ]
265
    ]
266
}
266
}
267
267
268
sub update_fields_from_query {
269
    my ( $class, $args ) = @_;
270
    die "BAD CALL: Don't use update_fields_from_query as an instance method"
271
        if ref $class and UNIVERSAL::can($class,'can');
272
273
    my $query = $args->{query};
274
    my $additional_fields = Koha::AdditionalField->all( { tablename => $args->{tablename} } );
275
    for my $field ( @$additional_fields ) {
276
        my $af = Koha::AdditionalField->new({ id => $field->{id} })->fetch;
277
        if ( $af->{marcfield} ) {
278
            my ( $field, $subfield ) = split /\$/, $af->{marcfield};
279
            $af->{values} = undef;
280
            if ( $args->{marc_record} and $field and $subfield ) {
281
                my $value = $args->{marc_record}->subfield( $field, $subfield );
282
                $af->{values} = {
283
                    $args->{record_id} => $value
284
                };
285
            }
286
        } else {
287
            $af->{values} = {
288
                $args->{record_id} => $query->param( 'additional_field_' . $field->{id} )
289
            } if defined $query->param( 'additional_field_' . $field->{id} );
290
        }
291
        $af->insert_values;
292
    }
293
}
294
295
sub get_filters_from_query {
296
    my ( $class, $args ) = @_;
297
    die "BAD CALL: Don't use get_filters_from_query as an instance method"
298
        if ref $class and UNIVERSAL::can($class,'can');
299
300
    my $query = $args->{query};
301
    my $additional_fields = Koha::AdditionalField->all( { tablename => $args->{tablename}, searchable => 1 } );
302
    my @additional_field_filters;
303
    for my $field ( @$additional_fields ) {
304
        my $filter_value = $query->param( 'additional_field_' . $field->{id} );
305
        if ( defined $filter_value and $filter_value ne q|| ) {
306
            push @additional_field_filters, {
307
                name => $field->{name},
308
                value => $filter_value,
309
                authorised_value_category => $field->{authorised_value_category},
310
            };
311
        }
312
    }
313
314
    return \@additional_field_filters;
315
}
316
317
sub get_filters_as_values {
318
    my ( $class, $filters ) = @_;
319
    die "BAD CALL: Don't use get_filters_as_values as an instance method"
320
        if ref $class and UNIVERSAL::can($class,'can');
321
322
    return { map { $_->{name} => $_->{value} } @$filters };
323
}
324
268
1;
325
1;
269
326
270
__END__
327
__END__
Lines 414-419 This is a static method. Link Here
414
        }
471
        }
415
    );
472
    );
416
473
474
=head2 update_fields_from_query
475
476
Updates fields based on user input (best paired with additional-fields-entry.pl) and optionally a MARC record.
477
478
This is a static method.
479
480
    Koha::AdditionalField->update_fields_from_query( {
481
        tablename => 'aqbasket',
482
        input => $input,
483
        record_id => $basketno,
484
        marc_record => GetBiblio( $biblionumber ),
485
    } );
486
487
=head2 get_filters_from_query
488
489
Extracts a list of search filters from user input, to be used with C<get_matching_record_ids> and
490
C<get_filters_as_values>.
491
492
This is a static method.
493
494
    my $filters = Koha::AdditionalField->get_filters_from_query( {
495
        tablename => 'aqbasket',
496
        input => $input,
497
    } );
498
499
=head2 get_filters_as_values
500
501
Transforms the result of C<get_filters_from_query> into a hashref of C<name> => C<value>, so
502
user-entered filters can be redisplayed.
503
504
    $template->param(
505
        additional_field_values => Koha::AdditionalField->get_filters_as_values(
506
            $filters
507
        ),
508
    );
509
510
    [% INCLUDE 'additional-field-entry.inc'
511
        values=additional_field_values
512
        available=available_additional_fields
513
    %]
514
417
=head1 AUTHOR
515
=head1 AUTHOR
418
516
419
Jonathan Druart <jonathan.druart at biblibre.com>
517
Jonathan Druart <jonathan.druart at biblibre.com>
(-)a/acqui/basket.pl (+7 lines)
Lines 43-48 use Koha::EDI qw( create_edi_order get_edifact_ean ); Link Here
43
use Koha::CsvProfiles;
43
use Koha::CsvProfiles;
44
use Koha::Patrons;
44
use Koha::Patrons;
45
45
46
use Koha::AdditionalField;
47
46
=head1 NAME
48
=head1 NAME
47
49
48
basket.pl
50
basket.pl
Lines 430-435 if ( $op eq 'list' ) { Link Here
430
        has_budgets          => $has_budgets,
432
        has_budgets          => $has_budgets,
431
        duplinbatch          => $duplinbatch,
433
        duplinbatch          => $duplinbatch,
432
        csv_profiles         => [ Koha::CsvProfiles->search({ type => 'sql', used_for => 'export_basket' }) ],
434
        csv_profiles         => [ Koha::CsvProfiles->search({ type => 'sql', used_for => 'export_basket' }) ],
435
        available_additional_fields => Koha::AdditionalField->all( { tablename => 'aqbasket' } ),
436
        additional_field_values => Koha::AdditionalField->fetch_all_values( {
437
            tablename => 'aqbasket',
438
            record_id => $basketno,
439
        } )->{$basketno},
433
    );
440
    );
434
}
441
}
435
442
(-)a/acqui/basketheader.pl (+16 lines)
Lines 54-59 use C4::Acquisition qw/GetBasket NewBasket ModBasketHeader/; Link Here
54
use C4::Contract qw/GetContracts/;
54
use C4::Contract qw/GetContracts/;
55
55
56
use Koha::Acquisition::Booksellers;
56
use Koha::Acquisition::Booksellers;
57
use Koha::AdditionalField;
57
58
58
my $input = new CGI;
59
my $input = new CGI;
59
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
60
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
Lines 74-79 my $basket; Link Here
74
my $op = $input->param('op');
75
my $op = $input->param('op');
75
my $is_an_edit = $input->param('is_an_edit');
76
my $is_an_edit = $input->param('is_an_edit');
76
77
78
$template->param( available_additional_fields => scalar Koha::AdditionalField->all( { tablename => 'aqbasket' } ) );
79
77
if ( $op eq 'add_form' ) {
80
if ( $op eq 'add_form' ) {
78
    my @contractloop;
81
    my @contractloop;
79
    if ( $basketno ) {
82
    if ( $basketno ) {
Lines 94-99 if ( $op eq 'add_form' ) { Link Here
94
            }
97
            }
95
        }
98
        }
96
        $template->param( is_an_edit => 1);
99
        $template->param( is_an_edit => 1);
100
        $template->param(
101
            additional_field_values => Koha::AdditionalField->fetch_all_values( {
102
                tablename => 'aqbasket',
103
                record_id => $basketno,
104
            } )->{$basketno},
105
        );
97
    } else {
106
    } else {
98
    #new basket
107
    #new basket
99
        my $basket;
108
        my $basket;
Lines 160-165 if ( $op eq 'add_form' ) { Link Here
160
            scalar $input->param('create_items')
169
            scalar $input->param('create_items')
161
        );
170
        );
162
    }
171
    }
172
173
    Koha::AdditionalField->update_fields_from_query( {
174
        tablename => 'aqbasket',
175
        record_id => $basketno,
176
        query => $input,
177
    } );
178
163
    print $input->redirect('basket.pl?basketno='.$basketno);
179
    print $input->redirect('basket.pl?basketno='.$basketno);
164
    exit 0;
180
    exit 0;
165
}
181
}
(-)a/acqui/histsearch.pl (+7 lines)
Lines 56-61 use C4::Output; Link Here
56
use C4::Acquisition;
56
use C4::Acquisition;
57
use C4::Debug;
57
use C4::Debug;
58
use C4::Koha;
58
use C4::Koha;
59
use Koha::AdditionalField;
59
use Koha::DateUtils;
60
use Koha::DateUtils;
60
61
61
my $input = new CGI;
62
my $input = new CGI;
Lines 97-102 unless ( $input->param('from') ) { Link Here
97
}
98
}
98
$filters->{from_placed_on} = output_pref( { dt => $from_placed_on, dateformat => 'iso', dateonly => 1 } ),
99
$filters->{from_placed_on} = output_pref( { dt => $from_placed_on, dateformat => 'iso', dateonly => 1 } ),
99
$filters->{to_placed_on} = output_pref( { dt => $to_placed_on, dateformat => 'iso', dateonly => 1 } ),
100
$filters->{to_placed_on} = output_pref( { dt => $to_placed_on, dateformat => 'iso', dateonly => 1 } ),
101
$filters->{additional_fields} = Koha::AdditionalField->get_filters_from_query({
102
    tablename => 'aqbasket',
103
    query => $input,
104
} );
105
106
$template->param( available_additional_fields => scalar Koha::AdditionalField->all( { tablename => 'aqbasket', searchable => 1 } ) );
100
107
101
my $order_loop;
108
my $order_loop;
102
# If we're supplied any value then we do a search. Otherwise we don't.
109
# If we're supplied any value then we do a search. Otherwise we don't.
(-)a/serials/add_fields.pl (-5 / +9 lines)
Lines 27-42 my $input = new CGI; Link Here
27
27
28
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
28
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
29
    {
29
    {
30
        template_name   => "serials/add_fields.tt",
30
        template_name   => "admin/additional-fields.tt",
31
        query           => $input,
31
        query           => $input,
32
        type            => "intranet",
32
        type            => "intranet",
33
        authnotrequired => 0,
33
        authnotrequired => 0,
34
        flagsrequired   => { serials => '*' },
34
        flagsrequired   => { parameters => 1 },
35
        debug           => 1,
35
        debug           => 1,
36
    }
36
    }
37
);
37
);
38
38
39
my $op = $input->param('op') // 'list';
39
my $tablename = $input->param('tablename');
40
my $op = $input->param('op') // ( $tablename ? 'list' : 'list_tables' );
40
my $field_id = $input->param('field_id');
41
my $field_id = $input->param('field_id');
41
my @messages;
42
my @messages;
42
43
Lines 65-71 if ( $op eq 'add' ) { Link Here
65
        my $inserted = 0;
66
        my $inserted = 0;
66
        eval {
67
        eval {
67
            my $af = Koha::AdditionalField->new({
68
            my $af = Koha::AdditionalField->new({
68
                tablename => 'subscription',
69
                tablename => $tablename,
69
                name => $name,
70
                name => $name,
70
                authorised_value_category => $authorised_value_category,
71
                authorised_value_category => $authorised_value_category,
71
                marcfield => $marcfield,
72
                marcfield => $marcfield,
Lines 106-123 if ( $op eq 'add_form' ) { Link Here
106
        $field = Koha::AdditionalField->new( { id => $field_id } )->fetch;
107
        $field = Koha::AdditionalField->new( { id => $field_id } )->fetch;
107
    }
108
    }
108
109
110
    $tablename = $field->{tablename};
111
109
    $template->param(
112
    $template->param(
110
        field => $field,
113
        field => $field,
111
    );
114
    );
112
}
115
}
113
116
114
if ( $op eq 'list' ) {
117
if ( $op eq 'list' ) {
115
    my $fields = Koha::AdditionalField->all( { tablename => 'subscription' } );
118
    my $fields = Koha::AdditionalField->all( { tablename => $tablename } );
116
    $template->param( fields => $fields );
119
    $template->param( fields => $fields );
117
}
120
}
118
121
119
$template->param(
122
$template->param(
120
    op => $op,
123
    op => $op,
124
    tablename => $tablename,
121
    messages => \@messages,
125
    messages => \@messages,
122
);
126
);
123
127
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/additional-fields-display.inc (+11 lines)
Line 0 Link Here
1
[% USE AuthorisedValues %]
2
[% FOR field IN available %]
3
    <li>
4
        <span class="label"> [% field.name %]: </span>
5
        [% IF field.authorised_value_category %]
6
            [% AuthorisedValues.GetByCode( field.authorised_value_category, values.${field.name} ) %]
7
        [% ELSE %]
8
            [% values.${field.name} %]
9
        [% END %]
10
    </li>
11
[% END %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/additional-fields-entry.inc (+33 lines)
Line 0 Link Here
1
[% USE AuthorisedValues %]
2
[% IF wrap_fieldset != 0 %]
3
<fieldset class="rows">
4
    <legend>Additional fields</legend>
5
    <ol>
6
[% END %]
7
        [% FOR field IN available %]
8
            <li>
9
                <label for="additional_field_[% field.id %]"> [% field.name %]: </label>
10
                [% IF field.authorised_value_category %]
11
                    <select name="additional_field_[% field.id %]" id="additional_field_[% field.id %]">
12
                        [% FOREACH av IN AuthorisedValues.Get( field.authorised_value_category, values.${field.name} ) %]
13
                            [% IF av.selected %]
14
                                <option value="[% av.authorised_value %]" selected="selected">[% av.lib %]</option>
15
                            [% ELSE %]
16
                                <option value="[% av.authorised_value %]">[% av.lib %]</option>
17
                            [% END %]
18
                        [% END %]
19
                    </select> (Authorised values for [% field.authorised_value_category %])
20
                [% ELSE %]
21
                    [% IF field.marcfield %]
22
                        <input type="text" value="[% values.${field.name} %]" id="additional_field_[% field.id %]" name="additional_field_[% field.id %]" readonly="readonly" />
23
                        This value will be filled with the [% field.marcfield %] subfield of the selected biblio.
24
                    [% ELSE %]
25
                        <input type="text" value="[% values.${field.name} %]" id="additional_field_[% field.id %]" name="additional_field_[% field.id %]" />
26
                    [% END %]
27
                [% END %]
28
            </li>
29
        [% END %]
30
[% IF wrap_fieldset != 0 %]
31
    </ol>
32
</fieldset>
33
[% END %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/admin-menu.inc (-1 / +4 lines)
Lines 110-116 Link Here
110
        </ul>
110
        </ul>
111
    [% END %]
111
    [% END %]
112
112
113
    [% IF ( CAN_user_parameters_manage_search_targets || CAN_user_parameters_manage_didyoumean || CAN_user_parameters_manage_column_config || CAN_user_parameters_manage_audio_alerts || ( CAN_user_parameters_manage_sms_providers && Koha.Preference('SMSSendDriver') == 'Email' ) || CAN_user_parameters_manage_usage_stats ) %]
113
    [% IF ( CAN_user_parameters_manage_search_targets || CAN_user_parameters_manage_didyoumean || CAN_user_parameters_manage_column_config || CAN_user_parameters_manage_audio_alerts || ( CAN_user_parameters_manage_sms_providers && Koha.Preference('SMSSendDriver') == 'Email' ) || CAN_user_parameters_manage_usage_stats || CAN_user_parameters_manage_additional_fields_baskets || CAN_user_parameters_manage_additional_fields_subscriptions ) %]
114
        <h5>Additional parameters</h5>
114
        <h5>Additional parameters</h5>
115
        <ul>
115
        <ul>
116
            <!-- <li><a href="/cgi-bin/koha/admin/printers.pl">Network Printers</a></li> -->
116
            <!-- <li><a href="/cgi-bin/koha/admin/printers.pl">Network Printers</a></li> -->
Lines 132-137 Link Here
132
            [% IF ( CAN_user_parameters_manage_usage_stats ) %]
132
            [% IF ( CAN_user_parameters_manage_usage_stats ) %]
133
                <li><a href="/cgi-bin/koha/admin/usage_statistics.pl">Share usage statistics</a></li>
133
                <li><a href="/cgi-bin/koha/admin/usage_statistics.pl">Share usage statistics</a></li>
134
            [% END %]
134
            [% END %]
135
            [% IF ( CAN_user_parameters_manage_additional_fields_baskets || CAN_user_parameters_manage_additional_fields_subscriptions ) %]
136
                <li><a href="/cgi-bin/koha/admin/additional-fields.pl">Additional fields</a></li>
137
            [% END %]
135
        </ul>
138
        </ul>
136
    [% END %]
139
    [% END %]
137
</div>
140
</div>
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/filter-orders.inc (+1 lines)
Lines 20-25 Link Here
20
        <label for="basketgroupname">Basket group:</label>
20
        <label for="basketgroupname">Basket group:</label>
21
        <input type="text" name="basketgroupname" id="basketgroupname" value="[% filters.basketgroupname | html %]" />
21
        <input type="text" name="basketgroupname" id="basketgroupname" value="[% filters.basketgroupname | html %]" />
22
    </li>
22
    </li>
23
        [% INCLUDE 'additional-fields-entry.inc' available=available_additional_fields values=additional_field_filters wrap_fieldset=0 %]
23
    <li>
24
    <li>
24
      <label for="ordernumber">Order line:</label>
25
      <label for="ordernumber">Order line:</label>
25
      <input type="text" name="ordernumber" id="ordernumber" value="[% filters.ordernumber | html %]" />
26
      <input type="text" name="ordernumber" id="ordernumber" value="[% filters.ordernumber | html %]" />
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/serials-menu.inc (-1 lines)
Lines 30-34 Link Here
30
            Manage numbering patterns
30
            Manage numbering patterns
31
        </a>
31
        </a>
32
    </li>
32
    </li>
33
    <li><a href="/cgi-bin/koha/serials/add_fields.pl">Add subscription fields</a></li>
34
</ul>
33
</ul>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basket.tt (+2 lines)
Lines 277-282 Link Here
277
                    </li>
277
                    </li>
278
                [% END %]
278
                [% END %]
279
279
280
                [% INCLUDE 'additional-fields-display.inc' available=available_additional_fields values=additional_field_values %]
281
280
                </ol>
282
                </ol>
281
                </div>
283
                </div>
282
284
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketheader.tt (+5 lines)
Lines 127-132 Link Here
127
                [% END %]
127
                [% END %]
128
            </ol>
128
            </ol>
129
        </fieldset>
129
        </fieldset>
130
131
        [% IF available_additional_fields %]
132
            [% INCLUDE 'additional-fields-entry.inc' available=available_additional_fields values=additional_field_values %]
133
        [% END %]
134
130
        <fieldset class="action">
135
        <fieldset class="action">
131
            <input type="hidden" name="op" value="add_validate" />
136
            <input type="hidden" name="op" value="add_validate" />
132
            <input type="submit" value="Save" />
137
            <input type="submit" value="Save" />
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/additional-fields.tt (+198 lines)
Line 0 Link Here
1
[% USE Asset %]
2
[% USE AuthorisedValues %]
3
[% SET footerjs = 1 %]
4
[% INCLUDE 'doc-head-open.inc' %]
5
<title>Koha &rsaquo; Administration &rsaquo;
6
    [% SWITCH op %]
7
        [% CASE 'add_form' %][% IF field %]Modify additional field '[% field.name %]'[% ELSE %]Add additional field[% END %]
8
        [% CASE %]Manage additional fields
9
    [% END %]
10
</title>
11
[% INCLUDE 'doc-head-close.inc' %]
12
[% Asset.css('css/datatables.css') %]
13
</head>
14
15
<body id="ser_add_fields" class="ser">
16
    [% INCLUDE 'header.inc' %]
17
    [% INCLUDE 'cat-search.inc' %]
18
19
    <div id="breadcrumbs">
20
        <a href="/cgi-bin/koha/mainpage.pl">Home</a> &rsaquo; <a href="/cgi-bin/koha/admin/admin-home.pl">Administration</a> &rsaquo;
21
        [% SWITCH op %]
22
            [% CASE 'add_form' %]<a href="/cgi-bin/koha/admin/additional-fields.pl">Manage additional fields</a> &rsaquo; [% IF field %]Modify field '[% field.name %]'[% ELSE %]Add field[% END %]
23
            [% CASE 'list' %]<a href="/cgi-bin/koha/admin/additional-fields.pl">Manage additional fields</a> &rsaquo; Modify fields for '[% tablename %]'
24
            [% CASE %]Manage additional fields
25
        [% END %]
26
    </div>
27
28
    <div id="doc3" class="yui-t2">
29
    <div id="bd">
30
    <div id="yui-main">
31
    <div class="yui-b">
32
    [% IF op == 'list' %]
33
        <div id="toolbar" class="btn-toolbar">
34
            <a class="btn btn-default btn-sm" id="newfields" href="?op=add_form&amp;tablename=[% tablename %]"><i class="fa fa-plus"></i> Create field</a>
35
        </div>
36
    [% END %]
37
38
    [% IF messages %]
39
        [% FOR message IN messages %]
40
            [% IF message.code == 'insert' %]
41
                [% IF message.number > 0 %]
42
                    <div class="dialog message">The field has been inserted</div>
43
                [% ELSE %]
44
                    <div class="dialog alert">The field could not be inserted. Perhaps the name already exists?</div>
45
                [% END %]
46
            [% ELSIF message.code == 'update' %]
47
                [% IF message.number > 0 %]
48
                    <div class="dialog message">The field has been updated</div>
49
                [% ELSE %]
50
                    <div class="dialog alert">The field could not be updated. Perhaps the name already exists?</div>
51
                [% END %]
52
            [% ELSIF message.code == 'delete' %]
53
                [% IF message.number > 0 %]
54
                    <div class="dialog message">The field has been deleted</div>
55
                [% ELSE %]
56
                    <div class="dialog alert">The field could not be deleted. Check the log for errors.</div>
57
                [% END %]
58
            [% END %]
59
        [% END %]
60
    [% END %]
61
62
    [% IF op == 'list_tables' %]
63
        <h3>Additional fields</h3>
64
        <p>Select a table:</p>
65
        [% BLOCK table_option %]
66
            <li><a href="?tablename=[% value %]">[% content %] (<tt>[% value %]</tt>)</a></li>
67
        [% END %]
68
        <ul>
69
            [% WRAPPER table_option value="aqbasket" %]Order baskets[% END %]
70
            [% WRAPPER table_option value="subscription" %]Subscriptions[% END %]
71
        </ul>
72
    [% ELSIF op == 'list' %]
73
        <h3>Additional fields for '[% tablename %]'</h3>
74
        [% IF fields %]
75
            <table id="fieldst">
76
                <thead>
77
                    <tr>
78
                        <th>Name</th>
79
                        <th>Authorised value category</th>
80
                        <th>MARC field</th>
81
                        <th>Searchable</th>
82
                        <th>Actions</th>
83
                    </tr>
84
                </thead>
85
                <tbody>
86
                    [% FOR field IN fields %]
87
                        <tr>
88
                            <td>[% field.name %]</td>
89
                            <td>[% field.authorised_value_category %]</td>
90
                            <td>[% field.marcfield %]</td>
91
                            <td>
92
                                [% IF field.searchable %]Yes[% ELSE %]No[% END %]
93
                            </td>
94
                            <td class="actions">
95
                                <a class="btn btn-default btn-xs" href="?op=add_form&amp;field_id=[% field.id %]"><i class="fa fa-pencil"></i> Edit</a>
96
                                <a class="confirmdelete btn btn-default btn-xs" href="?op=delete&amp;field_id=[% field.id %]"><i class="fa fa-trash"></i> Delete</a>
97
                            </td>
98
                        </tr>
99
                    [% END %]
100
                </tbody>
101
            </table>
102
        [% ELSE %]
103
            [% IF tablename %]There are no additional fields defined for this table.[% END %]
104
        [% END %]
105
    [% ELSIF op == 'add_form' %]
106
        [% IF field %]
107
            <h3>Modify field</h3>
108
        [% ELSE %]
109
            <h3>Add field</h3>
110
        [% END %]
111
        <form action="" name="add_form" id="add_field" method="post">
112
            <fieldset class="rows">
113
                <ol>
114
                    <li>
115
                        <label for="name" class="required">Name: </label>
116
                        <input type="text" name="name" id="name" value="[% field.name | html %]" class="required" required="required" />
117
                        <span class="required">Required</span>
118
                    </li>
119
                    <li>
120
                        <label for="av">Authorised value category: </label>
121
                        <select name="authorised_value_category">
122
                            <option value="">None</option>
123
                            [% PROCESS options_for_authorised_value_categories
124
                                authorised_value_categories = AuthorisedValues.GetCategories({
125
                                    selected => field.authorised_value_category
126
                                })
127
                            %]
128
                        </select>
129
                    </li>
130
                    <li>
131
                        <label for="marcfield">MARC field: </label>
132
                        <input type="text" name="marcfield" id="marcfield" value="[% field.marcfield %]" />
133
                    </li>
134
                    <li>
135
                        <label for="searchable">Searchable: </label>
136
                        [% IF field.searchable %]
137
                            <input type="checkbox" name="searchable" id="searchable" checked="checked" />
138
                        [% ELSE %]
139
                            <input type="checkbox" name="searchable" id="searchable" />
140
                        [% END %]
141
                    </li>
142
                </ol>
143
            </fieldset>
144
            <fieldset class="action">
145
                [% IF field %]
146
                    <input type="hidden" name="field_id" value="[% field.id %]" />
147
                [% END %]
148
                <input type="hidden" name="tablename" value="[% tablename %]" />
149
                <input type="hidden" name="op" value="add" />
150
                <input type="submit" value="Save" />
151
                <a href="?tablename=[% tablename %]" class="cancel">Cancel</a>
152
            </fieldset>
153
        </form>
154
    [% END %]
155
156
    </div>
157
    </div>
158
159
<div class="yui-b">
160
[% INCLUDE 'admin-menu.inc' %]
161
</div>
162
</div>
163
164
[% MACRO jsinclude BLOCK %]
165
    [% INCLUDE "datatables.inc" %]
166
    <script type="text/javascript">
167
        $(document).ready(function(){
168
            $('#selecttable').find(":submit").hide();
169
            $('#selecttable select').change(function() {
170
                $('#selecttable').submit();
171
            });
172
173
            $("#fieldst").dataTable($.extend(true, {}, dataTablesDefaults, {
174
                'bAutoWidth': false,
175
                'sDom': 't<"bottom pager"ilpf>',
176
                'sPaginationType': 'four_button',
177
                'aLengthMenu': [[10, 20, 50, 100, -1], [10, 20, 50, 100, "All"]],
178
                'iDisplayLength': 20,
179
                'aaSorting': [[ 0, "asc" ]],
180
            }));
181
182
            $(".confirmdelete").click(function(){
183
                return confirm(_("Are you sure you want to delete this field?"));
184
            });
185
186
            $("#add_field").on('submit', function(){
187
                if ( $("#marcfield").val().length > 0
188
                    && $("select[name='authorised_value_category']" ).val().length > 0 ) {
189
                    alert("You cannot select an authorised value category and a marcfield");
190
                    return false;
191
                }
192
                return true;
193
            });
194
        });
195
    </script>
196
[% END %]
197
198
[% INCLUDE 'intranet-bottom.inc' %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/admin-home.tt (-1 / +5 lines)
Lines 158-164 Link Here
158
                </dl>
158
                </dl>
159
            [% END %]
159
            [% END %]
160
160
161
            [% IF ( ( CAN_user_parameters_manage_search_targets || CAN_user_parameters_manage_didyoumean || CAN_user_parameters_manage_column_config || CAN_user_parameters_manage_audio_alerts || CAN_user_parameters_manage_sms_providers && Koha.Preference('SMSSendDriver') == 'Email' ) || CAN_user_parameters_manage_usage_stats ) %]
161
            [% IF ( ( CAN_user_parameters_manage_search_targets || CAN_user_parameters_manage_didyoumean || CAN_user_parameters_manage_column_config || CAN_user_parameters_manage_audio_alerts || CAN_user_parameters_manage_sms_providers && Koha.Preference('SMSSendDriver') == 'Email' ) || CAN_user_parameters_manage_usage_stats || CAN_user_parameters_manage_additional_fields_baskets || CAN_user_parameters_manage_additional_fields_subscriptions ) %]
162
                <h3>Additional parameters</h3>
162
                <h3>Additional parameters</h3>
163
                <dl>
163
                <dl>
164
                        <!-- <dt><a href="/cgi-bin/koha/admin/printers.pl">Network Printers</a></dt>
164
                        <!-- <dt><a href="/cgi-bin/koha/admin/printers.pl">Network Printers</a></dt>
Lines 187-192 Link Here
187
                        <dt><a href="/cgi-bin/koha/admin/usage_statistics.pl">Share your usage statistics</a></dt>
187
                        <dt><a href="/cgi-bin/koha/admin/usage_statistics.pl">Share your usage statistics</a></dt>
188
                        <dd>Share with the Koha community the usage statistics of your Koha installation.</dd>
188
                        <dd>Share with the Koha community the usage statistics of your Koha installation.</dd>
189
                    [% END %]
189
                    [% END %]
190
                    [% IF ( CAN_user_parameters_manage_additional_fields_baskets || CAN_user_parameters_manage_additional_fields_subscriptions ) %]
191
                    <dt><a href="/cgi-bin/koha/admin/additional-fields.pl">Additional fields</a></dt>
192
                    <dd>Add additional fields to certain tables</dd>
193
                    [% END %]
190
                </dl>
194
                </dl>
191
            [% END %]
195
            [% END %]
192
            </div>
196
            </div>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/add_fields.tt (-179 lines)
Lines 1-179 Link Here
1
[% USE raw %]
2
[% USE Asset %]
3
[% USE AuthorisedValues %]
4
[% SET footerjs = 1 %]
5
[% INCLUDE 'doc-head-open.inc' %]
6
<title>Koha &rsaquo; Serials &rsaquo; Manage new fields for subscriptions
7
  [% IF op == "list" %] &rsaquo; List of fields
8
  [% ELSIF op == "add_form" %]
9
    [% IF field %] &rsaquo; Modify field
10
    [% ELSE %] &rsaquo; Add field
11
    [% END %]
12
  [% END %]
13
</title>
14
[% INCLUDE 'doc-head-close.inc' %]
15
[% Asset.css("css/datatables.css") | $raw %]
16
</head>
17
18
<body id="ser_add_fields" class="ser">
19
  [% INCLUDE 'header.inc' %]
20
  [% INCLUDE 'serials-search.inc' %]
21
22
  <div id="breadcrumbs">
23
    <a href="/cgi-bin/koha/mainpage.pl">Home</a> &rsaquo; <a href="/cgi-bin/koha/serials/serials-home.pl">Serials</a> &rsaquo; Manage new fields for subscriptions
24
  </div>
25
26
<div class="main container-fluid">
27
    <div class="row">
28
        <div class="col-sm-10 col-sm-push-2">
29
            <main>
30
31
  [% IF op == 'list' %]
32
    <div id="toolbar" class="btn-toolbar">
33
      <a class="btn btn-default btn-sm" id="newfields" href="/cgi-bin/koha/serials/add_fields.pl?op=add_form"><i class="fa fa-plus"></i> New field</a>
34
    </div>
35
  [% END %]
36
37
  [% IF messages %]
38
    [% FOR message IN messages %]
39
      [% IF message.code == 'insert' %]
40
        [% IF message.number > 0 %]
41
          <div class="dialog message">Field created.</div>
42
        [% ELSE %]
43
          <div class="dialog alert">The field could not be created. Perhaps the name already exists?</div>
44
        [% END %]
45
      [% ELSIF message.code == 'update' %]
46
        [% IF message.number > 0 %]
47
          <div class="dialog message">Field updated.</div>
48
        [% ELSE %]
49
          <div class="dialog alert">The field could not be updated. Perhaps the name already exists?</div>
50
        [% END %]
51
      [% ELSIF message.code == 'delete' %]
52
        [% IF message.number > 0 %]
53
          <div class="dialog message">Field deleted.</div>
54
        [% ELSE %]
55
          <div class="dialog alert">The field could not be deleted. Check the log for errors.</div>
56
        [% END %]
57
      [% END %]
58
    [% END %]
59
  [% END %]
60
61
  [% IF op == 'list' %]
62
    <h3>Additional fields for subscriptions</h3>
63
    [% IF fields %]
64
      <table id="fieldst">
65
        <thead>
66
          <tr>
67
            <th>Name</th>
68
            <th>Authorised value category</th>
69
            <th>Marc field</th>
70
            <th>Searchable</th>
71
            <th>Actions</th>
72
          </tr>
73
        </thead>
74
        <tbody>
75
          [% FOR field IN fields %]
76
            <tr>
77
              <td>[% field.name | html %]</td>
78
              <td>[% field.authorised_value_category | html %]</td>
79
              <td>[% field.marcfield | html %]</td>
80
              <td>
81
                [% IF field.searchable %]Yes[% ELSE %]No[% END %]
82
              </td>
83
              <td class="actions">
84
                <a class="btn btn-default btn-xs" href="/cgi-bin/koha/serials/add_fields.pl?op=add_form&amp;field_id=[% field.id | html %]"><i class="fa fa-pencil"></i> Edit</a>
85
                <a class="confirmdelete btn btn-default btn-xs" href="/cgi-bin/koha/serials/add_fields.pl?op=delete&amp;field_id=[% field.id | html %]"><i class="fa fa-trash"></i> Delete</a>
86
              </td>
87
            </tr>
88
          [% END %]
89
        </tbody>
90
      </table>
91
    [% ELSE %]
92
      There is no field defined.
93
    [% END %]
94
  [% ELSIF op == 'add_form' %]
95
    [% IF field %]
96
      <h3>Modify field</h3>
97
    [% ELSE %]
98
      <h3>Add field</h3>
99
    [% END %]
100
    <form action="/cgi-bin/koha/serials/add_fields.pl" name="add_form" id="add_field" method="post">
101
      <fieldset class="rows">
102
        <ol>
103
          <li>
104
            <label for="name" class="required">Name: </label>
105
            <input type="text" name="name" id="name" value="[% field.name | html %]" class="required" required="required" />
106
            <span class="required">Required</span>
107
          </li>
108
          <li>
109
            <label for="av">Authorised value category: </label>
110
            <select id="av" name="authorised_value_category">
111
              <option value="">None</option>
112
              [% PROCESS options_for_authorised_value_categories authorised_value_categories => AuthorisedValues.GetCategories( selected => field.authorised_value_category ) %]
113
            </select>
114
          </li>
115
          <li>
116
            <label for="marcfield">Marc field: </label>
117
            <input type="text" name="marcfield" id="marcfield" value="[% field.marcfield | html %]" />
118
          </li>
119
          <li>
120
            <label for="searchable">Searchable: </label>
121
            [% IF field.searchable %]
122
              <input type="checkbox" name="searchable" id="searchable" checked="checked" />
123
            [% ELSE %]
124
              <input type="checkbox" name="searchable" id="searchable" />
125
            [% END %]
126
          </li>
127
        </ol>
128
      </fieldset>
129
      <fieldset class="action">
130
        [% IF field %]
131
          <input type="hidden" name="field_id" value="[% field.id | html %]" />
132
        [% END %]
133
        <input type="hidden" name="op" value="add" />
134
        <input type="submit" value="Save" />
135
        <a href="/cgi-bin/koha/serials/add_fields.pl" class="cancel">Cancel</a>
136
      </fieldset>
137
    </form>
138
  [% END %]
139
140
            </main>
141
        </div> <!-- /.col-sm-10.col-sm-push-2 -->
142
143
        <div class="col-sm-2 col-sm-pull-10">
144
            <aside>
145
                [% INCLUDE 'serials-menu.inc' %]
146
            </aside>
147
        </div> <!-- /.col-sm-2.col-sm-pull-10 -->
148
     </div> <!-- /.row -->
149
150
[% MACRO jsinclude BLOCK %]
151
    [% INCLUDE "datatables.inc" %]
152
    <script>
153
        $(document).ready(function(){
154
155
            $("#fieldst").dataTable($.extend(true, {}, dataTablesDefaults, {
156
                'bAutoWidth': false,
157
                'sPaginationType': 'four_button',
158
                "aoColumnDefs": [
159
                    { "aTargets": [ -1 ], "bSortable": false, "bSearchable": false },
160
                ]
161
            }));
162
163
            $(".confirmdelete").click(function(){
164
                return confirm(_("Are you sure you want to delete this field?"));
165
            });
166
167
            $("#add_field").on('submit', function(){
168
                if ( $("#marcfield").val().length > 0
169
                    && $("select[name='authorised_value_category']" ).val().length > 0 ) {
170
                    alert("You cannot select an authorised value category and a marcfield");
171
                    return false;
172
                }
173
                return true;
174
            });
175
        });
176
    </script>
177
[% END %]
178
179
[% INCLUDE 'intranet-bottom.inc' %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-search.tt (-15 / +1 lines)
Lines 258-278 Link Here
258
                  <label for="to">Expires before:</label>
258
                  <label for="to">Expires before:</label>
259
                  <input type="text" id="to" name="expiration_date_filter" value="[% expiration_date_filter | $KohaDates %]" size="10" maxlength="10" class="datepickerto" />
259
                  <input type="text" id="to" name="expiration_date_filter" value="[% expiration_date_filter | $KohaDates %]" size="10" maxlength="10" class="datepickerto" />
260
                </li>
260
                </li>
261
                [% FOR field IN additional_fields_for_subscription %]
261
                [% INCLUDE 'additional-fields-entry.inc' available=additional_fields_for_subscription values=additional_field_filters wrap_fieldset=0 %]
262
                  <li>
263
                    <label for="additional_field_[% field.id | html %]"> [% field.name | html %]: </label>
264
                    [% IF field.authorised_value_choices %]
265
                      <select id="additional_field_[% field.id | html %]" name="additional_field_[% field.id | html %]_filter">
266
                        <option value="">All</option>
267
                        [% FOREACH av IN field.authorised_value_choices %]
268
                          <option value="[% av.authorised_value | html %]">[% av.lib | html %]</option>
269
                        [% END %]
270
                      </select>
271
                    [% ELSE %]
272
                      <input id="additional_field_[% field.id | html %]" type="text" value="[% additional_fields.${field.name} | html %]" name="additional_field_[% field.id | html %]_filter" />
273
                    [% END %]
274
                  </li>
275
                [% END %]
276
              </ol>
262
              </ol>
277
              <input type="hidden" name="searched" value="1" />
263
              <input type="hidden" name="searched" value="1" />
278
              <fieldset class="action">
264
              <fieldset class="action">
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-add.tt (-30 / +3 lines)
Lines 445-480 fieldset.rows li.radio { width: 100%; } /* override staff-global.css */ Link Here
445
                            </fieldset>
445
                            </fieldset>
446
446
447
                            [% IF additional_fields_for_subscription %]
447
                            [% IF additional_fields_for_subscription %]
448
                              <div id="subscription_additional_fields">
448
                                <div id="subscription_additional_fields">
449
                                <fieldset class="rows">
449
                                    [% INCLUDE 'additional-fields-entry.inc' available=additional_fields_for_subscription values=additional_fields %]
450
                                  <legend>Additional fields</legend>
450
                                </div>
451
                                  <ol>
452
                                    [% FOR field IN additional_fields_for_subscription %]
453
                                      <li>
454
                                        <label for="additional_field_[% field.id | html %]"> [% field.name | html %]: </label>
455
                                        [% IF field.authorised_value_choices %]
456
                                          <select name="additional_field_[% field.id | html %]" id="additional_field_[% field.id | html %]">
457
                                            [% FOREACH av IN field.authorised_value_choices %]
458
                                              [% IF av.authorised_value == additional_fields.${field.name} %]
459
                                                <option value="[% av.authorised_value | html %]" selected="selected">[% av.lib | html %]</option>
460
                                              [% ELSE %]
461
                                                <option value="[% av.authorised_value | html %]">[% av.lib | html %]</option>
462
                                              [% END %]
463
                                            [% END %]
464
                                          </select> (Authorised values for [% field.authorised_value_category | html %])
465
                                        [% ELSE %]
466
                                          [% IF field.marcfield %]
467
                                            <input type="text" value="[% additional_fields.${field.name} | html %]" id="additional_field_[% field.id | html %]" name="additional_field_[% field.id | html %]" readonly="readonly" />
468
                                            This value will be filled with the [% field.marcfield | html %] subfield of the selected biblio.
469
                                          [% ELSE %]
470
                                            <input type="text" value="[% additional_fields.${field.name} | html %]" id="additional_field_[% field.id | html %]" name="additional_field_[% field.id | html %]" />
471
                                          [% END %]
472
                                        [% END %]
473
                                      </li>
474
                                    [% END %]
475
                                  </ol>
476
                                </fieldset>
477
                              </div>
478
                            [% END %]
451
                            [% END %]
479
452
480
                            <fieldset class="action">
453
                            <fieldset class="action">
(-)a/serials/serials-search.pl (-15 / +6 lines)
Lines 78-96 if ( $op and $op eq "close" ) { Link Here
78
78
79
79
80
my $additional_fields = Koha::AdditionalField->all( { tablename => 'subscription', searchable => 1 } );
80
my $additional_fields = Koha::AdditionalField->all( { tablename => 'subscription', searchable => 1 } );
81
my $additional_field_filters;
81
my $additional_field_filters = Koha::AdditionalField->get_filters_from_query( {
82
for my $field ( @$additional_fields ) {
82
    tablename => 'subscription',
83
    my $filter_value = $query->param('additional_field_' . $field->{id} . '_filter');
83
    query => $query,
84
    if ( defined $filter_value and $filter_value ne q|| ) {
84
} );
85
        $additional_field_filters->{ $field->{name} } = {
86
            value => $filter_value,
87
            authorised_value_category => $field->{authorised_value_category},
88
        };
89
    }
90
    if ( $field->{authorised_value_category} ) {
91
        $field->{authorised_value_choices} = GetAuthorisedValues( $field->{authorised_value_category} );
92
    }
93
}
94
85
95
my $expiration_date_dt = $expiration_date ? dt_from_string( $expiration_date ) : undef;
86
my $expiration_date_dt = $expiration_date ? dt_from_string( $expiration_date ) : undef;
96
my @subscriptions;
87
my @subscriptions;
Lines 105-111 if ($searched){ Link Here
105
            publisher    => $publisher,
96
            publisher    => $publisher,
106
            bookseller   => $bookseller,
97
            bookseller   => $bookseller,
107
            branch       => $branch,
98
            branch       => $branch,
108
            additional_fields => [ map{ { name => $_, value => $additional_field_filters->{$_}{value}, authorised_value_category => $additional_field_filters->{$_}{authorised_value_category} } } keys %$additional_field_filters ],
99
            additional_fields => $additional_field_filters,
109
            location     => $location,
100
            location     => $location,
110
            expiration_date => $expiration_date_dt,
101
            expiration_date => $expiration_date_dt,
111
        }
102
        }
Lines 145-151 $template->param( Link Here
145
    expiration_date_filter => $expiration_date_dt,
136
    expiration_date_filter => $expiration_date_dt,
146
    done_searched => $searched,
137
    done_searched => $searched,
147
    routing       => $routing,
138
    routing       => $routing,
148
    additional_field_filters => $additional_field_filters,
139
    additional_field_filters => Koha::AdditionalField->get_filters_as_values( $additional_field_filters ),
149
    additional_fields_for_subscription => $additional_fields,
140
    additional_fields_for_subscription => $additional_fields,
150
    marcflavour   => (uc(C4::Context->preference("marcflavour")))
141
    marcflavour   => (uc(C4::Context->preference("marcflavour")))
151
);
142
);
(-)a/serials/subscription-add.pl (-38 / +13 lines)
Lines 137-150 $template->param( Link Here
137
    locations_loop=>$locations_loop,
137
    locations_loop=>$locations_loop,
138
);
138
);
139
139
140
140
$template->param( additional_fields_for_subscription => scalar Koha::AdditionalField->all( { tablename => 'subscription' } ) );
141
my $additional_fields = Koha::AdditionalField->all( { tablename => 'subscription' } );
142
for my $field ( @$additional_fields ) {
143
    if ( $field->{authorised_value_category} ) {
144
        $field->{authorised_value_choices} = GetAuthorisedValues( $field->{authorised_value_category} );
145
    }
146
}
147
$template->param( additional_fields_for_subscription => $additional_fields );
148
141
149
my $typeloop = { map { $_->{itemtype} => $_ } @{ Koha::ItemTypes->search_with_localization->unblessed } };
142
my $typeloop = { map { $_->{itemtype} => $_ } @{ Koha::ItemTypes->search_with_localization->unblessed } };
150
143
Lines 349-356 sub redirect_add_subscription { Link Here
349
        $skip_serialseq, $itemtype, $previousitemtype
342
        $skip_serialseq, $itemtype, $previousitemtype
350
    );
343
    );
351
344
352
    my $additional_fields = Koha::AdditionalField->all( { tablename => 'subscription' } );
345
    Koha::AdditionalField->update_fields_from_query( {
353
    insert_additional_fields( $additional_fields, $biblionumber, $subscriptionid );
346
        tablename => 'subscription',
347
        record_id => $subscriptionid,
348
        query => $query,
349
        marc_record => GetMarcBiblio({ biblionumber => $biblionumber, embed_items => 1 })
350
    } );
354
351
355
    print $query->redirect("/cgi-bin/koha/serials/subscription-detail.pl?subscriptionid=$subscriptionid");
352
    print $query->redirect("/cgi-bin/koha/serials/subscription-detail.pl?subscriptionid=$subscriptionid");
356
    return;
353
    return;
Lines 433-466 sub redirect_mod_subscription { Link Here
433
        $skip_serialseq, $itemtype, $previousitemtype
430
        $skip_serialseq, $itemtype, $previousitemtype
434
    );
431
    );
435
432
436
    my $additional_fields = Koha::AdditionalField->all( { tablename => 'subscription' } );
433
    Koha::AdditionalField->update_fields_from_query( {
437
    insert_additional_fields( $additional_fields, $biblionumber, $subscriptionid );
434
        tablename => 'subscription',
435
        record_id => $subscriptionid,
436
        query => $query,
437
        marc_record => GetMarcBiblio({ biblionumber => $biblionumber, embed_items => 1 })
438
    } );
438
439
439
    print $query->redirect("/cgi-bin/koha/serials/subscription-detail.pl?subscriptionid=$subscriptionid");
440
    print $query->redirect("/cgi-bin/koha/serials/subscription-detail.pl?subscriptionid=$subscriptionid");
440
    return;
441
    return;
441
}
442
}
442
443
sub insert_additional_fields {
444
    my ( $additional_fields, $biblionumber, $subscriptionid ) = @_;
445
    my $record = GetMarcBiblio({
446
        biblionumber => $biblionumber,
447
        embed_items  => 1 });
448
    for my $field ( @$additional_fields ) {
449
        my $af = Koha::AdditionalField->new({ id => $field->{id} })->fetch;
450
        if ( $af->{marcfield} ) {
451
            my ( $field, $subfield ) = split /\$/, $af->{marcfield};
452
            $af->{values} = undef;
453
            if ( $field and $subfield ) {
454
                my $value = $record->subfield( $field, $subfield );
455
                $af->{values} = {
456
                    $subscriptionid => $value
457
                };
458
            }
459
        } else {
460
            $af->{values} = {
461
                $subscriptionid => scalar $query->param('additional_field_' . $field->{id})
462
            } if defined $query->param('additional_field_' . $field->{id});
463
        }
464
        $af->insert_values;
465
    }
466
}
467
- 

Return to bug 15774