Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dave 368 anpassung filtersteuerung 2 #256

Open
wants to merge 8 commits into
base: sprint
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ function setDefaultOptionsForMessstelle(): void {
chosenOptions.value.stundensumme = true;
chosenOptions.value.tagessumme = true;
chosenOptions.value.spitzenstunde = true;
messstelleStore.calculateActiveMessfaehigkeit(
messstelleStore.calculateActualMessfaehigkeit(
messstelle.value.datumLetztePlausibleMessung.toString()
);
messstelleStore.setBelastungsplanChosenSize(1);
Expand All @@ -262,7 +262,7 @@ function resetOptions(): void {
}

watch(
() => messstelleStore.getActiveMessfaehigkeit.fahrzeugklassen,
() => messstelleStore.getActualMessfaehigkeit.fahrzeugklassen,
() => {
chosenOptions.value.fahrzeuge =
DefaultObjectCreator.createDefaultFahrzeugOptions();
Expand All @@ -271,9 +271,6 @@ watch(
chosenOptions.value.fahrzeuge.radverkehr =
!chosenOptions.value.fahrzeuge.kraftfahrzeugverkehr;

snackbarStore.showWarning(
'Durch die Änderung des Zeitraums wurden die Kategorie "Fahrzeuge" zurückgesetzt.'
);
}
);
</script>
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ const messstelleStore = useMessstelleStore();
const showFahrzeugkategorien = computed(() => {
return (
messstelleStore.isKfzMessstelle &&
messstelleStore.getActiveMessfaehigkeit.fahrzeugklassen ===
messstelleStore.getActualMessfaehigkeit.fahrzeugklassen ===
Fahrzeugklasse.ACHT_PLUS_EINS &&
!(
chosenOptionsCopy.value.intervall ===
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,9 @@ const messstelleStore = useMessstelleStore();

const messdatenIntervalle = computed(() => {
if (
messstelleStore.getActiveMessfaehigkeit.intervall ===
messstelleStore.getActualMessfaehigkeit.intervall ===
ZaehldatenIntervall.STUNDE_KOMPLETT ||
(messstelleStore.getActiveMessfaehigkeit.intervall ===
(messstelleStore.getActualMessfaehigkeit.intervall ===
ZaehldatenIntervall.STUNDE_VIERTEL_EINGESCHRAENKT &&
notOnlyKfzSelected.value)
) {
Expand Down Expand Up @@ -113,20 +113,20 @@ const isZeitauswahlSpitzenstunde = computed(() => {
const helpTextZeitintervall = computed(() => {
if (hoverZeitintervall.value) {
if (
messstelleStore.getActiveMessfaehigkeit.intervall ===
messstelleStore.getActualMessfaehigkeit.intervall ===
ZaehldatenIntervall.STUNDE_VIERTEL_EINGESCHRAENKT &&
notOnlyKfzSelected.value
) {
return `Es sind Verkehrsarten und / oder Fahrzeugkategorien ausgewählt für die nur 60 Minuten Intervalle vorliegen.`;
}
if (
messstelleStore.getActiveMessfaehigkeit.intervall ===
messstelleStore.getActualMessfaehigkeit.intervall ===
ZaehldatenIntervall.STUNDE_VIERTEL_EINGESCHRAENKT
) {
return `Nur für die Fahrzeugkategorie ${Fahrzeug.KFZ} liegen 15 und 30 Minuten Intervalle vor.`;
}
if (
messstelleStore.getActiveMessfaehigkeit.intervall ===
messstelleStore.getActualMessfaehigkeit.intervall ===
ZaehldatenIntervall.STUNDE_KOMPLETT
) {
return `Auf Grund der Messfähigkeit der Messstelle können nur 60 Minuten als Intervallgröße ausgewählt werden.`;
Expand All @@ -139,7 +139,7 @@ watch(
() => chosenOptionsCopy.value.zeitauswahl,
() => {
if (isIntervallChangingLocked.value) {
let intervall = messstelleStore.getActiveMessfaehigkeit.intervall;
let intervall = messstelleStore.getActualMessfaehigkeit.intervall;
if (intervall === ZaehldatenIntervall.STUNDE_VIERTEL_EINGESCHRAENKT) {
intervall = ZaehldatenIntervall.STUNDE_VIERTEL;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ import ZeitauswahlRadiogroup from "@/components/messstelle/optionsmenue/panels/Z
import ZeitauswahlStundeOrBlock from "@/components/messstelle/optionsmenue/panels/ZeitauswahlStundeOrBlock.vue";
import ZeitIntervall from "@/components/messstelle/optionsmenue/panels/ZeitIntervall.vue";
import { useMessstelleStore } from "@/store/MessstelleStore";
import { useSnackbarStore } from "@/store/SnackbarStore";
import StartAndEndDate from "@/types/common/StartAndEndDate";
import { useDateUtils } from "@/util/DateUtils";
import { useOptionsmenuUtils } from "@/util/OptionsmenuUtils";
Expand All @@ -72,6 +73,7 @@ const chosenOptionsCopy = defineModel<MessstelleOptionsDTO>({ required: true });
const messstelleStore = useMessstelleStore();
const dateUtils = useDateUtils();
const isChosenTagesTypValid = ref(true);
const snackbarStore = useSnackbarStore();

const isDateRange = computed(() => {
const chosenDates = [
Expand Down Expand Up @@ -197,10 +199,17 @@ watch(
watch(
chosenOptionsCopyStartAndEndDatum,
() => {
const isoDate = dateUtils.formatDateToISO(
const isoStartDate = dateUtils.formatDateToISO(
chosenOptionsCopy.value.zeitraumStartAndEndDate.startDate
);
messstelleStore.calculateActiveMessfaehigkeit(isoDate);
const isoEndDate = dateUtils.formatDateToISO(
chosenOptionsCopy.value.zeitraumStartAndEndDate.endDate
);
messstelleStore.calculateActualMessfaehigkeit(isoStartDate, isoEndDate);

snackbarStore.showWarning(
'Durch die Änderung des Zeitraums wurden die Kategorie "Fahrzeuge" zurückgesetzt.'
);
},
{ deep: true }
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -635,7 +635,7 @@ function isTypeDisabled(type: string): boolean {
((chosenOptionsCopy.value.intervall ===
ZaehldatenIntervall.STUNDE_VIERTEL ||
chosenOptionsCopy.value.intervall === ZaehldatenIntervall.STUNDE_HALB) &&
messstelleStore.getActiveMessfaehigkeit.intervall ===
messstelleStore.getActualMessfaehigkeit.intervall ===
ZaehldatenIntervall.STUNDE_VIERTEL_EINGESCHRAENKT &&
Fahrzeug.KFZ !== type)
);
Expand Down
70 changes: 57 additions & 13 deletions frontend/src/store/MessstelleStore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,15 @@ import { defineStore } from "pinia";
import { computed, ref } from "vue";

import DetektierteFahrzeugart from "@/types/enum/DetektierteFahrzeugart";
import Fahrzeugklasse from "@/types/enum/Fahrzeugklasse";
import ZaehldatenIntervall from "@/types/enum/ZaehldatenIntervall";
import { useDateUtils } from "@/util/DateUtils";
import DefaultObjectCreator from "@/util/DefaultObjectCreator";
import { useMessfaehigkeitRanking } from "@/util/MessfaehigkeitRanking";

export const useMessstelleStore = defineStore("messstelleStore", () => {
const dateUtils = useDateUtils();
const messfaehigkeitRanking = useMessfaehigkeitRanking();

const messstelleInfo = ref<MessstelleInfoDTO>({} as MessstelleInfoDTO);
const activeTab = ref(0);
Expand All @@ -23,7 +27,8 @@ export const useMessstelleStore = defineStore("messstelleStore", () => {
const belastungsplanMinSize = ref(0);
const belastungsplanMaxSize = ref("");
const belastungsplanChosenSize = ref(1);
const activeMessfaehigkeit = ref<MessfaehigkeitDTO>(
// Actual calculated values of Messfähigkeit for the selected day or time range
const actualMessfaehigkeit = ref<MessfaehigkeitDTO>(
DefaultObjectCreator.createDefaultMessfaehigkeitDTO()
);
const includedMeasuringDays = ref(0);
Expand Down Expand Up @@ -58,7 +63,7 @@ export const useMessstelleStore = defineStore("messstelleStore", () => {
const getBelastungsplanChosenSize = computed(
() => belastungsplanChosenSize.value
);
const getActiveMessfaehigkeit = computed(() => activeMessfaehigkeit.value);
const getActualMessfaehigkeit = computed(() => actualMessfaehigkeit.value);
const getIncludedMeasuringDays = computed(() => includedMeasuringDays.value);
const getRequestedMeasuringDays = computed(
() => requestedMeasuringDays.value
Expand Down Expand Up @@ -93,17 +98,56 @@ export const useMessstelleStore = defineStore("messstelleStore", () => {
function setBelastungsplanChosenSize(payload: number) {
belastungsplanChosenSize.value = payload;
}
function calculateActiveMessfaehigkeit(selectedDate: string): void {
function calculateActualMessfaehigkeit(
selectedAb: string,
selectedBis?: string
): void {
actualMessfaehigkeit.value.gueltigAb = selectedAb;
actualMessfaehigkeit.value.gueltigBis = selectedBis
? selectedBis
: selectedAb;
let minFahrzeugklassen: Fahrzeugklasse | null = null;
let minIntervall: ZaehldatenIntervall | null = null;

messstelleInfo.value.messfaehigkeiten.forEach(
(faehigkeit: MessfaehigkeitDTO) => {
if (
dateUtils.isDateBetweenAsStrings(
selectedDate,
faehigkeit.gueltigAb,
faehigkeit.gueltigBis
)
) {
activeMessfaehigkeit.value = faehigkeit;
if (selectedBis) {
if (
dateUtils.intersectsRange(
selectedAb,
selectedBis,
faehigkeit.gueltigAb,
faehigkeit.gueltigBis
)
) {
minFahrzeugklassen = messfaehigkeitRanking.getMinFahrzeugklassen(
faehigkeit.fahrzeugklassen,
minFahrzeugklassen
);
minIntervall = messfaehigkeitRanking.getMinIntervall(
faehigkeit.intervall,
minIntervall
);
}
actualMessfaehigkeit.value.fahrzeugklassen = minFahrzeugklassen
? minFahrzeugklassen
: Fahrzeugklasse.SUMME_KFZ;
actualMessfaehigkeit.value.intervall = minIntervall
? minIntervall
: ZaehldatenIntervall.STUNDE_KOMPLETT;
} else {
// single day selected
if (
dateUtils.isDateBetweenAsStrings(
selectedAb,
faehigkeit.gueltigAb,
faehigkeit.gueltigBis
)
) {
actualMessfaehigkeit.value.fahrzeugklassen =
faehigkeit.fahrzeugklassen;
actualMessfaehigkeit.value.intervall = faehigkeit.intervall;
}
}
}
);
Expand All @@ -125,7 +169,7 @@ export const useMessstelleStore = defineStore("messstelleStore", () => {
getBelastungsplanMinSize,
getBelastungsplanMaxSize,
getBelastungsplanChosenSize,
getActiveMessfaehigkeit,
getActualMessfaehigkeit,
getIncludedMeasuringDays,
getRequestedMeasuringDays,
setActiveTab,
Expand All @@ -138,7 +182,7 @@ export const useMessstelleStore = defineStore("messstelleStore", () => {
setBelastungsplanMinSize,
setBelastungsplanMaxSize,
setBelastungsplanChosenSize,
calculateActiveMessfaehigkeit,
calculateActualMessfaehigkeit,
setIncludedMeasuringDays,
setRequestedMeasuringDays,
};
Expand Down
4 changes: 3 additions & 1 deletion frontend/src/types/enum/Fahrzeugklasse.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
enum Fahrzeugklasse {
RAD = "RAD",
SUMME_KFZ = "Summe_KFZ",
SUMME_KFZ = "Summe_Kraftfahrzeugverkehr",
ZWEI_PLUS_EINS = "2+1",
ACHT_PLUS_EINS = "8+1",
}

export const RankingFahrzeugklassen: Fahrzeugklasse[] = [Fahrzeugklasse.SUMME_KFZ, Fahrzeugklasse.ZWEI_PLUS_EINS, Fahrzeugklasse.ACHT_PLUS_EINS];

export default Fahrzeugklasse;
2 changes: 2 additions & 0 deletions frontend/src/types/enum/ZaehldatenIntervall.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,6 @@ export const BeschreibungToZaehldatenIntervall = new Map(
[...ZaehldatenIntervallToBeschreibung].reverse()
);

export const RankingIntervall: ZaehldatenIntervall[] = [ZaehldatenIntervall.STUNDE_KOMPLETT, ZaehldatenIntervall.STUNDE_HALB, ZaehldatenIntervall.STUNDE_VIERTEL_EINGESCHRAENKT, ZaehldatenIntervall.STUNDE_VIERTEL];

export default ZaehldatenIntervall;
11 changes: 11 additions & 0 deletions frontend/src/util/DateUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,16 @@ export function useDateUtils() {
getDatumOfString(dateAfter)
);
}

function intersectsRange(
date1From: string,
date1To: string,
date2From: string,
date2To: string
): boolean {
return getDatumOfString(date1From) <= getDatumOfString(date2To) && getDatumOfString(date2From) <= getDatumOfString(date1To);
}

function isDateBetween(
dateToCheck: Date,
dateBefore: Date,
Expand Down Expand Up @@ -171,5 +181,6 @@ export function useDateUtils() {
isValidDate,
isValidIsoDate,
setTimeToZeroForGivenDate,
intersectsRange
};
}
6 changes: 3 additions & 3 deletions frontend/src/util/FahrzeugPanelTools.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ export function useFahrzeugPanelTools() {
return messstelleStore.isKfzMessstelle;
});

const activeFahrzeugklasse = computed(() => {
return messstelleStore.getActiveMessfaehigkeit.fahrzeugklassen;
const actualFahrzeugklasse = computed(() => {
return messstelleStore.getActualMessfaehigkeit.fahrzeugklassen;
});

/**
Expand All @@ -25,7 +25,7 @@ export function useFahrzeugPanelTools() {
}
if (isKfzMessstelle.value) {
let result = true;
switch (activeFahrzeugklasse.value) {
switch (actualFahrzeugklasse.value) {
case Fahrzeugklasse.ACHT_PLUS_EINS:
result = Fahrzeug.RAD.toUpperCase() === type.toUpperCase();
break;
Expand Down
40 changes: 40 additions & 0 deletions frontend/src/util/MessfaehigkeitRanking.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import Fahrzeugklasse,{RankingFahrzeugklassen} from "@/types/enum/Fahrzeugklasse";
import ZaehldatenIntervall,{RankingIntervall} from "@/types/enum/ZaehldatenIntervall";

export function useMessfaehigkeitRanking() {


function getMinFahrzeugklassen(fahrzeugklassen1: Fahrzeugklasse | null, fahrzeugklassen2: Fahrzeugklasse | null): Fahrzeugklasse {
if (!fahrzeugklassen1 && !fahrzeugklassen2) {
return Fahrzeugklasse.SUMME_KFZ;
}
if (!fahrzeugklassen1) {
return fahrzeugklassen2 as Fahrzeugklasse;
}
if (!fahrzeugklassen2) {
return fahrzeugklassen1 as Fahrzeugklasse;
}
if (fahrzeugklassen1 === Fahrzeugklasse.RAD || fahrzeugklassen2 === Fahrzeugklasse.RAD){
return Fahrzeugklasse.RAD;
}
return RankingFahrzeugklassen.findIndex(fzklassen => fzklassen === fahrzeugklassen1) < RankingFahrzeugklassen.findIndex(fzklassen => fzklassen === fahrzeugklassen2) ? fahrzeugklassen1 : fahrzeugklassen2;
}

function getMinIntervall(intervall1: ZaehldatenIntervall | null, intervall2: ZaehldatenIntervall | null) : ZaehldatenIntervall{
if (!intervall1 && !intervall2) {
return ZaehldatenIntervall.STUNDE_KOMPLETT;
}
if (!intervall1) {
return intervall2 as ZaehldatenIntervall;
}
if (!intervall2) {
return intervall1 as ZaehldatenIntervall;
}
return RankingIntervall.findIndex(interv => interv === intervall1) < RankingIntervall.findIndex(interv => interv === intervall2) ? intervall1 : intervall2;
}

return {
getMinFahrzeugklassen,
getMinIntervall
};
}
Loading