@feedmepos/mf-inventory-portal 1.1.9 → 1.2.0-dev.3

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 (51) hide show
  1. package/dist/{App-D1UJ8NY1.js → App-CvnYXQ_H.js} +1 -1
  2. package/dist/{ApprovalView-Cf6tfPo1.js → ApprovalView-Brt_cfLI.js} +22 -22
  3. package/dist/{BindingsDialog-C4XnyllW.js → BindingsDialog-BBCRbm60.js} +2 -2
  4. package/dist/{BindingsPicker-BW4-JT2R.js → BindingsPicker-D3cfis0-.js} +1 -1
  5. package/dist/{BindingsTable-DtDFatll.js → BindingsTable-BuHEtiqI.js} +1 -1
  6. package/dist/{ClosingDraftView-TtsNry0r.js → ClosingDraftView-fLxuV9T9.js} +2 -2
  7. package/dist/{ClosingTemplateView-NbwT6bOk.js → ClosingTemplateView-BJRZQ_9d.js} +2 -2
  8. package/dist/{DeliveryOrderPrintPreview-ujSpOCKj.js → DeliveryOrderPrintPreview-CKLGVFoJ.js} +8 -8
  9. package/dist/{FmFilterableMenuOptions.vue_vue_type_script_setup_true_lang-AGOtUG41.js → FmFilterableMenuOptions.vue_vue_type_script_setup_true_lang-6h2ZF1IM.js} +12 -12
  10. package/dist/{FmMultiselectDialog-c2e1Pisp.js → FmMultiselectDialog-uEoXq-hv.js} +1 -1
  11. package/dist/{FmUnitInput.vue_vue_type_script_setup_true_lang-BNxA-pQp.js → FmUnitInput.vue_vue_type_script_setup_true_lang-CSNDv3kk.js} +25 -25
  12. package/dist/{IngredientBindedItem.vue_vue_type_script_setup_true_lang-HkmovqY5.js → IngredientBindedItem.vue_vue_type_script_setup_true_lang-CeZBz1eT.js} +1 -1
  13. package/dist/{IngredientGroupView-CnSZ_jFk.js → IngredientGroupView-BhsEp63p.js} +2 -2
  14. package/dist/{IngredientsView-DjWSaEi8.js → IngredientsView-D3aehOrb.js} +4 -4
  15. package/dist/{IntegrationView-CJJKfJDQ.js → IntegrationView-Ds4_pk0y.js} +83 -83
  16. package/dist/{InventoryBindingForm-DhnOLZJo.js → InventoryBindingForm-CVaSaP-L.js} +1 -1
  17. package/dist/{InventoryBindingForm.vue_vue_type_script_setup_true_lang-CgLA6KH7.js → InventoryBindingForm.vue_vue_type_script_setup_true_lang-DsJObBbP.js} +3 -3
  18. package/dist/{InventoryBindingSummary-_DhLtjfm.js → InventoryBindingSummary-4dCMV0Je.js} +1 -1
  19. package/dist/{NumberPrecisionInput.vue_vue_type_script_setup_true_lang-BzlWBYz0.js → NumberPrecisionInput.vue_vue_type_script_setup_true_lang-BWTfN1Nc.js} +1 -1
  20. package/dist/{PremiumBadge.vue_vue_type_script_setup_true_lang-DRlFOUlD.js → PremiumBadge.vue_vue_type_script_setup_true_lang-lKPfAldc.js} +7 -7
  21. package/dist/{PublishView-DjA8RTiy.js → PublishView-BW1IjgqP.js} +4 -4
  22. package/dist/{PurchaseOrderPrintPreview-Bzdm9Vd-.js → PurchaseOrderPrintPreview-DupzzHHn.js} +7 -7
  23. package/dist/{ReceiveRequestView-CJ7oiJBQ.js → ReceiveRequestView-CZMDH6oI.js} +60 -60
  24. package/dist/{RecipeView--lcBWmZ3.js → RecipeView-BJ1JyMWl.js} +3 -3
  25. package/dist/StockView-C0h2udKi.js +2080 -0
  26. package/dist/{SupplierView-BN1P0pgR.js → SupplierView-nRrJO3aS.js} +3 -3
  27. package/dist/TransferDetails.vue_vue_type_script_setup_true_lang-CWXS6_zv.js +2310 -0
  28. package/dist/{TransferTemplateView-P25c3cZ-.js → TransferTemplateView-BmGAvcDy.js} +64 -64
  29. package/dist/{UnitView-Umy1Vy0Y.js → UnitView-CFayjoeC.js} +3 -3
  30. package/dist/{WarehouseView-DNDIdR4i.js → WarehouseView-Dw74JEJ4.js} +1 -1
  31. package/dist/api/stock.d.ts +2 -0
  32. package/dist/{app-CgzMLhAo.js → app-Cjc33Hak.js} +18639 -17803
  33. package/dist/app.d.ts +726 -6
  34. package/dist/app.js +1 -1
  35. package/dist/{decimal-D_3mwNtr.js → decimal-DkctM_2I.js} +1 -1
  36. package/dist/{format-unit-display-Bu29MSxm.js → format-unit-display-BWs5lTJP.js} +17 -17
  37. package/dist/{index-D-fVJxc8.js → index-C64jubVC.js} +1 -1
  38. package/dist/{index-BE8jrI3O.js → index-IbY1gBGq.js} +1 -1
  39. package/dist/{stock-JVbFNtIv.js → stock-BhsZeZQ6.js} +35 -27
  40. package/dist/style.css +1 -1
  41. package/dist/{supplier-nx8WElIW.js → supplier-D-CggzHd.js} +1 -1
  42. package/dist/tsconfig.app.tsbuildinfo +1 -1
  43. package/dist/{use-ingredient-select-dialog-CX9_4vk_.js → use-ingredient-select-dialog-C03zsmuo.js} +1 -1
  44. package/dist/{use-inventory-binding-dialog-BfVLQDzr.js → use-inventory-binding-dialog-D3Chc97P.js} +1 -1
  45. package/dist/views/receive-request/composables/use-receive-request-table.d.ts +18 -0
  46. package/dist/views/stock/components/StockRecordCard.vue.d.ts +6 -2
  47. package/dist/views/stock/components/dialog/AmendAdjustmentForm.vue.d.ts +94 -0
  48. package/dist/views/stock/components/dialog/AmendAdjustmentFormProps.d.ts +3 -0
  49. package/package.json +4 -4
  50. package/dist/StockView-BGNukBaV.js +0 -1856
  51. package/dist/TransferDetails.vue_vue_type_script_setup_true_lang-CiK1nGyN.js +0 -2272
