diff --git a/app/lib/actions/locationActions.ts b/app/lib/actions/locationActions.ts index 7be5986..0087041 100644 --- a/app/lib/actions/locationActions.ts +++ b/app/lib/actions/locationActions.ts @@ -35,6 +35,7 @@ const FormSchema = (t:IntlTemplateFn) => z.object({ _id: z.string(), locationName: z.coerce.string().min(1, t("location-name-required")), tenantPaymentMethod: z.enum(["none", "iban", "revolut"]).optional().nullable(), + proofOfPaymentType: z.enum(["none", "combined", "per-bill"]).optional().nullable(), tenantName: z.string().max(30).optional().nullable(), tenantStreet: z.string().max(27).optional().nullable(), tenantTown: z.string().max(27).optional().nullable(), @@ -112,6 +113,7 @@ export const updateOrAddLocation = withUser(async (user:AuthenticatedUser, locat const validatedFields = FormSchema(t).safeParse({ locationName: formData.get('locationName'), tenantPaymentMethod: formData.get('tenantPaymentMethod') as "none" | "iban" | "revolut" | undefined, + proofOfPaymentType: formData.get('proofOfPaymentType') as "none" | "combined" | "per-bill" | undefined, tenantName: formData.get('tenantName') || null, tenantStreet: formData.get('tenantStreet') || null, tenantTown: formData.get('tenantTown') || null, @@ -136,6 +138,7 @@ export const updateOrAddLocation = withUser(async (user:AuthenticatedUser, locat const { locationName, tenantPaymentMethod, + proofOfPaymentType, tenantName, tenantStreet, tenantTown, @@ -178,6 +181,7 @@ export const updateOrAddLocation = withUser(async (user:AuthenticatedUser, locat $set: { name: locationName, tenantPaymentMethod: tenantPaymentMethod || "none", + proofOfPaymentType: proofOfPaymentType || "none", tenantName: tenantName || null, tenantStreet: tenantStreet || null, tenantTown: tenantTown || null, @@ -208,6 +212,7 @@ export const updateOrAddLocation = withUser(async (user:AuthenticatedUser, locat $set: { name: locationName, tenantPaymentMethod: tenantPaymentMethod || "none", + proofOfPaymentType: proofOfPaymentType || "none", tenantName: tenantName || null, tenantStreet: tenantStreet || null, tenantTown: tenantTown || null, @@ -231,6 +236,7 @@ export const updateOrAddLocation = withUser(async (user:AuthenticatedUser, locat $set: { name: locationName, tenantPaymentMethod: tenantPaymentMethod || "none", + proofOfPaymentType: proofOfPaymentType || "none", tenantName: tenantName || null, tenantStreet: tenantStreet || null, tenantTown: tenantTown || null, @@ -253,6 +259,7 @@ export const updateOrAddLocation = withUser(async (user:AuthenticatedUser, locat name: locationName, notes: null, tenantPaymentMethod: tenantPaymentMethod || "none", + proofOfPaymentType: proofOfPaymentType || "none", tenantName: tenantName || null, tenantStreet: tenantStreet || null, tenantTown: tenantTown || null, @@ -327,6 +334,7 @@ export const updateOrAddLocation = withUser(async (user:AuthenticatedUser, locat name: locationName, notes: null, tenantPaymentMethod: tenantPaymentMethod || "none", + proofOfPaymentType: proofOfPaymentType || "none", tenantName: tenantName || null, tenantStreet: tenantStreet || null, tenantTown: tenantTown || null, diff --git a/app/lib/db-types.ts b/app/lib/db-types.ts index 4dedcc8..e0f926c 100644 --- a/app/lib/db-types.ts +++ b/app/lib/db-types.ts @@ -56,7 +56,7 @@ export interface BillingLocation { tenantPaymentMethod?: "none" | "iban" | "revolut" | null; /** (optional) type of proof of payment attachment */ - proofOfPaymentAttachmentType: "combined" | "per-bill"; + proofOfPaymentType: "none" | "combined" | "per-bill"; /** (optional) tenant name */ tenantName?: string | null; diff --git a/app/ui/LocationEditForm.tsx b/app/ui/LocationEditForm.tsx index 45d89f5..2572c2b 100644 --- a/app/ui/LocationEditForm.tsx +++ b/app/ui/LocationEditForm.tsx @@ -42,7 +42,7 @@ export const LocationEditForm: FC = ({ location, yearMont tenantTown: location?.tenantTown ?? "", tenantEmail: location?.tenantEmail ?? "", tenantPaymentMethod: location?.tenantPaymentMethod ?? "none", - proofOfPaymentAttachmentType: location?.proofOfPaymentAttachmentType ?? "combined", + proofOfPaymentType: location?.proofOfPaymentType ?? "none", autoBillFwd: location?.autoBillFwd ?? false, billFwdStrategy: location?.billFwdStrategy ?? "when-payed", rentDueNotification: location?.rentDueNotification ?? false, @@ -88,33 +88,6 @@ export const LocationEditForm: FC = ({ location, yearMont - - - -
- {t("proof-of-payment-attachment-type--legend")} - - {t("proof-of-payment-attachment-type--info")} - -
- -

- {formValues.proofOfPaymentAttachmentType === "combined" ? - t("proof-of-payment-attachment-type--option--combined--tooltip") : - t("proof-of-payment-attachment-type--option--per-bill--tooltip") - } -

-
-
-
{t("tenant-payment-instructions-legend")} @@ -246,6 +219,47 @@ export const LocationEditForm: FC = ({ location, yearMont }
+
+ {t("proof-of-payment-attachment-type--legend")} + + {t("proof-of-payment-attachment-type--info")} + +
+ {t("proof-of-payment-attachment-type--option--label")} + + { + formValues.tenantPaymentMethod === "none" && formValues.proofOfPaymentType === "combined" ? +

+ { + t.rich("proof-of-payment-attachment-type--option--combined--hint", + { + strong: (children: React.ReactNode) => {children} + } + ) + } +

: +

+ { + formValues.proofOfPaymentType === "combined" ? + t("proof-of-payment-attachment-type--option--combined--tooltip") : + t("proof-of-payment-attachment-type--option--per-bill--tooltip") + } +

+ + + } +
+
+
{t("auto-utility-bill-forwarding-legend")} {t("auto-utility-bill-forwarding-info")} diff --git a/messages/en.json b/messages/en.json index f4f4370..c268055 100644 --- a/messages/en.json +++ b/messages/en.json @@ -151,24 +151,26 @@ "notes-placeholder": "notes", "proof-of-payment-attachment-type--legend": "Proof of Payment", - "proof-of-payment-attachment-type--info": "Here you can choose how the tenant can provide proof of payment for utilities.", - "proof-of-payment-attachment-type--option--combined": "a single proof for all bills", - "proof-of-payment-attachment-type--option--combined--tooltip": "The tenant provides one proof of payment along with the monthly statement", - "proof-of-payment-attachment-type--option--per-bill": "separate proof for each bill", - "proof-of-payment-attachment-type--option--per-bill--tooltip": "The tenant provides proof of payment separately for each bill", + "proof-of-payment-attachment-type--info": "Here you can choose how the tenant can provide proof of payment for utilities. Select the option that best matches the payment arrangement you have agreed upon.", + "proof-of-payment-attachment-type--option--label": "Tenant provides ...", + "proof-of-payment-attachment-type--option--none": "⛔ attaching proof of payment disabled", + "proof-of-payment-attachment-type--option--none--tooltip": "The selected option means that the tenant will not be able to upload proof of payment attachments", + "proof-of-payment-attachment-type--option--combined": "📦 a single proof of payment for all bills", + "proof-of-payment-attachment-type--option--combined--tooltip": "The selected option is useful if you pay all utilities on behalf of the tenant, and the tenant reimburses you for this cost", + "proof-of-payment-attachment-type--option--combined--hint": "💡 with the selected option you might also want to activate payment instructions - see above", + "proof-of-payment-attachment-type--option--per-bill": "✂️ separate proof of payment for each bill", + "proof-of-payment-attachment-type--option--per-bill--tooltip": "The selected option is useful if the tenant pays utilities directly to individual service providers", "tenant-payment-instructions-legend": "PAYMENT INSTRUCTIONS", "tenant-payment-instructions-code-info": "When the tenant opens the link to the statement for the given month, the application can show payment instructions for utility costs to your IBAN, as well as a 2D code they can scan.", "tenant-payment-instructions-method--legend": "Show payment instructions to tenant:", - "tenant-payment-instructions-method--none": "do not show payment instructions", - "tenant-payment-instructions-method--iban": "payment via IBAN", + "tenant-payment-instructions-method--none": "⛔ do not show payment instructions", + "tenant-payment-instructions-method--iban": "🏛️ payment via IBAN", "tenant-payment-instructions-method--iban-disabled": "payment via IBAN - disabled in app settings", - "tenant-payment-instructions-method--revolut": "payment via Revolut", + "tenant-payment-instructions-method--revolut": "🅡 payment via Revolut", "tenant-payment-instructions-method--revolut-disabled": "payment via Revolut - disabled in app settings", - - "iban-payment--tenant-name-label": "Tenant First and Last Name", "iban-payment--tenant-name-placeholder": "enter tenant's first and last name", "iban-payment--tenant-street-label": "Tenant Street and House Number", diff --git a/messages/hr.json b/messages/hr.json index 2d3be80..3643dde 100644 --- a/messages/hr.json +++ b/messages/hr.json @@ -150,20 +150,24 @@ "notes-placeholder": "bilješke", "proof-of-payment-attachment-type--legend": "Potvrda o uplati", - "proof-of-payment-attachment-type--info": "Ovdje možete odabrati na koji način na koji podstanar može priložiti potvrdu o uplati režija.", - "proof-of-payment-attachment-type--option--combined": "jedinstvenu potvrdu za sve račune", - "proof-of-payment-attachment-type--option--combined--tooltip": "Podstanar uz mjesečni obračun prilaže jedinstvenu potvrdu o uplati", - "proof-of-payment-attachment-type--option--per-bill": "zasebna potvrda za svaki račun", - "proof-of-payment-attachment-type--option--per-bill--tooltip": "Podstanar potvrdu o uplati prilaže zasebno za svaki račun", + "proof-of-payment-attachment-type--info": "Ovdje možete odabrati na koji način na koji podstanar može priložiti potvrdu o uplati režija. Izaberite način koji najbolje odgovara načinu na koji ste dogovorili plaćanje režija.", + "proof-of-payment-attachment-type--option--label": "Podstanar prilaže ...", + "proof-of-payment-attachment-type--option--none": "⛔ prilaganje potvrde onemogućeno", + "proof-of-payment-attachment-type--option--none--tooltip": "Odabrana opcija znači da podstanar neće moći priložiti potvrdu o uplati", + "proof-of-payment-attachment-type--option--combined": "📦 jedinstvena potvrda za sve račune", + "proof-of-payment-attachment-type--option--combined--tooltip": "Odabrana opcija je korisna ako vi plaćate sve režije u ime podstanara, a podstanar vam taj trošak refundira", + "proof-of-payment-attachment-type--option--combined--hint": "💡 za odabranu opciju dobro je uključiti i prikaz uputa za uplatu - vidi gore", + "proof-of-payment-attachment-type--option--per-bill": "✂️ zasebna potvrda za svaki račun", + "proof-of-payment-attachment-type--option--per-bill--tooltip": "Odabrana opcija je korisna ako podstanar plaća režije izravno pojedinačnim davateljima usluga", "tenant-payment-instructions-legend": "Upute za uplatu", "tenant-payment-instructions-code-info": "Kada podstanar otvori poveznicu na obračun za zadani mjesec aplikacija mu može prikazati upute za uplatu troškova režija na vaš IBAN ili Revolut.", "tenant-payment-instructions-method--legend": "Podstanaru prikaži upute za uplatu:", - "tenant-payment-instructions-method--none": "ne prikazuj upute za uplatu", - "tenant-payment-instructions-method--iban": "uplata na IBAN", + "tenant-payment-instructions-method--none": "⛔ ne prikazuj upute za uplatu", + "tenant-payment-instructions-method--iban": "🏛️ uplata na IBAN", "tenant-payment-instructions-method--iban-disabled": "uplata na IBAN - onemogućeno u app postavkama", - "tenant-payment-instructions-method--revolut": "uplata na Revolut", + "tenant-payment-instructions-method--revolut": "🅡 uplata na Revolut", "tenant-payment-instructions-method--revolut-disabled": "uplata na Revolut - onemogućeno u app postavkama", "tenant-payment-instructions-method--disabled-message": "Ova opcija je nedostupna zato što nije omogućena u postavkama aplikacije.",