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

(-)a/C4/Acquisition.pm (+12 lines)
Lines 2161-2166 sub GetHistory { Link Here
2161
    my $ordernumber = $params{ordernumber};
2161
    my $ordernumber = $params{ordernumber};
2162
    my $search_children_too = $params{search_children_too} || 0;
2162
    my $search_children_too = $params{search_children_too} || 0;
2163
    my $created_by = $params{created_by} || [];
2163
    my $created_by = $params{created_by} || [];
2164
    my $additional_fields = $params{additional_fields} // [];
2164
2165
2165
    my @order_loop;
2166
    my @order_loop;
2166
    my $total_qty         = 0;
2167
    my $total_qty         = 0;
Lines 2302-2307 sub GetHistory { Link Here
2302
        push @query_params, @$created_by;
2303
        push @query_params, @$created_by;
2303
    }
2304
    }
2304
2305
2306
    if ( @$additional_fields ) {
2307
        my $matching_record_ids_for_additional_fields = Koha::AdditionalField->get_matching_record_ids( {
2308
            fields => $additional_fields,
2309
            tablename => 'aqbasket',
2310
            exact_match => 0,
2311
        } );
2312
        return [] unless @$matching_record_ids_for_additional_fields;
2313
2314
        # No parameterization because record IDs come directly from DB
2315
        $query .= ' AND aqbasket.basketno IN ( ' . join( ',', @$matching_record_ids_for_additional_fields ) . ' )';
2316
    }
2305
2317
2306
    if ( C4::Context->preference("IndependentBranches") ) {
2318
    if ( C4::Context->preference("IndependentBranches") ) {
2307
        unless ( C4::Context->IsSuperLibrarian() ) {
2319
        unless ( C4::Context->IsSuperLibrarian() ) {
(-)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 37-42 use C4::Items; Link Here
37
use C4::Suggestions;
37
use C4::Suggestions;
38
use Date::Calc qw/Add_Delta_Days/;
38
use Date::Calc qw/Add_Delta_Days/;
39
39
40
use Koha::AdditionalField;
41
40
=head1 NAME
42
=head1 NAME
41
43
42
basket.pl
44
basket.pl
Lines 392-397 if ( $op eq 'delete_confirm' ) { Link Here
392
        unclosable           => @orders ? 0 : 1, 
394
        unclosable           => @orders ? 0 : 1, 
393
        has_budgets          => $has_budgets,
395
        has_budgets          => $has_budgets,
394
        duplinbatch          => $duplinbatch,
396
        duplinbatch          => $duplinbatch,
397
        available_additional_fields => Koha::AdditionalField->all( { tablename => 'aqbasket' } ),
398
        additional_field_values => Koha::AdditionalField->fetch_all_values( {
399
            tablename => 'aqbasket',
400
            record_id => $basketno,
401
        } )->{$basketno},
395
    );
402
    );
396
}
403
}
397
404
(-)a/acqui/basketheader.pl (+16 lines)
Lines 56-61 use C4::Acquisition qw/GetBasket NewBasket ModBasketHeader/; Link Here
56
use C4::Contract qw/GetContracts/;
56
use C4::Contract qw/GetContracts/;
57
57
58
use Koha::Acquisition::Bookseller;
58
use Koha::Acquisition::Bookseller;
59
use Koha::AdditionalField;
59
60
60
my $input = new CGI;
61
my $input = new CGI;
61
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
62
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
Lines 77-82 my $basket; Link Here
77
my $op = $input ->param('op');
78
my $op = $input ->param('op');
78
my $is_an_edit= $input ->param('is_an_edit');
79
my $is_an_edit= $input ->param('is_an_edit');
79
80
81
$template->param( available_additional_fields => scalar Koha::AdditionalField->all( { tablename => 'aqbasket' } ) );
82
80
if ( $op eq 'add_form' ) {
83
if ( $op eq 'add_form' ) {
81
    my @contractloop;
84
    my @contractloop;
82
    if ( $basketno ) {
85
    if ( $basketno ) {
Lines 97-102 if ( $op eq 'add_form' ) { Link Here
97
            }
100
            }
98
        }
101
        }
99
        $template->param( is_an_edit => 1);
102
        $template->param( is_an_edit => 1);
103
        $template->param(
104
            additional_field_values => Koha::AdditionalField->fetch_all_values( {
105
                tablename => 'aqbasket',
106
                record_id => $basketno,
107
            } )->{$basketno},
108
        );
100
    } else {
109
    } else {
101
    #new basket
110
    #new basket
102
        my $basket;
111
        my $basket;
Lines 161-166 if ( $op eq 'add_form' ) { Link Here
161
            $input->param('billingplace'),
170
            $input->param('billingplace'),
162
        );
171
        );
163
    }
172
    }
173
174
    Koha::AdditionalField->update_fields_from_query( {
175
        tablename => 'aqbasket',
176
        record_id => $basketno,
177
        query => $input,
178
    } );
