@feedmepos/mf-inventory-portal 1.2.21 → 1.2.22-dev.2

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 (58) hide show
  1. package/dist/{App-W6D-o08-.js → App-DtwLZ9Ng.js} +1 -1
  2. package/dist/{ApprovalView-BZbz53sS.js → ApprovalView-DTiPzA1y.js} +9 -9
  3. package/dist/{BindingsDialog-Dfz4UC2D.js → BindingsDialog--1wB_TX2.js} +2 -2
  4. package/dist/{BindingsPicker-CUZ6fUJL.js → BindingsPicker-JjZfjlvz.js} +9 -9
  5. package/dist/{BindingsTable-DLyW3TKI.js → BindingsTable-M2CGWdTD.js} +1 -1
  6. package/dist/{ClosingDraftView-D8rYJLzL.js → ClosingDraftView-B800NjEZ.js} +101 -101
  7. package/dist/ClosingTemplateView-B1TVIzzy.js +2001 -0
  8. package/dist/{DeliveryOrderPrintPreview-DsA24Pnj.js → DeliveryOrderPrintPreview-CUXfCixj.js} +8 -8
  9. package/dist/{FmFilterableMenuOptions.vue_vue_type_script_setup_true_lang-CSgZa48L.js → FmFilterableMenuOptions.vue_vue_type_script_setup_true_lang-Bdw3Q4Dz.js} +33 -33
  10. package/dist/{FmMultiselectDialog-cBcJaj1q.js → FmMultiselectDialog-CyYcvvyg.js} +1 -1
  11. package/dist/{FmUnitInput.vue_vue_type_script_setup_true_lang-B7bQq5iJ.js → FmUnitInput.vue_vue_type_script_setup_true_lang-D-FDSjxY.js} +49 -49
  12. package/dist/{ImportView-BiGFDwgB.js → ImportView-BR7JpsG8.js} +27 -27
  13. package/dist/{IngredientBindedItem.vue_vue_type_script_setup_true_lang-BxMg3wSa.js → IngredientBindedItem.vue_vue_type_script_setup_true_lang-Bae5DUA9.js} +8 -8
  14. package/dist/{IngredientGroupView-cOtXBmbd.js → IngredientGroupView-c6XH5Fzg.js} +17 -17
  15. package/dist/{IngredientsView-CZ5DxCkP.js → IngredientsView-D4JiQ6Bp.js} +72 -73
  16. package/dist/{IntegrationView-DhBH_Vdb.js → IntegrationView-BdOTe6FG.js} +3 -3
  17. package/dist/{InventoryBindingForm-CDD_kUI6.js → InventoryBindingForm-kqrZutMr.js} +1 -1
  18. package/dist/{InventoryBindingForm.vue_vue_type_script_setup_true_lang-SyVUEz6e.js → InventoryBindingForm.vue_vue_type_script_setup_true_lang-DZ-Mr8-U.js} +12 -12
  19. package/dist/{InventoryBindingSummary-BqTUX2Vr.js → InventoryBindingSummary-D4p9cOiy.js} +1 -1
  20. package/dist/{NumberPrecisionInput.vue_vue_type_script_setup_true_lang-Bobv93nw.js → NumberPrecisionInput.vue_vue_type_script_setup_true_lang-Bj_2aQiY.js} +1 -1
  21. package/dist/{PremiumBadge.vue_vue_type_script_setup_true_lang-TA0bATB6.js → PremiumBadge.vue_vue_type_script_setup_true_lang-CX9H2gLU.js} +7 -7
  22. package/dist/{PublishView-CN3AcICc.js → PublishView-DcQQtuF8.js} +10 -10
  23. package/dist/{PurchaseOrderPrintPreview-DkCHxiUR.js → PurchaseOrderPrintPreview-Ueo4Yftu.js} +13 -13
  24. package/dist/{ReceiveRequestView-Cnk3y0pY.js → ReceiveRequestView-Cikz66hY.js} +115 -115
  25. package/dist/{RecipeView-h5BAcpPp.js → RecipeView-DL1kKy2w.js} +50 -50
  26. package/dist/StockView-DzaCcxc5.js +2384 -0
  27. package/dist/{SubsidiaryTreeDialog.vue_vue_type_script_setup_true_lang-BtAp8Jyl.js → SubsidiaryTreeDialog.vue_vue_type_script_setup_true_lang-DP5AFZM2.js} +1 -1
  28. package/dist/{SupplierView-mV32uCUV.js → SupplierView-CJuI_jPc.js} +93 -93
  29. package/dist/TransferDetails.vue_vue_type_script_setup_true_lang-BoZEbHkN.js +3233 -0
  30. package/dist/{TransferTemplateView-0fDZ7h02.js → TransferTemplateView-DiGdnr0-.js} +140 -140
  31. package/dist/{UnitView-BWeYh3xJ.js → UnitView-CA2isH5r.js} +44 -44
  32. package/dist/{WarehouseView-CgOBUpUw.js → WarehouseView-BMUJN1D1.js} +66 -66
  33. package/dist/api/adjustment-template.d.ts +1 -0
  34. package/dist/api/closing-template.d.ts +1 -0
  35. package/dist/{app-DZsfOzL0.js → app-DdrL4md8.js} +11518 -11220
  36. package/dist/app.d.ts +21 -0
  37. package/dist/app.js +4 -4
  38. package/dist/{decimal-utpTSxBA.js → decimal-DJjE7Vf3.js} +1 -1
  39. package/dist/{format-unit-display-JVq8RwWN.js → format-unit-display-CK-PNM0G.js} +33 -33
  40. package/dist/{import-export.helper-DHZ7P1SR.js → import-export.helper-CJeCekEB.js} +6 -6
  41. package/dist/{index-DNzkuf7T.js → index-Crgf6sCC.js} +1 -1
  42. package/dist/{index-Db0orR3s.js → index-D4F6boO1.js} +1 -1
  43. package/dist/layout/SingleColumnLayout.vue.d.ts +6 -3
  44. package/dist/{purchase-order-template-CkUvuhlD.js → purchase-order-template-BOLP3UzN.js} +1 -1
  45. package/dist/{stock-Cbg0VYIw.js → stock-DqL6z9wL.js} +1 -1
  46. package/dist/{supplier-kyi141cP.js → supplier-CW3GGX9U.js} +1 -1
  47. package/dist/tsconfig.app.tsbuildinfo +1 -1
  48. package/dist/{use-ingredient-select-dialog-ByVlB3un.js → use-ingredient-select-dialog-CrCo-DHA.js} +1 -1
  49. package/dist/{use-inventory-binding-dialog-DhuHKXCT.js → use-inventory-binding-dialog-RdX9Q4q9.js} +1 -1
  50. package/dist/views/adjustment-template/wastage-template/actions.d.ts +60 -0
  51. package/dist/views/adjustment-template/wastage-template/table.d.ts +60 -0
  52. package/dist/views/receive-request/components/delivery-order-form/SystemTrailDialog.vue.d.ts +8 -4
  53. package/dist/views/stock/components/dialog/StockAdjustmentSideSheet.vue.d.ts +20 -0
  54. package/package.json +1 -1
  55. package/dist/ClosingTemplateView-BFMoAEiM.js +0 -1970
  56. package/dist/StockView-D_ACLa2e.js +0 -2160
  57. package/dist/TransferDetails.vue_vue_type_script_setup_true_lang-BXtVtPx2.js +0 -3394
  58. package/dist/closing-template-ixqnpXdN.js +0 -53
