@pisell/private-materials 6.12.286 → 6.12.288
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/build/lowcode/assets-daily.json +11 -11
- package/build/lowcode/assets-dev.json +2 -2
- package/build/lowcode/assets-prod.json +11 -11
- package/build/lowcode/meta.js +1 -1
- package/build/lowcode/render/default/view.js +14 -14
- package/build/lowcode/view.js +14 -14
- package/es/components/HDLKiosk/ui/entry/Screen/assets/PHOSPHOR-LICENSE +21 -21
- package/es/plus/invoice/ReceiptRenderer.js +86 -42
- package/es/plus/invoice/VirtualCurrencyLines.js +21 -8
- package/es/plus/invoice/VirtualCurrencyReceiptRenderer.js +21 -10
- package/es/plus/invoice/invoiceVisibility.js +94 -0
- package/es/plus/invoice/receipt.js +4 -3
- package/es/plus/piPaymentUI/eftpos/logger.js +10 -7
- package/es/plus/piPaymentUI/sendWarningLog.js +33 -22
- package/es/plus/saasDevice/devicePasscodes/model.js +4 -4
- package/es/plus/saleDetail/actions/index.js +11 -4
- package/es/plus/saleDetail/serve.js +7 -8
- package/es/plus/saleDetail/tmpl/B/components/Invoice/VirtualCurrencyInvoice.js +1 -1
- package/es/plus/saleDetail/tmpl/B/components/Invoice/index.js +29 -5
- package/es/plus/saleDetail/tmpl/B/components/Invoice/useInvoiceReceiptPreview.js +85 -43
- package/es/plus/salesSdk/context/SalesSdkCartContext.js +5 -1
- package/es/plus/salesSdk/context/SalesSdkProvider.js +3 -0
- package/es/plus/salesSdk/utils/receiptPrintWarning.js +16 -0
- package/es/plus/walletPassGallery/components/timelineSection/index.js +4 -4
- package/lib/components/HDLKiosk/ui/entry/Screen/assets/PHOSPHOR-LICENSE +21 -21
- package/lib/plus/invoice/ReceiptRenderer.js +86 -42
- package/lib/plus/invoice/VirtualCurrencyLines.js +21 -8
- package/lib/plus/invoice/VirtualCurrencyReceiptRenderer.js +21 -10
- package/lib/plus/invoice/invoiceVisibility.js +99 -0
- package/lib/plus/invoice/receipt.js +4 -3
- package/lib/plus/piPaymentUI/eftpos/logger.js +10 -7
- package/lib/plus/piPaymentUI/sendWarningLog.js +32 -20
- package/lib/plus/saleDetail/actions/index.js +11 -4
- package/lib/plus/saleDetail/serve.js +7 -8
- package/lib/plus/saleDetail/tmpl/B/components/Invoice/VirtualCurrencyInvoice.js +1 -1
- package/lib/plus/saleDetail/tmpl/B/components/Invoice/index.js +29 -5
- package/lib/plus/saleDetail/tmpl/B/components/Invoice/useInvoiceReceiptPreview.js +85 -43
- package/lib/plus/salesSdk/context/SalesSdkCartContext.js +5 -1
- package/lib/plus/salesSdk/context/SalesSdkProvider.js +3 -0
- package/lib/plus/salesSdk/utils/receiptPrintWarning.js +16 -0
- package/package.json +3 -3
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
require("../../_virtual/_rolldown/runtime.js");
|
|
1
2
|
const require_asyncToGenerator = require("../../_virtual/_@oxc-project_runtime@0.122.0/helpers/asyncToGenerator.js");
|
|
3
|
+
let _pisell_utils = require("@pisell/utils");
|
|
2
4
|
//#region src/plus/piPaymentUI/sendWarningLog.ts
|
|
3
5
|
/** 支付专用机器人完整 webhook URL(包含独立 key);留空时不上报。 */
|
|
4
6
|
const piPaymentWebhook = {
|
|
@@ -8,26 +10,36 @@ const piPaymentWebhook = {
|
|
|
8
10
|
/** PiPaymentUI 自己的飞书上报入口,不使用公共告警机器人。 */
|
|
9
11
|
const sendWarningLog = function() {
|
|
10
12
|
var _ref = require_asyncToGenerator._asyncToGenerator(function* ({ title, content }) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
13
|
+
let env;
|
|
14
|
+
try {
|
|
15
|
+
var _appHelper, _getPisellUtilsConfig;
|
|
16
|
+
const hostEnv = typeof window === "undefined" ? void 0 : (_appHelper = window.__appHelper) === null || _appHelper === void 0 || (_appHelper = _appHelper.constants) === null || _appHelper === void 0 ? void 0 : _appHelper.env;
|
|
17
|
+
env = hostEnv !== null && hostEnv !== void 0 ? hostEnv : (_getPisellUtilsConfig = (0, _pisell_utils.getPisellUtilsConfig)()) === null || _getPisellUtilsConfig === void 0 ? void 0 : _getPisellUtilsConfig.env;
|
|
18
|
+
const apiUrl = env === "dev" || env === "pre" || env === "release" ? piPaymentWebhook.test : piPaymentWebhook.prod;
|
|
19
|
+
return yield (yield fetch(apiUrl, {
|
|
20
|
+
method: "POST",
|
|
21
|
+
headers: { "Content-Type": "application/json" },
|
|
22
|
+
body: JSON.stringify({
|
|
23
|
+
msg_type: "post",
|
|
24
|
+
content: { post: { zh_cn: {
|
|
25
|
+
title,
|
|
26
|
+
content: content.map(({ key, value }) => [{
|
|
27
|
+
tag: "text",
|
|
28
|
+
text: `${key}: `
|
|
29
|
+
}, {
|
|
30
|
+
tag: "text",
|
|
31
|
+
text: `${value}`
|
|
32
|
+
}])
|
|
33
|
+
} } }
|
|
34
|
+
})
|
|
35
|
+
})).json();
|
|
36
|
+
} catch (error) {
|
|
37
|
+
console.warn("[PiPayment] 飞书上报失败", {
|
|
38
|
+
env,
|
|
39
|
+
error
|
|
40
|
+
});
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
31
43
|
});
|
|
32
44
|
return function sendWarningLog(_x) {
|
|
33
45
|
return _ref.apply(this, arguments);
|
|
@@ -13,6 +13,7 @@ const require_locales = require("../../../components/checkout/locales.js");
|
|
|
13
13
|
const require_PaymentResultToastV2Provider = require("../../../components/checkout/components/PaymentResultToastV2/PaymentResultToastV2Provider.js");
|
|
14
14
|
const require_index$4 = require("../../../components/booking/components/clearCartModal/index.js");
|
|
15
15
|
const require_index$5 = require("../../../components/booking/components/customiseItemModal/index.js");
|
|
16
|
+
const require_receiptPrintWarning = require("../../salesSdk/utils/receiptPrintWarning.js");
|
|
16
17
|
const require_fulfillmentTimingBooking = require("../../salesSdk/utils/fulfillmentTimingBooking.js");
|
|
17
18
|
const require_SalesSdkGlobalScanActivityContext = require("../../salesSdk/context/SalesSdkGlobalScanActivityContext.js");
|
|
18
19
|
const require_utils = require("../components/Client/utils.js");
|
|
@@ -750,12 +751,14 @@ function SaleOrderActionProvider({ actionConfigs, actionOverrides, children, con
|
|
|
750
751
|
});
|
|
751
752
|
const handleCashPaymentSuccess = (0, ahooks.useMemoizedFn)(function() {
|
|
752
753
|
var _ref9 = require_asyncToGenerator._asyncToGenerator(function* (result) {
|
|
753
|
-
var _result$syncResult$su, _result$syncResult, _result$payment;
|
|
754
|
+
var _result$syncResult$su, _result$syncResult, _result$syncResult$su2, _result$syncResult2, _result$payment;
|
|
754
755
|
setShowCashPayment(false);
|
|
755
756
|
setSelectedCashPaymentMethodId(void 0);
|
|
757
|
+
const receiptWarning = require_receiptPrintWarning.getReceiptPrintWarning((_result$syncResult$su = result === null || result === void 0 || (_result$syncResult = result.syncResult) === null || _result$syncResult === void 0 ? void 0 : _result$syncResult.submitResult) !== null && _result$syncResult$su !== void 0 ? _result$syncResult$su : result, _pisell_utils.locales.getLocale());
|
|
758
|
+
if (receiptWarning) Toast.info(receiptWarning);
|
|
756
759
|
const externalRequestId = cashExternalRequestIdRef.current;
|
|
757
760
|
cashExternalRequestIdRef.current = void 0;
|
|
758
|
-
const orderId = require_utils$3.resolveSaleDetailOrderIdFromSalesResult(sales, (_result$syncResult$
|
|
761
|
+
const orderId = require_utils$3.resolveSaleDetailOrderIdFromSalesResult(sales, (_result$syncResult$su2 = result === null || result === void 0 || (_result$syncResult2 = result.syncResult) === null || _result$syncResult2 === void 0 ? void 0 : _result$syncResult2.submitResult) !== null && _result$syncResult$su2 !== void 0 ? _result$syncResult$su2 : result);
|
|
759
762
|
const changeGivenAmount = Number((result === null || result === void 0 || (_result$payment = result.payment) === null || _result$payment === void 0 || (_result$payment = _result$payment.metadata) === null || _result$payment === void 0 ? void 0 : _result$payment.change_given_amount) || 0);
|
|
760
763
|
const outcome = require_state.resolveSaleOrderQuickPaymentOutcome(result);
|
|
761
764
|
settleExternalPayment(externalRequestId, {
|
|
@@ -861,7 +864,7 @@ function SaleOrderActionProvider({ actionConfigs, actionOverrides, children, con
|
|
|
861
864
|
};
|
|
862
865
|
}();
|
|
863
866
|
try {
|
|
864
|
-
var _engineContext$appHel17, _engineContext$appHel18, _paymentRuntimeRef$cu, _result$syncResult$
|
|
867
|
+
var _engineContext$appHel17, _engineContext$appHel18, _paymentRuntimeRef$cu, _result$syncResult$su3, _result$syncResult3, _result$syncResult$su4, _result$syncResult4;
|
|
865
868
|
const method = methodOverride || paymentMethods.find((item) => String(item.code || "").toUpperCase() === code);
|
|
866
869
|
if (!method) throw new Error(`Payment method ${code} is unavailable.`);
|
|
867
870
|
baseSales = sales.bookingTicket;
|
|
@@ -933,8 +936,10 @@ function SaleOrderActionProvider({ actionConfigs, actionOverrides, children, con
|
|
|
933
936
|
serviceCharge: runtimeResult.serviceCharge,
|
|
934
937
|
metadata: runtimeResult.metadata
|
|
935
938
|
});
|
|
936
|
-
const orderId = require_utils$3.resolveSaleDetailOrderIdFromSalesResult(sales, (_result$syncResult$
|
|
939
|
+
const orderId = require_utils$3.resolveSaleDetailOrderIdFromSalesResult(sales, (_result$syncResult$su3 = result === null || result === void 0 || (_result$syncResult3 = result.syncResult) === null || _result$syncResult3 === void 0 ? void 0 : _result$syncResult3.submitResult) !== null && _result$syncResult$su3 !== void 0 ? _result$syncResult$su3 : result);
|
|
937
940
|
const outcome = require_state.resolveSaleOrderQuickPaymentOutcome(result);
|
|
941
|
+
const receiptWarning = require_receiptPrintWarning.getReceiptPrintWarning((_result$syncResult$su4 = result === null || result === void 0 || (_result$syncResult4 = result.syncResult) === null || _result$syncResult4 === void 0 ? void 0 : _result$syncResult4.submitResult) !== null && _result$syncResult$su4 !== void 0 ? _result$syncResult$su4 : result, _pisell_utils.locales.getLocale());
|
|
942
|
+
if (receiptWarning) Toast.info(receiptWarning);
|
|
938
943
|
settleExternalPayment(externalRequestId, {
|
|
939
944
|
status: "success",
|
|
940
945
|
result
|
|
@@ -1016,6 +1021,8 @@ function SaleOrderActionProvider({ actionConfigs, actionOverrides, children, con
|
|
|
1016
1021
|
};
|
|
1017
1022
|
}
|
|
1018
1023
|
const submitResult = result === null || result === void 0 ? void 0 : result.submitResult;
|
|
1024
|
+
const receiptWarning = require_receiptPrintWarning.getReceiptPrintWarning(submitResult, _pisell_utils.locales.getLocale());
|
|
1025
|
+
if (receiptWarning) Toast.info(receiptWarning);
|
|
1019
1026
|
if (!require_utils$3.isSalesOrderSubmitSuccess(submitResult)) throw new Error(String((submitResult === null || submitResult === void 0 ? void 0 : submitResult.message) || (submitResult === null || submitResult === void 0 ? void 0 : submitResult.msg) || "Order confirmation failed"));
|
|
1020
1027
|
const orderId = require_utils$3.resolveSaleDetailOrderIdFromSalesResult(sales, submitResult);
|
|
1021
1028
|
require_presentBaseSalesPaymentResult.presentBaseSalesPaymentResult({
|
|
@@ -21,18 +21,14 @@ const getOrderSmallTicketData = function() {
|
|
|
21
21
|
return _ref3.apply(this, arguments);
|
|
22
22
|
};
|
|
23
23
|
}();
|
|
24
|
-
/**
|
|
25
|
-
* 通过 PisellOS 按本地订单即时重建 Web Invoice 所需的小票快照。
|
|
26
|
-
* 该接口只返回数据,不会派发打印任务。
|
|
27
|
-
*/
|
|
28
24
|
const getLocalOrderReceiptSnapshot = function() {
|
|
29
|
-
var _ref5 = require_asyncToGenerator._asyncToGenerator(function* (orderId, locales = []) {
|
|
25
|
+
var _ref5 = require_asyncToGenerator._asyncToGenerator(function* (orderId, locales = [], templateSettings) {
|
|
30
26
|
var _ref4, _response$data$data2, _response$data2;
|
|
31
|
-
const response = yield require_index.request.getRequest().post("/shop/local/order-receipt-snapshot", {
|
|
27
|
+
const response = yield require_index.request.getRequest().post("/shop/local/order-receipt-snapshot", require_objectSpread2._objectSpread2({
|
|
32
28
|
order_id: orderId,
|
|
33
29
|
lookup_order_from_db: 1,
|
|
34
30
|
locales
|
|
35
|
-
}, {
|
|
31
|
+
}, templateSettings ? { template_settings: { modules: templateSettings.module } } : {}), {
|
|
36
32
|
fullResult: true,
|
|
37
33
|
isShopApi: true,
|
|
38
34
|
osServer: true,
|
|
@@ -40,7 +36,10 @@ const getLocalOrderReceiptSnapshot = function() {
|
|
|
40
36
|
});
|
|
41
37
|
const payload = (_ref4 = (_response$data$data2 = response === null || response === void 0 || (_response$data2 = response.data) === null || _response$data2 === void 0 ? void 0 : _response$data2.data) !== null && _response$data$data2 !== void 0 ? _response$data$data2 : response === null || response === void 0 ? void 0 : response.data) !== null && _ref4 !== void 0 ? _ref4 : response;
|
|
42
38
|
const smallTicketData = payload === null || payload === void 0 ? void 0 : payload.small_ticket_data;
|
|
43
|
-
return smallTicketData && typeof smallTicketData === "object"
|
|
39
|
+
return smallTicketData && typeof smallTicketData === "object" && !Array.isArray(smallTicketData) ? require_objectSpread2._objectSpread2({
|
|
40
|
+
small_ticket_data: smallTicketData,
|
|
41
|
+
template_visibility_applied: payload.template_visibility_applied === true
|
|
42
|
+
}, payload.source && typeof payload.source === "object" && !Array.isArray(payload.source) ? { source: payload.source } : {}) : null;
|
|
44
43
|
});
|
|
45
44
|
return function getLocalOrderReceiptSnapshot(_x2) {
|
|
46
45
|
return _ref5.apply(this, arguments);
|
|
@@ -4,9 +4,9 @@ const require_index$1 = require("../../../../../pisellSaleSummaryDetail/index.js
|
|
|
4
4
|
const require_index$2 = require("../../../../components/Contact/index.js");
|
|
5
5
|
const require_index$3 = require("../../../../components/DetailActions/index.js");
|
|
6
6
|
const require_useSaleSummaryDetailSnapshot = require("../../../../components/Summary/useSaleSummaryDetailSnapshot.js");
|
|
7
|
+
const require_utils = require("./utils.js");
|
|
7
8
|
const require_VirtualCurrencyLines = require("../../../../../invoice/VirtualCurrencyLines.js");
|
|
8
9
|
const require_index$4 = require("../SummaryInfoBlocks/index.js");
|
|
9
|
-
const require_utils = require("./utils.js");
|
|
10
10
|
let react = require("react");
|
|
11
11
|
react = require_runtime.__toESM(react);
|
|
12
12
|
let _pisell_utils = require("@pisell/utils");
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
const require_runtime = require("../../../../../../_virtual/_rolldown/runtime.js");
|
|
2
|
-
const
|
|
2
|
+
const require_objectSpread2 = require("../../../../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/objectSpread2.js");
|
|
3
3
|
const require_receipt = require("../../../../../invoice/receipt.js");
|
|
4
4
|
const require_ReceiptRenderer = require("../../../../../invoice/ReceiptRenderer.js");
|
|
5
5
|
const require_InvoiceReceiptSkeleton = require("../../../../../invoice/InvoiceReceiptSkeleton.js");
|
|
6
|
+
const require_VirtualCurrencyReceiptRenderer = require("../../../../../invoice/VirtualCurrencyReceiptRenderer.js");
|
|
6
7
|
const require_useInvoiceReceiptPreview = require("./useInvoiceReceiptPreview.js");
|
|
7
8
|
const require_VirtualCurrencyInvoice = require("./VirtualCurrencyInvoice.js");
|
|
8
9
|
let react = require("react");
|
|
@@ -11,24 +12,47 @@ let _pisell_utils = require("@pisell/utils");
|
|
|
11
12
|
require("./index.less");
|
|
12
13
|
//#region src/plus/saleDetail/tmpl/B/components/Invoice/index.tsx
|
|
13
14
|
const PREFIX = "pisell-sale-detail-invoice";
|
|
14
|
-
function
|
|
15
|
+
function applyVirtualHostVisibility(receipt, hidden) {
|
|
16
|
+
return require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, receipt), {}, {
|
|
17
|
+
orderNote: hidden.includes("orderNote") ? void 0 : receipt.orderNote,
|
|
18
|
+
paymentNotice: hidden.includes("amountDetails") ? void 0 : receipt.paymentNotice,
|
|
19
|
+
secondary: receipt.secondary ? applyVirtualHostVisibility(receipt.secondary, hidden) : void 0
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
function InvoiceReceiptPreview(props) {
|
|
15
23
|
var _locales$getLocale;
|
|
24
|
+
const { context, moduleConfig } = props;
|
|
16
25
|
const receiptRef = (0, react.useRef)(null);
|
|
17
|
-
const { error, loading, receipt, retry } = require_useInvoiceReceiptPreview.useInvoiceReceiptPreview(context);
|
|
26
|
+
const { error, loading, receipt, source, retry, useLegacyVirtualCurrencyInvoice, useVirtualCurrencyReceipt } = require_useInvoiceReceiptPreview.useInvoiceReceiptPreview(context);
|
|
18
27
|
const appLocale = ((_locales$getLocale = _pisell_utils.locales.getLocale) === null || _locales$getLocale === void 0 ? void 0 : _locales$getLocale.call(_pisell_utils.locales)) || "en";
|
|
28
|
+
const hidden = (moduleConfig === null || moduleConfig === void 0 ? void 0 : moduleConfig.hidden) || [];
|
|
29
|
+
const moduleOverrides = {};
|
|
30
|
+
if (hidden.includes("customer")) moduleOverrides.customer = null;
|
|
31
|
+
if (hidden.includes("cartItems")) moduleOverrides.line_groups = null;
|
|
32
|
+
if (hidden.includes("amountDetails")) {
|
|
33
|
+
moduleOverrides.settlement = null;
|
|
34
|
+
moduleOverrides.payment = null;
|
|
35
|
+
moduleOverrides.total_savings = null;
|
|
36
|
+
}
|
|
37
|
+
if (!loading && useLegacyVirtualCurrencyInvoice) return /* @__PURE__ */ react.default.createElement(require_VirtualCurrencyInvoice.VirtualCurrencyInvoice, props);
|
|
19
38
|
return /* @__PURE__ */ react.default.createElement("main", { className: "pisell-sale-detail-main pisell-sale-detail-invoice-main" }, /* @__PURE__ */ react.default.createElement("div", { className: "pisell-sale-detail-cart-scroll-panel" }, /* @__PURE__ */ react.default.createElement("div", { className: `${PREFIX}__receipt-stage` }, loading ? /* @__PURE__ */ react.default.createElement(require_InvoiceReceiptSkeleton.InvoiceReceiptSkeleton, null) : null, !loading && error ? /* @__PURE__ */ react.default.createElement("div", {
|
|
20
39
|
className: `${PREFIX}__preview-state`,
|
|
21
40
|
role: "alert"
|
|
22
41
|
}, /* @__PURE__ */ react.default.createElement("span", null, require_receipt.getReceiptLabel(appLocale, "Receipt preview is unavailable.")), /* @__PURE__ */ react.default.createElement("button", {
|
|
23
42
|
onClick: retry,
|
|
24
43
|
type: "button"
|
|
25
|
-
}, require_receipt.getReceiptLabel(appLocale, "Retry"))) : null, !loading && receipt ? /* @__PURE__ */ react.default.createElement(
|
|
44
|
+
}, require_receipt.getReceiptLabel(appLocale, "Retry"))) : null, !loading && receipt ? useVirtualCurrencyReceipt && source ? /* @__PURE__ */ react.default.createElement(require_VirtualCurrencyReceiptRenderer.VirtualCurrencyReceiptRenderer, {
|
|
45
|
+
receipt: applyVirtualHostVisibility(receipt, hidden),
|
|
46
|
+
source,
|
|
47
|
+
moduleOverrides,
|
|
48
|
+
ref: receiptRef
|
|
49
|
+
}) : /* @__PURE__ */ react.default.createElement(require_ReceiptRenderer.InvoiceReceiptRenderer, {
|
|
26
50
|
receipt,
|
|
27
51
|
ref: receiptRef
|
|
28
52
|
}) : null)));
|
|
29
53
|
}
|
|
30
54
|
function Invoice(props) {
|
|
31
|
-
return
|
|
55
|
+
return /* @__PURE__ */ react.default.createElement(InvoiceReceiptPreview, props);
|
|
32
56
|
}
|
|
33
57
|
//#endregion
|
|
34
58
|
exports.Invoice = Invoice;
|
|
@@ -3,10 +3,20 @@ const require_useEngineContext = require("../../../../../../hooks/useEngineConte
|
|
|
3
3
|
const require_objectSpread2 = require("../../../../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/objectSpread2.js");
|
|
4
4
|
const require_asyncToGenerator = require("../../../../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/asyncToGenerator.js");
|
|
5
5
|
const require_useLocale = require("../../../../../../hooks/useLocale.js");
|
|
6
|
+
const require_index = require("../../../../../multiCurrencySettlement/index.js");
|
|
6
7
|
const require_serve = require("../../../../serve.js");
|
|
8
|
+
const require_invoiceVisibility = require("../../../../../invoice/invoiceVisibility.js");
|
|
7
9
|
const require_receipt = require("../../../../../invoice/receipt.js");
|
|
8
10
|
let react = require("react");
|
|
9
11
|
//#region src/plus/saleDetail/tmpl/B/components/Invoice/useInvoiceReceiptPreview.ts
|
|
12
|
+
const LOADING_STATE = {
|
|
13
|
+
error: null,
|
|
14
|
+
loading: true,
|
|
15
|
+
receipt: null,
|
|
16
|
+
source: null,
|
|
17
|
+
useLegacyVirtualCurrencyInvoice: false,
|
|
18
|
+
useVirtualCurrencyReceipt: false
|
|
19
|
+
};
|
|
10
20
|
function getOrderId(context) {
|
|
11
21
|
var _ref, _context$sales$salesD, _context$sales$salesD2, _context$sales$tempOr;
|
|
12
22
|
return (_ref = (_context$sales$salesD = (_context$sales$salesD2 = context.sales.salesDetail) === null || _context$sales$salesD2 === void 0 || (_context$sales$salesD2 = _context$sales$salesD2.header) === null || _context$sales$salesD2 === void 0 ? void 0 : _context$sales$salesD2.order_id) !== null && _context$sales$salesD !== void 0 ? _context$sales$salesD : (_context$sales$tempOr = context.sales.tempOrder) === null || _context$sales$tempOr === void 0 ? void 0 : _context$sales$tempOr.order_id) !== null && _ref !== void 0 ? _ref : null;
|
|
@@ -36,86 +46,118 @@ function useInvoiceReceiptPreview(context) {
|
|
|
36
46
|
const [revision, setRevision] = (0, react.useState)(0);
|
|
37
47
|
const orderId = getOrderId(context);
|
|
38
48
|
const previewCreatedAt = (0, react.useMemo)(() => /* @__PURE__ */ new Date(), [orderId, revision]);
|
|
39
|
-
const [state, setState] = (0, react.useState)({
|
|
40
|
-
error: null,
|
|
41
|
-
loading: true,
|
|
42
|
-
receipt: null
|
|
43
|
-
});
|
|
44
49
|
const salesDetail = context.sales.salesDetail;
|
|
45
50
|
const tempOrder = context.sales.tempOrder;
|
|
46
51
|
const salesModule = context.sales.salesModule;
|
|
52
|
+
const scope = (0, react.useMemo)(() => ({
|
|
53
|
+
appLocale,
|
|
54
|
+
engineContext,
|
|
55
|
+
orderId,
|
|
56
|
+
platform,
|
|
57
|
+
previewCreatedAt,
|
|
58
|
+
salesDetail,
|
|
59
|
+
salesModule,
|
|
60
|
+
tempOrder
|
|
61
|
+
}), [
|
|
62
|
+
appLocale,
|
|
63
|
+
engineContext,
|
|
64
|
+
orderId,
|
|
65
|
+
platform,
|
|
66
|
+
previewCreatedAt,
|
|
67
|
+
salesDetail,
|
|
68
|
+
salesModule,
|
|
69
|
+
tempOrder
|
|
70
|
+
]);
|
|
71
|
+
const [state, setState] = (0, react.useState)(require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, LOADING_STATE), {}, { scope: null }));
|
|
47
72
|
(0, react.useEffect)(() => {
|
|
48
73
|
let cancelled = false;
|
|
49
|
-
setState({
|
|
50
|
-
error: null,
|
|
51
|
-
loading: true,
|
|
52
|
-
receipt: null
|
|
53
|
-
});
|
|
74
|
+
setState(require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, LOADING_STATE), {}, { scope }));
|
|
54
75
|
(function() {
|
|
55
76
|
var _ref3 = require_asyncToGenerator._asyncToGenerator(function* () {
|
|
77
|
+
const { appLocale, engineContext, orderId, platform, previewCreatedAt, salesDetail, salesModule, tempOrder } = scope;
|
|
78
|
+
const layout = yield require_receipt.resolveInvoiceLayoutConfig(salesModule);
|
|
79
|
+
if (cancelled) return null;
|
|
80
|
+
const mustFilter = require_invoiceVisibility.requiresInvoiceDataFiltering(layout);
|
|
81
|
+
const useSharedConfig = require_invoiceVisibility.hasInvoiceDetailSettings(layout) || mustFilter;
|
|
82
|
+
const isVirtualOrder = require_index.isVirtualSettlementTempOrder(tempOrder) || require_index.isVirtualSettlementTempOrder(salesDetail === null || salesDetail === void 0 ? void 0 : salesDetail.raw);
|
|
83
|
+
const legacyVirtualResult = {
|
|
84
|
+
receipt: null,
|
|
85
|
+
source: null,
|
|
86
|
+
useLegacyVirtualCurrencyInvoice: true,
|
|
87
|
+
useVirtualCurrencyReceipt: false
|
|
88
|
+
};
|
|
89
|
+
if (isVirtualOrder && !useSharedConfig) return legacyVirtualResult;
|
|
90
|
+
const requiresSource = isVirtualOrder && useSharedConfig;
|
|
56
91
|
const embeddedSnapshot = require_receipt.resolveSmallTicketData(salesDetail, tempOrder);
|
|
57
|
-
const
|
|
92
|
+
const { snapshot, source } = yield function() {
|
|
58
93
|
var _ref2 = require_asyncToGenerator._asyncToGenerator(function* () {
|
|
59
94
|
if (platform !== "h5" && orderId !== null && orderId !== void 0) try {
|
|
60
|
-
const freshSnapshot = yield require_serve.getLocalOrderReceiptSnapshot(orderId, [appLocale]);
|
|
61
|
-
if (require_receipt.isSmallTicketData(freshSnapshot))
|
|
95
|
+
const freshSnapshot = yield require_serve.getLocalOrderReceiptSnapshot(orderId, [appLocale], layout);
|
|
96
|
+
if (!freshSnapshot || !require_receipt.isSmallTicketData(freshSnapshot.small_ticket_data)) throw new Error("Receipt snapshot is unavailable");
|
|
97
|
+
if (mustFilter && freshSnapshot.template_visibility_applied !== true) throw new Error("Receipt snapshot does not support template filtering");
|
|
98
|
+
if (requiresSource && !freshSnapshot.source) throw new Error("Virtual currency receipt source is unavailable");
|
|
99
|
+
return {
|
|
100
|
+
snapshot: freshSnapshot.small_ticket_data,
|
|
101
|
+
source: freshSnapshot.source || null
|
|
102
|
+
};
|
|
62
103
|
} catch (error) {
|
|
104
|
+
if (mustFilter || requiresSource) throw error;
|
|
63
105
|
console.warn("[SaleDetail.Invoice] Failed to rebuild local receipt snapshot", error);
|
|
64
106
|
}
|
|
65
|
-
if (
|
|
66
|
-
return
|
|
107
|
+
if (mustFilter || requiresSource) throw new Error("A template-aware local receipt snapshot is required");
|
|
108
|
+
return {
|
|
109
|
+
snapshot: embeddedSnapshot || (orderId !== null && orderId !== void 0 ? yield require_serve.getOrderSmallTicketData(orderId) : null),
|
|
110
|
+
source: null
|
|
111
|
+
};
|
|
67
112
|
});
|
|
68
113
|
return function loadSnapshot() {
|
|
69
114
|
return _ref2.apply(this, arguments);
|
|
70
115
|
};
|
|
71
|
-
}();
|
|
72
|
-
const [snapshot, layout] = yield Promise.all([loadSnapshot(), require_receipt.resolveInvoiceLayoutConfig(salesModule)]);
|
|
116
|
+
}()();
|
|
73
117
|
if (!snapshot) throw new Error("Receipt snapshot is unavailable");
|
|
118
|
+
const isVirtualSource = require_index.isVirtualSettlementTempOrder(source);
|
|
119
|
+
if (isVirtualSource && !useSharedConfig) return legacyVirtualResult;
|
|
74
120
|
const shopInfo = getShopInfo(engineContext);
|
|
75
121
|
const selected = require_receipt.selectSmallTicketLocale(snapshot, appLocale, shopInfo.primary_locale);
|
|
76
122
|
if (!selected) throw new Error("Receipt language data is unavailable");
|
|
77
|
-
return
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
123
|
+
return {
|
|
124
|
+
receipt: require_receipt.buildInvoiceReceiptViewModel({
|
|
125
|
+
data: selected.data,
|
|
126
|
+
layout,
|
|
127
|
+
locale: selected.locale,
|
|
128
|
+
previewTime: require_receipt.formatReceiptPreviewTime(previewCreatedAt, selected.locale),
|
|
129
|
+
shopLogo: getShopLogo(shopInfo),
|
|
130
|
+
taxNumberLabel: shopInfo.tax_number_title || (String(shopInfo.tax_country_code || "").toUpperCase() === "AU" ? "ABN" : void 0)
|
|
131
|
+
}),
|
|
132
|
+
source,
|
|
133
|
+
useLegacyVirtualCurrencyInvoice: false,
|
|
134
|
+
useVirtualCurrencyReceipt: useSharedConfig && isVirtualSource
|
|
135
|
+
};
|
|
85
136
|
});
|
|
86
137
|
return function load() {
|
|
87
138
|
return _ref3.apply(this, arguments);
|
|
88
139
|
};
|
|
89
|
-
})()().then((
|
|
90
|
-
if (!cancelled) setState({
|
|
140
|
+
})()().then((result) => {
|
|
141
|
+
if (!cancelled && result) setState(require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, result), {}, {
|
|
91
142
|
error: null,
|
|
92
143
|
loading: false,
|
|
93
|
-
|
|
94
|
-
});
|
|
144
|
+
scope
|
|
145
|
+
}));
|
|
95
146
|
}).catch((error) => {
|
|
96
147
|
if (cancelled) return;
|
|
97
148
|
const normalizedError = error instanceof Error ? error : new Error(String(error));
|
|
98
149
|
console.warn("[SaleDetail.Invoice] Failed to load receipt preview", normalizedError);
|
|
99
|
-
setState({
|
|
150
|
+
setState(require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, LOADING_STATE), {}, {
|
|
100
151
|
error: normalizedError,
|
|
101
152
|
loading: false,
|
|
102
|
-
|
|
103
|
-
});
|
|
153
|
+
scope
|
|
154
|
+
}));
|
|
104
155
|
});
|
|
105
156
|
return () => {
|
|
106
157
|
cancelled = true;
|
|
107
158
|
};
|
|
108
|
-
}, [
|
|
109
|
-
|
|
110
|
-
engineContext,
|
|
111
|
-
orderId,
|
|
112
|
-
platform,
|
|
113
|
-
previewCreatedAt,
|
|
114
|
-
salesDetail,
|
|
115
|
-
salesModule,
|
|
116
|
-
tempOrder
|
|
117
|
-
]);
|
|
118
|
-
return require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, state), {}, { retry: () => setRevision((value) => value + 1) });
|
|
159
|
+
}, [scope]);
|
|
160
|
+
return require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, state.scope === scope ? state : LOADING_STATE), {}, { retry: () => setRevision((value) => value + 1) });
|
|
119
161
|
}
|
|
120
162
|
//#endregion
|
|
121
163
|
exports.useInvoiceReceiptPreview = useInvoiceReceiptPreview;
|
|
@@ -7,6 +7,7 @@ const require_SalesSdkContext = require("./SalesSdkContext.js");
|
|
|
7
7
|
const require_enrichCartLineHolderDisplay = require("../utils/enrichCartLineHolderDisplay.js");
|
|
8
8
|
const require_SalesSdkHolderContext = require("./SalesSdkHolderContext.js");
|
|
9
9
|
const require_index = require("../../multiCurrencySettlement/index.js");
|
|
10
|
+
const require_receiptPrintWarning = require("../utils/receiptPrintWarning.js");
|
|
10
11
|
const require_SalesSdkBusinessAvailabilityContext = require("./SalesSdkBusinessAvailabilityContext.js");
|
|
11
12
|
const require_SalesSdkProductContext = require("./SalesSdkProductContext.js");
|
|
12
13
|
const require_SalesSdkSummaryContext = require("./SalesSdkSummaryContext.js");
|
|
@@ -1873,7 +1874,10 @@ const SalesSdkCartProvider = ({ children, deferHolderAuthOnClose = false, enable
|
|
|
1873
1874
|
}))) throw require_createHolderConfirmBridge.HOLDER_CONFIRM_CANCELLED;
|
|
1874
1875
|
}
|
|
1875
1876
|
if ((yield options === null || options === void 0 || (_options$beforeSubmit = options.beforeSubmit) === null || _options$beforeSubmit === void 0 ? void 0 : _options$beforeSubmit.call(options)) === false) throw require_createHolderConfirmBridge.HOLDER_CONFIRM_CANCELLED;
|
|
1876
|
-
|
|
1877
|
+
const result = yield bookingTicket.submitSalesOrder(params);
|
|
1878
|
+
const receiptWarning = require_receiptPrintWarning.getReceiptPrintWarning(result, _pisell_utils.locales.getLocale());
|
|
1879
|
+
if (receiptWarning) Toast.info(receiptWarning);
|
|
1880
|
+
return result;
|
|
1877
1881
|
});
|
|
1878
1882
|
return function(_x45, _x46) {
|
|
1879
1883
|
return _ref43.apply(this, arguments);
|
|
@@ -11,6 +11,7 @@ const require_SalesSdkHolderContext = require("./SalesSdkHolderContext.js");
|
|
|
11
11
|
const require_locales = require("../../multiCurrencySettlement/locales.js");
|
|
12
12
|
const require_index$1 = require("../../multiCurrencySettlement/index.js");
|
|
13
13
|
const require_payment_modal_utils = require("../../../components/checkout/payment-modal-utils.js");
|
|
14
|
+
const require_receiptPrintWarning = require("../utils/receiptPrintWarning.js");
|
|
14
15
|
const require_SalesSdkBusinessAvailabilityContext = require("./SalesSdkBusinessAvailabilityContext.js");
|
|
15
16
|
const require_buildStrategyContext = require("../utils/buildStrategyContext.js");
|
|
16
17
|
const require_buildDefaultLoadProductsParams = require("../utils/buildDefaultLoadProductsParams.js");
|
|
@@ -1076,6 +1077,8 @@ const SalesSdkProvider = ({ osKey, enableMultiCurrencySettlement = false, soluti
|
|
|
1076
1077
|
var _options$beforeSubmit2, _summaryProviderRef$c3;
|
|
1077
1078
|
if ((yield options === null || options === void 0 || (_options$beforeSubmit2 = options.beforeSubmit) === null || _options$beforeSubmit2 === void 0 ? void 0 : _options$beforeSubmit2.call(options)) === false) throw require_createHolderConfirmBridge.HOLDER_CONFIRM_CANCELLED;
|
|
1078
1079
|
const result = yield bookingTicket.submitSalesOrder(params);
|
|
1080
|
+
const receiptWarning = require_receiptPrintWarning.getReceiptPrintWarning(result, _pisell_utils.locales.getLocale());
|
|
1081
|
+
if (receiptWarning) Toast.info(receiptWarning);
|
|
1079
1082
|
if (options === null || options === void 0 ? void 0 : options.skipRemoteRefresh) refreshRootSnapshot();
|
|
1080
1083
|
else yield refreshSalesDetail();
|
|
1081
1084
|
(_summaryProviderRef$c3 = summaryProviderRef.current) === null || _summaryProviderRef$c3 === void 0 || _summaryProviderRef$c3.refreshSummary();
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
//#region src/plus/salesSdk/utils/receiptPrintWarning.ts
|
|
2
|
+
const PRINT_WARNINGS = {
|
|
3
|
+
en: "The order was saved, but the receipt could not be generated. Please retry printing from order details.",
|
|
4
|
+
"zh-cn": "订单已保存,但小票生成失败。请在订单详情中重试打印。",
|
|
5
|
+
"zh-hk": "訂單已儲存,但小票產生失敗。請在訂單詳情中重試列印。",
|
|
6
|
+
ja: "注文は保存されましたが、レシートを作成できませんでした。注文詳細から印刷を再試行してください。",
|
|
7
|
+
pt: "O pedido foi salvo, mas não foi possível gerar o recibo. Tente imprimir novamente nos detalhes do pedido."
|
|
8
|
+
};
|
|
9
|
+
/** Receipt failure must be visible without turning a saved sale into a failed checkout. */
|
|
10
|
+
function getReceiptPrintWarning(result, locale) {
|
|
11
|
+
if (!result || typeof result !== "object" || !result.receipt_print_error) return null;
|
|
12
|
+
const language = String(locale || "en").replace(/_/g, "-").toLowerCase();
|
|
13
|
+
return PRINT_WARNINGS[language] || PRINT_WARNINGS[language.split("-")[0]] || PRINT_WARNINGS.en;
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
exports.getReceiptPrintWarning = getReceiptPrintWarning;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pisell/private-materials",
|
|
3
|
-
"version": "6.12.
|
|
3
|
+
"version": "6.12.288",
|
|
4
4
|
"main": "./lib/index.js",
|
|
5
5
|
"module": "./es/index.js",
|
|
6
6
|
"types": "./lib/index.d.ts",
|
|
@@ -71,11 +71,11 @@
|
|
|
71
71
|
"react-zoom-pan-pinch": "^3.7.0",
|
|
72
72
|
"styled-components": "^6.0.0-rc.3",
|
|
73
73
|
"use-sync-external-store": "^1.6.0",
|
|
74
|
+
"@pisell/pi-payment-sdk": "0.0.3",
|
|
74
75
|
"@pisell/utils": "3.0.7",
|
|
75
76
|
"@pisell/materials": "6.12.75",
|
|
76
|
-
"@pisell/date-picker": "3.0.12",
|
|
77
77
|
"@pisell/icon": "0.0.11",
|
|
78
|
-
"@pisell/
|
|
78
|
+
"@pisell/date-picker": "3.0.12"
|
|
79
79
|
},
|
|
80
80
|
"peerDependencies": {
|
|
81
81
|
"react": "^18.0.0",
|