From ab77705ca238bceb43daeb19c5b0a6316c6dd24f Mon Sep 17 00:00:00 2001 From: johnnyq Date: Mon, 20 Oct 2025 18:04:00 -0400 Subject: [PATCH] Feature: Replace old date range to Date Range Picker JS for better date from/to handling --- agent/clients.php | 49 +++++----------- agent/expenses.php | 33 +++-------- agent/invoices.php | 33 +++-------- agent/payments.php | 33 +++-------- agent/projects.php | 33 +++-------- agent/quotes.php | 33 +++-------- agent/recurring_expenses.php | 33 +++-------- agent/recurring_invoices.php | 33 +++-------- agent/revenues.php | 33 +++-------- agent/tickets.php | 61 +++----------------- agent/transfers.php | 33 +++-------- agent/trips.php | 33 +++-------- includes/filter_header.php | 8 ++- includes/footer.php | 1 + js/date_filter.js | 108 +++++++++++++++++++++++++++++++++++ 15 files changed, 206 insertions(+), 351 deletions(-) create mode 100644 js/date_filter.js diff --git a/agent/clients.php b/agent/clients.php index 2dbd32af..08aa960f 100644 --- a/agent/clients.php +++ b/agent/clients.php @@ -178,49 +178,28 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
" id="advancedFilter" >
-
+
- - + + + + +
-
-
- - -
-
-
-
- - -
-
-
+ +
- - - - - - - - - - -
-
-
-
- - -
-
-
-
- - + + + + +
diff --git a/agent/invoices.php b/agent/invoices.php index 995d837a..d988f095 100644 --- a/agent/invoices.php +++ b/agent/invoices.php @@ -230,34 +230,15 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
-
" id="advancedFilter"> +
" id="advancedFilter">
-
+
- - -
-
-
-
- - -
-
-
-
- - + + + + +
diff --git a/agent/payments.php b/agent/payments.php index 6f00c86e..5604b0ac 100644 --- a/agent/payments.php +++ b/agent/payments.php @@ -123,34 +123,15 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
-
" id="advancedFilter"> +
" id="advancedFilter">
-
+
- - -
-
-
-
- - -
-
-
-
- - + + + + +
diff --git a/agent/projects.php b/agent/projects.php index 6e20f694..b80401cc 100644 --- a/agent/projects.php +++ b/agent/projects.php @@ -94,34 +94,15 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
-
" id="advancedFilter"> +
" id="advancedFilter">
-
+
- - -
-
-
-
- - -
-
-
-
- - + + + + +
diff --git a/agent/quotes.php b/agent/quotes.php index eeb65d54..2e82774f 100644 --- a/agent/quotes.php +++ b/agent/quotes.php @@ -75,34 +75,15 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
-
" id="advancedFilter"> +
" id="advancedFilter">
-
+
- - -
-
-
-
- - -
-
-
-
- - + + + + +
diff --git a/agent/recurring_expenses.php b/agent/recurring_expenses.php index b03224ba..79e115a4 100644 --- a/agent/recurring_expenses.php +++ b/agent/recurring_expenses.php @@ -51,34 +51,15 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
-
" id="advancedFilter"> +
" id="advancedFilter">
-
+
- - -
-
-
-
- - -
-
-
-
- - + + + + +
diff --git a/agent/recurring_invoices.php b/agent/recurring_invoices.php index abfe3a49..67b6e037 100644 --- a/agent/recurring_invoices.php +++ b/agent/recurring_invoices.php @@ -76,34 +76,15 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
-
" id="advancedFilter"> +
" id="advancedFilter">
-
+
- - -
-
-
-
- - -
-
-
-
- - + + + + +
diff --git a/agent/revenues.php b/agent/revenues.php index 5e501ed6..da524287 100644 --- a/agent/revenues.php +++ b/agent/revenues.php @@ -46,34 +46,15 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
-
" id="advancedFilter"> +
" id="advancedFilter">
-
+
- - -
-
-
-
- - -
-
-
-
- - + + + + +
diff --git a/agent/tickets.php b/agent/tickets.php index f4e12581..f1e73b14 100644 --- a/agent/tickets.php +++ b/agent/tickets.php @@ -306,8 +306,7 @@ $sql_categories_filter = mysqli_query(
-
+
- - -
-
-
-
- - -
-
-
-
- - + + + + +
diff --git a/agent/transfers.php b/agent/transfers.php index 632d9441..6ebcfb0b 100644 --- a/agent/transfers.php +++ b/agent/transfers.php @@ -69,34 +69,15 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
-
" id="advancedFilter"> +
" id="advancedFilter">
-
+
- - -
-
-
-
- - -
-
-
-
- - + + + + +
diff --git a/agent/trips.php b/agent/trips.php index 9414342b..b7792f17 100644 --- a/agent/trips.php +++ b/agent/trips.php @@ -70,34 +70,15 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
-
" id="advancedFilter"> +
" id="advancedFilter">
-
+
- - -
-
-
-
- - -
-
-
-
- - + + + + +
diff --git a/includes/filter_header.php b/includes/filter_header.php index 1008ef2f..cc31ef9c 100644 --- a/includes/filter_header.php +++ b/includes/filter_header.php @@ -98,9 +98,13 @@ if ($_GET['canned_date'] == "custom" && !empty($_GET['dtf'])) { } elseif ($_GET['canned_date'] == "lastyear") { $dtf = date('Y-m-d', strtotime("first day of january last year")); $dtt = date('Y-m-d', strtotime("last day of december last year")); +}elseif (isset($_GET['canned_date']) && $_GET['canned_date'] === "alltime") { + $dtf = '1970-01-01'; + $dtt = '2099-12-31'; } else { - $dtf = "NULL"; - $dtt = '2035-12-31'; + // Fallback acts like all time + $dtf = '1970-01-01'; + $dtt = '2099-12-31'; } // Archived diff --git a/includes/footer.php b/includes/footer.php index c90d42bc..ce5b8bf2 100644 --- a/includes/footer.php +++ b/includes/footer.php @@ -51,6 +51,7 @@ if (basename(dirname($_SERVER['REQUEST_URI'])) === 'guest') { ?> + diff --git a/js/date_filter.js b/js/date_filter.js new file mode 100644 index 00000000..502710f6 --- /dev/null +++ b/js/date_filter.js @@ -0,0 +1,108 @@ +(function ($, window) { + "use strict"; + + $(function () { + var $input = $('#dateFilter'); + if (!$input.length) return; // nothing to initialize + + var $canned = $('#canned_date'); + var $dtf = $('#dtf'); + var $dtt = $('#dtt'); + + // Default to "All Time" if nothing provided + var hasValues = + ($dtf.val() && $dtt.val()) || + ($canned.val() && $canned.val() !== ''); + + if (!hasValues) { + $canned.val('alltime'); + $dtf.val('1970-01-01'); + $dtt.val('2099-12-31'); + } + + var initialStart = moment($dtf.val(), "YYYY-MM-DD"); + var initialEnd = moment($dtt.val(), "YYYY-MM-DD"); + + function setDisplay(start, end, label) { + // Special display for All Time + if ( + label === 'All Time' || + (start.format('YYYY-MM-DD') === '1970-01-01' && + end.format('YYYY-MM-DD') === '2099-12-31') + ) { + $input.val('All Time'); + } else { + $input.val(start.format('YYYY-MM-DD') + " — " + end.format('YYYY-MM-DD')); + } + } + + var cannedMap = { + "Today": "today", + "Yesterday": "yesterday", + "This Week": "thisweek", + "Last Week": "lastweek", + "This Month": "thismonth", + "Last Month": "lastmonth", + "This Year": "thisyear", + "Last Year": "lastyear", + "All Time": "alltime" + }; + + $input.daterangepicker({ + startDate: initialStart, + endDate: initialEnd, + autoUpdateInput: true, + opens: 'left', + locale: { + format: 'YYYY-MM-DD', + firstDay: 1 + }, + ranges: { + 'Today': [moment(), moment()], + 'Yesterday': [moment().subtract(1, 'day'), moment().subtract(1, 'day')], + 'This Week': [moment().startOf('isoWeek'), moment()], + 'Last Week': [ + moment().subtract(1, 'week').startOf('isoWeek'), + moment().subtract(1, 'week').endOf('isoWeek') + ], + 'This Month': [moment().startOf('month'), moment()], + 'Last Month': [ + moment().subtract(1, 'month').startOf('month'), + moment().subtract(1, 'month').endOf('month') + ], + 'This Year': [moment().startOf('year'), moment()], + 'Last Year': [ + moment().subtract(1, 'year').startOf('year'), + moment().subtract(1, 'year').endOf('year') + ], + 'All Time': [ + moment('1970-01-01', 'YYYY-MM-DD'), + moment('2099-12-31', 'YYYY-MM-DD') + ] + } + }, setDisplay); + + // Show initial label + setDisplay(initialStart, initialEnd); + + $input.on('apply.daterangepicker', function (ev, picker) { + var label = picker.chosenLabel || ''; + var canned = cannedMap[label]; + + if (canned) { + $canned.val(canned); + $dtf.val(''); + $dtt.val(''); + } else { + $canned.val('custom'); + $dtf.val(picker.startDate.format('YYYY-MM-DD')); + $dtt.val(picker.endDate.format('YYYY-MM-DD')); + } + + setDisplay(picker.startDate, picker.endDate, label); + + // Auto-submit form + this.form.submit(); + }); + }); +})(jQuery, window); \ No newline at end of file