Bug 26032: Add 'is new' filter in items search
In items search, add a filter on value of items.new_status with a Ignore/Yes/No. Yes meaning != 0, No meaning = 0, with considering that NULL value is like 0. This patch adds 'isnull' option to filter, this may be reused on other fields. Test plan : 1) Define an item subfield on items.new_status with authorised values YES_NO (0 or 1) 2) Edit an item A to set new_status=1 3) Edit an item B to set new_status=0 4) Perform an item search with 'is new' = 'ignore' => you get all items 5) Perform an item search with 'is new' = 'yes' => you get item A 6) Perform an item search with 'is new' = 'no' => you get all items but A Signed-off-by: Emmi Takkinen <emmi.takkinen@outlook.com> Signed-off-by: Séverine QUEUNE <severine.queune@bulac.fr> Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de> Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
This commit is contained in:
parent
5da551a6a2
commit
8a874de3f4
|
|
@ -1337,6 +1337,7 @@ sub _SearchItems_build_where_fragment {
|
|||
if ( (0 < grep { $_ eq $field } @columns) or (substr($field, 0, 5) eq 'marc:') ) {
|
||||
my $op = $filter->{operator};
|
||||
my $query = $filter->{query};
|
||||
my $ifnull = $filter->{ifnull};
|
||||
|
||||
if (!$op or (0 == grep { $_ eq $op } @operators)) {
|
||||
$op = '='; # default operator
|
||||
|
|
@ -1377,6 +1378,10 @@ sub _SearchItems_build_where_fragment {
|
|||
$column = $field;
|
||||
}
|
||||
|
||||
if ( defined $ifnull ) {
|
||||
$column = "IFNULL($column, ?)";
|
||||
}
|
||||
|
||||
if (ref $query eq 'ARRAY') {
|
||||
if ($op eq '=') {
|
||||
$op = 'IN';
|
||||
|
|
@ -1393,6 +1398,10 @@ sub _SearchItems_build_where_fragment {
|
|||
args => [ $query ],
|
||||
};
|
||||
}
|
||||
|
||||
if ( defined $ifnull ) {
|
||||
unshift @{ $where_fragment->{args} }, $ifnull;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -164,12 +164,15 @@ if (scalar keys %params > 0) {
|
|||
push @{ $filter->{filters} }, $f;
|
||||
|
||||
# Yes/No parameters
|
||||
foreach my $p (qw( damaged )) {
|
||||
foreach my $p (qw( damaged new_status )) {
|
||||
my $v = $cgi->param($p) // '';
|
||||
my $f = {
|
||||
field => $p,
|
||||
query => 0,
|
||||
};
|
||||
if ( $p eq 'new_status' ) {
|
||||
$f->{ifnull} = 0;
|
||||
}
|
||||
if ($v eq 'yes') {
|
||||
$f->{operator} = '!=';
|
||||
push @{ $filter->{filters} }, $f;
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@
|
|||
[%- CASE 'damaged' %]<span>Damaged</span>
|
||||
[%- CASE 'itemlost' %]<span>Lost</span>
|
||||
[%- CASE 'withdrawn' %]<span>Withdrawn</span>
|
||||
[%- CASE 'new_status' %]<span>Is new</span>
|
||||
[%- END -%]
|
||||
[%- END -%]
|
||||
|
||||
|
|
@ -194,6 +195,7 @@
|
|||
<span class="hint">(inclusive)</span>
|
||||
</div>
|
||||
[% INCLUDE form_field_radio_yes_no name="damaged" %]
|
||||
[% INCLUDE form_field_radio_yes_no name="new_status" %]
|
||||
<div class="form-field">
|
||||
<label class="form-field-label" for="issues_op">Checkout count:</label>
|
||||
<select id="issues_op" name="issues_op">
|
||||
|
|
|
|||
Loading…
Reference in New Issue