@final-commerce/command-frame 0.3.2-preprod.1 → 0.4.1-preprod.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 +47 -50
- package/dist/actions/apply-transition/mock.d.ts +1 -1
- package/dist/actions/apply-transition/mock.js +8 -18
- package/dist/actions/apply-transition/types.d.ts +6 -4
- package/dist/actions/extension-payment/types.d.ts +2 -2
- package/dist/actions/get-available-transitions/mock.d.ts +5 -3
- package/dist/actions/get-available-transitions/mock.js +24 -12
- package/dist/actions/get-refund-plan/action.d.ts +6 -0
- package/dist/actions/get-refund-plan/action.js +8 -0
- package/dist/actions/get-refund-plan/mock.d.ts +14 -0
- package/dist/actions/get-refund-plan/mock.js +59 -0
- package/dist/actions/get-refund-plan/types.d.ts +32 -0
- package/dist/actions/get-refund-plan/types.js +7 -0
- package/dist/actions/integration-payment/types.d.ts +2 -0
- package/dist/actions/partial-payment/types.d.ts +2 -2
- package/dist/actions/process-partial-refund/mock.js +9 -1
- package/dist/actions/process-partial-refund/types.d.ts +99 -1
- package/dist/actions/redeem-payment/types.d.ts +2 -0
- package/dist/actions/redeem-refund/action.d.ts +6 -0
- package/dist/actions/redeem-refund/action.js +8 -0
- package/dist/actions/redeem-refund/mock.d.ts +2 -0
- package/dist/actions/redeem-refund/mock.js +59 -0
- package/dist/actions/redeem-refund/types.d.ts +39 -0
- package/dist/actions/redeem-refund/types.js +2 -0
- package/dist/actions/terminal-payment/types.d.ts +3 -3
- package/dist/demo/database.d.ts +2 -2
- package/dist/demo/database.js +271 -264
- package/dist/index.d.ts +4 -0
- package/dist/index.js +4 -0
- package/dist/projects/render/mocks.js +6 -0
- package/dist/projects/render/types.d.ts +4 -1
- package/dist/pubsub/topics/orders/index.d.ts +2 -2
- package/dist/pubsub/topics/orders/index.js +27 -27
- package/dist/pubsub/topics/orders/types.d.ts +15 -15
- package/dist/pubsub/topics/orders/types.js +7 -7
- package/package.json +1 -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 } from
|
|
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(c => ({ name: c.name, externalId: c.externalId ?? c.id })),
|
|
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(c => ({ name: c.name, externalId: c.externalId ?? c.id })),
|
|
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(a => `${a.name}: ${a.value}`).join(
|
|
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,22 +484,22 @@ 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()
|
|
487
|
+
createdAt: new Date(Date.now() - 7200000).toISOString(),
|
|
488
488
|
};
|
|
489
489
|
// Open order with one captured deposit leg — voidable via the refund branch
|
|
490
490
|
// (demoes voidOrder's `refunded` outcome). Copied from MOCK_ORDER_1, id/state/
|
|
491
491
|
// paymentMethods changed.
|
|
492
492
|
export const MOCK_ORDER_4 = {
|
|
493
|
-
_id:
|
|
493
|
+
_id: 'order_1004',
|
|
494
494
|
currency: CurrencyCode.USD,
|
|
495
495
|
minorUnits: 2,
|
|
496
|
-
receiptId:
|
|
496
|
+
receiptId: '1001-0004',
|
|
497
497
|
companyId: MOCK_COMPANY.id,
|
|
498
498
|
externalId: null,
|
|
499
|
-
status:
|
|
500
|
-
paymentState:
|
|
501
|
-
fulfillmentState:
|
|
502
|
-
displayState:
|
|
499
|
+
status: 'in_progress',
|
|
500
|
+
paymentState: 'partially_paid',
|
|
501
|
+
fulfillmentState: 'pending',
|
|
502
|
+
displayState: 'Partially Paid',
|
|
503
503
|
customer: MOCK_CUSTOMER_5,
|
|
504
504
|
summary: {
|
|
505
505
|
total: 2500,
|
|
@@ -508,26 +508,26 @@ export const MOCK_ORDER_4 = {
|
|
|
508
508
|
shippingTotal: 0,
|
|
509
509
|
totalTaxes: 0,
|
|
510
510
|
taxes: [],
|
|
511
|
-
isTaxInclusive: false
|
|
511
|
+
isTaxInclusive: false,
|
|
512
512
|
},
|
|
513
513
|
cartDiscount: null,
|
|
514
514
|
cartFees: [],
|
|
515
515
|
paymentMethods: [
|
|
516
516
|
{
|
|
517
|
-
transactionId:
|
|
518
|
-
paymentType:
|
|
517
|
+
transactionId: 'trans_cash_2',
|
|
518
|
+
paymentType: 'cash',
|
|
519
519
|
amount: 1000,
|
|
520
520
|
timestamp: new Date(Date.now() - 600000).toISOString(),
|
|
521
|
-
processor:
|
|
522
|
-
}
|
|
521
|
+
processor: 'cash',
|
|
522
|
+
},
|
|
523
523
|
],
|
|
524
|
-
source:
|
|
524
|
+
source: 'pos',
|
|
525
525
|
posData: {
|
|
526
526
|
outlet: MOCK_OUTLET_MAIN.id,
|
|
527
527
|
station: MOCK_STATION_2._id,
|
|
528
|
-
employee: MOCK_USER_MARIO.id
|
|
528
|
+
employee: MOCK_USER_MARIO.id,
|
|
529
529
|
},
|
|
530
|
-
sessionId:
|
|
530
|
+
sessionId: 'sess_4',
|
|
531
531
|
metadata: [],
|
|
532
532
|
billing: null,
|
|
533
533
|
shipping: null,
|
|
@@ -537,19 +537,19 @@ export const MOCK_ORDER_4 = {
|
|
|
537
537
|
user: MOCK_USER_MARIO,
|
|
538
538
|
outlet: MOCK_OUTLET_MAIN,
|
|
539
539
|
station: MOCK_STATION_2,
|
|
540
|
-
createdAt: new Date(Date.now() - 600000).toISOString()
|
|
540
|
+
createdAt: new Date(Date.now() - 600000).toISOString(),
|
|
541
541
|
};
|
|
542
542
|
export const MOCK_PARKED_ORDER_1 = {
|
|
543
|
-
_id:
|
|
543
|
+
_id: 'parked_2001',
|
|
544
544
|
currency: CurrencyCode.USD,
|
|
545
545
|
minorUnits: 2,
|
|
546
|
-
receiptId:
|
|
546
|
+
receiptId: 'PARK-0001',
|
|
547
547
|
companyId: MOCK_COMPANY.id,
|
|
548
548
|
externalId: null,
|
|
549
|
-
status:
|
|
550
|
-
paymentState:
|
|
551
|
-
fulfillmentState:
|
|
552
|
-
displayState:
|
|
549
|
+
status: 'parked',
|
|
550
|
+
paymentState: 'unpaid',
|
|
551
|
+
fulfillmentState: 'pending',
|
|
552
|
+
displayState: 'Parked',
|
|
553
553
|
customer: MOCK_CUSTOMER_4,
|
|
554
554
|
summary: {
|
|
555
555
|
total: 2100,
|
|
@@ -558,18 +558,18 @@ export const MOCK_PARKED_ORDER_1 = {
|
|
|
558
558
|
shippingTotal: 0,
|
|
559
559
|
totalTaxes: 0,
|
|
560
560
|
taxes: [],
|
|
561
|
-
isTaxInclusive: false
|
|
561
|
+
isTaxInclusive: false,
|
|
562
562
|
},
|
|
563
563
|
cartDiscount: null,
|
|
564
564
|
cartFees: [],
|
|
565
565
|
paymentMethods: [],
|
|
566
|
-
source:
|
|
566
|
+
source: 'pos',
|
|
567
567
|
posData: {
|
|
568
568
|
outlet: MOCK_OUTLET_MAIN.id,
|
|
569
569
|
station: MOCK_STATION_1._id,
|
|
570
|
-
employee: MOCK_USER_LUIGI.id
|
|
570
|
+
employee: MOCK_USER_LUIGI.id,
|
|
571
571
|
},
|
|
572
|
-
sessionId:
|
|
572
|
+
sessionId: 'sess_park_1',
|
|
573
573
|
metadata: [],
|
|
574
574
|
billing: null,
|
|
575
575
|
shipping: null,
|
|
@@ -579,19 +579,19 @@ export const MOCK_PARKED_ORDER_1 = {
|
|
|
579
579
|
user: MOCK_USER_LUIGI,
|
|
580
580
|
outlet: MOCK_OUTLET_MAIN,
|
|
581
581
|
station: MOCK_STATION_1,
|
|
582
|
-
createdAt: new Date(Date.now() - 1800000).toISOString()
|
|
582
|
+
createdAt: new Date(Date.now() - 1800000).toISOString(),
|
|
583
583
|
};
|
|
584
584
|
export const MOCK_PARKED_ORDER_2 = {
|
|
585
|
-
_id:
|
|
585
|
+
_id: 'parked_2002',
|
|
586
586
|
currency: CurrencyCode.USD,
|
|
587
587
|
minorUnits: 2,
|
|
588
|
-
receiptId:
|
|
588
|
+
receiptId: 'PARK-0002',
|
|
589
589
|
companyId: MOCK_COMPANY.id,
|
|
590
590
|
externalId: null,
|
|
591
|
-
status:
|
|
592
|
-
paymentState:
|
|
593
|
-
fulfillmentState:
|
|
594
|
-
displayState:
|
|
591
|
+
status: 'parked',
|
|
592
|
+
paymentState: 'unpaid',
|
|
593
|
+
fulfillmentState: 'pending',
|
|
594
|
+
displayState: 'Parked',
|
|
595
595
|
customer: null,
|
|
596
596
|
summary: {
|
|
597
597
|
total: 2500,
|
|
@@ -600,18 +600,18 @@ export const MOCK_PARKED_ORDER_2 = {
|
|
|
600
600
|
shippingTotal: 0,
|
|
601
601
|
totalTaxes: 0,
|
|
602
602
|
taxes: [],
|
|
603
|
-
isTaxInclusive: false
|
|
603
|
+
isTaxInclusive: false,
|
|
604
604
|
},
|
|
605
605
|
cartDiscount: null,
|
|
606
606
|
cartFees: [],
|
|
607
607
|
paymentMethods: [],
|
|
608
|
-
source:
|
|
608
|
+
source: 'pos',
|
|
609
609
|
posData: {
|
|
610
610
|
outlet: MOCK_OUTLET_MAIN.id,
|
|
611
611
|
station: MOCK_STATION_2._id,
|
|
612
|
-
employee: MOCK_USER_MARIO.id
|
|
612
|
+
employee: MOCK_USER_MARIO.id,
|
|
613
613
|
},
|
|
614
|
-
sessionId:
|
|
614
|
+
sessionId: 'sess_park_2',
|
|
615
615
|
metadata: [],
|
|
616
616
|
billing: null,
|
|
617
617
|
shipping: null,
|
|
@@ -621,14 +621,20 @@ export const MOCK_PARKED_ORDER_2 = {
|
|
|
621
621
|
user: MOCK_USER_MARIO,
|
|
622
622
|
outlet: MOCK_OUTLET_MAIN,
|
|
623
623
|
station: MOCK_STATION_2,
|
|
624
|
-
createdAt: new Date(Date.now() - 900000).toISOString()
|
|
624
|
+
createdAt: new Date(Date.now() - 900000).toISOString(),
|
|
625
625
|
};
|
|
626
626
|
// --- EXPORT COLLECTIONS ---
|
|
627
627
|
export const MOCK_USERS = [MOCK_USER_MARIO, MOCK_USER_LUIGI];
|
|
628
628
|
export const MOCK_STATIONS = [MOCK_STATION_1, MOCK_STATION_2];
|
|
629
629
|
export const MOCK_OUTLETS = [MOCK_OUTLET_MAIN];
|
|
630
630
|
export const MOCK_CUSTOMERS = [MOCK_CUSTOMER_1, MOCK_CUSTOMER_2, MOCK_CUSTOMER_3, MOCK_CUSTOMER_4, MOCK_CUSTOMER_5];
|
|
631
|
-
export const MOCK_CATEGORIES = [
|
|
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
|
+
];
|
|
632
638
|
export const MOCK_PRODUCTS = [
|
|
633
639
|
MOCK_PRODUCT_BASIL_ALMOND,
|
|
634
640
|
MOCK_PRODUCT_BEER,
|
|
@@ -643,7 +649,7 @@ export const MOCK_PRODUCTS = [
|
|
|
643
649
|
MOCK_PRODUCT_MINT_LEMON,
|
|
644
650
|
MOCK_PRODUCT_CHILI_GARLIC,
|
|
645
651
|
MOCK_PRODUCT_HABANERO,
|
|
646
|
-
MOCK_PRODUCT_BLACK_GARLIC
|
|
652
|
+
MOCK_PRODUCT_BLACK_GARLIC,
|
|
647
653
|
];
|
|
648
654
|
export const MOCK_ORDERS = [MOCK_ORDER_1, MOCK_ORDER_2, MOCK_ORDER_3, MOCK_ORDER_4];
|
|
649
655
|
export const MOCK_PARKED_ORDERS = [MOCK_PARKED_ORDER_1, MOCK_PARKED_ORDER_2];
|
|
@@ -659,7 +665,7 @@ export let MOCK_CART = {
|
|
|
659
665
|
products: [],
|
|
660
666
|
customSales: [],
|
|
661
667
|
nonRevenueItems: [],
|
|
662
|
-
customer: null
|
|
668
|
+
customer: null,
|
|
663
669
|
};
|
|
664
670
|
export let MOCK_ACTIVE_PRODUCT;
|
|
665
671
|
export const setMockActiveProduct = (activeProduct) => {
|
|
@@ -679,13 +685,13 @@ export const resetMockCart = () => {
|
|
|
679
685
|
products: [],
|
|
680
686
|
customSales: [],
|
|
681
687
|
nonRevenueItems: [],
|
|
682
|
-
customer: null
|
|
688
|
+
customer: null,
|
|
683
689
|
};
|
|
684
690
|
};
|
|
685
691
|
function resolveMockOrderCurrency() {
|
|
686
692
|
const settings = MOCK_COMPANY.settings;
|
|
687
693
|
const raw = settings?.currency;
|
|
688
|
-
if (typeof raw ===
|
|
694
|
+
if (typeof raw === 'string' && Object.values(CurrencyCode).includes(raw)) {
|
|
689
695
|
return raw;
|
|
690
696
|
}
|
|
691
697
|
return CurrencyCode.USD;
|
|
@@ -744,16 +750,15 @@ export const safeSerialize = (data) => {
|
|
|
744
750
|
return JSON.parse(JSON.stringify(data));
|
|
745
751
|
};
|
|
746
752
|
const mockTopicSubscribers = {};
|
|
747
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
748
753
|
export const mockPublishEvent = (topic, eventType, data) => {
|
|
749
754
|
const subscribers = mockTopicSubscribers[topic] || [];
|
|
750
755
|
const event = {
|
|
751
756
|
topic,
|
|
752
757
|
type: eventType,
|
|
753
758
|
data,
|
|
754
|
-
timestamp: new Date().toISOString()
|
|
759
|
+
timestamp: new Date().toISOString(),
|
|
755
760
|
};
|
|
756
|
-
subscribers.forEach(callback => {
|
|
761
|
+
subscribers.forEach((callback) => {
|
|
757
762
|
try {
|
|
758
763
|
callback(event);
|
|
759
764
|
}
|
|
@@ -769,16 +774,16 @@ export const mockSubscribeToTopic = (topic, callback) => {
|
|
|
769
774
|
mockTopicSubscribers[topic].push(callback);
|
|
770
775
|
};
|
|
771
776
|
// Helper to create order from cart
|
|
772
|
-
export const createOrderFromCart = (paymentType, amount, processor =
|
|
777
|
+
export const createOrderFromCart = (paymentType, amount, processor = 'cash') => {
|
|
773
778
|
const primaryOutlet = MOCK_OUTLETS[0] ?? MOCK_OUTLET_MAIN;
|
|
774
779
|
const primaryStation = MOCK_STATIONS[0] ?? MOCK_STATION;
|
|
775
|
-
const employeeUser = MOCK_USERS.find(u => u.type === CFUserTypes.CASHIER) ?? MOCK_USERS[0] ?? MOCK_USER;
|
|
780
|
+
const employeeUser = MOCK_USERS.find((u) => u.type === CFUserTypes.CASHIER) ?? MOCK_USERS[0] ?? MOCK_USER;
|
|
776
781
|
const orderCurrency = resolveMockOrderCurrency();
|
|
777
782
|
// Generate new Order ID
|
|
778
783
|
const orderId = `order_${Date.now()}`;
|
|
779
784
|
const receiptId = `receipt_${Date.now()}`;
|
|
780
785
|
// Map cart products to line items
|
|
781
|
-
const lineItems = MOCK_CART.products.map(p => {
|
|
786
|
+
const lineItems = MOCK_CART.products.map((p) => {
|
|
782
787
|
return {
|
|
783
788
|
productId: p.id,
|
|
784
789
|
variantId: p.variantId,
|
|
@@ -788,17 +793,17 @@ export const createOrderFromCart = (paymentType, amount, processor = "cash") =>
|
|
|
788
793
|
taxes: [],
|
|
789
794
|
discount: {
|
|
790
795
|
itemDiscounts: [],
|
|
791
|
-
cartDiscount: { percentage: 0, amount: 0 }
|
|
796
|
+
cartDiscount: { percentage: 0, amount: 0 },
|
|
792
797
|
},
|
|
793
798
|
fee: { itemFees: [] },
|
|
794
799
|
totalTax: 0,
|
|
795
800
|
total: p.price * p.quantity,
|
|
796
801
|
lineNetWithFees: p.price * p.quantity,
|
|
797
802
|
metadata: [],
|
|
798
|
-
image: p.images?.[0] ||
|
|
799
|
-
sku: p.sku ||
|
|
803
|
+
image: p.images?.[0] || '',
|
|
804
|
+
sku: p.sku || '',
|
|
800
805
|
stock: 100,
|
|
801
|
-
attributes: p.attributes ||
|
|
806
|
+
attributes: p.attributes || '',
|
|
802
807
|
};
|
|
803
808
|
});
|
|
804
809
|
const totalNum = MOCK_CART.total;
|
|
@@ -809,10 +814,10 @@ export const createOrderFromCart = (paymentType, amount, processor = "cash") =>
|
|
|
809
814
|
receiptId,
|
|
810
815
|
companyId: MOCK_COMPANY.id,
|
|
811
816
|
externalId: null,
|
|
812
|
-
status:
|
|
813
|
-
paymentState:
|
|
814
|
-
fulfillmentState:
|
|
815
|
-
displayState:
|
|
817
|
+
status: 'completed',
|
|
818
|
+
paymentState: 'paid',
|
|
819
|
+
fulfillmentState: 'fulfilled',
|
|
820
|
+
displayState: 'Completed',
|
|
816
821
|
customer: MOCK_CART.customer ? MOCK_CART.customer : null,
|
|
817
822
|
summary: {
|
|
818
823
|
total: totalNum,
|
|
@@ -821,9 +826,11 @@ export const createOrderFromCart = (paymentType, amount, processor = "cash") =>
|
|
|
821
826
|
shippingTotal: 0,
|
|
822
827
|
totalTaxes: 0,
|
|
823
828
|
taxes: [],
|
|
824
|
-
isTaxInclusive: false
|
|
829
|
+
isTaxInclusive: false,
|
|
825
830
|
},
|
|
826
|
-
cartDiscount: MOCK_CART.discount
|
|
831
|
+
cartDiscount: MOCK_CART.discount
|
|
832
|
+
? { label: MOCK_CART.discount.label || 'Discount', amount: 0, percentage: MOCK_CART.discount.value }
|
|
833
|
+
: null,
|
|
827
834
|
cartFees: [],
|
|
828
835
|
paymentMethods: [
|
|
829
836
|
{
|
|
@@ -831,14 +838,14 @@ export const createOrderFromCart = (paymentType, amount, processor = "cash") =>
|
|
|
831
838
|
paymentType,
|
|
832
839
|
amount,
|
|
833
840
|
timestamp: new Date().toISOString(),
|
|
834
|
-
processor
|
|
835
|
-
}
|
|
841
|
+
processor,
|
|
842
|
+
},
|
|
836
843
|
],
|
|
837
|
-
source:
|
|
844
|
+
source: 'pos',
|
|
838
845
|
posData: {
|
|
839
846
|
outlet: primaryOutlet.id,
|
|
840
847
|
station: primaryStation._id,
|
|
841
|
-
employee: employeeUser.id
|
|
848
|
+
employee: employeeUser.id,
|
|
842
849
|
},
|
|
843
850
|
sessionId: `session_${Date.now()}`,
|
|
844
851
|
metadata: [],
|
|
@@ -850,12 +857,12 @@ export const createOrderFromCart = (paymentType, amount, processor = "cash") =>
|
|
|
850
857
|
user: employeeUser,
|
|
851
858
|
outlet: primaryOutlet,
|
|
852
859
|
station: primaryStation,
|
|
853
|
-
createdAt: new Date().toISOString()
|
|
860
|
+
createdAt: new Date().toISOString(),
|
|
854
861
|
};
|
|
855
862
|
MOCK_ORDERS.push(newOrder);
|
|
856
863
|
resetMockCart();
|
|
857
864
|
// Publish cart-created event after cart is reset (simulates new empty cart)
|
|
858
|
-
mockPublishEvent(
|
|
865
|
+
mockPublishEvent('cart', 'cart-created', {});
|
|
859
866
|
return newOrder;
|
|
860
867
|
};
|
|
861
868
|
/**
|
|
@@ -864,7 +871,7 @@ export const createOrderFromCart = (paymentType, amount, processor = "cash") =>
|
|
|
864
871
|
* (creates the order, resets the cart, returns it). Otherwise the cart stays
|
|
865
872
|
* open with `amountToBeCharged` reset to what's left, and returns null.
|
|
866
873
|
*/
|
|
867
|
-
export const applyMockPayment = (amount, paymentType, processor =
|
|
874
|
+
export const applyMockPayment = (amount, paymentType, processor = 'cash') => {
|
|
868
875
|
const remainingBefore = MOCK_CART.remainingBalance ?? MOCK_CART.total;
|
|
869
876
|
const charge = Math.min(Math.max(0, amount || remainingBefore), remainingBefore);
|
|
870
877
|
const remainingAfter = Math.max(0, remainingBefore - charge);
|
|
@@ -872,12 +879,12 @@ export const applyMockPayment = (amount, paymentType, processor = "cash") => {
|
|
|
872
879
|
// Partial payment — keep the cart open, queue the rest for the next tender.
|
|
873
880
|
MOCK_CART.remainingBalance = remainingAfter;
|
|
874
881
|
MOCK_CART.amountToBeCharged = remainingAfter;
|
|
875
|
-
mockPublishEvent(
|
|
882
|
+
mockPublishEvent('cart', 'partial-payment-applied', { charged: charge, remaining: remainingAfter });
|
|
876
883
|
return null;
|
|
877
884
|
}
|
|
878
885
|
// Fully paid — create the completed order (this also resets the cart).
|
|
879
886
|
const orderTotal = MOCK_CART.total;
|
|
880
887
|
const order = createOrderFromCart(paymentType, orderTotal, processor);
|
|
881
|
-
mockPublishEvent(
|
|
888
|
+
mockPublishEvent('payments', 'payment-done', { order });
|
|
882
889
|
return order;
|
|
883
890
|
};
|