Added date range filter.
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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; } = "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,4 +39,17 @@
|
|||||||
<!option value="@TagFilter.IncludeOnly">@translator.Translate(userLanguage, "Only Include Records with these Tags")</!option>
|
<!option value="@TagFilter.IncludeOnly">@translator.Translate(userLanguage, "Only Include Records with these Tags")</!option>
|
||||||
</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>
|
||||||
@@ -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
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user