@final-commerce/command-frame 0.4.0-preprod.1 → 0.4.0-staging.1
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/README.md +30 -38
- package/dist/actions/add-product-to-cart/types.d.ts +13 -1
- package/dist/actions/apply-transition/mock.d.ts +1 -1
- package/dist/actions/apply-transition/mock.js +18 -8
- package/dist/actions/apply-transition/types.d.ts +4 -6
- package/dist/actions/extension-payment/types.d.ts +2 -2
- package/dist/actions/get-available-transitions/mock.d.ts +3 -5
- package/dist/actions/get-available-transitions/mock.js +12 -24
- package/dist/actions/integration-payment/types.d.ts +0 -2
- package/dist/actions/partial-payment/types.d.ts +2 -2
- package/dist/actions/redeem-payment/types.d.ts +0 -2
- package/dist/actions/terminal-payment/types.d.ts +3 -3
- package/dist/actions/update-cart-item-quantity/types.d.ts +8 -1
- package/dist/demo/database.d.ts +2 -3
- package/dist/demo/database.js +250 -310
- package/dist/index.d.ts +1 -3
- package/dist/index.js +0 -2
- package/dist/projects/render/mocks.js +0 -4
- package/dist/projects/render/types.d.ts +1 -3
- package/dist/pubsub/topics/orders/index.d.ts +2 -2
- package/dist/pubsub/topics/orders/index.js +24 -29
- package/dist/pubsub/topics/orders/types.d.ts +14 -16
- package/dist/pubsub/topics/orders/types.js +6 -7
- package/package.json +2 -2
- package/dist/actions/void-order/action.d.ts +0 -6
- package/dist/actions/void-order/action.js +0 -8
- package/dist/actions/void-order/mock.d.ts +0 -2
- package/dist/actions/void-order/mock.js +0 -23
- package/dist/actions/void-order/types.d.ts +0 -27
- package/dist/actions/void-order/types.js +0 -1
- package/dist/pubsub/topics/orders/order-voided/types.d.ts +0 -14
- package/dist/pubsub/topics/orders/order-voided/types.js +0 -1
package/dist/demo/database.js
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
* Mock Database for Standalone/Demo Mode
|
|
3
3
|
* Stores mock data that mimics the Render environment
|
|
4
4
|
*/
|
|
5
|
-
import { CFProductType, CFUserTypes, CurrencyCode
|
|
6
|
-
export * from
|
|
5
|
+
import { CFProductType, CFUserTypes, CurrencyCode } from "../CommonTypes";
|
|
6
|
+
export * from "./mocks";
|
|
7
7
|
// Asset Imports - Using Remote URLs to avoid build complexity with asset copying
|
|
8
|
-
const ASSETS_BASE_URL =
|
|
9
|
-
const logo =
|
|
8
|
+
const ASSETS_BASE_URL = "https://raw.githubusercontent.com/Final-Commerce/command-frame/refs/heads/main/src/demo/assets";
|
|
9
|
+
const logo = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA5OCAxMDQiIGZpbGw9Im5vbmUiPjxwYXRoIGQ9Ik01NS4yOTk4IDUwLjE2NjJMMzcuNzQyMiA0MC4wMjkzTDMxLjcyNzQgNTAuNDQ3MkwzOC45MjQyIDU0LjYwMjJMNTUuMjk5OCA1MC4xNjYyWiIgZmlsbD0iI0E1NjhCQyIvPjxwYXRoIGQ9Ik0zMS45OTYzIDcwLjQ1MDZMNDkuNTU2OCA4MC41ODkxTDU1LjU3MTUgNzAuMTcxM0w0OC4zNzE4IDY2LjAxNDVMMzEuOTk2MyA3MC40NTA2WiIgZmlsbD0iI0E1NjhCQyIvPjxwYXRoIGQ9Ik0zNi4zNTQyIDM0LjI1NzJDMzYuMzU0MiAzNC4yNTcyIDM2LjM1ODMgMzQuMjYzNSAzNi4zNTY3IDM0LjI2NjRDMzcuMTg2OSAzNC4wNjk3IDM4LjA5MTkgMzQuMTU5NiAzOC44ODUxIDM0LjYxNzVMNjIuNjQ4NiA0OC4zMzc0TDU0LjE3MjkgMjkuOTA0OUwzNi4zNDk2IDM0LjI1ODRMMzYuMzU0MiAzNC4yNTcyWiIgZmlsbD0iI0ZDODc1MyIvPjxwYXRoIGQ9Ik0zMy4wOTg4IDE4Ljk1MDdMMzYuMzc3MiAzNC4yNDczTDE4Ljc1MjUgMzkuMzM3M0wyOC45MzcxIDIxLjY5N0MyOS44NDUzIDIwLjEyMzkgMzEuNDE1MiAxOS4xNzYxIDMzLjA5ODggMTguOTUwN1oiIGZpbGw9IiM0MkQzQTkiLz48cGF0aCBkPSJNMTguNzUzMiAzOS4zNDA2TDIwLjY4MjQgNTkuNTE3MUw0LjU3NjA3IDYzLjg5NjJMMTguNzUzMiAzOS4zNDA2WiIgZmlsbD0iIzI3OTdFOCIvPjxwYXRoIGQ9Ik0zNi4zNzc5IDM0LjI0MDNDMzYuMzc3OSAzNC4yNDAzIDM2LjM3NzQgMzQuMjQ3OCAzNi4zODAzIDM0LjI0OTVDMzUuNTYyNCAzNC40OTE5IDM0LjgyMzkgMzUuMDE5NiAzNC4zNjczIDM1LjgxMDVMMjAuNjg2OSA1OS41MDU2TDE4Ljc1NzcgMzkuMzI5MUwzNi4zODI0IDM0LjIzOTFMMzYuMzc3OSAzNC4yNDAzWiIgZmlsbD0iIzFEQkFDQiIvPjxwYXRoIGQ9Ik01NS45MzUyIDEwMS41NDNMNTEuMDgxOSA4Ni42NjU5TDMzLjI1ODcgOTEuMDE5NEw1MC45NDk5IDEwMS4yMzNDNTIuNTI3NiAxMDIuMTQ0IDU0LjM2MzggMTAyLjE4NSA1NS45MzUyIDEwMS41NDNaIiBmaWxsPSIjRkQ1MjYzIi8+PHBhdGggZD0iTTMzLjI1NDkgOTEuMDE0TDI0Ljc4MjEgNzIuNTgzMkw4LjYzMTM1IDc2Ljc5NzVMMzMuMjU0OSA5MS4wMTRaIiBmaWxsPSIjRkZDRjIzIi8+PHBhdGggZD0iTTUxLjA3OSA4Ni42NjM5QzUxLjA3OSA4Ni42NjM5IDUxLjA3NDkgODYuNjU3NiA1MS4wNzY2IDg2LjY1NDdDNTAuMjQ2NCA4Ni44NTE0IDQ5LjM0MTQgODYuNzYxNSA0OC41NDgyIDg2LjMwMzZMMjQuNzg0NiA3Mi41ODM3TDMzLjI2MDQgOTEuMDE2MUw1MS4wODM2IDg2LjY2MjdMNTEuMDc5IDg2LjY2MzlaIiBmaWxsPSIjRkM4NzUzIi8+PHBhdGggZD0iTTU0LjMzNDIgMTAxLjk2OUw1MS4wNTU4IDg2LjY3MjRMNjguNjgwNSA4MS41ODI0TDU4LjQ5NTkgOTkuMjIyN0M1Ny41ODc3IDEwMC43OTYgNTYuMDE3OCAxMDEuNzQ0IDU0LjMzNDIgMTAxLjk2OVoiIGZpbGw9IiM0MkQzQTkiLz48cGF0aCBkPSJNNjguNjgwMSA4MS41ODk5TDY2Ljc0OTMgNjEuNDE2Mkw4Mi44NTU2IDU3LjAzNzJMNjguNjgwMSA4MS41ODk5WiIgZmlsbD0iIzI3OTdFOCIvPjxwYXRoIGQ9Ik01MS4wNTU3IDg2LjY3ODZDNTEuMDU1NyA4Ni42Nzg2IDUxLjA1NjIgODYuNjcxMSA1MS4wNTMyIDg2LjY2OTVDNTEuODcxMSA4Ni40MjcxIDUyLjYwOTcgODUuODk5NCA1My4wNjYzIDg1LjEwODVMNjYuNzQ2NyA2MS40MTMzTDY4LjY3NTkgODEuNTg5OEw1MS4wNTExIDg2LjY3OThMNTEuMDU1NyA4Ni42Nzg2WiIgZmlsbD0iIzFEQkFDQiIvPjxwYXRoIGQ9Ik00Ny44OTQ5IDI2LjI3NjhDNDcuODc4IDI2LjM1OTcgNDcuODUyIDI2LjQ0NTEgNDcuODA2OCAyNi41MjM0TDQ3LjYyNzggMjYuODMzM0M0Ni43ODY1IDI4LjI5MDYgNDQuOTIzMiAyOC43ODY5IDQzLjQ2MTggMjcuOTQzMkM0Mi4wMDA0IDI3LjA5OTQgNDEuNDk4NiAyNS4yMzc2IDQyLjMzOTkgMjMuNzgwNEw0Mi41MTg5IDIzLjQ3MDRDNDIuNTY0MSAyMy4zOTIyIDQyLjYyNSAyMy4zMjY5IDQyLjY4ODQgMjMuMjcwOEwzNi40ODUzIDE5LjY4OTRDMzQuOTA3NiAxOC43Nzg2IDMzLjA3MTQgMTguNzM4MiAzMS41IDE5LjM3OTlMMzYuMzUzMyAzNC4yNTY5TDU0LjE3NjUgMjkuOTAzNUw0Ny44OTQ5IDI2LjI3NjhaIiBmaWxsPSIjRkQ1MjYzIi8+PHBhdGggZD0iTTc1LjYzODYgNDIuMzAyN0M3NS42MjE3IDQyLjM4NTcgNzUuNTk1NiA0Mi40NzExIDc1LjU1MDUgNDIuNTQ5M0w3NS4zNzE1IDQyLjg1OTNDNzQuNTMwMiA0NC4zMTY1IDcyLjY2NjkgNDQuODEyOSA3MS4yMDU0IDQzLjk2OTFDNjkuNzQ0IDQzLjEyNTQgNjkuMjQyMyA0MS4yNjM2IDcwLjA4MzYgMzkuODA2M0w3MC4yNjI2IDM5LjQ5NjNDNzAuMzA3NyAzOS40MTgxIDcwLjM2ODYgMzkuMzUyOSA3MC40MzIgMzkuMjk2N0w1NC4xNzYxIDI5LjkxMTRMNjIuNjUxOSA0OC4zNDM5TDc4LjgwMjYgNDQuMTI5NUw3NS42NDE1IDQyLjMwNDRMNzUuNjM4NiA0Mi4zMDI3WiIgZmlsbD0iI0ZGQ0YyMyIvPjxwYXRoIGQ9Ik03NS42MDU4IDQwLjgyMTlMNzUuNjQ0MiA0MC43NTUyQzc4LjE0ODEgMzYuNDE4MyA3OC42NDY1IDMxLjQ0ODggNzcuNDMwOSAyNi45MzgzQzc2LjIxNTMgMjIuNDI3OCA3My4yODQ3IDE4LjM3MTggNjguOTM1MiAxNS44NjA3QzY0LjU4NTggMTMuMzQ5NSA1OS42MDc5IDEyLjgzOTUgNTUuMDkzOSAxNC4wNDJDNTAuNTc5OSAxNS4yNDQ2IDQ2LjUyNTMgMTguMTYwOSA0NC4wMjE0IDIyLjQ5NzhMNDIuOTkxMSAyNC4yODI0QzQyLjM3MzkgMjUuMzUxNCA0Mi43NDQyIDI2LjcxNjMgNDMuODEzNCAyNy4zMzM2QzQ0Ljg4MjYgMjcuOTUwOSA0Ni4yNTE0IDI3LjU4NjIgNDYuODY2OSAyNi41MjAxTDQ3Ljg5NzMgMjQuNzM1NUM0OS43ODU3IDIxLjQ2NDcgNTIuODQ0MSAxOS4yNjczIDU2LjI1NDggMTguMzU4N0M1OS42NjU0IDE3LjQ1MDEgNjMuNDE5MSAxNy44MzI3IDY2LjY5OTQgMTkuNzI2NkM2OS45Nzk2IDIxLjYyMDQgNzIuMTg3OSAyNC42Nzk5IDczLjEwNjMgMjguMDg3OUM3NC4wMjQ4IDMxLjQ5NiA3My42NTEgMzUuMjQzNCA3MS43NjI2IDM4LjUxNDFMNzEuNzI0MSAzOC41ODA4TDcwLjczMzkgNDAuMjk1OEM3MC4xMTY3IDQxLjM2NDkgNzAuNDg3IDQyLjcyOTcgNzEuNTU2MiA0My4zNDdDNzIuNjI1NCA0My45NjQ0IDczLjk5NDIgNDMuNTk5NyA3NC42MDk4IDQyLjUzMzZMNzUuNTk5OSA0MC44MTg1TDc1LjYwNTggNDAuODIxOVoiIGZpbGw9IiMzRDRDNjYiLz48L3N2Zz4="; // crisp vector mark (was logo.png — pixelated when scaled)
|
|
10
10
|
const basilAlmondImg = `${ASSETS_BASE_URL}/basil-almond-paste.png`;
|
|
11
11
|
const beerImg = `${ASSETS_BASE_URL}/beer-paste.png`;
|
|
12
12
|
const beetImg = `${ASSETS_BASE_URL}/beet-paste.png`;
|
|
@@ -19,57 +19,57 @@ const redPepperImg = `${ASSETS_BASE_URL}/red-pepper-paste.png`;
|
|
|
19
19
|
const roastedTomatoImg = `${ASSETS_BASE_URL}/roasted-tomato-paste.png`;
|
|
20
20
|
// --- COMPANY ---
|
|
21
21
|
export const MOCK_COMPANY = {
|
|
22
|
-
id:
|
|
23
|
-
name:
|
|
22
|
+
id: "comp_paste_demo",
|
|
23
|
+
name: "Paste Demo Company",
|
|
24
24
|
logo: logo,
|
|
25
25
|
settings: {
|
|
26
|
-
currencyPrefix:
|
|
27
|
-
currencySuffix:
|
|
26
|
+
currencyPrefix: "$",
|
|
27
|
+
currencySuffix: "",
|
|
28
28
|
minorUnits: 2,
|
|
29
|
-
currencySymbol:
|
|
30
|
-
decimalSeparator:
|
|
31
|
-
thousandSeparator:
|
|
32
|
-
decimals: { $numberInt:
|
|
33
|
-
}
|
|
29
|
+
currencySymbol: "$",
|
|
30
|
+
decimalSeparator: ".",
|
|
31
|
+
thousandSeparator: ",",
|
|
32
|
+
decimals: { $numberInt: "2" }
|
|
33
|
+
}
|
|
34
34
|
};
|
|
35
35
|
// --- OUTLETS ---
|
|
36
36
|
export const MOCK_OUTLET_MAIN = {
|
|
37
|
-
id:
|
|
38
|
-
_id:
|
|
39
|
-
name:
|
|
40
|
-
address:
|
|
41
|
-
address2:
|
|
42
|
-
city:
|
|
43
|
-
state:
|
|
44
|
-
country:
|
|
45
|
-
taxId:
|
|
46
|
-
postCode:
|
|
37
|
+
id: "outlet_main",
|
|
38
|
+
_id: "outlet_main",
|
|
39
|
+
name: "Main Kitchen",
|
|
40
|
+
address: "123 Pasta Lane",
|
|
41
|
+
address2: "Suite 1",
|
|
42
|
+
city: "Rome",
|
|
43
|
+
state: "RM",
|
|
44
|
+
country: "IT",
|
|
45
|
+
taxId: "TAX-IT-001",
|
|
46
|
+
postCode: "00100",
|
|
47
47
|
sequenceNumber: 1,
|
|
48
|
-
stripeAccountId:
|
|
48
|
+
stripeAccountId: "acct_paste_main"
|
|
49
49
|
};
|
|
50
50
|
// --- STATIONS ---
|
|
51
51
|
export const MOCK_STATION_1 = {
|
|
52
|
-
_id:
|
|
53
|
-
name:
|
|
54
|
-
status:
|
|
52
|
+
_id: "station_counter_1",
|
|
53
|
+
name: "Counter 1",
|
|
54
|
+
status: "open",
|
|
55
55
|
sequenceNumber: 1,
|
|
56
|
-
stripeTerminalId:
|
|
56
|
+
stripeTerminalId: "tm_1"
|
|
57
57
|
};
|
|
58
58
|
export const MOCK_STATION_2 = {
|
|
59
|
-
_id:
|
|
60
|
-
name:
|
|
61
|
-
status:
|
|
59
|
+
_id: "station_counter_2",
|
|
60
|
+
name: "Counter 2",
|
|
61
|
+
status: "open",
|
|
62
62
|
sequenceNumber: 2,
|
|
63
|
-
stripeTerminalId:
|
|
63
|
+
stripeTerminalId: "tm_2"
|
|
64
64
|
};
|
|
65
65
|
// --- SESSION (cash register) ---
|
|
66
66
|
export const MOCK_SESSION = {
|
|
67
|
-
id:
|
|
67
|
+
id: "sess_mock_1",
|
|
68
68
|
stationId: MOCK_STATION_1._id,
|
|
69
69
|
openingAmount: 100,
|
|
70
|
-
openedBy:
|
|
70
|
+
openedBy: "user_mario",
|
|
71
71
|
currency: CurrencyCode.USD,
|
|
72
|
-
minorUnits: 2
|
|
72
|
+
minorUnits: 2
|
|
73
73
|
};
|
|
74
74
|
// --- ACTIVE REFUND DETAILS (refund UI state) ---
|
|
75
75
|
export const MOCK_ACTIVE_REFUND_DETAILS = {
|
|
@@ -78,139 +78,139 @@ export const MOCK_ACTIVE_REFUND_DETAILS = {
|
|
|
78
78
|
refundAmounts: {},
|
|
79
79
|
currentRefundTotal: 0,
|
|
80
80
|
amountRemaining: null,
|
|
81
|
-
isRefund: true
|
|
81
|
+
isRefund: true
|
|
82
82
|
};
|
|
83
83
|
// --- USERS ---
|
|
84
84
|
export const MOCK_USER_MARIO = {
|
|
85
|
-
id:
|
|
86
|
-
firstName:
|
|
87
|
-
lastName:
|
|
85
|
+
id: "user_mario",
|
|
86
|
+
firstName: "Mario",
|
|
87
|
+
lastName: "Demoji",
|
|
88
88
|
type: CFUserTypes.MANAGER,
|
|
89
89
|
role: {
|
|
90
|
-
id:
|
|
91
|
-
name:
|
|
92
|
-
permissions: []
|
|
90
|
+
id: "role_manager",
|
|
91
|
+
name: "Manager",
|
|
92
|
+
permissions: []
|
|
93
93
|
},
|
|
94
94
|
outlets: [MOCK_OUTLET_MAIN.id],
|
|
95
|
-
companies: [MOCK_COMPANY.id]
|
|
95
|
+
companies: [MOCK_COMPANY.id]
|
|
96
96
|
};
|
|
97
97
|
export const MOCK_USER_LUIGI = {
|
|
98
|
-
id:
|
|
99
|
-
firstName:
|
|
100
|
-
lastName:
|
|
98
|
+
id: "user_luigi",
|
|
99
|
+
firstName: "Luigi",
|
|
100
|
+
lastName: "Demoji",
|
|
101
101
|
type: CFUserTypes.CASHIER,
|
|
102
102
|
role: {
|
|
103
|
-
id:
|
|
104
|
-
name:
|
|
105
|
-
permissions: []
|
|
103
|
+
id: "role_cashier",
|
|
104
|
+
name: "Cashier",
|
|
105
|
+
permissions: []
|
|
106
106
|
},
|
|
107
107
|
outlets: [MOCK_OUTLET_MAIN.id],
|
|
108
|
-
companies: [MOCK_COMPANY.id]
|
|
108
|
+
companies: [MOCK_COMPANY.id]
|
|
109
109
|
};
|
|
110
110
|
// --- CUSTOMERS ---
|
|
111
111
|
export const MOCK_CUSTOMER_1 = {
|
|
112
|
-
_id:
|
|
112
|
+
_id: "cust_giuseppe",
|
|
113
113
|
companyId: MOCK_COMPANY.id,
|
|
114
|
-
email:
|
|
115
|
-
firstName:
|
|
116
|
-
lastName:
|
|
117
|
-
phone:
|
|
114
|
+
email: "giuseppe@example.com",
|
|
115
|
+
firstName: "Giuseppe",
|
|
116
|
+
lastName: "Verdi",
|
|
117
|
+
phone: "555-0101",
|
|
118
118
|
billing: {
|
|
119
|
-
firstName:
|
|
120
|
-
lastName:
|
|
121
|
-
address1:
|
|
122
|
-
address2:
|
|
123
|
-
city:
|
|
124
|
-
postCode:
|
|
125
|
-
country:
|
|
119
|
+
firstName: "Giuseppe",
|
|
120
|
+
lastName: "Verdi",
|
|
121
|
+
address1: "Via Roma 1",
|
|
122
|
+
address2: "",
|
|
123
|
+
city: "Milano",
|
|
124
|
+
postCode: "20100",
|
|
125
|
+
country: "IT"
|
|
126
126
|
},
|
|
127
|
-
shipping: null
|
|
127
|
+
shipping: null
|
|
128
128
|
};
|
|
129
129
|
export const MOCK_CUSTOMER_2 = {
|
|
130
|
-
_id:
|
|
130
|
+
_id: "cust_sofia",
|
|
131
131
|
companyId: MOCK_COMPANY.id,
|
|
132
|
-
email:
|
|
133
|
-
firstName:
|
|
134
|
-
lastName:
|
|
135
|
-
phone:
|
|
132
|
+
email: "sofia@example.com",
|
|
133
|
+
firstName: "Sofia",
|
|
134
|
+
lastName: "Loren",
|
|
135
|
+
phone: "555-0102",
|
|
136
136
|
billing: null,
|
|
137
|
-
shipping: null
|
|
137
|
+
shipping: null
|
|
138
138
|
};
|
|
139
139
|
export const MOCK_CUSTOMER_3 = {
|
|
140
|
-
_id:
|
|
140
|
+
_id: "cust_alessandro",
|
|
141
141
|
companyId: MOCK_COMPANY.id,
|
|
142
|
-
email:
|
|
143
|
-
firstName:
|
|
144
|
-
lastName:
|
|
145
|
-
phone:
|
|
142
|
+
email: "alessandro@example.com",
|
|
143
|
+
firstName: "Alessandro",
|
|
144
|
+
lastName: "Volta",
|
|
145
|
+
phone: "555-0103",
|
|
146
146
|
billing: null,
|
|
147
|
-
shipping: null
|
|
147
|
+
shipping: null
|
|
148
148
|
};
|
|
149
149
|
export const MOCK_CUSTOMER_4 = {
|
|
150
|
-
_id:
|
|
150
|
+
_id: "cust_isabella",
|
|
151
151
|
companyId: MOCK_COMPANY.id,
|
|
152
|
-
email:
|
|
153
|
-
firstName:
|
|
154
|
-
lastName:
|
|
155
|
-
phone:
|
|
152
|
+
email: "isabella@example.com",
|
|
153
|
+
firstName: "Isabella",
|
|
154
|
+
lastName: "Rossellini",
|
|
155
|
+
phone: "555-0104",
|
|
156
156
|
billing: null,
|
|
157
|
-
shipping: null
|
|
157
|
+
shipping: null
|
|
158
158
|
};
|
|
159
159
|
export const MOCK_CUSTOMER_5 = {
|
|
160
|
-
_id:
|
|
160
|
+
_id: "cust_leonardo",
|
|
161
161
|
companyId: MOCK_COMPANY.id,
|
|
162
|
-
email:
|
|
163
|
-
firstName:
|
|
164
|
-
lastName:
|
|
165
|
-
phone:
|
|
162
|
+
email: "leonardo@example.com",
|
|
163
|
+
firstName: "Leonardo",
|
|
164
|
+
lastName: "Da Vinci",
|
|
165
|
+
phone: "555-0105",
|
|
166
166
|
billing: null,
|
|
167
|
-
shipping: null
|
|
167
|
+
shipping: null
|
|
168
168
|
};
|
|
169
169
|
// --- CATEGORIES ---
|
|
170
170
|
export const MOCK_CATEGORY_PASTES = {
|
|
171
|
-
id:
|
|
172
|
-
createdAt:
|
|
173
|
-
updatedAt:
|
|
174
|
-
name:
|
|
175
|
-
externalId:
|
|
171
|
+
id: "cat_pastes",
|
|
172
|
+
createdAt: "2024-01-01T00:00:00.000Z",
|
|
173
|
+
updatedAt: "2024-01-01T00:00:00.000Z",
|
|
174
|
+
name: "Pastes",
|
|
175
|
+
externalId: "ext_cat_pastes",
|
|
176
176
|
companyId: MOCK_COMPANY.id,
|
|
177
177
|
};
|
|
178
178
|
export const MOCK_CATEGORY_SPECIALTY = {
|
|
179
|
-
id:
|
|
180
|
-
createdAt:
|
|
181
|
-
updatedAt:
|
|
182
|
-
name:
|
|
183
|
-
externalId:
|
|
179
|
+
id: "cat_specialty",
|
|
180
|
+
createdAt: "2024-01-01T00:00:00.000Z",
|
|
181
|
+
updatedAt: "2024-01-01T00:00:00.000Z",
|
|
182
|
+
name: "Specialty",
|
|
183
|
+
externalId: "ext_cat_specialty",
|
|
184
184
|
companyId: MOCK_COMPANY.id,
|
|
185
|
-
parentId:
|
|
185
|
+
parentId: "cat_pastes"
|
|
186
186
|
};
|
|
187
187
|
export const MOCK_CATEGORY_BASIC = {
|
|
188
|
-
id:
|
|
189
|
-
createdAt:
|
|
190
|
-
updatedAt:
|
|
191
|
-
name:
|
|
192
|
-
externalId:
|
|
188
|
+
id: "cat_basic",
|
|
189
|
+
createdAt: "2024-01-01T00:00:00.000Z",
|
|
190
|
+
updatedAt: "2024-01-01T00:00:00.000Z",
|
|
191
|
+
name: "Basic",
|
|
192
|
+
externalId: "ext_cat_basic",
|
|
193
193
|
companyId: MOCK_COMPANY.id,
|
|
194
|
-
parentId:
|
|
194
|
+
parentId: "cat_pastes"
|
|
195
195
|
};
|
|
196
196
|
export const MOCK_CATEGORY_VEGAN = {
|
|
197
|
-
id:
|
|
198
|
-
createdAt:
|
|
199
|
-
updatedAt:
|
|
200
|
-
name:
|
|
201
|
-
externalId:
|
|
197
|
+
id: "cat_vegan",
|
|
198
|
+
createdAt: "2024-01-01T00:00:00.000Z",
|
|
199
|
+
updatedAt: "2024-01-01T00:00:00.000Z",
|
|
200
|
+
name: "Vegan",
|
|
201
|
+
externalId: "ext_cat_vegan",
|
|
202
202
|
companyId: MOCK_COMPANY.id,
|
|
203
203
|
};
|
|
204
204
|
export const MOCK_CATEGORY_SPICY = {
|
|
205
|
-
id:
|
|
206
|
-
createdAt:
|
|
207
|
-
updatedAt:
|
|
208
|
-
name:
|
|
209
|
-
externalId:
|
|
205
|
+
id: "cat_spicy",
|
|
206
|
+
createdAt: "2024-01-01T00:00:00.000Z",
|
|
207
|
+
updatedAt: "2024-01-01T00:00:00.000Z",
|
|
208
|
+
name: "Spicy",
|
|
209
|
+
externalId: "ext_cat_spicy",
|
|
210
210
|
companyId: MOCK_COMPANY.id,
|
|
211
211
|
};
|
|
212
212
|
// --- PRODUCTS ---
|
|
213
|
-
const createInventory = (stock) => [{ warehouse:
|
|
213
|
+
const createInventory = (stock) => [{ warehouse: "main", outletId: MOCK_OUTLET_MAIN.id, stock }];
|
|
214
214
|
// Helper for Simple Product
|
|
215
215
|
const createSimpleProduct = (id, name, price, image, categories, description) => {
|
|
216
216
|
const sku = `SKU-${id.toUpperCase()}`;
|
|
@@ -224,12 +224,12 @@ const createSimpleProduct = (id, name, price, image, categories, description) =>
|
|
|
224
224
|
minorUnits: 2,
|
|
225
225
|
minPrice: price,
|
|
226
226
|
maxPrice: price,
|
|
227
|
-
status:
|
|
227
|
+
status: "active",
|
|
228
228
|
productType: CFProductType.SIMPLE,
|
|
229
|
-
taxTable:
|
|
229
|
+
taxTable: "tax_standard",
|
|
230
230
|
description,
|
|
231
231
|
images: [image],
|
|
232
|
-
categories: categories.map(
|
|
232
|
+
categories: categories.map(c => ({ name: c.name, externalId: c.externalId ?? c.id })),
|
|
233
233
|
attributes: [],
|
|
234
234
|
variants: [
|
|
235
235
|
{
|
|
@@ -241,9 +241,9 @@ const createSimpleProduct = (id, name, price, image, categories, description) =>
|
|
|
241
241
|
manageStock: true,
|
|
242
242
|
externalId: `ext_${id}_var`,
|
|
243
243
|
attributes: [],
|
|
244
|
-
inventory: createInventory(100)
|
|
245
|
-
}
|
|
246
|
-
]
|
|
244
|
+
inventory: createInventory(100)
|
|
245
|
+
}
|
|
246
|
+
]
|
|
247
247
|
};
|
|
248
248
|
};
|
|
249
249
|
// Helper for Variable Product (Size: Small, Large)
|
|
@@ -259,13 +259,13 @@ const createVariableProduct = (id, name, basePrice, largePrice, image, categorie
|
|
|
259
259
|
minorUnits: 2,
|
|
260
260
|
minPrice: basePrice,
|
|
261
261
|
maxPrice: largePrice,
|
|
262
|
-
status:
|
|
262
|
+
status: "active",
|
|
263
263
|
productType: CFProductType.VARIABLE,
|
|
264
|
-
taxTable:
|
|
264
|
+
taxTable: "tax_standard",
|
|
265
265
|
description,
|
|
266
266
|
images: [image],
|
|
267
|
-
categories: categories.map(
|
|
268
|
-
attributes: [{ name:
|
|
267
|
+
categories: categories.map(c => ({ name: c.name, externalId: c.externalId ?? c.id })),
|
|
268
|
+
attributes: [{ name: "Size", values: ["Small", "Large"] }],
|
|
269
269
|
variants: [
|
|
270
270
|
{
|
|
271
271
|
_id: `${id}_var_small`,
|
|
@@ -275,8 +275,8 @@ const createVariableProduct = (id, name, basePrice, largePrice, image, categorie
|
|
|
275
275
|
isOnSale: false,
|
|
276
276
|
manageStock: true,
|
|
277
277
|
externalId: `ext_${id}_var_s`,
|
|
278
|
-
attributes: [{ name:
|
|
279
|
-
inventory: createInventory(50)
|
|
278
|
+
attributes: [{ name: "Size", value: "Small" }],
|
|
279
|
+
inventory: createInventory(50)
|
|
280
280
|
},
|
|
281
281
|
{
|
|
282
282
|
_id: `${id}_var_large`,
|
|
@@ -286,30 +286,30 @@ const createVariableProduct = (id, name, basePrice, largePrice, image, categorie
|
|
|
286
286
|
isOnSale: false,
|
|
287
287
|
manageStock: true,
|
|
288
288
|
externalId: `ext_${id}_var_l`,
|
|
289
|
-
attributes: [{ name:
|
|
290
|
-
inventory: createInventory(30)
|
|
291
|
-
}
|
|
292
|
-
]
|
|
289
|
+
attributes: [{ name: "Size", value: "Large" }],
|
|
290
|
+
inventory: createInventory(30)
|
|
291
|
+
}
|
|
292
|
+
]
|
|
293
293
|
};
|
|
294
294
|
};
|
|
295
|
-
export const MOCK_PRODUCT_BASIL_ALMOND = createSimpleProduct(
|
|
296
|
-
export const MOCK_PRODUCT_BEER = createVariableProduct(
|
|
297
|
-
export const MOCK_PRODUCT_BEET = createSimpleProduct(
|
|
298
|
-
export const MOCK_PRODUCT_CARAMELIZED = createVariableProduct(
|
|
299
|
-
export const MOCK_PRODUCT_GARLIC_ONION = createVariableProduct(
|
|
300
|
-
export const MOCK_PRODUCT_GARLIC = createSimpleProduct(
|
|
301
|
-
export const MOCK_PRODUCT_GINGER_LIME = createVariableProduct(
|
|
302
|
-
export const MOCK_PRODUCT_LEMON = createSimpleProduct(
|
|
303
|
-
export const MOCK_PRODUCT_RED_PEPPER = createVariableProduct(
|
|
304
|
-
export const MOCK_PRODUCT_ROASTED_TOMATO = createVariableProduct(
|
|
305
|
-
export const MOCK_PRODUCT_MINT_LEMON = createSimpleProduct(
|
|
306
|
-
[MOCK_CATEGORY_PASTES, MOCK_CATEGORY_SPECIALTY, MOCK_CATEGORY_VEGAN],
|
|
307
|
-
export const MOCK_PRODUCT_CHILI_GARLIC = createVariableProduct(
|
|
308
|
-
[MOCK_CATEGORY_PASTES, MOCK_CATEGORY_BASIC, MOCK_CATEGORY_SPICY, MOCK_CATEGORY_VEGAN],
|
|
309
|
-
export const MOCK_PRODUCT_HABANERO = createSimpleProduct(
|
|
310
|
-
[MOCK_CATEGORY_PASTES, MOCK_CATEGORY_SPICY, MOCK_CATEGORY_VEGAN],
|
|
311
|
-
export const MOCK_PRODUCT_BLACK_GARLIC = createSimpleProduct(
|
|
312
|
-
[MOCK_CATEGORY_PASTES, MOCK_CATEGORY_SPECIALTY, MOCK_CATEGORY_VEGAN],
|
|
295
|
+
export const MOCK_PRODUCT_BASIL_ALMOND = createSimpleProduct("prod_basil_almond", "Basil Almond Paste", 1200, basilAlmondImg, [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_SPECIALTY, MOCK_CATEGORY_VEGAN], "A rich blend of fresh basil and roasted almonds.");
|
|
296
|
+
export const MOCK_PRODUCT_BEER = createVariableProduct("prod_beer", "Beer Paste", 1500, 2500, beerImg, [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_SPECIALTY], "Unique paste infused with dark lager.");
|
|
297
|
+
export const MOCK_PRODUCT_BEET = createSimpleProduct("prod_beet", "Beet Paste", 1000, beetImg, [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_BASIC, MOCK_CATEGORY_VEGAN], "Earthy and sweet beet paste, perfect for salads.");
|
|
298
|
+
export const MOCK_PRODUCT_CARAMELIZED = createVariableProduct("prod_caramelized", "Caramelized Paste", 1400, 2200, caramelizedImg, [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_SPECIALTY, MOCK_CATEGORY_VEGAN], "Slow-cooked caramelized onion paste.");
|
|
299
|
+
export const MOCK_PRODUCT_GARLIC_ONION = createVariableProduct("prod_garlic_onion", "Garlic Onion Paste", 1100, 1800, garlicOnionImg, [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_BASIC, MOCK_CATEGORY_VEGAN], "Classic savory base for any dish.");
|
|
300
|
+
export const MOCK_PRODUCT_GARLIC = createSimpleProduct("prod_garlic", "Garlic Paste", 900, garlicImg, [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_BASIC, MOCK_CATEGORY_VEGAN], "Pure, intense garlic paste.");
|
|
301
|
+
export const MOCK_PRODUCT_GINGER_LIME = createVariableProduct("prod_ginger_lime", "Ginger Lime Paste", 1300, 2000, gingerLimeImg, [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_SPECIALTY, MOCK_CATEGORY_SPICY, MOCK_CATEGORY_VEGAN], "Zesty and spicy, great for asian cuisine.");
|
|
302
|
+
export const MOCK_PRODUCT_LEMON = createSimpleProduct("prod_lemon", "Lemon Paste", 1050, lemonImg, [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_BASIC, MOCK_CATEGORY_VEGAN], "Bright citrus flavor concentrate.");
|
|
303
|
+
export const MOCK_PRODUCT_RED_PEPPER = createVariableProduct("prod_red_pepper", "Red Pepper Paste", 1250, 1900, redPepperImg, [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_BASIC, MOCK_CATEGORY_SPICY, MOCK_CATEGORY_VEGAN], "Roasted red peppers with a hint of spice.");
|
|
304
|
+
export const MOCK_PRODUCT_ROASTED_TOMATO = createVariableProduct("prod_roasted_tomato", "Roasted Tomato Paste", 1150, 1850, roastedTomatoImg, [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_BASIC, MOCK_CATEGORY_VEGAN], "Deep, umami-rich tomato flavor.");
|
|
305
|
+
export const MOCK_PRODUCT_MINT_LEMON = createSimpleProduct("prod_mint_lemon", "Mint Lemon Paste", 1200, lemonImg, // Reusing lemon image for now
|
|
306
|
+
[MOCK_CATEGORY_PASTES, MOCK_CATEGORY_SPECIALTY, MOCK_CATEGORY_VEGAN], "Refreshing mint and lemon blend.");
|
|
307
|
+
export const MOCK_PRODUCT_CHILI_GARLIC = createVariableProduct("prod_chili_garlic", "Chili Garlic Paste", 1050, 1650, redPepperImg, // Reusing red pepper image
|
|
308
|
+
[MOCK_CATEGORY_PASTES, MOCK_CATEGORY_BASIC, MOCK_CATEGORY_SPICY, MOCK_CATEGORY_VEGAN], "Spicy garlic paste with chili flakes.");
|
|
309
|
+
export const MOCK_PRODUCT_HABANERO = createSimpleProduct("prod_habanero", "Habanero Paste", 1400, redPepperImg, // Reusing red pepper image
|
|
310
|
+
[MOCK_CATEGORY_PASTES, MOCK_CATEGORY_SPICY, MOCK_CATEGORY_VEGAN], "Extremely spicy habanero concentrate.");
|
|
311
|
+
export const MOCK_PRODUCT_BLACK_GARLIC = createSimpleProduct("prod_black_garlic", "Black Garlic Paste", 1800, garlicImg, // Reusing garlic image
|
|
312
|
+
[MOCK_CATEGORY_PASTES, MOCK_CATEGORY_SPECIALTY, MOCK_CATEGORY_VEGAN], "Fermented black garlic paste, sweet and savory.");
|
|
313
313
|
// --- ORDERS ---
|
|
314
314
|
// Helper to create line item
|
|
315
315
|
const createLineItem = (product, variantIndex = 0, quantity = 1) => {
|
|
@@ -323,30 +323,30 @@ const createLineItem = (product, variantIndex = 0, quantity = 1) => {
|
|
|
323
323
|
taxes: [],
|
|
324
324
|
discount: {
|
|
325
325
|
itemDiscounts: [],
|
|
326
|
-
cartDiscount: { percentage: 0, amount: 0 }
|
|
326
|
+
cartDiscount: { percentage: 0, amount: 0 }
|
|
327
327
|
},
|
|
328
328
|
fee: { itemFees: [] },
|
|
329
329
|
totalTax: 0,
|
|
330
330
|
total: variant.price * quantity,
|
|
331
331
|
lineNetWithFees: variant.price * quantity,
|
|
332
332
|
metadata: [],
|
|
333
|
-
image: product.images?.[0] ||
|
|
333
|
+
image: product.images?.[0] || "",
|
|
334
334
|
sku: variant.sku,
|
|
335
335
|
stock: variant.inventory?.[0]?.stock || 0,
|
|
336
|
-
attributes: variant.attributes.map(
|
|
336
|
+
attributes: variant.attributes.map(a => `${a.name}: ${a.value}`).join(", ")
|
|
337
337
|
};
|
|
338
338
|
};
|
|
339
339
|
export const MOCK_ORDER_1 = {
|
|
340
|
-
_id:
|
|
340
|
+
_id: "order_1001",
|
|
341
341
|
currency: CurrencyCode.USD,
|
|
342
342
|
minorUnits: 2,
|
|
343
|
-
receiptId:
|
|
343
|
+
receiptId: "1001-0001",
|
|
344
344
|
companyId: MOCK_COMPANY.id,
|
|
345
345
|
externalId: null,
|
|
346
|
-
status:
|
|
347
|
-
paymentState:
|
|
348
|
-
fulfillmentState:
|
|
349
|
-
displayState:
|
|
346
|
+
status: "completed",
|
|
347
|
+
paymentState: "paid",
|
|
348
|
+
fulfillmentState: "fulfilled",
|
|
349
|
+
displayState: "Completed",
|
|
350
350
|
customer: MOCK_CUSTOMER_1,
|
|
351
351
|
summary: {
|
|
352
352
|
total: 2100,
|
|
@@ -355,26 +355,26 @@ export const MOCK_ORDER_1 = {
|
|
|
355
355
|
shippingTotal: 0,
|
|
356
356
|
totalTaxes: 0,
|
|
357
357
|
taxes: [],
|
|
358
|
-
isTaxInclusive: false
|
|
358
|
+
isTaxInclusive: false
|
|
359
359
|
},
|
|
360
360
|
cartDiscount: null,
|
|
361
361
|
cartFees: [],
|
|
362
362
|
paymentMethods: [
|
|
363
363
|
{
|
|
364
|
-
transactionId:
|
|
365
|
-
paymentType:
|
|
364
|
+
transactionId: "trans_cash_1",
|
|
365
|
+
paymentType: "cash",
|
|
366
366
|
amount: 2100,
|
|
367
367
|
timestamp: new Date().toISOString(),
|
|
368
|
-
processor:
|
|
369
|
-
}
|
|
368
|
+
processor: "cash"
|
|
369
|
+
}
|
|
370
370
|
],
|
|
371
|
-
source:
|
|
371
|
+
source: "pos",
|
|
372
372
|
posData: {
|
|
373
373
|
outlet: MOCK_OUTLET_MAIN.id,
|
|
374
374
|
station: MOCK_STATION_1._id,
|
|
375
|
-
employee: MOCK_USER_LUIGI.id
|
|
375
|
+
employee: MOCK_USER_LUIGI.id
|
|
376
376
|
},
|
|
377
|
-
sessionId:
|
|
377
|
+
sessionId: "sess_1",
|
|
378
378
|
metadata: [],
|
|
379
379
|
billing: MOCK_CUSTOMER_1.billing || null,
|
|
380
380
|
shipping: null,
|
|
@@ -384,19 +384,19 @@ export const MOCK_ORDER_1 = {
|
|
|
384
384
|
user: MOCK_USER_LUIGI,
|
|
385
385
|
outlet: MOCK_OUTLET_MAIN,
|
|
386
386
|
station: MOCK_STATION_1,
|
|
387
|
-
createdAt: new Date().toISOString()
|
|
387
|
+
createdAt: new Date().toISOString()
|
|
388
388
|
};
|
|
389
389
|
export const MOCK_ORDER_2 = {
|
|
390
|
-
_id:
|
|
390
|
+
_id: "order_1002",
|
|
391
391
|
currency: CurrencyCode.USD,
|
|
392
392
|
minorUnits: 2,
|
|
393
|
-
receiptId:
|
|
393
|
+
receiptId: "1001-0002",
|
|
394
394
|
companyId: MOCK_COMPANY.id,
|
|
395
395
|
externalId: null,
|
|
396
|
-
status:
|
|
397
|
-
paymentState:
|
|
398
|
-
fulfillmentState:
|
|
399
|
-
displayState:
|
|
396
|
+
status: "completed",
|
|
397
|
+
paymentState: "paid",
|
|
398
|
+
fulfillmentState: "fulfilled",
|
|
399
|
+
displayState: "Completed",
|
|
400
400
|
customer: MOCK_CUSTOMER_2,
|
|
401
401
|
summary: {
|
|
402
402
|
total: 3000,
|
|
@@ -405,26 +405,26 @@ export const MOCK_ORDER_2 = {
|
|
|
405
405
|
shippingTotal: 0,
|
|
406
406
|
totalTaxes: 0,
|
|
407
407
|
taxes: [],
|
|
408
|
-
isTaxInclusive: false
|
|
408
|
+
isTaxInclusive: false
|
|
409
409
|
},
|
|
410
410
|
cartDiscount: null,
|
|
411
411
|
cartFees: [],
|
|
412
412
|
paymentMethods: [
|
|
413
413
|
{
|
|
414
|
-
transactionId:
|
|
415
|
-
paymentType:
|
|
414
|
+
transactionId: "trans_card_1",
|
|
415
|
+
paymentType: "credit_card",
|
|
416
416
|
amount: 3000,
|
|
417
417
|
timestamp: new Date(Date.now() - 3600000).toISOString(),
|
|
418
|
-
processor:
|
|
419
|
-
}
|
|
418
|
+
processor: "stripe"
|
|
419
|
+
}
|
|
420
420
|
],
|
|
421
|
-
source:
|
|
421
|
+
source: "pos",
|
|
422
422
|
posData: {
|
|
423
423
|
outlet: MOCK_OUTLET_MAIN.id,
|
|
424
424
|
station: MOCK_STATION_2._id,
|
|
425
|
-
employee: MOCK_USER_MARIO.id
|
|
425
|
+
employee: MOCK_USER_MARIO.id
|
|
426
426
|
},
|
|
427
|
-
sessionId:
|
|
427
|
+
sessionId: "sess_2",
|
|
428
428
|
metadata: [],
|
|
429
429
|
billing: null,
|
|
430
430
|
shipping: null,
|
|
@@ -434,19 +434,19 @@ export const MOCK_ORDER_2 = {
|
|
|
434
434
|
user: MOCK_USER_MARIO,
|
|
435
435
|
outlet: MOCK_OUTLET_MAIN,
|
|
436
436
|
station: MOCK_STATION_2,
|
|
437
|
-
createdAt: new Date(Date.now() - 3600000).toISOString()
|
|
437
|
+
createdAt: new Date(Date.now() - 3600000).toISOString()
|
|
438
438
|
};
|
|
439
439
|
export const MOCK_ORDER_3 = {
|
|
440
|
-
_id:
|
|
440
|
+
_id: "order_1003",
|
|
441
441
|
currency: CurrencyCode.USD,
|
|
442
442
|
minorUnits: 2,
|
|
443
|
-
receiptId:
|
|
443
|
+
receiptId: "1001-0003",
|
|
444
444
|
companyId: MOCK_COMPANY.id,
|
|
445
445
|
externalId: null,
|
|
446
|
-
status:
|
|
447
|
-
paymentState:
|
|
448
|
-
fulfillmentState:
|
|
449
|
-
displayState:
|
|
446
|
+
status: "refunded",
|
|
447
|
+
paymentState: "refunded",
|
|
448
|
+
fulfillmentState: "fulfilled",
|
|
449
|
+
displayState: "Refunded",
|
|
450
450
|
customer: MOCK_CUSTOMER_3,
|
|
451
451
|
summary: {
|
|
452
452
|
total: 1500,
|
|
@@ -455,26 +455,26 @@ export const MOCK_ORDER_3 = {
|
|
|
455
455
|
shippingTotal: 0,
|
|
456
456
|
totalTaxes: 0,
|
|
457
457
|
taxes: [],
|
|
458
|
-
isTaxInclusive: false
|
|
458
|
+
isTaxInclusive: false
|
|
459
459
|
},
|
|
460
460
|
cartDiscount: null,
|
|
461
461
|
cartFees: [],
|
|
462
462
|
paymentMethods: [
|
|
463
463
|
{
|
|
464
|
-
transactionId:
|
|
465
|
-
paymentType:
|
|
464
|
+
transactionId: "trans_card_2",
|
|
465
|
+
paymentType: "credit_card",
|
|
466
466
|
amount: 1500,
|
|
467
467
|
timestamp: new Date(Date.now() - 7200000).toISOString(),
|
|
468
|
-
processor:
|
|
469
|
-
}
|
|
468
|
+
processor: "stripe"
|
|
469
|
+
}
|
|
470
470
|
],
|
|
471
|
-
source:
|
|
471
|
+
source: "pos",
|
|
472
472
|
posData: {
|
|
473
473
|
outlet: MOCK_OUTLET_MAIN.id,
|
|
474
474
|
station: MOCK_STATION_1._id,
|
|
475
|
-
employee: MOCK_USER_MARIO.id
|
|
475
|
+
employee: MOCK_USER_MARIO.id
|
|
476
476
|
},
|
|
477
|
-
sessionId:
|
|
477
|
+
sessionId: "sess_3",
|
|
478
478
|
metadata: [],
|
|
479
479
|
billing: null,
|
|
480
480
|
shipping: null,
|
|
@@ -484,72 +484,19 @@ export const MOCK_ORDER_3 = {
|
|
|
484
484
|
user: MOCK_USER_MARIO,
|
|
485
485
|
outlet: MOCK_OUTLET_MAIN,
|
|
486
486
|
station: MOCK_STATION_1,
|
|
487
|
-
createdAt: new Date(Date.now() - 7200000).toISOString()
|
|
488
|
-
};
|
|
489
|
-
// Open order with one captured deposit leg — voidable via the refund branch
|
|
490
|
-
// (demoes voidOrder's `refunded` outcome). Copied from MOCK_ORDER_1, id/state/
|
|
491
|
-
// paymentMethods changed.
|
|
492
|
-
export const MOCK_ORDER_4 = {
|
|
493
|
-
_id: 'order_1004',
|
|
494
|
-
currency: CurrencyCode.USD,
|
|
495
|
-
minorUnits: 2,
|
|
496
|
-
receiptId: '1001-0004',
|
|
497
|
-
companyId: MOCK_COMPANY.id,
|
|
498
|
-
externalId: null,
|
|
499
|
-
status: 'in_progress',
|
|
500
|
-
paymentState: 'partially_paid',
|
|
501
|
-
fulfillmentState: 'pending',
|
|
502
|
-
displayState: 'Partially Paid',
|
|
503
|
-
customer: MOCK_CUSTOMER_5,
|
|
504
|
-
summary: {
|
|
505
|
-
total: 2500,
|
|
506
|
-
subtotalAfterFees: 2500,
|
|
507
|
-
discountTotal: 0,
|
|
508
|
-
shippingTotal: 0,
|
|
509
|
-
totalTaxes: 0,
|
|
510
|
-
taxes: [],
|
|
511
|
-
isTaxInclusive: false,
|
|
512
|
-
},
|
|
513
|
-
cartDiscount: null,
|
|
514
|
-
cartFees: [],
|
|
515
|
-
paymentMethods: [
|
|
516
|
-
{
|
|
517
|
-
transactionId: 'trans_cash_2',
|
|
518
|
-
paymentType: 'cash',
|
|
519
|
-
amount: 1000,
|
|
520
|
-
timestamp: new Date(Date.now() - 600000).toISOString(),
|
|
521
|
-
processor: 'cash',
|
|
522
|
-
},
|
|
523
|
-
],
|
|
524
|
-
source: 'pos',
|
|
525
|
-
posData: {
|
|
526
|
-
outlet: MOCK_OUTLET_MAIN.id,
|
|
527
|
-
station: MOCK_STATION_2._id,
|
|
528
|
-
employee: MOCK_USER_MARIO.id,
|
|
529
|
-
},
|
|
530
|
-
sessionId: 'sess_4',
|
|
531
|
-
metadata: [],
|
|
532
|
-
billing: null,
|
|
533
|
-
shipping: null,
|
|
534
|
-
lineItems: [createLineItem(MOCK_PRODUCT_RED_PEPPER, 0, 1)],
|
|
535
|
-
customSales: [],
|
|
536
|
-
balance: 1500,
|
|
537
|
-
user: MOCK_USER_MARIO,
|
|
538
|
-
outlet: MOCK_OUTLET_MAIN,
|
|
539
|
-
station: MOCK_STATION_2,
|
|
540
|
-
createdAt: new Date(Date.now() - 600000).toISOString(),
|
|
487
|
+
createdAt: new Date(Date.now() - 7200000).toISOString()
|
|
541
488
|
};
|
|
542
489
|
export const MOCK_PARKED_ORDER_1 = {
|
|
543
|
-
_id:
|
|
490
|
+
_id: "parked_2001",
|
|
544
491
|
currency: CurrencyCode.USD,
|
|
545
492
|
minorUnits: 2,
|
|
546
|
-
receiptId:
|
|
493
|
+
receiptId: "PARK-0001",
|
|
547
494
|
companyId: MOCK_COMPANY.id,
|
|
548
495
|
externalId: null,
|
|
549
|
-
status:
|
|
550
|
-
paymentState:
|
|
551
|
-
fulfillmentState:
|
|
552
|
-
displayState:
|
|
496
|
+
status: "parked",
|
|
497
|
+
paymentState: "unpaid",
|
|
498
|
+
fulfillmentState: "pending",
|
|
499
|
+
displayState: "Parked",
|
|
553
500
|
customer: MOCK_CUSTOMER_4,
|
|
554
501
|
summary: {
|
|
555
502
|
total: 2100,
|
|
@@ -558,18 +505,18 @@ export const MOCK_PARKED_ORDER_1 = {
|
|
|
558
505
|
shippingTotal: 0,
|
|
559
506
|
totalTaxes: 0,
|
|
560
507
|
taxes: [],
|
|
561
|
-
isTaxInclusive: false
|
|
508
|
+
isTaxInclusive: false
|
|
562
509
|
},
|
|
563
510
|
cartDiscount: null,
|
|
564
511
|
cartFees: [],
|
|
565
512
|
paymentMethods: [],
|
|
566
|
-
source:
|
|
513
|
+
source: "pos",
|
|
567
514
|
posData: {
|
|
568
515
|
outlet: MOCK_OUTLET_MAIN.id,
|
|
569
516
|
station: MOCK_STATION_1._id,
|
|
570
|
-
employee: MOCK_USER_LUIGI.id
|
|
517
|
+
employee: MOCK_USER_LUIGI.id
|
|
571
518
|
},
|
|
572
|
-
sessionId:
|
|
519
|
+
sessionId: "sess_park_1",
|
|
573
520
|
metadata: [],
|
|
574
521
|
billing: null,
|
|
575
522
|
shipping: null,
|
|
@@ -579,19 +526,19 @@ export const MOCK_PARKED_ORDER_1 = {
|
|
|
579
526
|
user: MOCK_USER_LUIGI,
|
|
580
527
|
outlet: MOCK_OUTLET_MAIN,
|
|
581
528
|
station: MOCK_STATION_1,
|
|
582
|
-
createdAt: new Date(Date.now() - 1800000).toISOString()
|
|
529
|
+
createdAt: new Date(Date.now() - 1800000).toISOString()
|
|
583
530
|
};
|
|
584
531
|
export const MOCK_PARKED_ORDER_2 = {
|
|
585
|
-
_id:
|
|
532
|
+
_id: "parked_2002",
|
|
586
533
|
currency: CurrencyCode.USD,
|
|
587
534
|
minorUnits: 2,
|
|
588
|
-
receiptId:
|
|
535
|
+
receiptId: "PARK-0002",
|
|
589
536
|
companyId: MOCK_COMPANY.id,
|
|
590
537
|
externalId: null,
|
|
591
|
-
status:
|
|
592
|
-
paymentState:
|
|
593
|
-
fulfillmentState:
|
|
594
|
-
displayState:
|
|
538
|
+
status: "parked",
|
|
539
|
+
paymentState: "unpaid",
|
|
540
|
+
fulfillmentState: "pending",
|
|
541
|
+
displayState: "Parked",
|
|
595
542
|
customer: null,
|
|
596
543
|
summary: {
|
|
597
544
|
total: 2500,
|
|
@@ -600,18 +547,18 @@ export const MOCK_PARKED_ORDER_2 = {
|
|
|
600
547
|
shippingTotal: 0,
|
|
601
548
|
totalTaxes: 0,
|
|
602
549
|
taxes: [],
|
|
603
|
-
isTaxInclusive: false
|
|
550
|
+
isTaxInclusive: false
|
|
604
551
|
},
|
|
605
552
|
cartDiscount: null,
|
|
606
553
|
cartFees: [],
|
|
607
554
|
paymentMethods: [],
|
|
608
|
-
source:
|
|
555
|
+
source: "pos",
|
|
609
556
|
posData: {
|
|
610
557
|
outlet: MOCK_OUTLET_MAIN.id,
|
|
611
558
|
station: MOCK_STATION_2._id,
|
|
612
|
-
employee: MOCK_USER_MARIO.id
|
|
559
|
+
employee: MOCK_USER_MARIO.id
|
|
613
560
|
},
|
|
614
|
-
sessionId:
|
|
561
|
+
sessionId: "sess_park_2",
|
|
615
562
|
metadata: [],
|
|
616
563
|
billing: null,
|
|
617
564
|
shipping: null,
|
|
@@ -621,20 +568,14 @@ export const MOCK_PARKED_ORDER_2 = {
|
|
|
621
568
|
user: MOCK_USER_MARIO,
|
|
622
569
|
outlet: MOCK_OUTLET_MAIN,
|
|
623
570
|
station: MOCK_STATION_2,
|
|
624
|
-
createdAt: new Date(Date.now() - 900000).toISOString()
|
|
571
|
+
createdAt: new Date(Date.now() - 900000).toISOString()
|
|
625
572
|
};
|
|
626
573
|
// --- EXPORT COLLECTIONS ---
|
|
627
574
|
export const MOCK_USERS = [MOCK_USER_MARIO, MOCK_USER_LUIGI];
|
|
628
575
|
export const MOCK_STATIONS = [MOCK_STATION_1, MOCK_STATION_2];
|
|
629
576
|
export const MOCK_OUTLETS = [MOCK_OUTLET_MAIN];
|
|
630
577
|
export const MOCK_CUSTOMERS = [MOCK_CUSTOMER_1, MOCK_CUSTOMER_2, MOCK_CUSTOMER_3, MOCK_CUSTOMER_4, MOCK_CUSTOMER_5];
|
|
631
|
-
export const MOCK_CATEGORIES = [
|
|
632
|
-
MOCK_CATEGORY_PASTES,
|
|
633
|
-
MOCK_CATEGORY_SPECIALTY,
|
|
634
|
-
MOCK_CATEGORY_BASIC,
|
|
635
|
-
MOCK_CATEGORY_VEGAN,
|
|
636
|
-
MOCK_CATEGORY_SPICY,
|
|
637
|
-
];
|
|
578
|
+
export const MOCK_CATEGORIES = [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_SPECIALTY, MOCK_CATEGORY_BASIC, MOCK_CATEGORY_VEGAN, MOCK_CATEGORY_SPICY];
|
|
638
579
|
export const MOCK_PRODUCTS = [
|
|
639
580
|
MOCK_PRODUCT_BASIL_ALMOND,
|
|
640
581
|
MOCK_PRODUCT_BEER,
|
|
@@ -649,9 +590,9 @@ export const MOCK_PRODUCTS = [
|
|
|
649
590
|
MOCK_PRODUCT_MINT_LEMON,
|
|
650
591
|
MOCK_PRODUCT_CHILI_GARLIC,
|
|
651
592
|
MOCK_PRODUCT_HABANERO,
|
|
652
|
-
MOCK_PRODUCT_BLACK_GARLIC
|
|
593
|
+
MOCK_PRODUCT_BLACK_GARLIC
|
|
653
594
|
];
|
|
654
|
-
export const MOCK_ORDERS = [MOCK_ORDER_1, MOCK_ORDER_2, MOCK_ORDER_3
|
|
595
|
+
export const MOCK_ORDERS = [MOCK_ORDER_1, MOCK_ORDER_2, MOCK_ORDER_3];
|
|
655
596
|
export const MOCK_PARKED_ORDERS = [MOCK_PARKED_ORDER_1, MOCK_PARKED_ORDER_2];
|
|
656
597
|
// Compatibility Exports (reassigned by setMockDatabase)
|
|
657
598
|
export let MOCK_USER = MOCK_USERS[0];
|
|
@@ -665,7 +606,7 @@ export let MOCK_CART = {
|
|
|
665
606
|
products: [],
|
|
666
607
|
customSales: [],
|
|
667
608
|
nonRevenueItems: [],
|
|
668
|
-
customer: null
|
|
609
|
+
customer: null
|
|
669
610
|
};
|
|
670
611
|
export let MOCK_ACTIVE_PRODUCT;
|
|
671
612
|
export const setMockActiveProduct = (activeProduct) => {
|
|
@@ -685,13 +626,13 @@ export const resetMockCart = () => {
|
|
|
685
626
|
products: [],
|
|
686
627
|
customSales: [],
|
|
687
628
|
nonRevenueItems: [],
|
|
688
|
-
customer: null
|
|
629
|
+
customer: null
|
|
689
630
|
};
|
|
690
631
|
};
|
|
691
632
|
function resolveMockOrderCurrency() {
|
|
692
633
|
const settings = MOCK_COMPANY.settings;
|
|
693
634
|
const raw = settings?.currency;
|
|
694
|
-
if (typeof raw ===
|
|
635
|
+
if (typeof raw === "string" && Object.values(CurrencyCode).includes(raw)) {
|
|
695
636
|
return raw;
|
|
696
637
|
}
|
|
697
638
|
return CurrencyCode.USD;
|
|
@@ -750,15 +691,16 @@ export const safeSerialize = (data) => {
|
|
|
750
691
|
return JSON.parse(JSON.stringify(data));
|
|
751
692
|
};
|
|
752
693
|
const mockTopicSubscribers = {};
|
|
694
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
753
695
|
export const mockPublishEvent = (topic, eventType, data) => {
|
|
754
696
|
const subscribers = mockTopicSubscribers[topic] || [];
|
|
755
697
|
const event = {
|
|
756
698
|
topic,
|
|
757
699
|
type: eventType,
|
|
758
700
|
data,
|
|
759
|
-
timestamp: new Date().toISOString()
|
|
701
|
+
timestamp: new Date().toISOString()
|
|
760
702
|
};
|
|
761
|
-
subscribers.forEach(
|
|
703
|
+
subscribers.forEach(callback => {
|
|
762
704
|
try {
|
|
763
705
|
callback(event);
|
|
764
706
|
}
|
|
@@ -774,16 +716,16 @@ export const mockSubscribeToTopic = (topic, callback) => {
|
|
|
774
716
|
mockTopicSubscribers[topic].push(callback);
|
|
775
717
|
};
|
|
776
718
|
// Helper to create order from cart
|
|
777
|
-
export const createOrderFromCart = (paymentType, amount, processor =
|
|
719
|
+
export const createOrderFromCart = (paymentType, amount, processor = "cash") => {
|
|
778
720
|
const primaryOutlet = MOCK_OUTLETS[0] ?? MOCK_OUTLET_MAIN;
|
|
779
721
|
const primaryStation = MOCK_STATIONS[0] ?? MOCK_STATION;
|
|
780
|
-
const employeeUser = MOCK_USERS.find(
|
|
722
|
+
const employeeUser = MOCK_USERS.find(u => u.type === CFUserTypes.CASHIER) ?? MOCK_USERS[0] ?? MOCK_USER;
|
|
781
723
|
const orderCurrency = resolveMockOrderCurrency();
|
|
782
724
|
// Generate new Order ID
|
|
783
725
|
const orderId = `order_${Date.now()}`;
|
|
784
726
|
const receiptId = `receipt_${Date.now()}`;
|
|
785
727
|
// Map cart products to line items
|
|
786
|
-
const lineItems = MOCK_CART.products.map(
|
|
728
|
+
const lineItems = MOCK_CART.products.map(p => {
|
|
787
729
|
return {
|
|
788
730
|
productId: p.id,
|
|
789
731
|
variantId: p.variantId,
|
|
@@ -793,17 +735,17 @@ export const createOrderFromCart = (paymentType, amount, processor = 'cash') =>
|
|
|
793
735
|
taxes: [],
|
|
794
736
|
discount: {
|
|
795
737
|
itemDiscounts: [],
|
|
796
|
-
cartDiscount: { percentage: 0, amount: 0 }
|
|
738
|
+
cartDiscount: { percentage: 0, amount: 0 }
|
|
797
739
|
},
|
|
798
740
|
fee: { itemFees: [] },
|
|
799
741
|
totalTax: 0,
|
|
800
742
|
total: p.price * p.quantity,
|
|
801
743
|
lineNetWithFees: p.price * p.quantity,
|
|
802
744
|
metadata: [],
|
|
803
|
-
image: p.images?.[0] ||
|
|
804
|
-
sku: p.sku ||
|
|
745
|
+
image: p.images?.[0] || "",
|
|
746
|
+
sku: p.sku || "",
|
|
805
747
|
stock: 100,
|
|
806
|
-
attributes: p.attributes ||
|
|
748
|
+
attributes: p.attributes || ""
|
|
807
749
|
};
|
|
808
750
|
});
|
|
809
751
|
const totalNum = MOCK_CART.total;
|
|
@@ -814,10 +756,10 @@ export const createOrderFromCart = (paymentType, amount, processor = 'cash') =>
|
|
|
814
756
|
receiptId,
|
|
815
757
|
companyId: MOCK_COMPANY.id,
|
|
816
758
|
externalId: null,
|
|
817
|
-
status:
|
|
818
|
-
paymentState:
|
|
819
|
-
fulfillmentState:
|
|
820
|
-
displayState:
|
|
759
|
+
status: "completed",
|
|
760
|
+
paymentState: "paid",
|
|
761
|
+
fulfillmentState: "fulfilled",
|
|
762
|
+
displayState: "Completed",
|
|
821
763
|
customer: MOCK_CART.customer ? MOCK_CART.customer : null,
|
|
822
764
|
summary: {
|
|
823
765
|
total: totalNum,
|
|
@@ -826,11 +768,9 @@ export const createOrderFromCart = (paymentType, amount, processor = 'cash') =>
|
|
|
826
768
|
shippingTotal: 0,
|
|
827
769
|
totalTaxes: 0,
|
|
828
770
|
taxes: [],
|
|
829
|
-
isTaxInclusive: false
|
|
771
|
+
isTaxInclusive: false
|
|
830
772
|
},
|
|
831
|
-
cartDiscount: MOCK_CART.discount
|
|
832
|
-
? { label: MOCK_CART.discount.label || 'Discount', amount: 0, percentage: MOCK_CART.discount.value }
|
|
833
|
-
: null,
|
|
773
|
+
cartDiscount: MOCK_CART.discount ? { label: MOCK_CART.discount.label || "Discount", amount: 0, percentage: MOCK_CART.discount.value } : null,
|
|
834
774
|
cartFees: [],
|
|
835
775
|
paymentMethods: [
|
|
836
776
|
{
|
|
@@ -838,14 +778,14 @@ export const createOrderFromCart = (paymentType, amount, processor = 'cash') =>
|
|
|
838
778
|
paymentType,
|
|
839
779
|
amount,
|
|
840
780
|
timestamp: new Date().toISOString(),
|
|
841
|
-
processor
|
|
842
|
-
}
|
|
781
|
+
processor
|
|
782
|
+
}
|
|
843
783
|
],
|
|
844
|
-
source:
|
|
784
|
+
source: "pos",
|
|
845
785
|
posData: {
|
|
846
786
|
outlet: primaryOutlet.id,
|
|
847
787
|
station: primaryStation._id,
|
|
848
|
-
employee: employeeUser.id
|
|
788
|
+
employee: employeeUser.id
|
|
849
789
|
},
|
|
850
790
|
sessionId: `session_${Date.now()}`,
|
|
851
791
|
metadata: [],
|
|
@@ -857,12 +797,12 @@ export const createOrderFromCart = (paymentType, amount, processor = 'cash') =>
|
|
|
857
797
|
user: employeeUser,
|
|
858
798
|
outlet: primaryOutlet,
|
|
859
799
|
station: primaryStation,
|
|
860
|
-
createdAt: new Date().toISOString()
|
|
800
|
+
createdAt: new Date().toISOString()
|
|
861
801
|
};
|
|
862
802
|
MOCK_ORDERS.push(newOrder);
|
|
863
803
|
resetMockCart();
|
|
864
804
|
// Publish cart-created event after cart is reset (simulates new empty cart)
|
|
865
|
-
mockPublishEvent(
|
|
805
|
+
mockPublishEvent("cart", "cart-created", {});
|
|
866
806
|
return newOrder;
|
|
867
807
|
};
|
|
868
808
|
/**
|
|
@@ -871,7 +811,7 @@ export const createOrderFromCart = (paymentType, amount, processor = 'cash') =>
|
|
|
871
811
|
* (creates the order, resets the cart, returns it). Otherwise the cart stays
|
|
872
812
|
* open with `amountToBeCharged` reset to what's left, and returns null.
|
|
873
813
|
*/
|
|
874
|
-
export const applyMockPayment = (amount, paymentType, processor =
|
|
814
|
+
export const applyMockPayment = (amount, paymentType, processor = "cash") => {
|
|
875
815
|
const remainingBefore = MOCK_CART.remainingBalance ?? MOCK_CART.total;
|
|
876
816
|
const charge = Math.min(Math.max(0, amount || remainingBefore), remainingBefore);
|
|
877
817
|
const remainingAfter = Math.max(0, remainingBefore - charge);
|
|
@@ -879,12 +819,12 @@ export const applyMockPayment = (amount, paymentType, processor = 'cash') => {
|
|
|
879
819
|
// Partial payment — keep the cart open, queue the rest for the next tender.
|
|
880
820
|
MOCK_CART.remainingBalance = remainingAfter;
|
|
881
821
|
MOCK_CART.amountToBeCharged = remainingAfter;
|
|
882
|
-
mockPublishEvent(
|
|
822
|
+
mockPublishEvent("cart", "partial-payment-applied", { charged: charge, remaining: remainingAfter });
|
|
883
823
|
return null;
|
|
884
824
|
}
|
|
885
825
|
// Fully paid — create the completed order (this also resets the cart).
|
|
886
826
|
const orderTotal = MOCK_CART.total;
|
|
887
827
|
const order = createOrderFromCart(paymentType, orderTotal, processor);
|
|
888
|
-
mockPublishEvent(
|
|
828
|
+
mockPublishEvent("payments", "payment-done", { order });
|
|
889
829
|
return order;
|
|
890
830
|
};
|