@@ -0,0 +1,2001 @@
1
+ import { ref as F, h as R, defineComponent as Y, resolveComponent as P, openBlock as $, createElementBlock as M, createElementVNode as y, normalizeClass as q, createTextVNode as le, toDisplayString as S, unref as d, createCommentVNode as z, createVNode as C, withCtx as A, Fragment as j, renderList as W, computed as V, watch as Ae, createSlots as Ee, createBlock as U, isRef as Ye, normalizeStyle as Ke, Teleport as Ge, normalizeProps as qe, guardReactiveProps as Je, mergeProps as We } from "vue";
2
+ import { u as de, l as ie, an as Xe, D as ne, j as L, i as Qe, f as Ve, ao as Ze, ap as ae, Y as Ue, aq as pe, X as fe, a as ve, b as et, ar as tt, as as Le, C as nt, E as ot, at as st, e as O, L as G, Q as lt, au as at, r as rt, K as Ne, A as it, ab as se, av as ct, aw as mt, G as ut, I as dt, J as pt } from "./app-DdrL4md8.js";
3
+ import { useI18n as K, useCoreStore as ge } from "@feedmepos/mf-common";
4
+ import { useDialog as ce, useDialogChild as ft, useSnackbar as me, FmButtonVariant as oe, components as H, useProxiedModel as vt, useBreakpoints as gt } from "@feedmepos/ui-library";
5
+ import { defineStore as Be, storeToRefs as ze } from "pinia";
6
+ import { u as yt } from "./use-ingredient-select-dialog-CrCo-DHA.js";
7
+ const ue = Be(
8
+ "closingTemplateTable",
9
+ function() {
10
+ const { t: a } = K(), s = ce(), m = F({}), t = re(), n = F({}), p = F(new Array()), h = F(!1), i = de(), l = ie();
11
+ function v(r) {
12
+ const f = {
13
+ title: r.name,
14
+ doc: r,
15
+ controller: {
16
+ publishAll: async () => {
17
+ var e;
18
+ const u = await l.publishSingleDoc(
19
+ r._id,
20
+ (e = r.locations) == null ? void 0 : e.map((x) => x.dbName)
21
+ );
22
+ return m.value = u.publishedRevByLocation || {}, m.value;
23
+ },
24
+ publishAtLocation: async (u) => {
25
+ const e = await l.publishSingleDoc(r._id, [u.dbName]);
26
+ return m.value = e.publishedRevByLocation || {}, m.value;
27
+ }
28
+ },
29
+ initialPublishedRev: m.value,
30
+ locations: i.locations,
31
+ enabledLocations: r.locations
32
+ };
33
+ s.open({
34
+ title: "Publish template",
35
+ contentComponent: Ze,
36
+ contentComponentProps: f,
37
+ closeButton: !0,
38
+ primaryActions: {
39
+ text: a("common.close"),
40
+ close: !0,
41
+ variant: "tertiary"
42
+ }
43
+ });
44
+ }
45
+ async function o() {
46
+ if (p.value = [], !!i._currentLocation) {
47
+ h.value = !0;
48
+ try {
49
+ const [r, f, u] = await Promise.all([
50
+ l.readTemplates(),
51
+ l.getRecentPublishingJob(),
52
+ l.getRecentPublishInfo()
53
+ ]).delayed(1e3);
54
+ p.value = r, n.value = f, m.value = u.publishedRevByLocation || {};
55
+ } catch (r) {
56
+ console.log("Something went wrong when fetching templates:", r);
57
+ } finally {
58
+ h.value = !1;
59
+ }
60
+ }
61
+ }
62
+ async function _(r) {
63
+ if (!p.value.find((f) => f._id) && i._currentLocation) {
64
+ h.value = !0;
65
+ try {
66
+ const [f] = await Promise.all([
67
+ l.getTemplate(r),
68
+ new Promise((u) => setTimeout(u, 1e3))
69
+ ]);
70
+ p.value = [f];
71
+ } catch (f) {
72
+ console.log("Something went wrong when fetching templates:", f);
73
+ } finally {
74
+ h.value = !1;
75
+ }
76
+ }
77
+ }
78
+ function w(r, f) {
79
+ switch (f = Ve(f), r) {
80
+ case L.Details:
81
+ return t.viewTemplate(f);
82
+ case L.Edit:
83
+ return t.updateTemplate(f);
84
+ case L.Delete:
85
+ return t.deleteTemplate(f, h, o);
86
+ case L.Publish:
87
+ return v(f);
88
+ case L.Duplicate:
89
+ return t.duplicateTemplate(f, h, o);
90
+ }
91
+ }
92
+ return {
93
+ columnDefs: [
94
+ {
95
+ id: "_id",
96
+ accessorKey: "_id",
97
+ header: () => a("inventory.closing.table.createdAt"),
98
+ cell(r) {
99
+ return Xe(`${r.getValue()}`);
100
+ },
101
+ enableSorting: !0
102
+ },
103
+ {
104
+ id: "name",
105
+ accessorKey: "name",
106
+ header: () => a("inventory.closing.table.name"),
107
+ enableSorting: !0,
108
+ size: 200
109
+ },
110
+ {
111
+ id: "noOfItems",
112
+ accessorKey: "items.length",
113
+ header: () => a("inventory.closing.table.noOfItems"),
114
+ enableSorting: !1,
115
+ meta: {
116
+ width: "10rem",
117
+ textAlign: "right"
118
+ }
119
+ },
120
+ {
121
+ id: "enabledLocations",
122
+ accessorKey: "locations.length",
123
+ header: () => a("inventory.closing.table.enabledOutlets"),
124
+ cell(r) {
125
+ var u;
126
+ const f = (u = r.row.original.locations) == null ? void 0 : u.length;
127
+ return f ? `${f}` : "All";
128
+ },
129
+ enableSorting: !1,
130
+ meta: {
131
+ width: "10rem",
132
+ textAlign: "right"
133
+ }
134
+ },
135
+ {
136
+ id: "ref",
137
+ accessorKey: "ref",
138
+ header: () => a("inventory.closing.table.reference"),
139
+ enableSorting: !1,
140
+ size: "auto"
141
+ },
142
+ {
143
+ id: "status",
144
+ header: () => a("inventory.adjustment.template.table.status"),
145
+ enableSorting: !1,
146
+ cell(r) {
147
+ const f = r.row.original, u = f._rev, e = r.row.original.locations || i.locations, I = e.filter((T) => !!(m.value[T.dbName] || []).find((k) => k._id === f._id && k._rev === u)).length === e.length;
148
+ return R(
149
+ "div",
150
+ {
151
+ class: "flex items-center gap-8"
152
+ },
153
+ R(
154
+ "div",
155
+ {
156
+ class: [
157
+ "fm-status-badge",
158
+ I ? "fm-status-badge-success-secondary" : "fm-status-badge-info-secondary"
159
+ ]
160
+ },
161
+ I ? "Published" : "Unpublished"
162
+ )
163
+ );
164
+ }
165
+ },
166
+ {
167
+ id: "action",
168
+ cell(r) {
169
+ const f = r.row.original, u = [
170
+ ne[L.Edit],
171
+ ne[L.Duplicate],
172
+ ne[L.Delete],
173
+ ne[L.Publish]
174
+ ];
175
+ return Qe(u, (e) => w(e, f));
176
+ },
177
+ enableSorting: !1,
178
+ size: 40,
179
+ meta: {
180
+ cellClass: "",
181
+ headerClass: ""
182
+ }
183
+ }
184
+ ],
185
+ recentPublish: n,
186
+ templates: p,
187
+ loading: h,
188
+ fetchTemplates: o,
189
+ loadTemplate: _
190
+ };
191
+ }
192
+ );
193
+ var ye = /* @__PURE__ */ ((c) => (c.Ingredients = "Ingredients", c))(ye || {});
194
+ function He(c) {
195
+ const a = c.sku, s = new Set(c.disabledMeasurements);
196
+ return [
197
+ {
198
+ code: a.code,
199
+ name: a.name,
200
+ unit: a.unit.abbrev,
201
+ enabled: !s.has(a.unit._id)
202
+ },
203
+ ...a.unit.measurements.map((n) => ({
204
+ unit: n.abbrev,
205
+ enabled: !s.has(n.id)
206
+ }))
207
+ ];
208
+ }
209
+ function Oe() {
210
+ return [
211
+ {
212
+ id: "code",
213
+ name: "Code"
214
+ },
215
+ {
216
+ id: "name",
217
+ name: "Name"
218
+ },
219
+ {
220
+ id: "unit",
221
+ name: "Unit"
222
+ },
223
+ {
224
+ id: "enabled",
225
+ name: "Enabled"
226
+ }
227
+ ];
228
+ }
229
+ function ht(c) {
230
+ var h;
231
+ const s = ge().currentBusiness.value, t = (h = c.map((i) => {
232
+ var b;
233
+ const l = i.items.flatMap(He), v = Oe(), o = [
234
+ ["Template ID", i._id],
235
+ ["Template name", i.name],
236
+ ["Business name", s == null ? void 0 : s.name],
237
+ ["Business ID", s == null ? void 0 : s._id],
238
+ ["Menu version", s == null ? void 0 : s.menuVersion],
239
+ [
240
+ "Locations",
241
+ ...(b = i.locations) != null && b.length ? i.locations.map((r) => `${r.name} (${r.dbName})`) : ["All"]
242
+ ],
243
+ ["Reference", i.ref ?? ""],
244
+ [],
245
+ v.map((r) => r.name),
246
+ ...l.map((r) => v.map((f) => r[f.id]))
247
+ ], _ = v.map((r) => `system:${r.id}`), w = ae(o, _);
248
+ return { name: i.name, sheet: w };
249
+ }).reduce(
250
+ (i, l) => {
251
+ var o;
252
+ const v = l.name.slice(0, 12);
253
+ return (o = i.sheetOccurence)[v] ?? (o[v] = 0), i.sheetOccurence[v] += 1, i.sheets[`${v} (${i.sheetOccurence[v]})`] = l.sheet, i;
254
+ },
255
+ {
256
+ sheets: {},
257
+ sheetOccurence: {}
258
+ }
259
+ )) == null ? void 0 : h.sheets, n = `${s == null ? void 0 : s.name} closing templates (${Ue(/* @__PURE__ */ new Date())}).xlsx`, p = pe(t);
260
+ return fe(p, n), n;
261
+ }
262
+ function bt(c) {
263
+ ge().currentBusiness.value;
264
+ const s = 3, m = (o) => {
265
+ const _ = [], w = o.sku, b = new Set(o.disabledMeasurements || []);
266
+ b.has(w.unit._id) || _.push(w.unit.abbrev);
267
+ for (const r of w.unit.measurements) {
268
+ if (_.length >= s) break;
269
+ b.has(r.id) || _.push(r.abbrev);
270
+ }
271
+ return _;
272
+ }, t = ["#", "Code", "Name", "UOM"], n = [
273
+ ["Template:", c.name],
274
+ ["Reference:", c.ref ?? ""],
275
+ [],
276
+ t,
277
+ ...c.items.map((o, _) => {
278
+ const w = m(o);
279
+ return [
280
+ _ + 1,
281
+ // Index starting from 1
282
+ o.sku.code,
283
+ o.sku.name,
284
+ // Add UOM columns (up to MAX_UOM_COLUMNS)
285
+ ...Array(s).fill("").map(
286
+ (b, r) => w[r] ? `_____ ${w[r]}` : ""
287
+ )
288
+ ];
289
+ })
290
+ ], p = ae(n, t);
291
+ if (p["!ref"]) {
292
+ const o = {
293
+ top: { style: "thin", color: { rgb: "000000" } },
294
+ bottom: { style: "thin", color: { rgb: "000000" } },
295
+ left: { style: "thin", color: { rgb: "000000" } },
296
+ right: { style: "thin", color: { rgb: "000000" } }
297
+ }, _ = 4, w = _ + c.items.length, b = t.map((r, f) => String.fromCharCode(65 + f));
298
+ for (let r = _; r <= w; r++)
299
+ b.forEach((f) => {
300
+ const u = `${f}${r}`;
301
+ p[u] || (p[u] = { t: "s", v: "" }), p[u].s = {
302
+ border: o
303
+ };
304
+ });
305
+ }
306
+ p["!cols"] = [
307
+ { wch: 5 },
308
+ // Index column - narrow
309
+ { wch: 15 },
310
+ // Code column
311
+ { wch: 30 },
312
+ // Name column - adjusted for more columns
313
+ ...Array.from({ length: s }, () => ({ wch: 15 }))
314
+ // UOM columns
315
+ ], p["!margins"] = {
316
+ left: 0.7,
317
+ right: 0.7,
318
+ top: 0.75,
319
+ bottom: 0.75,
320
+ header: 0.3,
321
+ footer: 0.3
322
+ };
323
+ const i = c.name.slice(0, 31), l = pe({ [i]: p }), v = `${c.name} - Closing Template (${Ue(/* @__PURE__ */ new Date())}).xlsx`;
324
+ return fe(l, v), v;
325
+ }
326
+ function _t() {
327
+ const c = ge(), a = ve(), s = et(), m = He({
328
+ sku: {
329
+ unit: {
330
+ _id: "",
331
+ name: "Unit",
332
+ abbrev: "Unit",
333
+ precision: 0,
334
+ measurements: []
335
+ },
336
+ code: "ING001",
337
+ _id: "",
338
+ name: "Sugar"
339
+ }
340
+ })[0], t = c.currentBusiness.value, n = Oe(), p = [
341
+ ["Template ID (leave empty to create new)", ""],
342
+ ["Template Name", "New template"],
343
+ ["Business name", t == null ? void 0 : t.name],
344
+ ["Business ID", t == null ? void 0 : t._id],
345
+ ["Menu version", t == null ? void 0 : t.menuVersion],
346
+ [
347
+ "Location codes (leave empty to enable all)",
348
+ "Example outlet (restaurant_xxx)",
349
+ "Example outlet 2 (restaurant_xxx)"
350
+ ],
351
+ ["Reference:"],
352
+ [],
353
+ n.map((b) => b.name),
354
+ n.map((b) => m[b.id])
355
+ ], h = n.map((b) => `system:${b.id}`), i = ae(p, h), l = s.isEnabled ? s.state.setting.childItems ?? [] : [], v = l.reduce(
356
+ (b, r) => {
357
+ var I, T;
358
+ const f = (I = s.netSuiteItemIdToSkuId.get(r.parentNetSuiteId)) == null ? void 0 : I[0], u = (T = s.netSuiteMeasurementIdToMeasurementId.get(
359
+ r.unitOfMeasureId
360
+ )) == null ? void 0 : T[0];
361
+ if (!r.externalId)
362
+ return b;
363
+ if (!f)
364
+ return console.error(`Item ${r.externalId} cannot be mapped to parent FdoInventorySku.`, r), b;
365
+ const e = a.skuById[f], x = e.unit.measurements.find((g) => g.id === u);
366
+ return x ? (b[r.externalId] = {
367
+ sku: e,
368
+ measurement: x
369
+ }, b) : (console.error(
370
+ `Item ${r.externalId} found parent FdoInventorySku of ${e.code} ${e.name} but the measurement of netsuite id ${r.unitOfMeasureId} cannot be found.`,
371
+ r
372
+ ), b);
373
+ },
374
+ {}
375
+ ), o = ae(
376
+ [
377
+ ...a.skus.flatMap((b) => [
378
+ [b.code, b.name, b.unit.abbrev, !0],
379
+ ...b.unit.measurements.map((f) => [
380
+ "",
381
+ "",
382
+ f.abbrev,
383
+ !f.abbrev.toLocaleLowerCase("en-us").includes("inactive")
384
+ ])
385
+ ]),
386
+ ...Object.entries(v).map(([b, { sku: r, measurement: f }]) => [
387
+ r.code,
388
+ r.name,
389
+ f.abbrev,
390
+ !f.abbrev.toLocaleLowerCase("en-us").includes("inactive"),
391
+ b
392
+ ])
393
+ ],
394
+ [
395
+ "Code",
396
+ "Name",
397
+ "Units",
398
+ "Enabled (true/false)",
399
+ ...l.length ? ["Netsuite Parent"] : []
400
+ ]
401
+ ), _ = pe({
402
+ Template: i,
403
+ Ingredients: o
404
+ }), w = `${t == null ? void 0 : t.name} transfer templates import.xlsx`;
405
+ return fe(_, w), w;
406
+ }
407
+ function xt(c) {
408
+ if (!c.length || `${c[0]}`.toLocaleLowerCase() === "all")
409
+ return [];
410
+ const a = /(.*) \(((warehouse_|restaurant_).{24,})\)/, m = de().locationByDbName;
411
+ return c.map((t) => {
412
+ const n = new Array(), p = t.trim(), h = a.exec(p);
413
+ if (!h)
414
+ return n.push(`Enabled location value of ${p} cannot be read.`), {
415
+ errors: n
416
+ };
417
+ const i = h[1], l = h[2], v = m[l];
418
+ return v ? (i !== v.name && n.push(
419
+ `Location id ${l} has non-matching name. Found ${i} but expected ${v.name}`
420
+ ), {
421
+ errors: n,
422
+ location: v
423
+ }) : (n.push(`Location (${i}) of id ${l} is not found.`), {
424
+ errors: n
425
+ });
426
+ });
427
+ }
428
+ function wt(c) {
429
+ const [
430
+ a,
431
+ s,
432
+ m,
433
+ t,
434
+ n,
435
+ p,
436
+ h,
437
+ i
438
+ ] = Le(c);
439
+ return {
440
+ id: `${s[1] ?? ""}`.trim(),
441
+ name: `${m[1] ?? ""}`.trim(),
442
+ locations: h.slice(1).map((l) => `${l}`.trim()).filter((l) => l),
443
+ reference: `${i[1] ?? ""}`.trim()
444
+ };
445
+ }
446
+ function kt(c) {
447
+ const [
448
+ a,
449
+ s,
450
+ m,
451
+ t,
452
+ n,
453
+ p,
454
+ h,
455
+ i,
456
+ l,
457
+ v,
458
+ ...o
459
+ ] = Le(c);
460
+ if (!a || !a.length || a.some((f) => f.length && !f.startsWith("system:")))
461
+ throw new Error("Missing meta header. Excel file does not come from the template.");
462
+ const _ = a.map((f) => f.split(":")[1]), b = ["code", "name", "unit", "enabled"].filter((f) => !_.includes(f));
463
+ if (b.length)
464
+ throw new Error(
465
+ `Missing meta headers (${b.join()}). Excel file does not come from the template.`
466
+ );
467
+ return o.map((f, u) => {
468
+ const e = {};
469
+ for (const x in _) {
470
+ const I = _[x];
471
+ Object.assign(e, { [I]: f[x] });
472
+ }
473
+ return {
474
+ index: u,
475
+ data: e
476
+ };
477
+ });
478
+ }
479
+ function Tt(c) {
480
+ return c.reduce(
481
+ (a, s) => {
482
+ var n;
483
+ const m = s.data, t = s.index;
484
+ return m.unit && (m.code ? a.result.push({ parent: s, children: [] }) : a.result.length ? (n = a.result.at(-1)) == null || n.children.push(s) : a.errors.push(`Cannot find parent for row ${t + 9}`)), a;
485
+ },
486
+ { result: new Array(), errors: new Array() }
487
+ );
488
+ }
489
+ function $t(c) {
490
+ const a = c.parent.data, s = new Array(), t = ve().skuByCode[a.code ?? ""];
491
+ if (!t)
492
+ return s.push(`Cannot find ingredient of code ${a.code} ${a.name}`), { errors: s };
493
+ const n = {
494
+ sku: t
495
+ }, p = /* @__PURE__ */ new Set([t.unit._id, ...t.unit.measurements.map((i) => i.id)]), h = t.unit.measurements.find((i) => i.abbrev === a.unit);
496
+ a.unit !== t.unit.abbrev && !h ? s.push(
497
+ `Cannot find measurement unit of ${a.unit} for (${a.code}) ${a.name}.`
498
+ ) : (a.enabled === !0 || `${a.enabled}`.toLocaleLowerCase() === "true") && p.delete(t.unit._id);
499
+ for (const i of c.children) {
500
+ const l = i.data, v = l.unit === t.unit.abbrev ? t.unit : void 0, o = t.unit.measurements.find((_) => _.abbrev === l.unit);
501
+ if (!o && !v) {
502
+ s.push(
503
+ `Cannot find measurement unit of ${l.unit} for (${a.code}) ${a.name}.`
504
+ );
505
+ continue;
506
+ }
507
+ (l.enabled === !0 || `${l.enabled}`.toLocaleLowerCase() === "true") && p.delete((o == null ? void 0 : o.id) ?? (v == null ? void 0 : v._id) ?? "");
508
+ }
509
+ return p.has(t.unit._id) && n.sku.unit.measurements.every((i) => p.has(i.id)) && s.push(`Ingredient ${t.code} - ${t.name} must have at least one unit enabled.`), n.disabledMeasurements = [...p], { errors: s, templateItem: n };
510
+ }
511
+ function Ct(c) {
512
+ const a = c.SheetNames.filter(
513
+ (n) => !Object.values(ye).map(String).includes(n)
514
+ ), m = ue().templates, t = tt(m, "_id");
515
+ try {
516
+ return a.reduce(
517
+ (n, p) => {
518
+ const h = new Array(), i = c.Sheets[p], l = wt(i), v = xt(l.locations), o = v.filter((e) => e.location).map((e) => e.location);
519
+ h.push(...v.flatMap((e) => e.errors));
520
+ const _ = kt(i).filter(
521
+ (e) => e.data.code || e.data.unit
522
+ ), w = Tt(_);
523
+ h.push(...w.errors);
524
+ const b = w.result.map(
525
+ (e) => $t(e)
526
+ );
527
+ h.push(...b.flatMap((e) => e.errors));
528
+ const r = b.filter((e) => e.templateItem).map((e) => e.templateItem);
529
+ if (l.id) {
530
+ const e = t[l.id];
531
+ if (!e) {
532
+ const I = {
533
+ _id: l.id,
534
+ _rev: "",
535
+ name: l.name || `(unnamed from sheet ${p || "<unnamed sheet>"})`,
536
+ items: []
537
+ };
538
+ return h.push(`Template ID ${l.id} is not found.`), n.importUpdateResult.push({
539
+ type: "update",
540
+ original: I,
541
+ template: I,
542
+ excelSheetName: p,
543
+ errors: h
544
+ }), n;
545
+ }
546
+ const x = {
547
+ type: "update",
548
+ original: e,
549
+ template: {
550
+ ...e,
551
+ name: l.name,
552
+ locations: o.length ? o : null,
553
+ ref: l.reference,
554
+ items: r
555
+ },
556
+ excelSheetName: p,
557
+ errors: h
558
+ };
559
+ return n.importUpdateResult.push(x), n;
560
+ }
561
+ const u = {
562
+ type: "create",
563
+ template: {
564
+ name: l.name,
565
+ locations: o.length ? o : null,
566
+ ref: l.reference,
567
+ items: r
568
+ },
569
+ excelSheetName: p,
570
+ errors: h
571
+ };
572
+ return n.importCreateResult.push(u), n;
573
+ },
574
+ {
575
+ invalidExcel: !1,
576
+ importCreateResult: new Array(),
577
+ importUpdateResult: new Array()
578
+ }
579
+ );
580
+ } catch (n) {
581
+ return {
582
+ invalidExcel: !0,
583
+ invalidExcelMessage: (n == null ? void 0 : n.message) ?? "Invalid excel",
584
+ importCreateResult: [],
585
+ importUpdateResult: []
586
+ };
587
+ }
588
+ }
589
+ const St = { class: "flex items-center gap-12 pl-8" }, It = { class: "flex flex-col" }, Dt = { class: "fm-typo-en-body-md-400 text-fm-color-typo-primary flex items-center gap-4" }, Mt = {
590
+ key: 0,
591
+ class: "text-fm-color-typo-secondary fm-typo-en-body-sm-400"
592
+ }, Ft = { key: 0 }, Pe = /* @__PURE__ */ Y({
593
+ __name: "ClosingTemplateImportItem",
594
+ props: {
595
+ type: {},
596
+ name: {},
597
+ locations: {},
598
+ items: {},
599
+ errors: {}
600
+ },
601
+ setup(c) {
602
+ const { t: a } = K();
603
+ return (s, m) => {
604
+ var p, h, i;
605
+ const t = P("FmIcon"), n = P("FmTooltip");
606
+ return $(), M("div", St, [
607
+ m[0] || (m[0] = y("div", null, "•", -1)),
608
+ y("div", It, [
609
+ y("div", Dt, [
610
+ y("div", {
611
+ class: q({
612
+ "text-fm-color-system-error-300": s.errors.length
613
+ })
614
+ }, [
615
+ le(S(s.name) + " ", 1),
616
+ s.type === "create" ? ($(), M("span", Mt, "(" + S(d(a)("inventory.closing.template.import.new")) + ")", 1)) : z("", !0)
617
+ ], 2),
618
+ s.errors.length ? ($(), M("div", Ft, [
619
+ C(n, { "z-index": 50 }, {
620
+ content: A(() => [
621
+ y("ol", null, [
622
+ ($(!0), M(j, null, W(s.errors, (l, v) => ($(), M("li", { key: v }, S(l), 1))), 128))
623
+ ])
624
+ ]),
625
+ default: A(() => [
626
+ C(t, {
627
+ name: "error",
628
+ size: "sm",
629
+ color: "system-error-300"
630
+ })
631
+ ]),
632
+ _: 1
633
+ })
634
+ ])) : z("", !0)
635
+ ]),
636
+ y("div", {
637
+ class: q([
638
+ "fm-typo-en-body-sm-400",
639
+ {
640
+ "text-fm-color-system-error-200": s.errors.length,
641
+ "text-fm-color-typo-secondary": !s.errors.length
642
+ }
643
+ ])
644
+ }, S((p = s.locations) != null && p.length ? d(a)("inventory.closing.template.import.nLocations", { count: (h = s.locations) == null ? void 0 : h.length }) : d(a)("inventory.closing.template.import.allLocations")) + ", " + S(d(a)("inventory.closing.template.import.nItems", { count: (i = s.items) == null ? void 0 : i.length })), 3)
645
+ ])
646
+ ]);
647
+ };
648
+ }
649
+ }), Rt = { class: "flex flex-col gap-24" }, Pt = { class: "fm-typo-en-body-md-400" }, At = {
650
+ key: 0,
651
+ class: "flex items-center gap-8"
652
+ }, Et = { class: "fm-typo-en-body-md-400 text-fm-color-typo-secondary" }, Vt = { class: "flex flex-col gap-8" }, Ut = { class: "line-clamp-2 text-ellipsis break-all" }, Lt = {
653
+ key: 2,
654
+ class: "shrink-0"
655
+ }, Nt = {
656
+ key: 0,
657
+ class: "flex flex-col"
658
+ }, Bt = { class: "text-fm-color-system-error-300 fm-typo-en-body-sm-400" }, zt = {
659
+ key: 0,
660
+ class: "max-h-[200px] overflow-y-auto flex flex-col gap-8"
661
+ }, Ht = { class: "fm-typo-en-body-lg-600" }, Ot = /* @__PURE__ */ Y({
662
+ __name: "ClosingTemplateImport",
663
+ setup(c) {
664
+ const a = F(null), s = ft(), m = me(), t = F(!1), n = F(!1), p = F(new Array()), h = F([]), i = F([]), l = V(
665
+ () => !!p.value.length || h.value.some((w) => w.errors.length) || i.value.some((w) => w.errors.length)
666
+ ), v = V(
667
+ () => !!h.value.length || !!i.value.length
668
+ ), { t: o } = K();
669
+ async function _(w) {
670
+ p.value = [], h.value = [], i.value = [];
671
+ try {
672
+ t.value = !0;
673
+ const [b] = await Promise.all([
674
+ ot(w),
675
+ // fake buffer
676
+ new Promise((e) => setTimeout(e, 1e3))
677
+ ]);
678
+ if (!b.SheetNames.filter(
679
+ (e) => !Object.values(ye).map(String).includes(e)
680
+ ).find((e) => e)) {
681
+ p.value.push(o("inventory.ingredient.import.fileError.noSheet"));
682
+ return;
683
+ }
684
+ const u = Ct(b);
685
+ if (u.invalidExcel) {
686
+ p.value.push(
687
+ u.invalidExcelMessage ?? o("inventory.ingredient.import.fileError.invalidExcel")
688
+ );
689
+ return;
690
+ }
691
+ if (h.value = u.importCreateResult, i.value = u.importUpdateResult, !h.value.length && !i.value.length) {
692
+ p.value.push(o("inventory.ingredient.import.fileError.noData"));
693
+ return;
694
+ }
695
+ s.emitData(u);
696
+ } catch (b) {
697
+ m.open({
698
+ title: o("inventory.ingredient.import.fileError.unableToRead"),
699
+ message: b == null ? void 0 : b.message,
700
+ type: "error"
701
+ }), console.error("Error in reading file", b);
702
+ } finally {
703
+ p.value.length && m.open({
704
+ title: o("inventory.ingredient.import.fileError.invalidExcel"),
705
+ type: "error"
706
+ }), t.value = !1;
707
+ }
708
+ }
709
+ return Ae(a, (w) => {
710
+ w && _(w);
711
+ }), (w, b) => {
712
+ const r = P("FmCircularProgress"), f = P("FmIcon"), u = P("FmButton");
713
+ return $(), M("div", Rt, [
714
+ y("div", Pt, S(d(o)("inventory.closing.template.import.message")), 1),
715
+ n.value ? ($(), M("div", At, [
716
+ y("div", null, [
717
+ C(r, {
718
+ size: "md",
719
+ color: "neutral-gray-200"
720
+ })
721
+ ]),
722
+ y("div", Et, S(d(o)("inventory.formField.loading")), 1)
723
+ ])) : ($(), M(j, { key: 1 }, [
724
+ C(nt, {
725
+ class: q({
726
+ "w-full": !0,
727
+ "h-[200px]": !a.value
728
+ }),
729
+ accept: ".xlsx",
730
+ onFileUpload: b[0] || (b[0] = (e) => a.value = e),
731
+ label: d(o)("inventory.ingredient.import.uploadTemplate"),
732
+ "button-label": d(o)("inventory.ingredient.import.selectFile")
733
+ }, Ee({ _: 2 }, [
734
+ a.value ? {
735
+ name: "default",
736
+ fn: A(({ openFileDialog: e }) => [
737
+ y("div", Vt, [
738
+ y("div", {
739
+ class: q([
740
+ "fm-corner-radius-md p-16 flex items-center gap-16",
741
+ {
742
+ "border border-fm-color-neutral-gray-100": t.value,
743
+ "border border-fm-color-neutral-gray-200": !t.value && !l.value,
744
+ "border border-fm-color-system-error-200": l.value
745
+ }
746
+ ])
747
+ }, [
748
+ t.value ? ($(), U(r, {
749
+ key: 0,
750
+ size: "md",
751
+ color: "neutral-gray-200"
752
+ })) : ($(), U(f, {
753
+ key: 1,
754
+ name: l.value ? "error" : "attach_file",
755
+ outline: "",
756
+ color: l.value ? "system-error-300" : void 0
757
+ }, null, 8, ["name", "color"])),
758
+ y("div", {
759
+ class: q([
760
+ "fm-typo-en-body-md-400 flex-1 h-[36px] flex items-center",
761
+ {
762
+ "text-fm-color-typo-disabled": t.value,
763
+ "text-fm-color-typo-primary": !t.value
764
+ }
765
+ ])
766
+ }, [
767
+ y("div", Ut, S(a.value.name), 1)
768
+ ], 2),
769
+ t.value ? z("", !0) : ($(), M("div", Lt, [
770
+ C(u, {
771
+ label: d(o)("inventory.ingredient.import.replaceFile"),
772
+ variant: l.value ? "destructive" : "secondary",
773
+ "prepend-icon": l.value ? void 0 : "autorenew",
774
+ onClick: e
775
+ }, null, 8, ["label", "variant", "prepend-icon", "onClick"])
776
+ ]))
777
+ ], 2),
778
+ p.value.length ? ($(), M("div", Nt, [
779
+ ($(!0), M(j, null, W(p.value, (x, I) => ($(), M("div", {
780
+ key: I,
781
+ class: "flex gap-8 items-center"
782
+ }, [
783
+ C(f, {
784
+ name: "error",
785
+ size: "sm",
786
+ color: "system-error-300"
787
+ }),
788
+ y("div", Bt, S(x), 1)
789
+ ]))), 128))
790
+ ])) : z("", !0)
791
+ ])
792
+ ]),
793
+ key: "0"
794
+ } : void 0
795
+ ]), 1032, ["class", "label", "button-label"]),
796
+ v.value ? ($(), M("div", zt, [
797
+ y("div", Ht, S(d(o)("inventory.ingredient.import.summary")), 1),
798
+ ($(!0), M(j, null, W(h.value, (e, x) => ($(), U(Pe, {
799
+ key: x,
800
+ name: e.template.name,
801
+ locations: e.template.locations,
802
+ items: e.template.items,
803
+ errors: e.errors,
804
+ type: "create"
805
+ }, null, 8, ["name", "locations", "items", "errors"]))), 128)),
806
+ ($(!0), M(j, null, W(i.value, (e) => ($(), U(Pe, {
807
+ key: e.template._id,
808
+ name: e.template.name,
809
+ locations: e.template.locations,
810
+ items: e.template.items,
811
+ errors: e.errors,
812
+ type: "update"
813
+ }, null, 8, ["name", "locations", "items", "errors"]))), 128))
814
+ ])) : z("", !0)
815
+ ], 64))
816
+ ]);
817
+ };
818
+ }
819
+ }), re = Be("closingTemplateActions", () => {
820
+ const { t: c } = K(), a = ce(), s = me(), m = ie(), t = st(), n = ue(), { loading: p } = ze(n), h = F({});
821
+ function i() {
822
+ h.value = {
823
+ mode: O.CREATE,
824
+ show: !0,
825
+ "onUpdate:show"(e) {
826
+ h.value.show = e;
827
+ }
828
+ };
829
+ }
830
+ function l(e) {
831
+ h.value = {
832
+ mode: O.UPDATE,
833
+ modelValue: e,
834
+ show: !0,
835
+ "onUpdate:show"(x) {
836
+ h.value.show = x;
837
+ }
838
+ };
839
+ }
840
+ function v(e, x, I) {
841
+ a.open({
842
+ title: `Confirm deleting template ${e.name}?`,
843
+ message: "Deleted template can no longer be retrieved",
844
+ primaryActions: {
845
+ text: "Delete",
846
+ variant: oe.Destructive,
847
+ close: !0
848
+ },
849
+ secondaryActions: {
850
+ text: "Cancel",
851
+ variant: oe.Plain,
852
+ close: !0
853
+ }
854
+ }).onPrimary(async () => {
855
+ s.open({
856
+ title: `Deleting ${e.name}`,
857
+ type: "info"
858
+ });
859
+ try {
860
+ x.value = !0;
861
+ const [T] = await Promise.allSettled([
862
+ m.deleteTemplate(e),
863
+ new Promise((g) => setTimeout(g, 1e3))
864
+ ]);
865
+ if (T.status === "rejected") throw T.reason;
866
+ s.open({
867
+ title: `Deleted ${e.name}`,
868
+ type: "success"
869
+ });
870
+ } catch (T) {
871
+ s.open({
872
+ title: `Unable to delete ${e.name}`,
873
+ message: `See error from server: ${T}`,
874
+ type: "error"
875
+ }), console.error("error on deleting closing template", T);
876
+ } finally {
877
+ x.value = !1, I();
878
+ }
879
+ });
880
+ }
881
+ function o(e, x, I) {
882
+ let T;
883
+ a.open({
884
+ title: `Confirm duplicating template "${e.name}"?`,
885
+ message: "Duplicated template can be edited after creation",
886
+ primaryActions: {
887
+ text: "Duplicate",
888
+ variant: oe.Destructive,
889
+ close: !0
890
+ },
891
+ secondaryActions: {
892
+ text: "Cancel",
893
+ variant: oe.Plain,
894
+ close: !0
895
+ },
896
+ contentComponent: Y({
897
+ props: ["modelValue"],
898
+ emits: ["update:modelValue"],
899
+ setup(g) {
900
+ return () => R(H.FmTextField, {
901
+ modelValue: g.modelValue,
902
+ "onUpdate:modelValue": (k) => T = k,
903
+ label: "New Template Name",
904
+ size: "md",
905
+ variant: "primary"
906
+ });
907
+ }
908
+ })
909
+ }).onPrimary(async () => {
910
+ s.open({
911
+ title: `Duplicating "${e.name}"`,
912
+ type: "info"
913
+ });
914
+ try {
915
+ x.value = !0;
916
+ const [g] = await Promise.allSettled([
917
+ t.duplicateClosingTemplate(e._id, T),
918
+ new Promise((k) => setTimeout(k, 1e3))
919
+ ]);
920
+ if (g.status === "rejected") throw g.reason;
921
+ s.open({
922
+ title: `Duplicated "${e.name}"`,
923
+ type: "success"
924
+ });
925
+ } catch (g) {
926
+ s.open({
927
+ title: `Unable to duplicate "${e.name}"`,
928
+ message: `See error from server: ${g}`,
929
+ type: "error"
930
+ }), console.error("error on duplicating closing template", g);
931
+ } finally {
932
+ x.value = !1, I();
933
+ }
934
+ });
935
+ }
936
+ const _ = F({});
937
+ function w(e) {
938
+ _.value = {
939
+ template: e,
940
+ show: !0,
941
+ "onUpdate:show"(x) {
942
+ _.value.show = x;
943
+ },
944
+ "onAction:edit"() {
945
+ _.value.show = !1, l(Ve(e));
946
+ }
947
+ };
948
+ }
949
+ function b() {
950
+ if (!n.templates.length) {
951
+ s.open({
952
+ title: "No data to export",
953
+ type: "error"
954
+ });
955
+ return;
956
+ }
957
+ const e = ht(n.templates);
958
+ s.open({
959
+ title: c("inventory.ingredient.export.success"),
960
+ message: c("inventory.ingredient.export.filename", [e]),
961
+ type: "success"
962
+ });
963
+ }
964
+ function r(e) {
965
+ if (!e.items.length) {
966
+ s.open({
967
+ title: "No items in template to export",
968
+ type: "error"
969
+ });
970
+ return;
971
+ }
972
+ const x = bt(e);
973
+ s.open({
974
+ title: c("inventory.ingredient.export.success"),
975
+ message: c("inventory.ingredient.export.filename", [x]),
976
+ type: "success"
977
+ });
978
+ }
979
+ function f() {
980
+ n.loading || a.open({
981
+ title: c("inventory.ingredient.import.title"),
982
+ contentComponent: Ot,
983
+ overlay: !0,
984
+ closeButton: !0,
985
+ primaryActions: {
986
+ text: c("common.import"),
987
+ close: !1
988
+ },
989
+ secondaryActions: {
990
+ text: c("common.close"),
991
+ close: !0
992
+ },
993
+ tertiaryActions: {
994
+ text: c("inventory.ingredient.import.actions.downloadTemplate"),
995
+ close: !1,
996
+ variant: "plain"
997
+ }
998
+ }).onPrimary((e) => {
999
+ if (!e) {
1000
+ s.open({
1001
+ title: c("inventory.ingredient.import.error.noData"),
1002
+ type: "error"
1003
+ });
1004
+ return;
1005
+ }
1006
+ if (!e.importCreateResult.length && !e.importUpdateResult.length) {
1007
+ s.open({
1008
+ title: c("inventory.ingredient.import.error.invalidContent"),
1009
+ message: c("inventory.ingredient.import.error.noImportData"),
1010
+ type: "error"
1011
+ });
1012
+ return;
1013
+ }
1014
+ if (e.importCreateResult.some((x) => x.errors.length) || e.importUpdateResult.some((x) => x.errors.length)) {
1015
+ s.open({
1016
+ title: c("inventory.ingredient.import.error.invalidContent"),
1017
+ message: c("inventory.ingredient.import.error.hasErrors"),
1018
+ type: "error"
1019
+ });
1020
+ return;
1021
+ }
1022
+ a.close(), u(e);
1023
+ }).onTertiary(_t);
1024
+ }
1025
+ async function u(e) {
1026
+ p.value = !0;
1027
+ try {
1028
+ const x = [
1029
+ ...e.importCreateResult.map(
1030
+ (k) => k.template
1031
+ ),
1032
+ ...e.importUpdateResult.map(
1033
+ (k) => k.template
1034
+ )
1035
+ ], I = 100;
1036
+ let T = 0;
1037
+ const g = () => {
1038
+ T += I, s.open({
1039
+ title: c("inventory.ingredient.import.progress", [
1040
+ Math.min(T, x.length),
1041
+ x.length
1042
+ ])
1043
+ });
1044
+ };
1045
+ for (const k of x.chunk(100))
1046
+ g(), await m.importTemplates(k);
1047
+ s.open({
1048
+ title: c("inventory.ingredient.import.success"),
1049
+ type: "success"
1050
+ });
1051
+ } catch (x) {
1052
+ s.open({
1053
+ title: c("inventory.ingredient.import.error.failed"),
1054
+ message: c("inventory.ingredient.import.error.systemMessage", [x == null ? void 0 : x.message]),
1055
+ type: "error"
1056
+ }), console.error("Error in importing skus", e, x);
1057
+ } finally {
1058
+ p.value = !1, n.fetchTemplates();
1059
+ }
1060
+ }
1061
+ return {
1062
+ createTemplate: i,
1063
+ viewTemplate: w,
1064
+ updateTemplate: l,
1065
+ deleteTemplate: v,
1066
+ duplicateTemplate: o,
1067
+ exportTemplates: b,
1068
+ exportSingleTemplate: r,
1069
+ importTemplates: f,
1070
+ templateDialogProps: h,
1071
+ templateDetailsProps: _
1072
+ };
1073
+ });
1074
+ var J = /* @__PURE__ */ ((c) => (c.Name = "Name", c.Unit = "Unit", c.Delete = "Delete", c))(J || {});
1075
+ function jt(c) {
1076
+ return {
1077
+ columnDefs: V(() => {
1078
+ const s = c.items.map((t) => t.sku.unit.measurements.length).reduce((t, n) => Math.max(t, n), 0);
1079
+ return [
1080
+ {
1081
+ id: "Name",
1082
+ header: () => "Name",
1083
+ enableSorting: !1,
1084
+ size: 400,
1085
+ minSize: 400,
1086
+ accessorFn: (t) => `${t.sku.name} ${t.sku.code}`,
1087
+ cell(t) {
1088
+ const n = t.row.original;
1089
+ return R(
1090
+ "div",
1091
+ {
1092
+ class: "flex flex-col",
1093
+ style: { minWidth: "400px" }
1094
+ },
1095
+ [
1096
+ R(
1097
+ "span",
1098
+ { class: "fm-typo-en-body-lg-400 text-fm-color-typo-primary line-clamp-1" },
1099
+ n.sku.name
1100
+ ),
1101
+ R(
1102
+ "span",
1103
+ { class: "fm-typo-en-body-md-400 text-fm-color-typo-secondary line-clamp-1" },
1104
+ n.sku.code
1105
+ )
1106
+ ]
1107
+ );
1108
+ }
1109
+ },
1110
+ {
1111
+ id: "Unit",
1112
+ header: () => "Enable unit",
1113
+ enableSorting: !1,
1114
+ minSize: 200,
1115
+ maxSize: 400,
1116
+ cell(t) {
1117
+ var p, h, i;
1118
+ const n = t.row.original;
1119
+ return R("div", { class: "flex items-center gap-32" }, [
1120
+ R(
1121
+ H.FmFormGroup,
1122
+ {
1123
+ value: n.sku.unit._id,
1124
+ modelValue: !((p = n.disabledMeasurements) != null && p.includes(n.sku.unit._id))
1125
+ },
1126
+ R(
1127
+ "div",
1128
+ {
1129
+ class: "flex items-center gap-4",
1130
+ style: { width: "120px" }
1131
+ },
1132
+ [
1133
+ R(H.FmCheckbox, {
1134
+ value: n.sku.unit._id,
1135
+ modelValue: !((h = n.disabledMeasurements) != null && h.includes(n.sku.unit._id)),
1136
+ disabled: c.disabled || !((i = n.disabledMeasurements) != null && i.includes(n.sku.unit._id)) && n.sku.unit.measurements.every(
1137
+ (l) => {
1138
+ var v;
1139
+ return (v = n.disabledMeasurements) == null ? void 0 : v.includes(l.id);
1140
+ }
1141
+ ),
1142
+ "onUpdate:modelValue"(l) {
1143
+ var v;
1144
+ if (l)
1145
+ c.updateItem({
1146
+ ...n,
1147
+ disabledMeasurements: (v = n.disabledMeasurements) == null ? void 0 : v.filter(
1148
+ (o) => o !== n.sku.unit._id
1149
+ )
1150
+ });
1151
+ else {
1152
+ const o = n.disabledMeasurements ?? [];
1153
+ c.updateItem({
1154
+ ...n,
1155
+ disabledMeasurements: [...o, n.sku.unit._id]
1156
+ });
1157
+ }
1158
+ }
1159
+ }),
1160
+ R(
1161
+ H.FmTooltip,
1162
+ { zIndex: 51 },
1163
+ {
1164
+ content() {
1165
+ return n.sku.unit.abbrev;
1166
+ },
1167
+ default() {
1168
+ return R(
1169
+ "div",
1170
+ { class: "line-clamp-2 fm-typo-en-body-lg-400" },
1171
+ n.sku.unit.abbrev
1172
+ );
1173
+ }
1174
+ }
1175
+ )
1176
+ ]
1177
+ )
1178
+ ),
1179
+ ...Array.from({ length: Math.max(s, 0) }).map((l, v) => {
1180
+ var w, b, r, f;
1181
+ const o = t.row.original, _ = o.sku.unit.measurements[v];
1182
+ return _ ? R(
1183
+ H.FmFormGroup,
1184
+ {
1185
+ modelValue: !((w = o.disabledMeasurements) != null && w.includes(_.id)),
1186
+ value: _.id
1187
+ },
1188
+ R(
1189
+ "div",
1190
+ {
1191
+ class: "flex items-center gap-4",
1192
+ style: { width: "120px" }
1193
+ },
1194
+ [
1195
+ R(H.FmCheckbox, {
1196
+ value: _.id,
1197
+ modelValue: !((b = o.disabledMeasurements) != null && b.includes(_.id)),
1198
+ disabled: c.disabled || !((r = o.disabledMeasurements) != null && r.includes(_.id)) && ((f = o.disabledMeasurements) == null ? void 0 : f.includes(o.sku.unit._id)) && o.sku.unit.measurements.filter((u) => u.id != _.id).every((u) => {
1199
+ var e;
1200
+ return (e = o.disabledMeasurements) == null ? void 0 : e.includes(u.id);
1201
+ }),
1202
+ "onUpdate:modelValue"(u) {
1203
+ var e;
1204
+ if (u)
1205
+ c.updateItem({
1206
+ ...o,
1207
+ disabledMeasurements: (e = o.disabledMeasurements) == null ? void 0 : e.filter(
1208
+ (x) => x !== _.id
1209
+ )
1210
+ });
1211
+ else {
1212
+ const x = o.disabledMeasurements ?? [];
1213
+ c.updateItem({
1214
+ ...o,
1215
+ disabledMeasurements: [...x, _.id]
1216
+ });
1217
+ }
1218
+ }
1219
+ }),
1220
+ R(
1221
+ H.FmTooltip,
1222
+ { zIndex: 51 },
1223
+ {
1224
+ content() {
1225
+ return _.abbrev;
1226
+ },
1227
+ default() {
1228
+ return R(
1229
+ "div",
1230
+ { class: "line-clamp-2 fm-typo-en-body-lg-400" },
1231
+ _.abbrev
1232
+ );
1233
+ }
1234
+ }
1235
+ )
1236
+ ]
1237
+ )
1238
+ ) : null;
1239
+ })
1240
+ ]);
1241
+ }
1242
+ },
1243
+ {
1244
+ id: "Delete",
1245
+ header: "",
1246
+ cell(t) {
1247
+ const n = t.row.original;
1248
+ return R(
1249
+ "div",
1250
+ { class: "w-full flex justify-end" },
1251
+ R(H.FmButton, {
1252
+ class: "delete-button",
1253
+ key: n.sku._id,
1254
+ type: "button",
1255
+ icon: "delete",
1256
+ variant: "tertiary",
1257
+ size: "md",
1258
+ disabled: c.disabled,
1259
+ onClick: () => {
1260
+ c.deleteItem(n);
1261
+ }
1262
+ })
1263
+ );
1264
+ },
1265
+ enableSorting: !1,
1266
+ size: 40,
1267
+ meta: {
1268
+ cellClass: "",
1269
+ headerClass: ""
1270
+ }
1271
+ }
1272
+ ];
1273
+ })
1274
+ };
1275
+ }
1276
+ const Yt = { class: "flex flex-col gap-16 py-12" }, Kt = { class: "flex" }, Gt = { class: "flex-1 flex flex-col" }, qt = { class: "fm-typo-en-title-sm-600 text-fm-color-typo-primary" }, Jt = { class: "fm-typo-en-body-lg-400 text-fm-color-typo-secondary" }, Wt = { class: "flex flex-col gap-4" }, Xt = /* @__PURE__ */ Y({
1277
+ __name: "ClosingTemplateItem",
1278
+ props: {
1279
+ cellByColId: {},
1280
+ row: {}
1281
+ },
1282
+ setup(c) {
1283
+ const a = c, s = V(() => a.row), m = V(
1284
+ () => s.value.getVisibleCells().filter((t) => t.column.id !== J.Name && t.column.id !== J.Delete)
1285
+ );
1286
+ return (t, n) => {
1287
+ var p, h, i, l, v;
1288
+ return $(), M("div", Yt, [
1289
+ y("div", Kt, [
1290
+ y("div", Gt, [
1291
+ y("div", qt, S(s.value.original.sku.name), 1),
1292
+ y("div", Jt, S(s.value.original.sku.code), 1)
1293
+ ]),
1294
+ y("div", null, [
1295
+ C(d(G), {
1296
+ render: (i = (h = (p = t.cellByColId[d(J).Delete]) == null ? void 0 : p.column) == null ? void 0 : h.columnDef) == null ? void 0 : i.cell,
1297
+ props: (v = (l = t.cellByColId[d(J).Delete]) == null ? void 0 : l.getContext) == null ? void 0 : v.call(l)
1298
+ }, null, 8, ["render", "props"])
1299
+ ])
1300
+ ]),
1301
+ y("div", Wt, [
1302
+ n[0] || (n[0] = y("div", { class: "fm-typo-en-body-lg-600 text-fm-color-typo-primary" }, null, -1)),
1303
+ ($(!0), M(j, null, W(m.value, (o) => {
1304
+ var _, w, b;
1305
+ return $(), M("div", {
1306
+ key: o.id
1307
+ }, [
1308
+ C(d(G), {
1309
+ render: (w = (_ = o.column) == null ? void 0 : _.columnDef) == null ? void 0 : w.cell,
1310
+ props: (b = o.getContext) == null ? void 0 : b.call(o)
1311
+ }, null, 8, ["render", "props"])
1312
+ ]);
1313
+ }), 128))
1314
+ ])
1315
+ ]);
1316
+ };
1317
+ }
1318
+ }), Qt = { class: "flex flex-col gap-16" }, Zt = { class: "flex flex-col gap-24" }, en = { class: "flex flex-col gap-16" }, tn = { class: "flex items-center" }, nn = { class: "flex-1 fm-typo-en-title-sm-600" }, on = { class: "flex flex-col gap-16" }, sn = { class: "flex items-center" }, ln = { class: "flex-1 gap-8 fm-typo-en-title-sm-600" }, an = { class: "flex gap-8" }, rn = { class: "flex items-center gap-8 w-full" }, cn = { class: "flex-1" }, mn = /* @__PURE__ */ Y({
1319
+ __name: "ClosingTemplateForm",
1320
+ props: {
1321
+ modelValue: {},
1322
+ disabled: { type: Boolean }
1323
+ },
1324
+ setup(c, { expose: a }) {
1325
+ const s = c, m = lt(), { t } = K(), n = ve();
1326
+ ce();
1327
+ const {
1328
+ promptSelectLocations: p,
1329
+ columnDefs: h,
1330
+ rowData: i
1331
+ } = at({
1332
+ getLocations() {
1333
+ return m.locations;
1334
+ },
1335
+ setLocations(u) {
1336
+ m.locations = u;
1337
+ }
1338
+ }), l = F(), v = F(""), o = F(!1), _ = F(null);
1339
+ a({
1340
+ validateInputs: () => {
1341
+ var u, e;
1342
+ (e = (u = l.value) == null ? void 0 : u.validateInputs) == null || e.call(u);
1343
+ },
1344
+ resetInputsValidation: () => {
1345
+ var u, e;
1346
+ (e = (u = l.value) == null ? void 0 : u.resetInputsValidation) == null || e.call(u);
1347
+ },
1348
+ resetInputs: () => {
1349
+ var u, e;
1350
+ (e = (u = l.value) == null ? void 0 : u.resetInputs) == null || e.call(u);
1351
+ }
1352
+ });
1353
+ const w = jt({
1354
+ updateItem: (u) => {
1355
+ m.items = m.items.map((e) => e.sku._id !== u.sku._id ? e : u);
1356
+ },
1357
+ deleteItem: (u) => {
1358
+ m.items = m.items.filter((e) => e.sku._id !== u.sku._id);
1359
+ },
1360
+ get items() {
1361
+ return m.items;
1362
+ },
1363
+ get disabled() {
1364
+ return s.disabled;
1365
+ }
1366
+ }), b = V(() => w.columnDefs.value), { promptSelectIngredients: r } = yt();
1367
+ async function f() {
1368
+ const e = n.skus.map((T) => ({
1369
+ label: T.name,
1370
+ sublabel: T.code,
1371
+ value: T
1372
+ })).filter((T) => {
1373
+ var g;
1374
+ return (g = m.items) == null ? void 0 : g.find((k) => k.sku._id === T.value._id);
1375
+ }).map((T) => T.value), x = m.items ?? [], I = await r(
1376
+ e.map((T) => T._id),
1377
+ (T) => {
1378
+ const g = n.skuById[T], k = x.find((D) => D.sku._id === g._id);
1379
+ return k || {
1380
+ sku: g
1381
+ };
1382
+ }
1383
+ );
1384
+ I && (I.sort((T, g) => T.sku.code.localeCompare(g.sku.code)), m.items = I);
1385
+ }
1386
+ return (u, e) => {
1387
+ const x = P("FmTextField"), I = P("FmButton"), T = P("FmTable"), g = P("FmIcon"), k = P("FmFormGroup"), E = P("FmForm");
1388
+ return $(), U(E, {
1389
+ ref_key: "formRef",
1390
+ ref: l,
1391
+ class: "flex flex-col gap-32",
1392
+ disabled: u.disabled
1393
+ }, {
1394
+ default: A(() => [
1395
+ y("div", Qt, [
1396
+ y("div", Zt, [
1397
+ C(x, {
1398
+ label: d(t)("inventory.closing.form.name"),
1399
+ "label-mark": "required",
1400
+ modelValue: d(m).name,
1401
+ "onUpdate:modelValue": e[0] || (e[0] = (D) => d(m).name = D),
1402
+ rules: [d(rt)()]
1403
+ }, null, 8, ["label", "modelValue", "rules"]),
1404
+ C(x, {
1405
+ label: d(t)("inventory.closing.form.reference"),
1406
+ "label-mark": "optional",
1407
+ modelValue: d(m).ref,
1408
+ "onUpdate:modelValue": e[1] || (e[1] = (D) => d(m).ref = D)
1409
+ }, null, 8, ["label", "modelValue"])
1410
+ ])
1411
+ ]),
1412
+ y("div", en, [
1413
+ y("div", tn, [
1414
+ y("div", nn, S(d(t)("inventory.closing.form.locations")), 1),
1415
+ C(I, {
1416
+ disabled: u.disabled,
1417
+ label: d(t)("inventory.closing.form.selectLocation"),
1418
+ "prepend-icon": "add",
1419
+ variant: "plain",
1420
+ class: "border-2 rounded-lg border-fm-color-primary",
1421
+ onClick: d(p)
1422
+ }, null, 8, ["disabled", "label", "onClick"])
1423
+ ]),
1424
+ C(T, {
1425
+ "column-defs": d(h),
1426
+ "row-data": d(i),
1427
+ "shrink-at": 9999,
1428
+ onRowClick: d(p),
1429
+ "hide-footer": ""
1430
+ }, null, 8, ["column-defs", "row-data", "onRowClick"])
1431
+ ]),
1432
+ y("div", on, [
1433
+ y("div", sn, [
1434
+ y("div", ln, S(d(t)("inventory.closing.form.items.title")), 1),
1435
+ y("div", an, [
1436
+ C(I, {
1437
+ disabled: u.disabled || o.value,
1438
+ label: d(t)("inventory.closing.form.items.addItem"),
1439
+ "prepend-icon": "add",
1440
+ variant: "plain",
1441
+ class: "border-2 rounded-lg border-fm-color-primary",
1442
+ onClick: e[2] || (e[2] = (D) => f()),
1443
+ size: "md"
1444
+ }, null, 8, ["disabled", "label"])
1445
+ ])
1446
+ ]),
1447
+ C(x, {
1448
+ placeholder: "Filter items",
1449
+ modelValue: v.value,
1450
+ "onUpdate:modelValue": e[4] || (e[4] = (D) => v.value = D),
1451
+ disabled: o.value
1452
+ }, Ee({ _: 2 }, [
1453
+ v.value ? {
1454
+ name: "append",
1455
+ fn: A(() => [
1456
+ C(g, {
1457
+ name: "close",
1458
+ onClick: e[3] || (e[3] = (D) => v.value = ""),
1459
+ class: "cursor-pointer"
1460
+ })
1461
+ ]),
1462
+ key: "0"
1463
+ } : void 0
1464
+ ]), 1032, ["modelValue", "disabled"]),
1465
+ y("div", {
1466
+ ref_key: "itemsTableRef",
1467
+ ref: _
1468
+ }, [
1469
+ ($(), U(T, {
1470
+ "search-value": o.value ? "" : v.value,
1471
+ "column-defs": b.value,
1472
+ "row-data": d(m).items,
1473
+ key: d(m).items.map((D) => D.sku._id).join("."),
1474
+ "hide-footer": d(m).items.length <= 10,
1475
+ "page-size": o.value ? d(m).items.length : Math.min(10, d(m).items.length)
1476
+ }, {
1477
+ "list-row": A((D) => [
1478
+ ($(), U(Ne, {
1479
+ row: D,
1480
+ key: d(m).items.map((N) => N.sku._id).join(".")
1481
+ }, {
1482
+ default: A((N) => [
1483
+ y("div", rn, [
1484
+ o.value ? ($(), U(g, {
1485
+ key: 0,
1486
+ name: "drag_indicator",
1487
+ class: "drag-handle cursor-move text-fm-color-typo-secondary"
1488
+ })) : z("", !0),
1489
+ y("div", cn, [
1490
+ C(Xt, {
1491
+ row: D,
1492
+ "cell-by-col-id": N
1493
+ }, null, 8, ["row", "cell-by-col-id"])
1494
+ ])
1495
+ ])
1496
+ ]),
1497
+ _: 2
1498
+ }, 1032, ["row"]))
1499
+ ]),
1500
+ _: 1
1501
+ }, 8, ["search-value", "column-defs", "row-data", "hide-footer", "page-size"]))
1502
+ ], 512),
1503
+ C(k, {
1504
+ "model-value": d(m).items.length,
1505
+ rules: [d(it)(1)]
1506
+ }, null, 8, ["model-value", "rules"])
1507
+ ])
1508
+ ]),
1509
+ _: 1
1510
+ }, 8, ["disabled"]);
1511
+ };
1512
+ }
1513
+ }), un = { class: "flex items-center" }, dn = { class: "fm-typo-en-title-md-600" }, pn = { class: "flex justify-between" }, fn = { class: "fm-typo-en-body-lg-600" }, vn = { class: "flex flex-col gap-8" }, gn = { class: "flex flex-col gap-4" }, yn = { class: "fm-typo-en-body-md-400 text-fm-color-typo-secondary" }, hn = { class: "flex items-center gap-8" }, bn = { class: "fm-typo-en-body-lg-600" }, _n = { class: "flex gap-4" }, xn = /* @__PURE__ */ Y({
1514
+ __name: "ClosingTemplateDialog",
1515
+ props: {
1516
+ mode: {},
1517
+ modelValue: {},
1518
+ show: { type: Boolean }
1519
+ },
1520
+ emits: ["update:show", "submitted"],
1521
+ setup(c, { expose: a, emit: s }) {
1522
+ var T;
1523
+ const m = c, t = s, n = ie(), p = re(), h = me(), { t: i } = K(), l = vt(m, "show");
1524
+ function v() {
1525
+ return {
1526
+ _id: "",
1527
+ name: "",
1528
+ items: []
1529
+ };
1530
+ }
1531
+ const o = F(m.modelValue ?? v()), _ = F(((T = m.modelValue) == null ? void 0 : T._id) ?? `${Math.random()}`);
1532
+ Ae(
1533
+ () => m.show,
1534
+ (g) => {
1535
+ var k;
1536
+ g && (o.value = m.modelValue ?? v(), _.value = ((k = m.modelValue) == null ? void 0 : k._id) ?? `${Math.random()}`);
1537
+ }
1538
+ );
1539
+ const w = F(!1), b = V(() => {
1540
+ switch (m.mode) {
1541
+ case O.READ:
1542
+ return "";
1543
+ case O.CREATE:
1544
+ return i("inventory.closing.template.create.title");
1545
+ case O.UPDATE:
1546
+ return i("inventory.closing.template.update.title");
1547
+ }
1548
+ return "";
1549
+ }), r = F();
1550
+ a({
1551
+ validateInputs: () => {
1552
+ var g, k;
1553
+ (k = (g = r.value) == null ? void 0 : g.validateInputs) == null || k.call(g);
1554
+ },
1555
+ resetInputsValidation: () => {
1556
+ var g, k;
1557
+ (k = (g = r.value) == null ? void 0 : g.resetInputsValidation) == null || k.call(g);
1558
+ },
1559
+ resetInputs: () => {
1560
+ var g, k;
1561
+ (k = (g = r.value) == null ? void 0 : g.resetInputs) == null || k.call(g);
1562
+ }
1563
+ });
1564
+ async function f() {
1565
+ const g = o.value;
1566
+ if (g) {
1567
+ w.value = !0;
1568
+ try {
1569
+ await n.createTemplate(g), await new Promise((k) => setTimeout(k, 1e3)), h.open({
1570
+ title: i("inventory.closing.template.create.success"),
1571
+ message: i("inventory.closing.template.create.successMessage"),
1572
+ type: "success"
1573
+ }), t("update:show", !1), t("submitted");
1574
+ } catch (k) {
1575
+ h.open({
1576
+ title: i("inventory.closing.template.create.error"),
1577
+ message: i("inventory.closing.template.create.errorMessage"),
1578
+ type: "error"
1579
+ }), console.error("Error in creating closing template", k);
1580
+ } finally {
1581
+ w.value = !1;
1582
+ }
1583
+ }
1584
+ }
1585
+ async function u() {
1586
+ const g = o.value;
1587
+ if (g) {
1588
+ w.value = !0, delete g.updatedAt;
1589
+ try {
1590
+ await n.updateTemplate({
1591
+ ...g,
1592
+ _rev: g._rev ?? ""
1593
+ }), await new Promise((k) => setTimeout(k, 1e3)), h.open({
1594
+ title: i("inventory.closing.template.update.success"),
1595
+ message: i("inventory.closing.template.update.successMessage"),
1596
+ type: "success"
1597
+ }), t("update:show", !1), t("submitted");
1598
+ } catch (k) {
1599
+ h.open({
1600
+ title: i("inventory.closing.template.update.error"),
1601
+ message: i("inventory.closing.template.update.errorMessage"),
1602
+ type: "error"
1603
+ }), console.error("Error in updating closing template", k);
1604
+ } finally {
1605
+ w.value = !1;
1606
+ }
1607
+ }
1608
+ }
1609
+ function e() {
1610
+ switch (m.mode) {
1611
+ case O.CREATE:
1612
+ return f();
1613
+ case O.UPDATE:
1614
+ return u();
1615
+ }
1616
+ }
1617
+ function x() {
1618
+ var g, k;
1619
+ (k = (g = r.value) == null ? void 0 : g.validateInputs) == null || k.call(g);
1620
+ }
1621
+ function I() {
1622
+ o.value && p.exportSingleTemplate(o.value);
1623
+ }
1624
+ return (g, k) => {
1625
+ const E = P("FmMenuDivider"), D = P("FmCard"), N = P("FmButton"), X = P("FmSideSheet");
1626
+ return $(), U(X, {
1627
+ modelValue: d(l),
1628
+ "onUpdate:modelValue": k[2] || (k[2] = (B) => Ye(l) ? l.value = B : null),
1629
+ "dismiss-away": "",
1630
+ "close-button": "",
1631
+ "max-width": 800
1632
+ }, {
1633
+ "side-sheet-header": A(() => [
1634
+ y("div", un, [
1635
+ y("div", dn, S(b.value), 1)
1636
+ ])
1637
+ ]),
1638
+ default: A(() => [
1639
+ o.value.updatedAt ? ($(), U(D, {
1640
+ key: 0,
1641
+ variant: "outlined",
1642
+ class: "flex flex-col gap-8 px-12 py-16 mb-16"
1643
+ }, {
1644
+ default: A(() => {
1645
+ var B;
1646
+ return [
1647
+ y("div", pn, [
1648
+ y("div", fn, S(d(i)("inventory.transfer.template.details.templateSummary")), 1)
1649
+ ]),
1650
+ C(E),
1651
+ y("div", vn, [
1652
+ y("div", gn, [
1653
+ y("div", yn, S(d(i)("inventory.transfer.receiveRequest.details.updatedAt")), 1),
1654
+ y("div", hn, [
1655
+ y("div", bn, [
1656
+ le(S(d(se)(o.value.updatedAt)) + " ", 1),
1657
+ (B = o.value.updatedBy) != null && B.name ? ($(), M(j, { key: 0 }, [
1658
+ le(" (" + S(o.value.updatedBy.name) + ") ", 1)
1659
+ ], 64)) : z("", !0)
1660
+ ]),
1661
+ C(ct, {
1662
+ "closing-id": o.value._id
1663
+ }, null, 8, ["closing-id"])
1664
+ ])
1665
+ ])
1666
+ ])
1667
+ ];
1668
+ }),
1669
+ _: 1
1670
+ })) : z("", !0),
1671
+ ($(), U(mn, {
1672
+ class: "w-full",
1673
+ ref_key: "formRef",
1674
+ ref: r,
1675
+ onValidationSuccess: e,
1676
+ "model-value": o.value,
1677
+ "onUpdate:modelValue": k[0] || (k[0] = (B) => o.value = B),
1678
+ disabled: w.value,
1679
+ key: _.value
1680
+ }, null, 8, ["model-value", "disabled"]))
1681
+ ]),
1682
+ "side-sheet-footer": A(() => [
1683
+ y("div", _n, [
1684
+ C(N, {
1685
+ loading: w.value,
1686
+ label: d(i)("common.save"),
1687
+ onClick: x
1688
+ }, null, 8, ["loading", "label"]),
1689
+ g.mode === d(O).UPDATE ? ($(), U(N, {
1690
+ key: 0,
1691
+ disabled: w.value,
1692
+ variant: "secondary",
1693
+ label: d(i)("inventory.common.export"),
1694
+ "prepend-icon": "download",
1695
+ onClick: I
1696
+ }, null, 8, ["disabled", "label"])) : z("", !0),
1697
+ C(N, {
1698
+ disabled: w.value,
1699
+ variant: "tertiary",
1700
+ label: d(i)("common.close"),
1701
+ onClick: k[1] || (k[1] = (B) => t("update:show", !1))
1702
+ }, null, 8, ["disabled", "label"])
1703
+ ])
1704
+ ]),
1705
+ _: 1
1706
+ }, 8, ["modelValue"]);
1707
+ };
1708
+ }
1709
+ }), wn = {};
1710
+ function kn(c, a) {
1711
+ return $(), M("div");
1712
+ }
1713
+ const Tn = /* @__PURE__ */ mt(wn, [["render", kn]]), $n = { class: "flex flex-col gap-40" }, Cn = { key: 0 }, Sn = {
1714
+ key: 1,
1715
+ class: "flex gap-8 items-center"
1716
+ }, In = { class: "fm-typo-en-body-lg-400 text-fm-color-typo-primary" }, Dn = {
1717
+ key: 2,
1718
+ class: "fm-typo-en-body-lg-400 text-fm-color-typo-primary"
1719
+ }, Mn = {
1720
+ key: 3,
1721
+ class: "fm-typo-en-body-lg-400 text-fm-color-typo-primary flex flex-col gap-12"
1722
+ }, Fn = { class: "fm-typo-en-body-md-600" }, Rn = { class: "fm-typo-en-body-md-600" }, Pn = { key: 4 }, An = { class: "fm-typo-en-body-md-600" }, En = { class: "fm-typo-en-body-md-600" }, Vn = { class: "flex sm:flex-col xs:flex-col justify-end gap-8 w-full mb-16" }, Un = /* @__PURE__ */ Y({
1723
+ __name: "ClosingTemplatePublish",
1724
+ emits: ["close"],
1725
+ setup(c, { emit: a }) {
1726
+ const s = F(!1), m = me(), t = ie(), n = ue(), { t: p } = K(), h = a;
1727
+ async function i() {
1728
+ s.value = !0;
1729
+ try {
1730
+ await t.startNewPublish().delayed(1e3), m.open({
1731
+ title: "Success",
1732
+ message: "You may refresh after a while to review publish status",
1733
+ type: "success"
1734
+ }), o();
1735
+ } catch (_) {
1736
+ m.open({
1737
+ title: "Something went wrong",
1738
+ message: "Please try again",
1739
+ type: "error"
1740
+ }), console.error("error on creating publish task", _);
1741
+ } finally {
1742
+ s.value = !1;
1743
+ }
1744
+ }
1745
+ const l = V(() => n.recentPublish.recentJob), v = V(
1746
+ () => n.templates.length && (!l.value || l.value.outlets.length === l.value.completed.length)
1747
+ );
1748
+ function o() {
1749
+ h("close");
1750
+ }
1751
+ return (_, w) => {
1752
+ const b = P("FmCircularProgress"), r = P("i18n-t"), f = P("FmButton");
1753
+ return $(), M("div", $n, [
1754
+ d(n).templates.length ? s.value ? ($(), M("div", Sn, [
1755
+ y("div", null, [
1756
+ C(b, {
1757
+ size: "md",
1758
+ color: "neutral-gray-300"
1759
+ })
1760
+ ]),
1761
+ y("div", In, [
1762
+ y("span", null, S(d(p)("inventory.closing.template.publish.publishing")), 1)
1763
+ ])
1764
+ ])) : l.value ? l.value.outlets.length === l.value.completed.length ? ($(), M("div", Mn, [
1765
+ C(r, {
1766
+ keypath: "inventory.closing.template.publish.recentlyPublishedAt",
1767
+ tag: "p"
1768
+ }, {
1769
+ started: A(() => [
1770
+ y("span", Fn, S(d(se)(new Date(l.value.createdAt))), 1)
1771
+ ]),
1772
+ finished: A(() => [
1773
+ y("span", Rn, S(d(se)(new Date(l.value.updatedAt))), 1)
1774
+ ]),
1775
+ _: 1
1776
+ }),
1777
+ y("p", null, S(d(p)("inventory.closing.template.publish.message")), 1)
1778
+ ])) : ($(), M("div", Pn, [
1779
+ C(r, {
1780
+ keypath: "inventory.closing.template.publish.stillPublishing",
1781
+ tag: "p"
1782
+ }, {
1783
+ started: A(() => [
1784
+ y("span", An, S(d(se)(new Date(l.value.createdAt))), 1)
1785
+ ]),
1786
+ progress: A(() => [
1787
+ y("span", En, " (" + S(l.value.completed.length) + "/" + S(l.value.outlets.length) + " completed) ", 1)
1788
+ ]),
1789
+ _: 1
1790
+ }),
1791
+ le(" Your recent publishing task is still pending (" + S(l.value.completed.length) + " / " + S(l.value.outlets.length) + "). Please wait until all publishing task has completed. ", 1)
1792
+ ])) : ($(), M("div", Dn, [
1793
+ y("p", null, S(d(p)("inventory.closing.template.publish.noRecentActivity")), 1),
1794
+ y("p", null, S(d(p)("inventory.closing.template.publish.message")), 1)
1795
+ ])) : ($(), M("div", Cn, [
1796
+ y("p", null, S(d(p)("inventory.closing.template.publish.nothingToPublish")), 1)
1797
+ ])),
1798
+ y("div", Vn, [
1799
+ C(f, {
1800
+ disabled: !v.value,
1801
+ loading: s.value,
1802
+ label: "Publish to all outlets",
1803
+ onClick: i
1804
+ }, null, 8, ["disabled", "loading"]),
1805
+ C(f, {
1806
+ variant: "tertiary",
1807
+ label: "Close",
1808
+ onClick: o
1809
+ })
1810
+ ])
1811
+ ]);
1812
+ };
1813
+ }
1814
+ }), Ln = { class: "flex-1 flex flex-col gap-8" }, Nn = { class: "flex flex-col" }, Bn = { class: "fm-typo-en-body-md-400 text-fm-color-typo-secondary" }, zn = { class: "fm-typo-en-body-lg-600 text-fm-color-typo-primary" }, Hn = { class: "fm-typo-en-body-lg-400 text-fm-color-typo-secondary line-clamp-2" }, On = { class: "fm-typo-en-body-lg-400 line-clamp-2" }, Wn = /* @__PURE__ */ Y({
1815
+ __name: "ClosingTemplateView",
1816
+ setup(c) {
1817
+ const { t: a } = K(), { createTemplate: s, updateTemplate: m, exportTemplates: t, importTemplates: n } = re(), { templateDialogProps: p, templateDetailsProps: h } = ze(re()), i = de(), l = ce(), v = ue(), o = ut(), { breakpoints: _ } = gt();
1818
+ i.watchLocation(v.fetchTemplates);
1819
+ const w = V(() => v.loading), b = F(""), r = V(() => _.value.xs || _.value.sm), f = V(() => r.value ? 10 : 20);
1820
+ function u(T) {
1821
+ switch (T) {
1822
+ case L.Add:
1823
+ return s();
1824
+ case "publish":
1825
+ return e();
1826
+ case "import":
1827
+ return n();
1828
+ case "export":
1829
+ return t();
1830
+ case "refresh":
1831
+ return v.fetchTemplates();
1832
+ }
1833
+ }
1834
+ function e() {
1835
+ l.open({
1836
+ title: "Publish closing templates",
1837
+ contentComponent: Un,
1838
+ contentComponentProps: {
1839
+ onClose() {
1840
+ l.close();
1841
+ }
1842
+ }
1843
+ });
1844
+ }
1845
+ function x(T) {
1846
+ return T;
1847
+ }
1848
+ const I = V(() => r.value ? [
1849
+ {
1850
+ label: a("inventory.closing.template.create.title"),
1851
+ value: L.Add,
1852
+ isPrimary: !0,
1853
+ prependIcon: "add"
1854
+ },
1855
+ {
1856
+ label: a("inventory.common.refresh"),
1857
+ value: "refresh",
1858
+ isPrimary: !1
1859
+ },
1860
+ {
1861
+ label: a("inventory.common.publish"),
1862
+ value: "publish",
1863
+ isPrimary: !1
1864
+ },
1865
+ {
1866
+ label: a("inventory.common.import"),
1867
+ value: "import",
1868
+ isPrimary: !1
1869
+ },
1870
+ {
1871
+ label: a("inventory.common.export"),
1872
+ value: "export",
1873
+ isPrimary: !1
1874
+ }
1875
+ ] : [
1876
+ {
1877
+ label: a("inventory.closing.template.create.title"),
1878
+ value: L.Add,
1879
+ isPrimary: !0,
1880
+ prependIcon: "add"
1881
+ },
1882
+ {
1883
+ label: a("inventory.common.publish"),
1884
+ value: "publish",
1885
+ isPrimary: !1
1886
+ },
1887
+ {
1888
+ label: a("inventory.common.import"),
1889
+ value: "import",
1890
+ isPrimary: !1
1891
+ },
1892
+ {
1893
+ label: a("inventory.common.refresh"),
1894
+ value: "refresh",
1895
+ isPrimary: !1
1896
+ },
1897
+ {
1898
+ label: a("inventory.common.export"),
1899
+ value: "export",
1900
+ isPrimary: !1
1901
+ }
1902
+ ]);
1903
+ return (T, g) => {
1904
+ const k = P("FmTable");
1905
+ return $(), M(j, null, [
1906
+ C(dt, {
1907
+ title: d(a)("inventory.closing.template.title"),
1908
+ actions: I.value,
1909
+ "onClick:action": u
1910
+ }, {
1911
+ default: A(() => [
1912
+ y("div", {
1913
+ class: q([
1914
+ "flex flex-col gap-8 max-h-full",
1915
+ {
1916
+ "p-0": r.value,
1917
+ "px-24 ": !r.value
1918
+ }
1919
+ ])
1920
+ }, [
1921
+ C(pt, {
1922
+ searchable: "",
1923
+ search: b.value,
1924
+ "onUpdate:search": g[0] || (g[0] = (E) => b.value = E)
1925
+ }, null, 8, ["search"]),
1926
+ C(k, {
1927
+ style: Ke(d(o).tableHeight),
1928
+ "column-defs": d(v).columnDefs,
1929
+ "row-data": d(v).templates,
1930
+ "search-value": b.value,
1931
+ loading: w.value,
1932
+ onRowClick: g[1] || (g[1] = (E) => d(m)(E.original)),
1933
+ "page-size": f.value
1934
+ }, {
1935
+ "list-row": A((E) => [
1936
+ C(Ne, {
1937
+ row: E,
1938
+ onRowClick: (D) => d(m)(D)
1939
+ }, {
1940
+ default: A((D) => {
1941
+ var N, X, B, Q, he, be, _e, xe, Z, we, ke, Te, $e, Ce, Se, ee, Ie, De, Me, Fe, te, Re;
1942
+ return [
1943
+ y("div", Ln, [
1944
+ y("div", Nn, [
1945
+ y("div", Bn, [
1946
+ C(d(G), {
1947
+ render: (B = (X = (N = D._id) == null ? void 0 : N.column) == null ? void 0 : X.columnDef) == null ? void 0 : B.cell,
1948
+ props: (he = (Q = D._id) == null ? void 0 : Q.getContext) == null ? void 0 : he.call(Q)
1949
+ }, null, 8, ["render", "props"])
1950
+ ]),
1951
+ y("div", zn, [
1952
+ C(d(G), {
1953
+ render: (xe = (_e = (be = D.name) == null ? void 0 : be.column) == null ? void 0 : _e.columnDef) == null ? void 0 : xe.cell,
1954
+ props: (we = (Z = D.name) == null ? void 0 : Z.getContext) == null ? void 0 : we.call(Z)
1955
+ }, null, 8, ["render", "props"])
1956
+ ]),
1957
+ y("div", null, S((ke = E.original.locations) != null && ke.length ? d(a)("inventory.closing.table.enabledForN", {
1958
+ count: ((Te = E.original.locations) == null ? void 0 : Te.length) ?? 0
1959
+ }) : d(a)("inventory.closing.table.enabledForAll")), 1),
1960
+ y("div", Hn, S([
1961
+ ...E.original.items.slice(0, 3).map((je) => je.sku.name),
1962
+ ...E.original.items.length >= 3 ? [`and ${E.original.items.length - 3} more items`] : []
1963
+ ].join(", ")), 1),
1964
+ y("div", On, [
1965
+ C(d(G), {
1966
+ render: (Se = (Ce = ($e = D.ref) == null ? void 0 : $e.column) == null ? void 0 : Ce.columnDef) == null ? void 0 : Se.cell,
1967
+ props: (Ie = (ee = D.ref) == null ? void 0 : ee.getContext) == null ? void 0 : Ie.call(ee)
1968
+ }, null, 8, ["render", "props"])
1969
+ ])
1970
+ ]),
1971
+ y("div", null, [
1972
+ C(d(G), {
1973
+ render: (Fe = (Me = (De = D.status) == null ? void 0 : De.column) == null ? void 0 : Me.columnDef) == null ? void 0 : Fe.cell,
1974
+ props: (Re = (te = D.status) == null ? void 0 : te.getContext) == null ? void 0 : Re.call(te)
1975
+ }, null, 8, ["render", "props"])
1976
+ ])
1977
+ ])
1978
+ ];
1979
+ }),
1980
+ _: 2
1981
+ }, 1032, ["row", "onRowClick"])
1982
+ ]),
1983
+ _: 1
1984
+ }, 8, ["style", "column-defs", "row-data", "search-value", "loading", "page-size"])
1985
+ ], 2)
1986
+ ]),
1987
+ _: 1
1988
+ }, 8, ["title", "actions"]),
1989
+ ($(), U(Ge, { to: "body" }, [
1990
+ C(Tn, qe(Je(d(h))), null, 16),
1991
+ C(xn, We(d(p), {
1992
+ onSubmitted: g[2] || (g[2] = (E) => d(v).fetchTemplates())
1993
+ }), null, 16)
1994
+ ]))
1995
+ ], 64);
1996
+ };
1997
+ }
1998
+ });
1999
+ export {
2000
+ Wn as default
2001
+ };