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 5 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 @@ -223,7 +223,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 @@ -235,7 +235,7 @@ function resetOptions(): void {
}

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

snackbarStore.showWarning(
'Durch die Änderung des Zeitraums wurden die Kategorie "Fahrzeuge" zurückgesetzt.'
'Durch die Änderung des Zeitraums wurden die Kategorie "Fahrzeuge" zurückgesetzt.' // TODO: move to watch:zeitraum
martind260 marked this conversation as resolved.
Show resolved Hide resolved
);
}
);
Expand Down
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 @@ -192,13 +192,14 @@ watch([chosenOptionsCopyWochentag, chosenOptionsCopyZeitraum], () => {
}
});

watch(chosenOptionsCopyZeitraum, () => {
watch(chosenOptionsCopyZeitraum, () => { // TODO: hier warnung für zurücksetzen
martind260 marked this conversation as resolved.
Show resolved Hide resolved
calculateChoosableOptions();
});

function calculateChoosableOptions(): void {
messstelleStore.calculateActiveMessfaehigkeit(
chosenOptionsCopy.value.zeitraum[0]
messstelleStore.calculateActualMessfaehigkeit(
chosenOptionsCopy.value.zeitraum[0],
chosenOptionsCopy.value.zeitraum[1]
);
}
</script>
Original file line number Diff line number Diff line change
Expand Up @@ -565,7 +565,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 All @@ -44,7 +49,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 @@ -79,17 +84,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 @@ -111,7 +155,7 @@ export const useMessstelleStore = defineStore("messstelleStore", () => {
getBelastungsplanMinSize,
getBelastungsplanMaxSize,
getBelastungsplanChosenSize,
getActiveMessfaehigkeit,
getActualMessfaehigkeit,
getIncludedMeasuringDays,
getRequestedMeasuringDays,
setActiveTab,
Expand All @@ -123,7 +167,7 @@ export const useMessstelleStore = defineStore("messstelleStore", () => {
setBelastungsplanMinSize,
setBelastungsplanMaxSize,
setBelastungsplanChosenSize,
calculateActiveMessfaehigkeit,
calculateActualMessfaehigkeit,
setIncludedMeasuringDays,
setRequestedMeasuringDays,
};
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/types/enum/Fahrzeugklasse.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
enum Fahrzeugklasse {
RAD = "RAD",
SUMME_KFZ = "Summe_KFZ",
SUMME_KFZ = "Summe_Kraftfahrzeugverkehr",
ZWEI_PLUS_EINS = "2+1",
ACHT_PLUS_EINS = "8+1",
}
Expand Down
11 changes: 11 additions & 0 deletions frontend/src/util/DateUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,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 @@ -161,5 +171,6 @@ export function useDateUtils() {
isDateRange,
isValidDate,
isValidIsoDate,
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
42 changes: 42 additions & 0 deletions frontend/src/util/MessfaehigkeitRanking.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import Fahrzeugklasse from "@/types/enum/Fahrzeugklasse";
import ZaehldatenIntervall from "@/types/enum/ZaehldatenIntervall";

export function useMessfaehigkeitRanking() {

let rankingFahrzeugklassen: Fahrzeugklasse[] = [Fahrzeugklasse.SUMME_KFZ, Fahrzeugklasse.ZWEI_PLUS_EINS, Fahrzeugklasse.ACHT_PLUS_EINS];
Der-Alex-K marked this conversation as resolved.
Show resolved Hide resolved
let rankingIntervall: ZaehldatenIntervall[] = [ZaehldatenIntervall.STUNDE_KOMPLETT, ZaehldatenIntervall.STUNDE_HALB, ZaehldatenIntervall.STUNDE_VIERTEL_EINGESCHRAENKT, ZaehldatenIntervall.STUNDE_VIERTEL];
Der-Alex-K marked this conversation as resolved.
Show resolved Hide resolved

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