Added date range filter.

This commit is contained in:
DESKTOP-T0O5CDB\DESK-555BD
2024-12-12 11:56:05 -07:00
parent 5cf3538be3
commit 97acd873eb
7 changed files with 92 additions and 6 deletions

View File

@@ -358,19 +358,43 @@ namespace CarCareTracker.Controllers
{ {
if (reportParameter.TagFilter == TagFilter.Exclude) if (reportParameter.TagFilter == TagFilter.Exclude)
{ {
vehicleRecords.OdometerRecords.RemoveAll(x => x.Tags.Any(y => reportParameter.Tags.Contains(y)));
vehicleRecords.ServiceRecords.RemoveAll(x => x.Tags.Any(y => reportParameter.Tags.Contains(y))); vehicleRecords.ServiceRecords.RemoveAll(x => x.Tags.Any(y => reportParameter.Tags.Contains(y)));
vehicleRecords.CollisionRecords.RemoveAll(x => x.Tags.Any(y => reportParameter.Tags.Contains(y))); vehicleRecords.CollisionRecords.RemoveAll(x => x.Tags.Any(y => reportParameter.Tags.Contains(y)));
vehicleRecords.UpgradeRecords.RemoveAll(x => x.Tags.Any(y => reportParameter.Tags.Contains(y))); vehicleRecords.UpgradeRecords.RemoveAll(x => x.Tags.Any(y => reportParameter.Tags.Contains(y)));
vehicleRecords.TaxRecords.RemoveAll(x => x.Tags.Any(y => reportParameter.Tags.Contains(y))); vehicleRecords.TaxRecords.RemoveAll(x => x.Tags.Any(y => reportParameter.Tags.Contains(y)));
gasViewModels.RemoveAll(x => x.Tags.Any(y => reportParameter.Tags.Contains(y))); gasViewModels.RemoveAll(x => x.Tags.Any(y => reportParameter.Tags.Contains(y)));
vehicleRecords.GasRecords.RemoveAll(x => x.Tags.Any(y => reportParameter.Tags.Contains(y)));
} }
else if (reportParameter.TagFilter == TagFilter.IncludeOnly) else if (reportParameter.TagFilter == TagFilter.IncludeOnly)
{ {
vehicleRecords.OdometerRecords.RemoveAll(x => !x.Tags.Any(y => reportParameter.Tags.Contains(y)));
vehicleRecords.ServiceRecords.RemoveAll(x => !x.Tags.Any(y => reportParameter.Tags.Contains(y))); vehicleRecords.ServiceRecords.RemoveAll(x => !x.Tags.Any(y => reportParameter.Tags.Contains(y)));
vehicleRecords.CollisionRecords.RemoveAll(x => !x.Tags.Any(y => reportParameter.Tags.Contains(y))); vehicleRecords.CollisionRecords.RemoveAll(x => !x.Tags.Any(y => reportParameter.Tags.Contains(y)));
vehicleRecords.UpgradeRecords.RemoveAll(x => !x.Tags.Any(y => reportParameter.Tags.Contains(y))); vehicleRecords.UpgradeRecords.RemoveAll(x => !x.Tags.Any(y => reportParameter.Tags.Contains(y)));
vehicleRecords.TaxRecords.RemoveAll(x => !x.Tags.Any(y => reportParameter.Tags.Contains(y))); vehicleRecords.TaxRecords.RemoveAll(x => !x.Tags.Any(y => reportParameter.Tags.Contains(y)));
gasViewModels.RemoveAll(x => !x.Tags.Any(y => reportParameter.Tags.Contains(y))); gasViewModels.RemoveAll(x => !x.Tags.Any(y => reportParameter.Tags.Contains(y)));
vehicleRecords.GasRecords.RemoveAll(x => !x.Tags.Any(y => reportParameter.Tags.Contains(y)));
}
}
//filter by date range.
if (reportParameter.FilterByDateRange && !string.IsNullOrWhiteSpace(reportParameter.StartDate) && !string.IsNullOrWhiteSpace(reportParameter.EndDate))
{
var startDate = DateTime.Parse(reportParameter.StartDate).Date;
var endDate = DateTime.Parse(reportParameter.EndDate).Date;
//validate date range
if (endDate >= startDate) //allow for same day.
{
vehicleHistory.StartDate = reportParameter.StartDate;
vehicleHistory.EndDate = reportParameter.EndDate;
//remove all records with dates after the end date and dates before the start date.
vehicleRecords.OdometerRecords.RemoveAll(x => x.Date.Date > endDate || x.Date.Date < startDate);
vehicleRecords.ServiceRecords.RemoveAll(x => x.Date.Date > endDate || x.Date.Date < startDate);
vehicleRecords.CollisionRecords.RemoveAll(x => x.Date.Date > endDate || x.Date.Date < startDate);
vehicleRecords.UpgradeRecords.RemoveAll(x => x.Date.Date > endDate || x.Date.Date < startDate);
vehicleRecords.TaxRecords.RemoveAll(x => x.Date.Date > endDate || x.Date.Date < startDate);
gasViewModels.RemoveAll(x => DateTime.Parse(x.Date).Date > endDate || DateTime.Parse(x.Date).Date < startDate);
vehicleRecords.GasRecords.RemoveAll(x => x.Date.Date > endDate || x.Date.Date < startDate);
} }
} }
var maxMileage = _vehicleLogic.GetMaxMileage(vehicleRecords); var maxMileage = _vehicleLogic.GetMaxMileage(vehicleRecords);

