From 543d1800603956797d6a157201744a0d51eb839d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cihan=20=C5=9Eent=C3=BCrk?= <53110792+CihanSenturk@users.noreply.github.com> Date: Thu, 27 Mar 2025 18:26:45 +0300 Subject: [PATCH 1/3] fixed search end date invalid issue --- resources/assets/js/components/AkauntingSearch.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/assets/js/components/AkauntingSearch.vue b/resources/assets/js/components/AkauntingSearch.vue index 4f525aea8..56915467b 100644 --- a/resources/assets/js/components/AkauntingSearch.vue +++ b/resources/assets/js/components/AkauntingSearch.vue @@ -486,7 +486,7 @@ export default { let dates = this.selected_values[index].key.split('-to-'); date_range_path += sign + 'start_date=' + dates[0]; - date_range_path += '&end_date=' + dates[1]; + date_range_path += '&end_date=' + (dates[1] ? dates[1] : dates[0]); return; } From 776e8c85996166bf14257784e79d3975e7f98f86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cihan=20=C5=9Eent=C3=BCrk?= <53110792+CihanSenturk@users.noreply.github.com> Date: Thu, 27 Mar 2025 20:29:48 +0300 Subject: [PATCH 2/3] fixed report search invalid date format issue --- app/Http/Controllers/Common/Reports.php | 4 +- app/Http/Requests/Common/ReportShow.php | 51 +++++++++ .../assets/js/components/AkauntingSearch.vue | 107 ++++++++++-------- resources/assets/js/plugins/functions.js | 12 +- 4 files changed, 125 insertions(+), 49 deletions(-) create mode 100644 app/Http/Requests/Common/ReportShow.php diff --git a/app/Http/Controllers/Common/Reports.php b/app/Http/Controllers/Common/Reports.php index c4f6dd927..39b790ea6 100644 --- a/app/Http/Controllers/Common/Reports.php +++ b/app/Http/Controllers/Common/Reports.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Common; use App\Abstracts\Http\Controller; use App\Http\Requests\Common\Report as Request; +use App\Http\Requests\Common\ReportShow as ShowRequest; use App\Jobs\Common\CreateReport; use App\Jobs\Common\DeleteReport; use App\Jobs\Common\UpdateReport; @@ -66,9 +67,10 @@ class Reports extends Controller * Show the form for viewing the specified resource. * * @param Report $report + * @param ShowRequest $request * @return Response */ - public function show(Report $report) + public function show(Report $report, ShowRequest $request) { if (Utility::cannotShow($report->class)) { abort(403); diff --git a/app/Http/Requests/Common/ReportShow.php b/app/Http/Requests/Common/ReportShow.php new file mode 100644 index 000000000..708a64f4f --- /dev/null +++ b/app/Http/Requests/Common/ReportShow.php @@ -0,0 +1,51 @@ + 'nullable|date', + 'end_date' => 'nullable|date', + ]; + } + + public function failedValidation(Validator $validator) + { + // "If start_date and end_date is invalid, clear the values + if ($validator->errors()->has('start_date') && $validator->errors()->has('end_date')) { + request()->query->remove('start_date'); + request()->query->remove('end_date'); + + return; + } + + // If start_date is invalid, set it to be equal to end_date. + if ($validator->errors()->has('start_date')) { + request()->merge([ + 'start_date' => request('end_date'), + ]); + + return; + } + + // If end_date is invalid, set it to be equal to start_date. + if ($validator->errors()->has('end_date')) { + request()->merge([ + 'end_date' => request('start_date'), + ]); + + return; + } + } +} diff --git a/resources/assets/js/components/AkauntingSearch.vue b/resources/assets/js/components/AkauntingSearch.vue index 56915467b..3ed3e4b68 100644 --- a/resources/assets/js/components/AkauntingSearch.vue +++ b/resources/assets/js/components/AkauntingSearch.vue @@ -176,7 +176,7 @@ import moment from 'moment'; import flatPicker from "vue-flatpickr-component"; import "flatpickr/dist/flatpickr.css"; -import {getQueryVariable} from './../plugins/functions'; +import {getQueryVariable, removeURLParameter} from './../plugins/functions'; export default { name: 'akaunting-search', @@ -486,7 +486,7 @@ export default { let dates = this.selected_values[index].key.split('-to-'); date_range_path += sign + 'start_date=' + dates[0]; - date_range_path += '&end_date=' + (dates[1] ? dates[1] : dates[0]); + date_range_path += '&end_date=' + dates[1]; return; } @@ -1088,59 +1088,72 @@ export default { } if (getQueryVariable('start_date') && getQueryVariable('end_date')) { - this.filter_list.forEach(function (_filter, i) { - if (_filter.key != 'date_range') { - return; - } + let start = new Date(getQueryVariable('start_date')); + let end = new Date(getQueryVariable('end_date')); + let start_date = getQueryVariable('start_date'); + let end_date = getQueryVariable('end_date'); - this.selected_options.push(this.filter_list[i]); + if ((start instanceof Date && ! isNaN(start)) || (end instanceof Date && ! isNaN(end))) { + start_date = (start instanceof Date && ! isNaN(start)) ? start_date : ((end instanceof Date && ! isNaN(end)) ? end_date : false); + end_date = (end instanceof Date && ! isNaN(end)) ? end_date : ((start instanceof Date && ! isNaN(start)) ? start_date : false); - this.selected_operator.push({ - key: '=', - }); - - this.filter_list.splice(i, 1); - - let value_assigned = false; - let filter_values = this.convertOption(_filter.values); - - this.option_values[_filter.key] = filter_values; - - let date_range_value = getQueryVariable('start_date') + '-to-' + getQueryVariable('end_date'); - - filter_values.forEach(function (value, j) { - if (value.key == date_range_value) { - this.selected_values.push(value); - - this.option_values[_filter.key].splice(j, 1); - - value_assigned = true; + this.filter_list.forEach(function (_filter, i) { + if (_filter.key != 'date_range') { + return; } - }, this); - let date_range_value_format = ''; + this.selected_options.push(this.filter_list[i]); - if (! value_assigned) { - let dates = date_range_value.split('-to-'); - - let date_format = this.convertToDarteFormat(this.dateConfig.altFormat); - - date_range_value_format = moment(dates[0]).format(date_format) + ' to ' + moment(dates[1]).format(date_format); - - this.selected_values.push({ - key: date_range_value, - value: date_range_value_format, + this.selected_operator.push({ + key: '=', }); - } - this.filtered.push({ - option: _filter.value, - operator: '=', - value: (_filter.values[date_range_value]) ? _filter.values[date_range_value] : date_range_value_format, - }); + this.filter_list.splice(i, 1); - this.filter_index++; - }, this); + let value_assigned = false; + let filter_values = this.convertOption(_filter.values); + + this.option_values[_filter.key] = filter_values; + + let date_range_value = start_date + '-to-' + end_date; + + filter_values.forEach(function (value, j) { + if (value.key == date_range_value) { + this.selected_values.push(value); + + this.option_values[_filter.key].splice(j, 1); + + value_assigned = true; + } + }, this); + + let date_range_value_format = ''; + + if (! value_assigned) { + let dates = date_range_value.split('-to-'); + + let date_format = this.convertToDarteFormat(this.dateConfig.altFormat); + + date_range_value_format = moment(dates[0]).format(date_format) + ' to ' + moment(dates[1]).format(date_format); + + this.selected_values.push({ + key: date_range_value, + value: date_range_value_format, + }); + } + + this.filtered.push({ + option: _filter.value, + operator: '=', + value: (_filter.values[date_range_value]) ? _filter.values[date_range_value] : date_range_value_format, + }); + + this.filter_index++; + }, this); + } else { + removeURLParameter('start_date'); + removeURLParameter('end_date'); + } } }, diff --git a/resources/assets/js/plugins/functions.js b/resources/assets/js/plugins/functions.js index 4b858c00a..ae0ac7baf 100644 --- a/resources/assets/js/plugins/functions.js +++ b/resources/assets/js/plugins/functions.js @@ -15,6 +15,16 @@ function getQueryVariable(variable) { return(false); } +function removeURLParameter(param) { + let url = window.location.href; + let regex = new RegExp("[?&]" + param + "(=[^&#]*)?", "g"); + + url = url.replace(regex, ""); + url = url.replace(/[?&]$/, ""); + + window.history.replaceState({}, document.title, url); +} + const { evaluate } = require('mathjs'); // use the evaluate function to evaluate the expression @@ -30,4 +40,4 @@ const setPromiseTimeout = time => , time) ); -export {getQueryVariable, calculationToQuantity, setPromiseTimeout} +export {getQueryVariable, removeURLParameter, calculationToQuantity, setPromiseTimeout} From 5d0f76dfd1c37a5b3e505b24bdb17bb8b8ab72b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cihan=20=C5=9Eent=C3=BCrk?= <53110792+CihanSenturk@users.noreply.github.com> Date: Thu, 27 Mar 2025 20:36:13 +0300 Subject: [PATCH 3/3] fixed search end date invalid issue --- resources/assets/js/components/AkauntingSearch.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/assets/js/components/AkauntingSearch.vue b/resources/assets/js/components/AkauntingSearch.vue index 3ed3e4b68..7d57cc414 100644 --- a/resources/assets/js/components/AkauntingSearch.vue +++ b/resources/assets/js/components/AkauntingSearch.vue @@ -486,8 +486,8 @@ export default { let dates = this.selected_values[index].key.split('-to-'); date_range_path += sign + 'start_date=' + dates[0]; - date_range_path += '&end_date=' + dates[1]; - + date_range_path += '&end_date=' + (dates[1] ? dates[1] : dates[0]); + return; }