bananas-commerce-admin 0.17.6 → 0.17.8
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/esm/contexts/DialogContext.js +4 -4
- package/dist/esm/contexts/DialogContext.js.map +1 -1
- package/dist/esm/extensions/member/components/SubscriptionsCardContent.js +39 -3
- package/dist/esm/extensions/member/components/SubscriptionsCardContent.js.map +1 -1
- package/dist/esm/extensions/member/components/SubscriptionsListItem.js +4 -2
- package/dist/esm/extensions/member/components/SubscriptionsListItem.js.map +1 -1
- package/dist/esm/extensions/member/contrib/PaymentMethodsCard.js +56 -16
- package/dist/esm/extensions/member/contrib/PaymentMethodsCard.js.map +1 -1
- package/dist/esm/extensions/member/contrib/SubscriptionsCard.js +3 -2
- package/dist/esm/extensions/member/contrib/SubscriptionsCard.js.map +1 -1
- package/dist/esm/extensions/member/utils/paymentMethodMask.js +3 -9
- package/dist/esm/extensions/member/utils/paymentMethodMask.js.map +1 -1
- package/dist/esm/extensions/pos/components/ReceiptTable.js +16 -1
- package/dist/esm/extensions/pos/components/ReceiptTable.js.map +1 -1
- package/dist/types/contexts/DialogContext.d.ts +2 -2
- package/dist/types/extensions/member/components/SubscriptionsCardContent.d.ts +1 -0
- package/dist/types/extensions/pos/types/purchase.d.ts +2 -0
- package/package.json +1 -1
- package/src/contexts/DialogContext.tsx +10 -10
- package/src/extensions/member/components/SubscriptionsCardContent.tsx +56 -2
- package/src/extensions/member/components/SubscriptionsListItem.tsx +10 -4
- package/src/extensions/member/contrib/PaymentMethodsCard.tsx +99 -24
- package/src/extensions/member/contrib/SubscriptionsCard.tsx +7 -1
- package/src/extensions/member/utils/paymentMethodMask.ts +3 -9
- package/src/extensions/pos/components/ReceiptTable.tsx +34 -1
- package/src/extensions/pos/types/purchase.ts +3 -0
|
@@ -26,10 +26,10 @@ function DialogContextProvider(props) {
|
|
|
26
26
|
setTitle(title);
|
|
27
27
|
setChildren(children);
|
|
28
28
|
setOpen(true);
|
|
29
|
-
if (options?.ok) {
|
|
29
|
+
if (options?.ok !== undefined) {
|
|
30
30
|
setOk(options.ok);
|
|
31
31
|
}
|
|
32
|
-
if (options?.cancel) {
|
|
32
|
+
if (options?.cancel !== undefined) {
|
|
33
33
|
setCancel(options.cancel);
|
|
34
34
|
}
|
|
35
35
|
if (options?.dialogProps) {
|
|
@@ -62,8 +62,8 @@ export function BcomDialog() {
|
|
|
62
62
|
React.createElement(DialogTitle, null, ctx.title),
|
|
63
63
|
React.createElement(DialogContent, null, ctx.children),
|
|
64
64
|
React.createElement(DialogActions, null,
|
|
65
|
-
React.createElement(Button, { onClick: () => ctx.cb(false) }, ctx.cancel),
|
|
66
|
-
React.createElement(Button, { onClick: () => ctx.cb(true) }, ctx.ok)))));
|
|
65
|
+
ctx.cancel && React.createElement(Button, { onClick: () => ctx.cb(false) }, ctx.cancel),
|
|
66
|
+
ctx.ok && React.createElement(Button, { onClick: () => ctx.cb(true) }, ctx.ok)))));
|
|
67
67
|
}
|
|
68
68
|
export function useDialog() {
|
|
69
69
|
const { makeOpen } = useContext(DialogContext);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DialogContext.js","sourceRoot":"","sources":["../../../src/contexts/DialogContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEpD,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,MAAuB,MAAM,sBAAsB,CAAC;AAC3D,OAAO,aAAa,MAAM,6BAA6B,CAAC;AACxD,OAAO,aAAa,MAAM,6BAA6B,CAAC;AACxD,OAAO,WAAW,MAAM,2BAA2B,CAAC;AAIpD,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,CAmBtC;IACD,KAAK,EAAE,EAAE;IACT,QAAQ,EAAE,IAAI;IACd,EAAE,EAAE,CAAC,EAAW,EAAE,EAAE,CAAC,KAAK,EAAE;IAC5B,IAAI,EAAE,KAAK;IACX,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;IAEtC,WAAW,EAAE,EAAE;IACf,EAAE,EAAE,IAAI;IACR,MAAM,EAAE,QAAQ;CACjB,CAAC,CAAC;AAEH,SAAS,qBAAqB,CAAC,KAAoC;IACjE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAkB,IAAI,CAAC,CAAC;IAChE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,QAAQ,
|
|
1
|
+
{"version":3,"file":"DialogContext.js","sourceRoot":"","sources":["../../../src/contexts/DialogContext.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import React, { useEffect, useState } from "react";
|
|
1
|
+
import React, { useCallback, useEffect, useState } from "react";
|
|
2
|
+
import CopyAllOutlinedIcon from "@mui/icons-material/CopyAllOutlined";
|
|
2
3
|
import { Button, Collapse, Stack } from "@mui/material";
|
|
3
4
|
import { DateTime } from "luxon";
|
|
5
|
+
import { useSnackbar } from "notistack";
|
|
4
6
|
import CardActions from "../../../components/Card/CardActions";
|
|
5
7
|
import CardCloseButton from "../../../components/Card/CardCloseButton";
|
|
6
8
|
import CardContent from "../../../components/Card/CardContent";
|
|
@@ -9,7 +11,10 @@ import CardFieldText from "../../../components/Card/CardFieldText";
|
|
|
9
11
|
import CardRow from "../../../components/Card/CardRow";
|
|
10
12
|
import { useApi } from "../../../contexts/ApiContext";
|
|
11
13
|
import { useCardContext } from "../../../contexts/CardContext";
|
|
14
|
+
import { useDialog } from "../../../contexts/DialogContext";
|
|
12
15
|
import { useI18n } from "../../../contexts/I18nContext";
|
|
16
|
+
import { useUser } from "../../../contexts/UserContext";
|
|
17
|
+
import { hasPermission } from "../../../util/has_permission";
|
|
13
18
|
import { toTitleCase } from "../../../util/to_title_case";
|
|
14
19
|
import { currencyFormat } from "../../pos/utils/amountToCurrencyString";
|
|
15
20
|
import EndSubscriptionButton from "./EndSubscriptionButton";
|
|
@@ -17,12 +22,15 @@ import ResumeSubscriptionButton from "./ResumeSubscriptionButton";
|
|
|
17
22
|
import StartSubscriptionButton from "./StartSubscriptionButton";
|
|
18
23
|
import SubscriptionsDialog from "./SubscriptionsDialog";
|
|
19
24
|
import SubscriptionsList from "./SubscriptionsList";
|
|
20
|
-
const SubscriptionsCardContent = ({ subscription, refresh, }) => {
|
|
25
|
+
const SubscriptionsCardContent = ({ subscription, membership_number, refresh, }) => {
|
|
21
26
|
const [cancelDialogOpen, setCancelDialogOpen] = useState(false);
|
|
22
27
|
const [periods, setPeriods] = useState(null);
|
|
28
|
+
const openDialog = useDialog();
|
|
23
29
|
const api = useApi();
|
|
30
|
+
const { user } = useUser();
|
|
24
31
|
const { isOpen } = useCardContext();
|
|
25
32
|
const { t } = useI18n();
|
|
33
|
+
const { enqueueSnackbar } = useSnackbar();
|
|
26
34
|
const handleRefresh = async () => {
|
|
27
35
|
refresh();
|
|
28
36
|
await fetchPeriods();
|
|
@@ -38,6 +46,32 @@ const SubscriptionsCardContent = ({ subscription, refresh, }) => {
|
|
|
38
46
|
if (periods == null)
|
|
39
47
|
setPeriods(data.results);
|
|
40
48
|
};
|
|
49
|
+
const subscribeAgain = useCallback(async () => {
|
|
50
|
+
if (await openDialog(t("Subscribe"), `Are you sure you want to subscribe this member to "${subscription.name}" again?`, {
|
|
51
|
+
ok: t("Yes, subscribe"),
|
|
52
|
+
cancel: t("Cancel"),
|
|
53
|
+
})) {
|
|
54
|
+
const action = api.operations["subscription.contrib:member-subscription-create"];
|
|
55
|
+
if (!action) {
|
|
56
|
+
throw new Error('Invalid action "subscription.contrib:member-subscription-create".');
|
|
57
|
+
}
|
|
58
|
+
const response = await action.call({
|
|
59
|
+
params: { membership_number },
|
|
60
|
+
body: { reference: subscription.plan },
|
|
61
|
+
});
|
|
62
|
+
if (response.status == 201) {
|
|
63
|
+
refresh();
|
|
64
|
+
enqueueSnackbar(t("New subscription created"), { variant: "success" });
|
|
65
|
+
}
|
|
66
|
+
else if (response.status == 200) {
|
|
67
|
+
enqueueSnackbar(t("Member already subscribed"), { variant: "info" });
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
console.error("[SUBSCRIBE_AGAIN]", response);
|
|
71
|
+
enqueueSnackbar(t("Failed to subscribe"), { variant: "error" });
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}, [api, subscription]);
|
|
41
75
|
useEffect(() => {
|
|
42
76
|
if (periods != null)
|
|
43
77
|
return;
|
|
@@ -57,7 +91,7 @@ const SubscriptionsCardContent = ({ subscription, refresh, }) => {
|
|
|
57
91
|
subscription.end_date && (React.createElement(CardFieldDate, { formName: "end_date", isEditable: false, label: t("End date"), size: 1, value: DateTime.fromISO(subscription.end_date) })),
|
|
58
92
|
!subscription.is_cancelled && subscription.state === "RUNNING" && (React.createElement(CardFieldDate, { formName: "expiry_date", isEditable: false, label: t("Next payment"), size: 1, value: DateTime.fromISO(subscription.expiry_date) })))),
|
|
59
93
|
React.createElement(SubscriptionsList, { periods: periods, refresh: handleRefresh }),
|
|
60
|
-
React.createElement(CardActions,
|
|
94
|
+
React.createElement(CardActions, { alwaysVisible: true },
|
|
61
95
|
React.createElement(Stack, { direction: "row", justifyContent: "space-between", width: "100%" },
|
|
62
96
|
subscription.state === "PENDING" && (React.createElement(Stack, { direction: "row", spacing: 2 },
|
|
63
97
|
React.createElement(StartSubscriptionButton, { refresh: handleRefresh, subscriptionId: subscription.id }),
|
|
@@ -67,6 +101,8 @@ const SubscriptionsCardContent = ({ subscription, refresh, }) => {
|
|
|
67
101
|
subscription.state === "RUNNING" && subscription.is_cancelled === true && (React.createElement(Stack, { direction: "row", spacing: 2 },
|
|
68
102
|
React.createElement(ResumeSubscriptionButton, { refresh: handleRefresh, subscriptionId: subscription.id }),
|
|
69
103
|
React.createElement(EndSubscriptionButton, { refresh: handleRefresh, subscriptionId: subscription.id }))),
|
|
104
|
+
subscription.state === "ENDED" &&
|
|
105
|
+
hasPermission(user, "subscription.add_subscription") && (React.createElement(Button, { startIcon: React.createElement(CopyAllOutlinedIcon, null), variant: "outlined", onClick: subscribeAgain }, "Subscribe Again")),
|
|
70
106
|
React.createElement(CardCloseButton, null)))),
|
|
71
107
|
React.createElement(SubscriptionsDialog, { open: cancelDialogOpen, refresh: handleRefresh, setOpen: setCancelDialogOpen, subscriptionId: subscription.id })));
|
|
72
108
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubscriptionsCardContent.js","sourceRoot":"","sources":["../../../../../src/extensions/member/components/SubscriptionsCardContent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"SubscriptionsCardContent.js","sourceRoot":"","sources":["../../../../../src/extensions/member/components/SubscriptionsCardContent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEhE,OAAO,mBAAmB,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAExD,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,OAAO,WAAW,MAAM,sCAAsC,CAAC;AAC/D,OAAO,eAAe,MAAM,0CAA0C,CAAC;AACvE,OAAO,WAAW,MAAM,sCAAsC,CAAC;AAC/D,OAAO,aAAa,MAAM,wCAAwC,CAAC;AACnE,OAAO,aAAa,MAAM,wCAAwC,CAAC;AACnE,OAAO,OAAO,MAAM,kCAAkC,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAOxE,OAAO,qBAAqB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAClE,OAAO,uBAAuB,MAAM,2BAA2B,CAAC;AAChE,OAAO,mBAAmB,MAAM,uBAAuB,CAAC;AACxD,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AAQpD,MAAM,wBAAwB,GAA4C,CAAC,EACzE,YAAY,EACZ,iBAAiB,EACjB,OAAO,GACR,EAAE,EAAE;IACH,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAA8B,IAAI,CAAC,CAAC;IAC1E,MAAM,UAAU,GAAG,SAAS,EAAE,CAAC;IAC/B,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC;IAC3B,MAAM,EAAE,MAAM,EAAE,GAAG,cAAc,EAAE,CAAC;IACpC,MAAM,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;IACxB,MAAM,EAAE,eAAe,EAAE,GAAG,WAAW,EAAE,CAAC;IAE1C,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;QAC/B,OAAO,EAAE,CAAC;QACV,MAAM,YAAY,EAAE,CAAC;IACvB,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,KAAK,IAAI,EAAE;QAC9B,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,0BAA0B,CAAC,CAAC,IAAI,CAAC;YACrE,MAAM,EAAE;gBACN,eAAe,EAAE,YAAY,CAAC,EAAE;aACjC;SACF,CAAC,CAAC;QACH,MAAM,IAAI,GAA+B,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC/D,oBAAoB;QACpB,IAAI,OAAO,IAAI,IAAI;YAAE,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC5C,IACE,MAAM,UAAU,CACd,CAAC,CAAC,WAAW,CAAC,EACd,sDAAsD,YAAY,CAAC,IAAI,UAAU,EACjF;YACE,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC;YACvB,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC;SACpB,CACF,EACD,CAAC;YACD,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,iDAAiD,CAAC,CAAC;YACjF,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;YACvF,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC;gBACjC,MAAM,EAAE,EAAE,iBAAiB,EAAE;gBAC7B,IAAI,EAAE,EAAE,SAAS,EAAE,YAAY,CAAC,IAAI,EAAE;aACvC,CAAC,CAAC;YACH,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;gBAC3B,OAAO,EAAE,CAAC;gBACV,eAAe,CAAC,CAAC,CAAC,0BAA0B,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;YACzE,CAAC;iBAAM,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;gBAClC,eAAe,CAAC,CAAC,CAAC,2BAA2B,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YACvE,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;gBAC7C,eAAe,CAAC,CAAC,CAAC,qBAAqB,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC;IAExB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,IAAI,IAAI;YAAE,OAAO;QAC5B,YAAY,EAAE,CAAC;IACjB,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;IAE1C,OAAO,CACL;QACE,oBAAC,QAAQ,IAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAC,MAAM;YAClC,oBAAC,WAAW;gBACV,oBAAC,OAAO,IAAC,OAAO,EAAE,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACjD,oBAAC,aAAa,IACZ,QAAQ,EAAC,aAAa,EACtB,UAAU,EAAE,KAAK,EACjB,KAAK,EAAE,CAAC,CAAC,aAAa,CAAC,EACvB,QAAQ,EAAE,IAAI,EACd,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,GAC5C;oBAEF,oBAAC,aAAa,IACZ,QAAQ,EAAC,WAAW,EACpB,UAAU,EAAE,KAAK,EACjB,KAAK,EAAE,CAAC,CAAC,WAAW,CAAC,EACrB,QAAQ,EAAE,IAAI,EACd,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,GAC/B;oBAEF,oBAAC,aAAa,IACZ,QAAQ,EAAC,QAAQ,EACjB,UAAU,EAAE,KAAK,EACjB,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,EACjB,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,GACpF,CACM;gBAEV,oBAAC,OAAO,IAAC,OAAO,EAAE,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACjD,oBAAC,aAAa,IACZ,QAAQ,EAAC,cAAc,EACvB,UAAU,EAAE,KAAK,EACjB,KAAK,EAAE,CAAC,CAAC,cAAc,CAAC,EACxB,QAAQ,EAAE,IAAI,EACd,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,YAAsB,CAAC,GAC5D;oBAED,YAAY,CAAC,UAAU,IAAI,IAAI,IAAI,CAClC,oBAAC,aAAa,IACZ,QAAQ,EAAC,aAAa,EACtB,QAAQ,EAAC,YAAY,EACrB,UAAU,EAAE,KAAK,EACjB,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,EACnB,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,UAAoB,CAAC,GAC1D,CACH;oBAEA,YAAY,CAAC,YAAY,IAAI,CAC5B,oBAAC,aAAa,IACZ,QAAQ,EAAC,gBAAgB,EACzB,UAAU,EAAE,KAAK,EACjB,KAAK,EAAE,CAAC,CAAC,gBAAgB,CAAC,EAC1B,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,cAAwB,CAAC,GAC9D,CACH;oBAEA,YAAY,CAAC,QAAQ,IAAI,CACxB,oBAAC,aAAa,IACZ,QAAQ,EAAC,UAAU,EACnB,UAAU,EAAE,KAAK,EACjB,KAAK,EAAE,CAAC,CAAC,UAAU,CAAC,EACpB,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,QAAkB,CAAC,GACxD,CACH;oBAEA,CAAC,YAAY,CAAC,YAAY,IAAI,YAAY,CAAC,KAAK,KAAK,SAAS,IAAI,CACjE,oBAAC,aAAa,IACZ,QAAQ,EAAC,aAAa,EACtB,UAAU,EAAE,KAAK,EACjB,KAAK,EAAE,CAAC,CAAC,cAAc,CAAC,EACxB,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,WAAqB,CAAC,GAC3D,CACH,CACO,CACE;YAEd,oBAAC,iBAAiB,IAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,GAAI;YAE/D,oBAAC,WAAW,IAAC,aAAa;gBACxB,oBAAC,KAAK,IAAC,SAAS,EAAC,KAAK,EAAC,cAAc,EAAC,eAAe,EAAC,KAAK,EAAC,MAAM;oBAC/D,YAAY,CAAC,KAAK,KAAK,SAAS,IAAI,CACnC,oBAAC,KAAK,IAAC,SAAS,EAAC,KAAK,EAAC,OAAO,EAAE,CAAC;wBAC/B,oBAAC,uBAAuB,IAAC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,CAAC,EAAE,GAAI;wBACpF,oBAAC,qBAAqB,IAAC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,CAAC,EAAE,GAAI,CAC5E,CACT;oBAEA,YAAY,CAAC,KAAK,KAAK,SAAS,IAAI,YAAY,CAAC,YAAY,KAAK,KAAK,IAAI,CAC1E,oBAAC,KAAK,IAAC,SAAS,EAAC,KAAK,EAAC,OAAO,EAAE,CAAC;wBAC/B,oBAAC,MAAM,IAAC,OAAO,EAAC,UAAU,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,0BAE1D,CACH,CACT;oBAEA,YAAY,CAAC,KAAK,KAAK,SAAS,IAAI,YAAY,CAAC,YAAY,KAAK,IAAI,IAAI,CACzE,oBAAC,KAAK,IAAC,SAAS,EAAC,KAAK,EAAC,OAAO,EAAE,CAAC;wBAC/B,oBAAC,wBAAwB,IACvB,OAAO,EAAE,aAAa,EACtB,cAAc,EAAE,YAAY,CAAC,EAAE,GAC/B;wBACF,oBAAC,qBAAqB,IAAC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,CAAC,EAAE,GAAI,CAC5E,CACT;oBAEA,YAAY,CAAC,KAAK,KAAK,OAAO;wBAC7B,aAAa,CAAC,IAAI,EAAE,+BAA+B,CAAC,IAAI,CACtD,oBAAC,MAAM,IACL,SAAS,EAAE,oBAAC,mBAAmB,OAAG,EAClC,OAAO,EAAC,UAAU,EAClB,OAAO,EAAE,cAAc,sBAGhB,CACV;oBAEH,oBAAC,eAAe,OAAG,CACb,CACI,CACL;QAEX,oBAAC,mBAAmB,IAClB,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,mBAAmB,EAC5B,cAAc,EAAE,YAAY,CAAC,EAAE,GAC/B,CACD,CACJ,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,wBAAwB,CAAC"}
|
|
@@ -4,6 +4,7 @@ import CheckIcon from "@mui/icons-material/Check";
|
|
|
4
4
|
import CheckCircleIcon from "@mui/icons-material/CheckCircle";
|
|
5
5
|
import KeyboardArrowDownIcon from "@mui/icons-material/KeyboardArrowDown";
|
|
6
6
|
import KeyboardArrowUpIcon from "@mui/icons-material/KeyboardArrowUp";
|
|
7
|
+
import PriorityHighOutlinedIcon from "@mui/icons-material/PriorityHighOutlined";
|
|
7
8
|
import { Avatar, Collapse, IconButton, Stack, Table, TableBody } from "@mui/material";
|
|
8
9
|
import Chip from "@mui/material/Chip";
|
|
9
10
|
import TableRow from "@mui/material/TableRow";
|
|
@@ -49,8 +50,9 @@ export const SubscriptionsListItem = ({ period }) => {
|
|
|
49
50
|
React.createElement(TableCell, { align: "right" },
|
|
50
51
|
React.createElement(Stack, { direction: "row", justifyContent: "end" },
|
|
51
52
|
charge.reason,
|
|
52
|
-
React.createElement(Avatar, { sx: { bgcolor: "success.light", width: 18, height: 18 } },
|
|
53
|
-
React.createElement(CheckIcon, { sx: { width: 12, height: 12 } })))
|
|
53
|
+
charge.reason === "" ? (React.createElement(Avatar, { sx: { bgcolor: "success.light", width: 18, height: 18, ml: 1 } },
|
|
54
|
+
React.createElement(CheckIcon, { sx: { width: 12, height: 12 } }))) : (React.createElement(Avatar, { sx: { bgcolor: "error.light", width: 18, height: 18, ml: 1 } },
|
|
55
|
+
React.createElement(PriorityHighOutlinedIcon, { sx: { width: 12, height: 12 } }))))),
|
|
54
56
|
React.createElement(TableCell, { width: 58 })))))))))));
|
|
55
57
|
};
|
|
56
58
|
export default SubscriptionsListItem;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubscriptionsListItem.js","sourceRoot":"","sources":["../../../../../src/extensions/member/components/SubscriptionsListItem.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"SubscriptionsListItem.js","sourceRoot":"","sources":["../../../../../src/extensions/member/components/SubscriptionsListItem.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +1,63 @@
|
|
|
1
|
-
import React from "react";
|
|
1
|
+
import React, { useCallback, useState } from "react";
|
|
2
|
+
import DeleteOutlineOutlinedIcon from "@mui/icons-material/DeleteOutlineOutlined";
|
|
3
|
+
import { TableBody, TableRow } from "@mui/material";
|
|
4
|
+
import IconButton from "@mui/material/IconButton";
|
|
2
5
|
import Typography from "@mui/material/Typography";
|
|
3
|
-
import { Stack } from "@mui/system";
|
|
4
6
|
import { DateTime } from "luxon";
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
7
|
+
import { useSnackbar } from "notistack";
|
|
8
|
+
import Table from "../../../components/Table";
|
|
9
|
+
import { TableCell } from "../../../components/Table/TableCell";
|
|
10
|
+
import TableHeading from "../../../components/Table/TableHeading";
|
|
11
|
+
import TableCard from "../../../components/TableCard";
|
|
12
|
+
import TableCardHeader from "../../../components/TableCardHeader";
|
|
13
|
+
import { useApi } from "../../../contexts/ApiContext";
|
|
14
|
+
import { useDialog } from "../../../contexts/DialogContext";
|
|
15
|
+
import { useI18n } from "../../../contexts/I18nContext";
|
|
16
|
+
import { useUser } from "../../../contexts/UserContext";
|
|
17
|
+
import { hasPermission } from "../../../util/has_permission";
|
|
8
18
|
import { getHumanReadablePaymentMethod } from "../../pos/utils/getHumanReadablePaymentMethod";
|
|
9
19
|
import { paymentMethodMask } from "../utils/paymentMethodMask";
|
|
10
|
-
const PaymentMethodsCard = ({ data: { next: _next, previous: _previous, results }, }) => {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
20
|
+
const PaymentMethodsCard = ({ data: { next: _next, previous: _previous, results: initialResults }, params, refresh, }) => {
|
|
21
|
+
const results = initialResults.filter((method) => !method.is_revoked);
|
|
22
|
+
const openDialog = useDialog();
|
|
23
|
+
const api = useApi();
|
|
24
|
+
const { t } = useI18n();
|
|
25
|
+
const { user } = useUser();
|
|
26
|
+
const { enqueueSnackbar } = useSnackbar();
|
|
27
|
+
const isEditable = hasPermission(user, "pos.delete_paymenttoken") && results.length > 0;
|
|
28
|
+
const [isEditing, setIsEditing] = useState(false);
|
|
29
|
+
const { membership_number } = params;
|
|
30
|
+
const revoke = useCallback(async (token_id) => {
|
|
31
|
+
if (await openDialog(t("Revoke Payment Method"), t("Are you sure you want to revoke this member's payment method?"), {
|
|
32
|
+
ok: t("Yes, revoke"),
|
|
33
|
+
cancel: t("Cancel"),
|
|
34
|
+
})) {
|
|
35
|
+
const action = api.operations["pos.contrib:member-paymenttoken-revoke"];
|
|
36
|
+
if (!action) {
|
|
37
|
+
throw new Error('Invalid action "pos.contrib:member-paymenttoken-revoke".');
|
|
38
|
+
}
|
|
39
|
+
const response = await action.call({ params: { membership_number, token_id } });
|
|
40
|
+
if (response.ok) {
|
|
41
|
+
refresh();
|
|
42
|
+
setIsEditing(false);
|
|
43
|
+
enqueueSnackbar(t("Payment method revoked"), { variant: "success" });
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
console.error("[REVOKE_PAYMENT_METHOD]", response);
|
|
47
|
+
enqueueSnackbar(t("Failed to revoke payment method"), { variant: "error" });
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}, [api, results]);
|
|
51
|
+
return (React.createElement(TableCard, null,
|
|
52
|
+
React.createElement(TableCardHeader, { isEditable: isEditable, title: "Payment Methods", toggled: isEditing, onChange: setIsEditing }),
|
|
53
|
+
React.createElement(Table, { count: results.length },
|
|
54
|
+
React.createElement(TableBody, { sx: { ".MuiTableRow-root:last-child > .MuiTableCell-root": { borderBottom: "none" } } }, results.length > 0 ? (results.map((method) => (React.createElement(TableRow, { key: method.id },
|
|
55
|
+
React.createElement(TableHeading, null, getHumanReadablePaymentMethod(method.method)?.name ?? method.method),
|
|
56
|
+
React.createElement(TableCell, null, paymentMethodMask(method)),
|
|
57
|
+
React.createElement(TableCell, { align: "right" }, DateTime.fromISO(method.expiry_date).toFormat("MM/yy")),
|
|
58
|
+
isEditable && isEditing && (React.createElement(TableCell, { align: "right", padding: "none", sx: { width: 64 } },
|
|
59
|
+
React.createElement(IconButton, { onClick: () => revoke(method.id) },
|
|
60
|
+
React.createElement(DeleteOutlineOutlinedIcon, { fontSize: "small" })))))))) : (React.createElement(Typography, { color: "text.disabled", fontStyle: "italic", m: "0 1em 1em 1em" }, "No payment methods registered"))))));
|
|
21
61
|
};
|
|
22
62
|
export default PaymentMethodsCard;
|
|
23
63
|
//# sourceMappingURL=PaymentMethodsCard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaymentMethodsCard.js","sourceRoot":"","sources":["../../../../../src/extensions/member/contrib/PaymentMethodsCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"PaymentMethodsCard.js","sourceRoot":"","sources":["../../../../../src/extensions/member/contrib/PaymentMethodsCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAErD,OAAO,yBAAyB,MAAM,2CAA2C,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,UAAU,MAAM,0BAA0B,CAAC;AAClD,OAAO,UAAU,MAAM,0BAA0B,CAAC;AAElD,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,OAAO,KAAK,MAAM,2BAA2B,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAChE,OAAO,YAAY,MAAM,wCAAwC,CAAC;AAClE,OAAO,SAAS,MAAM,+BAA+B,CAAC;AACtD,OAAO,eAAe,MAAM,qCAAqC,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,6BAA6B,EAAE,MAAM,+CAA+C,CAAC;AAE9F,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,MAAM,kBAAkB,GAAiD,CAAC,EACxE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,EAAE,EACnE,MAAM,EACN,OAAO,GACR,EAAE,EAAE;IACH,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAEtE,MAAM,UAAU,GAAG,SAAS,EAAE,CAAC;IAC/B,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;IACxB,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC;IAC3B,MAAM,EAAE,eAAe,EAAE,GAAG,WAAW,EAAE,CAAC;IAE1C,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,EAAE,yBAAyB,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IACxF,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAElD,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAwC,CAAC;IAEvE,MAAM,MAAM,GAAG,WAAW,CACxB,KAAK,EAAE,QAAgB,EAAE,EAAE;QACzB,IACE,MAAM,UAAU,CACd,CAAC,CAAC,uBAAuB,CAAC,EAC1B,CAAC,CAAC,+DAA+D,CAAC,EAClE;YACE,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC;YACpB,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC;SACpB,CACF,EACD,CAAC;YACD,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,wCAAwC,CAAC,CAAC;YACxE,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;YAC9E,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,iBAAiB,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;YAChF,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAChB,OAAO,EAAE,CAAC;gBACV,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,eAAe,CAAC,CAAC,CAAC,wBAAwB,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;YACvE,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,QAAQ,CAAC,CAAC;gBACnD,eAAe,CAAC,CAAC,CAAC,iCAAiC,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YAC9E,CAAC;QACH,CAAC;IACH,CAAC,EACD,CAAC,GAAG,EAAE,OAAO,CAAC,CACf,CAAC;IAEF,OAAO,CACL,oBAAC,SAAS;QACR,oBAAC,eAAe,IACd,UAAU,EAAE,UAAU,EACtB,KAAK,EAAC,iBAAiB,EACvB,OAAO,EAAE,SAAS,EAClB,QAAQ,EAAE,YAAY,GACtB;QACF,oBAAC,KAAK,IAAC,KAAK,EAAE,OAAO,CAAC,MAAM;YAC1B,oBAAC,SAAS,IACR,EAAE,EAAE,EAAE,mDAAmD,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,IAEpF,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACpB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACtB,oBAAC,QAAQ,IAAC,GAAG,EAAE,MAAM,CAAC,EAAE;gBACtB,oBAAC,YAAY,QACV,6BAA6B,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,IAAI,MAAM,CAAC,MAAM,CACvD;gBACf,oBAAC,SAAS,QAAE,iBAAiB,CAAC,MAAM,CAAC,CAAa;gBAClD,oBAAC,SAAS,IAAC,KAAK,EAAC,OAAO,IACrB,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAC7C;gBACX,UAAU,IAAI,SAAS,IAAI,CAC1B,oBAAC,SAAS,IAAC,KAAK,EAAC,OAAO,EAAC,OAAO,EAAC,MAAM,EAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;oBACvD,oBAAC,UAAU,IAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC1C,oBAAC,yBAAyB,IAAC,QAAQ,EAAC,OAAO,GAAG,CACnC,CACH,CACb,CACQ,CACZ,CAAC,CACH,CAAC,CAAC,CAAC,CACF,oBAAC,UAAU,IAAC,KAAK,EAAC,eAAe,EAAC,SAAS,EAAC,QAAQ,EAAC,CAAC,EAAC,eAAe,oCAEzD,CACd,CACS,CACN,CACE,CACb,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
|
|
@@ -5,8 +5,9 @@ import CardHeader from "../../../components/Card/CardHeader";
|
|
|
5
5
|
import { useUser } from "../../../contexts/UserContext";
|
|
6
6
|
import { hasPermission } from "../../../util/has_permission";
|
|
7
7
|
import SubscriptionsCardContent from "../components/SubscriptionsCardContent";
|
|
8
|
-
const SubscriptionsCard = ({ data: { next: _next, previous: _previous, results }, refresh, }) => {
|
|
8
|
+
const SubscriptionsCard = ({ data: { next: _next, previous: _previous, results }, params, refresh, }) => {
|
|
9
9
|
const { user } = useUser();
|
|
10
|
+
const { membership_number } = params;
|
|
10
11
|
return (React.createElement(Grid, { container: true, columns: 12, spacing: 3, width: "100%" }, results.map((subscription, index) => (React.createElement(Card, { key: subscription.id, isCollapsible: true, isDisabled: subscription.state === "ENDED", isEditable: hasPermission(user, "subscription.change_subscription"), isOpen: index === 0 && subscription.state !== "ENDED", sx: { overflow: "hidden" } },
|
|
11
12
|
React.createElement(CardHeader, { title: subscription.name },
|
|
12
13
|
!subscription.is_cancelled &&
|
|
@@ -15,7 +16,7 @@ const SubscriptionsCard = ({ data: { next: _next, previous: _previous, results }
|
|
|
15
16
|
subscription.is_cancelled && subscription.state !== "ENDED" && (React.createElement(Chip, { color: "warning", label: subscription.state, size: "small" })),
|
|
16
17
|
subscription.state === "ENDED" && (React.createElement(Chip, { color: "default", label: subscription.state, size: "small" })),
|
|
17
18
|
subscription.state === "PENDING" && (React.createElement(Chip, { color: "info", label: subscription.state, size: "small" }))),
|
|
18
|
-
React.createElement(SubscriptionsCardContent, { refresh: refresh, subscription: subscription }))))));
|
|
19
|
+
React.createElement(SubscriptionsCardContent, { membership_number: membership_number, refresh: refresh, subscription: subscription }))))));
|
|
19
20
|
};
|
|
20
21
|
export default SubscriptionsCard;
|
|
21
22
|
//# sourceMappingURL=SubscriptionsCard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubscriptionsCard.js","sourceRoot":"","sources":["../../../../../src/extensions/member/contrib/SubscriptionsCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,IAAI,MAAM,0BAA0B,CAAC;AAC5C,OAAO,UAAU,MAAM,qCAAqC,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,wBAAwB,MAAM,wCAAwC,CAAC;AAG9E,MAAM,iBAAiB,GAAgD,CAAC,EACtE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,EACnD,OAAO,GACR,EAAE,EAAE;IACH,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"SubscriptionsCard.js","sourceRoot":"","sources":["../../../../../src/extensions/member/contrib/SubscriptionsCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,IAAI,MAAM,0BAA0B,CAAC;AAC5C,OAAO,UAAU,MAAM,qCAAqC,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,wBAAwB,MAAM,wCAAwC,CAAC;AAG9E,MAAM,iBAAiB,GAAgD,CAAC,EACtE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,EACnD,MAAM,EACN,OAAO,GACR,EAAE,EAAE;IACH,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC;IAC3B,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAwC,CAAC;IAEvE,OAAO,CACL,oBAAC,IAAI,IAAC,SAAS,QAAC,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,IACnD,OAAO,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC,CACpC,oBAAC,IAAI,IACH,GAAG,EAAE,YAAY,CAAC,EAAE,EACpB,aAAa,QACb,UAAU,EAAE,YAAY,CAAC,KAAK,KAAK,OAAO,EAC1C,UAAU,EAAE,aAAa,CAAC,IAAI,EAAE,kCAAkC,CAAC,EACnE,MAAM,EAAE,KAAK,KAAK,CAAC,IAAI,YAAY,CAAC,KAAK,KAAK,OAAO,EACrD,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;QAE1B,oBAAC,UAAU,IAAC,KAAK,EAAE,YAAY,CAAC,IAAI;YACjC,CAAC,YAAY,CAAC,YAAY;gBACzB,YAAY,CAAC,KAAK,KAAK,OAAO;gBAC9B,YAAY,CAAC,KAAK,KAAK,SAAS,IAAI,CAClC,oBAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE,IAAI,EAAC,OAAO,GAAG,CACjE;YAEF,YAAY,CAAC,YAAY,IAAI,YAAY,CAAC,KAAK,KAAK,OAAO,IAAI,CAC9D,oBAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE,IAAI,EAAC,OAAO,GAAG,CACjE;YAEA,YAAY,CAAC,KAAK,KAAK,OAAO,IAAI,CACjC,oBAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE,IAAI,EAAC,OAAO,GAAG,CACjE;YAEA,YAAY,CAAC,KAAK,KAAK,SAAS,IAAI,CACnC,oBAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE,IAAI,EAAC,OAAO,GAAG,CAC9D,CACU;QAEb,oBAAC,wBAAwB,IACvB,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,YAAY,GAC1B,CACG,CACR,CAAC,CACG,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
|
|
@@ -1,12 +1,6 @@
|
|
|
1
1
|
export const paymentMethodMask = (method) => {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
case "mastercard":
|
|
6
|
-
case "amex":
|
|
7
|
-
return `•••• •••• •••• ${method.summary}`;
|
|
8
|
-
default:
|
|
9
|
-
return method.summary;
|
|
10
|
-
}
|
|
2
|
+
return method.method.toLowerCase().match(/.*(visa|mastercard|american express).*/)
|
|
3
|
+
? `•••• •••• •••• ${method.summary}`
|
|
4
|
+
: method.summary;
|
|
11
5
|
};
|
|
12
6
|
//# sourceMappingURL=paymentMethodMask.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paymentMethodMask.js","sourceRoot":"","sources":["../../../../../src/extensions/member/utils/paymentMethodMask.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,MAAqB,EAAE,EAAE;IACzD,
|
|
1
|
+
{"version":3,"file":"paymentMethodMask.js","sourceRoot":"","sources":["../../../../../src/extensions/member/utils/paymentMethodMask.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,MAAqB,EAAE,EAAE;IACzD,OAAO,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,wCAAwC,CAAC;QAChF,CAAC,CAAC,kBAAkB,MAAM,CAAC,OAAO,EAAE;QACpC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AACrB,CAAC,CAAC"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import React, { useEffect, useState } from "react";
|
|
2
|
+
import ListAltOutlinedIcon from "@mui/icons-material/ListAltOutlined";
|
|
2
3
|
import Checkbox from "@mui/material/Checkbox";
|
|
4
|
+
import IconButton from "@mui/material/IconButton";
|
|
3
5
|
import Input from "@mui/material/Input";
|
|
4
6
|
import Table from "@mui/material/Table";
|
|
5
7
|
import TableBody from "@mui/material/TableBody";
|
|
@@ -8,11 +10,13 @@ import Typography from "@mui/material/Typography";
|
|
|
8
10
|
import { TableCell } from "../../../components/Table/TableCell";
|
|
9
11
|
import TableHead from "../../../components/Table/TableHead";
|
|
10
12
|
import TableHeading from "../../../components/Table/TableHeading";
|
|
13
|
+
import { useDialog } from "../../../contexts/DialogContext";
|
|
11
14
|
import { useI18n } from "../../../contexts/I18nContext";
|
|
12
15
|
export const HIDDEN_ITEM_TYPES = ["SHIPPING", "PICKUP"];
|
|
13
16
|
export const ReceiptTable = ({ lines, currency, editable, onSelect, }) => {
|
|
14
17
|
const [selected, setSelected] = useState([]);
|
|
15
18
|
const { t } = useI18n();
|
|
19
|
+
const openDialog = useDialog();
|
|
16
20
|
const refundableLines = lines.filter((line) => Boolean(line.adjustments.reduce((t, v) => t + v.quantity, line.quantity)));
|
|
17
21
|
const sortedLines = lines.sort((a, b) => a.line_number - b.line_number);
|
|
18
22
|
// Group lines by their whole number part, sorted by their decimal part
|
|
@@ -46,6 +50,14 @@ export const ReceiptTable = ({ lines, currency, editable, onSelect, }) => {
|
|
|
46
50
|
if (onSelect != null)
|
|
47
51
|
onSelect(selected);
|
|
48
52
|
}, [onSelect, selected]);
|
|
53
|
+
const showItemProperties = async (title, itemProperties) => {
|
|
54
|
+
await openDialog(title, React.createElement(Table, { size: "small", sx: { "& td": { border: 0 } } }, Object.entries(itemProperties ?? {}).map(([key, value]) => (React.createElement(TableRow, { key: key },
|
|
55
|
+
React.createElement(TableCell, { variant: "head" }, key.toUpperCase()),
|
|
56
|
+
React.createElement(TableCell, { variant: "body" }, `${value}`))))), {
|
|
57
|
+
ok: false,
|
|
58
|
+
cancel: "Close",
|
|
59
|
+
});
|
|
60
|
+
};
|
|
49
61
|
return (React.createElement(Table, null,
|
|
50
62
|
React.createElement(TableHead, null,
|
|
51
63
|
editable && (React.createElement(TableHeading, { align: "left", padding: "checkbox" },
|
|
@@ -78,7 +90,10 @@ export const ReceiptTable = ({ lines, currency, editable, onSelect, }) => {
|
|
|
78
90
|
} },
|
|
79
91
|
editable ? (React.createElement(TableCell, { align: "left", padding: "checkbox", sx: { verticalAlign: "top" } }, disabled ? null : (React.createElement(Checkbox, { checked: isSelected && currentQuantity !== 0, color: "secondary", onChange: (_, checked) => toggleLine({ ...line, quantity: currentQuantity }, checked) })))) : null,
|
|
80
92
|
React.createElement(TableCell, { align: "left" },
|
|
81
|
-
React.createElement(Typography, { fontSize: "0.875rem", paddingLeft: subLine ? 2 : undefined },
|
|
93
|
+
React.createElement(Typography, { fontSize: "0.875rem", paddingLeft: subLine ? 2 : undefined },
|
|
94
|
+
line.title,
|
|
95
|
+
line.item_properties && (React.createElement(IconButton, { "aria-label": "Show line item properties", size: "small", onClick: () => showItemProperties(line.title, line.item_properties) },
|
|
96
|
+
React.createElement(ListAltOutlinedIcon, { fontSize: "small" }))))),
|
|
82
97
|
React.createElement(TableCell, { align: "left" }, ["SHIPPING", "PICKUP"].includes(line.item_type) ? null : line.reference),
|
|
83
98
|
React.createElement(TableCell, { align: "right", typographyProps: { fontSize: "0.875rem" } }, line.quantity),
|
|
84
99
|
React.createElement(TableCell, { align: "right" },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReceiptTable.js","sourceRoot":"","sources":["../../../../../src/extensions/pos/components/ReceiptTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEnD,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,KAAK,MAAM,qBAAqB,CAAC;AACxC,OAAO,KAAK,MAAM,qBAAqB,CAAC;AACxC,OAAO,SAAS,MAAM,yBAAyB,CAAC;AAChD,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,UAAU,MAAM,0BAA0B,CAAC;AAElD,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAChE,OAAO,SAAS,MAAM,qCAAqC,CAAC;AAC5D,OAAO,YAAY,MAAM,wCAAwC,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAGxD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AASxD,MAAM,CAAC,MAAM,YAAY,GAAgC,CAAC,EACxD,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,QAAQ,GACT,EAAE,EAAE;IACH,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAS,EAAE,CAAC,CAAC;IACrD,MAAM,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"ReceiptTable.js","sourceRoot":"","sources":["../../../../../src/extensions/pos/components/ReceiptTable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -6,8 +6,8 @@ declare function DialogContextProvider(props: {
|
|
|
6
6
|
}): React.JSX.Element;
|
|
7
7
|
export declare function BcomDialog(): React.JSX.Element;
|
|
8
8
|
export declare function useDialog(): (title: string, children: React.ReactNode, options?: {
|
|
9
|
-
ok?: string;
|
|
10
|
-
cancel?: string;
|
|
9
|
+
ok?: string | false;
|
|
10
|
+
cancel?: string | false;
|
|
11
11
|
dialogProps?: BananasDialogProps;
|
|
12
12
|
}) => Promise<boolean>;
|
|
13
13
|
export default DialogContextProvider;
|
|
@@ -3,6 +3,7 @@ import { PageProps } from "../../../types";
|
|
|
3
3
|
import { Subscription } from "../types/subscription";
|
|
4
4
|
export interface SubscriptionsCardContentProps {
|
|
5
5
|
subscription: Subscription;
|
|
6
|
+
membership_number?: number;
|
|
6
7
|
refresh: PageProps["refresh"];
|
|
7
8
|
}
|
|
8
9
|
declare const SubscriptionsCardContent: React.FC<SubscriptionsCardContentProps>;
|
|
@@ -32,9 +32,11 @@ export interface PurchaseDetail {
|
|
|
32
32
|
} | null;
|
|
33
33
|
lines: Line[];
|
|
34
34
|
}
|
|
35
|
+
export type ItemProperties = Record<string, string | number | boolean>;
|
|
35
36
|
export interface Line {
|
|
36
37
|
line_number: number;
|
|
37
38
|
item_type: string;
|
|
39
|
+
item_properties?: ItemProperties;
|
|
38
40
|
title: string;
|
|
39
41
|
reference: string;
|
|
40
42
|
quantity: number;
|
package/package.json
CHANGED
|
@@ -17,16 +17,16 @@ const DialogContext = React.createContext<{
|
|
|
17
17
|
title: string,
|
|
18
18
|
children: React.ReactNode,
|
|
19
19
|
options?: {
|
|
20
|
-
ok?: string;
|
|
21
|
-
cancel?: string;
|
|
20
|
+
ok?: string | false;
|
|
21
|
+
cancel?: string | false;
|
|
22
22
|
|
|
23
23
|
dialogProps?: BananasDialogProps;
|
|
24
24
|
},
|
|
25
25
|
) => Promise<boolean>;
|
|
26
26
|
|
|
27
27
|
dialogProps: BananasDialogProps;
|
|
28
|
-
ok: string;
|
|
29
|
-
cancel: string;
|
|
28
|
+
ok: string | false;
|
|
29
|
+
cancel: string | false;
|
|
30
30
|
}>({
|
|
31
31
|
title: "",
|
|
32
32
|
children: null,
|
|
@@ -43,8 +43,8 @@ function DialogContextProvider(props: { children: React.ReactNode }) {
|
|
|
43
43
|
const [title, setTitle] = useState("");
|
|
44
44
|
const [children, setChildren] = useState<React.ReactNode>(null);
|
|
45
45
|
const [open, setOpen] = useState(false);
|
|
46
|
-
const [ok, setOk] = useState("Ok");
|
|
47
|
-
const [cancel, setCancel] = useState("Cancel");
|
|
46
|
+
const [ok, setOk] = useState<string | false>("Ok");
|
|
47
|
+
const [cancel, setCancel] = useState<string | false>("Cancel");
|
|
48
48
|
|
|
49
49
|
const [dialogProps, setDialogProps] = useState<BananasDialogProps>({});
|
|
50
50
|
|
|
@@ -56,11 +56,11 @@ function DialogContextProvider(props: { children: React.ReactNode }) {
|
|
|
56
56
|
setChildren(children);
|
|
57
57
|
setOpen(true);
|
|
58
58
|
|
|
59
|
-
if (options?.ok) {
|
|
59
|
+
if (options?.ok !== undefined) {
|
|
60
60
|
setOk(options.ok);
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
if (options?.cancel) {
|
|
63
|
+
if (options?.cancel !== undefined) {
|
|
64
64
|
setCancel(options.cancel);
|
|
65
65
|
}
|
|
66
66
|
|
|
@@ -103,8 +103,8 @@ export function BcomDialog() {
|
|
|
103
103
|
<DialogTitle>{ctx.title}</DialogTitle>
|
|
104
104
|
<DialogContent>{ctx.children}</DialogContent>
|
|
105
105
|
<DialogActions>
|
|
106
|
-
<Button onClick={() => ctx.cb(false)}>{ctx.cancel}</Button>
|
|
107
|
-
<Button onClick={() => ctx.cb(true)}>{ctx.ok}</Button>
|
|
106
|
+
{ctx.cancel && <Button onClick={() => ctx.cb(false)}>{ctx.cancel}</Button>}
|
|
107
|
+
{ctx.ok && <Button onClick={() => ctx.cb(true)}>{ctx.ok}</Button>}
|
|
108
108
|
</DialogActions>
|
|
109
109
|
</DialogContent>
|
|
110
110
|
</Dialog>
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import React, { useEffect, useState } from "react";
|
|
1
|
+
import React, { useCallback, useEffect, useState } from "react";
|
|
2
2
|
|
|
3
|
+
import CopyAllOutlinedIcon from "@mui/icons-material/CopyAllOutlined";
|
|
3
4
|
import { Button, Collapse, Stack } from "@mui/material";
|
|
4
5
|
|
|
5
6
|
import { DateTime } from "luxon";
|
|
7
|
+
import { useSnackbar } from "notistack";
|
|
6
8
|
|
|
7
9
|
import CardActions from "../../../components/Card/CardActions";
|
|
8
10
|
import CardCloseButton from "../../../components/Card/CardCloseButton";
|
|
@@ -12,8 +14,11 @@ import CardFieldText from "../../../components/Card/CardFieldText";
|
|
|
12
14
|
import CardRow from "../../../components/Card/CardRow";
|
|
13
15
|
import { useApi } from "../../../contexts/ApiContext";
|
|
14
16
|
import { useCardContext } from "../../../contexts/CardContext";
|
|
17
|
+
import { useDialog } from "../../../contexts/DialogContext";
|
|
15
18
|
import { useI18n } from "../../../contexts/I18nContext";
|
|
19
|
+
import { useUser } from "../../../contexts/UserContext";
|
|
16
20
|
import { PageProps } from "../../../types";
|
|
21
|
+
import { hasPermission } from "../../../util/has_permission";
|
|
17
22
|
import { toTitleCase } from "../../../util/to_title_case";
|
|
18
23
|
import { currencyFormat } from "../../pos/utils/amountToCurrencyString";
|
|
19
24
|
import {
|
|
@@ -30,18 +35,23 @@ import SubscriptionsList from "./SubscriptionsList";
|
|
|
30
35
|
|
|
31
36
|
export interface SubscriptionsCardContentProps {
|
|
32
37
|
subscription: Subscription;
|
|
38
|
+
membership_number?: number;
|
|
33
39
|
refresh: PageProps["refresh"];
|
|
34
40
|
}
|
|
35
41
|
|
|
36
42
|
const SubscriptionsCardContent: React.FC<SubscriptionsCardContentProps> = ({
|
|
37
43
|
subscription,
|
|
44
|
+
membership_number,
|
|
38
45
|
refresh,
|
|
39
46
|
}) => {
|
|
40
47
|
const [cancelDialogOpen, setCancelDialogOpen] = useState(false);
|
|
41
48
|
const [periods, setPeriods] = useState<SubscriptionPeriod[] | null>(null);
|
|
49
|
+
const openDialog = useDialog();
|
|
42
50
|
const api = useApi();
|
|
51
|
+
const { user } = useUser();
|
|
43
52
|
const { isOpen } = useCardContext();
|
|
44
53
|
const { t } = useI18n();
|
|
54
|
+
const { enqueueSnackbar } = useSnackbar();
|
|
45
55
|
|
|
46
56
|
const handleRefresh = async () => {
|
|
47
57
|
refresh();
|
|
@@ -59,6 +69,38 @@ const SubscriptionsCardContent: React.FC<SubscriptionsCardContentProps> = ({
|
|
|
59
69
|
if (periods == null) setPeriods(data.results);
|
|
60
70
|
};
|
|
61
71
|
|
|
72
|
+
const subscribeAgain = useCallback(async () => {
|
|
73
|
+
if (
|
|
74
|
+
await openDialog(
|
|
75
|
+
t("Subscribe"),
|
|
76
|
+
`Are you sure you want to subscribe this member to "${subscription.name}" again?`,
|
|
77
|
+
{
|
|
78
|
+
ok: t("Yes, subscribe"),
|
|
79
|
+
cancel: t("Cancel"),
|
|
80
|
+
},
|
|
81
|
+
)
|
|
82
|
+
) {
|
|
83
|
+
const action = api.operations["subscription.contrib:member-subscription-create"];
|
|
84
|
+
if (!action) {
|
|
85
|
+
throw new Error('Invalid action "subscription.contrib:member-subscription-create".');
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const response = await action.call({
|
|
89
|
+
params: { membership_number },
|
|
90
|
+
body: { reference: subscription.plan },
|
|
91
|
+
});
|
|
92
|
+
if (response.status == 201) {
|
|
93
|
+
refresh();
|
|
94
|
+
enqueueSnackbar(t("New subscription created"), { variant: "success" });
|
|
95
|
+
} else if (response.status == 200) {
|
|
96
|
+
enqueueSnackbar(t("Member already subscribed"), { variant: "info" });
|
|
97
|
+
} else {
|
|
98
|
+
console.error("[SUBSCRIBE_AGAIN]", response);
|
|
99
|
+
enqueueSnackbar(t("Failed to subscribe"), { variant: "error" });
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}, [api, subscription]);
|
|
103
|
+
|
|
62
104
|
useEffect(() => {
|
|
63
105
|
if (periods != null) return;
|
|
64
106
|
fetchPeriods();
|
|
@@ -151,7 +193,7 @@ const SubscriptionsCardContent: React.FC<SubscriptionsCardContentProps> = ({
|
|
|
151
193
|
|
|
152
194
|
<SubscriptionsList periods={periods} refresh={handleRefresh} />
|
|
153
195
|
|
|
154
|
-
<CardActions>
|
|
196
|
+
<CardActions alwaysVisible>
|
|
155
197
|
<Stack direction="row" justifyContent="space-between" width="100%">
|
|
156
198
|
{subscription.state === "PENDING" && (
|
|
157
199
|
<Stack direction="row" spacing={2}>
|
|
@@ -177,6 +219,18 @@ const SubscriptionsCardContent: React.FC<SubscriptionsCardContentProps> = ({
|
|
|
177
219
|
<EndSubscriptionButton refresh={handleRefresh} subscriptionId={subscription.id} />
|
|
178
220
|
</Stack>
|
|
179
221
|
)}
|
|
222
|
+
|
|
223
|
+
{subscription.state === "ENDED" &&
|
|
224
|
+
hasPermission(user, "subscription.add_subscription") && (
|
|
225
|
+
<Button
|
|
226
|
+
startIcon={<CopyAllOutlinedIcon />}
|
|
227
|
+
variant="outlined"
|
|
228
|
+
onClick={subscribeAgain}
|
|
229
|
+
>
|
|
230
|
+
Subscribe Again
|
|
231
|
+
</Button>
|
|
232
|
+
)}
|
|
233
|
+
|
|
180
234
|
<CardCloseButton />
|
|
181
235
|
</Stack>
|
|
182
236
|
</CardActions>
|
|
@@ -5,6 +5,7 @@ import CheckIcon from "@mui/icons-material/Check";
|
|
|
5
5
|
import CheckCircleIcon from "@mui/icons-material/CheckCircle";
|
|
6
6
|
import KeyboardArrowDownIcon from "@mui/icons-material/KeyboardArrowDown";
|
|
7
7
|
import KeyboardArrowUpIcon from "@mui/icons-material/KeyboardArrowUp";
|
|
8
|
+
import PriorityHighOutlinedIcon from "@mui/icons-material/PriorityHighOutlined";
|
|
8
9
|
import { Avatar, Collapse, IconButton, Stack, Table, TableBody } from "@mui/material";
|
|
9
10
|
import Chip from "@mui/material/Chip";
|
|
10
11
|
import TableRow from "@mui/material/TableRow";
|
|
@@ -98,12 +99,17 @@ export const SubscriptionsListItem: React.FC<SubscriptionsListItemProps> = ({ pe
|
|
|
98
99
|
<TableCell>{charge.payment_token?.method}</TableCell>
|
|
99
100
|
<TableCell align="right">
|
|
100
101
|
<Stack direction="row" justifyContent="end">
|
|
101
|
-
{/* TODO correct icon */}
|
|
102
102
|
{/* TODO Retry button, date_confirmed != null */}
|
|
103
103
|
{charge.reason}
|
|
104
|
-
|
|
105
|
-
<
|
|
106
|
-
|
|
104
|
+
{charge.reason === "" ? (
|
|
105
|
+
<Avatar sx={{ bgcolor: "success.light", width: 18, height: 18, ml: 1 }}>
|
|
106
|
+
<CheckIcon sx={{ width: 12, height: 12 }} />
|
|
107
|
+
</Avatar>
|
|
108
|
+
) : (
|
|
109
|
+
<Avatar sx={{ bgcolor: "error.light", width: 18, height: 18, ml: 1 }}>
|
|
110
|
+
<PriorityHighOutlinedIcon sx={{ width: 12, height: 12 }} />
|
|
111
|
+
</Avatar>
|
|
112
|
+
)}
|
|
107
113
|
</Stack>
|
|
108
114
|
</TableCell>
|
|
109
115
|
|
|
@@ -1,41 +1,116 @@
|
|
|
1
|
-
import React from "react";
|
|
1
|
+
import React, { useCallback, useState } from "react";
|
|
2
2
|
|
|
3
|
+
import DeleteOutlineOutlinedIcon from "@mui/icons-material/DeleteOutlineOutlined";
|
|
4
|
+
import { TableBody, TableRow } from "@mui/material";
|
|
5
|
+
import IconButton from "@mui/material/IconButton";
|
|
3
6
|
import Typography from "@mui/material/Typography";
|
|
4
|
-
import { Stack } from "@mui/system";
|
|
5
7
|
|
|
6
8
|
import { DateTime } from "luxon";
|
|
9
|
+
import { useSnackbar } from "notistack";
|
|
7
10
|
|
|
8
|
-
import
|
|
9
|
-
import {
|
|
10
|
-
import
|
|
11
|
+
import Table from "../../../components/Table";
|
|
12
|
+
import { TableCell } from "../../../components/Table/TableCell";
|
|
13
|
+
import TableHeading from "../../../components/Table/TableHeading";
|
|
14
|
+
import TableCard from "../../../components/TableCard";
|
|
15
|
+
import TableCardHeader from "../../../components/TableCardHeader";
|
|
16
|
+
import { useApi } from "../../../contexts/ApiContext";
|
|
17
|
+
import { useDialog } from "../../../contexts/DialogContext";
|
|
18
|
+
import { useI18n } from "../../../contexts/I18nContext";
|
|
19
|
+
import { useUser } from "../../../contexts/UserContext";
|
|
11
20
|
import { ContribComponent, LimitOffset } from "../../../types";
|
|
21
|
+
import { hasPermission } from "../../../util/has_permission";
|
|
12
22
|
import { getHumanReadablePaymentMethod } from "../../pos/utils/getHumanReadablePaymentMethod";
|
|
13
23
|
import { PaymentMethod } from "../types/paymentMethod";
|
|
14
24
|
import { paymentMethodMask } from "../utils/paymentMethodMask";
|
|
15
25
|
|
|
16
26
|
const PaymentMethodsCard: ContribComponent<LimitOffset<PaymentMethod>> = ({
|
|
17
|
-
data: { next: _next, previous: _previous, results },
|
|
27
|
+
data: { next: _next, previous: _previous, results: initialResults },
|
|
28
|
+
params,
|
|
29
|
+
refresh,
|
|
18
30
|
}) => {
|
|
19
|
-
|
|
31
|
+
const results = initialResults.filter((method) => !method.is_revoked);
|
|
32
|
+
|
|
33
|
+
const openDialog = useDialog();
|
|
34
|
+
const api = useApi();
|
|
35
|
+
const { t } = useI18n();
|
|
36
|
+
const { user } = useUser();
|
|
37
|
+
const { enqueueSnackbar } = useSnackbar();
|
|
38
|
+
|
|
39
|
+
const isEditable = hasPermission(user, "pos.delete_paymenttoken") && results.length > 0;
|
|
40
|
+
const [isEditing, setIsEditing] = useState(false);
|
|
41
|
+
|
|
42
|
+
const { membership_number } = params as { membership_number?: number };
|
|
43
|
+
|
|
44
|
+
const revoke = useCallback(
|
|
45
|
+
async (token_id: number) => {
|
|
46
|
+
if (
|
|
47
|
+
await openDialog(
|
|
48
|
+
t("Revoke Payment Method"),
|
|
49
|
+
t("Are you sure you want to revoke this member's payment method?"),
|
|
50
|
+
{
|
|
51
|
+
ok: t("Yes, revoke"),
|
|
52
|
+
cancel: t("Cancel"),
|
|
53
|
+
},
|
|
54
|
+
)
|
|
55
|
+
) {
|
|
56
|
+
const action = api.operations["pos.contrib:member-paymenttoken-revoke"];
|
|
57
|
+
if (!action) {
|
|
58
|
+
throw new Error('Invalid action "pos.contrib:member-paymenttoken-revoke".');
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const response = await action.call({ params: { membership_number, token_id } });
|
|
62
|
+
if (response.ok) {
|
|
63
|
+
refresh();
|
|
64
|
+
setIsEditing(false);
|
|
65
|
+
enqueueSnackbar(t("Payment method revoked"), { variant: "success" });
|
|
66
|
+
} else {
|
|
67
|
+
console.error("[REVOKE_PAYMENT_METHOD]", response);
|
|
68
|
+
enqueueSnackbar(t("Failed to revoke payment method"), { variant: "error" });
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
[api, results],
|
|
73
|
+
);
|
|
20
74
|
|
|
21
75
|
return (
|
|
22
|
-
<
|
|
23
|
-
<
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
{
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
76
|
+
<TableCard>
|
|
77
|
+
<TableCardHeader
|
|
78
|
+
isEditable={isEditable}
|
|
79
|
+
title="Payment Methods"
|
|
80
|
+
toggled={isEditing}
|
|
81
|
+
onChange={setIsEditing}
|
|
82
|
+
/>
|
|
83
|
+
<Table count={results.length}>
|
|
84
|
+
<TableBody
|
|
85
|
+
sx={{ ".MuiTableRow-root:last-child > .MuiTableCell-root": { borderBottom: "none" } }}
|
|
86
|
+
>
|
|
87
|
+
{results.length > 0 ? (
|
|
88
|
+
results.map((method) => (
|
|
89
|
+
<TableRow key={method.id}>
|
|
90
|
+
<TableHeading>
|
|
91
|
+
{getHumanReadablePaymentMethod(method.method)?.name ?? method.method}
|
|
92
|
+
</TableHeading>
|
|
93
|
+
<TableCell>{paymentMethodMask(method)}</TableCell>
|
|
94
|
+
<TableCell align="right">
|
|
95
|
+
{DateTime.fromISO(method.expiry_date).toFormat("MM/yy")}
|
|
96
|
+
</TableCell>
|
|
97
|
+
{isEditable && isEditing && (
|
|
98
|
+
<TableCell align="right" padding="none" sx={{ width: 64 }}>
|
|
99
|
+
<IconButton onClick={() => revoke(method.id)}>
|
|
100
|
+
<DeleteOutlineOutlinedIcon fontSize="small" />
|
|
101
|
+
</IconButton>
|
|
102
|
+
</TableCell>
|
|
103
|
+
)}
|
|
104
|
+
</TableRow>
|
|
105
|
+
))
|
|
106
|
+
) : (
|
|
107
|
+
<Typography color="text.disabled" fontStyle="italic" m="0 1em 1em 1em">
|
|
108
|
+
No payment methods registered
|
|
109
|
+
</Typography>
|
|
110
|
+
)}
|
|
111
|
+
</TableBody>
|
|
112
|
+
</Table>
|
|
113
|
+
</TableCard>
|
|
39
114
|
);
|
|
40
115
|
};
|
|
41
116
|
|
|
@@ -12,9 +12,11 @@ import { Subscription } from "../types/subscription";
|
|
|
12
12
|
|
|
13
13
|
const SubscriptionsCard: ContribComponent<LimitOffset<Subscription>> = ({
|
|
14
14
|
data: { next: _next, previous: _previous, results },
|
|
15
|
+
params,
|
|
15
16
|
refresh,
|
|
16
17
|
}) => {
|
|
17
18
|
const { user } = useUser();
|
|
19
|
+
const { membership_number } = params as { membership_number?: number };
|
|
18
20
|
|
|
19
21
|
return (
|
|
20
22
|
<Grid container columns={12} spacing={3} width={"100%"}>
|
|
@@ -47,7 +49,11 @@ const SubscriptionsCard: ContribComponent<LimitOffset<Subscription>> = ({
|
|
|
47
49
|
)}
|
|
48
50
|
</CardHeader>
|
|
49
51
|
|
|
50
|
-
<SubscriptionsCardContent
|
|
52
|
+
<SubscriptionsCardContent
|
|
53
|
+
membership_number={membership_number}
|
|
54
|
+
refresh={refresh}
|
|
55
|
+
subscription={subscription}
|
|
56
|
+
/>
|
|
51
57
|
</Card>
|
|
52
58
|
))}
|
|
53
59
|
</Grid>
|
|
@@ -1,13 +1,7 @@
|
|
|
1
1
|
import { PaymentMethod } from "../types/paymentMethod";
|
|
2
2
|
|
|
3
3
|
export const paymentMethodMask = (method: PaymentMethod) => {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
case "mastercard":
|
|
8
|
-
case "amex":
|
|
9
|
-
return `•••• •••• •••• ${method.summary}`;
|
|
10
|
-
default:
|
|
11
|
-
return method.summary;
|
|
12
|
-
}
|
|
4
|
+
return method.method.toLowerCase().match(/.*(visa|mastercard|american express).*/)
|
|
5
|
+
? `•••• •••• •••• ${method.summary}`
|
|
6
|
+
: method.summary;
|
|
13
7
|
};
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import React, { useEffect, useState } from "react";
|
|
2
2
|
|
|
3
|
+
import ListAltOutlinedIcon from "@mui/icons-material/ListAltOutlined";
|
|
3
4
|
import Checkbox from "@mui/material/Checkbox";
|
|
5
|
+
import IconButton from "@mui/material/IconButton";
|
|
4
6
|
import Input from "@mui/material/Input";
|
|
5
7
|
import Table from "@mui/material/Table";
|
|
6
8
|
import TableBody from "@mui/material/TableBody";
|
|
@@ -10,8 +12,9 @@ import Typography from "@mui/material/Typography";
|
|
|
10
12
|
import { TableCell } from "../../../components/Table/TableCell";
|
|
11
13
|
import TableHead from "../../../components/Table/TableHead";
|
|
12
14
|
import TableHeading from "../../../components/Table/TableHeading";
|
|
15
|
+
import { useDialog } from "../../../contexts/DialogContext";
|
|
13
16
|
import { useI18n } from "../../../contexts/I18nContext";
|
|
14
|
-
import { Adjustment, Line } from "../types/purchase";
|
|
17
|
+
import { Adjustment, ItemProperties, Line } from "../types/purchase";
|
|
15
18
|
|
|
16
19
|
export const HIDDEN_ITEM_TYPES = ["SHIPPING", "PICKUP"];
|
|
17
20
|
|
|
@@ -30,6 +33,7 @@ export const ReceiptTable: React.FC<ReceiptTableProps> = ({
|
|
|
30
33
|
}) => {
|
|
31
34
|
const [selected, setSelected] = useState<Line[]>([]);
|
|
32
35
|
const { t } = useI18n();
|
|
36
|
+
const openDialog = useDialog();
|
|
33
37
|
|
|
34
38
|
const refundableLines = lines.filter((line) =>
|
|
35
39
|
Boolean(line.adjustments.reduce((t, v) => t + v.quantity, line.quantity)),
|
|
@@ -71,6 +75,24 @@ export const ReceiptTable: React.FC<ReceiptTableProps> = ({
|
|
|
71
75
|
if (onSelect != null) onSelect(selected);
|
|
72
76
|
}, [onSelect, selected]);
|
|
73
77
|
|
|
78
|
+
const showItemProperties = async (title: string, itemProperties: ItemProperties) => {
|
|
79
|
+
await openDialog(
|
|
80
|
+
title,
|
|
81
|
+
<Table size="small" sx={{ "& td": { border: 0 } }}>
|
|
82
|
+
{Object.entries(itemProperties ?? {}).map(([key, value]) => (
|
|
83
|
+
<TableRow key={key}>
|
|
84
|
+
<TableCell variant="head">{key.toUpperCase()}</TableCell>
|
|
85
|
+
<TableCell variant="body">{`${value}`}</TableCell>
|
|
86
|
+
</TableRow>
|
|
87
|
+
))}
|
|
88
|
+
</Table>,
|
|
89
|
+
{
|
|
90
|
+
ok: false,
|
|
91
|
+
cancel: "Close",
|
|
92
|
+
},
|
|
93
|
+
);
|
|
94
|
+
};
|
|
95
|
+
|
|
74
96
|
return (
|
|
75
97
|
<Table>
|
|
76
98
|
<TableHead>
|
|
@@ -148,6 +170,17 @@ export const ReceiptTable: React.FC<ReceiptTableProps> = ({
|
|
|
148
170
|
<TableCell align="left">
|
|
149
171
|
<Typography fontSize="0.875rem" paddingLeft={subLine ? 2 : undefined}>
|
|
150
172
|
{line.title}
|
|
173
|
+
{line.item_properties && (
|
|
174
|
+
<IconButton
|
|
175
|
+
aria-label="Show line item properties"
|
|
176
|
+
size="small"
|
|
177
|
+
onClick={() =>
|
|
178
|
+
showItemProperties(line.title, line.item_properties as ItemProperties)
|
|
179
|
+
}
|
|
180
|
+
>
|
|
181
|
+
<ListAltOutlinedIcon fontSize="small" />
|
|
182
|
+
</IconButton>
|
|
183
|
+
)}
|
|
151
184
|
</Typography>
|
|
152
185
|
</TableCell>
|
|
153
186
|
<TableCell align="left">
|
|
@@ -34,9 +34,12 @@ export interface PurchaseDetail {
|
|
|
34
34
|
lines: Line[];
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
+
export type ItemProperties = Record<string, string | number | boolean>;
|
|
38
|
+
|
|
37
39
|
export interface Line {
|
|
38
40
|
line_number: number;
|
|
39
41
|
item_type: string;
|
|
42
|
+
item_properties?: ItemProperties;
|
|
40
43
|
title: string;
|
|
41
44
|
reference: string;
|
|
42
45
|
quantity: number;
|