@flowselections/floriday-verkoop-module 1.0.47 → 1.0.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-lib/components/verkoop/OrderKarindelingCard.d.ts.map +1 -1
- package/dist-lib/components/verkoop/OrderKarindelingCard.js +5 -1
- package/dist-lib/components/verkoop/SalesOrderDetailView.d.ts.map +1 -1
- package/dist-lib/components/verkoop/SalesOrderDetailView.js +10 -17
- package/dist-lib/components/verkoop/SalesOrdersTable.d.ts.map +1 -1
- package/dist-lib/components/verkoop/SalesOrdersTable.js +5 -1
- package/dist-lib/integrations/supabase/auth-middleware.d.ts +8 -0
- package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.d.ts +8 -0
- package/dist-lib/integrations/supabase/client.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.server.d.ts +8 -0
- package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/types.d.ts +8 -0
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/cart-lock.functions.d.ts +8 -0
- package/dist-lib/lib/cart-lock.functions.d.ts.map +1 -1
- package/dist-lib/lib/cart-planning-settings.functions.d.ts +88 -0
- package/dist-lib/lib/cart-planning-settings.functions.d.ts.map +1 -1
- package/dist-lib/lib/cart-replan.functions.d.ts +24 -0
- package/dist-lib/lib/cart-replan.functions.d.ts.map +1 -1
- package/dist-lib/lib/create-order.functions.d.ts +136 -0
- package/dist-lib/lib/create-order.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-auto-fulfillment.functions.d.ts +24 -0
- package/dist-lib/lib/floriday-auto-fulfillment.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-logistic-labels.functions.d.ts +8 -0
- package/dist-lib/lib/floriday-logistic-labels.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-mirror.functions.d.ts +8 -0
- package/dist-lib/lib/floriday-mirror.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-mirror.functions.js +11 -0
- package/dist-lib/lib/floriday-public.functions.d.ts +56 -0
- package/dist-lib/lib/floriday-public.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-writes.functions.d.ts +40 -0
- package/dist-lib/lib/floriday-writes.functions.d.ts.map +1 -1
- package/dist-lib/lib/invoice-timing.functions.d.ts +32 -0
- package/dist-lib/lib/invoice-timing.functions.d.ts.map +1 -1
- package/dist-lib/lib/load-carrier-labels.d.ts +13 -0
- package/dist-lib/lib/load-carrier-labels.d.ts.map +1 -1
- package/dist-lib/lib/load-carrier-labels.js +20 -0
- package/dist-lib/lib/load-carriers.functions.d.ts +8 -0
- package/dist-lib/lib/load-carriers.functions.d.ts.map +1 -1
- package/dist-lib/lib/logistics-engine.functions.d.ts +40 -0
- package/dist-lib/lib/logistics-engine.functions.d.ts.map +1 -1
- package/dist-lib/lib/logistics-stock.functions.d.ts +16 -0
- package/dist-lib/lib/logistics-stock.functions.d.ts.map +1 -1
- package/dist-lib/lib/order-addresses.functions.d.ts +8 -0
- package/dist-lib/lib/order-addresses.functions.d.ts.map +1 -1
- package/dist-lib/lib/order-buffers.functions.d.ts +24 -0
- package/dist-lib/lib/order-buffers.functions.d.ts.map +1 -1
- package/dist-lib/lib/order-carrier.functions.d.ts +16 -0
- package/dist-lib/lib/order-carrier.functions.d.ts.map +1 -1
- package/dist-lib/lib/order-pickup.functions.d.ts +16 -0
- package/dist-lib/lib/order-pickup.functions.d.ts.map +1 -1
- package/dist-lib/lib/order-shipments.functions.d.ts +32 -0
- package/dist-lib/lib/order-shipments.functions.d.ts.map +1 -1
- package/dist-lib/lib/order-status.d.ts +7 -10
- package/dist-lib/lib/order-status.d.ts.map +1 -1
- package/dist-lib/lib/order-status.js +6 -3
- package/dist-lib/lib/salesorders-list.functions.d.ts +8 -0
- package/dist-lib/lib/salesorders-list.functions.d.ts.map +1 -1
- package/dist-lib/lib/salesorders-list.server.d.ts.map +1 -1
- package/dist-lib/lib/salesorders-list.server.js +24 -23
- package/dist-lib/lib/salesorders-mapping.d.ts +24 -0
- package/dist-lib/lib/salesorders-mapping.d.ts.map +1 -1
- package/dist-lib/lib/salesorders-mapping.js +64 -13
- package/dist-lib/lib/salesorders.functions.d.ts +40 -0
- package/dist-lib/lib/salesorders.functions.d.ts.map +1 -1
- package/dist-lib/lib/salesorders.functions.js +43 -9
- package/dist-lib/lib/stock-consumption-alerts.functions.d.ts +16 -0
- package/dist-lib/lib/stock-consumption-alerts.functions.d.ts.map +1 -1
- package/dist-lib/lib/tradeitems.functions.d.ts +8 -0
- package/dist-lib/lib/tradeitems.functions.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { centralOrderNumber, computeTotals, mapJsonbToSalesOrderDTO, } from "./salesorders-mapping";
|
|
1
|
+
import { centralOrderNumber, computeTotals, mapJsonbToSalesOrderDTO, packingConfigFromFloridayPacking, } from "./salesorders-mapping";
|
|
2
2
|
import { cratePackageName, loadCarrierName, mergeTypeNames } from "./load-carrier-labels";
|
|
3
3
|
import { normalizeLoadCarrierCode } from "./load-carriers";
|
|
4
4
|
import { normalizeTime, resolveDeliveryTimeForDate } from "./carrier-availability";
|
|
5
5
|
import { expandOrderItemsForPlanner } from "./expand-group-order-items";
|
|
6
6
|
import { planCarts } from "./cart-planner";
|
|
7
7
|
import { mergeStages, resolveOrderStage } from "./order-status";
|
|
8
|
-
import { expectedPackagesFromSalesOrder, isFullyFulfilled, loadFloridayFulfillmentStates, } from "./floriday-fulfillment-status.server";
|
|
9
8
|
const FO_CAP = 20000;
|
|
10
9
|
const LOCAL_CAP = 5000;
|
|
11
10
|
const PROPOSAL_CAP = 2000;
|
|
@@ -381,10 +380,13 @@ export async function buildSalesOrdersList(supabase, params) {
|
|
|
381
380
|
raw: d,
|
|
382
381
|
});
|
|
383
382
|
}
|
|
384
|
-
// 8) Buffers.
|
|
383
|
+
// 8) Buffers + lokale orderrij per Floriday-order.
|
|
385
384
|
const bufferByFoId = new Map();
|
|
386
385
|
const bufferByLocalId = new Map();
|
|
386
|
+
const localRowByFoId = new Map();
|
|
387
387
|
for (const r of localOrderRows) {
|
|
388
|
+
if (r.floriday_sales_order_id)
|
|
389
|
+
localRowByFoId.set(String(r.floriday_sales_order_id), r);
|
|
388
390
|
const bid = r.buffer_id;
|
|
389
391
|
if (!bid)
|
|
390
392
|
continue;
|
|
@@ -393,20 +395,18 @@ export async function buildSalesOrdersList(supabase, params) {
|
|
|
393
395
|
else
|
|
394
396
|
bufferByLocalId.set(String(r.id), bid);
|
|
395
397
|
}
|
|
396
|
-
// 8b) Afhandeling die in Floriday zelf is gedaan (afleverbrieven).
|
|
397
|
-
let fulfillmentStates = new Map();
|
|
398
|
-
if (foRows.length > 0) {
|
|
399
|
-
try {
|
|
400
|
-
fulfillmentStates = await loadFloridayFulfillmentStates(supabase, foRows.map((r) => String(r.floriday_id)));
|
|
401
|
-
}
|
|
402
|
-
catch (e) {
|
|
403
|
-
warnings.push(`Floriday-afhandelingen niet geladen: ${e.message}`);
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
398
|
// 9) Floriday-orders → DTO (zonder zware raw-payload richting browser).
|
|
407
399
|
const floridayOrders = foRows.map((r) => {
|
|
400
|
+
const localRowForPacking = localRowByFoId.get(String(r.floriday_id)) ?? null;
|
|
401
|
+
// De order is leidend voor de belading. Heeft de cache-payload geen
|
|
402
|
+
// packingConfiguration, dan geldt de gespiegelde orderbelading uit
|
|
403
|
+
// custom_fields.floriday_packing; pas daarna het trade item (mapping).
|
|
404
|
+
const mirroredPacking = r.data?.packingConfiguration
|
|
405
|
+
? null
|
|
406
|
+
: packingConfigFromFloridayPacking((localRowForPacking?.custom_fields ?? {})?.floriday_packing);
|
|
408
407
|
const enriched = {
|
|
409
408
|
...r.data,
|
|
409
|
+
...(mirroredPacking ? { packingConfiguration: mirroredPacking } : {}),
|
|
410
410
|
...(orderNumberByFoId.get(String(r.floriday_id))
|
|
411
411
|
? { orderNumber: orderNumberByFoId.get(String(r.floriday_id)) }
|
|
412
412
|
: {}),
|
|
@@ -417,18 +417,17 @@ export async function buildSalesOrdersList(supabase, params) {
|
|
|
417
417
|
const bid = bufferByFoId.get(dto.id) ?? null;
|
|
418
418
|
if (bid)
|
|
419
419
|
dto.bufferId = bid;
|
|
420
|
-
|
|
420
|
+
// orders.status is de bron van waarheid; de Floriday-cachestatus is enkel
|
|
421
|
+
// een fallback zolang de order nog niet lokaal gespiegeld is.
|
|
422
|
+
const localRow = localRowByFoId.get(String(r.floriday_id)) ?? null;
|
|
423
|
+
const shipState = localRow ? shipmentStateByOrder.get(String(localRow.id)) : undefined;
|
|
421
424
|
dto.stage = resolveOrderStage({
|
|
422
|
-
status: r.data?.status,
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
fulfilled: ff.fulfilled,
|
|
427
|
-
fullyFulfilled: isFullyFulfilled(ff, expectedPackagesFromSalesOrder(r.data)),
|
|
428
|
-
received: ff.received,
|
|
429
|
-
}
|
|
430
|
-
: null,
|
|
425
|
+
status: localRow ? localRow.status : r.data?.status,
|
|
426
|
+
shipped: shipState?.shipped,
|
|
427
|
+
controlledAt: r.controlled_at ?? (shipState?.picked ? "picked" : null),
|
|
428
|
+
isReservation: localRow ? !!localRow.is_reservation : false,
|
|
431
429
|
});
|
|
430
|
+
dto.floridayFulfilled = Boolean((localRow?.custom_fields ?? {})?.floriday_fulfilled);
|
|
432
431
|
dto.incomplete = [
|
|
433
432
|
...(dto.customer.name && dto.customer.name !== "Onbekende klant" ? [] : ["geen klant gekoppeld"]),
|
|
434
433
|
...(dto.deliveryAt ? [] : ["geen leverdatum"]),
|
|
@@ -605,6 +604,8 @@ export async function buildSalesOrdersList(supabase, params) {
|
|
|
605
604
|
bufferOrderNumbers: members.map((m) => m.orderNumber).filter(Boolean),
|
|
606
605
|
bufferOrderIds: members.map((m) => m.id),
|
|
607
606
|
reservationCount: members.filter((m) => m.isReservation).length,
|
|
607
|
+
floridayFulfilled: members.some((m) => m.floridayFulfilled),
|
|
608
|
+
floridayFulfilledCount: members.filter((m) => m.floridayFulfilled).length,
|
|
608
609
|
stage: mergeStages(members.map((m) => m.stage ?? "incoming")),
|
|
609
610
|
crateTypeName: mergeTypeNames(members.map((m) => m.crateTypeName ?? "")),
|
|
610
611
|
cartTypeName: mergeTypeNames(members.map((m) => m.cartTypeName ?? "")),
|
|
@@ -21,6 +21,8 @@ export interface SalesOrderDTO {
|
|
|
21
21
|
cartTypeName?: string | null;
|
|
22
22
|
/** Canonieke Engine-code van de ladingdrager (bijv. "trolley"). */
|
|
23
23
|
loadCarrierType?: string | null;
|
|
24
|
+
/** Waar de getoonde belading vandaan komt (order | orderregel | product | trade-item). */
|
|
25
|
+
packingSource?: PackingSource;
|
|
24
26
|
totalPieces: number;
|
|
25
27
|
isLocal?: boolean;
|
|
26
28
|
isReservation?: boolean;
|
|
@@ -35,6 +37,13 @@ export interface SalesOrderDTO {
|
|
|
35
37
|
reservationCount?: number;
|
|
36
38
|
/** Vertaalde weergavestatus (zie order-status.ts). */
|
|
37
39
|
stage?: OrderStage;
|
|
40
|
+
/**
|
|
41
|
+
* Informatief: de afhandeling is doorgegeven aan Floriday (afleverbrief).
|
|
42
|
+
* Nooit sturend voor status, tabs, filters, facturatie of voorraadverbruik.
|
|
43
|
+
*/
|
|
44
|
+
floridayFulfilled?: boolean;
|
|
45
|
+
/** Aantal orders binnen een buffer dat is doorgegeven aan Floriday. */
|
|
46
|
+
floridayFulfilledCount?: number;
|
|
38
47
|
/** Vervoerder van de order (indien bekend). */
|
|
39
48
|
carrierName?: string | null;
|
|
40
49
|
/** Concrete ontbrekende gegevens, bv. "geen klant gekoppeld". */
|
|
@@ -74,6 +83,21 @@ export interface TradeItemLookupEntry {
|
|
|
74
83
|
raw?: any;
|
|
75
84
|
}
|
|
76
85
|
export type TradeItemLookup = Map<string, TradeItemLookupEntry>;
|
|
86
|
+
/**
|
|
87
|
+
* Waar de belading van een rij vandaan komt. Expliciet, zodat in de code en
|
|
88
|
+
* in de DTO altijd zichtbaar is welke bron een getal heeft geleverd.
|
|
89
|
+
* - "order" : packingConfiguration van de sales order zelf (leidend)
|
|
90
|
+
* - "orderregel" : belading vastgelegd op de orderregel (lokale orders)
|
|
91
|
+
* - "product" : belading van het gekoppelde product (lokale orders)
|
|
92
|
+
* - "trade-item" : terugval op de standaardbelading van het artikel
|
|
93
|
+
*/
|
|
94
|
+
export type PackingSource = "order" | "orderregel" | "product" | "trade-item";
|
|
95
|
+
/**
|
|
96
|
+
* Zet `orders.custom_fields.floriday_packing` (de gespiegelde belading van de
|
|
97
|
+
* ORDER) om naar een Floriday-vormige packingConfiguration. Alleen gebruiken
|
|
98
|
+
* als terugval wanneer de cache-payload er zelf geen heeft.
|
|
99
|
+
*/
|
|
100
|
+
export declare function packingConfigFromFloridayPacking(fp: any): any | null;
|
|
77
101
|
export declare function isCentralOrderNumber(value: unknown): value is string;
|
|
78
102
|
export declare function centralOrderNumber(value: unknown): string;
|
|
79
103
|
/** Rijtype + kale UUID uit een lijst-ID (`local:…`, `mailbox-proposal:…`, Floriday). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"salesorders-mapping.d.ts","sourceRoot":"","sources":["../../src/lib/salesorders-mapping.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"salesorders-mapping.d.ts","sourceRoot":"","sources":["../../src/lib/salesorders-mapping.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,19 +16,69 @@ function pickPrimaryPacking(raw) {
|
|
|
16
16
|
return null;
|
|
17
17
|
return configs.find((c) => c?.primary === true || String(c?.primary).toLowerCase() === "true") ?? configs[0] ?? null;
|
|
18
18
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
/** Heeft de order zelf een bruikbare beladingconfiguratie? */
|
|
20
|
+
function hasOrderPacking(pc) {
|
|
21
|
+
if (!pc || typeof pc !== "object")
|
|
22
|
+
return false;
|
|
23
|
+
return (toNum(pc.piecesPerPackage, 0) > 0 ||
|
|
24
|
+
toNum(pc.packagesPerLayer, 0) > 0 ||
|
|
25
|
+
toNum(pc.layersPerLoadCarrier, 0) > 0 ||
|
|
26
|
+
pc.package != null ||
|
|
27
|
+
pc.loadCarrier != null);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Bepaalt de leidende beladingbron: de ORDER wint altijd. Het trade item is
|
|
31
|
+
* uitsluitend terugval wanneer de order geen packingConfiguration heeft.
|
|
32
|
+
* Het trade item blijft wél de bron voor naam/foto/sku (zie mapping onder).
|
|
33
|
+
*/
|
|
34
|
+
function resolvePacking(order, tradeItemRaw) {
|
|
35
|
+
const orderPacking = order?.packingConfiguration;
|
|
36
|
+
if (hasOrderPacking(orderPacking)) {
|
|
37
|
+
return { order, source: "order" };
|
|
38
|
+
}
|
|
39
|
+
const fallback = pickPrimaryPacking(tradeItemRaw);
|
|
40
|
+
if (!fallback)
|
|
41
|
+
return { order, source: "trade-item" };
|
|
22
42
|
return {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
43
|
+
order: {
|
|
44
|
+
...order,
|
|
45
|
+
packingConfiguration: {
|
|
46
|
+
...(orderPacking ?? {}),
|
|
47
|
+
piecesPerPackage: toNum(fallback?.piecesPerPackage, 1),
|
|
48
|
+
packagesPerLayer: toNum(fallback?.packagesPerLayer, 0),
|
|
49
|
+
layersPerLoadCarrier: toNum(fallback?.layersPerLoadCarrier, 0),
|
|
50
|
+
package: fallback?.package ?? orderPacking?.package ?? null,
|
|
51
|
+
loadCarrier: fallback?.loadCarrier ?? orderPacking?.loadCarrier ?? null,
|
|
52
|
+
},
|
|
31
53
|
},
|
|
54
|
+
source: "trade-item",
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Zet `orders.custom_fields.floriday_packing` (de gespiegelde belading van de
|
|
59
|
+
* ORDER) om naar een Floriday-vormige packingConfiguration. Alleen gebruiken
|
|
60
|
+
* als terugval wanneer de cache-payload er zelf geen heeft.
|
|
61
|
+
*/
|
|
62
|
+
export function packingConfigFromFloridayPacking(fp) {
|
|
63
|
+
if (!fp || typeof fp !== "object")
|
|
64
|
+
return null;
|
|
65
|
+
if (String(fp.source ?? "order") !== "order")
|
|
66
|
+
return null;
|
|
67
|
+
const pieces = toNum(fp.pieces_per_package, 0);
|
|
68
|
+
const perLayer = toNum(fp.packages_per_layer, 0);
|
|
69
|
+
const layers = toNum(fp.layers_per_load_carrier, 0);
|
|
70
|
+
const vbn = fp.vbn_package_code ?? null;
|
|
71
|
+
const custom = fp.custom_package_id ?? null;
|
|
72
|
+
const carrier = fp.load_carrier ?? null;
|
|
73
|
+
if (pieces <= 0 && perLayer <= 0 && layers <= 0 && vbn == null && custom == null && carrier == null) {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
piecesPerPackage: pieces || 1,
|
|
78
|
+
packagesPerLayer: perLayer,
|
|
79
|
+
layersPerLoadCarrier: layers,
|
|
80
|
+
package: vbn != null || custom != null ? { vbnPackageCode: vbn, customPackageId: custom } : null,
|
|
81
|
+
loadCarrier: carrier,
|
|
32
82
|
};
|
|
33
83
|
}
|
|
34
84
|
const CENTRAL_ORDER_NUMBER_RE = /^(FO|MO|AO|HO)-\d{7}$/;
|
|
@@ -60,8 +110,8 @@ export function mapJsonbToSalesOrderDTO(o, customerLookup, tradeItemLookup, crat
|
|
|
60
110
|
// (geen salesOrderLines-array). Velden staan direct op het object.
|
|
61
111
|
const tradeItemId = String(o?.tradeItemId ?? "");
|
|
62
112
|
const tradeItem = tradeItemId ? tradeItemLookup?.get(tradeItemId) : undefined;
|
|
63
|
-
|
|
64
|
-
const orderWithLivePacking =
|
|
113
|
+
// De ORDER is leidend voor de belading; het trade item is enkel terugval.
|
|
114
|
+
const { order: orderWithLivePacking, source: packingSource } = resolvePacking(o, tradeItem?.raw);
|
|
65
115
|
const numberOfPieces = toNum(orderWithLivePacking?.numberOfPieces, 0);
|
|
66
116
|
const piecesPerPackage = Math.max(1, toNum(orderWithLivePacking?.packingConfiguration?.piecesPerPackage, 1));
|
|
67
117
|
const numberOfPackages = piecesPerPackage > 0 ? Math.ceil(numberOfPieces / piecesPerPackage) : 0;
|
|
@@ -101,6 +151,7 @@ export function mapJsonbToSalesOrderDTO(o, customerLookup, tradeItemLookup, crat
|
|
|
101
151
|
karCount,
|
|
102
152
|
crateTypeName,
|
|
103
153
|
cartTypeName,
|
|
154
|
+
packingSource,
|
|
104
155
|
totalPieces: numberOfPieces,
|
|
105
156
|
customer: {
|
|
106
157
|
name: found?.name ?? "Onbekende klant",
|
|
@@ -21444,6 +21444,14 @@ export declare const runSalesOrdersSync: import("@tanstack/start-client-core").O
|
|
|
21444
21444
|
};
|
|
21445
21445
|
Returns: import("../integrations/supabase/types").Json;
|
|
21446
21446
|
};
|
|
21447
|
+
logistics_plan_block: {
|
|
21448
|
+
Args: {
|
|
21449
|
+
p_details?: import("../integrations/supabase/types").Json;
|
|
21450
|
+
p_order_ids: string[];
|
|
21451
|
+
p_reason: string;
|
|
21452
|
+
};
|
|
21453
|
+
Returns: number;
|
|
21454
|
+
};
|
|
21447
21455
|
logistics_plan_buffer_sql: {
|
|
21448
21456
|
Args: {
|
|
21449
21457
|
p_buffer_id: string;
|
|
@@ -44361,6 +44369,14 @@ export declare const createSalesOrder: import("@tanstack/start-client-core").Opt
|
|
|
44361
44369
|
};
|
|
44362
44370
|
Returns: import("../integrations/supabase/types").Json;
|
|
44363
44371
|
};
|
|
44372
|
+
logistics_plan_block: {
|
|
44373
|
+
Args: {
|
|
44374
|
+
p_details?: import("../integrations/supabase/types").Json;
|
|
44375
|
+
p_order_ids: string[];
|
|
44376
|
+
p_reason: string;
|
|
44377
|
+
};
|
|
44378
|
+
Returns: number;
|
|
44379
|
+
};
|
|
44364
44380
|
logistics_plan_buffer_sql: {
|
|
44365
44381
|
Args: {
|
|
44366
44382
|
p_buffer_id: string;
|
|
@@ -67288,6 +67304,14 @@ export declare const diagnoseFloridayConnection: import("@tanstack/start-client-
|
|
|
67288
67304
|
};
|
|
67289
67305
|
Returns: import("../integrations/supabase/types").Json;
|
|
67290
67306
|
};
|
|
67307
|
+
logistics_plan_block: {
|
|
67308
|
+
Args: {
|
|
67309
|
+
p_details?: import("../integrations/supabase/types").Json;
|
|
67310
|
+
p_order_ids: string[];
|
|
67311
|
+
p_reason: string;
|
|
67312
|
+
};
|
|
67313
|
+
Returns: number;
|
|
67314
|
+
};
|
|
67291
67315
|
logistics_plan_buffer_sql: {
|
|
67292
67316
|
Args: {
|
|
67293
67317
|
p_buffer_id: string;
|
|
@@ -90233,6 +90257,14 @@ export declare const getSalesOrderDetail: import("@tanstack/start-client-core").
|
|
|
90233
90257
|
};
|
|
90234
90258
|
Returns: import("../integrations/supabase/types").Json;
|
|
90235
90259
|
};
|
|
90260
|
+
logistics_plan_block: {
|
|
90261
|
+
Args: {
|
|
90262
|
+
p_details?: import("../integrations/supabase/types").Json;
|
|
90263
|
+
p_order_ids: string[];
|
|
90264
|
+
p_reason: string;
|
|
90265
|
+
};
|
|
90266
|
+
Returns: number;
|
|
90267
|
+
};
|
|
90236
90268
|
logistics_plan_buffer_sql: {
|
|
90237
90269
|
Args: {
|
|
90238
90270
|
p_buffer_id: string;
|
|
@@ -113149,6 +113181,14 @@ export declare const setSalesOrderControlled: import("@tanstack/start-client-cor
|
|
|
113149
113181
|
};
|
|
113150
113182
|
Returns: import("../integrations/supabase/types").Json;
|
|
113151
113183
|
};
|
|
113184
|
+
logistics_plan_block: {
|
|
113185
|
+
Args: {
|
|
113186
|
+
p_details?: import("../integrations/supabase/types").Json;
|
|
113187
|
+
p_order_ids: string[];
|
|
113188
|
+
p_reason: string;
|
|
113189
|
+
};
|
|
113190
|
+
Returns: number;
|
|
113191
|
+
};
|
|
113152
113192
|
logistics_plan_buffer_sql: {
|
|
113153
113193
|
Args: {
|
|
113154
113194
|
p_buffer_id: string;
|