From 96981a44d81977d8513901fb5c178c429fcf1fb9 Mon Sep 17 00:00:00 2001
From: Fridolyn SOMERS <fridolyn.somers@biblibre.com>
Date: Tue, 6 Nov 2012 09:50:48 +0100
Subject: [PATCH] [SIGNED-OFF] Bug 8443: Suggestions publication year and
 copyright date

Main patch correcting suggestions search :
- allow filtering on copyrightdate, manageddate and accepteddate
- entered dates remains in filter during search
- empty and null values are in the same tab
- null/empty values are not present in filers comboboxes

Signed-off-by: Chris Cormack <chris@bigballofwax.co.nz>
Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de>
---
 C4/Suggestions.pm                                  |    6 +++---
 .../prog/en/modules/suggestion/suggestion.tt       |   20 ++++++++++----------
 suggestion/suggestion.pl                           |   19 +++++++++++++++++--
 3 files changed, 30 insertions(+), 15 deletions(-)

diff --git a/C4/Suggestions.pm b/C4/Suggestions.pm
index 0cb484a..3489105 100644
--- a/C4/Suggestions.pm
+++ b/C4/Suggestions.pm
@@ -121,7 +121,7 @@ sub SearchSuggestion  {
         push @sql_params,'%'.$s.'%'; 
         " and suggestions.$_ like ? ";
         } else { () }
-    } qw( title author isbn publishercode collectiontitle )
+    } qw( title author isbn publishercode copyrightdate collectiontitle )
     );
 
     my $userenv = C4::Context->userenv;
