@final-commerce/command-frame 0.3.2-beta.1 → 0.4.0-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 +38 -30
- 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/integration-payment/types.d.ts +2 -0
- package/dist/actions/partial-payment/types.d.ts +2 -2
- package/dist/actions/redeem-payment/types.d.ts +2 -0
- package/dist/actions/terminal-payment/types.d.ts +3 -3
- package/dist/actions/void-order/action.d.ts +6 -0
- package/dist/actions/void-order/action.js +8 -0
- package/dist/actions/void-order/mock.d.ts +2 -0
- package/dist/actions/void-order/mock.js +23 -0
- package/dist/actions/void-order/types.d.ts +27 -0
- package/dist/actions/void-order/types.js +1 -0
- package/dist/demo/database.d.ts +3 -2
- package/dist/demo/database.js +310 -250
- package/dist/index.d.ts +3 -1
- package/dist/index.js +2 -0
- package/dist/projects/render/mocks.js +4 -0
- package/dist/projects/render/types.d.ts +3 -1
- package/dist/pubsub/topics/orders/index.d.ts +2 -2
- package/dist/pubsub/topics/orders/index.js +29 -24
- package/dist/pubsub/topics/orders/order-voided/types.d.ts +14 -0
- package/dist/pubsub/topics/orders/order-voided/types.js +1 -0
- package/dist/pubsub/topics/orders/types.d.ts +16 -14
- package/dist/pubsub/topics/orders/types.js +7 -6
- 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,19 +484,72 @@ 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
|
+
};
|
|
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(),
|
|
488
541
|
};
|
|
489
542
|
export const MOCK_PARKED_ORDER_1 = {
|
|
490
|
-
_id:
|
|
543
|
+
_id: 'parked_2001',
|
|
491
544
|
currency: CurrencyCode.USD,
|
|
492
545
|
minorUnits: 2,
|
|
493
|
-
receiptId:
|
|
546
|
+
receiptId: 'PARK-0001',
|
|
494
547
|
companyId: MOCK_COMPANY.id,
|
|
495
548
|
externalId: null,
|
|
496
|
-
status:
|
|
497
|
-
paymentState:
|
|
498
|
-
fulfillmentState:
|
|
499
|
-
displayState:
|
|
549
|
+
status: 'parked',
|
|
550
|
+
paymentState: 'unpaid',
|
|
551
|
+
fulfillmentState: 'pending',
|
|
552
|
+
displayState: 'Parked',
|
|
500
553
|
customer: MOCK_CUSTOMER_4,
|
|
501
554
|
summary: {
|
|
502
555
|
total: 2100,
|
|
@@ -505,18 +558,18 @@ export const MOCK_PARKED_ORDER_1 = {
|
|
|
505
558
|
shippingTotal: 0,
|
|
506
559
|
totalTaxes: 0,
|
|
507
560
|
taxes: [],
|
|
508
|
-
isTaxInclusive: false
|
|
561
|
+
isTaxInclusive: false,
|
|
509
562
|
},
|
|
510
563
|
cartDiscount: null,
|
|
511
564
|
cartFees: [],
|
|
512
565
|
paymentMethods: [],
|
|
513
|
-
source:
|
|
566
|
+
source: 'pos',
|
|
514
567
|
posData: {
|
|
515
568
|
outlet: MOCK_OUTLET_MAIN.id,
|
|
516
569
|
station: MOCK_STATION_1._id,
|
|
517
|
-
employee: MOCK_USER_LUIGI.id
|
|
570
|
+
employee: MOCK_USER_LUIGI.id,
|
|
518
571
|
},
|
|
519
|
-
sessionId:
|
|
572
|
+
sessionId: 'sess_park_1',
|
|
520
573
|
metadata: [],
|
|
521
574
|
billing: null,
|
|
522
575
|
shipping: null,
|
|
@@ -526,19 +579,19 @@ export const MOCK_PARKED_ORDER_1 = {
|
|
|
526
579
|
user: MOCK_USER_LUIGI,
|
|
527
580
|
outlet: MOCK_OUTLET_MAIN,
|
|
528
581
|
station: MOCK_STATION_1,
|
|
529
|
-
createdAt: new Date(Date.now() - 1800000).toISOString()
|
|
582
|
+
createdAt: new Date(Date.now() - 1800000).toISOString(),
|
|
530
583
|
};
|
|
531
584
|
export const MOCK_PARKED_ORDER_2 = {
|
|
532
|
-
_id:
|
|
585
|
+
_id: 'parked_2002',
|
|
533
586
|
currency: CurrencyCode.USD,
|
|
534
587
|
minorUnits: 2,
|
|
535
|
-
receiptId:
|
|
588
|
+
receiptId: 'PARK-0002',
|
|
536
589
|
companyId: MOCK_COMPANY.id,
|
|
537
590
|
externalId: null,
|
|
538
|
-
status:
|
|
539
|
-
paymentState:
|
|
540
|
-
fulfillmentState:
|
|
541
|
-
displayState:
|
|
591
|
+
status: 'parked',
|
|
592
|
+
paymentState: 'unpaid',
|
|
593
|
+
fulfillmentState: 'pending',
|
|
594
|
+
displayState: 'Parked',
|
|
542
595
|
customer: null,
|
|
543
596
|
summary: {
|
|
544
597
|
total: 2500,
|
|
@@ -547,18 +600,18 @@ export const MOCK_PARKED_ORDER_2 = {
|
|
|
547
600
|
shippingTotal: 0,
|
|
548
601
|
totalTaxes: 0,
|
|
549
602
|
taxes: [],
|
|
550
|
-
isTaxInclusive: false
|
|
603
|
+
isTaxInclusive: false,
|
|
551
604
|
},
|
|
552
605
|
cartDiscount: null,
|
|
553
606
|
cartFees: [],
|
|
554
607
|
paymentMethods: [],
|
|
555
|
-
source:
|
|
608
|
+
source: 'pos',
|
|
556
609
|
posData: {
|
|
557
610
|
outlet: MOCK_OUTLET_MAIN.id,
|
|
558
611
|
station: MOCK_STATION_2._id,
|
|
559
|
-
employee: MOCK_USER_MARIO.id
|
|
612
|
+
employee: MOCK_USER_MARIO.id,
|
|
560
613
|
},
|
|
561
|
-
sessionId:
|
|
614
|
+
sessionId: 'sess_park_2',
|
|
562
615
|
metadata: [],
|
|
563
616
|
billing: null,
|
|
564
617
|
shipping: null,
|
|
@@ -568,14 +621,20 @@ export const MOCK_PARKED_ORDER_2 = {
|
|
|
568
621
|
user: MOCK_USER_MARIO,
|
|
569
622
|
outlet: MOCK_OUTLET_MAIN,
|
|
570
623
|
station: MOCK_STATION_2,
|
|
571
|
-
createdAt: new Date(Date.now() - 900000).toISOString()
|
|
624
|
+
createdAt: new Date(Date.now() - 900000).toISOString(),
|
|
572
625
|
};
|
|
573
626
|
// --- EXPORT COLLECTIONS ---
|
|
574
627
|
export const MOCK_USERS = [MOCK_USER_MARIO, MOCK_USER_LUIGI];
|
|
575
628
|
export const MOCK_STATIONS = [MOCK_STATION_1, MOCK_STATION_2];
|
|
576
629
|
export const MOCK_OUTLETS = [MOCK_OUTLET_MAIN];
|
|
577
630
|
export const MOCK_CUSTOMERS = [MOCK_CUSTOMER_1, MOCK_CUSTOMER_2, MOCK_CUSTOMER_3, MOCK_CUSTOMER_4, MOCK_CUSTOMER_5];
|
|
578
|
-
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
|
+
];
|
|
579
638
|
export const MOCK_PRODUCTS = [
|
|
580
639
|
MOCK_PRODUCT_BASIL_ALMOND,
|
|
581
640
|
MOCK_PRODUCT_BEER,
|
|
@@ -590,9 +649,9 @@ export const MOCK_PRODUCTS = [
|
|
|
590
649
|
MOCK_PRODUCT_MINT_LEMON,
|
|
591
650
|
MOCK_PRODUCT_CHILI_GARLIC,
|
|
592
651
|
MOCK_PRODUCT_HABANERO,
|
|
593
|
-
MOCK_PRODUCT_BLACK_GARLIC
|
|
652
|
+
MOCK_PRODUCT_BLACK_GARLIC,
|
|
594
653
|
];
|
|
595
|
-
export const MOCK_ORDERS = [MOCK_ORDER_1, MOCK_ORDER_2, MOCK_ORDER_3];
|
|
654
|
+
export const MOCK_ORDERS = [MOCK_ORDER_1, MOCK_ORDER_2, MOCK_ORDER_3, MOCK_ORDER_4];
|
|
596
655
|
export const MOCK_PARKED_ORDERS = [MOCK_PARKED_ORDER_1, MOCK_PARKED_ORDER_2];
|
|
597
656
|
// Compatibility Exports (reassigned by setMockDatabase)
|
|
598
657
|
export let MOCK_USER = MOCK_USERS[0];
|
|
@@ -606,7 +665,7 @@ export let MOCK_CART = {
|
|
|
606
665
|
products: [],
|
|
607
666
|
customSales: [],
|
|
608
667
|
nonRevenueItems: [],
|
|
609
|
-
customer: null
|
|
668
|
+
customer: null,
|
|
610
669
|
};
|
|
611
670
|
export let MOCK_ACTIVE_PRODUCT;
|
|
612
671
|
export const setMockActiveProduct = (activeProduct) => {
|
|
@@ -626,13 +685,13 @@ export const resetMockCart = () => {
|
|
|
626
685
|
products: [],
|
|
627
686
|
customSales: [],
|
|
628
687
|
nonRevenueItems: [],
|
|
629
|
-
customer: null
|
|
688
|
+
customer: null,
|
|
630
689
|
};
|
|
631
690
|
};
|
|
632
691
|
function resolveMockOrderCurrency() {
|
|
633
692
|
const settings = MOCK_COMPANY.settings;
|
|
634
693
|
const raw = settings?.currency;
|
|
635
|
-
if (typeof raw ===
|
|
694
|
+
if (typeof raw === 'string' && Object.values(CurrencyCode).includes(raw)) {
|
|
636
695
|
return raw;
|
|
637
696
|
}
|
|
638
697
|
return CurrencyCode.USD;
|
|
@@ -691,16 +750,15 @@ export const safeSerialize = (data) => {
|
|
|
691
750
|
return JSON.parse(JSON.stringify(data));
|
|
692
751
|
};
|
|
693
752
|
const mockTopicSubscribers = {};
|
|
694
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
695
753
|
export const mockPublishEvent = (topic, eventType, data) => {
|
|
696
754
|
const subscribers = mockTopicSubscribers[topic] || [];
|
|
697
755
|
const event = {
|
|
698
756
|
topic,
|
|
699
757
|
type: eventType,
|
|
700
758
|
data,
|
|
701
|
-
timestamp: new Date().toISOString()
|
|
759
|
+
timestamp: new Date().toISOString(),
|
|
702
760
|
};
|
|
703
|
-
subscribers.forEach(callback => {
|
|
761
|
+
subscribers.forEach((callback) => {
|
|
704
762
|
try {
|
|
705
763
|
callback(event);
|
|
706
764
|
}
|
|
@@ -716,16 +774,16 @@ export const mockSubscribeToTopic = (topic, callback) => {
|
|
|
716
774
|
mockTopicSubscribers[topic].push(callback);
|
|
717
775
|
};
|
|
718
776
|
// Helper to create order from cart
|
|
719
|
-
export const createOrderFromCart = (paymentType, amount, processor =
|
|
777
|
+
export const createOrderFromCart = (paymentType, amount, processor = 'cash') => {
|
|
720
778
|
const primaryOutlet = MOCK_OUTLETS[0] ?? MOCK_OUTLET_MAIN;
|
|
721
779
|
const primaryStation = MOCK_STATIONS[0] ?? MOCK_STATION;
|
|
722
|
-
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;
|
|
723
781
|
const orderCurrency = resolveMockOrderCurrency();
|
|
724
782
|
// Generate new Order ID
|
|
725
783
|
const orderId = `order_${Date.now()}`;
|
|
726
784
|
const receiptId = `receipt_${Date.now()}`;
|
|
727
785
|
// Map cart products to line items
|
|
728
|
-
const lineItems = MOCK_CART.products.map(p => {
|
|
786
|
+
const lineItems = MOCK_CART.products.map((p) => {
|
|
729
787
|
return {
|
|
730
788
|
productId: p.id,
|
|
731
789
|
variantId: p.variantId,
|
|
@@ -735,17 +793,17 @@ export const createOrderFromCart = (paymentType, amount, processor = "cash") =>
|
|
|
735
793
|
taxes: [],
|
|
736
794
|
discount: {
|
|
737
795
|
itemDiscounts: [],
|
|
738
|
-
cartDiscount: { percentage: 0, amount: 0 }
|
|
796
|
+
cartDiscount: { percentage: 0, amount: 0 },
|
|
739
797
|
},
|
|
740
798
|
fee: { itemFees: [] },
|
|
741
799
|
totalTax: 0,
|
|
742
800
|
total: p.price * p.quantity,
|
|
743
801
|
lineNetWithFees: p.price * p.quantity,
|
|
744
802
|
metadata: [],
|
|
745
|
-
image: p.images?.[0] ||
|
|
746
|
-
sku: p.sku ||
|
|
803
|
+
image: p.images?.[0] || '',
|
|
804
|
+
sku: p.sku || '',
|
|
747
805
|
stock: 100,
|
|
748
|
-
attributes: p.attributes ||
|
|
806
|
+
attributes: p.attributes || '',
|
|
749
807
|
};
|
|
750
808
|
});
|
|
751
809
|
const totalNum = MOCK_CART.total;
|
|
@@ -756,10 +814,10 @@ export const createOrderFromCart = (paymentType, amount, processor = "cash") =>
|
|
|
756
814
|
receiptId,
|
|
757
815
|
companyId: MOCK_COMPANY.id,
|
|
758
816
|
externalId: null,
|
|
759
|
-
status:
|
|
760
|
-
paymentState:
|
|
761
|
-
fulfillmentState:
|
|
762
|
-
displayState:
|
|
817
|
+
status: 'completed',
|
|
818
|
+
paymentState: 'paid',
|
|
819
|
+
fulfillmentState: 'fulfilled',
|
|
820
|
+
displayState: 'Completed',
|
|
763
821
|
customer: MOCK_CART.customer ? MOCK_CART.customer : null,
|
|
764
822
|
summary: {
|
|
765
823
|
total: totalNum,
|
|
@@ -768,9 +826,11 @@ export const createOrderFromCart = (paymentType, amount, processor = "cash") =>
|
|
|
768
826
|
shippingTotal: 0,
|
|
769
827
|
totalTaxes: 0,
|
|
770
828
|
taxes: [],
|
|
771
|
-
isTaxInclusive: false
|
|
829
|
+
isTaxInclusive: false,
|
|
772
830
|
},
|
|
773
|
-
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,
|
|
774
834
|
cartFees: [],
|
|
775
835
|
paymentMethods: [
|
|
776
836
|
{
|
|
@@ -778,14 +838,14 @@ export const createOrderFromCart = (paymentType, amount, processor = "cash") =>
|
|
|
778
838
|
paymentType,
|
|
779
839
|
amount,
|
|
780
840
|
timestamp: new Date().toISOString(),
|
|
781
|
-
processor
|
|
782
|
-
}
|
|
841
|
+
processor,
|
|
842
|
+
},
|
|
783
843
|
],
|
|
784
|
-
source:
|
|
844
|
+
source: 'pos',
|
|
785
845
|
posData: {
|
|
786
846
|
outlet: primaryOutlet.id,
|
|
787
847
|
station: primaryStation._id,
|
|
788
|
-
employee: employeeUser.id
|
|
848
|
+
employee: employeeUser.id,
|
|
789
849
|
},
|
|
790
850
|
sessionId: `session_${Date.now()}`,
|
|
791
851
|
metadata: [],
|
|
@@ -797,12 +857,12 @@ export const createOrderFromCart = (paymentType, amount, processor = "cash") =>
|
|
|
797
857
|
user: employeeUser,
|
|
798
858
|
outlet: primaryOutlet,
|
|
799
859
|
station: primaryStation,
|
|
800
|
-
createdAt: new Date().toISOString()
|
|
860
|
+
createdAt: new Date().toISOString(),
|
|
801
861
|
};
|
|
802
862
|
MOCK_ORDERS.push(newOrder);
|
|
803
863
|
resetMockCart();
|
|
804
864
|
// Publish cart-created event after cart is reset (simulates new empty cart)
|
|
805
|
-
mockPublishEvent(
|
|
865
|
+
mockPublishEvent('cart', 'cart-created', {});
|
|
806
866
|
return newOrder;
|
|
807
867
|
};
|
|
808
868
|
/**
|
|
@@ -811,7 +871,7 @@ export const createOrderFromCart = (paymentType, amount, processor = "cash") =>
|
|
|
811
871
|
* (creates the order, resets the cart, returns it). Otherwise the cart stays
|
|
812
872
|
* open with `amountToBeCharged` reset to what's left, and returns null.
|
|
813
873
|
*/
|
|
814
|
-
export const applyMockPayment = (amount, paymentType, processor =
|
|
874
|
+
export const applyMockPayment = (amount, paymentType, processor = 'cash') => {
|
|
815
875
|
const remainingBefore = MOCK_CART.remainingBalance ?? MOCK_CART.total;
|
|
816
876
|
const charge = Math.min(Math.max(0, amount || remainingBefore), remainingBefore);
|
|
817
877
|
const remainingAfter = Math.max(0, remainingBefore - charge);
|
|
@@ -819,12 +879,12 @@ export const applyMockPayment = (amount, paymentType, processor = "cash") => {
|
|
|
819
879
|
// Partial payment — keep the cart open, queue the rest for the next tender.
|
|
820
880
|
MOCK_CART.remainingBalance = remainingAfter;
|
|
821
881
|
MOCK_CART.amountToBeCharged = remainingAfter;
|
|
822
|
-
mockPublishEvent(
|
|
882
|
+
mockPublishEvent('cart', 'partial-payment-applied', { charged: charge, remaining: remainingAfter });
|
|
823
883
|
return null;
|
|
824
884
|
}
|
|
825
885
|
// Fully paid — create the completed order (this also resets the cart).
|
|
826
886
|
const orderTotal = MOCK_CART.total;
|
|
827
887
|
const order = createOrderFromCart(paymentType, orderTotal, processor);
|
|
828
|
-
mockPublishEvent(
|
|
888
|
+
mockPublishEvent('payments', 'payment-done', { order });
|
|
829
889
|
return order;
|
|
830
890
|
};
|