@@ -1,1856 +0,0 @@
1
- import { defineComponent as ie, ref as O, computed as U, resolveComponent as M, openBlock as $, createBlock as K, withCtx as j, createElementVNode as n, normalizeClass as ge, toDisplayString as h, createVNode as g, createElementBlock as H, Fragment as ee, renderList as le, unref as l, h as _e, watch as be, isRef as Ie, createCommentVNode as J, reactive as at, onMounted as qe, normalizeStyle as Qe, createTextVNode as ce, Teleport as rt, normalizeProps as we, mergeProps as $e } from "vue";
2
- import { u as pe, W as lt, f as Te, h as it, a as Ue, F as Le, X as ut, Y as Me, j as de, P as ct, t as xe, V as De, A as dt, M as mt, T as fe, Z as pt, $ as Z, a0 as vt, a1 as Ne, m as ft, a2 as yt, a3 as _t, a4 as kt, a5 as Xe, Q as Y, a6 as ht, s as Je, a7 as ke, a8 as gt, a9 as bt, o as Ae, l as ze, p as xt, c as St, aa as Ft, ab as wt, ac as $t, ad as At, ae as Ct, B as Vt, _ as Bt, C as Mt, E as Dt, G as Ye } from "./app-CgzMLhAo.js";
3
- import { u as Pe, a as Ee } from "./stock-JVbFNtIv.js";
4
- import { g as Se } from "./decimal-D_3mwNtr.js";
5
- import { e as jt, u as Ze, i as et, _ as Ke } from "./PremiumBadge.vue_vue_type_script_setup_true_lang-DRlFOUlD.js";
6
- import { _ as je, S as Ce, g as tt } from "./StockForecast.vue_vue_type_style_index_0_lang-KLXSWvo5.js";
7
- import { _ as It } from "./PreviewBadge.vue_vue_type_script_setup_true_lang-CRZiQHjx.js";
8
- import { useI18n as ue, useCoreStore as Tt } from "@feedmepos/mf-common";
9
- import { useSnackbar as ye, useDialog as nt, useProxiedModel as He, useBreakpoints as Ut } from "@feedmepos/ui-library";
10
- import { defineStore as Pt } from "pinia";
11
- import { u as Et } from "./use-inventory-binding-dialog-BfVLQDzr.js";
12
- import { _ as Ht } from "./NumberPrecisionInput.vue_vue_type_script_setup_true_lang-BzlWBYz0.js";
13
- import { E as Rt } from "./empty-placeholder-wf6-BWE8.js";
14
- import "./array-Ca8T3f_G.js";
15
- var he = /* @__PURE__ */ ((f) => (f.History = "History", f.Convert = "Convert", f.Adjust = "Adjust", f))(he || {});
16
- const Ot = [
17
- {
18
- translationKey: "inventory.stock.action.history",
19
- color: "text-neutral-700",
20
- value: "History"
21
- /* History */
22
- }
23
- ], Lt = [
24
- {
25
- translationKey: "inventory.stock.action.history",
26
- color: "text-neutral-700",
27
- value: "History"
28
- /* History */
29
- },
30
- {
31
- translationKey: "inventory.stock.action.convert",
32
- color: "text-neutral-700",
33
- value: "Convert"
34
- /* Convert */
35
- },
36
- {
37
- translationKey: "inventory.stock.action.adjust",
38
- color: "text-neutral-700",
39
- value: "Adjust"
40
- /* Adjust */
41
- }
42
- ];
43
- async function Nt(f) {
44
- const i = `${(pe().currentLocation.name || "").replace(
45
- / /g,
46
- "_"
47
- )}_${lt().format("DD_MM_YYYY_HHmm")}.xlsx`;
48
- await jt(
49
- [
50
- {
51
- name: "stock",
52
- data: f,
53
- columns: [
54
- {
55
- name: "Code",
56
- selector: "code"
57
- },
58
- {
59
- name: "Name",
60
- selector: "name"
61
- },
62
- {
63
- name: "Balance",
64
- selector: (o) => {
65
- const S = Fe(o, o.unit);
66
- return S.type === "unit" ? Se(o.balance, o.unit, null, !1) : Se(o.balance, o.unit, S.measurement, !1);
67
- }
68
- },
69
- {
70
- name: "Unit",
71
- selector: (o) => {
72
- var _;
73
- const S = Fe(o, o.unit);
74
- return S.type === "unit" ? o.unit.abbrev : ((_ = o.unit.measurements.find((u) => u.id === S.measurement)) == null ? void 0 : _.abbrev) || "";
75
- }
76
- }
77
- ]
78
- }
79
- ],
80
- i
81
- );
82
- }
83
- function Fe(f, y) {
84
- const i = localStorage.getItem(`uom:${f._id}`);
85
- return i ? i === y._id ? {
86
- type: "unit"
87
- } : y.measurements.find((o) => o.id === i) ? {
88
- type: "measurement",
89
- measurement: i
90
- } : {
91
- type: "unit"
92
- } : f.trackingMeasurement && y.measurements.find((o) => o.id === f.trackingMeasurement) ? {
93
- type: "measurement",
94
- measurement: f.trackingMeasurement
95
- } : {
96
- type: "unit"
97
- };
98
- }
99
- const zt = { class: "fm-typo-en-body-md-400 flex-grow" }, ot = /* @__PURE__ */ ie({
100
- __name: "UnitDisplayControl",
101
- props: {
102
- unit: {},
103
- sku: {},
104
- amount: {},
105
- defaultTrackingMeasurement: {}
106
- },
107
- setup(f) {
108
- function y(x) {
109
- return `uom:${x._id}`;
110
- }
111
- function i(x) {
112
- const r = y(o.sku);
113
- x ? localStorage.setItem(r, x) : localStorage.setItem(r, o.unit._id), S.value = Fe(o.sku, o.unit);
114
- }
115
- const o = f, S = O(Fe(o.sku, o.unit)), _ = U(() => {
116
- const { measurements: x } = o.unit;
117
- return [
118
- {
119
- label: `${Se(o.amount, o.unit)}`,
120
- value: null
121
- },
122
- ...x.map(({ id: r }) => ({
123
- label: `${Se(o.amount, o.unit, r)}`,
124
- value: r
125
- }))
126
- ];
127
- });
128
- function u({ value: x }) {
129
- return l(S).type === "unit" ? x === null : x === l(S).measurement;
130
- }
131
- const m = U(
132
- () => {
133
- var x;
134
- return ((x = _.value.find((r) => u(r))) == null ? void 0 : x.label) ?? "";
135
- }
136
- ), w = O(!1);
137
- return (x, r) => {
138
- const t = M("FmIcon"), F = M("FmMenuItem"), C = M("FmMenu");
139
- return $(), K(C, {
140
- "stop-click-propagation": "",
141
- onMenuChanged: r[0] || (r[0] = (k) => w.value = k)
142
- }, {
143
- "menu-button": j(() => [
144
- n("button", {
145
- type: "button",
146
- class: ge([
147
- "w-full text-left flex items-center gap-8 cursor-pointer fm-corner-radius-sm px-8 py-4 border bg-white",
148
- w.value ? "border-fm-color-primary" : "border-fm-color-neutral-gray-100"
149
- ])
150
- }, [
151
- n("div", zt, h(m.value), 1),
152
- g(t, {
153
- class: "text-fm-color-neutral-gray-400",
154
- name: "expand_more"
155
- })
156
- ], 2)
157
- ]),
158
- default: j(() => [
159
- ($(!0), H(ee, null, le(_.value, (k) => ($(), K(F, {
160
- key: k.value ?? 0,
161
- label: k.label,
162
- "model-value": u(k),
163
- onClick: (a) => i(k.value)
164
- }, null, 8, ["label", "model-value", "onClick"]))), 128))
165
- ]),
166
- _: 1
167
- });
168
- };
169
- }
170
- }), Yt = { class: "whitespace-nowrap" }, Kt = /* @__PURE__ */ ie({
171
- __name: "StockHeaderPreview",
172
- setup(f) {
173
- const { t: y } = ue();
174
- return (i, o) => ($(), K(It, null, {
175
- default: j(() => [
176
- n("div", Yt, h(l(y)("inventory.stock.prediction.daysRemaining")), 1)
177
- ]),
178
- _: 1
179
- }));
180
- }
181
- }), st = Pt("stockActions", () => {
182
- const f = O(!1), y = pe(), i = Pe(), o = Ze(), S = ye(), _ = nt(), { t: u } = ue();
183
- async function m() {
184
- if (y._currentLocation) {
185
- f.value = !0;
186
- try {
187
- await i.readStockBalance(), await i.readProductBalance(), await o.readStockEstimateBalance();
188
- } catch {
189
- S.open({
190
- title: u("inventory.stock.error.title"),
191
- message: u("inventory.stock.error.message"),
192
- type: "error"
193
- });
194
- } finally {
195
- f.value = !1;
196
- }
197
- }
198
- }
199
- const w = O();
200
- async function x(a) {
201
- var A, D, P;
202
- if (!!!((D = (A = a.convert) == null ? void 0 : A.inventoryBindings) != null && D.length)) {
203
- _.open({
204
- title: u("inventory.stock.error.convert.title"),
205
- message: u("inventory.stock.error.convert.message")
206
- });
207
- return;
208
- }
209
- const B = {
210
- maxCount: ((P = i.productBalance.find(({ id: E }) => E === a._id)) == null ? void 0 : P.count) || 0,
211
- sku: a,
212
- show: !0,
213
- "onUpdate:show"(E) {
214
- w.value.show = E;
215
- },
216
- onSubmitted() {
217
- m();
218
- }
219
- };
220
- w.value = B;
221
- }
222
- const r = O();
223
- async function t(a) {
224
- const V = {
225
- stock: a,
226
- show: !0,
227
- "onUpdate:show"(L) {
228
- r.value.show = L;
229
- },
230
- onSubmitted() {
231
- m();
232
- }
233
- };
234
- r.value = V;
235
- }
236
- const F = O();
237
- async function C(a) {
238
- const V = {
239
- sku: a,
240
- show: !0,
241
- "onUpdate:show"(L) {
242
- F.value.show = L;
243
- }
244
- };
245
- F.value = V;
246
- }
247
- function k(a, V) {
248
- const L = Te(V);
249
- switch (a) {
250
- case he.History:
251
- C(L);
252
- return;
253
- case he.Convert:
254
- x(L);
255
- return;
256
- case he.Adjust:
257
- t(L);
258
- return;
259
- }
260
- }
261
- return {
262
- fetchStockBalance: m,
263
- onActionMenu: k,
264
- stockHistoryProps: F,
265
- showSkuHistory: C,
266
- convertSkuDialogProps: w,
267
- adjustSkuDialogProps: r
268
- };
269
- });
270
- function Gt() {
271
- const f = pe(), y = st(), { t: i } = ue();
272
- return {
273
- columnDefs: [
274
- {
275
- accessorKey: "code",
276
- header: () => i("inventory.stock.code"),
277
- enableSorting: !0,
278
- size: 300
279
- },
280
- {
281
- accessorKey: "name",
282
- header: () => i("inventory.stock.product"),
283
- enableSorting: !0,
284
- size: "auto"
285
- },
286
- {
287
- id: "UOM",
288
- header: () => i("inventory.stock.balance"),
289
- cell(S) {
290
- const _ = S.row.original, u = {
291
- unit: _.unit,
292
- sku: _,
293
- amount: _.balance,
294
- defaultTrackingMeasurement: _.trackingMeasurement ?? void 0
295
- };
296
- return _e(ot, u);
297
- },
298
- size: 180
299
- },
300
- {
301
- accessorKey: "day",
302
- id: "expireDate",
303
- header: () => _e(Kt),
304
- enableSorting: !0,
305
- sortUndefined: "last",
306
- cell(S) {
307
- var r, t;
308
- const _ = S.row.original.day, u = (r = S.row.original.thresholds) == null ? void 0 : r.low, m = (t = S.row.original.thresholds) == null ? void 0 : t.mid;
309
- if (typeof _ != "number" || typeof u != "number" || typeof m != "number")
310
- return _e(je, {
311
- days: _
312
- });
313
- const w = _ <= u ? Ce.low : _ <= m ? Ce.mid : Ce.high;
314
- return _e(je, {
315
- days: _,
316
- level: w
317
- });
318
- },
319
- size: 200
320
- },
321
- {
322
- id: "action",
323
- cell(S) {
324
- var _;
325
- return it(
326
- ((_ = f._currentLocation) == null ? void 0 : _.type) === "restaurant" ? Ot : Lt,
327
- (u) => y.onActionMenu(u, S.row.original)
328
- );
329
- },
330
- enableSorting: !1,
331
- size: 40,
332
- meta: {
333
- cellClass: "",
334
- headerClass: ""
335
- }
336
- }
337
- ]
338
- };
339
- }
340
- const Wt = {
341
- context: null,
342
- error: null,
343
- isRequired(f = "This field is required") {
344
- return `${this.context ?? ""}`.length === 0 && (this.error = f), this;
345
- },
346
- isString(f = "Must be a valid string") {
347
- return this.error ? this : (typeof this.context != "string" && (this.error ?? (this.error = f)), this);
348
- },
349
- toInt() {
350
- return this.error ? this : (this.context = +this.context, this);
351
- },
352
- isInteger(f = "Must be an integer") {
353
- return this.error ? this : (this.toInt(), isNaN(this.context) && (this.error = f), this);
354
- },
355
- min(f, y) {
356
- if (this.error) return this;
357
- try {
358
- typeof this.context == "number" ? +this.context < f && (this.error = y ?? `Must be at least ${f}`) : Object.prototype.hasOwnProperty.call(this.context, "length") ? +this.context.length < f && (this.error = y ?? `Must be at least ${f}`) : this.error = "Length cannot be determined";
359
- } catch {
360
- this.error = "Length cannot be determined";
361
- }
362
- return this;
363
- },
364
- max(f, y) {
365
- if (this.error) return this;
366
- try {
367
- typeof this.context == "number" ? +this.context > f && (this.error = y ?? `Must be at most ${f}`) : "length" in this.context ? +this.context.length > f && (this.error = y ?? `Must be at most ${f}`) : this.error = "Length cannot be determined";
368
- } catch {
369
- this.error = "Length cannot be determined";
370
- }
371
- return this;
372
- }
373
- };
374
- function Ge(f) {
375
- return { ...Wt, context: f };
376
- }
377
- const qt = { class: "flex items-center" }, Qt = { class: "fm-typo-en-title-md-800" }, Xt = { class: "flex flex-col gap-24 w-full" }, Jt = { class: "flex flex-col gap-8" }, Zt = { class: "fm-typo-en-body-lg-600" }, en = { class: "fm-typo-en-body-lg-400 text-fm-color-typo-secondary flex-grow" }, tn = { class: "fm-typo-en-body-lg-600 text-fm-color-typo-error" }, nn = { class: "flex flex-col p-16 gap-8" }, on = { class: "flex flex-col gap-4" }, sn = { class: "fm-typo-en-body-md-600 text-fm-color-typo-secondary bg-fm-color-neutral-gray-100 border-b py-12 px-16" }, an = { class: "grid grid-cols-[auto_100px_100px_48px] xs:grid-cols-[auto_80px_120px_48px] gap-8 px-8 items-center" }, rn = { class: "xs:col-span-3" }, ln = { class: "flex gap-8" }, un = /* @__PURE__ */ ie({
378
- __name: "ConvertSkuDialog",
379
- props: {
380
- sku: {},
381
- maxCount: {},
382
- show: { type: Boolean }
383
- },
384
- emits: ["update:show", "submitted"],
385
- setup(f, { expose: y, emit: i }) {
386
- const o = f, S = i, _ = Et(), u = Ue(), m = Ee(), w = ye(), { t: x } = ue(), r = O(0), t = O(null), F = U(() => u.skus), C = U(
387
- () => {
388
- var p, e;
389
- return (((e = (p = o.sku) == null ? void 0 : p.convert) == null ? void 0 : e.inventoryBindings) ?? []).filter(
390
- (s) => s.type === Le.enum.SKU
391
- );
392
- }
393
- ), k = U({
394
- get() {
395
- return !!t.value;
396
- },
397
- set(p) {
398
- p ? t.value = Te(C.value) : (t.value = null, r.value = Math.min(r.value, o.maxCount ?? 0));
399
- }
400
- }), a = O(!1);
401
- be([() => o.show], ([p]) => {
402
- p && (r.value = 0);
403
- });
404
- function V() {
405
- te(o.sku, xe(r.value), t.value);
406
- }
407
- function L(p) {
408
- if (t.value)
409
- return !0;
410
- const e = Ge(p).isInteger().max(o.maxCount ?? 0).error ?? "";
411
- return e || !0;
412
- }
413
- function B(p) {
414
- var d;
415
- const e = (d = o.sku.convert) != null && d.measurement ? o.sku.unit.measurements.find((b) => {
416
- var I;
417
- return b.id === ((I = o.sku.convert) == null ? void 0 : I.measurement);
418
- }) ?? null : null, s = Me(o.sku.unit, e), v = pt(+p);
419
- return Ge(v).isInteger().max(s).error ? "Precision cannot be more than " + s : !0;
420
- }
421
- const A = U(
422
- () => {
423
- var p, e;
424
- return (p = o.sku.convert) != null && p.measurement ? (e = o.sku.unit.measurements.find((s) => {
425
- var v;
426
- return s.id === ((v = o.sku.convert) == null ? void 0 : v.measurement);
427
- })) == null ? void 0 : e.abbrev : o.sku.unit.abbrev;
428
- }
429
- ), D = U(() => {
430
- var v, c;
431
- const e = ut({
432
- bindings: ((v = o.sku.convert) == null ? void 0 : v.inventoryBindings) ?? [],
433
- skus: u.skus,
434
- skuGroups: u.skuGroups,
435
- recipes: u.recipes
436
- }).inventoryBindings.filter((d) => "success" in d && d.success).map((d) => d).map((d) => d.binding);
437
- return (c = t.value ?? e) == null ? void 0 : c.map((d) => {
438
- var se, re, X, ne, Re;
439
- const b = u.skus.find((ve) => ve._id === d.id), I = ((se = d.measurement) == null ? void 0 : se.abbrev) ?? ((re = b == null ? void 0 : b.unit) == null ? void 0 : re.abbrev), Q = (X = o.sku.convert) != null && X.measurement ? o.sku.unit.measurements.find((ve) => {
440
- var Oe;
441
- return ve.id === ((Oe = o.sku.convert) == null ? void 0 : Oe.measurement);
442
- }) ?? null : null, oe = Me(o.sku.unit, Q), T = B(`${r.value}`) === !0 ? de(
443
- ct(
444
- d.amount,
445
- xe(+r.value, oe)
446
- ),
447
- !1
448
- ) : "0", z = (Re = (ne = t.value) == null ? void 0 : ne.find((ve) => ve.id === (b == null ? void 0 : b._id))) == null ? void 0 : Re.amount, W = z ? de(z, !1) : null;
449
- return {
450
- sku: b,
451
- convertAmount: W ?? T,
452
- abbrev: I
453
- };
454
- });
455
- }), P = O();
456
- y({
457
- validateInputs: () => {
458
- var p, e;
459
- (e = (p = P.value) == null ? void 0 : p.validateInputs) == null || e.call(p);
460
- },
461
- resetInputsValidation: () => {
462
- var p, e;
463
- (e = (p = P.value) == null ? void 0 : p.resetInputsValidation) == null || e.call(p);
464
- },
465
- resetInputs: () => {
466
- var p, e;
467
- (e = (p = P.value) == null ? void 0 : p.resetInputs) == null || e.call(p);
468
- }
469
- });
470
- const E = He(o, "show");
471
- async function te(p, e, s) {
472
- a.value = !0;
473
- try {
474
- await m.convertSku({
475
- conversions: [
476
- {
477
- doc: p,
478
- amount: e,
479
- overrides: s == null ? void 0 : s.map((v) => ({
480
- ...v,
481
- amount: {
482
- ...v.amount,
483
- amount: -1 * Math.abs(v.amount.amount)
484
- // ensure truly negative
485
- }
486
- }))
487
- }
488
- ]
489
- }), S("update:show", !1), S("submitted");
490
- } catch (v) {
491
- w.open({
492
- title: "Something went wrong",
493
- message: `Cannot convert ${p.name}. Please try again.`,
494
- type: "error"
495
- }), console.error("error at converting stock amount", p, e, v);
496
- } finally {
497
- a.value = !1;
498
- }
499
- }
500
- function q(p, e, s) {
501
- const v = +e;
502
- let c = s;
503
- e.length > 0 && isFinite(v) ? c = s.map((d) => (d.id !== p || (d.amount = fe(v)), d)) : c = s.map((d) => (d.id !== p || (d.amount = { amount: 0, precision: 0 }), d)), t.value = c;
504
- }
505
- function N(p) {
506
- const e = F.value.find((s) => s._id === p);
507
- return e ? tt(e.unit, !0) : [];
508
- }
509
- function R(p, e) {
510
- const s = N(p), v = s.find((c) => c.value === e) ?? s.find((c) => c.value === null);
511
- return v ? {
512
- ...v,
513
- label: v.abbrev
514
- } : null;
515
- }
516
- function G(p, e, s) {
517
- let v;
518
- if (e === null)
519
- v = s.map((c) => (c.id !== p || (c.measurement = null), c)) ?? [];
520
- else {
521
- const c = F.value.find((d) => d._id === p);
522
- v = s.map((d) => {
523
- var b, I;
524
- return d.id !== p || (d.measurement = (I = (b = c == null ? void 0 : c.unit) == null ? void 0 : b.measurements) == null ? void 0 : I.find((Q) => Q.id === e)), d;
525
- }) ?? [];
526
- }
527
- t.value = v;
528
- }
529
- function ae(p, e) {
530
- const s = e.filter((v) => v.id !== p);
531
- t.value = s;
532
- }
533
- function me() {
534
- const p = (t.value ?? []).map((e) => ({
535
- ...e,
536
- type: Le.enum.SKU
537
- }));
538
- _.promptIngredientsBinding(
539
- p,
540
- (e) => t.value = e,
541
- o.sku._id
542
- );
543
- }
544
- return be(
545
- () => o.show,
546
- (p) => {
547
- p || (t.value = null, r.value = 0);
548
- }
549
- ), (p, e) => {
550
- const s = M("FmTextField"), v = M("FmForm"), c = M("FmCard"), d = M("FmSwitch"), b = M("FmFormGroup"), I = M("FmSelect"), Q = M("FmButton"), oe = M("FmSideSheet");
551
- return $(), K(oe, {
552
- "dismiss-away": "",
553
- modelValue: l(E),
554
- "onUpdate:modelValue": e[3] || (e[3] = (T) => Ie(E) ? E.value = T : null),
555
- "max-width": 500
556
- }, {
557
- "side-sheet-header": j(() => [
558
- n("div", qt, [
559
- n("div", Qt, h(l(x)("inventory.stock.convert.title", { name: p.sku.name })), 1)
560
- ])
561
- ]),
562
- default: j(() => [
563
- n("div", Xt, [
564
- g(v, {
565
- ref_key: "formRef",
566
- ref: P,
567
- onValidationSuccess: V
568
- }, {
569
- default: j(() => [
570
- g(s, {
571
- disabled: a.value,
572
- "model-value": r.value,
573
- "onUpdate:modelValue": e[0] || (e[0] = (T) => r.value = T),
574
- label: l(x)("inventory.stock.convert.amount"),
575
- rules: [L, B, l(De)(0)],
576
- "append-text": A.value,
577
- "helper-text": t.value ? void 0 : `Max ${p.maxCount} ${A.value}`
578
- }, null, 8, ["disabled", "model-value", "label", "rules", "append-text", "helper-text"])
579
- ]),
580
- _: 1
581
- }, 512),
582
- g(c, {
583
- variant: "outlined",
584
- class: "p-16"
585
- }, {
586
- default: j(() => [
587
- n("div", Jt, [
588
- n("div", Zt, h(l(x)("inventory.stock.convert.deductionSummary")), 1),
589
- ($(!0), H(ee, null, le(D.value, (T) => {
590
- var z, W;
591
- return $(), H("div", {
592
- key: (z = T.sku) == null ? void 0 : z._id,
593
- class: "flex items-center"
594
- }, [
595
- n("div", en, h((W = T.sku) == null ? void 0 : W.name), 1),
596
- n("div", tn, " -" + h(T.convertAmount) + " " + h(T.abbrev), 1)
597
- ]);
598
- }), 128))
599
- ])
600
- ]),
601
- _: 1
602
- }),
603
- g(c, { variant: "outlined" }, {
604
- default: j(() => [
605
- n("div", nn, [
606
- g(d, {
607
- value: "",
608
- modelValue: k.value,
609
- "onUpdate:modelValue": e[1] || (e[1] = (T) => k.value = T),
610
- label: l(x)("inventory.stock.convert.overrideDeduction"),
611
- "label-placement": "right"
612
- }, null, 8, ["modelValue", "label"]),
613
- k.value ? ($(), H(ee, { key: 0 }, [
614
- g(b, {
615
- modelValue: t.value,
616
- rules: [l(dt)(1, "Must have at least one ingredient binding")]
617
- }, null, 8, ["modelValue", "rules"]),
618
- n("div", on, [
619
- n("div", sn, h(l(x)("inventory.stock.convert.ingredients")), 1),
620
- ($(!0), H(ee, null, le(t.value, (T) => ($(), K(b, {
621
- key: T.id,
622
- disabled: a.value,
623
- modelValue: +l(de)(T.amount ?? { amount: 1, precision: 0 }),
624
- rules: [
625
- l(mt)(
626
- F.value.find((z) => z._id === T.id).unit,
627
- T.measurement
628
- ),
629
- l(De)(0)
630
- ]
631
- }, {
632
- default: j(({ invalid: z }) => {
633
- var W, se, re;
634
- return [
635
- n("div", an, [
636
- n("div", rn, h((W = F.value.find((X) => X._id === T.id)) == null ? void 0 : W.name), 1),
637
- g(s, {
638
- class: "xs:col-span-2",
639
- disabled: a.value,
640
- modelValue: +l(de)(
641
- T.amount ?? { amount: 1, precision: 0 }
642
- ),
643
- "onUpdate:modelValue": (X) => q(T.id, X, t.value ?? []),
644
- invalid: z
645
- }, null, 8, ["disabled", "modelValue", "onUpdate:modelValue", "invalid"]),
646
- g(I, {
647
- disabled: a.value,
648
- class: "translate-y-[2px]",
649
- items: N(T.id),
650
- "model-value": (re = R(T.id, (se = T.measurement) == null ? void 0 : se.id)) == null ? void 0 : re.value,
651
- "onUpdate:modelValue": (X) => G(T.id, X, t.value ?? []),
652
- invalid: z
653
- }, {
654
- "helper-text": j(() => e[4] || (e[4] = [])),
655
- _: 2
656
- }, 1032, ["disabled", "items", "model-value", "onUpdate:modelValue", "invalid"]),
657
- g(Q, {
658
- disabled: a.value,
659
- type: "button",
660
- variant: "tertiary",
661
- icon: "delete",
662
- onClick: (X) => ae(T.id, t.value ?? [])
663
- }, null, 8, ["disabled", "onClick"])
664
- ])
665
- ];
666
- }),
667
- _: 2
668
- }, 1032, ["disabled", "modelValue", "rules"]))), 128))
669
- ]),
670
- n("div", null, [
671
- g(Q, {
672
- icon: "link",
673
- label: l(x)("inventory.stock.convert.linkIngredient"),
674
- variant: "plain",
675
- onClick: me
676
- }, null, 8, ["label"])
677
- ])
678
- ], 64)) : J("", !0)
679
- ])
680
- ]),
681
- _: 1
682
- })
683
- ])
684
- ]),
685
- "side-sheet-footer": j(() => [
686
- n("div", ln, [
687
- g(Q, {
688
- loading: a.value,
689
- label: l(x)("inventory.stock.convert.convertButton"),
690
- onClick: e[2] || (e[2] = (T) => {
691
- var z, W;
692
- return (W = (z = P.value) == null ? void 0 : z.validateInputs) == null ? void 0 : W.call(z);
693
- })
694
- }, null, 8, ["loading", "label"])
695
- ])
696
- ]),
697
- _: 1
698
- }, 8, ["modelValue"]);
699
- };
700
- }
701
- });
702
- function Ve(f, y) {
703
- const i = xe(f, y);
704
- return { ...i, amount: -i.amount };
705
- }
706
- function We(f, y) {
707
- return xe(Math.abs(f), y);
708
- }
709
- const Be = {
710
- [Z.enum.DAMAGE]: {
711
- label: "Waste",
712
- toAdjustmentAmount: Ve
713
- },
714
- [Z.enum.THEFT]: {
715
- label: "Theft",
716
- toAdjustmentAmount: Ve
717
- },
718
- [Z.enum.LOSE]: {
719
- label: "Lose",
720
- toAdjustmentAmount: Ve
721
- },
722
- [Z.enum.EXTRA]: {
723
- label: "Extra",
724
- toAdjustmentAmount: We
725
- },
726
- [Z.enum.PURCHASE]: {
727
- label: "Purchase",
728
- toAdjustmentAmount: We
729
- }
730
- }, cn = { class: "col-span-2 flex" }, dn = { class: "fm-typo-en-body-lg-600 flex-1" }, mn = /* @__PURE__ */ ie({
731
- __name: "AdjustedItemForm",
732
- props: {
733
- modelValue: {},
734
- disabled: { type: Boolean }
735
- },
736
- emits: ["update:modelValue", "click:delete"],
737
- setup(f, { emit: y }) {
738
- const i = f, o = y, S = U(
739
- () => Object.keys(Be).map((r) => ({
740
- label: vt(r),
741
- value: r
742
- }))
743
- ), _ = U(() => tt(i.modelValue.doc.unit, !0)), u = U({
744
- get() {
745
- return i.modelValue.type ?? Z.enum.PURCHASE;
746
- },
747
- set(r) {
748
- const t = {
749
- ...i.modelValue
750
- };
751
- t.type = r;
752
- const F = Ne(i.modelValue.amount);
753
- t.amount = Be[t.type].toAdjustmentAmount(
754
- +de(F),
755
- F.precision
756
- ), o("update:modelValue", t);
757
- }
758
- }), m = U({
759
- get() {
760
- const r = Ne(i.modelValue.amount);
761
- return +de(r);
762
- },
763
- set(r) {
764
- const t = {
765
- ...i.modelValue
766
- }, F = fe(r);
767
- t.amount = Be[u.value].toAdjustmentAmount(
768
- r,
769
- F.precision
770
- ), o("update:modelValue", t);
771
- }
772
- }), w = U({
773
- get() {
774
- var r;
775
- return ((r = i.modelValue.measurement) == null ? void 0 : r.id) ?? null;
776
- },
777
- set(r) {
778
- var F, C;
779
- const t = {
780
- ...i.modelValue
781
- };
782
- t.measurement = ((C = (F = i.modelValue.doc.unit) == null ? void 0 : F.measurements) == null ? void 0 : C.find((k) => k.id === r)) ?? null, o("update:modelValue", t);
783
- }
784
- }), x = U({
785
- get() {
786
- return i.modelValue.remark ?? "";
787
- },
788
- set(r) {
789
- const t = {
790
- ...i.modelValue
791
- };
792
- t.remark = r, o("update:modelValue", t);
793
- }
794
- });
795
- return (r, t) => {
796
- const F = M("FmButton"), C = M("FmSelect"), k = M("FmTextarea"), a = M("FmCard");
797
- return $(), K(a, {
798
- variant: "outlined",
799
- class: "grid grid-cols-2 gap-8 p-16"
800
- }, {
801
- default: j(() => [
802
- n("div", cn, [
803
- n("div", dn, h(r.modelValue.doc.name), 1),
804
- g(F, {
805
- variant: "tertiary",
806
- "prepend-icon": "delete",
807
- onClick: t[0] || (t[0] = (V) => o("click:delete"))
808
- })
809
- ]),
810
- g(C, {
811
- disabled: r.disabled,
812
- class: "col-span-2",
813
- label: "Type",
814
- items: S.value,
815
- modelValue: u.value,
816
- "onUpdate:modelValue": t[1] || (t[1] = (V) => u.value = V),
817
- rules: [l(ft)()],
818
- "label-mark": "required"
819
- }, null, 8, ["disabled", "items", "modelValue", "rules"]),
820
- g(Ht, {
821
- disabled: r.disabled,
822
- label: "Amount",
823
- step: +l(de)({
824
- amount: 1,
825
- precision: l(Me)(r.modelValue.doc.unit, r.modelValue.measurement)
826
- }),
827
- modelValue: m.value,
828
- "onUpdate:modelValue": t[2] || (t[2] = (V) => m.value = V),
829
- rules: [l(De)(0)]
830
- }, null, 8, ["disabled", "step", "modelValue", "rules"]),
831
- g(C, {
832
- disabled: r.disabled,
833
- label: "Unit",
834
- items: _.value,
835
- modelValue: w.value,
836
- "onUpdate:modelValue": t[3] || (t[3] = (V) => w.value = V)
837
- }, null, 8, ["disabled", "items", "modelValue"]),
838
- g(k, {
839
- class: "col-span-2",
840
- disabled: r.disabled,
841
- label: "Remark",
842
- modelValue: x.value,
843
- "onUpdate:modelValue": t[4] || (t[4] = (V) => x.value = V),
844
- "label-mark": "optional"
845
- }, null, 8, ["disabled", "modelValue"])
846
- ]),
847
- _: 1
848
- });
849
- };
850
- }
851
- }), pn = { class: "flex items-center" }, vn = { class: "fm-typo-en-title-md-800" }, fn = { class: "flex items-center" }, yn = { class: "fm-typo-en-title-sm-800 flex-1" }, _n = { class: "flex gap-8" }, kn = /* @__PURE__ */ ie({
852
- __name: "AdjustSkuDialog",
853
- props: {
854
- stock: {},
855
- show: { type: Boolean }
856
- },
857
- emits: ["update:show", "submitted"],
858
- setup(f, { expose: y, emit: i }) {
859
- const o = f, S = i, _ = Ue(), u = nt(), m = Ee(), w = ye(), x = O(!1), { t: r } = ue();
860
- function t() {
861
- a(Te(k));
862
- }
863
- const F = O();
864
- y({
865
- validateInputs: () => {
866
- var B, A;
867
- (A = (B = F.value) == null ? void 0 : B.validateInputs) == null || A.call(B);
868
- },
869
- resetInputsValidation: () => {
870
- var B, A;
871
- (A = (B = F.value) == null ? void 0 : B.resetInputsValidation) == null || A.call(B);
872
- },
873
- resetInputs: () => {
874
- var B, A;
875
- (A = (B = F.value) == null ? void 0 : B.resetInputs) == null || A.call(B);
876
- }
877
- });
878
- const C = He(o, "show"), k = at({
879
- remark: "",
880
- adjustments: [
881
- {
882
- id: `sku_${(/* @__PURE__ */ new Date()).toISOString()}_${Math.random().toString(16).slice(2, 8)}`,
883
- type: Z.enum.PURCHASE,
884
- doc: o.stock,
885
- measurement: null,
886
- remark: "",
887
- amount: fe(1)
888
- }
889
- ]
890
- });
891
- be([() => o.show], ([B]) => {
892
- B && (k.remark = "", k.adjustments = [
893
- {
894
- id: `sku_${(/* @__PURE__ */ new Date()).toISOString()}_${Math.random().toString(16).slice(2, 8)}`,
895
- type: Z.enum.PURCHASE,
896
- doc: o.stock,
897
- measurement: null,
898
- remark: "",
899
- amount: fe(1)
900
- }
901
- ]);
902
- });
903
- async function a(B) {
904
- x.value = !0;
905
- try {
906
- await m.adjustSku({
907
- remark: B.remark,
908
- adjustments: B.adjustments.map(({ doc: A, remark: D, type: P, amount: E, measurement: te }) => ({
909
- id: A._id,
910
- amount: E,
911
- measurement: te,
912
- remark: D,
913
- doc: A,
914
- type: P
915
- }))
916
- }), S("update:show", !1), S("submitted");
917
- } catch (A) {
918
- w.open({
919
- title: r("inventory.stock.adjust.error.title"),
920
- message: r("inventory.stock.adjust.error.message"),
921
- type: "error"
922
- }), console.log("error on adjust ingredients", B, A);
923
- } finally {
924
- x.value = !1;
925
- }
926
- }
927
- function V() {
928
- const B = _.skus.map((D) => ({
929
- label: D.name,
930
- sublabel: D.code,
931
- value: D._id
932
- })), A = B.filter((D) => k.adjustments.find((P) => P.doc._id === D.value)).map((D) => D.value);
933
- u.open({
934
- title: "Select ingredients",
935
- contentComponent: yt,
936
- contentComponentProps: {
937
- items: B,
938
- modelValue: A
939
- },
940
- overlay: !0,
941
- closeButton: !0,
942
- dismissAway: !0,
943
- primaryActions: {
944
- text: "Confirm",
945
- close: !0
946
- },
947
- secondaryActions: {
948
- text: "Close",
949
- close: !0,
950
- variant: "tertiary"
951
- }
952
- }).onPrimary((D) => {
953
- k.adjustments = D.map(
954
- (P) => k.adjustments.find((E) => E.doc._id === P) ?? {
955
- id: `sku_${(/* @__PURE__ */ new Date()).toISOString()}_${Math.random().toString(16).slice(2, 8)}`,
956
- type: Z.enum.PURCHASE,
957
- doc: _.skus.find((E) => E._id === P),
958
- measurement: null,
959
- remark: "",
960
- amount: fe(1)
961
- }
962
- );
963
- });
964
- }
965
- function L(B) {
966
- k.adjustments.splice(B, 1);
967
- }
968
- return (B, A) => {
969
- const D = M("FmTextarea"), P = M("FmButton"), E = M("FmForm"), te = M("FmSideSheet");
970
- return $(), K(te, {
971
- modelValue: l(C),
972
- "onUpdate:modelValue": A[2] || (A[2] = (q) => Ie(C) ? C.value = q : null),
973
- "dismiss-away": "",
974
- "max-width": 500
975
- }, {
976
- "side-sheet-header": j(() => [
977
- n("div", pn, [
978
- n("div", vn, h(l(r)("inventory.stock.adjust.title")), 1)
979
- ])
980
- ]),
981
- default: j(() => [
982
- g(E, {
983
- class: "w-full flex flex-col gap-12",
984
- ref_key: "formRef",
985
- ref: F,
986
- onValidationSuccess: t
987
- }, {
988
- default: j(() => [
989
- g(D, {
990
- label: l(r)("inventory.stock.adjust.remark"),
991
- modelValue: k.remark,
992
- "onUpdate:modelValue": A[0] || (A[0] = (q) => k.remark = q)
993
- }, null, 8, ["label", "modelValue"]),
994
- n("div", fn, [
995
- n("div", yn, h(l(r)("inventory.stock.adjust.adjustedItems")), 1),
996
- g(P, {
997
- "prepend-icon": "add",
998
- variant: "tertiary",
999
- size: "md",
1000
- onClick: V
1001
- })
1002
- ]),
1003
- ($(!0), H(ee, null, le(k.adjustments, (q, N) => ($(), K(mn, {
1004
- key: q.id,
1005
- modelValue: k.adjustments[N],
1006
- "onUpdate:modelValue": (R) => k.adjustments[N] = R,
1007
- "onClick:delete": (R) => L(N)
1008
- }, null, 8, ["modelValue", "onUpdate:modelValue", "onClick:delete"]))), 128))
1009
- ]),
1010
- _: 1
1011
- }, 512)
1012
- ]),
1013
- "side-sheet-footer": j(() => [
1014
- n("div", _n, [
1015
- g(P, {
1016
- label: l(r)("inventory.stock.adjust.adjustButton"),
1017
- loading: x.value,
1018
- onClick: A[1] || (A[1] = (q) => {
1019
- var N, R;
1020
- return (R = (N = F.value) == null ? void 0 : N.validateInputs) == null ? void 0 : R.call(N);
1021
- })
1022
- }, null, 8, ["label", "loading"])
1023
- ])
1024
- ]),
1025
- _: 1
1026
- }, 8, ["modelValue"]);
1027
- };
1028
- }
1029
- }), hn = _t((f, y) => ({
1030
- // TODO: remove once latest inventory backend has been push
1031
- async findBillsByBusinessId(i, o, S) {
1032
- const _ = `${f.businessesBackendUrl}/${i}/reports/find-many`, u = {
1033
- // type: TYPE.bill,
1034
- type: "bill",
1035
- restaurantIds: o,
1036
- ids: S
1037
- };
1038
- return await y.post(_, u);
1039
- },
1040
- async findBillsById(i) {
1041
- const S = pe().currentLocationDBName, _ = `${f.inventoryBackendUrl}/${S}/bill/search`, u = {
1042
- ids: i
1043
- };
1044
- return await y.post(_, u);
1045
- }
1046
- })), gn = { class: "p-16" }, bn = { class: "fm-typo-en-body-md-600 flex-grow" }, xn = { class: "flex-grow text-fm-color-typo-secondary" }, Sn = {
1047
- key: 0,
1048
- class: "my-5"
1049
- }, Fn = { class: "text-neutral-400" }, wn = { class: "flex-grow" }, $n = { class: "flex gap-1" }, An = { class: "flex flex-col gap-1" }, Cn = {
1050
- key: 1,
1051
- class: "t-system text-fsecondary"
1052
- }, Vn = {
1053
- key: 2,
1054
- class: "inline-flex items-center rounded-md bg-yellow-400/10 px-2 text-xs font-medium text-yellow-500 inset-ring inset-ring-yellow-400/20"
1055
- }, Bn = {
1056
- key: 0,
1057
- class: "shrink-0 text-fm-color-typo-secondary"
1058
- }, Mn = /* @__PURE__ */ ie({
1059
- __name: "StockRecordCard",
1060
- props: {
1061
- record: {},
1062
- sku: {},
1063
- bills: { default: () => [] }
1064
- },
1065
- setup(f) {
1066
- const y = f, i = O(!1), o = O(), S = O(null), _ = U(() => S.value === null ? "unset" : i.value ? `${S.value}px` : "0px");
1067
- qe(() => {
1068
- var x;
1069
- S.value = ((x = o.value) == null ? void 0 : x.scrollHeight) || 0;
1070
- });
1071
- const u = U(() => {
1072
- var k;
1073
- const x = y.record.adjustments, r = y.sku, t = {}, C = x.flatMap((a) => {
1074
- var V;
1075
- return ((V = a.skus) == null ? void 0 : V.filter((L) => L.sku._id === r._id)) ?? [];
1076
- }).flatMap((a) => a.amounts);
1077
- for (const a of C) {
1078
- const V = a.measurement ? kt(a.measurement.conversion, a.amount) : a.amount;
1079
- t[k = a.type] ?? (t[k] = { amount: 0, precision: 0 }), t[a.type] = Xe(V, t[a.type]);
1080
- }
1081
- return Object.entries(t).reduce(
1082
- (a, [V, L]) => (a[V] = /// comment, because without it formatter makes code uglier
1083
- `${Y.toFormatString({
1084
- value: L,
1085
- precision: 4
1086
- })} ${r.unit.abbrev}`, a),
1087
- {}
1088
- );
1089
- }), { t: m } = ue(), w = U(() => y.record.adjustmentsByTime.map(({ date: x, adjustments: r }) => ({
1090
- time: ht(new Date(x)),
1091
- adjustments: r.flatMap(
1092
- (t) => {
1093
- var F, C;
1094
- return ((C = (F = t.skus) == null ? void 0 : F.map) == null ? void 0 : C.call(F, (k) => {
1095
- var a, V;
1096
- return {
1097
- ...k,
1098
- ref: t.ref,
1099
- backdateFrom: t.effectiveAt != null ? et(t._id) : null,
1100
- toBalance: (V = (a = t.skus) == null ? void 0 : a[0]) == null ? void 0 : V.toBalance
1101
- };
1102
- })) ?? [];
1103
- }
1104
- ).flatMap((t) => {
1105
- var k;
1106
- const F = (k = y.bills.find((a) => a._id === t.ref)) == null ? void 0 : k.seqNumber, C = F ? m("inventory.stock.record.bill", [F]) : "";
1107
- return t.amounts.map((a) => {
1108
- var V;
1109
- return {
1110
- amount: `${Y.toFormatString({ value: a.amount, precision: 4 })} ${((V = a.measurement) == null ? void 0 : V.abbrev) ?? t.sku.unit.abbrev}`,
1111
- backdateFrom: t.backdateFrom,
1112
- name: a.type,
1113
- remark: a.remark || C || "",
1114
- cost: a.cost,
1115
- toBalance: Y.toFormatString({
1116
- value: t.toBalance ?? Y.fromNumber(0),
1117
- precision: 4
1118
- }),
1119
- baseUnit: t.sku.unit.abbrev
1120
- };
1121
- });
1122
- })
1123
- })));
1124
- return (x, r) => {
1125
- const t = M("FmIcon"), F = M("FmTooltip"), C = M("FmCard");
1126
- return $(), K(C, { variant: "outlined" }, {
1127
- default: j(() => [
1128
- n("div", gn, [
1129
- n("div", {
1130
- class: "flex items-center cursor-pointer mb-1",
1131
- onClick: r[0] || (r[0] = (k) => i.value = !i.value)
1132
- }, [
1133
- n("div", bn, h(x.record.date), 1),
1134
- g(t, {
1135
- name: i.value ? "expand_more" : "expand_less",
1136
- color: "#777777",
1137
- size: "md"
1138
- }, null, 8, ["name"])
1139
- ]),
1140
- ($(!0), H(ee, null, le(u.value, (k, a) => ($(), H("div", {
1141
- key: a,
1142
- class: "flex flex-row py-1",
1143
- style: { "font-size": "0.8rem" }
1144
- }, [
1145
- n("div", xn, h(l(m)(`inventory.inventoryAdjustment.type.${a}`)), 1),
1146
- n("div", {
1147
- class: ge({
1148
- "text-fm-color-typo-error": k.startsWith("-"),
1149
- "text-fm-color-typo-success": !k.startsWith("-"),
1150
- "ml-auto": !0
1151
- })
1152
- }, h(k), 3)
1153
- ]))), 128)),
1154
- n("div", {
1155
- ref_key: "detailRef",
1156
- ref: o,
1157
- style: Qe({
1158
- fontSize: "0.8rem",
1159
- maxHeight: _.value,
1160
- overflow: "hidden",
1161
- transition: "max-height 0.2s ease-out"
1162
- })
1163
- }, [
1164
- w.value.length ? ($(), H("hr", Sn)) : J("", !0),
1165
- ($(!0), H(ee, null, le(w.value, (k) => ($(), H("div", {
1166
- key: k.time,
1167
- class: "flex gap-1 w-full"
1168
- }, [
1169
- n("div", Fn, h(k.time), 1),
1170
- n("div", wn, [
1171
- ($(!0), H(ee, null, le(k.adjustments, (a) => ($(), H("div", {
1172
- key: a.name,
1173
- class: "flex gap-1"
1174
- }, [
1175
- n("div", $n, [
1176
- ce(h(l(m)(`inventory.inventoryAdjustment.type.${a.name}`)) + " ", 1),
1177
- a.backdateFrom ? ($(), K(F, {
1178
- key: 0,
1179
- variant: "plain",
1180
- placement: "top",
1181
- "z-index": 50
1182
- }, {
1183
- content: j(() => [
1184
- n("div", An, h(l(m)("inventory.stock.record.backdate", [
1185
- l(Je)(new Date(a.backdateFrom))
1186
- ])), 1)
1187
- ]),
1188
- default: j(() => [
1189
- g(t, {
1190
- name: "info",
1191
- size: "sm",
1192
- color: "primary"
1193
- })
1194
- ]),
1195
- _: 2
1196
- }, 1024)) : J("", !0),
1197
- a.remark ? ($(), H("span", Cn, " # " + h(a.remark), 1)) : J("", !0),
1198
- a.name === l(Z).Enum.CLOSING ? ($(), H("span", Vn, " Actual Balance: " + h(a.toBalance) + " " + h(a.baseUnit), 1)) : J("", !0)
1199
- ]),
1200
- n("div", {
1201
- class: ge({
1202
- "text-fm-color-typo-error": a.amount.startsWith("-"),
1203
- "text-fm-color-typo-success": !a.amount.startsWith("-"),
1204
- "ml-auto": !0
1205
- })
1206
- }, h(a.amount), 3),
1207
- a.cost ? ($(), H("div", Bn, " (" + h(l(ke)(a.cost, !1, a.cost.precision)) + ") ", 1)) : J("", !0)
1208
- ]))), 128))
1209
- ])
1210
- ]))), 128))
1211
- ], 4)
1212
- ])
1213
- ]),
1214
- _: 1
1215
- });
1216
- };
1217
- }
1218
- });
1219
- function Dn(f, y) {
1220
- var _;
1221
- const i = Object.keys(Z.enum).reduce(
1222
- (u, m) => (u[m] = { amount: 0, precision: 0 }, u),
1223
- {}
1224
- );
1225
- if (!y)
1226
- return Object.entries(i).reduce(
1227
- (u, [m]) => (u[m] = Y.fromNumber(0), u),
1228
- {}
1229
- );
1230
- const S = f.flatMap((u) => {
1231
- var m;
1232
- return ((m = u.skus) == null ? void 0 : m.filter((w) => w.sku._id === y._id)) ?? [];
1233
- }).flatMap((u) => u.amounts);
1234
- for (const u of S) {
1235
- const m = u.measurement ? Y.multiply([u.measurement.conversion, u.amount]) : u.amount;
1236
- i[_ = u.type] ?? (i[_] = { amount: 0, precision: 0 }), i[u.type] = Y.add([m, i[u.type]]);
1237
- }
1238
- return Object.entries(i).reduce(
1239
- (u, [m, w]) => {
1240
- const x = {
1241
- ...w,
1242
- amount: Math.abs(w.amount)
1243
- };
1244
- return u[m] = /// comment, because without it formatter makes code uglier
1245
- `${Y.toFormatString({
1246
- value: x,
1247
- precision: 4
1248
- })} ${y.unit.abbrev}`, u;
1249
- },
1250
- {}
1251
- );
1252
- }
1253
- function jn(f, y) {
1254
- if (!y)
1255
- return null;
1256
- let i = null;
1257
- const S = f.flatMap((_) => {
1258
- var u;
1259
- return ((u = _.skus) == null ? void 0 : u.filter((m) => m.sku._id === y._id)) ?? [];
1260
- }).flatMap((_) => {
1261
- var u;
1262
- return !_.history || ((u = _.history) == null ? void 0 : u.length) === 0 ? [] : _.history[0];
1263
- });
1264
- for (const _ of S) {
1265
- const u = _.amounts;
1266
- for (const m of u) {
1267
- if (m.type !== Z.Enum.SALES)
1268
- continue;
1269
- const w = m.measurement ? Y.multiply([m.measurement.conversion, m.amount]) : m.amount;
1270
- i ?? (i = Y.fromNumber(0)), i = Y.add([i, w]);
1271
- }
1272
- }
1273
- return i != null ? (i.amount = Math.abs(i.amount), `${Y.toFormatString({
1274
- value: i,
1275
- precision: 4
1276
- })} ${y.unit.abbrev}`) : null;
1277
- }
1278
- const In = { class: "flex items-center w-full fm-typo-en-title-md-800" }, Tn = { class: "flex-1 line-clamp-2" }, Un = { class: "flex flex-col gap-32 w-full h-full" }, Pn = { class: "flex items-center relative gap-4" }, En = { class: "flex-1" }, Hn = {
1279
- key: 0,
1280
- class: "flex-1 flex flex-col items-center gap-16"
1281
- }, Rn = { class: "fm-typo-en-body-lg-400 translate-x-4" }, On = {
1282
- key: 1,
1283
- class: "flex flex-col gap-12"
1284
- }, Ln = { class: "pb-16" }, Nn = { class: "fm-typo-cn-body-lg-600" }, zn = {
1285
- class: "grid gap-12 fm-typo-en-body-md-400",
1286
- style: { "grid-template-columns": "auto auto auto", "grid-auto-rows": "1fr" }
1287
- }, Yn = { class: "flex flex-col gap-1" }, Kn = { class: "text-fm-color-typo-secondary" }, Gn = { class: "font-bold" }, Wn = { class: "flex flex-col gap-1" }, qn = { class: "text-fm-color-typo-secondary flex" }, Qn = { class: "font-bold" }, Xn = { class: "flex flex-col gap-1" }, Jn = { class: "text-fm-color-typo-secondary" }, Zn = { class: "font-bold" }, eo = { class: "flex flex-col gap-1" }, to = { class: "text-fm-color-typo-secondary" }, no = { class: "font-bold" }, oo = { class: "flex flex-col gap-1" }, so = { class: "text-fm-color-typo-secondary" }, ao = { class: "font-bold" }, ro = { class: "flex flex-col gap-1" }, lo = { class: "text-fm-color-typo-secondary" }, io = { class: "font-bold" }, uo = { class: "flex flex-col gap-1" }, co = { class: "text-fm-color-typo-secondary" }, mo = { class: "font-bold" }, po = { class: "flex flex-col gap-1" }, vo = { class: "text-fm-color-typo-secondary" }, fo = { class: "font-bold" }, yo = { class: "flex flex-col gap-1" }, _o = { class: "text-fm-color-typo-secondary" }, ko = { class: "font-bold" }, ho = {
1288
- key: 0,
1289
- class: "flex flex-col gap-8"
1290
- }, go = { class: "flex" }, bo = { class: "flex-1 flex flex-col gap-1" }, xo = { class: "flex gap-1 items-center text-fm-color-typo-secondary" }, So = { class: "font-bold" }, Fo = { class: "flex-1 flex flex-col gap-1" }, wo = { class: "flex gap-1 items-center text-fm-color-typo-secondary" }, $o = { class: "flex flex-col gap-1" }, Ao = { class: "font-bold" }, Co = {
1291
- key: 2,
1292
- class: "flex-1 flex flex-col items-center gap-8"
1293
- }, Vo = ["src"], Bo = { class: "font-bold text-lg" }, Mo = { class: "text-xs text-neutral-400 text-center" }, Do = /* @__PURE__ */ ie({
1294
- __name: "StockHistory",
1295
- props: {
1296
- sku: {},
1297
- show: { type: Boolean }
1298
- },
1299
- emits: ["update:show"],
1300
- setup(f) {
1301
- const y = Tt(), i = Pe(), o = Ee(), S = hn(), _ = pe(), u = St(), { t: m } = ue(), w = f, x = O(!1), r = ye(), t = O(gt(0));
1302
- async function F() {
1303
- x.value = !0;
1304
- try {
1305
- await B(), await i.readStockBalance();
1306
- } catch (e) {
1307
- r.open({
1308
- title: "Something went wrong",
1309
- message: "Cannot fetch stock history. Please try again.",
1310
- type: "error"
1311
- }), console.log("failed at fetching item adjustment history", w.sku, t, e);
1312
- } finally {
1313
- x.value = !1;
1314
- }
1315
- }
1316
- qe(() => {
1317
- F();
1318
- }), be([() => t.value, () => w.sku], () => {
1319
- F();
1320
- });
1321
- const C = O([]), k = O([]), a = O(new Array());
1322
- function V(e, s) {
1323
- return s === "day" ? Ct(e) : Je(e);
1324
- }
1325
- function L(e, s) {
1326
- const v = e.reduce(
1327
- (c, d) => {
1328
- const b = d.effectiveAt ?? et(d._id);
1329
- if (!b)
1330
- return c;
1331
- const I = V(new Date(b), s);
1332
- return c[I] ?? (c[I] = []), c[I].push(d), c;
1333
- },
1334
- {}
1335
- );
1336
- return Object.keys(v).map((c) => ({
1337
- date: c,
1338
- adjustments: v[c]
1339
- }));
1340
- }
1341
- async function B() {
1342
- let e = await o.readStockAdjustment(
1343
- w.sku._id,
1344
- Ft(new Date(t.value.startDate)).toISOString(),
1345
- wt(new Date(t.value.endDate)).toISOString()
1346
- );
1347
- C.value = e;
1348
- const s = e.filter(({ ref: v }) => v == null ? void 0 : v.startsWith("bill_")).map(({ ref: v }) => v);
1349
- await A(s), k.value = L(e, "day").map(({ date: v, adjustments: c }) => ({
1350
- date: v,
1351
- adjustments: c,
1352
- adjustmentsByTime: L(c, "minute")
1353
- }));
1354
- }
1355
- async function A(e) {
1356
- e.length && (a.value = await S.findBillsById(e).catch((s) => {
1357
- var d;
1358
- console.error("Error on using latest bill API, retrying using legacy api", s);
1359
- const v = ((d = y.currentBusiness.value) == null ? void 0 : d._id) ?? "", c = _.currentLocation.doc._id;
1360
- return S.findBillsByBusinessId(v, [c], e);
1361
- }));
1362
- }
1363
- const D = U(() => {
1364
- const e = C.value, s = w.sku;
1365
- return Dn(e, s);
1366
- }), P = U(() => {
1367
- const e = C.value, s = w.sku;
1368
- return jn(e, s);
1369
- }), E = U(() => {
1370
- const e = [...C.value].computeFirst((v) => {
1371
- var d, b;
1372
- const c = (b = (d = v.skus) == null ? void 0 : d.find) == null ? void 0 : b.call(d, (I) => I.sku._id === w.sku._id);
1373
- return c == null ? void 0 : c.fromBalance;
1374
- }) ?? {
1375
- amount: 0,
1376
- precision: 0
1377
- }, s = w.sku;
1378
- return s ? `${Y.toFormatString({
1379
- value: e,
1380
- precision: 4
1381
- })} ${s.unit.abbrev}` : "";
1382
- }), te = U(() => {
1383
- const e = [...C.value].reverse().computeFirst((v) => {
1384
- var d, b;
1385
- const c = (b = (d = v.skus) == null ? void 0 : d.find) == null ? void 0 : b.call(d, (I) => I.sku._id === w.sku._id);
1386
- return c == null ? void 0 : c.toBalance;
1387
- }) ?? {
1388
- amount: 0,
1389
- precision: 0
1390
- }, s = w.sku;
1391
- return s ? `${Y.toFormatString({ value: e, precision: 4 })} ${s.unit.abbrev}` : "";
1392
- }), q = U(() => {
1393
- var v;
1394
- const s = C.value.flatMap((c) => {
1395
- var d;
1396
- return ((d = c.skus) == null ? void 0 : d.flatMap((b) => b.amounts)) ?? [];
1397
- }).filter((c) => c.amount.amount < 0).reduce(
1398
- (c, d) => {
1399
- const b = d.cost;
1400
- if (!b) return c;
1401
- const I = {
1402
- ...bt(c, Math.max(c.precision, b.precision)),
1403
- currency: b.currency
1404
- };
1405
- return {
1406
- ...Xe(I, b),
1407
- currency: c.currency
1408
- };
1409
- },
1410
- {
1411
- amount: 0,
1412
- precision: 0,
1413
- currency: Ae((v = y.currentCountry) == null ? void 0 : v.value)
1414
- }
1415
- );
1416
- return ke(s, !1, s.precision);
1417
- });
1418
- function N() {
1419
- const { startDate: e, endDate: s } = $t(t.value);
1420
- e !== null && s !== null && (t.value = {
1421
- startDate: e,
1422
- endDate: s
1423
- });
1424
- }
1425
- const R = U(() => w.sku.valuation === ze.Enum.FIFO ? m("inventory.ingredient.valuationMethod.FIFO") : m("inventory.ingredient.valuationMethod.WAVG")), G = U(() => {
1426
- var I, Q, oe, T;
1427
- const e = [...C.value].reverse().computeFirst((z) => {
1428
- var W, se;
1429
- return (se = (W = z.skus) == null ? void 0 : W.find) == null ? void 0 : se.call(W, (re) => re.sku._id === w.sku._id);
1430
- });
1431
- if (!e) return "No data";
1432
- const s = [...e.amounts].reverse()[0], v = {
1433
- amount: ((I = s.cost) == null ? void 0 : I.amount) ?? 0,
1434
- precision: ((Q = s.cost) == null ? void 0 : Q.precision) ?? 0
1435
- }, c = s.amount, d = c.amount == 0 ? Y.fromNumber(0) : Y.divide([v, c]);
1436
- return {
1437
- ...Y.multiply([d, c]),
1438
- currency: ((oe = s.cost) == null ? void 0 : oe.currency) || Ae(((T = y.currentCountry) == null ? void 0 : T.value) ?? xt)
1439
- };
1440
- }), ae = U(() => {
1441
- var v;
1442
- const e = [...C.value].reverse().computeFirst((c) => {
1443
- var b, I;
1444
- const d = (I = (b = c.skus) == null ? void 0 : b.find) == null ? void 0 : I.call(b, (Q) => Q.sku._id === w.sku._id);
1445
- return d == null ? void 0 : d.toCostBalances;
1446
- });
1447
- return e ? {
1448
- ...e.reduce((c, d) => Y.add([c, Y.fromDinero(d.cost)]), {
1449
- amount: 0,
1450
- precision: 0
1451
- }),
1452
- currency: Ae((v = y.currentCountry) == null ? void 0 : v.value)
1453
- } : "No data";
1454
- });
1455
- function me() {
1456
- const { startDate: e, endDate: s } = At(t.value);
1457
- e !== null && s !== null && (t.value = {
1458
- startDate: e,
1459
- endDate: s
1460
- });
1461
- }
1462
- const p = He(w, "show");
1463
- return (e, s) => {
1464
- const v = M("FmButton"), c = M("FmField"), d = M("FmDateRangePicker"), b = M("FmSpacer"), I = M("FmCircularProgress"), Q = M("FmIcon"), oe = M("FmTooltip"), T = M("FmMenuDivider"), z = M("FmChip"), W = M("FmCardSection"), se = M("FmCard"), re = M("FmSideSheet");
1465
- return $(), K(re, {
1466
- "dismiss-away": "",
1467
- modelValue: l(p),
1468
- "onUpdate:modelValue": s[4] || (s[4] = (X) => Ie(p) ? p.value = X : null),
1469
- "close-button": !1,
1470
- "max-width": 560
1471
- }, {
1472
- "side-sheet-header": j(() => [
1473
- n("div", In, [
1474
- n("div", Tn, h(l(m)("inventory.stock.history.title", [e.sku.name])), 1),
1475
- g(v, {
1476
- variant: "tertiary",
1477
- "prepend-icon": "close",
1478
- onClick: s[0] || (s[0] = (X) => p.value = !1)
1479
- })
1480
- ])
1481
- ]),
1482
- default: j(() => {
1483
- var X;
1484
- return [
1485
- n("div", Un, [
1486
- n("div", Pn, [
1487
- n("div", En, [
1488
- g(d, {
1489
- modelValue: t.value,
1490
- "onUpdate:modelValue": s[1] || (s[1] = (ne) => t.value = ne),
1491
- "show-predefined-range": "",
1492
- "start-label": "",
1493
- "end-label": "",
1494
- "z-index": 50
1495
- }, {
1496
- "trigger-button": j(({ opened: ne }) => [
1497
- g(c, {
1498
- "prepend-icon": "calendar_month",
1499
- focused: ne
1500
- }, {
1501
- default: j(() => [
1502
- ce(h(t.value.startDate) + " - " + h(t.value.endDate), 1)
1503
- ]),
1504
- _: 2
1505
- }, 1032, ["focused"])
1506
- ]),
1507
- _: 1
1508
- }, 8, ["modelValue"])
1509
- ]),
1510
- g(v, {
1511
- variant: "tertiary",
1512
- onClick: s[2] || (s[2] = (ne) => N()),
1513
- "prepend-icon": "navigate_before"
1514
- }),
1515
- g(v, {
1516
- variant: "tertiary",
1517
- onClick: s[3] || (s[3] = (ne) => me()),
1518
- "prepend-icon": "navigate_next"
1519
- })
1520
- ]),
1521
- x.value ? ($(), H("div", Hn, [
1522
- g(b),
1523
- g(I, { size: "xl" }),
1524
- n("div", Rn, h(l(m)("inventory.stock.history.loading")), 1),
1525
- g(b),
1526
- g(b)
1527
- ])) : k.value && ((X = k.value) == null ? void 0 : X.length) > 0 ? ($(), H("div", On, [
1528
- g(se, { variant: "outlined" }, {
1529
- default: j(() => [
1530
- g(W, { class: "flex flex-col gap-4" }, {
1531
- default: j(() => [
1532
- n("div", Ln, [
1533
- n("div", Nn, h(l(m)("inventory.stock.history.summary.title")), 1)
1534
- ]),
1535
- n("div", zn, [
1536
- n("div", Yn, [
1537
- n("div", Kn, h(l(m)("inventory.stock.history.summary.totalPurchase")), 1),
1538
- n("div", Gn, h(D.value.PURCHASE), 1)
1539
- ]),
1540
- n("div", Wn, [
1541
- n("div", qn, [
1542
- ce(h(l(m)("inventory.stock.history.summary.totalSales")) + "  ", 1),
1543
- P.value != null ? ($(), K(oe, {
1544
- key: 0,
1545
- variant: "plain",
1546
- placement: "top",
1547
- content: `Before: ${P.value}`,
1548
- "z-index": 50
1549
- }, {
1550
- default: j(() => [
1551
- g(Q, {
1552
- name: "warning",
1553
- size: "sm"
1554
- })
1555
- ]),
1556
- _: 1
1557
- }, 8, ["content"])) : J("", !0)
1558
- ]),
1559
- n("div", Qn, h(D.value.SALES), 1)
1560
- ]),
1561
- n("div", Xn, [
1562
- n("div", Jn, h(l(m)("inventory.stock.history.summary.totalLose")), 1),
1563
- n("div", Zn, h(D.value.LOSE), 1)
1564
- ]),
1565
- n("div", eo, [
1566
- n("div", to, h(l(m)("inventory.stock.history.summary.totalRequest")), 1),
1567
- n("div", no, h(D.value.REQUEST), 1)
1568
- ]),
1569
- n("div", oo, [
1570
- n("div", so, h(l(m)("inventory.stock.history.summary.totalReceive")), 1),
1571
- n("div", ao, h(D.value.RECEIVE), 1)
1572
- ]),
1573
- n("div", ro, [
1574
- n("div", lo, h(l(m)("inventory.stock.history.summary.totalConvert")), 1),
1575
- n("div", io, h(D.value.CONVERT), 1)
1576
- ]),
1577
- n("div", uo, [
1578
- n("div", co, h(l(m)("inventory.stock.history.summary.totalDamage")), 1),
1579
- n("div", mo, h(D.value.DAMAGE), 1)
1580
- ]),
1581
- n("div", po, [
1582
- n("div", vo, h(l(m)("inventory.stock.history.summary.openingBalance")), 1),
1583
- n("div", fo, h(E.value), 1)
1584
- ]),
1585
- n("div", yo, [
1586
- n("div", _o, h(l(m)("inventory.stock.history.summary.lastStockBalance")), 1),
1587
- n("div", ko, h(te.value), 1)
1588
- ])
1589
- ]),
1590
- l(u).enableTotalCost ? ($(), H("div", ho, [
1591
- g(T, { class: "w-full" }),
1592
- n("div", go, [
1593
- n("div", bo, [
1594
- g(Ke, { "z-index": 50 }, {
1595
- default: j(() => [
1596
- n("div", xo, [
1597
- ce(h(l(m)("inventory.stock.history.estimatedValue")) + " ", 1),
1598
- g(oe, {
1599
- variant: "plain",
1600
- placement: "top",
1601
- content: `[${R.value}] ${l(m)("inventory.stock.history.estimatedValueTooltip")}`,
1602
- "z-index": 50
1603
- }, {
1604
- default: j(() => [
1605
- g(Q, {
1606
- name: "help",
1607
- size: "sm"
1608
- })
1609
- ]),
1610
- _: 1
1611
- }, 8, ["content"])
1612
- ])
1613
- ]),
1614
- _: 1
1615
- }),
1616
- n("div", So, [
1617
- e.sku.valuation === l(ze).Enum.FIFO ? ($(), H(ee, { key: 0 }, [
1618
- g(z, {
1619
- label: "FIFO",
1620
- compact: ""
1621
- }),
1622
- ce(" " + h(typeof ae.value != "string" ? l(ke)(
1623
- ae.value,
1624
- !1,
1625
- ae.value.precision
1626
- ) : ae.value), 1)
1627
- ], 64)) : ($(), H(ee, { key: 1 }, [
1628
- ce(h(typeof G.value != "string" ? l(ke)(
1629
- G.value,
1630
- !1,
1631
- G.value.precision
1632
- ) : G.value), 1)
1633
- ], 64))
1634
- ])
1635
- ]),
1636
- n("div", Fo, [
1637
- g(Ke, { "z-index": 50 }, {
1638
- default: j(() => [
1639
- n("div", wo, [
1640
- ce(h(l(m)("inventory.stock.history.costSold")) + " ", 1),
1641
- g(oe, {
1642
- variant: "plain",
1643
- placement: "top",
1644
- "z-index": 50
1645
- }, {
1646
- content: j(() => [
1647
- n("div", $o, h(l(m)("inventory.stock.history.costSoldTooltip")), 1)
1648
- ]),
1649
- default: j(() => [
1650
- g(Q, {
1651
- name: "help",
1652
- size: "sm"
1653
- })
1654
- ]),
1655
- _: 1
1656
- })
1657
- ])
1658
- ]),
1659
- _: 1
1660
- }),
1661
- n("div", Ao, h(q.value), 1)
1662
- ])
1663
- ])
1664
- ])) : J("", !0)
1665
- ]),
1666
- _: 1
1667
- })
1668
- ]),
1669
- _: 1
1670
- }),
1671
- s[5] || (s[5] = n("div", null, null, -1)),
1672
- ($(!0), H(ee, null, le(k.value, (ne) => ($(), H(ee, {
1673
- key: ne.date
1674
- }, [
1675
- e.sku ? ($(), K(Mn, {
1676
- key: 0,
1677
- record: ne,
1678
- sku: e.sku,
1679
- bills: a.value
1680
- }, null, 8, ["record", "sku", "bills"])) : J("", !0)
1681
- ], 64))), 128))
1682
- ])) : ($(), H("div", Co, [
1683
- g(b),
1684
- n("div", null, [
1685
- n("img", {
1686
- src: l(Rt),
1687
- alt: "List is empty"
1688
- }, null, 8, Vo)
1689
- ]),
1690
- n("div", Bo, h(l(m)("inventory.stock.history.noRecords")), 1),
1691
- n("div", Mo, h(l(m)("inventory.stock.history.changeDateRange")), 1),
1692
- g(b),
1693
- g(b)
1694
- ]))
1695
- ])
1696
- ];
1697
- }),
1698
- _: 1
1699
- }, 8, ["modelValue"]);
1700
- };
1701
- }
1702
- }), jo = { class: "flex flex-col gap-8" }, Io = { class: "flex flex-col" }, To = { class: "fm-typo-en-body-md-400 text-fm-color-typo-secondary" }, Uo = { class: "fm-typo-en-body-lg-600 text-fm-color-typo-primary line-clamp-1" }, Xo = /* @__PURE__ */ ie({
1703
- __name: "StockView",
1704
- setup(f) {
1705
- const { t: y } = ue(), i = Ue(), o = pe(), S = Pe(), _ = st(), u = Ze(), { columnDefs: m } = Gt();
1706
- o.watchLocation(r);
1707
- const w = O(!1), x = ye();
1708
- async function r() {
1709
- if (o._currentLocation) {
1710
- w.value = !0;
1711
- try {
1712
- await S.readStockBalance(), await S.readProductBalance(), await u.readStockEstimateBalance();
1713
- } catch (A) {
1714
- x.open({
1715
- title: y("inventory.stock.error.title"),
1716
- message: y("inventory.stock.error.message"),
1717
- type: "error"
1718
- }), console.error("error on fetch stock balance", A);
1719
- } finally {
1720
- w.value = !1;
1721
- }
1722
- }
1723
- }
1724
- const t = U(
1725
- () => i.skus.map((A) => {
1726
- var q, N, R;
1727
- const D = A.trackingMeasurement;
1728
- let P = (N = (q = S.stockBalance.skus) == null ? void 0 : q.find(
1729
- (G) => G.id === A._id
1730
- )) == null ? void 0 : N.balance, E = u.inventoryForecast.skus.find(
1731
- (G) => G.id === A._id
1732
- );
1733
- return {
1734
- ...A,
1735
- balance: P ?? {
1736
- amount: 0,
1737
- precision: 0
1738
- },
1739
- day: (E == null ? void 0 : E.depletionDays) ?? void 0,
1740
- trackingUnitAbbrev: D ? ((R = A.unit.measurements.find((G) => G.id === D)) == null ? void 0 : R.abbrev) ?? "" : A.unit.abbrev
1741
- };
1742
- })
1743
- ), F = O(""), { breakpoints: C } = Ut(), k = U(() => C.value.xs || C.value.sm), a = U(() => k.value ? 10 : 20), V = Vt(), L = U(() => [
1744
- {
1745
- label: y("inventory.common.refresh"),
1746
- value: "refresh"
1747
- },
1748
- {
1749
- label: y("inventory.common.export"),
1750
- value: "export"
1751
- }
1752
- ]);
1753
- function B(A) {
1754
- switch (A) {
1755
- case "refresh":
1756
- return r();
1757
- case "export":
1758
- return Nt(t.value);
1759
- }
1760
- }
1761
- return (A, D) => {
1762
- const P = M("FmTable");
1763
- return $(), K(Bt, {
1764
- title: l(y)("inventory.stock.title"),
1765
- actions: L.value,
1766
- "onClick:action": B
1767
- }, {
1768
- default: j(() => {
1769
- var E, te, q, N;
1770
- return [
1771
- n("div", {
1772
- class: ge([
1773
- "flex flex-col gap-8 max-h-full",
1774
- {
1775
- "p-0": k.value,
1776
- "px-24 ": !k.value
1777
- }
1778
- ])
1779
- }, [
1780
- g(Mt, {
1781
- searchable: "",
1782
- "change-location": "",
1783
- search: F.value,
1784
- "onUpdate:search": D[0] || (D[0] = (R) => F.value = R)
1785
- }, null, 8, ["search"]),
1786
- ($(), K(P, {
1787
- style: Qe(l(V).tableHeight),
1788
- "column-defs": l(m),
1789
- "row-data": t.value,
1790
- "search-value": F.value,
1791
- loading: w.value || !l(o)._currentLocation,
1792
- key: (E = l(o)._currentLocation) == null ? void 0 : E.dbName,
1793
- onRowClick: D[1] || (D[1] = (R) => l(_).showSkuHistory(R.original)),
1794
- "page-size": a.value
1795
- }, {
1796
- "list-row": j((R) => [
1797
- g(Dt, {
1798
- row: R,
1799
- onRowClick: l(_).showSkuHistory
1800
- }, {
1801
- default: j((G) => {
1802
- var ae, me, p, e, s, v, c, d, b, I;
1803
- return [
1804
- n("div", jo, [
1805
- n("div", Io, [
1806
- n("div", To, [
1807
- g(l(Ye), {
1808
- render: (p = (me = (ae = G.code) == null ? void 0 : ae.column) == null ? void 0 : me.columnDef) == null ? void 0 : p.cell,
1809
- props: (s = (e = G.code) == null ? void 0 : e.getContext) == null ? void 0 : s.call(e)
1810
- }, null, 8, ["render", "props"])
1811
- ]),
1812
- n("div", Uo, [
1813
- g(l(Ye), {
1814
- render: (d = (c = (v = G.name) == null ? void 0 : v.column) == null ? void 0 : c.columnDef) == null ? void 0 : d.cell,
1815
- props: (I = (b = G.name) == null ? void 0 : b.getContext) == null ? void 0 : I.call(b)
1816
- }, null, 8, ["render", "props"])
1817
- ])
1818
- ]),
1819
- n("div", null, [
1820
- g(je, {
1821
- days: R.original.day
1822
- }, null, 8, ["days"])
1823
- ]),
1824
- n("div", null, [
1825
- g(ot, {
1826
- class: "xs:w-[160px]",
1827
- unit: R.original.unit,
1828
- sku: R.original,
1829
- amount: R.original.balance,
1830
- "default-tracking-measurement": R.original.trackingMeasurement ?? void 0
1831
- }, null, 8, ["unit", "sku", "amount", "default-tracking-measurement"])
1832
- ])
1833
- ])
1834
- ];
1835
- }),
1836
- _: 2
1837
- }, 1032, ["row", "onRowClick"])
1838
- ]),
1839
- _: 1
1840
- }, 8, ["style", "column-defs", "row-data", "search-value", "loading", "page-size"]))
1841
- ], 2),
1842
- ($(), K(rt, { to: "body" }, [
1843
- (te = l(_).stockHistoryProps) != null && te.sku ? ($(), K(Do, we($e({ key: 0 }, l(_).stockHistoryProps)), null, 16)) : J("", !0),
1844
- (q = l(_).convertSkuDialogProps) != null && q.sku ? ($(), K(un, we($e({ key: 1 }, l(_).convertSkuDialogProps)), null, 16)) : J("", !0),
1845
- (N = l(_).adjustSkuDialogProps) != null && N.stock ? ($(), K(kn, we($e({ key: 2 }, l(_).adjustSkuDialogProps)), null, 16)) : J("", !0)
1846
- ]))
1847
- ];
1848
- }),
1849
- _: 1
1850
- }, 8, ["title", "actions"]);
1851
- };
1852
- }
1853
- });
1854
- export {
1855
- Xo as default
1856
- };