@@ -, +, @@
---
C4/Serials.pm | 5 +-
Koha/AdditionalField.pm | 12 +++--
.../prog/en/modules/serials/serials-home.tt | 1 -
.../prog/en/modules/serials/subscription-add.tt | 8 +--
serials/claims.pl | 2 +-
serials/serials-search.pl | 5 +-
serials/subscription-add.pl | 12 ++---
t/db_dependent/AdditionalField.t | 51 ++++++++++++++------
8 files changed, 61 insertions(+), 35 deletions(-)
--- a/C4/Serials.pm
+++ a/C4/Serials.pm
@@ -671,8 +671,9 @@ sub SearchSubscriptions {
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},
+ fields => $additional_fields,
tablename => 'subscription',
+ exact_match => 0,
});
return () unless @$matching_record_ids_for_additional_fields;
}
@@ -774,7 +775,7 @@ sub SearchSubscriptions {
record_id => $subscription->{subscriptionid},
tablename => 'subscription'
});
- $subscription->{addition_fields} = $additional_field_values->{$subscription->{subscriptionid}};
+ $subscription->{additional_fields} = $additional_field_values->{$subscription->{subscriptionid}};
}
return @$results;
--- a/Koha/AdditionalField.pm
+++ a/Koha/AdditionalField.pm
@@ -97,6 +97,7 @@ sub insert_values {
my $dbh = C4::Context->dbh;
local $dbh->{RaiseError} = 1;
while ( my ( $record_id, $value ) = each %{$self->{values}} ) {
+ next unless defined $value;
my $updated = $dbh->do(q|
UPDATE additional_field_values
SET value = ?
@@ -135,7 +136,7 @@ sub fetch_values {
sub all {
my ( $class, $args ) = @_;
- die "BAD CALL: Don't use fetch_all_values as a static method"
+ die "BAD CALL: Don't use fetch_all_values as an instance method"
if ref $class and UNIVERSAL::can($class,'can');
my $tablename = $args->{tablename};
my $searchable = $args->{searchable};
@@ -172,7 +173,7 @@ sub all {
sub fetch_all_values {
my ( $class, $args ) = @_;
- die "BAD CALL: Don't use fetch_all_values as a static method"
+ die "BAD CALL: Don't use fetch_all_values as an instance method"
if ref $class and UNIVERSAL::can($class,'can');
my $record_id = $args->{record_id};
@@ -199,11 +200,12 @@ sub fetch_all_values {
sub get_matching_record_ids {
my ( $class, $args ) = @_;
- die "BAD CALL: Don't use fetch_all_values as a static method"
+ die "BAD CALL: Don't use fetch_all_values as an instance method"
if ref $class and UNIVERSAL::can($class,'can');
my $fields = $args->{fields} // [];
my $tablename = $args->{tablename};
+ my $exact_match = $args->{exact_match} // 1;
return [] unless @$fields;
my $dbh = C4::Context->dbh;
@@ -222,13 +224,13 @@ sub get_matching_record_ids {
WHERE afv.field_id = af.id
AND af.name = ?
AND af.tablename = ?
- AND value = ?
+ AND value LIKE ?
) AS field$i USING (id)
WHERE field$i.id IS NOT NULL
) AS values$i |;
$subquery .= ' USING (record_id)' if $i > 1;
push @subqueries, $subquery;
- push @args, $field->{name}, $tablename, $field->{value};
+ push @args, $field->{name}, $tablename, ( $exact_match ? $field->{value} : "%$field->{value}%" );
}
$query .= join( ' LEFT JOIN ', @subqueries ) . ' WHERE 1';
for my $j ( 1 .. $i ) {
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-home.tt
+++ a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-home.tt
@@ -17,7 +17,6 @@
- [% INCLUDE 'subscriptions-search.inc' %]
[% INCLUDE 'serials-menu.inc' %]
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-add.tt
+++ a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-add.tt
@@ -843,9 +843,9 @@ $(document).ready(function() {
[% FOR field IN additional_fields_for_subscription %]
-
-
+
[% IF field.authorised_value_choices %]
-
--- a/serials/claims.pl
+++ a/serials/claims.pl
@@ -60,7 +60,7 @@ for my $s (@{$supplierlist} ) {
}
}
-my $additional_fields = Koha::AdditionalField->all( { table => 'subscription', searchable => 1 } );
+my $additional_fields = Koha::AdditionalField->all( { tablename => 'subscription', searchable => 1 } );
for my $field ( @$additional_fields ) {
if ( $field->{authorised_value_category} ) {
$field->{authorised_value_choices} = GetAuthorisedValues( $field->{authorised_value_category} );
--- a/serials/serials-search.pl
+++ a/serials/serials-search.pl
@@ -78,10 +78,11 @@ if ( $op and $op eq "close" ) {
}
-my $additional_fields = Koha::AdditionalField->all( { table => 'subscription', searchable => 1 } );
+my $additional_fields = Koha::AdditionalField->all( { tablename => 'subscription', searchable => 1 } );
my $additional_field_filters;
for my $field ( @$additional_fields ) {
- if ( my $filter_value = $query->param('additional_field_' . $field->{name} . '_filter') ) {
+ my $filter_value = $query->param('additional_field_' . $field->{id} . '_filter');
+ if ( defined ( $filter_value ) ) {
$additional_field_filters->{ $field->{name} } = $filter_value;
}
if ( $field->{authorised_value_category} ) {
--- a/serials/subscription-add.pl
+++ a/serials/subscription-add.pl
@@ -153,7 +153,7 @@ $template->param(branchloop => $branchloop,
);
-my $additional_fields = Koha::AdditionalField->all( { table => 'subscription' } );
+my $additional_fields = Koha::AdditionalField->all( { tablename => 'subscription' } );
for my $field ( @$additional_fields ) {
if ( $field->{authorised_value_category} ) {
$field->{authorised_value_choices} = GetAuthorisedValues( $field->{authorised_value_category} );
@@ -347,13 +347,13 @@ sub redirect_add_subscription {
$skip_serialseq
);
- my $additional_fields = Koha::AdditionalField->all( { table => 'subscription' } );
+ my $additional_fields = Koha::AdditionalField->all( { tablename => 'subscription' } );
my @additional_field_values;
for my $field ( @$additional_fields ) {
my $af = Koha::AdditionalField->new({ id => $field->{id} });
$af->{values} = {
- $subscriptionid => $query->param('additional_fields_' . $field->{name})
- };
+ $subscriptionid => $query->param('additional_field_' . $field->{id})
+ } if defined $query->param('additional_field_' . $field->{id});
$af->insert_values;
}
@@ -432,7 +432,7 @@ sub redirect_mod_subscription {
$skip_serialseq
);
- my $additional_fields = Koha::AdditionalField->all( { table => 'subscription' } );
+ my $additional_fields = Koha::AdditionalField->all( { tablename => 'subscription' } );
my @additional_field_values;
for my $field ( @$additional_fields ) {
my $af = Koha::AdditionalField->new({ id => $field->{id} })->fetch;
@@ -446,7 +446,7 @@ sub redirect_mod_subscription {
};
} else {
$af->{values} = {
- $subscriptionid => $query->param('additional_fields_' . $field->{name})
+ $subscriptionid => $query->param('additional_field_' . $field->{id})
};
}
$af->insert_values;
--- a/t/db_dependent/AdditionalField.t
+++ a/t/db_dependent/AdditionalField.t
@@ -1,7 +1,7 @@
#!/usr/bin/perl
use Modern::Perl;
-use Test::More tests => 34;
+use Test::More tests => 37;
use C4::Context;
use Koha::AdditionalField;
@@ -104,6 +104,8 @@ use C4::Acquisition;
use C4::Biblio;
use C4::Budgets;
use C4::Serials;
+use C4::Serials::Frequency;
+use C4::Serials::Numberpattern;
my $booksellerid = C4::Bookseller::AddBookseller(
{
@@ -118,7 +120,7 @@ my ($biblionumber, $biblioitemnumber) = AddBiblio(MARC::Record->new, '');
my $budgetid;
my $bpid = AddBudgetPeriod({
budget_period_startdate => '01-01-2015',
- budget_period_enddate => '12-31-2015',
+ budget_period_enddate => '01-01-2016',
budget_description => "budget desc"
});
@@ -132,22 +134,28 @@ my $budget_id = AddBudget({
budget_period_id => $bpid
});
+my $frequency_id = AddSubscriptionFrequency({ description => "Test frequency 1" });
+my $pattern_id = AddSubscriptionNumberpattern({
+ label => 'Test numberpattern 1',
+ numberingmethod => '{X}'
+});
+
my $subscriptionid1 = NewSubscription(
- undef, "", undef, undef, $budget_id, $biblionumber, '01-01-2013',undef,
- undef, undef, undef, undef, undef, undef, undef, undef,
- undef, undef, undef, undef, undef, undef, undef, undef,
- undef, undef, undef, undef, undef, undef, undef, 1,
- "notes", undef, undef, undef, undef, undef, undef, 0,
- "intnotes", 0, undef, undef, 0, undef, '31-12-2013',
+ undef, "", undef, undef, $budget_id, $biblionumber,
+ '2013-01-01', $frequency_id, undef, undef, undef,
+ undef, undef, undef, undef, undef, undef,
+ 1, "notes",undef, '2013-01-01', undef, $pattern_id,
+ undef, undef, 0, "intnotes", 0,
+ undef, undef, 0, undef, '2013-01-01', 0
);
my $subscriptionid2 = NewSubscription(
- undef, "", undef, undef, $budget_id, $biblionumber, '01-01-2013',undef,
- undef, undef, undef, undef, undef, undef, undef, undef,
- undef, undef, undef, undef, undef, undef, undef, undef,
- undef, undef, undef, undef, undef, undef, undef, 1,
- "notes", undef, undef, undef, undef, undef, undef, 0,
- "intnotes", 0, undef, undef, 0, undef, '31-12-2013',
+ undef, "", undef, undef, $budget_id, $biblionumber,
+ '2013-01-01', $frequency_id, undef, undef, undef,
+ undef, undef, undef, undef, undef, undef,
+ 1, "notes",undef, '2013-01-01', undef, $pattern_id,
+ undef, undef, 0, "intnotes", 0,
+ undef, undef, 0, undef, '2013-01-01', 0
);
# insert
@@ -268,4 +276,19 @@ is ( $exists, 1, "get_matching_record_ids: field common: common_value matches su
$exists = grep /not_existent_id/, @$matching_record_ids;
is ( $exists, 0, "get_matching_record_ids: field common: common_value does not inexistent id" );
+$fields = [
+ {
+ name => 'common',
+ value => q|common|,
+ }
+];
+$matching_record_ids = Koha::AdditionalField->get_matching_record_ids({ tablename => 'subscription', fields => $fields, exact_match => 0 });
+$exists = grep /$subscriptionid1/, @$matching_record_ids;
+is ( $exists, 1, "get_matching_record_ids: field common: common% matches subscription1" );
+$exists = grep /$subscriptionid2/, @$matching_record_ids;
+is ( $exists, 1, "get_matching_record_ids: field common: common% matches subscription2 too" );
+$exists = grep /not_existent_id/, @$matching_record_ids;
+is ( $exists, 0, "get_matching_record_ids: field common: common% does not inexistent id" );
+
+
$dbh->rollback;
--