179
164
    print $input->redirect('basket.pl?basketno='.$basketno);
180
    print $input->redirect('basket.pl?basketno='.$basketno);
165
    exit 0;
181
    exit 0;
166
}
182
}
(-)a/acqui/histsearch.pl (+9 lines)
Lines 58-63 use C4::Acquisition; Link Here
58
use C4::Debug;
58
use C4::Debug;
59
use C4::Branch;
59
use C4::Branch;
60
use C4::Koha;
60
use C4::Koha;
61
use Koha::AdditionalField;
61
use Koha::DateUtils;
62
use Koha::DateUtils;
62
63
63
my $input = new CGI;
64
my $input = new CGI;
Lines 95-100 my ( $template, $loggedinuser, $cookie ) = get_template_and_user( Link Here
95
    }
96
    }
96
);
97
);
97
98
99
$template->param( available_additional_fields => scalar Koha::AdditionalField->all( { tablename => 'aqbasket', searchable => 1 } ) );
100
my $additional_field_filters = Koha::AdditionalField->get_filters_from_query( {
101
    tablename => 'aqbasket',
102
    query => $input,
103
} );
104
98
my $order_loop;
105
my $order_loop;
99
# If we're supplied any value then we do a search. Otherwise we don't.
106
# If we're supplied any value then we do a search. Otherwise we don't.
100
if ($do_search) {
107
if ($do_search) {
Lines 114-119 if ($do_search) { Link Here
114
        ordernumber => $ordernumber,
121
        ordernumber => $ordernumber,
115
        search_children_too => $search_children_too,
122
        search_children_too => $search_children_too,
116
        created_by => \@created_by,
123
        created_by => \@created_by,
124
        additional_fields => $additional_field_filters,
117
    );
125
    );
118
}
126
}
119
127
Lines 146-151 $template->param( Link Here
146
    budget_id               => $budget,
154
    budget_id               => $budget,
147
    bp_loop                 => $bp_loop,
155
    bp_loop                 => $bp_loop,
148
    search_done             => $do_search,
156
    search_done             => $do_search,
157
    additional_field_filters => Koha::AdditionalField->get_filters_as_values( $additional_field_filters ),
149
    debug                   => $debug || $input->param('debug') || 0,
158
    debug                   => $debug || $input->param('debug') || 0,
150
    uc(C4::Context->preference("marcflavour")) => 1
159
    uc(C4::Context->preference("marcflavour")) => 1
151
);
160
);
(-)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 107-112 if ( $op eq 'add_form' ) { Link Here
107
        $field = Koha::AdditionalField->new( { id => $field_id } )->fetch;
108
        $field = Koha::AdditionalField->new( { id => $field_id } )->fetch;
108
    }
109
    }
109
110
111
    $tablename = $field->{tablename};
112
110
    $template->param(
113
    $template->param(
111
        field => $field,
114
        field => $field,
112
        categories => $categories,
115
        categories => $categories,
Lines 114-125 if ( $op eq 'add_form' ) { Link Here
114
}
117
}
115
118
116
if ( $op eq 'list' ) {
119
if ( $op eq 'list' ) {
117
    my $fields = Koha::AdditionalField->all( { tablename => 'subscription' } );
120
    my $fields = Koha::AdditionalField->all( { tablename => $tablename } );
118
    $template->param( fields => $fields );
121
    $template->param( fields => $fields );
119
}
122
}
120
123
121
$template->param(
124
$template->param(
122
    op => $op,
125
    op => $op,
126
    tablename => $tablename,
123
    messages => \@messages,
127
    messages => \@messages,
124
);
128
);
125
129
(-)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 lines)
Lines 72-77 Link Here
72
    <li><a href="/cgi-bin/koha/admin/didyoumean.pl">Did you mean?</a></li>
72
    <li><a href="/cgi-bin/koha/admin/didyoumean.pl">Did you mean?</a></li>
73
    <li><a href="/cgi-bin/koha/admin/columns_settings.pl">Columns settings</a></li>
73
    <li><a href="/cgi-bin/koha/admin/columns_settings.pl">Columns settings</a></li>
74
    <li><a href="/cgi-bin/koha/admin/audio_alerts.pl">Audio alerts</a></li>
74
    <li><a href="/cgi-bin/koha/admin/audio_alerts.pl">Audio alerts</a></li>
75
    <li><a href="/cgi-bin/koha/admin/additional-fields.pl">Additional fields</a></li>
75
</ul>
76
</ul>
76
</div>
77
</div>
77
</div>
78
</div>
(-)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 (+1 lines)
Lines 306-311 Link Here
306
                [% IF ( creationdate ) %]<li><span class="label">Opened on:</span>  [% creationdate | $KohaDates %]</li>[% END %]
306
                [% IF ( creationdate ) %]<li><span class="label">Opened on:</span>  [% creationdate | $KohaDates %]</li>[% END %]
