From 2492f410b140adaf4ed4b6b621d20df291e6dc75 Mon Sep 17 00:00:00 2001 From: Alex <$(pass /github/email)> Date: Tue, 11 Feb 2025 13:27:14 +0100 Subject: [PATCH] frontend:locale & subscription handling --- frontend/src/app.d.ts | 13 +- .../components/SubscriptionEditForm.svelte | 180 ++++++++++++++++++ .../src/lib/components/UserEditForm.svelte | 22 ++- frontend/src/lib/locales/de.js | 28 ++- frontend/src/lib/utils/processing.js | 10 +- .../src/routes/auth/admin/users/+layout.js | 11 +- .../src/routes/auth/admin/users/+page.svelte | 99 +++++++--- .../routes/auth/admin/users/old+page.svelte | 94 --------- 8 files changed, 307 insertions(+), 150 deletions(-) create mode 100644 frontend/src/lib/components/SubscriptionEditForm.svelte delete mode 100644 frontend/src/routes/auth/admin/users/old+page.svelte diff --git a/frontend/src/app.d.ts b/frontend/src/app.d.ts index 8163770..09c7e91 100644 --- a/frontend/src/app.d.ts +++ b/frontend/src/app.d.ts @@ -3,12 +3,12 @@ interface Subscription { id: number | -1; name: string | ''; - details?: string | ''; - conditions?: string | ''; - monthly_fee?: number | -1; - hourly_rate?: number | -1; - included_hours_per_year?: number | 0; - included_hours_per_month?: number | 0; + details: string | ''; + conditions: string | ''; + monthly_fee: number | 0; + hourly_rate: number | 0; + included_hours_per_year: number | 0; + included_hours_per_month: number | 0; } interface Membership { @@ -79,6 +79,7 @@ declare global { } interface Types { licenceCategory: LicenceCategory; + subscription: Subscription; } // interface PageData {} // interface Platform {} diff --git a/frontend/src/lib/components/SubscriptionEditForm.svelte b/frontend/src/lib/components/SubscriptionEditForm.svelte new file mode 100644 index 0000000..11c9d01 --- /dev/null +++ b/frontend/src/lib/components/SubscriptionEditForm.svelte @@ -0,0 +1,180 @@ + + +{#if isLoading} + +{:else if user && subscription} +
+ +

{$t('subscritption.edit')}

+ {#if form?.errors} + {#each form?.errors as error (error.id)} +

+ {$t(error.field) + ': ' + $t(error.key)} +

+ {/each} + {/if} +
+ + + + + + + +
+
+ {#if isUpdating} + + {:else} + + + {/if} +
+
+{/if} + + diff --git a/frontend/src/lib/components/UserEditForm.svelte b/frontend/src/lib/components/UserEditForm.svelte index f52f09b..8cde863 100644 --- a/frontend/src/lib/components/UserEditForm.svelte +++ b/frontend/src/lib/components/UserEditForm.svelte @@ -38,7 +38,13 @@ parent_member_id: 0, subscription_model: { id: 0, - name: '' + name: '', + details: '', + conditions: '', + monthly_fee: 0, + hourly_rate: 0, + included_hours_per_month: 0, + included_hours_per_year: 0 } }, licence: { @@ -278,7 +284,7 @@

- {$t('monthly_fee')}: + {$t('subscription.monthly_fee')}: {selectedSubscriptionModel?.monthly_fee || '-'} €

- {$t('hourly_rate')}: + {$t('subscription.hourly_rate')}: {selectedSubscriptionModel?.hourly_rate || '-'} €

{#if selectedSubscriptionModel?.included_hours_per_year}

- {$t('included_hours_per_year')}: + {$t('subscription.included_hours_per_year')}: {selectedSubscriptionModel?.included_hours_per_year}

{/if} {#if selectedSubscriptionModel?.included_hours_per_month}

- {$t('included_hours_per_month')}: + {$t('subscription.included_hours_per_month')}: {selectedSubscriptionModel?.included_hours_per_month}

{/if} @@ -437,7 +443,7 @@

{#if selectedSubscriptionModel?.conditions}

- {$t('conditions')}: + {$t('subscription.conditions')}: {selectedSubscriptionModel?.conditions}

{/if} diff --git a/frontend/src/lib/locales/de.js b/frontend/src/lib/locales/de.js index b2b9cdb..04dd386 100644 --- a/frontend/src/lib/locales/de.js +++ b/frontend/src/lib/locales/de.js @@ -32,7 +32,10 @@ export default { licence_number: 'Auf dem Führerschein unter Feld 5', issued_date: 'Ausgabedatum unter Feld 4a', expiration_date: 'Ablaufdatum unter Feld 4b', - issuing_country: 'Ausstellendes Land' + issuing_country: 'Ausstellendes Land', + subscription_name: 'Name des Tarifmodells', + subscription_details: 'Beschreibe das Tarifmodell...', + subscription_conditions: 'Beschreibe die Bedingungen zur Nutzung...' }, validation: { required: 'Eingabe benötigt', @@ -107,6 +110,21 @@ export default { status: 'Status', role: 'Nutzerrolle' }, + subscription: { + name: 'Modellname', + edit: 'Modell bearbeiten', + subscription: 'Tarifmodell', + subscriptions: 'Tarifmodelle', + conditions: 'Bedingungen', + monthly_fee: 'Monatliche Gebühr', + hourly_rate: 'Stundensatz', + included_hours_per_year: 'Inkludierte Stunden pro Jahr', + included_hours_per_month: 'Inkludierte Stunden pro Monat' + }, + loading: { + user_data: 'Lade Nutzerdaten', + subscription_data: 'Lade Modelldaten' + }, cancel: 'Abbrechen', confirm: 'Bestätigen', actions: 'Aktionen', @@ -120,10 +138,7 @@ export default { issued_date: 'Ausgabedatum', expiration_date: 'Ablaufdatum', country: 'Land', - monthly_fee: 'Monatliche Gebühr', - hourly_rate: 'Stundensatz', details: 'Details', - conditions: 'Bedingungen', unknown: 'Unbekannt', notes: 'Notizen', address: 'Straße & Hausnummer', @@ -132,7 +147,6 @@ export default { forgot_password: 'Passwort vergessen?', password: 'Passwort', password_repeat: 'Passwort wiederholen', - email: 'Email', company: 'Firma', login: 'Anmeldung', profile: 'Profil', @@ -140,7 +154,6 @@ export default { bankaccount: 'Kontodaten', first_name: 'Vorname', last_name: 'Nachname', - name: 'Name', phone: 'Telefonnummer', dateofbirth: 'Geburtstag', status: 'Status', @@ -152,11 +165,8 @@ export default { iban: 'IBAN', bic: 'BIC', mandate_reference: 'SEPA Mandat', - subscriptions: 'Tarifmodelle', payments: 'Zahlungen', add_new: 'Neu', - included_hours_per_year: 'Inkludierte Stunden pro Jahr', - included_hours_per_month: 'Inkludierte Stunden pro Monat', // For payments section payment: { diff --git a/frontend/src/lib/utils/processing.js b/frontend/src/lib/utils/processing.js index 5f1bb11..451d4f5 100644 --- a/frontend/src/lib/utils/processing.js +++ b/frontend/src/lib/utils/processing.js @@ -91,7 +91,15 @@ export function processFormData(rawData) { parent_member_id: Number(rawData.user.membership?.parent_member_id) || 0, subscription_model: { id: Number(rawData.user.membership?.subscription_model?.id) || 0, - name: String(rawData.user.membership?.subscription_model?.name) || '' + name: String(rawData.user.membership?.subscription_model?.name) || '', + details: String(rawData.user.membership?.subscription_model?.details) || '', + conditions: String(rawData.user.membership?.subscription_model?.conditions) || '', + hourly_rate: Number(rawData.user.membership?.subscription_model?.hourly_rate) || 0, + monthly_fee: Number(rawData.user.membership?.subscription_model?.monthly_fee) || 0, + included_hours_per_month: + Number(rawData.user.membership?.subscription_model?.included_hours_per_month) || 0, + included_hours_per_year: + Number(rawData.user.membership?.subscription_model?.included_hours_per_year) || 0 } }, diff --git a/frontend/src/routes/auth/admin/users/+layout.js b/frontend/src/routes/auth/admin/users/+layout.js index 58465b7..767c933 100644 --- a/frontend/src/routes/auth/admin/users/+layout.js +++ b/frontend/src/routes/auth/admin/users/+layout.js @@ -1,8 +1,7 @@ /** @type {import('./$types').LayoutLoad} */ -export async function load({ fetch, url, data }) { - const { users } = data; - return { - users: data.users, - user: data.user, - }; +export async function load({ data }) { + return { + users: data.users, + user: data.user + }; } diff --git a/frontend/src/routes/auth/admin/users/+page.svelte b/frontend/src/routes/auth/admin/users/+page.svelte index f76c4e8..8080875 100644 --- a/frontend/src/routes/auth/admin/users/+page.svelte +++ b/frontend/src/routes/auth/admin/users/+page.svelte @@ -1,32 +1,50 @@ - -
-

{$t("user.management")}

- -
- - - - - - - - - - - - - {#each users as user} - - - - - - - {/each} - -
{$t("user.id")}{$t("name")}{$t("email")}{$t("status")}{$t("actions")}
{user.id}{user.first_name} {user.last_name}{user.email}{$t("userStatus." + user.status)} - - -
- - - -