@@ -137,7 +137,7 @@ sub SearchSuggestion  {
     foreach my $field (grep { my $fieldname=$_;
         any {$fieldname eq $_ } qw<
     STATUS branchcode itemtype suggestedby managedby acceptedby
-    bookfundid biblionumber
+    budgetid biblionumber
     >} keys %$suggestion
     ) {
         if ($$suggestion{$field}){
@@ -155,7 +155,7 @@ sub SearchSuggestion  {
         my $from = $_ . "_from";
         my $to = $_ . "_to";
         if ($$suggestion{$from} || $$suggestion{$to}) {
-            push @query, " AND suggestions.suggesteddate BETWEEN '" 
+            push @query, " AND suggestions.$_ BETWEEN '"
                 . (format_date_in_iso($$suggestion{$from}) || 0000-00-00) . "' AND '" . (format_date_in_iso($$suggestion{$to}) || $today) . "'";
         } 
     }
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/suggestion.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/suggestion.tt
index fb73fd1..d1b38ec 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/suggestion.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/suggestion.tt
@@ -493,7 +493,7 @@ $(document).ready(function() { calcNewsuggTotal(); });
                     <li><label for="author"> Author:</label><input type="text" id="author" name="author" value="[% author %]" /></li>
                     <li><label for="isbn"> ISBN:</label><input type="text" id="isbn"  name="isbn" value="[% isbn %]" /></li>
                     <li><label for="publishercode"> Publisher:</label><input type="text" id="publishercode" name="publishercode" value="[% publishercode %]" /></li>
-                    <li><label for="publicationyear"> Publication year:</label><input type="text" id="publicationyear" name="publicationyear" value="[% publicationyear %]" /></li>
+                    <li><label for="copyrightdate_filter"> Copyright date:</label><input type="text" id="copyrightdate_filter" name="copyrightdate" value="[% copyrightdate %]" /></li>
                     <li><label for="collectiontitle"> Collection title:</label><input type="text" id="collectiontitle" name="collectiontitle" value="[% collectiontitle %]" /></li><li><input type="submit" value="Go" /></li></ol>
                 </fieldset>
 				 <fieldset class="brief"><h4 class="collapse"><a href="#">Suggestion information</a></h4>
@@ -511,39 +511,39 @@ $(document).ready(function() { calcNewsuggTotal(); });
                     <li><label for="suggestedby"> Suggested by:</label><select id="suggestedby" name="suggestedby"><option value="">Any</option>
 [% FOREACH suggestedby_loo IN suggestedby_loop %][% IF ( suggestedby_loo.selected ) %]<option value="[% suggestedby_loo.code %]" selected="selected">[% suggestedby_loo.desc %]</option>[% ELSE %]<option value="[% suggestedby_loo.code %]">[% suggestedby_loo.desc %]</option>[% END %][% END %]
                                                                      </select></li>
-                    <li><label for="suggesteddate_from"> Suggested on:</label>[% suggesteddate %]
+                    <li><label for="suggesteddate_from"> Suggested on:</label>
                         <table class="invis">
                         <tr>
-                        <td><label for="suggesteddate_from">from:</label></td><td><input type="text" id="suggesteddate_from" name="suggesteddate_from" style="width:80px;" /></td>
+                        <td><label for="suggesteddate_from">from:</label></td><td><input type="text" id="suggesteddate_from" name="suggesteddate_from" value="[% suggesteddate_from %]" style="width:80px;" /></td>
                         </tr>
                         <tr>
-                        <td><label for="suggesteddate_to">to:</label></td><td><input type="text" id="suggesteddate_to" name="suggesteddate_to" style="width:80px;" /></td>
+                        <td><label for="suggesteddate_to">to:</label></td><td><input type="text" id="suggesteddate_to" name="suggesteddate_to" value="[% suggesteddate_to %]" style="width:80px;" /></td>
                         </tr>
                         </table>
                     </li>
                     <li><label for="managedby"> Managed by:</label><select id="managedby" name="managedby"><option value="">Any</option>
 [% FOREACH managedby_loo IN managedby_loop %][% IF ( managedby_loo.selected ) %]<option value="[% managedby_loo.code %]" selected="selected">[% managedby_loo.desc %]</option>[% ELSE %]<option value="[% managedby_loo.code %]">[% managedby_loo.desc %]</option>[% END %][% END %]
                                                                      </select></li>
-                    <li><label for="manageddate_from"> Management date:</label>[% manageddate %]
+                    <li><label for="manageddate_from"> Management date:</label>
                         <table class="invis">
                         <tr>
-                        <td><label for="manageddate_from">from:</label></td><td><input type="text" id="manageddate_from" name="manageddate_from" style="width:80px;" /></td>
+                        <td><label for="manageddate_from">from:</label></td><td><input type="text" id="manageddate_from" name="manageddate_from" value="[% manageddate_from %]" style="width:80px;" /></td>
                         </tr>
                         <tr>
-                        <td><label for="manageddate_to">to:</label></td><td><input type="text" id="manageddate_to" name="manageddate_to" style="width:80px;" /></td>
+                        <td><label for="manageddate_to">to:</label></td><td><input type="text" id="manageddate_to" name="manageddate_to" value="[% manageddate_to %]" style="width:80px;" /></td>
                         </tr>
                         </table>
                     </li>
                     <li><label for="acceptedby"> Accepted by:</label><select id="acceptedby" name="acceptedby"><option value="">Any</option>
 [% FOREACH acceptedby_loo IN acceptedby_loop %][% IF ( acceptedby_loo.selected ) %] <option value="[% acceptedby_loo.code %]" selected="selected">[% acceptedby_loo.desc %]</option>[% ELSE %]<option value="[% acceptedby_loo.code %]">[% acceptedby_loo.desc %]</option>[% END %][% END %]
 		                                      </select></li>
-                    <li><label for="accepteddate_from"> Accepted on:</label>[% accepteddate %]
+                    <li><label for="accepteddate_from"> Accepted on:</label>
                         <table class="invis">
                         <tr>
-                        <td><label for="accepteddate_from">from:</label></td><td><input type="text" id="accepteddate_from" name="accepteddate_from" style="width:80px;" /></td>
+                        <td><label for="accepteddate_from">from:</label></td><td><input type="text" id="accepteddate_from" name="accepteddate_from" value="[% accepteddate_from %]" style="width:80px;" /></td>
                         </tr>
                         <tr>
-                        <td><label for="accepteddate_to">to:</label></td><td><input type="text" id="accepteddate_to" name="accepteddate_to" style="width:80px;" /></td>
+                        <td><label for="accepteddate_to">to:</label></td><td><input type="text" id="accepteddate_to" name="accepteddate_to" value="[% accepteddate_to %]" style="width:80px;" /></td>
                         </tr>
                         </table>
                     </li>
diff --git a/suggestion/suggestion.pl b/suggestion/suggestion.pl
index 99f38eb..717d5df 100755
--- a/suggestion/suggestion.pl
+++ b/suggestion/suggestion.pl
@@ -190,10 +190,22 @@ if ($op=~/else/) {
     
     $displayby||="STATUS";
     delete $$suggestion_ref{'branchcode'} if($displayby eq "branchcode");
+    # distinct values of display by
     my $criteria_list=GetDistinctValues("suggestions.".$displayby);
+    my (@criteria_dv, $criteria_has_empty);
+    foreach (@$criteria_list) {
+        if ($_->{value}) {
+            push @criteria_dv, $_->{value};
+        } else {
+            $criteria_has_empty = 1;
+        }
+    }
+    # agregate null and empty values under empty value
+    push @criteria_dv, '' if $criteria_has_empty;
+
     my @allsuggestions;
     my $reasonsloop = GetAuthorisedValues("SUGGEST");
-    foreach my $criteriumvalue ( map { $$_{'value'} } @$criteria_list ) {
+    foreach my $criteriumvalue ( @criteria_dv ) {
         # By default, display suggestions from current working branch
         if(not defined $branchfilter) {
             $$suggestion_ref{'branchcode'} = C4::Context->userenv->{'branch'};
@@ -356,15 +368,18 @@ $template->param(
 	total            => sprintf("%.2f", $$suggestion_ref{'total'}||0),
 );
 
+# lists of distinct values (without empty) for filters
 my %hashlists;
 foreach my $field ( qw(managedby acceptedby suggestedby budgetid) ) {
     my $values_list;
     $values_list = GetDistinctValues( "suggestions." . $field );
     my @codes_list = map {
         {   'code' => $$_{'value'},
-            'desc' => GetCriteriumDesc( $$_{'value'}, $field ),
+            'desc' => GetCriteriumDesc( $$_{'value'}, $field ) || $$_{'value'},
             'selected' => ($$suggestion_ref{$field}) ? $$_{'value'} eq $$suggestion_ref{$field} : 0,
         }
+    } grep {
+        $$_{'value'}
     } @$values_list;
     $hashlists{ lc($field) . "_loop" } = \@codes_list;
 }
-- 
1.7.9.5