307
                [% IF ( closedate ) %]<li><span class="label">Closed on:</span> [% closedate | $KohaDates %]</li>[% END %]
307
                [% IF ( closedate ) %]<li><span class="label">Closed on:</span> [% closedate | $KohaDates %]</li>[% END %]
308
                [% IF ( estimateddeliverydate ) %]<li><span class="label">Estimated delivery date:</span> [% estimateddeliverydate | $KohaDates  %]</li>[% END %]
308
                [% IF ( estimateddeliverydate ) %]<li><span class="label">Estimated delivery date:</span> [% estimateddeliverydate | $KohaDates  %]</li>[% END %]
309
                [% INCLUDE 'additional-fields-display.inc' available=available_additional_fields values=additional_field_values %]
309
310
310
                </ol>
311
                </ol>
311
                </div>
312
                </div>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketheader.tt (+5 lines)
Lines 115-120 Link Here
115
                [% END %]
115
                [% END %]
116
            </ol>
116
            </ol>
117
        </fieldset>
117
        </fieldset>
118
119
        [% IF available_additional_fields %]
120
            [% INCLUDE 'additional-fields-entry.inc' available=available_additional_fields values=additional_field_values %]
121
        [% END %]
122
118
        <fieldset class="action">
123
        <fieldset class="action">
119
            <input type="hidden" name="op" value="add_validate" />
124
            <input type="hidden" name="op" value="add_validate" />
120
            <input type="submit" value="Save" />
125
            <input type="submit" value="Save" />
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/histsearch.tt (+3 lines)
Lines 70-75 var MSG_REMOVE_PATRON = _("Remove"); Link Here
70
            <label for="basketgroupname">Basket group:</label>
70
            <label for="basketgroupname">Basket group:</label>
71
            <input type="text" name="basketgroupname" id="basketgroupname" value="[% basketgroupname %]" />
71
            <input type="text" name="basketgroupname" id="basketgroupname" value="[% basketgroupname %]" />
72
        </li>
72
        </li>
73
74
        [% INCLUDE 'additional-fields-entry.inc' available=available_additional_fields values=additional_field_filters wrap_fieldset=0 %]
75
73
        <li>
76
        <li>
74
          <label for="ordernumber">Order line:</label>
77
          <label for="ordernumber">Order line:</label>
75
          <input type="text" name="ordernumber" id="ordernumber" value="[% ordernumber %]" />
78
          <input type="text" name="ordernumber" id="ordernumber" value="[% ordernumber %]" />
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/additional-fields.tt (+194 lines)
Line 0 Link Here
1
[% INCLUDE 'doc-head-open.inc' %]
2
<title>Koha &rsaquo; Administration &rsaquo;
3
    [% SWITCH op %]
4
        [% CASE 'add_form' %][% IF field %]Modify additional field '[% field.name %]'[% ELSE %]Add additional field[% END %]
5
        [% CASE %]Manage additional fields
6
    [% END %]
7
</title>
8
[% INCLUDE 'doc-head-close.inc' %]
9
<link rel="stylesheet" type="text/css" href="[% themelang %]/css/datatables.css" />
10
[% INCLUDE "datatables.inc" %]
11
<script type="text/javascript">
12
//<![CDATA[
13
    $(document).ready(function(){
14
        $('#selecttable').find(":submit").hide();
15
        $('#selecttable select').change(function() {
16
            $('#selecttable').submit();
17
        });
18
19
        $("#fieldst").dataTable($.extend(true, {}, dataTablesDefaults, {
20
            'bAutoWidth': false,
21
            'sDom': 't<"bottom pager"ilpf>',
22
            'sPaginationType': 'four_button',
23
            'aLengthMenu': [[10, 20, 50, 100, -1], [10, 20, 50, 100, "All"]],
24
            'iDisplayLength': 20,
25
            'aaSorting': [[ 0, "asc" ]],
26
        }));
27
28
        $(".confirmdelete").click(function(){
29
            return confirm(_("Are you sure you want to delete this field?"));
30
        });
31
32
        $("#add_field").on('submit', function(){
33
            if ( $("#marcfield").val().length > 0
34
                && $("select[name='authorised_value_category']" ).val().length > 0 ) {
35
                alert("You cannot select an authorised value category and a marcfield");
36
                return false;
37
            }
38
            return true;
39
        });
40
    });
41
//]]>
42
</script>
43
</head>
44
45
<body id="ser_add_fields" class="ser">
46
    [% INCLUDE 'header.inc' %]
47
    [% INCLUDE 'cat-search.inc' %]
48
49
    <div id="breadcrumbs">
50
        <a href="/cgi-bin/koha/mainpage.pl">Home</a> &rsaquo; <a href="/cgi-bin/koha/admin/admin-home.pl">Administration</a> &rsaquo;
51
        [% SWITCH op %]