View File

@@ -6,5 +6,8 @@
public List<string> ExtraFields { get; set; } = new List<string>(); public List<string> ExtraFields { get; set; } = new List<string>();
public TagFilter TagFilter { get; set; } = TagFilter.Exclude; public TagFilter TagFilter { get; set; } = TagFilter.Exclude;
public List<string> Tags { get; set; } = new List<string>(); public List<string> Tags { get; set; } = new List<string>();
public bool FilterByDateRange { get; set; } = false;
public string StartDate { get; set; } = "";
public string EndDate { get; set; } = "";
} }
} }

View File

@@ -17,5 +17,7 @@
public decimal TotalDepreciation { get; set; } public decimal TotalDepreciation { get; set; }
public decimal DepreciationPerDay { get; set; } public decimal DepreciationPerDay { get; set; }
public decimal DepreciationPerMile { get; set; } public decimal DepreciationPerMile { get; set; }
public string StartDate { get; set; }
public string EndDate { get; set; }
} }
} }

View File

@@ -40,3 +40,16 @@
</select> </select>
<select multiple id="tagSelectorInput"></select> <select multiple id="tagSelectorInput"></select>
</div> </div>
<h2 class="mb-2 report-advanced-parameters d-none">@translator.Translate(userLanguage, "Filter by Date Range")</h2>
<div class="text-start report-advanced-parameters d-none">
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" role="switch" id="dateRangeSelector">
<label class="form-check-label" for="dateRangeSelector">@translator.Translate(userLanguage, "Filter by Date Range")</label>
</div>
<div class="input-group">
<span class="input-group-text">@translator.Translate(userLanguage, "From")</span>
<input type="text" id="dateRangeStartDate" class="form-control" placeholder="@translator.Translate(userLanguage,"Start Date")">
<span class="input-group-text">@translator.Translate(userLanguage, "To")</span>
<input type="text" id="dateRangeEndDate" class="form-control" placeholder="@translator.Translate(userLanguage,"End Date")">
</div>
</div>

View File

@@ -12,7 +12,19 @@
<div class="row mt-2"> <div class="row mt-2">
<div class="d-flex"> <div class="d-flex">
<img src="@config.GetLogoUrl()" class="lubelogger-logo" /> <img src="@config.GetLogoUrl()" class="lubelogger-logo" />
<span class="display-6 ms-5">@translator.Translate(userLanguage, "Vehicle Maintenance Report")</span> <div class="ms-5">
<span class="display-6">
@translator.Translate(userLanguage, "Vehicle Maintenance Report")
</span>
@if (!string.IsNullOrWhiteSpace(Model.StartDate) && !string.IsNullOrWhiteSpace(Model.EndDate))
{
<br />
<span class="lead ms-2">
@($"{@translator.Translate(userLanguage, "From")} {Model.StartDate} {@translator.Translate(userLanguage, "To")} {Model.EndDate}")
</span>
}
</div>
</div> </div>
</div> </div>
<hr /> <hr />

