Skip to content

Commit

Permalink
Feat/dave 205 gesamtauswertungen ausgabe excel (#231)
Browse files Browse the repository at this point in the history
* Download funktionalitaet fuer xlsx eingebaut und refactoring des FetchService

* umgestellt auf neue Datenstruktur

* Reviewanmerkungen umgesetzt

* Reviewanmerkungen umgesetzt

* linter

* Reviewanmerkungen umgesetzt

* Reviewanmerkungen umgesetzt
  • Loading branch information
Der-Alex-K authored Nov 19, 2024
1 parent 2464192 commit bd16ff6
Show file tree
Hide file tree
Showing 14 changed files with 184 additions and 150 deletions.
85 changes: 45 additions & 40 deletions frontend/src/api/service/FetchService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ export default class FetchService {
static getData(endpoint: string, errorMessage: string): Promise<any> {
const url = `${this.BASE}/${endpoint}`;
const request = FetchUtils.getGETConfig();
return FetchService.sendRequest(url, request, errorMessage);
return FetchService.sendRequestForJson(url, request, errorMessage);
}

static postData(
Expand All @@ -21,7 +21,27 @@ export default class FetchService {
): Promise<any> {
const url = `${this.BASE}/${endpoint}`;
const request = FetchUtils.getPOSTConfig(dataToSave);
return FetchService.sendRequest(url, request, errorMessage);
return FetchService.sendRequestForJson(url, request, errorMessage);
}

static postForPdf(
dataToSave: any,
endpoint: string,
errorMessage: string
): Promise<Blob> {
const url = `${this.BASE}/${endpoint}`;
const request = FetchUtils.getPdfPOSTConfig(dataToSave);
return FetchService.sendRequestForBlob(url, request, errorMessage);
}

static postForBlob(
dataToSave: any,
endpoint: string,
errorMessage: string
): Promise<Blob> {
const url = `${this.BASE}/${endpoint}`;
const request = FetchUtils.getPOSTConfig(dataToSave);
return FetchService.sendRequestForBlob(url, request, errorMessage);
}

static patchData(
Expand All @@ -31,7 +51,7 @@ export default class FetchService {
): Promise<any> {
const url = `${this.BASE}/${endpoint}`;
const request = FetchUtils.getPATCHConfig(dataToSave);
return FetchService.sendRequest(url, request, errorMessage);
return FetchService.sendRequestForJson(url, request, errorMessage);
}

static putData(
Expand All @@ -41,14 +61,34 @@ export default class FetchService {
): Promise<any> {
const url = `${this.BASE}/${endpoint}`;
const request = FetchUtils.getPUTConfig(dataToSave);
return FetchService.sendRequest(url, request, errorMessage);
return FetchService.sendRequestForJson(url, request, errorMessage);
}

private static sendRequest(
private static sendRequestForJson(
url: string,
request: RequestInit,
errorMessage: string
): Promise<any> {
return this.sendRequest(url, request, errorMessage).then((response) => {
return response.json();
});
}

private static sendRequestForBlob(
url: string,
request: RequestInit,
errorMessage: string
): Promise<Blob> {
return this.sendRequest(url, request, errorMessage).then((response) => {
return response.blob();
});
}

private static sendRequest(
url: string,
request: RequestInit,
errorMessage: string
): Promise<Response> {
return fetch(url, request)
.catch((error) => {
throw new ApiError(
Expand Down Expand Up @@ -93,41 +133,6 @@ export default class FetchService {
`Fehler: ${response.status} ${response.statusText}`
);
}
return response.json();
});
}

static postForPdf(
dataToSave: any,
endpoint: string,
errorMessage: string
): Promise<any> {
const url = `${this.BASE}/${endpoint}`;
const request = FetchUtils.getPdfPOSTConfig(dataToSave);
return FetchService.sendRequestForPDF(url, request, errorMessage);
}

private static sendRequestForPDF(
url: string,
request: RequestInit,
errorMessage: string
): Promise<any> {
return fetch(url, request)
.catch((error) => {
throw new ApiError(
Levels.ERROR,
`Die Verbindung zum Service konnte nicht aufgebaut werden.`,
error
);
})
.then((response) => {
if (!response.ok) {
throw new ApiError(
Levels.ERROR,
errorMessage,
`Fehler: ${response.status} ${response.statusText}`
);
}
return response;
});
}
Expand Down
8 changes: 4 additions & 4 deletions frontend/src/api/service/GeneratePdfService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ export default class GeneratePdfService {
charttype: string,
zaehlungId: string,
data: FormData
): Promise<Response> {
): Promise<Blob> {
return this.postPdfCustomFetchTemplate(
"zaehlung",
charttype,
Expand All @@ -21,7 +21,7 @@ export default class GeneratePdfService {
charttype: string,
messstelleId: string,
data: FormData
): Promise<Response> {
): Promise<Blob> {
return this.postPdfCustomFetchTemplate(
"messstelle",
charttype,
Expand All @@ -35,15 +35,15 @@ export default class GeneratePdfService {
charttype: string,
fachId: string,
data: FormData
): Promise<Response> {
): Promise<Blob> {
return FetchService.postForPdf(
data,
`${this.ENDPOINT}/${type}?charttype=${charttype}&fach_id=${fachId}`,
"Beim generieren der PDF ist ein Fehler aufgetreten."
);
}

static postPdfCustomFetchReport(data: FormData): Promise<Response> {
static postPdfCustomFetchReport(data: FormData): Promise<Blob> {
return FetchService.postForPdf(
data,
`${this.ENDPOINT}/report`,
Expand Down
4 changes: 2 additions & 2 deletions frontend/src/api/service/MessstelleAuswertungService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ export default class MessstelleAuswertungService {
"Beim Laden der Messstellen ist ein Fehler aufgetreten."
);
}
static generate(options: MessstelleAuswertungOptionsDTO): Promise<void> {
return FetchService.postData(
static generate(options: MessstelleAuswertungOptionsDTO): Promise<Blob> {
return FetchService.postForBlob(
options,
`${this.ENDPOINT}`,
"Beim Laden der Auswertung ist ein Fehler aufgetreten."
Expand Down
6 changes: 3 additions & 3 deletions frontend/src/components/common/DateRangePicker.vue
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
<template>
<!-- https://vue3datepicker.com/ -->
<vue-date-picker
class="ml-1 mt-2 mb-3"
v-model="choosenDates"
class="ml-1 mt-2 mb-3"
range
position="left"
:multi-calendars="MULTI_CALENDAR_OPTIONS"
Expand Down Expand Up @@ -37,13 +37,13 @@
>
<v-text-field
:label="label"
density="compact"
:model-value="value"
:rules="[(toCheck: string) => validateTextDate(toCheck)]"
density="compact"
variant="underlined"
clearable
@blur="onBlur"
@input="onInput"
:rules="[(toCheck: string) => validateTextDate(toCheck)]"
@click:clear="onClear"
@keyup.enter="onEnter"
@keyup.tab="onTab"
Expand Down
26 changes: 12 additions & 14 deletions frontend/src/components/messstelle/charts/MessstelleDiagramme.vue
Original file line number Diff line number Diff line change
Expand Up @@ -549,20 +549,18 @@ function fetchPdf(formData: FormData, type: string) {
messstelleId.value,
formData
)
.then((res) => {
res.blob().then((blob) => {
// Erster Buchstabe soll im Dateinamen groß geschrieben sein, also z. B. Ganglinie statt ganglinie.
const typeForFilename: string =
type.charAt(0).toUpperCase() + type.slice(1);
// Beispiel: 251101K_15-11-2020_Belastungsplan.pdf
const filename = `${reportTools.getFileName(
Erhebungsstelle.MESSSTELLE,
typeForFilename,
options.value.zeitraum
)}.pdf`;
downloadUtils.downloadFile(blob, filename);
});
.then((blob) => {
// Erster Buchstabe soll im Dateinamen groß geschrieben sein, also z. B. Ganglinie statt ganglinie.
const typeForFilename: string =
type.charAt(0).toUpperCase() + type.slice(1);
// Beispiel: 251101K_15-11-2020_Belastungsplan.pdf
const filename = `${reportTools.getFileName(
Erhebungsstelle.MESSSTELLE,
typeForFilename,
options.value.zeitraum
)}.pdf`;
downloadUtils.downloadFile(blob, filename);
})
.catch((error) => snackbarStore.showApiError(error))
.finally(() => (loadingFile.value = false));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@
import type MessstelleAuswertungOptionsDTO from "@/types/messstelle/auswertung/MessstelleAuswertungOptionsDTO";
import type { VStepperVerticalItem } from "vuetify/labs/components";
import { head, isEmpty, toArray } from "lodash";
import { computed, ref, watch } from "vue";
import FahrzeugeStepContent from "@/components/messstelle/gesamtauswertung/stepper/FahrzeugeStepContent.vue";
Expand Down Expand Up @@ -117,16 +118,20 @@ const selectedTagesTypAsSummary = computed(() => {
return summary;
});
const selectedOrtAsSummary = computed(() => {
const mstIds = auswertungOptions.value.mstIds;
const messstelleAuswertungIds = toArray(
auswertungOptions.value.messstelleAuswertungIds
);
let summary = ``;
if (mstIds.length > 1) {
summary = `Mst-Id's': ${mstIds.join(", ")}`;
}
if (mstIds.length === 1) {
const mqIds = auswertungOptions.value.mqIds;
summary = `Mst-Id: ${mstIds[0]}, MQ-Id${
mqIds.length > 1 ? "'s" : ""
}: ${mqIds.join(", ")} `;
const allMstIds: Array<string> = messstelleAuswertungIds.map(
(value) => value.mstId
);
if (!isEmpty(messstelleAuswertungIds)) {
summary = `Mst-Id${allMstIds.length > 1 ? "'s" : ""}: ${allMstIds.join(", ")}`;
if (messstelleAuswertungIds.length === 1) {
const firstMessstelleAuswertungIdDTO = head(messstelleAuswertungIds)!;
const mqIds = toArray(firstMessstelleAuswertungIdDTO.mqIds);
summary = `${summary}, MQ-Id${mqIds.length > 1 ? "'s" : ""}: ${mqIds.join(", ")} `;
}
}
if (!isOrtMessstelleSelected()) {
summary = "Es muss mindestens eine Messstelle ausgewählt sein.";
Expand All @@ -138,7 +143,7 @@ const selectedOrtAsSummary = computed(() => {
});
function isJahreSelected(): boolean {
return !(auswertungOptions.value.jahre.length === 0 && activeStep.value > 1);
return !(isEmpty(auswertungOptions.value.jahre) && activeStep.value > 1);
}
function isTagesTypSelected(): boolean {
Expand All @@ -148,19 +153,23 @@ function isTagesTypSelected(): boolean {
}
function isJahresintervallSelected(): boolean {
return !(
auswertungOptions.value.zeitraum.length === 0 && activeStep.value > 0
);
return !(isEmpty(auswertungOptions.value.zeitraum) && activeStep.value > 0);
}
function isOrtMessstelleSelected(): boolean {
return !(auswertungOptions.value.mstIds.length === 0 && activeStep.value > 3);
return !(
isEmpty(auswertungOptions.value.messstelleAuswertungIds) &&
activeStep.value > 3
);
}
function isOrtMessquerschnittSelected(): boolean {
const messstelleAuswertungIdDTOS = toArray(
auswertungOptions.value.messstelleAuswertungIds
);
return !(
auswertungOptions.value.mstIds.length === 1 &&
auswertungOptions.value.mqIds.length === 0 &&
messstelleAuswertungIdDTOS.length === 1 &&
head(messstelleAuswertungIdDTOS)!.mqIds.length === 0 &&
activeStep.value > 3
);
}
Expand Down
Loading

0 comments on commit bd16ff6

Please sign in to comment.