52
            [% 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 %]
53
            [% CASE 'list' %]<a href="/cgi-bin/koha/admin/additional-fields.pl">Manage additional fields</a> &rsaquo; Modify fields for '[% tablename %]'
54
            [% CASE %]Manage additional fields
55
        [% END %]
56
    </div>
57
58
    <div id="doc3" class="yui-t2">
59
    <div id="bd">
60
    <div id="yui-main">
61
    <div class="yui-b">
62
    [% IF op == 'list' %]
63
        <div id="toolbar" class="btn-toolbar">
64
            <a class="btn btn-small" id="newfields" href="?op=add_form&amp;tablename=[% tablename %]"><i class="fa fa-plus"></i> Create field</a>
65
        </div>
66
    [% END %]
67
68
    [% IF messages %]
69
        [% FOR message IN messages %]
70
            [% IF message.code == 'insert' %]
71
                [% IF message.number > 0 %]
72
                    <div class="dialog message">The field has been inserted</div>
73
                [% ELSE %]
74
                    <div class="dialog alert">The field has not been inserted (name still exist?)</div>
75
                [% END %]
76
            [% ELSIF message.code == 'update' %]
77
                [% IF message.number > 0 %]
78
                    <div class="dialog message">The field has been updated</div>
79
                [% ELSE %]
80
                    <div class="dialog alert">The field has not been updated (name still exist?)</div>
81
                [% END %]
82
            [% ELSIF message.code == 'delete' %]
83
                [% IF message.number > 0 %]
84
                    <div class="dialog message">The field has been deleted</div>
85
                [% ELSE %]
86
                    <div class="dialog alert">The field has not been deleted</div>
87
                [% END %]
88
            [% END %]
89
        [% END %]
90
    [% END %]
91
92
    [% IF op == 'list_tables' %]
93
        <h3>Additional fields</h3>
94
        <p>Select a table:</p>
95
        [% BLOCK table_option %]
96
            <li><a href="?tablename=[% value %]">[% content %] (<tt>[% value %]</tt>)</a></li>
97
        [% END %]
98
        <ul>
99
            [% WRAPPER table_option value="aqbasket" %]Order baskets[% END %]
100
            [% WRAPPER table_option value="subscription" %]Subscriptions[% END %]
101
        </ul>
102
    [% ELSIF op == 'list' %]
103
        <h3>Additional fields for '[% tablename %]'</h3>
104
        [% IF fields %]
105
            <table id="fieldst">
106
                <thead>
107
                    <tr>
108
                        <th>Name</th>
109
                        <th>Authorised value category</th>
110
                        <th>MARC field</th>
111
                        <th>Searchable</th>
112
                        <th>Actions</th>
113
                    </tr>
114
                </thead>
115
                <tbody>
116
                    [% FOR field IN fields %]
117
                        <tr>
118
                            <td>[% field.name %]</td>
119
                            <td>[% field.authorised_value_category %]</td>
120
                            <td>[% field.marcfield %]</td>
121
                            <td>
122
                                [% IF field.searchable %]Yes[% ELSE %]No[% END %]
123
                            </td>
124
                            <td>
125
                                <a href="?op=add_form&amp;field_id=[% field.id %]" title="Edit this field">Edit</a>
126
                                <a class="confirmdelete" href="?op=delete&amp;field_id=[% field.id %]" title="Delete this field">Delete</a>
127
                            </td>
128
                        </tr>
129
                    [% END %]
130
                </tbody>
131
            </table>
132
        [% ELSE %]
133
            [% IF tablename %]There are no additional fields defined for this table.[% END %]
134
        [% END %]
135
    [% ELSIF op == 'add_form' %]
136
        [% IF field %]
137
            <h3>Modify field</h3>
138
        [% ELSE %]
139
            <h3>Add field</h3>
140
        [% END %]
141
        <form action="" name="add_form" id="add_field" method="post">
142
            <fieldset class="rows">
143
                <ol>
144
                    <li>
145
                        <label for="name" class="required">Name: </label>
146
                        <input type="text" name="name" id="name" value="[% field.name %]" />
147
                    </li>
148
                    <li>
149
                        <label for="av">Authorised value category: </label>
150
                        <select name="authorised_value_category">
151
                            <option value="">None</option>
152
                            [% FOR category IN categories %]
153
                                [% IF field.authorised_value_category == category %]
154
                                    <option value="[% category %]" selected="selected">[% category %]</option>
155
                                [% ELSE %]
156
                                    <option value="[% category %]">[% category %]</option>
157
                                [% END %]
158
                            [% END %]
159
                        </select>
160
                    </li>
161
                    <li>
162
                        <label for="marcfield">MARC field: </label>
163
                        <input type="text" name="marcfield" id="marcfield" value="[% field.marcfield %]" />
164
                    </li>
165
                    <li>
166
                        <label for="searchable">Searchable: </label>