File diff suppressed because one or more lines are too long

View File

@@ -6,6 +6,9 @@ function getAndValidateSelectedColumns() {
var reportExtraFields = []; var reportExtraFields = [];
var tagFilterMode = $("#tagSelector").val(); var tagFilterMode = $("#tagSelector").val();
var tagsToFilter = $("#tagSelectorInput").val(); var tagsToFilter = $("#tagSelectorInput").val();
var filterByDateRange = $("#dateRangeSelector").is(":checked");
var startDate = $("#dateRangeStartDate").val();
var endDate = $("#dateRangeEndDate").val();
$("#columnSelector :checked").map(function () { $("#columnSelector :checked").map(function () {
if ($(this).hasClass('column-default')) { if ($(this).hasClass('column-default')) {
reportVisibleColumns.push(this.value); reportVisibleColumns.push(this.value);
@@ -13,21 +16,45 @@ function getAndValidateSelectedColumns() {
reportExtraFields.push(this.value); reportExtraFields.push(this.value);
} }
}); });
var hasValidationError = false;
var validationErrorMessage = "";
if (reportVisibleColumns.length + reportExtraFields.length == 0) { if (reportVisibleColumns.length + reportExtraFields.length == 0) {
hasValidationError = true;
validationErrorMessage = "You must select at least one column";
}
if (filterByDateRange) {
//validate date range
let startDateTicks = $("#dateRangeStartDate").datepicker('getDate')?.getTime();
let endDateTicks = $("#dateRangeEndDate").datepicker('getDate')?.getTime();
if (!startDateTicks || !endDateTicks || startDateTicks > endDateTicks) {
hasValidationError = true;
validationErrorMessage = "Invalid date range";
}
}
if (hasValidationError) {
return { return {
hasError: true, hasError: true,
errorMessage: validationErrorMessage,
visibleColumns: [], visibleColumns: [],
extraFields: [], extraFields: [],
tagFilter: tagFilterMode, tagFilter: tagFilterMode,
tags: [] tags: [],
filterByDateRange: filterByDateRange,
startDate: '',
endDate: ''
} }
} else { } else {
return { return {
hasError: false, hasError: false,
errorMessage: '',
visibleColumns: reportVisibleColumns, visibleColumns: reportVisibleColumns,
extraFields: reportExtraFields, extraFields: reportExtraFields,
tagFilter: tagFilterMode, tagFilter: tagFilterMode,
tags: tagsToFilter tags: tagsToFilter,
filterByDateRange: filterByDateRange,
startDate: startDate,
endDate: endDate
} }
} }
} }
@@ -50,6 +77,9 @@ function getSavedReportParameters() {
selectedReportColumns.tags.map(x => { selectedReportColumns.tags.map(x => {
$("#tagSelectorInput").append(`<option value='${x}'>${x}</option>`) $("#tagSelectorInput").append(`<option value='${x}'>${x}</option>`)
}); });
$("#dateRangeSelector").prop('checked', selectedReportColumns.filterByDateRange);
$("#dateRangeStartDate").val(selectedReportColumns.startDate);
$("#dateRangeEndDate").val(selectedReportColumns.endDate);
} }
} }
function generateVehicleHistoryReport() { function generateVehicleHistoryReport() {
@@ -65,13 +95,15 @@ function generateVehicleHistoryReport() {
//validate //validate
var selectedColumnsData = getAndValidateSelectedColumns(); var selectedColumnsData = getAndValidateSelectedColumns();
if (selectedColumnsData.hasError) { if (selectedColumnsData.hasError) {
Swal.showValidationMessage(`You must select at least one column`); Swal.showValidationMessage(selectedColumnsData.errorMessage);
} }
return { selectedColumnsData } return { selectedColumnsData }
}, },
didOpen: () => { didOpen: () => {
getSavedReportParameters(); getSavedReportParameters();
initTagSelector($("#tagSelectorInput")); initTagSelector($("#tagSelectorInput"));
initDatePicker($('#dateRangeStartDate'));
initDatePicker($('#dateRangeEndDate'));
} }
}).then(function (result) { }).then(function (result) {
if (result.isConfirmed) { if (result.isConfirmed) {