sub SearchSubscriptions {
my ( $args ) = @_;
- my $query = q{
+ 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,
subscriptionhistory.*,
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);
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 )
+ . ')';
}
$query .= " ORDER BY " . $args->{orderby} if $args->{orderby};
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 ) {
$subscription->{cannotedit} = not can_edit_subscription( $subscription );
$subscription->{cannotdisplay} = not can_show_subscription( $subscription );
+
+ my $additional_field_values = Koha::AdditionalField->fetch_all_values({
+ record_id => $subscription->{subscriptionid},
+ tablename => 'subscription'
+ });
+ $subscription->{addition_fields} = $additional_field_values->{$subscription->{subscriptionid}};
}
return @$results;
} ) );
var csrlt = $("#csrlt").dataTable($.extend(true, {}, dataTablesDefaults, {
+ // FIXME sort function of additional_fields!
"sPaginationType": "four_button",
"aoColumnDefs": [
{ 'bSortable': false, 'aTargets': [ 'NoSort' ] },
<label for="to">Expires before:</label>
<input type="text" id="to" name="expiration_date_filter" value="[% expiration_date_filter | $KohaDates %]" size="10" maxlength="10" class="datepickerto" />
</li>
+ [% FOR field IN additional_fields_for_subscription %]
+ <li>
+ <label for="additional_field_[% field.id %]"> [% field.name %]: </label>
+ [% IF field.authorised_value_choices %]
+ <select id="additional_field_[% field.id %]" name="additional_field_[% field.id %]_filter">
+ <option value="">All</option>
+ [% FOREACH av IN field.authorised_value_choices %]
+ <option value="[% av.authorised_value %]">[% av.lib %]</option>
+ [% END %]
+ </select>
+ [% ELSE %]
+ <input id="additional_field_[% field.id %]" type="text" value="[% additional_fields.${field.name} %]" name="additional_field_[% field.id %]_filter" />
+ [% END %]
+ </li>
+ [% END %]
</ol>
<input type="hidden" name="searched" value="1" />
<fieldset class="action">
<th>Location</th>
<th>Call number</th>
<th class="title-string">Expiration date</th>
+ [% FOR field IN additional_fields_for_subscription %]
+ <th>[% field.name %]</th>
+ [% END %]
<th class="NoSort">Actions</th>
</tr>
</thead>
<td><input type="text" class="dt-filter" data-column_num="4" placeholder="Search location" /></td>
<td><input type="text" class="dt-filter" data-column_num="5" placeholder="Search callnumber" /></td>
<td><input type="text" class="dt-filter" data-column_num="6" placeholder="Search expiration date" /></td>
+ [% FOR field IN additional_fields_for_subscription %]
+ <td><input type="text" class="dt-filter" data-column_num="[% loop.count + 6 %]" placeholder="Search [% field.name %]" /></td>
+ [% END %]
<td></td>
</tr>
</tfoot>
[% END %]
</td>
+ [% FOR field IN additional_fields_for_subscription %]
+ [% IF field.authorised_value_category %]
+ <td>[% AuthorisedValues.GetByCode( field.authorised_value_category, subscription.additional_fields.${field.name} ) %]</td>
+ [% ELSE %]
+ <td>[% subscription.additional_fields.${field.name} %]</td>
+ [% END %]
+ [% END %]
+
<td>
<div class="dropdown">
<a class="btn btn-mini dropdown-toggle" id="subactions[% subscription.subscriptionid %]" role="button" data-toggle="dropdown" href="#">
<div id="closed">
[% IF closedsubscriptions %]
<table id="csrlt">
+ <!-- FIXME add additional_fields for closed subs -->
<thead>
<tr>
<th>ISSN</th>
<th>Library</th>
<th>Location</th>
<th>Call number</th>
+ [% FOR field IN additional_fields_for_subscription %]
+ <th>[% field.name %]</th>
+ [% END %]
<th class="NoSort">Actions</th>
</tr>
</thead>
<td><input type="text" class="dt-filter" data-column_num="3" placeholder="Search library" /></td>
<td><input type="text" class="dt-filter" data-column_num="4" placeholder="Search location" /></td>
<td><input type="text" class="dt-filter" data-column_num="5" placeholder="Search callnumber" /></td>
+ [% FOR field IN additional_fields_for_subscription %]
+ <td><input type="text" class="dt-filter" data-column_num="[% loop.count + 5 %]" placeholder="Search [% field.name %]" /></td>
+ [% END %]
<td></td>
</tr>
</tfoot>
<td>
[% IF ( subscription.callnumber ) %][% subscription.callnumber %][% END %]
</td>
+ [% FOR field IN additional_fields_for_subscription %]
+ [% IF field.authorised_value_category %]
+ <td>[% KohaAuthorisedValues.GetByCode( field.authorised_value_category, subscription.additional_fields.${field.name} ) %]</td>
+ [% ELSE %]
+ <td>[% subscription.additional_fields.${field.name} %]</td>
+ [% END %]
+ [% END %]
<td>
<div class="dropdown">
<a class="btn btn-mini dropdown-toggle" id="closedsubactions[% subscription.subscriptionid %]" role="button" data-toggle="dropdown" href="#">
<input type="text" id="to" name="expiration_date_filter" value="[% expiration_date_filter | $KohaDates %]" size="10" maxlength="10" class="datepickerto" />
</li>
+ [% FOR field IN additional_fields_for_subscription %]
+ <li>
+ <label for="additional_field_[% field.id %]ID"> [% field.name %]: </label>
+ [% IF field.authorised_value_choices %]
+ <select id="additional_field_[% field.id %]" name="additional_field_[% field.id %]_filter">
+ <option value="">All</option>
+ [% FOREACH av IN field.authorised_value_choices %]
+ [% IF av.authorised_value == additional_field_filters.${field.name} %]
+ <option value="[% av.authorised_value %]" selected="selected">[% av.lib %]</option>
+ [% ELSE %]
+ <option value="[% av.authorised_value %]">[% av.lib %]</option>
+ [% END %]
+ [% END %]
+ </select>
+ [% ELSE %]
+ <input id="additional_field_[% field.id %]" type="text" value="[% additional_field_filters.${field.name} %]" name="additional_field_[% field.id %]_filter" />
+ [% END %]
+ </li>
+ [% END %]
</ol>
<input type="hidden" name="searched" value="1" />
<fieldset class="action">
use C4::Auth;
use C4::Branch;
use C4::Context;
+use C4::Koha qw( GetAuthorisedValues );
use C4::Output;
use C4::Serials;
+use Koha::AdditionalField;
use Koha::DateUtils;
}
}
+
+my $additional_fields = Koha::AdditionalField->all( { table => 'subscription', searchable => 1 } );
+my $additional_field_filters;
+for my $field ( @$additional_fields ) {
+ if ( my $filter_value = $query->param('additional_field_' . $field->{name} . '_filter') ) {
+ $additional_field_filters->{ $field->{name} } = $filter_value;
+ }
+ if ( $field->{authorised_value_category} ) {
+ $field->{authorised_value_choices} = GetAuthorisedValues( $field->{authorised_value_category} );
+ }
+}
+
my $expiration_date_dt = $expiration_date ? dt_from_string( $expiration_date ) : undef;
my @subscriptions;
if ($searched){
publisher => $publisher,
bookseller => $bookseller,
branch => $branch,
+ additional_fields => [ map{ { name => $_, value => $additional_field_filters->{$_}} } keys %$additional_field_filters ],
location => $location,
expiration_date => $expiration_date_dt,
}
branches_loop => \@branches_loop,
done_searched => $searched,
routing => $routing,
+ additional_field_filters => $additional_field_filters,
+ additional_fields_for_subscription => $additional_fields,
marcflavour => (uc(C4::Context->preference("marcflavour")))
);