167
                        [% IF field.searchable %]
168
                            <input type="checkbox" name="searchable" id="searchable" checked="checked" />
169
                        [% ELSE %]
170
                            <input type="checkbox" name="searchable" id="searchable" />
171
                        [% END %]
172
                    </li>
173
                </ol>
174
            </fieldset>
175
            <fieldset class="action">
176
                [% IF field %]
177
                    <input type="hidden" name="field_id" value="[% field.id %]" />
178
                [% END %]
179
                <input type="hidden" name="tablename" value="[% tablename %]" />
180
                <input type="hidden" name="op" value="add" />
181
                <input type="submit" value="Save" />
182
                <a href="?tablename=[% tablename %]" class="cancel">Cancel</a>
183
            </fieldset>
184
        </form>
185
    [% END %]
186
187
    </div>
188
    </div>
189
190
<div class="yui-b">
191
[% INCLUDE 'admin-menu.inc' %]
192
</div>
193
</div>
194
[% INCLUDE 'intranet-bottom.inc' %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/admin-home.tt (+2 lines)
Lines 115-120 Link Here
115
                        <dt><a href="/cgi-bin/koha/admin/sms_providers.pl">SMS cellular providers</a></dt>
115
                        <dt><a href="/cgi-bin/koha/admin/sms_providers.pl">SMS cellular providers</a></dt>
116
                        <dd>Define a list of cellular providers for sending SMS messages via email.</dd>
116
                        <dd>Define a list of cellular providers for sending SMS messages via email.</dd>
117
                    [% END %]
117
                    [% END %]
118
                    <dt><a href="/cgi-bin/koha/admin/additional-fields.pl">Additional fields</a></dt>
119
                    <dd>Add additional fields to certain tables</dd>
118
                </dl>
120
                </dl>
119
            </div>
121
            </div>
120
        </div>
122
        </div>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/add_fields.tt (-176 lines)
Lines 1-176 Link Here
1
[% INCLUDE 'doc-head-open.inc' %]
2
<title>Koha &rsaquo; Serials &rsaquo; Manage new fields for subscriptions
3
  [% IF op == "list" %] &rsaquo; List of fields
4
  [% ELSIF op == "add_form" %]
5
    [% IF field %] &rsaquo; Modify field
6
    [% ELSE %] &rsaquo; Add field
7
    [% END %]
8
  [% END %]
9
</title>
10
[% INCLUDE 'doc-head-close.inc' %]
11
<link rel="stylesheet" type="text/css" href="[% themelang %]/css/datatables.css" />
12
[% INCLUDE "datatables.inc" %]
13
<script type="text/javascript">
14
//<![CDATA[
15
  $(document).ready(function(){
16
17
    $("#fieldst").dataTable($.extend(true, {}, dataTablesDefaults, {
18
        'bAutoWidth': false,
19
        'sDom': 't<"bottom pager"ilpf>',
20
        'sPaginationType': 'four_button',
21
        'aLengthMenu': [[10, 20, 50, 100, -1], [10, 20, 50, 100, "All"]],
22
        'iDisplayLength': 20,
23
        'aaSorting': [[ 0, "asc" ]],
24
    }));
25
26
    $(".confirmdelete").click(function(){
27
      return confirm(_("Are you sure you want to delete this field?"));
28
    });
29
30
    $("#add_field").on('submit', function(){
31
        if ( $("#marcfield").val().length > 0
32
            && $("select[name='authorised_value_category']" ).val().length > 0 ) {
33
            alert("You cannot select an authorised value category and a marcfield");
34
            return false;
35
        }
36
        return true;
37
    });
38
  });
39
//]]>
40
</script>
41
</head>
42
43
<body id="ser_add_fields" class="ser">
44
  [% INCLUDE 'header.inc' %]
45
  [% INCLUDE 'serials-search.inc' %]
46
47
  <div id="breadcrumbs">
48
    <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
49
  </div>
50
51
  <div id="doc3" class="yui-t2">
52
  <div id="bd">
53
  <div id="yui-main">
54
  <div class="yui-b">
55
  [% IF op == 'list' %]
56
    <div id="toolbar" class="btn-toolbar">
57
      <a class="btn btn-small" id="newfields" href="/cgi-bin/koha/serials/add_fields.pl?op=add_form"><i class="fa fa-plus"></i> New fields</a>
58
    </div>
59
  [% END %]
60
61
  [% IF messages %]
62
    [% FOR message IN messages %]
63
      [% IF message.code == 'insert' %]
64
        [% IF message.number > 0 %]
65
          <div class="dialog message">The field has been inserted</div>
66
        [% ELSE %]
67
          <div class="dialog alert">The field has not been inserted (name still exist?)</div>
68
        [% END %]
69
      [% ELSIF message.code == 'update' %]
70
        [% IF message.number > 0 %]
71
          <div class="dialog message">The field has been updated</div>
72
        [% ELSE %]
73
          <div class="dialog alert">The field has not been updated (name still exist?)</div>
74
        [% END %]
75
      [% ELSIF message.code == 'delete' %]
76
        [% IF message.number > 0 %]
77
          <div class="dialog message">The field has been deleted</div>
78
        [% ELSE %]
79
          <div class="dialog alert">The field has not been deleted</div>
80
        [% END %]
81
      [% END %]
82
    [% END %]
83
  [% END %]
84
85
  [% IF op == 'list' %]
86
    <h3>Additional fields for subscriptions</h3>
87
    [% IF fields %]
88
      <table id="fieldst">
89
        <thead>
90
          <tr>
91
            <th>Name</th>
92
            <th>Authorised value category</th>
93
            <th>Marc field</th>
94
            <th>Searchable</th>
95
            <th>Actions</th>
96
          </tr>
97
        </thead>
98
        <tbody>
99
          [% FOR field IN fields %]
100
            <tr>
101
              <td>[% field.name %]</td>
102
              <td>[% field.authorised_value_category %]</td>
103
              <td>[% field.marcfield %]</td>
104
              <td>
105
                [% IF field.searchable %]Yes[% ELSE %]No[% END %]
106
              </td>
107
              <td>
108
                <a href="/cgi-bin/koha/serials/add_fields.pl?op=add_form&amp;field_id=[% field.id %]" title="Edit this field">Edit</a>
109
                <a class="confirmdelete" href="/cgi-bin/koha/serials/add_fields.pl?op=delete&amp;field_id=[% field.id %]" title="Delete this field">Delete</a>
110
              </td>
111
            </tr>
112
          [% END %]
113
        </tbody>
114
      </table>
115
    [% ELSE %]
116
      There is no field defined.
117
    [% END %]
118
  [% ELSIF op == 'add_form' %]
119
    [% IF field %]
120
      <h3>Modify field</h3>
121
    [% ELSE %]
122
      <h3>Add field</h3>
123
    [% END %]
124
    <form action="/cgi-bin/koha/serials/add_fields.pl" name="add_form" id="add_field" method="post">
125
      <fieldset class="rows">
126
        <ol>
127
          <li>
128
            <label for="name" class="required">Name: </label>
129
            <input type="text" name="name" id="name" value="[% field.name | html %]" />
130
          </li>
131
          <li>
132
            <label for="av">Authorised value category: </label>
133
            <select name="authorised_value_category">
134
              <option value="">None</option>
135
              [% FOR category IN categories %]
136
                [% IF field.authorised_value_category == category %]
137
                  <option value="[% category %]" selected="selected">[% category %]</option>
138
                [% ELSE %]
139
                  <option value="[% category %]">[% category %]</option>
140
                [% END %]
141
              [% END %]
142
            </select>
143
          </li>
144
          <li>
145
            <label for="marcfield">Marc field: </label>
146
            <input type="text" name="marcfield" id="marcfield" value="[% field.marcfield| html %]" />
147
          </li>
148
          <li>
149
            <label for="searchable">Searchable: </label>
150
            [% IF field.searchable %]
151
              <input type="checkbox" name="searchable" id="searchable" checked="checked" />
152
            [% ELSE %]
153
              <input type="checkbox" name="searchable" id="searchable" />
154
            [% END %]
155
          </li>
156
        </ol>
157
      </fieldset>
158
      <fieldset class="action">
159
        [% IF field %]
160
          <input type="hidden" name="field_id" value="[% field.id %]" />
161
        [% END %]
162
        <input type="hidden" name="op" value="add" />
163
        <input type="submit" value="Save" />
164
        <a href="/cgi-bin/koha/serials/add_fields.pl" class="cancel">Cancel</a>
165
      </fieldset>
166
    </form>
167
  [% END %]
168
169
  </div>
170
  </div>
171
172
<div class="yui-b">
173
[% INCLUDE 'serials-menu.inc' %]
174
</div>
175
</div>
176
[% INCLUDE 'intranet-bottom.inc' %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-search.tt (-15 / +1 lines)
Lines 117-137 Link Here
117
                  <label for="to">Expires before:</label>
117
                  <label for="to">Expires before:</label>
118
                  <input type="text" id="to" name="expiration_date_filter" value="[% expiration_date_filter | $KohaDates %]" size="10" maxlength="10" class="datepickerto" />
118
                  <input type="text" id="to" name="expiration_date_filter" value="[% expiration_date_filter | $KohaDates %]" size="10" maxlength="10" class="datepickerto" />
119
                </li>
119
                </li>
120
                [% FOR field IN additional_fields_for_subscription %]
120
                [% INCLUDE 'additional-fields-entry.inc' available=additional_fields_for_subscription values=additional_field_filters wrap_fieldset=0 %]
121
                  <li>
122
                    <label for="additional_field_[% field.id %]"> [% field.name %]: </label>
123
                    [% IF field.authorised_value_choices %]
124
                      <select id="additional_field_[% field.id %]" name="additional_field_[% field.id %]_filter">
125
                        <option value="">All</option>
126
                        [% FOREACH av IN field.authorised_value_choices %]
127
                          <option value="[% av.authorised_value %]">[% av.lib %]</option>
128
                        [% END %]
129
                      </select>
130
                    [% ELSE %]
131
                      <input id="additional_field_[% field.id %]" type="text" value="[% additional_fields.${field.name} %]" name="additional_field_[% field.id %]_filter" />
132
                    [% END %]
133
                  </li>
134
                [% END %]
135
              </ol>
121
              </ol>
136
              <input type="hidden" name="searched" value="1" />
122
              <input type="hidden" name="searched" value="1" />
137
              <fieldset class="action">
123
              <fieldset class="action">
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-add.tt (-30 / +3 lines)
Lines 856-891 $(document).ready(function() { Link Here
856
                            </fieldset>
856
                            </fieldset>
857
857
858
                            [% IF additional_fields_for_subscription %]
858
                            [% IF additional_fields_for_subscription %]
859
                              <div id="subscription_additional_fields">
859
                                <div id="subscription_additional_fields">
860
                                <fieldset class="rows">
860
                                    [% INCLUDE 'additional-fields-entry.inc' available=additional_fields_for_subscription values=additional_fields %]
861
                                  <legend>Additional fields</legend>
861
                                </div>
862
                                  <ol>
863
                                    [% FOR field IN additional_fields_for_subscription %]
864
                                      <li>
865
                                        <label for="additional_field_[% field.id %]"> [% field.name %]: </label>
866
                                        [% IF field.authorised_value_choices %]
867
                                          <select name="additional_field_[% field.id %]" id="additional_field_[% field.id %]">
868
                                            [% FOREACH av IN field.authorised_value_choices %]
869
                                              [% IF av.authorised_value == additional_fields.${field.name} %]
870
                                                <option value="[% av.authorised_value %]" selected="selected">[% av.lib %]</option>
871
                                              [% ELSE %]
872
                                                <option value="[% av.authorised_value %]">[% av.lib %]</option>
873
                                              [% END %]
874
                                            [% END %]
875
                                          </select> (Authorised values for [% field.authorised_value_category %])
876
                                        [% ELSE %]
877
                                          [% IF field.marcfield %]
878
                                            <input type="text" value="[% additional_fields.${field.name} %]" id="additional_field_[% field.id %]" name="additional_field_[% field.id %]" readonly="readonly" />
879
                                            This value will be filled with the [% field.marcfield %] subfield of the selected biblio.
880
                                          [% ELSE %]
881
                                            <input type="text" value="[% additional_fields.${field.name} %]" id="additional_field_[% field.id %]" name="additional_field_[% field.id %]" />
882
                                          [% END %]
883
                                        [% END %]
884
                                      </li>
885
                                    [% END %]
886
                                  </ol>
887
                                </fieldset>
888
                              </div>
889
                            [% END %]
862
                            [% END %]
890
863
891
                            <fieldset class="action">
864
                            <fieldset class="action">
(-)a/serials/serials-search.pl (-15 / +6 lines)
Lines 79-97 if ( $op and $op eq "close" ) { Link Here
79
79
80
80
81
my $additional_fields = Koha::AdditionalField->all( { tablename => 'subscription', searchable => 1 } );
81
my $additional_fields = Koha::AdditionalField->all( { tablename => 'subscription', searchable => 1 } );
82
my $additional_field_filters;
82
my $additional_field_filters = Koha::AdditionalField->get_filters_from_query( {
83
for my $field ( @$additional_fields ) {
83
    tablename => 'subscription',
84
    my $filter_value = $query->param('additional_field_' . $field->{id} . '_filter');
84
    query => $query,
85
    if ( defined $filter_value and $filter_value ne q|| ) {
85
} );
86
        $additional_field_filters->{ $field->{name} } = {
87
            value => $filter_value,
88
            authorised_value_category => $field->{authorised_value_category},
89
        };
90
    }
91
    if ( $field->{authorised_value_category} ) {
92
        $field->{authorised_value_choices} = GetAuthorisedValues( $field->{authorised_value_category} );
93
    }
94
}
95
86
96
my $expiration_date_dt = $expiration_date ? dt_from_string( $expiration_date ) : undef;
87
my $expiration_date_dt = $expiration_date ? dt_from_string( $expiration_date ) : undef;
97
my @subscriptions;
88
my @subscriptions;
Lines 106-112 if ($searched){ Link Here
106
            publisher    => $publisher,
97
            publisher    => $publisher,
107
            bookseller   => $bookseller,
98
            bookseller   => $bookseller,
108
            branch       => $branch,
99
            branch       => $branch,
109
            additional_fields => [ map{ { name => $_, value => $additional_field_filters->{$_}{value}, authorised_value_category => $additional_field_filters->{$_}{authorised_value_category} } } keys %$additional_field_filters ],
100
            additional_fields => $additional_field_filters,
110
            location     => $location,
101
            location     => $location,
111
            expiration_date => $expiration_date_dt,
102
            expiration_date => $expiration_date_dt,
112
        }
103
        }
Lines 160-166 $template->param( Link Here
160
    branches_loop => \@branches_loop,
151
    branches_loop => \@branches_loop,
161
    done_searched => $searched,
152
    done_searched => $searched,
162
    routing       => $routing,
153
    routing       => $routing,
163
    additional_field_filters => $additional_field_filters,
154
    additional_field_filters => Koha::AdditionalField->get_filters_as_values( $additional_field_filters ),
164
    additional_fields_for_subscription => $additional_fields,
155
    additional_fields_for_subscription => $additional_fields,
165
    marcflavour   => (uc(C4::Context->preference("marcflavour")))
156
    marcflavour   => (uc(C4::Context->preference("marcflavour")))
166
);
157
);
(-)a/serials/subscription-add.pl (-36 / +13 lines)
Lines 152-165 $template->param(branchloop => $branchloop, Link Here
152
    locations_loop=>$locations_loop,
152
    locations_loop=>$locations_loop,
153
);
153
);
154
154
155
155
$template->param( additional_fields_for_subscription => scalar Koha::AdditionalField->all( { tablename => 'subscription' } ) );
156
my $additional_fields = Koha::AdditionalField->all( { tablename => 'subscription' } );
157
for my $field ( @$additional_fields ) {
158
    if ( $field->{authorised_value_category} ) {
159
        $field->{authorised_value_choices} = GetAuthorisedValues( $field->{authorised_value_category} );
160
    }
161
}
162
$template->param( additional_fields_for_subscription => $additional_fields );
163
156
164
# prepare template variables common to all $op conditions:
157
# prepare template variables common to all $op conditions:
165
if ($op!~/^mod/) {
158
if ($op!~/^mod/) {
Lines 346-353 sub redirect_add_subscription { Link Here
346
        $skip_serialseq
339
        $skip_serialseq
347
    );
340
    );
348
341
349
    my $additional_fields = Koha::AdditionalField->all( { tablename => 'subscription' } );
342
    Koha::AdditionalField->update_fields_from_query( {
350
    insert_additional_fields( $additional_fields, $biblionumber, $subscriptionid );
343
        tablename => 'subscription',
344
        record_id => $subscriptionid,
345
        query => $query,
346
        marc_record => GetMarcBiblio( $biblionumber, 1 )
347
    } );
351
348
352
    print $query->redirect("/cgi-bin/koha/serials/subscription-detail.pl?subscriptionid=$subscriptionid");
349
    print $query->redirect("/cgi-bin/koha/serials/subscription-detail.pl?subscriptionid=$subscriptionid");
353
    return;
350
    return;
Lines 428-459 sub redirect_mod_subscription { Link Here
428
        $skip_serialseq
425
        $skip_serialseq
429
    );
426
    );
430
427
431
    my $additional_fields = Koha::AdditionalField->all( { tablename => 'subscription' } );
428
    Koha::AdditionalField->update_fields_from_query( {
432
    insert_additional_fields( $additional_fields, $biblionumber, $subscriptionid );
429
        tablename => 'subscription',
430
        record_id => $subscriptionid,
431
        query => $query,
432
        marc_record => GetMarcBiblio( $biblionumber, 1 )
433
    } );
433
434
434
    print $query->redirect("/cgi-bin/koha/serials/subscription-detail.pl?subscriptionid=$subscriptionid");
435
    print $query->redirect("/cgi-bin/koha/serials/subscription-detail.pl?subscriptionid=$subscriptionid");
435
    return;
436
    return;
436
}
437
}
437
438
sub insert_additional_fields {
439
    my ( $additional_fields, $biblionumber, $subscriptionid ) = @_;
440
    my $record = GetMarcBiblio( $biblionumber, 1 );
441
    for my $field ( @$additional_fields ) {
442
        my $af = Koha::AdditionalField->new({ id => $field->{id} })->fetch;
443
        if ( $af->{marcfield} ) {
444
            my ( $field, $subfield ) = split /\$/, $af->{marcfield};
445
            $af->{values} = undef;
446
            if ( $field and $subfield ) {
447
                my $value = $record->subfield( $field, $subfield );
448
                $af->{values} = {
449
                    $subscriptionid => $value
450
                };
451
            }
452
        } else {
453
            $af->{values} = {
454
                $subscriptionid => $query->param('additional_field_' . $field->{id})
455
            } if defined $query->param('additional_field_' . $field->{id});
456
        }
457
        $af->insert_values;
458
    }
459
}
460
- 

Return to bug 15774