feat: add Copayment and Adjustment columns to payments table

- Added copayment and adjustment fields (Decimal, default 0) to Payment
  model in schema and directly to DB via ALTER TABLE
- Added PATCH /api/payments/:id/copayment and /adjustment routes
- Added inline-editable Copayment and Adjustment columns after MH Paid
  with same click-to-edit format; Copayment in blue, Adjustment in orange

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Gitead
2026-05-06 21:14:00 -04:00
parent c5af6c1fa6
commit 4bd501250d
250 changed files with 4656 additions and 185 deletions

View File

@@ -455,6 +455,60 @@ router.patch(
}
);
// PATCH /api/payments/:id/copayment
router.patch(
"/:id/copayment",
async (req: Request, res: Response): Promise<any> => {
try {
const userId = req.user?.id;
if (!userId) return res.status(401).json({ message: "Unauthorized" });
const paymentId = parseIntOrError(req.params.id, "Payment ID");
const val = parseFloat(req.body.copayment);
if (isNaN(val) || val < 0) {
return res.status(400).json({ message: "Invalid copayment value" });
}
const updated = await prisma.payment.update({
where: { id: paymentId },
data: { copayment: val, updatedById: userId },
});
return res.json({ ...updated, copayment: Number(updated.copayment) });
} catch (err: unknown) {
const message = err instanceof Error ? err.message : "Failed to update copayment";
return res.status(500).json({ message });
}
}
);
// PATCH /api/payments/:id/adjustment
router.patch(
"/:id/adjustment",
async (req: Request, res: Response): Promise<any> => {
try {
const userId = req.user?.id;
if (!userId) return res.status(401).json({ message: "Unauthorized" });
const paymentId = parseIntOrError(req.params.id, "Payment ID");
const val = parseFloat(req.body.adjustment);
if (isNaN(val) || val < 0) {
return res.status(400).json({ message: "Invalid adjustment value" });
}
const updated = await prisma.payment.update({
where: { id: paymentId },
data: { adjustment: val, updatedById: userId },
});
return res.json({ ...updated, adjustment: Number(updated.adjustment) });
} catch (err: unknown) {
const message = err instanceof Error ? err.message : "Failed to update adjustment";
return res.status(500).json({ message });
}
}
);
// PATCH /api/payments/:id/mh-payment-check
router.patch(
"/:id/mh-payment-check",