@@ -, +, @@
- go on the subscriptions advanced search page
(serials/serials-search.pl).
- verify all searchable additional fields are displayed on the form.
- combine 1 or more values and verify results are consistent.
- verify the values are displayed in new columns of the table.
- for field linked to an authorised value category, the description is
displayed (not the code).
---
C4/Serials.pm | 35 ++++++++++--
.../prog/en/includes/serials-menu.inc | 1 +
.../prog/en/modules/serials/serials-search.tt | 57 ++++++++++++++++++--
serials/serials-search.pl | 17 ++++++
4 files changed, 102 insertions(+), 8 deletions(-)
--- a/C4/Serials.pm
+++ a/C4/Serials.pm
@@ -663,7 +663,17 @@ a table of hashref. Each hash containt the subscription.
sub SearchSubscriptions {
my ( $args ) = @_;
- my $query = qq{
+ my $additional_fields = $args->{additional_fields} // [];
+ my $matching_record_ids_for_additional_fields = [];
+ if ( @$additional_fields ) {
+ $matching_record_ids_for_additional_fields = Koha::AdditionalField->get_matching_record_ids({
+ fields => $args->{additional_fields},
+ tablename => 'subscription',
+ });
+ return () unless @$matching_record_ids_for_additional_fields;
+ }
+
+ my $query = q|
SELECT
subscription.notes AS publicnotes,
subscription.*,
@@ -677,13 +687,15 @@ sub SearchSubscriptions {
LEFT JOIN biblio ON biblio.biblionumber = subscription.biblionumber
LEFT JOIN biblioitems ON biblioitems.biblionumber = subscription.biblionumber
LEFT JOIN aqbooksellers ON subscription.aqbooksellerid = aqbooksellers.id
- };
+ |;
+ $query .= q| WHERE 1|;
my @where_strs;
my @where_args;
if( $args->{biblionumber} ) {
push @where_strs, "biblio.biblionumber = ?";
push @where_args, $args->{biblionumber};
}
+
if( $args->{title} ){
my @words = split / /, $args->{title};
my (@strs, @args);
@@ -720,16 +732,29 @@ sub SearchSubscriptions {
push @where_strs, "subscription.closed = ?";
push @where_args, "$args->{closed}";
}
+
if(@where_strs){
- $query .= " WHERE " . join(" AND ", @where_strs);
+ $query .= ' AND ' . join(' AND ', @where_strs);
+ }
+ if ( @$additional_fields ) {
+ $query .= ' AND subscriptionid IN ('
+ . join( ', ', @$matching_record_ids_for_additional_fields )
+ . ')';
}
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare($query);
$sth->execute(@where_args);
- my $results = $sth->fetchall_arrayref( {} );
- $sth->finish;
+ my $results = $sth->fetchall_arrayref( {} );
+
+ for my $subscription ( @$results ) {
+ my $additional_field_values = Koha::AdditionalField->fetch_all_values({
+ record_id => $subscription->{subscriptionid},
+ tablename => 'subscription'
+ });
+ %$subscription = ( %$subscription, additional_fields => $additional_field_values->{$subscription->{subscriptionid}} );
+ }
return @$results;
}
--- a/koha-tmpl/intranet-tmpl/prog/en/includes/serials-menu.inc
+++ a/koha-tmpl/intranet-tmpl/prog/en/includes/serials-menu.inc
@@ -20,4 +20,5 @@
[% IF ( CAN_user_serials_check_expiration ) %]
Check expiration
[% END %]
+ Add subscription fields
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-search.tt
+++ a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-search.tt
@@ -1,5 +1,6 @@
[% INCLUDE 'doc-head-open.inc' %]
[% USE KohaDates %]
+[% USE KohaAuthorisedValues %]
Koha › Serials [% biblionumber %]
[% INCLUDE 'doc-head-close.inc' %]
@@ -14,6 +15,7 @@
[% END %]
var osrlt = $("#osrlt").dataTable($.extend(true, {}, dataTablesDefaults, {
+ // FIXME sort function of additional_fields!
"aoColumnDefs": [
{ "aTargets": [ -1, -2, -3 ], "bSortable": false, "bSearchable": false },
],
@@ -21,6 +23,7 @@
} ) );
var csrlt = $("#csrlt").dataTable($.extend(true, {}, dataTablesDefaults, {
+ // FIXME sort function of additional_fields!
"aoColumnDefs": [
{ "aTargets": [ -1, -2 ], "bSortable": false, "bSearchable": false },
],
@@ -92,6 +95,21 @@
[% END %]
+ [% FOR field IN additional_fields_for_subscription %]
+
+
+ [% IF field.authorised_value_choices %]
+
+ [% ELSE %]
+
+ [% END %]
+
+ [% END %]