@feedmepos/mf-order-setting 0.0.84 → 0.0.85

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.
Files changed (109) hide show
  1. package/dist/DisplaySystemView-hmlT9gsb.js +6485 -0
  2. package/dist/{KioskDevicesView-DdwFuenU.js → KioskDevicesView-fW6M9Hao.js} +1 -1
  3. package/dist/{KioskDevicesView.vue_vue_type_script_setup_true_lang-CxtLm_oh.js → KioskDevicesView.vue_vue_type_script_setup_true_lang-GrsnYo80.js} +3 -3
  4. package/dist/KioskSettingView-BdEPftHH.js +839 -0
  5. package/dist/{KioskView-fwBwUGCQ.js → KioskView-Bwk9S0tc.js} +82 -70
  6. package/dist/{OrderSettingsView-RhlyZmzs.js → OrderSettingsView-DVXfVdXj.js} +30858 -30699
  7. package/dist/{app-ClOkRxOZ.js → app-BnrruYco.js} +74 -12
  8. package/dist/app.js +1 -1
  9. package/dist/display-preview/assets/BandBoard-DIcfXsNV.js +1 -0
  10. package/dist/display-preview/assets/CarouselBlock-XAhTyEWB.js +1 -0
  11. package/dist/display-preview/assets/{CategoryBoard-DClMUGfS.js → CategoryBoard-DBKe18hv.js} +1 -1
  12. package/dist/display-preview/assets/ImageBlock-BCbnYSHq.js +1 -0
  13. package/dist/display-preview/assets/PickupMode-Df_TPCh8.js +1 -0
  14. package/dist/display-preview/assets/{StatusBoard-BVESD28J.js → StatusBoard-28z3bPOf.js} +1 -1
  15. package/dist/display-preview/assets/TextBlock-CvJKITtx.js +1 -0
  16. package/dist/display-preview/assets/VideoBlock-Dop43wDv.js +1 -0
  17. package/dist/display-preview/assets/index-C6DET5zJ.css +1 -0
  18. package/dist/display-preview/assets/index-cqMoOpSN.js +2 -0
  19. package/dist/display-preview/assets/pickupView-DRMVXqrc.js +1 -0
  20. package/dist/display-preview/index.html +2 -2
  21. package/dist/frontend/mf-order/src/app.d.ts +62 -0
  22. package/dist/frontend/mf-order/src/main.d.ts +62 -0
  23. package/dist/frontend/mf-order/src/modules/display-system/interface.d.ts +21 -0
  24. package/dist/frontend/mf-order/src/modules/order-setting/kiosk/coverCarousel.d.ts +69 -0
  25. package/dist/frontend/mf-order/src/modules/order-setting/kiosk/interface.d.ts +5 -1
  26. package/dist/frontend/mf-order/src/stores/order-setting/index.d.ts +90 -3
  27. package/dist/frontend/mf-order/src/views/display-system/DisplayFieldControl.vue.d.ts +3 -0
  28. package/dist/frontend/mf-order/src/views/display-system/DisplayInspector.vue.d.ts +3 -13
  29. package/dist/frontend/mf-order/src/views/order-settings/auto-send-kitchen.d.ts +58 -0
  30. package/dist/frontend/mf-order/src/views/order-settings/delivery/inhouse/InHouseDelivery.vue.d.ts +16 -1
  31. package/dist/frontend/mf-order/src/views/order-settings/pickup/PickUpSettingDialogContent.vue.d.ts +16 -1
  32. package/dist/frontend/mf-order/src/views/order-settings/useAutoSendGuard.d.ts +48 -0
  33. package/dist/frontend/mf-order/tsconfig.app.tsbuildinfo +1 -1
  34. package/dist/{index-CKEbr9Es.js → index-D5wABuUx.js} +1 -1
  35. package/dist/{index-5k7kGCpJ.js → index-D7IWjZdy.js} +2 -2
  36. package/dist/{index-I2YGevce.js → index-LyvBqKnv.js} +1 -1
  37. package/dist/{order.dto-Dbn-hRrm.js → order.dto-D7HGiueX.js} +3579 -3428
  38. package/dist/package/entity/alert/investigation.dto.d.ts +25 -6
  39. package/dist/package/entity/alert/lark-callback.dto.d.ts +31 -12
  40. package/dist/package/entity/alert/suggestion.dto.d.ts +4 -4
  41. package/dist/package/entity/display/blocks.d.ts +42 -76
  42. package/dist/package/entity/incoming-order/incoming-order-to-bill.dto.d.ts +47 -36
  43. package/dist/package/entity/incoming-order/incoming-order.dto.d.ts +1 -0
  44. package/dist/package/entity/index.d.ts +2 -0
  45. package/dist/package/entity/index.frontend.d.ts +2 -0
  46. package/dist/package/entity/order/effects/effect.dto.d.ts +266 -0
  47. package/dist/package/entity/order/order-item/order-item.dto.d.ts +36 -36
  48. package/dist/package/entity/order/order.do.d.ts +7 -64
  49. package/dist/package/entity/order/order.dto.d.ts +13006 -795
  50. package/dist/package/entity/order-platform/grabfood/grabfood-settings.do.d.ts +13 -0
  51. package/dist/package/entity/order-platform/grabfood/grabfood.dto.d.ts +3 -0
  52. package/dist/package/entity/order-platform/menu.dto.d.ts +10 -10
  53. package/dist/package/entity/order-platform/shopeefood/shopeefood-order.dto.d.ts +11 -8
  54. package/dist/package/entity/order-setting/auto-accept.dto.d.ts +94 -0
  55. package/dist/package/entity/order-setting/auto-send.resolve.d.ts +110 -0
  56. package/dist/package/entity/order-setting/delivery/inhouse-delivery.do.d.ts +3 -0
  57. package/dist/package/entity/order-setting/delivery/inhouse-delivery.dto.d.ts +3 -0
  58. package/dist/package/entity/order-setting/dine-in/dine-in.do.d.ts +3 -0
  59. package/dist/package/entity/order-setting/dine-in/dine-in.dto.d.ts +3 -0
  60. package/dist/package/entity/order-setting/kiosk/kiosk.do.d.ts +26 -0
  61. package/dist/package/entity/order-setting/kiosk/kiosk.dto.d.ts +39 -0
  62. package/dist/package/entity/order-setting/order-setting.do.d.ts +57 -4
  63. package/dist/package/entity/order-setting/order-setting.dto.d.ts +259 -9
  64. package/dist/package/entity/order-setting/pickup/pickup.do.d.ts +3 -0
  65. package/dist/package/entity/order-setting/pickup/pickup.dto.d.ts +3 -0
  66. package/dist/package/entity/order-setting/queue/queue.do.d.ts +2 -2
  67. package/dist/package/entity/order-setting/queue/queue.dto.d.ts +2 -2
  68. package/dist/package/entity/queue/queue.dto.d.ts +48 -48
  69. package/dist/package/entity/restaurant/restaurant.dto.d.ts +46 -8
  70. package/dist/package/entity/websocket/websocket.dto.d.ts +88 -0
  71. package/dist/style.css +1 -1
  72. package/package.json +2 -2
  73. package/src/locales/en-US.json +22 -2
  74. package/src/locales/ja-JP.json +12 -1
  75. package/src/locales/th-TH.json +12 -1
  76. package/src/locales/zh-CN.json +22 -2
  77. package/src/modules/display-system/interface.spec.ts +32 -18
  78. package/src/modules/display-system/interface.ts +32 -0
  79. package/src/modules/order-setting/kiosk/coverCarousel.spec.ts +172 -0
  80. package/src/modules/order-setting/kiosk/coverCarousel.ts +186 -0
  81. package/src/modules/order-setting/kiosk/interface.ts +138 -127
  82. package/src/stores/order-setting/mapper.spec.ts +26 -0
  83. package/src/stores/order-setting/mapper.ts +305 -293
  84. package/src/views/display-system/DisplayFieldControl.vue +46 -0
  85. package/src/views/display-system/DisplayInspector.vue +8 -3
  86. package/src/views/display-system/DisplaySystemView.vue +7 -3
  87. package/src/views/display-system/DisplayTemplateEditor.vue +28 -2
  88. package/src/views/kiosk/settings/KioskSettingView.vue +176 -60
  89. package/src/views/order-settings/auto-send-kitchen.spec.ts +137 -0
  90. package/src/views/order-settings/auto-send-kitchen.ts +92 -0
  91. package/src/views/order-settings/auto-send-resolve.spec.ts +123 -0
  92. package/src/views/order-settings/delivery/DeliverySetting.vue +10 -0
  93. package/src/views/order-settings/delivery/inhouse/InHouseDelivery.vue +40 -5
  94. package/src/views/order-settings/dine-in/DineInSetting.vue +38 -5
  95. package/src/views/order-settings/pickup/PickUpSetting.vue +1 -0
  96. package/src/views/order-settings/pickup/PickUpSettingDialogContent.vue +38 -5
  97. package/src/views/order-settings/queue/QueueSetting.vue +6 -9
  98. package/src/views/order-settings/useAutoSendGuard.ts +142 -0
  99. package/tsconfig.app.json +10 -1
  100. package/dist/DisplaySystemView-4Bz8p26A.js +0 -5892
  101. package/dist/KioskSettingView-D57KtQ-t.js +0 -711
  102. package/dist/display-preview/assets/BandBoard-BrDTYDc9.js +0 -1
  103. package/dist/display-preview/assets/CarouselBlock-CrkGxoGk.js +0 -1
  104. package/dist/display-preview/assets/ImageBlock-DtgfHd5G.js +0 -1
  105. package/dist/display-preview/assets/PickupMode-DKmqGlG8.js +0 -1
  106. package/dist/display-preview/assets/TextBlock-gAfeCCmE.js +0 -1
  107. package/dist/display-preview/assets/index-BB0ReVXy.js +0 -2
  108. package/dist/display-preview/assets/index-BWVpFSIw.css +0 -1
  109. package/dist/display-preview/assets/pickupView-C-BGcOu8.js +0 -1
