refactor: improve notification naming and introduce type-safe enums

- Rename billFwd* to billsNotification* for clarity
- Rename rentDueNotification* to rentNotification* for consistency
- Rename utilBillsProofOfPayment to billsProofOfPayment
- Introduce enums for type safety:
  - BillsNotificationStrategy (WhenPayed, WhenAttached)
  - BillsNotificationStatus (Scheduled, Sent, Failed)
  - RentNotificationStatus (Sent, Failed)
- Replace "pending" status with "scheduled" for better semantics
- Fix function names to proper camelCase
- Fix incorrect import path in web-app/app/lib/format.ts

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
Knee Cola
2026-01-06 13:05:22 +01:00
parent 0556ad2533
commit fb35e0278e
13 changed files with 160 additions and 137 deletions

View File

@@ -10,7 +10,7 @@ import { ViewBillBadge } from "./ViewBillBadge";
import { EncodePayment, PaymentParams } from "hub-3a-payment-encoder";
import Link from "next/link";
import { LinkIcon } from "@heroicons/react/24/outline";
import { uploadUtilBillsProofOfPayment } from "../lib/actions/locationActions";
import { uploadBillsProofOfPayment } from "../lib/actions/locationActions";
import QRCode from "react-qr-code";
import { TicketIcon } from "@heroicons/react/24/solid";
import { Pdf417Barcode } from "./Pdf417Barcode";
@@ -33,7 +33,7 @@ export const ViewLocationCard: FC<ViewLocationCardProps> = ({ location, userSett
tenantTown,
tenantPaymentMethod,
// NOTE: only the fileName is projected from the DB to reduce data transfer
utilBillsProofOfPayment,
billsProofOfPayment,
proofOfPaymentType,
} = location;
@@ -42,8 +42,8 @@ export const ViewLocationCard: FC<ViewLocationCardProps> = ({ location, userSett
const [isUploading, setIsUploading] = useState(false);
const [uploadError, setUploadError] = useState<string | null>(null);
const [attachmentUploadedAt, setAttachmentUploadedAt] = useState<Date | null>(utilBillsProofOfPayment?.uploadedAt ?? null);
const [attachmentFilename, setAttachmentFilename] = useState(utilBillsProofOfPayment?.fileName);
const [attachmentUploadedAt, setAttachmentUploadedAt] = useState<Date | null>(billsProofOfPayment?.uploadedAt ?? null);
const [attachmentFilename, setAttachmentFilename] = useState(billsProofOfPayment?.fileName);
const handleFileChange = async (e: React.ChangeEvent<HTMLInputElement>) => {
const file = e.target.files?.[0];
@@ -66,9 +66,9 @@ export const ViewLocationCard: FC<ViewLocationCardProps> = ({ location, userSett
try {
const formData = new FormData();
formData.append('utilBillsProofOfPayment', file);
formData.append('billsProofOfPayment', file);
const result = await uploadUtilBillsProofOfPayment(shareId, formData);
const result = await uploadBillsProofOfPayment(shareId, formData);
if (result.success) {
setAttachmentFilename(file.name);
@@ -212,8 +212,8 @@ export const ViewLocationCard: FC<ViewLocationCardProps> = ({ location, userSett
</label>
<div className="flex items-center gap-2">
<input
id="utilBillsProofOfPayment"
name="utilBillsProofOfPayment"
id="billsProofOfPayment"
name="billsProofOfPayment"
type="file"
accept="application/pdf"
className="file-input file-input-bordered grow file-input-sm my-2 block max-w-[17em] md:max-w-[80em] break-words"