Bug 27380: Add 'list' option to Koha report parameters
authorNick Clemens <nick@bywatersolutions.com>
Mon, 11 Jan 2021 17:13:38 +0000 (17:13 +0000)
committerJonathan Druart <jonathan.druart@bugs.koha-community.org>
Fri, 12 Feb 2021 11:22:08 +0000 (12:22 +0100)
TODO: Need to address the svc endpoints

To test:
1 - Create a 'New SQL report' like:
    SELECT * FROM items WHERE itemnumber IN <<Itemnumbers|list>>
2 - Run the report
3 - You should have a text area where you can enter various itemnumbers
4 - Enter some valid and invalid itemnumbers
5 - You get the info for the valid itemnumbers, no error for the others
6 - Test adding other params to the report and ensure things still work as expected

Signed-off-by: Owen Leonard <oleonard@myacpl.org>
Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
C4/Reports/Guided.pm
koha-tmpl/intranet-tmpl/prog/en/modules/reports/guided_reports_start.tt
reports/guided_reports.pl

index 8c89165..7bc1504 100644 (file)
@@ -916,6 +916,7 @@ Returns a hash containig all reserved words
 sub GetReservedAuthorisedValues {
     my %reserved_authorised_values =
             map { $_ => 1 } ( 'date',
+                              'list',
                               'branches',
                               'itemtypes',
                               'cn_source',
index f658954..c2c3138 100644 (file)
                                                 <label for="sql_params[% loop.count | html %]">[% sql_param.entry | html %]: </label>
                                                 <input id="sql_params[% loop.count | html %]" type="text" name="sql_params" />
                                             </li>
+                                        [% ELSIF ( sql_param.input == 'textarea' ) %]
+                                            <li>
+                                                <label for="sql_params[% loop.count | html %]">[% sql_param.entry | html %]: </label>
+                                                <textarea id="sql_params[% loop.count | html %]" name="sql_params" rows="5"></textarea>
+                                            </li>
                                         [% ELSE %]
                                             <li>
                                                 <label for="sql_params_[% sql_param.labelid | html %]">[% sql_param.entry | html %]:</label>
index 20abc89..e847d05 100755 (executable)
@@ -220,7 +220,6 @@ elsif ( $phase eq 'Update SQL'){
     my $cache_expiry_units = $input->param('cache_expiry_units');
     my $public = $input->param('public');
     my $save_anyway = $input->param('save_anyway');
-
     my @errors;
 
     # if we have the units, then we came from creating a report from SQL and thus need to handle converting units
@@ -734,6 +733,9 @@ elsif ($phase eq 'Run this report'){
                 } elsif ( $authorised_value eq "date" ) {
                     # require a date, provide a date picker
                     $input = 'date';
+                } elsif ( $authorised_value eq "list" ) {
+                    # require a list, provide a textarea
+                    $input = 'textarea';
                 } else {
                     # defined $authorised_value, and not 'date'
                     my $dbh=C4::Context->dbh;
@@ -1118,7 +1120,17 @@ sub get_prepped_report {
         if ($split[$i*2+1] =~ /\|\s*date\s*$/) {
             $quoted = output_pref({ dt => dt_from_string($quoted), dateformat => 'iso', dateonly => 1 }) if $quoted;
         }
-        $quoted = C4::Context->dbh->quote($quoted);
+        unless( $split[$i*2+1] =~ /\|\s*list\s*$/ && $quoted ){
+            $quoted = C4::Context->dbh->quote($quoted);
+        } else {
+            my @list = split /\n/, $quoted;
+            my @quoted_list;
+            foreach my $item ( @list ){
+                $item =~ s/\r//;
+              push @quoted_list, C4::Context->dbh->quote($item);
+            }
+            $quoted="(".join(",",@quoted_list).")";
+        }
         $sql =~ s/<<$split[$i*2+1]>>/$quoted/;
     }
     return $sql,$headers;