From 23a37b260110b4c628c551c03788c1c26fe06865 Mon Sep 17 00:00:00 2001 From: Lurkars Date: Sat, 5 Oct 2024 01:45:17 +0200 Subject: [PATCH] update customer filter and overview --- .../controller/TurnoverController.java | 32 ++++++++++++++++++- .../admin/TurnoverManagementController.java | 2 +- .../pages/turnovers/manage/manage.page.html | 10 ++++++ .../app/pages/turnovers/turnovers.page.html | 12 ++++++- .../src/app/pages/turnovers/turnovers.page.ts | 16 ++++++++++ .../src/app/services/turnover.service.ts | 4 +++ .../src/app/ui/turnovers/turnovers.ui.html | 6 ++++ .../src/app/ui/turnovers/turnovers.ui.ts | 1 + .../src/assets/i18n/de-informal.json | 10 ++++-- buntspecht.code-workspace | 20 ++++-------- 10 files changed, 93 insertions(+), 20 deletions(-) diff --git a/buntspecht-backend/src/main/java/de/champonthis/buntspecht/controller/TurnoverController.java b/buntspecht-backend/src/main/java/de/champonthis/buntspecht/controller/TurnoverController.java index e6cda5a..038e56c 100644 --- a/buntspecht-backend/src/main/java/de/champonthis/buntspecht/controller/TurnoverController.java +++ b/buntspecht-backend/src/main/java/de/champonthis/buntspecht/controller/TurnoverController.java @@ -1,10 +1,10 @@ package de.champonthis.buntspecht.controller; import java.time.Instant; +import java.util.List; import java.util.Optional; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.web.PagedModel; import org.springframework.http.HttpStatus; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.util.StringUtils; @@ -20,6 +20,7 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.querydsl.core.QueryResults; +import com.querydsl.core.Tuple; import de.champonthis.buntspecht.businesslogic.TurnoverManager; import de.champonthis.buntspecht.businesslogic.UserManager; @@ -64,6 +65,35 @@ public class TurnoverController extends BaseController { sort.orElse("created"), descending.orElse(false), filter); } + @PreAuthorize("isAuthenticated()") + @GetMapping("/overview") + @Transactional + public Tuple overview( + @RequestParam("limit") Optional limitParameter, + @RequestParam("offset") Optional offsetParameter, + @RequestParam("sort") Optional sort, + @RequestParam("descending") Optional descending, + @RequestParam("from") Optional from, + @RequestParam("to") Optional to, + @RequestParam("customer") Optional customer, + @RequestParam("motif") Optional motif) { + + TurnoverFilterModel filter = new TurnoverFilterModel(); + filter.setCreated(new MinMax(from.orElse(null), to.orElse(null))); + filter.setCustomer(customer.orElse(null)); + filter.setMotif(motif.orElse(null)); + + List result = turnoverManager.overview(getCurrentUsername(), limitParameter.orElse(15L), + offsetParameter.orElse(0L), sort.orElse("username"), + descending.orElse(false), filter).getResults(); + + if (result.isEmpty()) { + return null; + } + + return result.get(0); + } + @PreAuthorize("isAuthenticated()") @GetMapping("/{id}") @Transactional diff --git a/buntspecht-backend/src/main/java/de/champonthis/buntspecht/controller/admin/TurnoverManagementController.java b/buntspecht-backend/src/main/java/de/champonthis/buntspecht/controller/admin/TurnoverManagementController.java index 8ae24f7..371daca 100644 --- a/buntspecht-backend/src/main/java/de/champonthis/buntspecht/controller/admin/TurnoverManagementController.java +++ b/buntspecht-backend/src/main/java/de/champonthis/buntspecht/controller/admin/TurnoverManagementController.java @@ -64,7 +64,7 @@ public class TurnoverManagementController extends BaseController { @PreAuthorize("hasRole('ROLE_ADMIN')") @GetMapping("/overview") @Transactional - public QueryResults fetchGroup( + public QueryResults overview( @RequestParam("username") Optional usernameParameter, @RequestParam("limit") Optional limitParameter, @RequestParam("offset") Optional offsetParameter, diff --git a/buntspecht-frontend/src/app/pages/turnovers/manage/manage.page.html b/buntspecht-frontend/src/app/pages/turnovers/manage/manage.page.html index 89ed444..4330cd2 100644 --- a/buntspecht-frontend/src/app/pages/turnovers/manage/manage.page.html +++ b/buntspecht-frontend/src/app/pages/turnovers/manage/manage.page.html @@ -31,6 +31,16 @@ } + + + {{'turnovers.filter.customer' | i18n}} + + + + + {{'turnovers.filter.motif' | i18n}} + + diff --git a/buntspecht-frontend/src/app/pages/turnovers/turnovers.page.html b/buntspecht-frontend/src/app/pages/turnovers/turnovers.page.html index e13f1d4..3d08079 100644 --- a/buntspecht-frontend/src/app/pages/turnovers/turnovers.page.html +++ b/buntspecht-frontend/src/app/pages/turnovers/turnovers.page.html @@ -19,9 +19,19 @@ + + + {{'turnovers.filter.customer' | i18n}} + + + + + {{'turnovers.filter.motif' | i18n}} + + - \ No newline at end of file diff --git a/buntspecht-frontend/src/app/pages/turnovers/turnovers.page.ts b/buntspecht-frontend/src/app/pages/turnovers/turnovers.page.ts index ad1d9ea..384a6ca 100644 --- a/buntspecht-frontend/src/app/pages/turnovers/turnovers.page.ts +++ b/buntspecht-frontend/src/app/pages/turnovers/turnovers.page.ts @@ -14,6 +14,7 @@ import { UserManagementService } from 'src/app/services/user.management.service' export class PageTurnovers implements OnInit { turnovers: any; + overview: any[]; sort: string = "created"; descending: boolean = true; filterOpen: boolean = false; @@ -40,6 +41,17 @@ export class PageTurnovers implements OnInit { this.turnovers = { error: error }; } }) + + this.turnoverService.overview(this.turnovers.limit || 15, this.turnovers.offset || 0, this.sort, this.descending, this.turnovers.filter).subscribe({ + next: (data: any) => { + this.overview = data; + if (!this.overview) { + this.overview = ['', 0, 0]; + } + }, error: (error) => { + this.turnovers = { error: error }; + } + }) } applyPage(event: PageEvent) { @@ -54,6 +66,10 @@ export class PageTurnovers implements OnInit { this.update(); } + setInputFilter(key: string, target: EventTarget) { + this.setFilter(key, (target as HTMLInputElement).value); + } + setFilter(key: string, value) { if (value != this.turnovers.filter[key]) { this.turnovers.filter[key] = value; diff --git a/buntspecht-frontend/src/app/services/turnover.service.ts b/buntspecht-frontend/src/app/services/turnover.service.ts index 491d94e..33caedb 100644 --- a/buntspecht-frontend/src/app/services/turnover.service.ts +++ b/buntspecht-frontend/src/app/services/turnover.service.ts @@ -16,6 +16,10 @@ export class TurnoverService { return this.abstractService.fetch("/turnovers", limit, offset, sort, descending, filter); } + overview(limit: number, offset: number, sort: string, descending: boolean, filter: any | undefined) { + return this.abstractService.fetch("/turnovers/overview", limit, offset, sort, descending, filter); + } + get(id: number) { return this.http.get(environment.apiUrl + "/turnovers/" + id); } diff --git a/buntspecht-frontend/src/app/ui/turnovers/turnovers.ui.html b/buntspecht-frontend/src/app/ui/turnovers/turnovers.ui.html index 686f5ea..c309dd6 100644 --- a/buntspecht-frontend/src/app/ui/turnovers/turnovers.ui.html +++ b/buntspecht-frontend/src/app/ui/turnovers/turnovers.ui.html @@ -125,6 +125,12 @@
+ @if (overview && overview.length > 2) { +
+ {{'turnover.price.total' | i18n:(overview[1] | number: '1.2-2')}} {{'turnover.timeInvestment.total' | i18n:(overview[2] | number: '1.1-1')}} +
+ } diff --git a/buntspecht-frontend/src/app/ui/turnovers/turnovers.ui.ts b/buntspecht-frontend/src/app/ui/turnovers/turnovers.ui.ts index d768b60..3e9631b 100644 --- a/buntspecht-frontend/src/app/ui/turnovers/turnovers.ui.ts +++ b/buntspecht-frontend/src/app/ui/turnovers/turnovers.ui.ts @@ -11,6 +11,7 @@ import { Router } from '@angular/router'; export class UiTurnovers implements OnInit { @Input() turnovers: any; + @Input() overview: any[]; @Input() showFilter: boolean = true; @Input() linkTurnover: boolean = true; @Input() username: boolean = false; diff --git a/buntspecht-frontend/src/assets/i18n/de-informal.json b/buntspecht-frontend/src/assets/i18n/de-informal.json index 8214069..748ba58 100644 --- a/buntspecht-frontend/src/assets/i18n/de-informal.json +++ b/buntspecht-frontend/src/assets/i18n/de-informal.json @@ -115,13 +115,15 @@ "price": { ".": "Preis", "error": "Angabe des Preises erforderlich", - "suffix": "€" + "suffix": "€", + "total": "Umsatz: {0} €" }, "remark": "Bemerkungen", "success": "Erfolgreich gespeichert", "timeInvestment": { ".": "Zeiteinsatz", - "suffix": "Std." + "suffix": "Std.", + "total": "Zeiteinsatz: {0} Std." }, "update": "Aktualisieren", "updated": { @@ -134,10 +136,12 @@ ".": "Buchungen", "filter": { "created": { - ".": "Erstellungsdatum", + ".": "Zeitraum", "from": "von", "to": "bis" }, + "customer": "Kunde durchsuchen", + "motif": "Motif durchsuchen", "username": "User auswählen" }, "mine": "Eigene Buchungen" diff --git a/buntspecht.code-workspace b/buntspecht.code-workspace index cecb46c..ef9f5d2 100644 --- a/buntspecht.code-workspace +++ b/buntspecht.code-workspace @@ -1,15 +1,7 @@ { - "folders": [ - { - "path": "buntspecht-backend" - }, - { - "path": "buntspecht-frontend" - } - ], - "settings": { - "java.configuration.updateBuildConfiguration": "automatic", - "java.compile.nullAnalysis.mode": "disabled", - "html.autoClosingTags": false - } -} + "folders": [ + { + "path": "." + } + ] +} \ No newline at end of file