@argusoft/medplat-product-management 1.0.2 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{BrandsPage-CSA3meke.js → BrandsPage-BE3kn-8b.js} +77 -75
- package/dist/BrandsPage-BE3kn-8b.js.map +1 -0
- package/dist/{CategoriesPage-BrspzkJL.js → CategoriesPage-COqi3pMi.js} +71 -70
- package/dist/{CategoriesPage-BrspzkJL.js.map → CategoriesPage-COqi3pMi.js.map} +1 -1
- package/dist/{DashboardPage-CqaquOs2.js → DashboardPage-C_H1Jrey.js} +90 -89
- package/dist/DashboardPage-C_H1Jrey.js.map +1 -0
- package/dist/{FacilityPicker-Dv_H95WW.js → FacilityPicker-Diq2hnYg.js} +2 -2
- package/dist/{FacilityPicker-Dv_H95WW.js.map → FacilityPicker-Diq2hnYg.js.map} +1 -1
- package/dist/{InventoryPage-CPbzfDMR.js → InventoryPage-Bjpw6vTz.js} +106 -115
- package/dist/InventoryPage-Bjpw6vTz.js.map +1 -0
- package/dist/{MemberProfileCard-0vjO3Gzd.js → MemberProfileCard-BLUVRILO.js} +10 -9
- package/dist/MemberProfileCard-BLUVRILO.js.map +1 -0
- package/dist/{PaymentCreatePage-BYmDZAIB.js → PaymentCreatePage-B5VOgTx9.js} +173 -177
- package/dist/PaymentCreatePage-B5VOgTx9.js.map +1 -0
- package/dist/{PaymentsPage-BXPvKon-.js → PaymentsPage-DY6BclkN.js} +24 -23
- package/dist/{PaymentsPage-BXPvKon-.js.map → PaymentsPage-DY6BclkN.js.map} +1 -1
- package/dist/PickupCreatePage-CCSiyFQF.js +706 -0
- package/dist/PickupCreatePage-CCSiyFQF.js.map +1 -0
- package/dist/{PickupsPage-D66_Wta4.js → PickupsPage-DGi6T5Of.js} +83 -90
- package/dist/PickupsPage-DGi6T5Of.js.map +1 -0
- package/dist/PmGuard-C90yhpsN.js +592 -0
- package/dist/PmGuard-C90yhpsN.js.map +1 -0
- package/dist/{PmTable-B9970kPY.js → PmTable-BkK65bJQ.js} +98 -98
- package/dist/PmTable-BkK65bJQ.js.map +1 -0
- package/dist/{ProductEditPage-B8qFTCW9.js → ProductEditPage-CQj9egzW.js} +138 -137
- package/dist/ProductEditPage-CQj9egzW.js.map +1 -0
- package/dist/{ProductsPage-C7_r9cKn.js → ProductsPage-i8QVw_Jm.js} +65 -64
- package/dist/{ProductsPage-C7_r9cKn.js.map → ProductsPage-i8QVw_Jm.js.map} +1 -1
- package/dist/PurchaseCreatePage-Bp6bl9n8.js +591 -0
- package/dist/PurchaseCreatePage-Bp6bl9n8.js.map +1 -0
- package/dist/{PurchaseRequestDetailPage-C7aAwEqw.js → PurchaseRequestDetailPage-CNAqIFef.js} +216 -215
- package/dist/PurchaseRequestDetailPage-CNAqIFef.js.map +1 -0
- package/dist/{PurchaseRequestsPage-BwCkbpaX.js → PurchaseRequestsPage-BJqDlNrc.js} +57 -56
- package/dist/{PurchaseRequestsPage-BwCkbpaX.js.map → PurchaseRequestsPage-BJqDlNrc.js.map} +1 -1
- package/dist/{PurchasesPage-CvaZouVy.js → PurchasesPage-BQEToymQ.js} +76 -75
- package/dist/{PurchasesPage-CvaZouVy.js.map → PurchasesPage-BQEToymQ.js.map} +1 -1
- package/dist/{SaleCreatePage-DP1Qmltu.js → SaleCreatePage-DbfBK4PH.js} +149 -173
- package/dist/SaleCreatePage-DbfBK4PH.js.map +1 -0
- package/dist/{SalesPage-CO3cdYX5.js → SalesPage-CTBJMxZe.js} +50 -49
- package/dist/SalesPage-CTBJMxZe.js.map +1 -0
- package/dist/SettingsPage-CiwVmzM3.js +663 -0
- package/dist/SettingsPage-CiwVmzM3.js.map +1 -0
- package/dist/{StorageUnitsPage-B9Hr_RkW.js → StorageUnitsPage-BV7nK_iE.js} +57 -56
- package/dist/{StorageUnitsPage-B9Hr_RkW.js.map → StorageUnitsPage-BV7nK_iE.js.map} +1 -1
- package/dist/{TransactionsPage-HKIGwEZN.js → TransactionsPage-Cocn4901.js} +55 -54
- package/dist/TransactionsPage-Cocn4901.js.map +1 -0
- package/dist/TransferCreatePage-DbjcjuOg.js +316 -0
- package/dist/TransferCreatePage-DbjcjuOg.js.map +1 -0
- package/dist/TransfersPage-BFVF7Xvc.js +471 -0
- package/dist/TransfersPage-BFVF7Xvc.js.map +1 -0
- package/dist/VialsPage-BNzYTLVd.js +321 -0
- package/dist/VialsPage-BNzYTLVd.js.map +1 -0
- package/dist/index.js +652 -34
- package/dist/index.js.map +1 -1
- package/dist/settingsStore-KW217unV.js +417 -0
- package/dist/settingsStore-KW217unV.js.map +1 -0
- package/package.json +1 -1
- package/dist/BrandsPage-CSA3meke.js.map +0 -1
- package/dist/DashboardPage-CqaquOs2.js.map +0 -1
- package/dist/InventoryPage-CPbzfDMR.js.map +0 -1
- package/dist/MemberProfileCard-0vjO3Gzd.js.map +0 -1
- package/dist/PaymentCreatePage-BYmDZAIB.js.map +0 -1
- package/dist/PickupCreatePage-CMGwoAXj.js +0 -426
- package/dist/PickupCreatePage-CMGwoAXj.js.map +0 -1
- package/dist/PickupsPage-D66_Wta4.js.map +0 -1
- package/dist/PmTable-B9970kPY.js.map +0 -1
- package/dist/ProductEditPage-B8qFTCW9.js.map +0 -1
- package/dist/PurchaseCreatePage-CDfNDcKG.js +0 -627
- package/dist/PurchaseCreatePage-CDfNDcKG.js.map +0 -1
- package/dist/PurchaseRequestDetailPage-C7aAwEqw.js.map +0 -1
- package/dist/SaleCreatePage-DP1Qmltu.js.map +0 -1
- package/dist/SalesPage-CO3cdYX5.js.map +0 -1
- package/dist/SettingsPage-DvVRwSFw.js +0 -711
- package/dist/SettingsPage-DvVRwSFw.js.map +0 -1
- package/dist/TransactionsPage-HKIGwEZN.js.map +0 -1
- package/dist/TransferCreatePage-DMuZqQ3c.js +0 -363
- package/dist/TransferCreatePage-DMuZqQ3c.js.map +0 -1
- package/dist/TransfersPage-COIyouL4.js +0 -480
- package/dist/TransfersPage-COIyouL4.js.map +0 -1
- package/dist/VialsPage-BNPUwGCU.js +0 -922
- package/dist/VialsPage-BNPUwGCU.js.map +0 -1
- package/dist/currency-ClRLIEg2.js +0 -1372
- package/dist/currency-ClRLIEg2.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PaymentCreatePage-B5VOgTx9.js","names":[],"sources":["../src/views/PaymentCreatePage.jsx"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport { useNavigate, useParams } from \"react-router-dom\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport {\n Alert,\n Box,\n Button,\n Card,\n CardContent,\n Chip,\n Divider,\n InputAdornment,\n LinearProgress,\n Stack,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n TextField,\n Typography,\n} from \"@mui/material\";\nimport SaveRoundedIcon from \"@mui/icons-material/SaveRounded\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport PmPageShell from \"@pm/components/PmPageShell\";\nimport PmNav from \"@pm/components/PmNav\";\nimport PmGuard from \"@pm/components/PmGuard\";\nimport { usePermissionedEffect, usePmPermissions } from \"@pm/utils/permissions\";\nimport {\n createPayment,\n getMemberDuesDetails,\n getMemberOutstandingDues,\n} from \"@pm/services/pmApi\";\nimport MemberProfileCard from \"@pm/components/MemberProfileCard\";\nimport { PmSelect } from \"@pm/components/PmTable\";\nimport { PAYMENT_MODES } from \"@pm/utils/constants\";\nimport { currencySymbol } from \"@pm/utils/currency\";\nimport { usePmSettings } from \"@pm/utils/settingsStore\";\nimport { formatDate, formatNumber } from \"@pm/utils/format\";\nimport {\n isClean,\n validatePastOrTodayDate,\n validatePositiveNumber,\n} from \"@pm/utils/validation\";\nimport { useFieldErrors } from \"@pm/utils/useFieldErrors\";\n\nfunction daysSince(value) {\n if (!value) return null;\n const ms = new Date(value).getTime();\n if (Number.isNaN(ms)) return null;\n const diff = Date.now() - ms;\n return Math.max(0, Math.floor(diff / (24 * 3600 * 1000)));\n}\n\nexport default function PaymentCreatePage() {\n const { memberId } = useParams();\n const navigate = useNavigate();\n const settings = usePmSettings();\n const cur = currencySymbol(settings?.currencyCode);\n const perms = usePmPermissions();\n // Dues breakdown drives both the panel and the collect form's totalDue.\n // Without the dues permission we can't fetch it, so the page surfaces a\n // hard-stop alert and disables Confirm Collection.\n const canSeeDues = perms.has(\"view.manage.productManagement.dues\");\n const [error, setError] = useState(\"\");\n const [memberName, setMemberName] = useState(\"\");\n const [previousDue, setPreviousDue] = useState(0);\n const [duesDetails, setDuesDetails] = useState(null);\n const [detailsLoading, setDetailsLoading] = useState(false);\n const fieldErrors = useFieldErrors();\n const today = new Date().toISOString().substring(0, 10);\n const [form, setForm] = useState({\n id: uuidv4(),\n paymentDate: today,\n paymentMode: \"CASH\",\n collectingNow: \"\",\n notes: \"\",\n });\n\n async function loadMemberDues() {\n if (!memberId) {\n setDuesDetails(null);\n setDetailsLoading(false);\n setPreviousDue(0);\n return;\n }\n if (!canSeeDues) {\n // No dues access — leave panels empty. The hard-stop alert below\n // tells the operator to ask for the perm.\n setDuesDetails(null);\n setPreviousDue(0);\n setDetailsLoading(false);\n return;\n }\n setDetailsLoading(true);\n try {\n const [details, dues] = await Promise.all([\n getMemberDuesDetails(memberId).catch(() => null),\n getMemberOutstandingDues().catch(() => []),\n ]);\n setDuesDetails(details);\n const match = (dues ?? []).find((d) => d.memberId === memberId);\n setPreviousDue(\n match ? Number(match.totalDue) : Number(details?.totalDue ?? 0),\n );\n } catch (err) {\n showToast({\n message:\n err?.response?.data?.message ??\n err?.message ??\n \"Failed to load member dues\",\n type: \"error\",\n });\n } finally {\n setDetailsLoading(false);\n }\n }\n\n usePermissionedEffect(\n \"update.manage.productManagement.payment\",\n () => {\n void loadMemberDues();\n setForm((f) => ({ ...f, collectingNow: \"\" }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },\n [memberId],\n );\n\n // -------- Money math --------\n const totalDue = Number(duesDetails?.totalDue ?? 0);\n const collectedRaw = Number(form.collectingNow || 0);\n const collected = Math.min(Math.max(collectedRaw, 0), totalDue);\n const remainingAfter = Math.max(totalDue - collected, 0);\n\n const oldestDueDays = daysSince(duesDetails?.oldestDueDate);\n const lastSaleDays = daysSince(duesDetails?.lastSaleDate);\n\n // Collection only makes sense when there's an outstanding balance — once\n // it's zero the collect form is hidden entirely (a \"Nothing to collect\"\n // alert is shown instead) and the Save button stays disabled.\n const canCollect = !!memberId && totalDue > 0 && canSeeDues;\n\n // -------- Validation --------\n const formErrors = useMemo(() => {\n const errs = {\n member: memberId ? \"\" : \"No member selected\",\n paymentDate: validatePastOrTodayDate(form.paymentDate, {\n required: true,\n label: \"Payment date\",\n }),\n collectingNow: validatePositiveNumber(form.collectingNow, \"Amount\", {\n required: true,\n }),\n };\n if (\n !errs.collectingNow &&\n totalDue > 0 &&\n Number(form.collectingNow) > totalDue\n ) {\n errs.collectingNow = `Cannot collect more than the outstanding due (${formatNumber(totalDue)}).`;\n }\n return errs;\n }, [memberId, form.paymentDate, form.collectingNow, totalDue]);\n const formIsValid = canCollect && isClean(formErrors);\n\n async function save() {\n if (!formIsValid) {\n fieldErrors.markAllTouched();\n setError(\"Please fix the highlighted fields.\");\n return;\n }\n try {\n await createPayment({\n id: form.id,\n memberId,\n amount: Number(collected.toFixed(2)),\n paymentDate: form.paymentDate,\n paymentMode: form.paymentMode || null,\n notes: form.notes || null,\n allocations: null,\n });\n showToast({\n message: memberName\n ? `Payment recorded for ${memberName}. Applied to their oldest sales first.`\n : \"Payment recorded. Applied to the oldest sales first.\",\n type: \"success\",\n });\n navigate(\"/ui/medplat/manage/pm/payments\");\n } catch (err) {\n const message =\n err?.response?.data?.message ??\n err?.message ??\n \"Failed to record payment\";\n setError(message);\n showToast({ message, type: \"error\" });\n }\n }\n\n return (\n <Box>\n <PmNav />\n <PmGuard\n perm={\"update.manage.productManagement.payment\"}\n title=\"You don’t have permission to collect payments\"\n >\n <PmPageShell\n title=\"Collect Payment\"\n subtitle=\"Collect payment for what a customer owes. Payments are matched to sales in order received.\"\n actions={\n <Stack direction=\"row\" spacing={1}>\n <Button\n variant=\"outlined\"\n onClick={() => navigate(\"/ui/medplat/manage/pm/payments\")}\n >\n Cancel\n </Button>\n <Button\n variant=\"contained\"\n startIcon={<SaveRoundedIcon />}\n disabled={!formIsValid}\n onClick={() => void save()}\n >\n Confirm Collection\n </Button>\n </Stack>\n }\n >\n {error ? (\n <Alert severity=\"error\" sx={{ mb: 2 }}>\n {error}\n </Alert>\n ) : null}\n\n {!canSeeDues ? (\n <Alert severity=\"warning\" sx={{ mb: 2 }}>\n You don’t have access to view outstanding dues, so this collection\n flow can’t determine how much is owed. Ask an admin to grant the\n dues permission to collect payments here.\n </Alert>\n ) : null}\n\n {/* ---------- Member profile (from URL) ---------- */}\n <Card sx={{ borderRadius: 1.5, mb: 2 }}>\n <CardContent>\n <Typography variant=\"h6\" sx={{ fontWeight: 800, mb: 2 }}>\n Customer\n </Typography>\n {memberId ? (\n <MemberProfileCard\n memberId={memberId}\n previousDue={previousDue}\n currencySymbol={cur}\n onLoad={(p) => setMemberName(p?.name ?? \"\")}\n />\n ) : (\n <Alert severity=\"warning\">No member selected</Alert>\n )}\n </CardContent>\n </Card>\n\n {/* ---------- Dues + collect (only when a member is selected) ---------- */}\n {memberId ? (\n <>\n <Card sx={{ borderRadius: 1.5, mb: 2 }}>\n <CardContent>\n {detailsLoading ? <LinearProgress sx={{ mb: 2 }} /> : null}\n <Grid3MetricStrip\n total={totalDue}\n oldestDueDays={oldestDueDays}\n oldestDueDate={duesDetails?.oldestDueDate}\n lastSaleDays={lastSaleDays}\n lastSaleDate={duesDetails?.lastSaleDate}\n currency={cur}\n />\n </CardContent>\n </Card>\n\n <Card sx={{ borderRadius: 1.5, mb: 2 }}>\n <CardContent>\n <Stack\n direction=\"row\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n sx={{ mb: 2 }}\n >\n <Typography variant=\"h6\" sx={{ fontWeight: 800 }}>\n Due Breakdown\n </Typography>\n <Typography variant=\"caption\" color=\"text.secondary\">\n {(duesDetails?.openSales ?? []).length}{\" \"}\n {(duesDetails?.openSales ?? []).length === 1\n ? \"open sale\"\n : \"open sales\"}{\" \"}\n · oldest first\n </Typography>\n </Stack>\n <Divider sx={{ mb: 1 }} />\n {totalDue <= 0 ? (\n <Alert severity=\"success\" sx={{ mt: 1 }}>\n No outstanding dues for this member — nothing to collect.\n </Alert>\n ) : (\n <TableContainer>\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell sx={{ fontWeight: 800 }}>\n Sale Date\n </TableCell>\n <TableCell sx={{ fontWeight: 800 }}>\n Items\n </TableCell>\n <TableCell sx={{ fontWeight: 800 }} align=\"right\">\n Sale\n </TableCell>\n <TableCell sx={{ fontWeight: 800 }} align=\"right\">\n Paid\n </TableCell>\n <TableCell sx={{ fontWeight: 800 }} align=\"right\">\n Due\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {(duesDetails?.openSales ?? []).map((sale) => (\n <TableRow key={sale.id} hover>\n <TableCell>\n <Stack\n direction=\"row\"\n spacing={1}\n alignItems=\"baseline\"\n >\n <Typography variant=\"body2\">\n {formatDate(sale.saleDate)}\n </Typography>\n <Typography\n variant=\"caption\"\n color=\"text.secondary\"\n >\n ({daysSince(sale.saleDate)}d ago)\n </Typography>\n </Stack>\n </TableCell>\n <TableCell>\n <Stack\n direction=\"row\"\n spacing={0.5}\n flexWrap=\"wrap\"\n >\n {(sale.items ?? []).map((it) => (\n <Chip\n key={it.id}\n size=\"small\"\n variant=\"outlined\"\n label={`${it.productName} × ${it.quantity}`}\n sx={{ mr: 0.5, mb: 0.5 }}\n />\n ))}\n </Stack>\n </TableCell>\n <TableCell\n align=\"right\"\n sx={{ fontVariantNumeric: \"tabular-nums\" }}\n >\n {cur}\n {formatNumber(sale.totalAmount)}\n </TableCell>\n <TableCell\n align=\"right\"\n sx={{\n fontVariantNumeric: \"tabular-nums\",\n color: \"text.secondary\",\n }}\n >\n {cur}\n {formatNumber(sale.paidAmount)}\n </TableCell>\n <TableCell\n align=\"right\"\n sx={{\n fontVariantNumeric: \"tabular-nums\",\n fontWeight: 700,\n color: \"warning.dark\",\n }}\n >\n {cur}\n {formatNumber(sale.dueAmount)}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n )}\n </CardContent>\n </Card>\n\n {/* ---------- Collection footer — only when there's something to collect ---------- */}\n {canCollect ? (\n <Card sx={{ borderRadius: 1.5, bgcolor: \"grey.50\", mb: 3 }}>\n <CardContent>\n <Stack direction={{ xs: \"column\", md: \"row\" }} spacing={2}>\n <TextField\n required\n size=\"small\"\n type=\"date\"\n label=\"Payment Date\"\n sx={{ flex: 1 }}\n InputLabelProps={{ shrink: true }}\n value={form.paymentDate}\n onChange={(e) =>\n setForm({ ...form, paymentDate: e.target.value })\n }\n onBlur={fieldErrors.onBlur(\"paymentDate\")}\n error={\n fieldErrors.show(\"paymentDate\") &&\n !!formErrors.paymentDate\n }\n helperText={\n fieldErrors.show(\"paymentDate\")\n ? formErrors.paymentDate\n : \"\"\n }\n />\n <PmSelect\n label=\"Payment Mode\"\n value={form.paymentMode}\n onChange={(v) => setForm({ ...form, paymentMode: v })}\n options={PAYMENT_MODES}\n sx={{ flex: 1 }}\n />\n <TextField\n size=\"small\"\n label=\"Notes\"\n sx={{ flex: 2 }}\n value={form.notes}\n onChange={(e) =>\n setForm({ ...form, notes: e.target.value })\n }\n />\n </Stack>\n\n <Divider sx={{ my: 2 }} />\n\n <Stack spacing={1.25}>\n <Stack\n direction=\"row\"\n justifyContent=\"space-between\"\n alignItems=\"baseline\"\n >\n <Typography variant=\"body2\" color=\"text.secondary\">\n Total Due\n </Typography>\n <Typography\n variant=\"h5\"\n sx={{\n fontWeight: 800,\n fontVariantNumeric: \"tabular-nums\",\n color:\n totalDue > 0 ? \"warning.dark\" : \"text.primary\",\n }}\n >\n {cur}\n {formatNumber(totalDue)}\n </Typography>\n </Stack>\n\n <Stack\n direction=\"row\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n spacing={2}\n >\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n sx={{ flexShrink: 0 }}\n >\n Amount Collecting Now\n </Typography>\n <TextField\n required\n size=\"small\"\n type=\"number\"\n inputProps={{\n step: \"0.01\",\n min: 0,\n max: totalDue,\n style: { textAlign: \"right\", fontWeight: 700 },\n }}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n {cur}\n </InputAdornment>\n ),\n }}\n sx={{ width: 220 }}\n placeholder=\"0.00\"\n value={form.collectingNow}\n onChange={(e) =>\n setForm({ ...form, collectingNow: e.target.value })\n }\n onBlur={fieldErrors.onBlur(\"collectingNow\")}\n error={\n fieldErrors.show(\"collectingNow\") &&\n !!formErrors.collectingNow\n }\n helperText={\n fieldErrors.show(\"collectingNow\")\n ? formErrors.collectingNow\n : \"Partial amounts accepted\"\n }\n />\n </Stack>\n\n <Divider sx={{ my: 0.5 }} />\n\n <Stack\n direction=\"row\"\n justifyContent=\"space-between\"\n alignItems=\"baseline\"\n >\n <Typography variant=\"body2\" color=\"text.secondary\">\n Remaining Due After\n </Typography>\n <Typography\n variant=\"h5\"\n sx={{\n fontWeight: 800,\n fontVariantNumeric: \"tabular-nums\",\n color:\n remainingAfter > 0\n ? \"warning.dark\"\n : \"success.dark\",\n }}\n >\n {cur}\n {formatNumber(remainingAfter)}\n </Typography>\n </Stack>\n </Stack>\n </CardContent>\n </Card>\n ) : null}\n </>\n ) : null}\n </PmPageShell>\n </PmGuard>\n </Box>\n );\n}\n\n// Compact three-metric strip used inside the member dues panel.\nfunction Grid3MetricStrip({\n total,\n oldestDueDays,\n oldestDueDate,\n lastSaleDays,\n lastSaleDate,\n currency = \"₹\",\n}) {\n const cell = (label, value, sub, color) => (\n <Box\n sx={{\n flex: 1,\n p: 1.5,\n borderRadius: 2,\n bgcolor: \"background.paper\",\n border: 1,\n borderColor: \"divider\",\n textAlign: \"left\",\n }}\n >\n <Typography variant=\"caption\" color=\"text.secondary\">\n {label}\n </Typography>\n <Typography\n variant=\"h6\"\n sx={{ fontWeight: 800, color, fontVariantNumeric: \"tabular-nums\" }}\n >\n {value}\n </Typography>\n {sub ? (\n <Typography variant=\"caption\" color=\"text.secondary\">\n {sub}\n </Typography>\n ) : null}\n </Box>\n );\n return (\n <Stack direction={{ xs: \"column\", md: \"row\" }} spacing={1.5}>\n {cell(\n \"Total Due\",\n `${currency}${formatNumber(total)}`,\n null,\n total > 0 ? \"warning.dark\" : \"text.primary\",\n )}\n {cell(\n \"Last Sale\",\n lastSaleDays == null\n ? \"—\"\n : `${lastSaleDays} day${lastSaleDays === 1 ? \"\" : \"s\"} ago`,\n lastSaleDate ? formatDate(lastSaleDate) : \"No prior sale\",\n \"text.primary\",\n )}\n {cell(\n \"Due Since\",\n oldestDueDays == null\n ? \"—\"\n : `${oldestDueDays} day${oldestDueDays === 1 ? \"\" : \"s\"}`,\n oldestDueDate ? formatDate(oldestDueDate) : \"No open sales\",\n oldestDueDays != null && oldestDueDays >= 30\n ? \"error.dark\"\n : \"text.primary\",\n )}\n </Stack>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { a as
|
|
3
|
-
import { t as
|
|
1
|
+
import { M as e, b as t } from "./settingsStore-KW217unV.js";
|
|
2
|
+
import { a as n, c as r, i, s as a, t as o } from "./PmTable-BkK65bJQ.js";
|
|
3
|
+
import { t as s } from "./format-UOyOu75i.js";
|
|
4
|
+
import { a as c, n as l, r as u, t as d } from "./PmGuard-C90yhpsN.js";
|
|
4
5
|
import { useState as f } from "react";
|
|
5
6
|
import { jsx as p, jsxs as m } from "react/jsx-runtime";
|
|
6
7
|
import { Alert as h, Box as g, Button as _, Chip as v, Skeleton as y, Stack as b, TableBody as x, TableCell as S, TableHead as C, TableRow as w, Typography as T } from "@mui/material";
|
|
8
|
+
import { showToast as E } from "@/common/toaster/toaster";
|
|
7
9
|
import "@mui/icons-material/AddRounded";
|
|
8
|
-
import
|
|
9
|
-
import { showToast as D } from "@/common/toaster/toaster";
|
|
10
|
+
import D from "@mui/icons-material/RefreshRounded";
|
|
10
11
|
import { useNavigate as O } from "react-router-dom";
|
|
11
12
|
import k from "@mui/icons-material/PaymentsRounded";
|
|
12
13
|
//#region src/views/PaymentsPage.jsx
|
|
@@ -16,21 +17,21 @@ function A() {
|
|
|
16
17
|
async function R() {
|
|
17
18
|
F(!0), L("");
|
|
18
19
|
try {
|
|
19
|
-
let
|
|
20
|
-
j(
|
|
21
|
-
let r = Array.from(new Set(
|
|
20
|
+
let n = await e(0, 50);
|
|
21
|
+
j(n);
|
|
22
|
+
let r = Array.from(new Set(n.map((e) => e.memberId).filter(Boolean)));
|
|
22
23
|
if (r.length === 0) N({});
|
|
23
24
|
else try {
|
|
24
|
-
let e = await
|
|
25
|
+
let e = await t(r), n = {};
|
|
25
26
|
e.forEach((e) => {
|
|
26
|
-
|
|
27
|
-
}), N(
|
|
27
|
+
n[e.id] = e.name;
|
|
28
|
+
}), N(n);
|
|
28
29
|
} catch {
|
|
29
30
|
N({});
|
|
30
31
|
}
|
|
31
32
|
} catch (e) {
|
|
32
33
|
let t = e?.response?.data?.message ?? e?.message ?? "Failed to load";
|
|
33
|
-
L(t),
|
|
34
|
+
L(t), E({
|
|
34
35
|
message: t,
|
|
35
36
|
type: "error"
|
|
36
37
|
});
|
|
@@ -38,11 +39,11 @@ function A() {
|
|
|
38
39
|
F(!1);
|
|
39
40
|
}
|
|
40
41
|
}
|
|
41
|
-
return
|
|
42
|
+
return u("view.manage.productManagement.payment", () => {
|
|
42
43
|
R();
|
|
43
|
-
}, []), /* @__PURE__ */ m(g, { children: [/* @__PURE__ */ p(
|
|
44
|
+
}, []), /* @__PURE__ */ m(g, { children: [/* @__PURE__ */ p(l, {}), /* @__PURE__ */ p(d, {
|
|
44
45
|
perm: "view.manage.productManagement.payment",
|
|
45
|
-
children: /* @__PURE__ */ m(
|
|
46
|
+
children: /* @__PURE__ */ m(c, {
|
|
46
47
|
title: "Debt Payments",
|
|
47
48
|
subtitle: "Payments collected from customers. Matched to their sales in order.",
|
|
48
49
|
actions: /* @__PURE__ */ m(b, {
|
|
@@ -50,7 +51,7 @@ function A() {
|
|
|
50
51
|
spacing: 1,
|
|
51
52
|
children: [/* @__PURE__ */ p(_, {
|
|
52
53
|
variant: "outlined",
|
|
53
|
-
startIcon: /* @__PURE__ */ p(
|
|
54
|
+
startIcon: /* @__PURE__ */ p(D, {}),
|
|
54
55
|
onClick: () => void R(),
|
|
55
56
|
children: "Refresh"
|
|
56
57
|
}), !1]
|
|
@@ -59,11 +60,11 @@ function A() {
|
|
|
59
60
|
severity: "error",
|
|
60
61
|
sx: { mb: 2 },
|
|
61
62
|
children: I
|
|
62
|
-
}) : null, /* @__PURE__ */ p(
|
|
63
|
+
}) : null, /* @__PURE__ */ p(r, {
|
|
63
64
|
eyebrow: "History",
|
|
64
65
|
title: "Recent Payments",
|
|
65
66
|
subtitle: P ? "Loading…" : `${A.length} ${A.length === 1 ? "payment" : "payments"} recorded`,
|
|
66
|
-
children: /* @__PURE__ */ m(
|
|
67
|
+
children: /* @__PURE__ */ m(a, {
|
|
67
68
|
dense: !0,
|
|
68
69
|
children: [/* @__PURE__ */ p(C, { children: /* @__PURE__ */ m(w, { children: [
|
|
69
70
|
/* @__PURE__ */ p(S, { children: "Ref" }),
|
|
@@ -78,7 +79,7 @@ function A() {
|
|
|
78
79
|
align: "right",
|
|
79
80
|
children: "Allocations"
|
|
80
81
|
})
|
|
81
|
-
] }) }), /* @__PURE__ */ p(x, { children: P ? Array.from({ length: 4 }).map((e, t) => /* @__PURE__ */ p(w, { children: Array.from({ length: 6 }).map((e, t) => /* @__PURE__ */ p(S, { children: /* @__PURE__ */ p(y, { height: 22 }) }, t)) }, t)) : A.length === 0 ? /* @__PURE__ */ p(
|
|
82
|
+
] }) }), /* @__PURE__ */ p(x, { children: P ? Array.from({ length: 4 }).map((e, t) => /* @__PURE__ */ p(w, { children: Array.from({ length: 6 }).map((e, t) => /* @__PURE__ */ p(S, { children: /* @__PURE__ */ p(y, { height: 22 }) }, t)) }, t)) : A.length === 0 ? /* @__PURE__ */ p(o, {
|
|
82
83
|
colSpan: 6,
|
|
83
84
|
icon: k,
|
|
84
85
|
title: "No payments yet",
|
|
@@ -88,11 +89,11 @@ function A() {
|
|
|
88
89
|
return /* @__PURE__ */ m(w, {
|
|
89
90
|
hover: !0,
|
|
90
91
|
children: [
|
|
91
|
-
/* @__PURE__ */ p(S, { children: /* @__PURE__ */ p(
|
|
92
|
+
/* @__PURE__ */ p(S, { children: /* @__PURE__ */ p(n, { id: e.serialId }) }),
|
|
92
93
|
/* @__PURE__ */ p(S, { children: /* @__PURE__ */ p(T, {
|
|
93
94
|
variant: "body2",
|
|
94
95
|
sx: { fontWeight: 700 },
|
|
95
|
-
children:
|
|
96
|
+
children: s(e.paymentDate)
|
|
96
97
|
}) }),
|
|
97
98
|
/* @__PURE__ */ p(S, { children: t ? /* @__PURE__ */ p(T, {
|
|
98
99
|
variant: "body2",
|
|
@@ -121,7 +122,7 @@ function A() {
|
|
|
121
122
|
}) }),
|
|
122
123
|
/* @__PURE__ */ p(S, {
|
|
123
124
|
align: "right",
|
|
124
|
-
children: /* @__PURE__ */ p(
|
|
125
|
+
children: /* @__PURE__ */ p(i, {
|
|
125
126
|
value: e.amount,
|
|
126
127
|
tone: "success"
|
|
127
128
|
})
|
|
@@ -154,4 +155,4 @@ function A() {
|
|
|
154
155
|
//#endregion
|
|
155
156
|
export { A as default };
|
|
156
157
|
|
|
157
|
-
//# sourceMappingURL=PaymentsPage-
|
|
158
|
+
//# sourceMappingURL=PaymentsPage-DY6BclkN.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaymentsPage-BXPvKon-.js","names":[],"sources":["../src/views/PaymentsPage.jsx"],"sourcesContent":["import { useState } from \"react\";\nimport { useNavigate } from \"react-router-dom\";\nimport {\n Alert,\n Box,\n Button,\n Chip,\n Skeleton,\n Stack,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n Typography,\n} from \"@mui/material\";\nimport PaymentsRoundedIcon from \"@mui/icons-material/PaymentsRounded\";\nimport AddRoundedIcon from \"@mui/icons-material/AddRounded\";\nimport RefreshRoundedIcon from \"@mui/icons-material/RefreshRounded\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport PmPageShell from \"@pm/components/PmPageShell\";\nimport PmNav from \"@pm/components/PmNav\";\nimport PmGuard from \"@pm/components/PmGuard\";\nimport { usePermissionedEffect } from \"@pm/utils/permissions\";\nimport {\n PmEmptyRow,\n PmMoney,\n PmRef,\n PmTable,\n PmTableCard,\n} from \"@pm/components/PmTable\";\nimport { getMembersByIds, listPayments } from \"@pm/services/pmApi\";\nimport { formatDate } from \"@pm/utils/format\";\n\nexport default function PaymentsPage() {\n const navigate = useNavigate();\n const [payments, setPayments] = useState([]);\n // Map of memberId -> display name, hydrated for memberIds present on the\n // loaded payments. Keeps the recent-payments table from showing raw UUIDs\n // without forcing a full member list load.\n const [memberNames, setMemberNames] = useState({});\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(\"\");\n\n async function load() {\n setLoading(true);\n setError(\"\");\n try {\n const list = await listPayments(0, 50);\n setPayments(list);\n const ids = Array.from(\n new Set(list.map((p) => p.memberId).filter(Boolean)),\n );\n if (ids.length === 0) {\n setMemberNames({});\n } else {\n try {\n const refs = await getMembersByIds(ids);\n const map = {};\n refs.forEach((r) => {\n map[r.id] = r.name;\n });\n setMemberNames(map);\n } catch {\n setMemberNames({});\n }\n }\n } catch (err) {\n const message =\n err?.response?.data?.message ?? err?.message ?? \"Failed to load\";\n setError(message);\n showToast({ message, type: \"error\" });\n } finally {\n setLoading(false);\n }\n }\n\n usePermissionedEffect(\n \"view.manage.productManagement.payment\",\n () => {\n void load();\n },\n [],\n );\n\n return (\n <Box>\n <PmNav />\n <PmGuard perm={\"view.manage.productManagement.payment\"}>\n <PmPageShell\n title=\"Debt Payments\"\n subtitle=\"Payments collected from customers. Matched to their sales in order.\"\n actions={\n <Stack direction=\"row\" spacing={1}>\n <Button\n variant=\"outlined\"\n startIcon={<RefreshRoundedIcon />}\n onClick={() => void load()}\n >\n Refresh\n </Button>\n {/* DEMO-ONLY: in production a payment is started by passing the\n member id via the URL (/payments/new/:memberId) from an outside\n flow. Unhide this button to launch the create page directly. */}\n {false && (\n <Button\n variant=\"contained\"\n startIcon={<AddRoundedIcon />}\n onClick={() => navigate(\"/ui/medplat/manage/pm/payments/new\")}\n >\n New Payment\n </Button>\n )}\n </Stack>\n }\n >\n {error ? (\n <Alert severity=\"error\" sx={{ mb: 2 }}>\n {error}\n </Alert>\n ) : null}\n\n <PmTableCard\n eyebrow=\"History\"\n title=\"Recent Payments\"\n subtitle={\n loading\n ? \"Loading…\"\n : `${payments.length} ${payments.length === 1 ? \"payment\" : \"payments\"} recorded`\n }\n >\n <PmTable dense>\n <TableHead>\n <TableRow>\n <TableCell>Ref</TableCell>\n <TableCell>Date</TableCell>\n <TableCell>Member</TableCell>\n <TableCell>Mode</TableCell>\n <TableCell align=\"right\">Amount</TableCell>\n <TableCell align=\"right\">Allocations</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {loading ? (\n Array.from({ length: 4 }).map((_, i) => (\n <TableRow key={i}>\n {Array.from({ length: 6 }).map((__, j) => (\n <TableCell key={j}>\n <Skeleton height={22} />\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : payments.length === 0 ? (\n <PmEmptyRow\n colSpan={6}\n icon={PaymentsRoundedIcon}\n title=\"No payments yet\"\n hint=\"Payments appear here with how many sales they're applied to.\"\n />\n ) : (\n payments.map((p) => {\n const memberName = memberNames[p.memberId];\n return (\n <TableRow key={p.id} hover>\n <TableCell>\n <PmRef id={p.serialId} />\n </TableCell>\n <TableCell>\n <Typography variant=\"body2\" sx={{ fontWeight: 700 }}>\n {formatDate(p.paymentDate)}\n </Typography>\n </TableCell>\n <TableCell>\n {memberName ? (\n <Typography\n variant=\"body2\"\n sx={{ fontWeight: 700 }}\n >\n {memberName}\n </Typography>\n ) : (\n <Typography\n variant=\"caption\"\n sx={{\n fontFamily: \"monospace\",\n color: \"text.secondary\",\n }}\n >\n {p.memberId?.slice(0, 8)}…\n </Typography>\n )}\n </TableCell>\n <TableCell>\n {p.paymentMode ? (\n <Chip\n size=\"small\"\n label={p.paymentMode}\n sx={{\n fontWeight: 700,\n borderRadius: 1.5,\n height: 22,\n }}\n />\n ) : (\n <Typography variant=\"caption\" color=\"text.disabled\">\n —\n </Typography>\n )}\n </TableCell>\n <TableCell align=\"right\">\n <PmMoney value={p.amount} tone=\"success\" />\n </TableCell>\n <TableCell align=\"right\">\n <Box\n component=\"span\"\n sx={{\n display: \"inline-flex\",\n px: 1,\n py: 0.2,\n borderRadius: 1.5,\n bgcolor: \"grey.100\",\n fontWeight: 800,\n fontVariantNumeric: \"tabular-nums\",\n color: \"text.secondary\",\n }}\n >\n {(p.allocations ?? []).length}\n </Box>\n </TableCell>\n </TableRow>\n );\n })\n )}\n </TableBody>\n </PmTable>\n </PmTableCard>\n </PmPageShell>\n </PmGuard>\n </Box>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PaymentsPage-DY6BclkN.js","names":[],"sources":["../src/views/PaymentsPage.jsx"],"sourcesContent":["import { useState } from \"react\";\nimport { useNavigate } from \"react-router-dom\";\nimport {\n Alert,\n Box,\n Button,\n Chip,\n Skeleton,\n Stack,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n Typography,\n} from \"@mui/material\";\nimport PaymentsRoundedIcon from \"@mui/icons-material/PaymentsRounded\";\nimport AddRoundedIcon from \"@mui/icons-material/AddRounded\";\nimport RefreshRoundedIcon from \"@mui/icons-material/RefreshRounded\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport PmPageShell from \"@pm/components/PmPageShell\";\nimport PmNav from \"@pm/components/PmNav\";\nimport PmGuard from \"@pm/components/PmGuard\";\nimport { usePermissionedEffect } from \"@pm/utils/permissions\";\nimport {\n PmEmptyRow,\n PmMoney,\n PmRef,\n PmTable,\n PmTableCard,\n} from \"@pm/components/PmTable\";\nimport { getMembersByIds, listPayments } from \"@pm/services/pmApi\";\nimport { formatDate } from \"@pm/utils/format\";\n\nexport default function PaymentsPage() {\n const navigate = useNavigate();\n const [payments, setPayments] = useState([]);\n // Map of memberId -> display name, hydrated for memberIds present on the\n // loaded payments. Keeps the recent-payments table from showing raw UUIDs\n // without forcing a full member list load.\n const [memberNames, setMemberNames] = useState({});\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(\"\");\n\n async function load() {\n setLoading(true);\n setError(\"\");\n try {\n const list = await listPayments(0, 50);\n setPayments(list);\n const ids = Array.from(\n new Set(list.map((p) => p.memberId).filter(Boolean)),\n );\n if (ids.length === 0) {\n setMemberNames({});\n } else {\n try {\n const refs = await getMembersByIds(ids);\n const map = {};\n refs.forEach((r) => {\n map[r.id] = r.name;\n });\n setMemberNames(map);\n } catch {\n setMemberNames({});\n }\n }\n } catch (err) {\n const message =\n err?.response?.data?.message ?? err?.message ?? \"Failed to load\";\n setError(message);\n showToast({ message, type: \"error\" });\n } finally {\n setLoading(false);\n }\n }\n\n usePermissionedEffect(\n \"view.manage.productManagement.payment\",\n () => {\n void load();\n },\n [],\n );\n\n return (\n <Box>\n <PmNav />\n <PmGuard perm={\"view.manage.productManagement.payment\"}>\n <PmPageShell\n title=\"Debt Payments\"\n subtitle=\"Payments collected from customers. Matched to their sales in order.\"\n actions={\n <Stack direction=\"row\" spacing={1}>\n <Button\n variant=\"outlined\"\n startIcon={<RefreshRoundedIcon />}\n onClick={() => void load()}\n >\n Refresh\n </Button>\n {/* DEMO-ONLY: in production a payment is started by passing the\n member id via the URL (/payments/new/:memberId) from an outside\n flow. Unhide this button to launch the create page directly. */}\n {false && (\n <Button\n variant=\"contained\"\n startIcon={<AddRoundedIcon />}\n onClick={() => navigate(\"/ui/medplat/manage/pm/payments/new\")}\n >\n New Payment\n </Button>\n )}\n </Stack>\n }\n >\n {error ? (\n <Alert severity=\"error\" sx={{ mb: 2 }}>\n {error}\n </Alert>\n ) : null}\n\n <PmTableCard\n eyebrow=\"History\"\n title=\"Recent Payments\"\n subtitle={\n loading\n ? \"Loading…\"\n : `${payments.length} ${payments.length === 1 ? \"payment\" : \"payments\"} recorded`\n }\n >\n <PmTable dense>\n <TableHead>\n <TableRow>\n <TableCell>Ref</TableCell>\n <TableCell>Date</TableCell>\n <TableCell>Member</TableCell>\n <TableCell>Mode</TableCell>\n <TableCell align=\"right\">Amount</TableCell>\n <TableCell align=\"right\">Allocations</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {loading ? (\n Array.from({ length: 4 }).map((_, i) => (\n <TableRow key={i}>\n {Array.from({ length: 6 }).map((__, j) => (\n <TableCell key={j}>\n <Skeleton height={22} />\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : payments.length === 0 ? (\n <PmEmptyRow\n colSpan={6}\n icon={PaymentsRoundedIcon}\n title=\"No payments yet\"\n hint=\"Payments appear here with how many sales they're applied to.\"\n />\n ) : (\n payments.map((p) => {\n const memberName = memberNames[p.memberId];\n return (\n <TableRow key={p.id} hover>\n <TableCell>\n <PmRef id={p.serialId} />\n </TableCell>\n <TableCell>\n <Typography variant=\"body2\" sx={{ fontWeight: 700 }}>\n {formatDate(p.paymentDate)}\n </Typography>\n </TableCell>\n <TableCell>\n {memberName ? (\n <Typography\n variant=\"body2\"\n sx={{ fontWeight: 700 }}\n >\n {memberName}\n </Typography>\n ) : (\n <Typography\n variant=\"caption\"\n sx={{\n fontFamily: \"monospace\",\n color: \"text.secondary\",\n }}\n >\n {p.memberId?.slice(0, 8)}…\n </Typography>\n )}\n </TableCell>\n <TableCell>\n {p.paymentMode ? (\n <Chip\n size=\"small\"\n label={p.paymentMode}\n sx={{\n fontWeight: 700,\n borderRadius: 1.5,\n height: 22,\n }}\n />\n ) : (\n <Typography variant=\"caption\" color=\"text.disabled\">\n —\n </Typography>\n )}\n </TableCell>\n <TableCell align=\"right\">\n <PmMoney value={p.amount} tone=\"success\" />\n </TableCell>\n <TableCell align=\"right\">\n <Box\n component=\"span\"\n sx={{\n display: \"inline-flex\",\n px: 1,\n py: 0.2,\n borderRadius: 1.5,\n bgcolor: \"grey.100\",\n fontWeight: 800,\n fontVariantNumeric: \"tabular-nums\",\n color: \"text.secondary\",\n }}\n >\n {(p.allocations ?? []).length}\n </Box>\n </TableCell>\n </TableRow>\n );\n })\n )}\n </TableBody>\n </PmTable>\n </PmTableCard>\n </PmPageShell>\n </PmGuard>\n </Box>\n );\n}\n"],"mappings":"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"}
|