@@ -393,6 +393,25 @@ namespace CarCareTracker.Controllers
|
|||||||
var upgradeRecords = _upgradeRecordDataAccess.GetUpgradeRecordsByVehicleId(vehicleId);
|
var upgradeRecords = _upgradeRecordDataAccess.GetUpgradeRecordsByVehicleId(vehicleId);
|
||||||
var taxRecords = _taxRecordDataAccess.GetTaxRecordsByVehicleId(vehicleId);
|
var taxRecords = _taxRecordDataAccess.GetTaxRecordsByVehicleId(vehicleId);
|
||||||
var gasRecords = _gasRecordDataAccess.GetGasRecordsByVehicleId(vehicleId);
|
var gasRecords = _gasRecordDataAccess.GetGasRecordsByVehicleId(vehicleId);
|
||||||
|
//filter by tags
|
||||||
|
if (reportParameter.Tags.Any())
|
||||||
|
{
|
||||||
|
if (reportParameter.TagFilter == TagFilter.Exclude)
|
||||||
|
{
|
||||||
|
serviceRecords.RemoveAll(x => x.Tags.Any(y => reportParameter.Tags.Contains(y)));
|
||||||
|
repairRecords.RemoveAll(x => x.Tags.Any(y => reportParameter.Tags.Contains(y)));
|
||||||
|
upgradeRecords.RemoveAll(x => x.Tags.Any(y => reportParameter.Tags.Contains(y)));
|
||||||
|
taxRecords.RemoveAll(x => x.Tags.Any(y => reportParameter.Tags.Contains(y)));
|
||||||
|
gasRecords.RemoveAll(x => x.Tags.Any(y => reportParameter.Tags.Contains(y)));
|
||||||
|
} else if (reportParameter.TagFilter == TagFilter.IncludeOnly)
|
||||||
|
{
|
||||||
|
serviceRecords.RemoveAll(x => !x.Tags.Any(y => reportParameter.Tags.Contains(y)));
|
||||||
|
repairRecords.RemoveAll(x => !x.Tags.Any(y => reportParameter.Tags.Contains(y)));
|
||||||
|
upgradeRecords.RemoveAll(x => !x.Tags.Any(y => reportParameter.Tags.Contains(y)));
|
||||||
|
taxRecords.RemoveAll(x => !x.Tags.Any(y => reportParameter.Tags.Contains(y)));
|
||||||
|
gasRecords.RemoveAll(x => !x.Tags.Any(y => reportParameter.Tags.Contains(y)));
|
||||||
|
}
|
||||||
|
}
|
||||||
bool useMPG = _config.GetUserConfig(User).UseMPG;
|
bool useMPG = _config.GetUserConfig(User).UseMPG;
|
||||||
bool useUKMPG = _config.GetUserConfig(User).UseUKMPG;
|
bool useUKMPG = _config.GetUserConfig(User).UseUKMPG;
|
||||||
string preferredFuelMileageUnit = _config.GetUserConfig(User).PreferredGasMileageUnit;
|
string preferredFuelMileageUnit = _config.GetUserConfig(User).PreferredGasMileageUnit;
|
||||||
|
|||||||
8
Enum/TagFilter.cs
Normal file
8
Enum/TagFilter.cs
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
namespace CarCareTracker.Models
|
||||||
|
{
|
||||||
|
public enum TagFilter
|
||||||
|
{
|
||||||
|
Exclude = 0,
|
||||||
|
IncludeOnly = 1
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,7 +2,9 @@
|
|||||||
{
|
{
|
||||||
public class ReportParameter
|
public class ReportParameter
|
||||||
{
|
{
|
||||||
public List<string> VisibleColumns { get; set; } = new List<string>();
|
public List<string> VisibleColumns { get; set; } = new List<string>();
|
||||||
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 List<string> Tags { get; set; } = new List<string>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,21 +6,29 @@
|
|||||||
var userLanguage = userConfig.UserLanguage;
|
var userLanguage = userConfig.UserLanguage;
|
||||||
}
|
}
|
||||||
@model ReportParameter
|
@model ReportParameter
|
||||||
<div id="columnSelector">
|
<div id="columnSelector" style="max-height:50vh; overflow-y:auto;">
|
||||||
<ul class="list-group">
|
<ul class="list-group">
|
||||||
@foreach(string column in Model.VisibleColumns)
|
@foreach (string column in Model.VisibleColumns)
|
||||||
{
|
{
|
||||||
<li class="list-group-item text-start">
|
<li class="list-group-item text-start">
|
||||||
<input class="form-check-input column-default" type="checkbox" value="@column" id="visibleColumn_@column" checked>
|
<input class="form-check-input column-default" type="checkbox" value="@column" id="visibleColumn_@column" checked>
|
||||||
<label class="form-check-label stretched-link" for="visibleColumn_@column">@(translator.Translate(userLanguage, column == nameof(GenericReportModel.DataType) ? "Type" : column))</label>
|
<label class="form-check-label stretched-link" for="visibleColumn_@column">@(translator.Translate(userLanguage, column == nameof(GenericReportModel.DataType) ? "Type" : column))</label>
|
||||||
</li>
|
</li>
|
||||||
}
|
}
|
||||||
@foreach(string extraField in Model.ExtraFields)
|
@foreach (string extraField in Model.ExtraFields)
|
||||||
{
|
{
|
||||||
<li class="list-group-item text-start">
|
<li class="list-group-item text-start">
|
||||||
<input class="form-check-input column-extrafield" type="checkbox" value="@extraField" id="extraField_@extraField">
|
<input class="form-check-input column-extrafield" type="checkbox" value="@extraField" id="extraField_@extraField">
|
||||||
<label class="form-check-label stretched-link" for="extraField_@extraField">@extraField</label>
|
<label class="form-check-label stretched-link" for="extraField_@extraField">@extraField</label>
|
||||||
</li>
|
</li>
|
||||||
}
|
}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
<h2 class="swal2-title">Filter by Tags</h2>
|
||||||
|
<div class="mt-2 text-start">
|
||||||
|
<select class="form-select" id="tagSelector">
|
||||||
|
<!option value="@TagFilter.Exclude">@translator.Translate(userLanguage, "Exclude Records with these Tags")</!option>
|
||||||
|
<!option value="@TagFilter.IncludeOnly">@translator.Translate(userLanguage, "Only Include Records with these Tags")</!option>
|
||||||
|
</select>
|
||||||
|
<select multiple id="tagSelectorInput"></select>
|
||||||
|
</div>
|
||||||
File diff suppressed because one or more lines are too long
@@ -4,6 +4,8 @@
|
|||||||
function getAndValidateSelectedColumns() {
|
function getAndValidateSelectedColumns() {
|
||||||
var reportVisibleColumns = [];
|
var reportVisibleColumns = [];
|
||||||
var reportExtraFields = [];
|
var reportExtraFields = [];
|
||||||
|
var tagFilterMode = $("#tagSelector").val();
|
||||||
|
var tagsToFilter = $("#tagSelectorInput").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);
|
||||||
@@ -15,13 +17,17 @@ function getAndValidateSelectedColumns() {
|
|||||||
return {
|
return {
|
||||||
hasError: true,
|
hasError: true,
|
||||||
visibleColumns: [],
|
visibleColumns: [],
|
||||||
extraFields: []
|
extraFields: [],
|
||||||
|
tagFilter: tagFilterMode,
|
||||||
|
tags: []
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return {
|
return {
|
||||||
hasError: false,
|
hasError: false,
|
||||||
visibleColumns: reportVisibleColumns,
|
visibleColumns: reportVisibleColumns,
|
||||||
extraFields: reportExtraFields
|
extraFields: reportExtraFields,
|
||||||
|
tagFilter: tagFilterMode,
|
||||||
|
tags: tagsToFilter
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -36,10 +42,14 @@ function getSavedReportParameters() {
|
|||||||
//load selected checkboxes
|
//load selected checkboxes
|
||||||
selectedReportColumns.extraFields.map(x => {
|
selectedReportColumns.extraFields.map(x => {
|
||||||
$(`[value='${x}'].column-extrafield`).prop('checked', true);
|
$(`[value='${x}'].column-extrafield`).prop('checked', true);
|
||||||
})
|
});
|
||||||
selectedReportColumns.visibleColumns.map(x => {
|
selectedReportColumns.visibleColumns.map(x => {
|
||||||
$(`[value='${x}'].column-default`).prop('checked', true);
|
$(`[value='${x}'].column-default`).prop('checked', true);
|
||||||
})
|
});
|
||||||
|
$("#tagSelector").val(selectedReportColumns.tagFilter);
|
||||||
|
selectedReportColumns.tags.map(x => {
|
||||||
|
$("#tagSelectorInput").append(`<option value='${x}'>${x}</option>`)
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function generateVehicleHistoryReport() {
|
function generateVehicleHistoryReport() {
|
||||||
@@ -62,6 +72,7 @@ function generateVehicleHistoryReport() {
|
|||||||
},
|
},
|
||||||
didOpen: () => {
|
didOpen: () => {
|
||||||
getSavedReportParameters();
|
getSavedReportParameters();
|
||||||
|
initTagSelector($("#tagSelectorInput"));
|
||||||
}
|
}
|
||||||
}).then(function (result) {
|
}).then(function (result) {
|
||||||
if (result.isConfirmed) {
|
if (result.isConfirmed) {
|
||||||
|
|||||||
Reference in New Issue
Block a user