From 5fdef95c065e7b467a13045adbb56a641cb2dc12 Mon Sep 17 00:00:00 2001 From: Rainer Killinger Date: Tue, 1 Nov 2022 18:33:40 +0000 Subject: [PATCH] feat: show availability in offers --- .../modules/data/elements/offers-detail.html | 20 +++++++++++++---- .../data/elements/offers-in-list.component.ts | 7 +++++- .../modules/data/elements/offers-in-list.html | 15 +++++++++---- .../special/mensa/place-mensa-service.ts | 22 ++++++++++++++++++- src/assets/i18n/de.json | 3 ++- src/assets/i18n/en.json | 3 ++- 6 files changed, 58 insertions(+), 12 deletions(-) diff --git a/src/app/modules/data/elements/offers-detail.html b/src/app/modules/data/elements/offers-detail.html index 14876c1c..97dd9676 100644 --- a/src/app/modules/data/elements/offers-detail.html +++ b/src/app/modules/data/elements/offers-detail.html @@ -45,11 +45,11 @@ - + - {{ - 'data.detail.offers.' + group | translate - }} + {{ 'data.detail.offers.' + group | translate }} +

{{ @@ -59,6 +59,18 @@ + + + + + +

+ {{ 'data.detail.offers.sold_out' | translate }} +

+ +
+
+
diff --git a/src/app/modules/data/elements/offers-in-list.component.ts b/src/app/modules/data/elements/offers-in-list.component.ts index 374d8ac1..6ff8fc22 100644 --- a/src/app/modules/data/elements/offers-in-list.component.ts +++ b/src/app/modules/data/elements/offers-in-list.component.ts @@ -35,15 +35,20 @@ export class OffersInListComponent { ) { this._offers = it; this.price = it[0].prices?.default; - this.settingsProvider.getSetting('profile', 'group').then(group => { this.price = it[0].prices?.[(group.value as string).replace(/s$/, '') as never]; }); + + const availabilities = new Set(it.map(offer => offer.availability)); + this.soldOut = + availabilities.has('out of stock') && availabilities.size === 1; } price?: number; + soldOut: boolean; + _offers: Array>; constructor(readonly settingsProvider: SettingsProvider) {} diff --git a/src/app/modules/data/elements/offers-in-list.html b/src/app/modules/data/elements/offers-in-list.html index 7b670087..0e608552 100644 --- a/src/app/modules/data/elements/offers-in-list.html +++ b/src/app/modules/data/elements/offers-in-list.html @@ -14,10 +14,17 @@ -->
-

- {{ price | currency: 'EUR':'symbol':undefined:'de' }} -

-

+ +

+ {{ price | currency: 'EUR':'symbol':undefined:'de' }} +

+ + +

+ {{ 'data.detail.offers.sold_out' | translate }} +

+
+

{{ _offers[0].inPlace.name }}...

diff --git a/src/app/modules/data/types/place/special/mensa/place-mensa-service.ts b/src/app/modules/data/types/place/special/mensa/place-mensa-service.ts index 6e5933e9..dd8f52f4 100644 --- a/src/app/modules/data/types/place/special/mensa/place-mensa-service.ts +++ b/src/app/modules/data/types/place/special/mensa/place-mensa-service.ts @@ -24,6 +24,7 @@ import { import moment from 'moment'; import {DataProvider} from '../../../../data.provider'; import {mapValues} from '../../../../../../_helpers/collections/map-values'; +import {SettingsProvider} from '../../../../../settings/settings.provider'; /** * TODO @@ -32,7 +33,10 @@ import {mapValues} from '../../../../../../_helpers/collections/map-values'; providedIn: 'root', }) export class PlaceMensaService { - constructor(private dataProvider: DataProvider) {} + constructor( + private dataProvider: DataProvider, + readonly settingsProvider: SettingsProvider, + ) {} /** * Fetches all dishes for this building @@ -43,6 +47,10 @@ export class PlaceMensaService { place: SCPlace, days: number, ): Promise> { + const priceGroup = await this.settingsProvider.getSetting( + 'profile', + 'group', + ); const request = mapValues< Record, SCSearchQuery @@ -85,6 +93,18 @@ export class PlaceMensaService { }, type: 'boolean', }, + sort: [ + { + arguments: { + field: `offers.prices.${(priceGroup.value as string).replace( + /s$/, + '', + )}`, + }, + order: 'desc', + type: 'generic', + }, + ], size: 1000, }), ); diff --git a/src/assets/i18n/de.json b/src/assets/i18n/de.json index 6c43af13..152db289 100644 --- a/src/assets/i18n/de.json +++ b/src/assets/i18n/de.json @@ -122,7 +122,8 @@ "default": "Standard", "employee": "Angestellte", "guest": "Gäste", - "student": "Studuierende" + "student": "Studierende", + "sold_out": "Ausverkauft!" } }, "chips": { diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index 658030c3..f9d84291 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -122,7 +122,8 @@ "default": "Default", "employee": "Employees", "guest": "Guests", - "student": "Students" + "student": "Students", + "sold_out": "Sold Out!" } }, "chips": {