From 19c7797d04fac341284a82f2ed4d3777d5f1c024 Mon Sep 17 00:00:00 2001
From: Andrew Isherwood <andrew.isherwood@ptfs-europe.com>
Date: Mon, 4 Jun 2018 12:43:37 +0100
Subject: [PATCH] Bug 20600: (follow-up) Add date range filtering

It makes more sense to be able to filter placed and updated dates by
range. This patch adds that.

Signed-off-by: Owen Leonard <oleonard@myacpl.org>
---
 .../intranet-tmpl/prog/css/src/staff-global.scss   |  6 +-
 .../prog/en/modules/ill/ill-requests.tt            | 77 ++++++++++++----------
 2 files changed, 45 insertions(+), 38 deletions(-)

diff --git a/koha-tmpl/intranet-tmpl/prog/css/src/staff-global.scss b/koha-tmpl/intranet-tmpl/prog/css/src/staff-global.scss
index 6769e9b170..7b7757029a 100644
--- a/koha-tmpl/intranet-tmpl/prog/css/src/staff-global.scss
+++ b/koha-tmpl/intranet-tmpl/prog/css/src/staff-global.scss
@@ -4016,8 +4016,10 @@ span {
     }
 }
 
-#illfilter_dateplaced,
-#illfilter_datemodified {
+#illfilter_dateplaced_start,
+#illfilter_datemodified_start,
+#illfilter_dateplaced_end,
+#illfilter_datemodified_end {
     width: 80%;
 }
 
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/ill/ill-requests.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/ill/ill-requests.tt
index 1bc94876cb..9613cdb40c 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/ill/ill-requests.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/ill/ill-requests.tt
@@ -153,43 +153,13 @@
                 }
             },
             dateModified: {
-                listener: function() {
-                    var me = 'dateModified';
-                    $('#illfilter_datemodified').change(function() {
-                        var val = $('#illfilter_datemodified').val();
-                        if (val && val.length > 0) {
-                            activeFilters[me] = function() {
-                                table.column(10).search(val);
-                            }
-                        } else {
-                            if (activeFilters.hasOwnProperty(me)) {
-                                delete activeFilters[me];
-                            }
-                        }
-                    });
-                },
                 clear: function() {
-                    $('#illfilter_datemodified').val('');
+                    $('#illfilter_datemodified_start, #illfilter_datemodified_end').val('');
                 }
             },
             datePlaced: {
-                listener: function() {
-                    var me = 'datePlaced';
-                    $('#illfilter_dateplaced').change(function() {
-                        var val = $('#illfilter_dateplaced').val();
-                        if (val && val.length > 0) {
-                            activeFilters[me] = function() {
-                                table.column(8).search(val);
-                            }
-                        } else {
-                            if (activeFilters.hasOwnProperty(me)) {
-                                delete activeFilters[me];
-                            }
-                        }
-                    });
-                },
                 clear: function() {
-                    $('#illfilter_dateplaced').val('');
+                    $('#illfilter_dateplaced_start, #illfilter_dateplaced_end').val('');
                 }
             }
         };
@@ -457,6 +427,33 @@
                     }
                 }));
 
+                // Custom date range filtering
+                $.fn.dataTable.ext.search.push(function(settings, data, dataIndex) {
+                    var placedStart = $('#illfilter_dateplaced_start').datepicker('getDate');
+                    var placedEnd = $('#illfilter_dateplaced_end').datepicker('getDate');
+                    var modifiedStart = $('#illfilter_datemodified_start').datepicker('getDate');
+                    var modifiedEnd = $('#illfilter_datemodified_end').datepicker('getDate');
+                    var rowPlaced = data[8] ? new Date(data[8]) : null;
+                    var rowModified = data[10] ? new Date(data[10]) : null;
+                    var placedPassed = true;
+                    var modifiedPassed = true;
+                    if (placedStart && rowPlaced && rowPlaced < placedStart) {
+                        placedPassed = false
+                    };
+                    if (placedEnd && rowPlaced && rowPlaced > placedEnd) {
+                        placedPassed = false;
+                    }
+                    if (modifiedStart && rowModified && rowModified < modifiedStart) {
+                        modifiedPassed = false
+                    };
+                    if (modifiedEnd && rowModified && rowModified > modifiedEnd) {
+                        modifiedPassed = false;
+                    }
+
+                    return placedPassed && modifiedPassed;
+
+                });
+
             }
         );
 
@@ -526,12 +523,20 @@
                             </select>
                         </li>
                         <li>
-                            <label for="illfilter_dateplaced">Date placed:</label>
-                            <input type="text" name="illfilter_dateplaced" id="illfilter_dateplaced" class="datepicker">
+                            <label for="illfilter_dateplaced_start">Date placed between:</label>
+                            <input type="text" name="illfilter_dateplaced_start" id="illfilter_dateplaced_start" class="datepicker">
+                        </li>
+                        <li>
+                            <label for="illfilter_dateplaced_end">and:</label>
+                            <input type="text" name="illfilter_dateplaced_end" id="illfilter_dateplaced_end" class="datepicker">
+                        </li>
+                        <li>
+                            <label for="illfilter_datemodified_start">Updated between:</label>
+                            <input type="text" name="illfilter_datemodified_start" id="illfilter_datemodified_start" class="datepicker">
                         </li>
                         <li>
-                            <label for="illfilter_datemodified">Updated on:</label>
-                            <input type="text" name="illfilter_datemodified" id="illfilter_datemodified" class="datepicker">
+                            <label for="illfilter_datemodified_end">and:</label>
+                            <input type="text" name="illfilter_datemodified_end" id="illfilter_datemodified_end" class="datepicker">
                         </li>
                         <li>
                             <label for="illfilter_branchname">Library:</label>
-- 
2.11.0