@@ -1,293 +1,305 @@
1
- import {
2
- OrderSettingsDto,
3
- OrderKioskDineIn,
4
- OrderKioskDineInSequenceDto,
5
- FdoOrderKioskDineInSequence,
6
- FdoEPaymentMethod
7
- } from '@entity'
8
- import type {
9
- MfKioskOrderSetting,
10
- MfKioskDineInSetting,
11
- MfDisplayStandSetting,
12
- KioskTakeawaySettingForm,
13
- MfKioskOrderSettingForm,
14
- MfKioskPaymentSetting,
15
- MfKioskSubmitOrderInstruction,
16
- KioskPickAtCounterSettingForm
17
- } from '@/modules/order-setting/kiosk/interface'
18
- import type { MfOrderSetting } from '@/modules/order-setting/interface'
19
- import type { OrderKioskSettings, OrderKioskPaymentSetting } from '@entity'
20
-
21
- export const defaultDisplayStand: MfDisplayStandSetting = {
22
- enabled: false,
23
- prefix: null,
24
- padDigit: 0,
25
- standSlotRange: {
26
- min: 1,
27
- max: 10
28
- },
29
- enablePaxDialog: false,
30
- submitOrderInstruction: {
31
- payAtCounter: null,
32
- paid: null
33
- }
34
- }
35
-
36
- export const defaultTakeaway: KioskTakeawaySettingForm = {
37
- enabled: false,
38
- submitOrderInstruction: {
39
- payAtCounter: null,
40
- paid: null
41
- }
42
- }
43
-
44
- export const defaultPickUp: KioskPickAtCounterSettingForm = {
45
- enabled: false,
46
- submitOrderInstruction: {
47
- payAtCounter: null,
48
- paid: null
49
- },
50
- enablePaxDialog: false
51
- }
52
-
53
- export const defaultKioskOrderSetting: MfKioskOrderSettingForm = {
54
- dineIn: {
55
- enabled: false,
56
- pickUp: defaultPickUp,
57
- sequenceNumber: FdoOrderKioskDineInSequence.parse({}),
58
- displayStand: defaultDisplayStand
59
- },
60
- takeaway: defaultTakeaway,
61
- paymentSetting: {
62
- paymentTypes: [],
63
- offlinePaymentTypes: [],
64
- ePaymentTypes: {
65
- terminal: false,
66
- card: {
67
- terminal: false,
68
- nfc: false
69
- },
70
- eWallet: {
71
- terminalQrPay: false,
72
- terminalScanPay: false,
73
- qrPay: false,
74
- scanPay: false
75
- }
76
- }
77
- },
78
- menuItem: {
79
- showAllOnly: false
80
- },
81
- coverImageLandscape: null,
82
- coverImagePortrait: null,
83
- otaChannel: '',
84
- autoCloseBill: null,
85
- printReceiptAfterClose: null,
86
- languages: null
87
- }
88
-
89
- export const defaultSubmitOrderInstruction: MfKioskSubmitOrderInstruction = {
90
- payAtCounter: null,
91
- paid: null
92
- }
93
-
94
- const convertOrderSettingDto = (dto: OrderSettingsDto): MfOrderSetting => {
95
- return {
96
- kiosk: toKiosk(dto.kioskSettings, dto.sequenceSettings?.kioskDineIn)
97
- }
98
- }
99
-
100
- const toKiosk = (
101
- kioskOrderSettings: OrderKioskSettings | null | undefined,
102
- kioskDineInSeq?: OrderKioskDineInSequenceDto
103
- ): MfKioskOrderSetting => {
104
- return {
105
- dineIn: toKioskDineInSetting(
106
- kioskDineInSeq ?? {
107
- current: 0,
108
- prefix: '#K'
109
- },
110
- kioskOrderSettings?.dineIn ?? undefined
111
- ),
112
- takeaway: {
113
- enabled: kioskOrderSettings?.canTakeaway ?? false,
114
- submitOrderInstruction: kioskOrderSettings?.takeaway?.submitOrderInstruction
115
- ? {
116
- payAtCounter:
117
- kioskOrderSettings?.takeaway?.submitOrderInstruction?.payAtCounter?.['en'] ?? null,
118
- paid: kioskOrderSettings?.takeaway?.submitOrderInstruction?.paid?.['en'] ?? null
119
- }
120
- : defaultSubmitOrderInstruction
121
- },
122
- paymentSetting: {
123
- paymentTypes: kioskOrderSettings?.paymentSetting?.paymentTypes ?? [],
124
- offlinePaymentTypes: kioskOrderSettings?.paymentSetting?.offlinePaymentTypes ?? [],
125
- ePaymentTypes:
126
- kioskOrderSettings?.paymentSetting?.ePaymentTypes ??
127
- FdoEPaymentMethod.parse({
128
- card: {
129
- terminal: false,
130
- nfc: false
131
- },
132
- eWallet: {
133
- qrPay: false,
134
- scanPay: false
135
- }
136
- })
137
- },
138
- menuItem: {
139
- showAllOnly: kioskOrderSettings?.menuItem?.showAllOnly ?? false
140
- },
141
- otaChannel: kioskOrderSettings?.otaChannel ?? '',
142
- coverImageLandscape: kioskOrderSettings?.coverImageLandscape ?? null,
143
- coverImagePortrait: kioskOrderSettings?.coverImagePortrait ?? null,
144
- // Preserve "unset" as null — collapsing to a boolean here is what let an
145
- // unrelated save overwrite the inherited dineInSettings value.
146
- autoCloseBill: kioskOrderSettings?.autoCloseBill ?? null,
147
- printReceiptAfterClose: kioskOrderSettings?.printReceiptAfterClose ?? null,
148
- // Stored [] means the same thing as unset ("all languages"), so collapse it
149
- // to null here — the form only ever has to reason about null vs a real set.
150
- languages: kioskOrderSettings?.languages?.length ? [...kioskOrderSettings.languages] : null
151
- }
152
- }
153
-
154
- const toKioskDineInSetting = (
155
- kioskDineInSeq: OrderKioskDineInSequenceDto,
156
- kioskDineInSetting?: OrderKioskDineIn
157
- ): MfKioskDineInSetting => {
158
- return {
159
- enabled: !!kioskDineInSetting,
160
- sequenceNumber: kioskDineInSeq,
161
- pickUp: kioskDineInSetting?.pickUp
162
- ? {
163
- ...kioskDineInSetting.pickUp,
164
- submitOrderInstruction: kioskDineInSetting.pickUp.submitOrderInstruction
165
- ? {
166
- payAtCounter:
167
- kioskDineInSetting.pickUp.submitOrderInstruction?.payAtCounter?.['en'] ?? null,
168
- paid: kioskDineInSetting.pickUp.submitOrderInstruction?.paid?.['en'] ?? null
169
- }
170
- : defaultSubmitOrderInstruction,
171
- enablePaxDialog: kioskDineInSetting.pickUp.enablePaxDialog
172
- ? kioskDineInSetting.pickUp.enablePaxDialog
173
- : false
174
- }
175
- : defaultPickUp,
176
- displayStand: kioskDineInSetting?.displayStand
177
- ? {
178
- enabled: kioskDineInSetting.displayStand.enabled,
179
- standSlotRange: kioskDineInSetting.displayStand.standSlotRange,
180
- prefix: kioskDineInSetting.displayStand.prefix,
181
- padDigit: kioskDineInSetting.displayStand.padDigit,
182
- enablePaxDialog: kioskDineInSetting.displayStand.enablePaxDialog ?? false,
183
- submitOrderInstruction: kioskDineInSetting.displayStand.submitOrderInstruction
184
- ? {
185
- payAtCounter:
186
- kioskDineInSetting.displayStand.submitOrderInstruction?.payAtCounter?.['en'] ??
187
- null,
188
- paid: kioskDineInSetting.displayStand.submitOrderInstruction?.paid?.['en'] ?? null
189
- }
190
- : defaultSubmitOrderInstruction
191
- }
192
- : defaultDisplayStand
193
- }
194
- }
195
- const toOrderKioskSettingsDto = (
196
- kioskSetting: MfKioskOrderSetting
197
- ): {
198
- kioskSettings: OrderKioskSettings
199
- kioskDineIn?: OrderKioskDineInSequenceDto
200
- } => {
201
- const createDineInSettings = (dineInSetting: MfKioskDineInSetting): OrderKioskDineIn => ({
202
- requiredSlot: !!dineInSetting.displayStand,
203
- displayStand: {
204
- ...dineInSetting.displayStand,
205
- submitOrderInstruction: {
206
- payAtCounter: dineInSetting.displayStand.submitOrderInstruction?.payAtCounter
207
- ? {
208
- en: dineInSetting.displayStand.submitOrderInstruction.payAtCounter
209
- }
210
- : null,
211
- paid: dineInSetting.displayStand.submitOrderInstruction?.paid
212
- ? {
213
- en: dineInSetting.displayStand.submitOrderInstruction.paid
214
- }
215
- : null
216
- }
217
- },
218
- pickUp: {
219
- ...dineInSetting.pickUp,
220
- submitOrderInstruction: {
221
- payAtCounter: dineInSetting.pickUp.submitOrderInstruction?.payAtCounter
222
- ? {
223
- en: dineInSetting.pickUp.submitOrderInstruction.payAtCounter
224
- }
225
- : null,
226
- paid: dineInSetting.pickUp.submitOrderInstruction?.paid
227
- ? {
228
- en: dineInSetting.pickUp.submitOrderInstruction.paid
229
- }
230
- : null
231
- }
232
- }
233
- })
234
-
235
- const createKioskSettings = (dineIn?: OrderKioskDineIn): OrderKioskSettings => ({
236
- canTakeaway: kioskSetting.takeaway.enabled,
237
- dineIn,
238
- menuItem: kioskSetting.menuItem,
239
- coverImageLandscape: kioskSetting.coverImageLandscape,
240
- coverImagePortrait: kioskSetting.coverImagePortrait,
241
- otaChannel: kioskSetting.otaChannel || undefined,
242
- // Omit when unset so the backend's `?? config.autoCloseBill` inheritance
243
- // still applies — sending `false` here would pin it off for good.
244
- autoCloseBill: kioskSetting.autoCloseBill ?? undefined,
245
- printReceiptAfterClose: kioskSetting.printReceiptAfterClose ?? undefined,
246
- // Omit rather than send [] when the merchant restricts nothing, so the
247
- // saved document stays free of a field that means "all languages" anyway.
248
- languages: kioskSetting.languages?.length ? kioskSetting.languages : undefined,
249
- paymentSetting: createPaymentSettings(kioskSetting.paymentSetting),
250
- takeaway: kioskSetting.takeaway.submitOrderInstruction
251
- ? {
252
- submitOrderInstruction: {
253
- payAtCounter: kioskSetting.takeaway.submitOrderInstruction.payAtCounter
254
- ? {
255
- en: kioskSetting.takeaway.submitOrderInstruction.payAtCounter
256
- }
257
- : null,
258
- paid: kioskSetting.takeaway.submitOrderInstruction.paid
259
- ? {
260
- en: kioskSetting.takeaway.submitOrderInstruction.paid
261
- }
262
- : null
263
- }
264
- }
265
- : undefined
266
- })
267
-
268
- const createPaymentSettings = (
269
- paymentSetting: MfKioskPaymentSetting
270
- ): OrderKioskPaymentSetting | undefined => {
271
- return {
272
- paymentTypes: paymentSetting.paymentTypes,
273
- offlinePaymentTypes: paymentSetting.offlinePaymentTypes,
274
- ePaymentTypes: paymentSetting.ePaymentTypes
275
- }
276
- }
277
-
278
- if (!kioskSetting.dineIn.enabled) {
279
- return {
280
- kioskSettings: createKioskSettings()
281
- }
282
- }
283
-
284
- return {
285
- kioskSettings: createKioskSettings(createDineInSettings(kioskSetting.dineIn)),
286
- kioskDineIn: kioskSetting.dineIn.sequenceNumber
287
- }
288
- }
289
-
290
- export const OrderSettingMapper = {
291
- convertOrderSettingDto,
292
- toOrderKioskSettingsDto
293
- }
1
+ import {
2
+ OrderSettingsDto,
3
+ OrderKioskDineIn,
4
+ OrderKioskDineInSequenceDto,
5
+ FdoOrderKioskDineInSequence,
6
+ FdoEPaymentMethod
7
+ } from '@entity'
8
+ import type {
9
+ MfKioskOrderSetting,
10
+ MfKioskDineInSetting,
11
+ MfDisplayStandSetting,
12
+ KioskTakeawaySettingForm,
13
+ MfKioskOrderSettingForm,
14
+ MfKioskPaymentSetting,
15
+ MfKioskSubmitOrderInstruction,
16
+ KioskPickAtCounterSettingForm
17
+ } from '@/modules/order-setting/kiosk/interface'
18
+ import type { MfOrderSetting } from '@/modules/order-setting/interface'
19
+ import type { OrderKioskSettings, OrderKioskPaymentSetting } from '@entity'
20
+
21
+ export const defaultDisplayStand: MfDisplayStandSetting = {
22
+ enabled: false,
23
+ prefix: null,
24
+ padDigit: 0,
25
+ standSlotRange: {
26
+ min: 1,
27
+ max: 10
28
+ },
29
+ enablePaxDialog: false,
30
+ submitOrderInstruction: {
31
+ payAtCounter: null,
32
+ paid: null
33
+ }
34
+ }
35
+
36
+ export const defaultTakeaway: KioskTakeawaySettingForm = {
37
+ enabled: false,
38
+ submitOrderInstruction: {
39
+ payAtCounter: null,
40
+ paid: null
41
+ }
42
+ }
43
+
44
+ export const defaultPickUp: KioskPickAtCounterSettingForm = {
45
+ enabled: false,
46
+ submitOrderInstruction: {
47
+ payAtCounter: null,
48
+ paid: null
49
+ },
50
+ enablePaxDialog: false
51
+ }
52
+
53
+ export const defaultKioskOrderSetting: MfKioskOrderSettingForm = {
54
+ dineIn: {
55
+ enabled: false,
56
+ pickUp: defaultPickUp,
57
+ sequenceNumber: FdoOrderKioskDineInSequence.parse({}),
58
+ displayStand: defaultDisplayStand
59
+ },
60
+ takeaway: defaultTakeaway,
61
+ paymentSetting: {
62
+ paymentTypes: [],
63
+ offlinePaymentTypes: [],
64
+ ePaymentTypes: {
65
+ terminal: false,
66
+ card: {
67
+ terminal: false,
68
+ nfc: false
69
+ },
70
+ eWallet: {
71
+ terminalQrPay: false,
72
+ terminalScanPay: false,
73
+ qrPay: false,
74
+ scanPay: false
75
+ }
76
+ }
77
+ },
78
+ menuItem: {
79
+ showAllOnly: false
80
+ },
81
+ coverImageLandscape: null,
82
+ coverImagePortrait: null,
83
+ otaChannel: '',
84
+ autoSendKitchen: null,
85
+ autoCloseBill: null,
86
+ printReceiptAfterClose: null,
87
+ languages: null
88
+ }
89
+
90
+ export const defaultSubmitOrderInstruction: MfKioskSubmitOrderInstruction = {
91
+ payAtCounter: null,
92
+ paid: null
93
+ }
94
+
95
+ const convertOrderSettingDto = (dto: OrderSettingsDto): MfOrderSetting => {
96
+ return {
97
+ kiosk: toKiosk(dto.kioskSettings, dto.sequenceSettings?.kioskDineIn)
98
+ }
99
+ }
100
+
101
+ const toKiosk = (
102
+ kioskOrderSettings: OrderKioskSettings | null | undefined,
103
+ kioskDineInSeq?: OrderKioskDineInSequenceDto
104
+ ): MfKioskOrderSetting => {
105
+ return {
106
+ dineIn: toKioskDineInSetting(
107
+ kioskDineInSeq ?? {
108
+ current: 0,
109
+ prefix: '#K'
110
+ },
111
+ kioskOrderSettings?.dineIn ?? undefined
112
+ ),
113
+ takeaway: {
114
+ enabled: kioskOrderSettings?.canTakeaway ?? false,
115
+ submitOrderInstruction: kioskOrderSettings?.takeaway?.submitOrderInstruction
116
+ ? {
117
+ payAtCounter:
118
+ kioskOrderSettings?.takeaway?.submitOrderInstruction?.payAtCounter?.['en'] ?? null,
119
+ paid: kioskOrderSettings?.takeaway?.submitOrderInstruction?.paid?.['en'] ?? null
120
+ }
121
+ : defaultSubmitOrderInstruction
122
+ },
123
+ paymentSetting: {
124
+ paymentTypes: kioskOrderSettings?.paymentSetting?.paymentTypes ?? [],
125
+ offlinePaymentTypes: kioskOrderSettings?.paymentSetting?.offlinePaymentTypes ?? [],
126
+ ePaymentTypes:
127
+ kioskOrderSettings?.paymentSetting?.ePaymentTypes ??
128
+ FdoEPaymentMethod.parse({
129
+ card: {
130
+ terminal: false,
131
+ nfc: false
132
+ },
133
+ eWallet: {
134
+ qrPay: false,
135
+ scanPay: false
136
+ }
137
+ })
138
+ },
139
+ menuItem: {
140
+ showAllOnly: kioskOrderSettings?.menuItem?.showAllOnly ?? false
141
+ },
142
+ otaChannel: kioskOrderSettings?.otaChannel ?? '',
143
+ coverImageLandscape: kioskOrderSettings?.coverImageLandscape ?? null,
144
+ coverImagePortrait: kioskOrderSettings?.coverImagePortrait ?? null,
145
+ // The cover-image editor works on one list per orientation and writes both
146
+ // this and coverImage* through modules/order-setting/kiosk/coverCarousel.
147
+ // It still has to be read back explicitly: the write side rebuilds
148
+ // kioskSettings field by field and the backend $sets the whole
149
+ // subdocument, so anything not carried here is deleted on the next
150
+ // unrelated save.
151
+ coverCarousel: kioskOrderSettings?.coverCarousel,
152
+ // Preserve "unset" as null — collapsing to a boolean here is what let an
153
+ // unrelated save overwrite the inherited dineInSettings value.
154
+ autoSendKitchen: kioskOrderSettings?.autoSendKitchen ?? null,
155
+ autoCloseBill: kioskOrderSettings?.autoCloseBill ?? null,
156
+ printReceiptAfterClose: kioskOrderSettings?.printReceiptAfterClose ?? null,
157
+ // Stored [] means the same thing as unset ("all languages"), so collapse it
158
+ // to null here — the form only ever has to reason about null vs a real set.
159
+ languages: kioskOrderSettings?.languages?.length ? [...kioskOrderSettings.languages] : null
160
+ }
161
+ }
162
+
163
+ const toKioskDineInSetting = (
164
+ kioskDineInSeq: OrderKioskDineInSequenceDto,
165
+ kioskDineInSetting?: OrderKioskDineIn
166
+ ): MfKioskDineInSetting => {
167
+ return {
168
+ enabled: !!kioskDineInSetting,
169
+ sequenceNumber: kioskDineInSeq,
170
+ pickUp: kioskDineInSetting?.pickUp
171
+ ? {
172
+ ...kioskDineInSetting.pickUp,
173
+ submitOrderInstruction: kioskDineInSetting.pickUp.submitOrderInstruction
174
+ ? {
175
+ payAtCounter:
176
+ kioskDineInSetting.pickUp.submitOrderInstruction?.payAtCounter?.['en'] ?? null,
177
+ paid: kioskDineInSetting.pickUp.submitOrderInstruction?.paid?.['en'] ?? null
178
+ }
179
+ : defaultSubmitOrderInstruction,
180
+ enablePaxDialog: kioskDineInSetting.pickUp.enablePaxDialog
181
+ ? kioskDineInSetting.pickUp.enablePaxDialog
182
+ : false
183
+ }
184
+ : defaultPickUp,
185
+ displayStand: kioskDineInSetting?.displayStand
186
+ ? {
187
+ enabled: kioskDineInSetting.displayStand.enabled,
188
+ standSlotRange: kioskDineInSetting.displayStand.standSlotRange,
189
+ prefix: kioskDineInSetting.displayStand.prefix,
190
+ padDigit: kioskDineInSetting.displayStand.padDigit,
191
+ enablePaxDialog: kioskDineInSetting.displayStand.enablePaxDialog ?? false,
192
+ submitOrderInstruction: kioskDineInSetting.displayStand.submitOrderInstruction
193
+ ? {
194
+ payAtCounter:
195
+ kioskDineInSetting.displayStand.submitOrderInstruction?.payAtCounter?.['en'] ??
196
+ null,
197
+ paid: kioskDineInSetting.displayStand.submitOrderInstruction?.paid?.['en'] ?? null
198
+ }
199
+ : defaultSubmitOrderInstruction
200
+ }
201
+ : defaultDisplayStand
202
+ }
203
+ }
204
+ const toOrderKioskSettingsDto = (
205
+ kioskSetting: MfKioskOrderSetting
206
+ ): {
207
+ kioskSettings: OrderKioskSettings
208
+ kioskDineIn?: OrderKioskDineInSequenceDto
209
+ } => {
210
+ const createDineInSettings = (dineInSetting: MfKioskDineInSetting): OrderKioskDineIn => ({
211
+ requiredSlot: !!dineInSetting.displayStand,
212
+ displayStand: {
213
+ ...dineInSetting.displayStand,
214
+ submitOrderInstruction: {
215
+ payAtCounter: dineInSetting.displayStand.submitOrderInstruction?.payAtCounter
216
+ ? {
217
+ en: dineInSetting.displayStand.submitOrderInstruction.payAtCounter
218
+ }
219
+ : null,
220
+ paid: dineInSetting.displayStand.submitOrderInstruction?.paid
221
+ ? {
222
+ en: dineInSetting.displayStand.submitOrderInstruction.paid
223
+ }
224
+ : null
225
+ }
226
+ },
227
+ pickUp: {
228
+ ...dineInSetting.pickUp,
229
+ submitOrderInstruction: {
230
+ payAtCounter: dineInSetting.pickUp.submitOrderInstruction?.payAtCounter
231
+ ? {
232
+ en: dineInSetting.pickUp.submitOrderInstruction.payAtCounter
233
+ }
234
+ : null,
235
+ paid: dineInSetting.pickUp.submitOrderInstruction?.paid
236
+ ? {
237
+ en: dineInSetting.pickUp.submitOrderInstruction.paid
238
+ }
239
+ : null
240
+ }
241
+ }
242
+ })
243
+
244
+ const createKioskSettings = (dineIn?: OrderKioskDineIn): OrderKioskSettings => ({
245
+ canTakeaway: kioskSetting.takeaway.enabled,
246
+ dineIn,
247
+ menuItem: kioskSetting.menuItem,
248
+ coverImageLandscape: kioskSetting.coverImageLandscape,
249
+ coverImagePortrait: kioskSetting.coverImagePortrait,
250
+ // Written straight back; see the read side in toKiosk().
251
+ coverCarousel: kioskSetting.coverCarousel,
252
+ otaChannel: kioskSetting.otaChannel || undefined,
253
+ // Omit when unset so the backend's `?? config.autoCloseBill` inheritance
254
+ // still applies — sending `false` here would pin it off for good.
255
+ autoSendKitchen: kioskSetting.autoSendKitchen ?? undefined,
256
+ autoCloseBill: kioskSetting.autoCloseBill ?? undefined,
257
+ printReceiptAfterClose: kioskSetting.printReceiptAfterClose ?? undefined,
258
+ // Omit rather than send [] when the merchant restricts nothing, so the
259
+ // saved document stays free of a field that means "all languages" anyway.
260
+ languages: kioskSetting.languages?.length ? kioskSetting.languages : undefined,
261
+ paymentSetting: createPaymentSettings(kioskSetting.paymentSetting),
262
+ takeaway: kioskSetting.takeaway.submitOrderInstruction
263
+ ? {
264
+ submitOrderInstruction: {
265
+ payAtCounter: kioskSetting.takeaway.submitOrderInstruction.payAtCounter
266
+ ? {
267
+ en: kioskSetting.takeaway.submitOrderInstruction.payAtCounter
268
+ }
269
+ : null,
270
+ paid: kioskSetting.takeaway.submitOrderInstruction.paid
271
+ ? {
272
+ en: kioskSetting.takeaway.submitOrderInstruction.paid
273
+ }
274
+ : null
275
+ }
276
+ }
277
+ : undefined
278
+ })
279
+
280
+ const createPaymentSettings = (
281
+ paymentSetting: MfKioskPaymentSetting
282
+ ): OrderKioskPaymentSetting | undefined => {
283
+ return {
284
+ paymentTypes: paymentSetting.paymentTypes,
285
+ offlinePaymentTypes: paymentSetting.offlinePaymentTypes,
286
+ ePaymentTypes: paymentSetting.ePaymentTypes
287
+ }
288
+ }
289
+
290
+ if (!kioskSetting.dineIn.enabled) {
291
+ return {
292
+ kioskSettings: createKioskSettings()
293
+ }
294
+ }
295
+
296
+ return {
297
+ kioskSettings: createKioskSettings(createDineInSettings(kioskSetting.dineIn)),
298
+ kioskDineIn: kioskSetting.dineIn.sequenceNumber
299
+ }
300
+ }
301
+
302
+ export const OrderSettingMapper = {
303
+ convertOrderSettingDto,
304
+ toOrderKioskSettingsDto
305
+ }