Merge pull request #3277 from CihanSenturk/fix-report-search-invalid-date-filter-isue

Fixed report search invalid date filter issue
This commit is contained in:
Cihan Şentürk 2025-03-27 20:36:59 +03:00 committed by GitHub
commit a1062f9c74
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 126 additions and 50 deletions

View File

@ -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);

View File

@ -0,0 +1,51 @@
<?php
namespace App\Http\Requests\Common;
use App\Abstracts\Http\FormRequest;
use Illuminate\Contracts\Validation\Validator;
class ReportShow extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'start_date' => '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;
}
}
}

View File

@ -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,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;
}
@ -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');
}
}
},

View File

@ -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}