@flowselections/floriday-verkoop-module 1.0.87 → 1.0.90
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/CreateOrderPage.js +1 -1
- package/dist-lib/components/verkoop/DiagnoseConnectionDialog.js +1 -1
- package/dist-lib/components/verkoop/EditLocalOrderDialog.js +3 -3
- package/dist-lib/components/verkoop/OrderControlStatusCard.js +1 -1
- package/dist-lib/components/verkoop/OrderKarindelingCard.js +2 -2
- package/dist-lib/components/verkoop/OrderLinePackingCard.js +1 -1
- package/dist-lib/components/verkoop/OrderShipmentsCard.js +1 -1
- package/dist-lib/components/verkoop/ProductDimensionsSettings.js +1 -1
- package/dist-lib/components/verkoop/SalesOrderDetailView.d.ts +1 -1
- package/dist-lib/components/verkoop/SalesOrderDetailView.js +12 -12
- package/dist-lib/components/verkoop/SalesOrdersFilterPanel.d.ts +1 -1
- package/dist-lib/components/verkoop/SalesOrdersFilters.js +1 -1
- package/dist-lib/components/verkoop/SalesOrdersTable.d.ts +1 -1
- package/dist-lib/components/verkoop/SalesOrdersTable.js +2 -2
- package/dist-lib/components/verkoop/StockConsumptionAlertsBanner.js +1 -1
- package/dist-lib/components/verkoop/VerkoopOrdersPage.js +15 -15
- package/dist-lib/index.d.ts +4 -5
- package/dist-lib/index.d.ts.map +1 -1
- package/dist-lib/index.js +5 -6
- package/dist-lib/integrations/supabase/auth-middleware.d.ts +1 -1
- package/dist-lib/integrations/supabase/client.d.ts +1 -1
- package/dist-lib/integrations/supabase/client.server.d.ts +1 -1
- package/dist-lib/lib/belading.server.js +1 -1
- package/dist-lib/lib/buffer-events.functions.d.ts +1 -1
- package/dist-lib/lib/buffer-events.functions.js +1 -1
- package/dist-lib/lib/cart-layers.functions.d.ts +4 -4
- package/dist-lib/lib/cart-layers.functions.js +2 -2
- package/dist-lib/lib/cart-lock.functions.d.ts +1 -1
- package/dist-lib/lib/cart-lock.functions.js +2 -2
- package/dist-lib/lib/cart-planning-settings.functions.d.ts +11 -11
- package/dist-lib/lib/cart-planning-settings.functions.js +1 -1
- package/dist-lib/lib/cart-replan.functions.d.ts +4 -4
- package/dist-lib/lib/cart-replan.functions.js +9 -9
- package/dist-lib/lib/create-order.functions.d.ts +18 -18
- package/dist-lib/lib/create-order.functions.js +15 -15
- package/dist-lib/lib/cron/index.d.ts +3 -3
- package/dist-lib/lib/cron/index.js +3 -3
- package/dist-lib/lib/cron/invoice-due.js +1 -1
- package/dist-lib/lib/cron/sync-salesorders.js +2 -2
- package/dist-lib/lib/cron/sync-tradeitems.js +1 -1
- package/dist-lib/lib/engine-block-alerts.server.js +4 -4
- package/dist-lib/lib/expand-group-order-items.d.ts +1 -1
- package/dist-lib/lib/floriday-change-diff.check.js +2 -2
- package/dist-lib/lib/floriday-gateway.server.d.ts +1 -1
- package/dist-lib/lib/floriday-gateway.server.js +2 -2
- package/dist-lib/lib/floriday-logistic-labels.functions.d.ts +2 -2
- package/dist-lib/lib/floriday-logistic-labels.functions.js +5 -5
- package/dist-lib/lib/floriday-mirror.functions.d.ts +1 -1
- package/dist-lib/lib/floriday-mirror.functions.d.ts.map +1 -1
- package/dist-lib/lib/floriday-mirror.functions.js +19 -12
- package/dist-lib/lib/floriday-public.functions.d.ts +7 -7
- package/dist-lib/lib/floriday-public.functions.js +2 -2
- package/dist-lib/lib/floriday-status.d.ts +1 -1
- package/dist-lib/lib/floriday-status.server.d.ts +1 -1
- package/dist-lib/lib/floriday-status.server.js +2 -2
- package/dist-lib/lib/floriday-sync.js +1 -1
- package/dist-lib/lib/floriday-unlinked-products.js +1 -1
- package/dist-lib/lib/floriday-writes.functions.d.ts +3 -3
- package/dist-lib/lib/floriday-writes.functions.js +3 -3
- package/dist-lib/lib/invoice-timing.functions.d.ts +5 -5
- package/dist-lib/lib/invoice-timing.functions.js +8 -8
- package/dist-lib/lib/invoice-timing.server.d.ts +8 -3
- package/dist-lib/lib/invoice-timing.server.d.ts.map +1 -1
- package/dist-lib/lib/invoice-timing.server.js +70 -34
- package/dist-lib/lib/load-carriers.functions.d.ts +2 -2
- package/dist-lib/lib/load-carriers.functions.js +2 -2
- package/dist-lib/lib/load-carriers.server.d.ts +1 -1
- package/dist-lib/lib/load-carriers.server.js +1 -1
- package/dist-lib/lib/logistics-buffer.server.js +1 -1
- package/dist-lib/lib/logistics-engine.functions.d.ts +8 -8
- package/dist-lib/lib/logistics-engine.functions.js +6 -6
- package/dist-lib/lib/logistics-engine.server.d.ts +1 -1
- package/dist-lib/lib/logistics-engine.server.js +4 -4
- package/dist-lib/lib/logistics-stock.functions.d.ts +3 -3
- package/dist-lib/lib/logistics-stock.functions.js +3 -3
- package/dist-lib/lib/order-addresses.functions.d.ts +1 -1
- package/dist-lib/lib/order-addresses.functions.js +2 -2
- package/dist-lib/lib/order-block-mail.server.js +3 -3
- package/dist-lib/lib/order-buffers.functions.d.ts +3 -3
- package/dist-lib/lib/order-buffers.functions.js +3 -3
- package/dist-lib/lib/order-cancel.server.js +6 -6
- package/dist-lib/lib/order-carrier.functions.d.ts +2 -2
- package/dist-lib/lib/order-carrier.functions.js +2 -2
- package/dist-lib/lib/order-fulfill.functions.d.ts +1 -1
- package/dist-lib/lib/order-fulfill.functions.js +3 -3
- package/dist-lib/lib/order-item-packing.functions.d.ts +3 -3
- package/dist-lib/lib/order-item-packing.functions.js +3 -3
- package/dist-lib/lib/order-patch.check.d.ts +2 -0
- package/dist-lib/lib/order-patch.check.d.ts.map +1 -0
- package/dist-lib/lib/order-patch.check.js +40 -0
- package/dist-lib/lib/order-patch.d.ts +18 -0
- package/dist-lib/lib/order-patch.d.ts.map +1 -0
- package/dist-lib/lib/order-patch.js +105 -0
- package/dist-lib/lib/order-pickup.functions.d.ts +2 -2
- package/dist-lib/lib/order-pickup.functions.js +3 -3
- package/dist-lib/lib/order-shipments.functions.d.ts +4 -4
- package/dist-lib/lib/order-shipments.functions.js +6 -6
- package/dist-lib/lib/plan-coverage.check.js +1 -1
- package/dist-lib/lib/plan-coverage.server.d.ts +1 -1
- package/dist-lib/lib/plan-coverage.server.js +1 -1
- package/dist-lib/lib/product-dimensions.functions.d.ts +2 -2
- package/dist-lib/lib/product-dimensions.functions.js +1 -1
- package/dist-lib/lib/salesorders-list.functions.d.ts +5 -5
- package/dist-lib/lib/salesorders-list.functions.js +4 -4
- package/dist-lib/lib/salesorders-list.server.d.ts +2 -2
- package/dist-lib/lib/salesorders-list.server.js +17 -17
- package/dist-lib/lib/salesorders-mapping.d.ts +3 -3
- package/dist-lib/lib/salesorders-mapping.js +2 -2
- package/dist-lib/lib/salesorders.functions.d.ts +7 -7
- package/dist-lib/lib/salesorders.functions.js +20 -20
- package/dist-lib/lib/stock-consumption-alerts.functions.d.ts +2 -2
- package/dist-lib/lib/stock-consumption-alerts.functions.js +1 -1
- package/dist-lib/lib/tradeitems.functions.d.ts +1068 -1068
- package/dist-lib/lib/tradeitems.functions.js +3 -3
- package/dist-lib/lib/useAllowedLoadCarriers.d.ts +1 -1
- package/dist-lib/lib/useAllowedLoadCarriers.js +1 -1
- package/dist-lib/lib/useBufferEvents.d.ts +1 -1
- package/dist-lib/lib/useBufferEvents.js +2 -2
- package/dist-lib/lib/useLocalSalesOrderDetailQuery.d.ts +2 -2
- package/dist-lib/lib/useLocalSalesOrderDetailQuery.js +2 -2
- package/dist-lib/lib/useSalesOrderDetailQuery.d.ts +1 -1
- package/dist-lib/lib/useSalesOrderDetailQuery.js +2 -2
- package/dist-lib/lib/useSalesOrdersQuery.d.ts +2 -2
- package/dist-lib/lib/useSalesOrdersQuery.js +3 -3
- package/package.json +2 -2
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
//
|
|
7
7
|
// De mail wordt in public.email_auth_outbox gezet; de e-mailmodule verstuurt
|
|
8
8
|
// hem in haar eigen verwerkingsronde.
|
|
9
|
-
import { buildBlockMailLines, buyerLabel } from "./engine-block-alerts";
|
|
9
|
+
import { buildBlockMailLines, buyerLabel } from "./engine-block-alerts.js";
|
|
10
10
|
const EMAIL_PURPOSE = "internal";
|
|
11
11
|
function escapeHtml(value) {
|
|
12
12
|
return value
|
|
@@ -25,7 +25,7 @@ export async function notifyOrderBlocked(input) {
|
|
|
25
25
|
if (orderIds.length === 0)
|
|
26
26
|
return { sent: 0, warnings };
|
|
27
27
|
try {
|
|
28
|
-
const { supabaseAdmin } = await import("../integrations/supabase/client.server");
|
|
28
|
+
const { supabaseAdmin } = await import("../integrations/supabase/client.server.js");
|
|
29
29
|
// 1) Claim per order+reden. Alleen nieuw geclaimde orders worden gemaild.
|
|
30
30
|
const claimed = [];
|
|
31
31
|
for (const orderId of orderIds) {
|
|
@@ -136,7 +136,7 @@ export async function clearOrderBlockNotifications(orderIds) {
|
|
|
136
136
|
if (ids.length === 0)
|
|
137
137
|
return;
|
|
138
138
|
try {
|
|
139
|
-
const { supabaseAdmin } = await import("../integrations/supabase/client.server");
|
|
139
|
+
const { supabaseAdmin } = await import("../integrations/supabase/client.server.js");
|
|
140
140
|
await supabaseAdmin.from("order_block_notifications").delete().in("order_id", ids);
|
|
141
141
|
}
|
|
142
142
|
catch (err) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** Leest de door de Engine gezette buffer-id van een order (alleen lezen). */
|
|
2
2
|
export declare function resolveBufferForOrderInternal(orderId: string): Promise<string | null>;
|
|
3
3
|
export declare const resolveBufferForOrder: import("@tanstack/start-client-core").OptionalFetcher<readonly [import("@tanstack/start-client-core").FunctionMiddlewareAfterServer<{}, unknown, undefined, {
|
|
4
|
-
supabase: import("../integrations/supabase/auth-middleware").AuthedSupabaseClient;
|
|
4
|
+
supabase: import("../integrations/supabase/auth-middleware.js").AuthedSupabaseClient;
|
|
5
5
|
userId: string;
|
|
6
6
|
claims: import("@supabase/auth-js").User;
|
|
7
7
|
}, undefined, undefined, undefined>], (input: unknown) => {
|
|
@@ -11,7 +11,7 @@ export declare const resolveBufferForOrder: import("@tanstack/start-client-core"
|
|
|
11
11
|
}>>;
|
|
12
12
|
/** Haalt alle orders van dezelfde buffer als de gegeven order. */
|
|
13
13
|
export declare const listOrdersInBufferOfOrder: import("@tanstack/start-client-core").OptionalFetcher<readonly [import("@tanstack/start-client-core").FunctionMiddlewareAfterServer<{}, unknown, undefined, {
|
|
14
|
-
supabase: import("../integrations/supabase/auth-middleware").AuthedSupabaseClient;
|
|
14
|
+
supabase: import("../integrations/supabase/auth-middleware.js").AuthedSupabaseClient;
|
|
15
15
|
userId: string;
|
|
16
16
|
claims: import("@supabase/auth-js").User;
|
|
17
17
|
}, undefined, undefined, undefined>], (input: unknown) => {
|
|
@@ -26,7 +26,7 @@ export declare const listOrdersInBufferOfOrder: import("@tanstack/start-client-c
|
|
|
26
26
|
order_number: string;
|
|
27
27
|
customer_name: string;
|
|
28
28
|
delivery_date: string | null;
|
|
29
|
-
custom_fields: import("../integrations/supabase/types").Json;
|
|
29
|
+
custom_fields: import("../integrations/supabase/types.js").Json;
|
|
30
30
|
}[];
|
|
31
31
|
}>>;
|
|
32
32
|
//# sourceMappingURL=order-buffers.functions.d.ts.map
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
// Logistics Engine. Leeg = losse order.
|
|
4
4
|
import { createServerFn } from "@tanstack/react-start";
|
|
5
5
|
import { z } from "zod";
|
|
6
|
-
import { requireSupabaseAuth } from "../integrations/supabase/auth-middleware";
|
|
7
|
-
import { resolveOrderRow } from "./order-row.server";
|
|
6
|
+
import { requireSupabaseAuth } from "../integrations/supabase/auth-middleware.js";
|
|
7
|
+
import { resolveOrderRow } from "./order-row.server.js";
|
|
8
8
|
/** Leest de door de Engine gezette buffer-id van een order (alleen lezen). */
|
|
9
9
|
export async function resolveBufferForOrderInternal(orderId) {
|
|
10
|
-
const { supabaseAdmin } = await import("../integrations/supabase/client.server");
|
|
10
|
+
const { supabaseAdmin } = await import("../integrations/supabase/client.server.js");
|
|
11
11
|
const { data } = await supabaseAdmin
|
|
12
12
|
.from("orders")
|
|
13
13
|
.select("buffer_id")
|
|
@@ -11,7 +11,7 @@ export const CANCELLED_STATUS = "geannuleerd";
|
|
|
11
11
|
* Retourneert het aantal geraakte voorraadsleutels en logregels.
|
|
12
12
|
*/
|
|
13
13
|
export async function reverseOrderStockMutations(orderId, opts) {
|
|
14
|
-
const { supabaseAdmin } = await import("../integrations/supabase/client.server");
|
|
14
|
+
const { supabaseAdmin } = await import("../integrations/supabase/client.server.js");
|
|
15
15
|
const { data: mutations, error: mErr } = await supabaseAdmin
|
|
16
16
|
.from("stock_mutation_log")
|
|
17
17
|
.select("trade_item_key, qty_delta, physical_before, physical_after, reserved_before, reserved_after, mutation_type")
|
|
@@ -79,7 +79,7 @@ export async function reverseOrderStockMutations(orderId, opts) {
|
|
|
79
79
|
}
|
|
80
80
|
/** Annuleert één lokale order: voorraad terug, uit planning, status geannuleerd. */
|
|
81
81
|
export async function cancelLocalOrderInternal(input) {
|
|
82
|
-
const { supabaseAdmin } = await import("../integrations/supabase/client.server");
|
|
82
|
+
const { supabaseAdmin } = await import("../integrations/supabase/client.server.js");
|
|
83
83
|
const { data: order, error: oErr } = await supabaseAdmin
|
|
84
84
|
.from("orders")
|
|
85
85
|
.select("id, status, custom_fields, order_source, floriday_sales_order_id")
|
|
@@ -120,7 +120,7 @@ export async function cancelLocalOrderInternal(input) {
|
|
|
120
120
|
throw new Error(`Annuleren faalde: ${uErr.message}`);
|
|
121
121
|
// Engine informeren zodat buffering/transport de order laat vallen.
|
|
122
122
|
try {
|
|
123
|
-
const { notifyEngineOrder } = await import("./logistics-engine.server");
|
|
123
|
+
const { notifyEngineOrder } = await import("./logistics-engine.server.js");
|
|
124
124
|
await notifyEngineOrder(input.orderId, "order.changed");
|
|
125
125
|
}
|
|
126
126
|
catch (err) {
|
|
@@ -137,7 +137,7 @@ export const FLORIDAY_CANCEL_PICKED_MESSAGE = "Koper heeft geannuleerd in Florid
|
|
|
137
137
|
* melding voor handmatige beoordeling. Schrijft nooit order_carts (Engine).
|
|
138
138
|
*/
|
|
139
139
|
export async function handleFloridayCancellation(orderId) {
|
|
140
|
-
const { supabaseAdmin } = await import("../integrations/supabase/client.server");
|
|
140
|
+
const { supabaseAdmin } = await import("../integrations/supabase/client.server.js");
|
|
141
141
|
const { data: order, error } = await supabaseAdmin
|
|
142
142
|
.from("orders")
|
|
143
143
|
.select("id, status, plan_locked_at, custom_fields, order_source")
|
|
@@ -155,7 +155,7 @@ export async function handleFloridayCancellation(orderId) {
|
|
|
155
155
|
// Pickstand alleen uit de Engine; fail closed.
|
|
156
156
|
let picked = null;
|
|
157
157
|
try {
|
|
158
|
-
const { loadPlanCoverage } = await import("./plan-coverage.server");
|
|
158
|
+
const { loadPlanCoverage } = await import("./plan-coverage.server.js");
|
|
159
159
|
const cov = (await loadPlanCoverage(supabaseAdmin, [orderId], "detail")).get(orderId);
|
|
160
160
|
if (cov && cov.state !== "onbekend") {
|
|
161
161
|
picked =
|
|
@@ -209,7 +209,7 @@ export async function handleFloridayCancellation(orderId) {
|
|
|
209
209
|
if (uErr)
|
|
210
210
|
throw new Error(`Annuleren faalde: ${uErr.message}`);
|
|
211
211
|
try {
|
|
212
|
-
const { notifyEngineOrder } = await import("./logistics-engine.server");
|
|
212
|
+
const { notifyEngineOrder } = await import("./logistics-engine.server.js");
|
|
213
213
|
await notifyEngineOrder(orderId, "order.changed");
|
|
214
214
|
}
|
|
215
215
|
catch (err) {
|
|
@@ -3,7 +3,7 @@ export interface CarrierOption {
|
|
|
3
3
|
name: string;
|
|
4
4
|
}
|
|
5
5
|
export declare const getOrderCarrier: import("@tanstack/start-client-core").OptionalFetcher<readonly [import("@tanstack/start-client-core").FunctionMiddlewareAfterServer<{}, unknown, undefined, {
|
|
6
|
-
supabase: import("../integrations/supabase/auth-middleware").AuthedSupabaseClient;
|
|
6
|
+
supabase: import("../integrations/supabase/auth-middleware.js").AuthedSupabaseClient;
|
|
7
7
|
userId: string;
|
|
8
8
|
claims: import("@supabase/auth-js").User;
|
|
9
9
|
}, undefined, undefined, undefined>], (input: unknown) => {
|
|
@@ -15,7 +15,7 @@ export declare const getOrderCarrier: import("@tanstack/start-client-core").Opti
|
|
|
15
15
|
options: CarrierOption[];
|
|
16
16
|
}>>;
|
|
17
17
|
export declare const setOrderCarrier: import("@tanstack/start-client-core").OptionalFetcher<readonly [import("@tanstack/start-client-core").FunctionMiddlewareAfterServer<{}, unknown, undefined, {
|
|
18
|
-
supabase: import("../integrations/supabase/auth-middleware").AuthedSupabaseClient;
|
|
18
|
+
supabase: import("../integrations/supabase/auth-middleware.js").AuthedSupabaseClient;
|
|
19
19
|
userId: string;
|
|
20
20
|
claims: import("@supabase/auth-js").User;
|
|
21
21
|
}, undefined, undefined, undefined>], (input: unknown) => {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// Vervoerder (carrier) van een order of orderbuffer lezen en wijzigen.
|
|
2
2
|
import { createServerFn } from "@tanstack/react-start";
|
|
3
3
|
import { z } from "zod";
|
|
4
|
-
import { requireSupabaseAuth } from "../integrations/supabase/auth-middleware";
|
|
5
|
-
import { assertRowsAffected, resolveOrderRow } from "./order-row.server";
|
|
4
|
+
import { requireSupabaseAuth } from "../integrations/supabase/auth-middleware.js";
|
|
5
|
+
import { assertRowsAffected, resolveOrderRow } from "./order-row.server.js";
|
|
6
6
|
async function findOrder(supabase, orderId) {
|
|
7
7
|
// DTO-id kan een Floriday salesOrderId zijn; resolveOrderRow vertaalt dat.
|
|
8
8
|
const row = await resolveOrderRow(supabase, orderId);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const markOrdersShipped: import("@tanstack/start-client-core").OptionalFetcher<readonly [import("@tanstack/start-client-core").FunctionMiddlewareAfterServer<{}, unknown, undefined, {
|
|
2
|
-
supabase: import("../integrations/supabase/auth-middleware").AuthedSupabaseClient;
|
|
2
|
+
supabase: import("../integrations/supabase/auth-middleware.js").AuthedSupabaseClient;
|
|
3
3
|
userId: string;
|
|
4
4
|
claims: import("@supabase/auth-js").User;
|
|
5
5
|
}, undefined, undefined, undefined>], (input: unknown) => {
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
// vereist bewijs van vertrek (alle karren verzonden of dekkende zendingen).
|
|
4
4
|
import { createServerFn } from "@tanstack/react-start";
|
|
5
5
|
import { z } from "zod";
|
|
6
|
-
import { requireSupabaseAuth } from "../integrations/supabase/auth-middleware";
|
|
7
|
-
import { resolveOrderRow } from "./order-row.server";
|
|
6
|
+
import { requireSupabaseAuth } from "../integrations/supabase/auth-middleware.js";
|
|
7
|
+
import { resolveOrderRow } from "./order-row.server.js";
|
|
8
8
|
const Input = z.object({
|
|
9
9
|
orderIds: z.array(z.string().min(1)).min(1).max(200),
|
|
10
10
|
});
|
|
@@ -12,7 +12,7 @@ export const markOrdersShipped = createServerFn({ method: "POST" })
|
|
|
12
12
|
.middleware([requireSupabaseAuth])
|
|
13
13
|
.inputValidator((input) => Input.parse(input))
|
|
14
14
|
.handler(async ({ data, context }) => {
|
|
15
|
-
const { supabaseAdmin } = await import("../integrations/supabase/client.server");
|
|
15
|
+
const { supabaseAdmin } = await import("../integrations/supabase/client.server.js");
|
|
16
16
|
const results = [];
|
|
17
17
|
for (const raw of data.orderIds) {
|
|
18
18
|
try {
|
|
@@ -14,7 +14,7 @@ export interface OrderItemPackingRow {
|
|
|
14
14
|
* Floriday sales-order-id zijn (resolveOrderRow vertaalt dat).
|
|
15
15
|
*/
|
|
16
16
|
export declare const listOrderItemPacking: import("@tanstack/start-client-core").OptionalFetcher<readonly [import("@tanstack/start-client-core").FunctionMiddlewareAfterServer<{}, unknown, undefined, {
|
|
17
|
-
supabase: import("../integrations/supabase/auth-middleware").AuthedSupabaseClient;
|
|
17
|
+
supabase: import("../integrations/supabase/auth-middleware.js").AuthedSupabaseClient;
|
|
18
18
|
userId: string;
|
|
19
19
|
claims: import("@supabase/auth-js").User;
|
|
20
20
|
}, undefined, undefined, undefined>], (input: unknown) => {
|
|
@@ -24,7 +24,7 @@ export declare const listOrderItemPacking: import("@tanstack/start-client-core")
|
|
|
24
24
|
}>>;
|
|
25
25
|
/** Zet de belading van één orderregel handmatig vast. */
|
|
26
26
|
export declare const setOrderItemPacking: import("@tanstack/start-client-core").OptionalFetcher<readonly [import("@tanstack/start-client-core").FunctionMiddlewareAfterServer<{}, unknown, undefined, {
|
|
27
|
-
supabase: import("../integrations/supabase/auth-middleware").AuthedSupabaseClient;
|
|
27
|
+
supabase: import("../integrations/supabase/auth-middleware.js").AuthedSupabaseClient;
|
|
28
28
|
userId: string;
|
|
29
29
|
claims: import("@supabase/auth-js").User;
|
|
30
30
|
}, undefined, undefined, undefined>], (input: unknown) => {
|
|
@@ -38,7 +38,7 @@ export declare const setOrderItemPacking: import("@tanstack/start-client-core").
|
|
|
38
38
|
}>>;
|
|
39
39
|
/** Haal de handmatige markering weg; de regel volgt weer de standaardbelading. */
|
|
40
40
|
export declare const clearOrderItemPackingLock: import("@tanstack/start-client-core").OptionalFetcher<readonly [import("@tanstack/start-client-core").FunctionMiddlewareAfterServer<{}, unknown, undefined, {
|
|
41
|
-
supabase: import("../integrations/supabase/auth-middleware").AuthedSupabaseClient;
|
|
41
|
+
supabase: import("../integrations/supabase/auth-middleware.js").AuthedSupabaseClient;
|
|
42
42
|
userId: string;
|
|
43
43
|
claims: import("@supabase/auth-js").User;
|
|
44
44
|
}, undefined, undefined, undefined>], (input: unknown) => {
|
|
@@ -9,10 +9,10 @@
|
|
|
9
9
|
// De correctie is strikt lokaal: hij wordt NOOIT teruggestuurd als wijziging
|
|
10
10
|
// van het Floriday-artikel zelf — dat loopt uitsluitend via de voorraad-module.
|
|
11
11
|
import { createServerFn } from "@tanstack/react-start";
|
|
12
|
-
import { productNameForStorage } from "./product-name";
|
|
12
|
+
import { productNameForStorage } from "./product-name.js";
|
|
13
13
|
import { z } from "zod";
|
|
14
|
-
import { requireSupabaseAuth } from "../integrations/supabase/auth-middleware";
|
|
15
|
-
import { resolveOrderRow } from "./order-row.server";
|
|
14
|
+
import { requireSupabaseAuth } from "../integrations/supabase/auth-middleware.js";
|
|
15
|
+
import { resolveOrderRow } from "./order-row.server.js";
|
|
16
16
|
/**
|
|
17
17
|
* Belading per bestelregel van één order, inclusief de handmatige
|
|
18
18
|
* "vastgezet"-markering. `orderId` mag een lokale orders.id of een
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"order-patch.check.d.ts","sourceRoot":"","sources":["../../src/lib/order-patch.check.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// Controle zonder testomgeving: `bun src/lib/order-patch.check.ts`.
|
|
2
|
+
import { diffPatch, distinctFilter } from "./order-patch.js";
|
|
3
|
+
let failed = 0;
|
|
4
|
+
const eq = (name, got, want) => {
|
|
5
|
+
const ok = JSON.stringify(got) === JSON.stringify(want);
|
|
6
|
+
if (!ok)
|
|
7
|
+
failed++;
|
|
8
|
+
console.log(`${ok ? "OK " : "FOUT"} ${name}${ok ? "" : ` — kreeg ${JSON.stringify(got)}`}`);
|
|
9
|
+
};
|
|
10
|
+
const row = {
|
|
11
|
+
status: "Nog te picken",
|
|
12
|
+
delivery_date: "2026-10-16",
|
|
13
|
+
invoice_due_at: "2026-10-16T16:00:00+00:00",
|
|
14
|
+
total: "12.50",
|
|
15
|
+
custom_fields: { a: 1, b: { c: 2 } },
|
|
16
|
+
};
|
|
17
|
+
// Niets veranderd → niets opslaan
|
|
18
|
+
eq("alles gelijk → leeg", diffPatch(row, { ...row }), {});
|
|
19
|
+
eq("zelfde moment, andere notatie", diffPatch(row, { invoice_due_at: "2026-10-16T16:00:00.000Z" }), {});
|
|
20
|
+
eq("jsonb andere volgorde", diffPatch(row, { custom_fields: { b: { c: 2 }, a: 1 } }), {});
|
|
21
|
+
eq("bedrag 12.5 = 12.50", diffPatch(row, { total: "12.5" }), {});
|
|
22
|
+
eq("leeg blijft leeg", diffPatch({ invoice_due_at: null }, { invoice_due_at: null }), {});
|
|
23
|
+
// Echte wijziging → wél opslaan
|
|
24
|
+
eq("nieuwe status uit Floriday", diffPatch(row, { status: "geannuleerd" }), { status: "geannuleerd" });
|
|
25
|
+
eq("nieuwe leverdatum", diffPatch(row, { delivery_date: "2026-10-17" }), { delivery_date: "2026-10-17" });
|
|
26
|
+
eq("gewijzigd factuurmoment", diffPatch(row, { invoice_due_at: "2026-10-17T16:00:00.000Z" }), { invoice_due_at: "2026-10-17T16:00:00.000Z" });
|
|
27
|
+
eq("gewijzigde extra gegevens", Object.keys(diffPatch(row, { custom_fields: { a: 2, b: { c: 2 } } })), ["custom_fields"]);
|
|
28
|
+
eq("leeg → gevuld", diffPatch({ invoice_due_at: null }, { invoice_due_at: "2026-10-17T16:00:00.000Z" }), { invoice_due_at: "2026-10-17T16:00:00.000Z" });
|
|
29
|
+
eq("gevuld → leeg", diffPatch(row, { invoice_due_at: null }), { invoice_due_at: null });
|
|
30
|
+
eq("alleen gewijzigd veld mee", Object.keys(diffPatch(row, { status: row.status, total: "13" })), ["total"]);
|
|
31
|
+
// Voorwaarde in de database
|
|
32
|
+
eq("filter naar leeg", distinctFilter({ invoice_due_at: null }), "invoice_due_at.not.is.null");
|
|
33
|
+
eq("filter met waarde", distinctFilter({ status: "Gereed voor facturatie" }), 'status.is.null,status.neq."Gereed voor facturatie"');
|
|
34
|
+
eq("filter jsonb", distinctFilter({ custom_fields: { a: "x,y" } }), 'custom_fields.is.null,custom_fields.neq."{\\"a\\":\\"x,y\\"}"');
|
|
35
|
+
eq("lege patch → geen filter", distinctFilter({}), null);
|
|
36
|
+
if (failed) {
|
|
37
|
+
console.log(`${failed} controle(s) mislukt`);
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
console.log("Alle controles geslaagd");
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare function sameJson(a: unknown, b: unknown): boolean;
|
|
2
|
+
export declare function sameValue(key: string, prev: unknown, next: unknown): boolean;
|
|
3
|
+
/** Alleen de velden die echt anders zijn dan de huidige rij. */
|
|
4
|
+
export declare function diffPatch<T extends Record<string, unknown>>(current: Record<string, unknown> | null | undefined, patch: T): Partial<T>;
|
|
5
|
+
/**
|
|
6
|
+
* PostgREST `or`-filter: de rij wordt alleen geraakt als minstens één veld uit
|
|
7
|
+
* de patch in de database anders is (IS DISTINCT FROM). Leeg → null.
|
|
8
|
+
*/
|
|
9
|
+
export declare function distinctFilter(patch: Record<string, unknown>): string | null;
|
|
10
|
+
/**
|
|
11
|
+
* Slaat alleen gewijzigde velden op, met de "alleen als anders"-voorwaarde ook
|
|
12
|
+
* in de database. Geeft het aantal echt bijgewerkte rijen (0 of 1).
|
|
13
|
+
*/
|
|
14
|
+
export declare function updateOrderIfChanged(supabase: any, orderId: string, current: Record<string, unknown> | null | undefined, patch: Record<string, unknown>): Promise<{
|
|
15
|
+
written: number;
|
|
16
|
+
changed: string[];
|
|
17
|
+
}>;
|
|
18
|
+
//# sourceMappingURL=order-patch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"order-patch.d.ts","sourceRoot":"","sources":["../../src/lib/order-patch.ts"],"names":[],"mappings":"AAwBA,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAExD;AAQD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAe5E;AAED,gEAAgE;AAChE,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,EACnD,KAAK,EAAE,CAAC,GACP,OAAO,CAAC,CAAC,CAAC,CAQZ;AAMD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,CAY5E;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,GAAG,EACb,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,EACnD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAYjD"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
// Alleen opslaan wat echt verandert. Elke opslag op `orders` laat triggers van
|
|
2
|
+
// andere modules afgaan (planning, factuurkoppelingen, updated_at), dus een
|
|
3
|
+
// gelijke waarde terugschrijven mag nooit.
|
|
4
|
+
//
|
|
5
|
+
// 1) diffPatch: vergelijking vooraf (jsonb op inhoud, tijdstippen als moment).
|
|
6
|
+
// 2) distinctFilter: dezelfde voorwaarde ook in de database (IS DISTINCT FROM),
|
|
7
|
+
// zodat twee rondes tegelijk niet allebei schrijven.
|
|
8
|
+
const DATE_KEYS = new Set(["delivery_date", "order_date"]);
|
|
9
|
+
const NUMERIC_KEYS = new Set(["total"]);
|
|
10
|
+
function canon(v) {
|
|
11
|
+
if (Array.isArray(v))
|
|
12
|
+
return v.map(canon);
|
|
13
|
+
if (v && typeof v === "object") {
|
|
14
|
+
const out = {};
|
|
15
|
+
for (const k of Object.keys(v).sort()) {
|
|
16
|
+
const x = v[k];
|
|
17
|
+
if (x !== undefined)
|
|
18
|
+
out[k] = canon(x);
|
|
19
|
+
}
|
|
20
|
+
return out;
|
|
21
|
+
}
|
|
22
|
+
return v;
|
|
23
|
+
}
|
|
24
|
+
export function sameJson(a, b) {
|
|
25
|
+
return JSON.stringify(canon(a ?? null)) === JSON.stringify(canon(b ?? null));
|
|
26
|
+
}
|
|
27
|
+
function asInstant(v) {
|
|
28
|
+
if (v === null || v === undefined || v === "")
|
|
29
|
+
return null;
|
|
30
|
+
const t = new Date(String(v)).getTime();
|
|
31
|
+
return Number.isNaN(t) ? null : t;
|
|
32
|
+
}
|
|
33
|
+
export function sameValue(key, prev, next) {
|
|
34
|
+
const pNull = prev === null || prev === undefined;
|
|
35
|
+
const nNull = next === null || next === undefined;
|
|
36
|
+
if (pNull || nNull)
|
|
37
|
+
return pNull && nNull;
|
|
38
|
+
if (typeof next === "object" || typeof prev === "object")
|
|
39
|
+
return sameJson(prev, next);
|
|
40
|
+
if (NUMERIC_KEYS.has(key))
|
|
41
|
+
return Number(prev) === Number(next);
|
|
42
|
+
if (DATE_KEYS.has(key))
|
|
43
|
+
return String(prev).slice(0, 10) === String(next).slice(0, 10);
|
|
44
|
+
const ps = String(prev);
|
|
45
|
+
const ns = String(next);
|
|
46
|
+
if (ps === ns)
|
|
47
|
+
return true;
|
|
48
|
+
// Tijdstippen in een andere notatie/tijdzone: zelfde moment = gelijk.
|
|
49
|
+
if (/^\d{4}-\d{2}-\d{2}T/.test(ps) && /^\d{4}-\d{2}-\d{2}T/.test(ns)) {
|
|
50
|
+
return asInstant(ps) === asInstant(ns);
|
|
51
|
+
}
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
/** Alleen de velden die echt anders zijn dan de huidige rij. */
|
|
55
|
+
export function diffPatch(current, patch) {
|
|
56
|
+
const out = {};
|
|
57
|
+
for (const k of Object.keys(patch)) {
|
|
58
|
+
const next = patch[k];
|
|
59
|
+
if (next === undefined)
|
|
60
|
+
continue;
|
|
61
|
+
if (!sameValue(k, current?.[k], next))
|
|
62
|
+
out[k] = next;
|
|
63
|
+
}
|
|
64
|
+
return out;
|
|
65
|
+
}
|
|
66
|
+
function quote(v) {
|
|
67
|
+
return `"${v.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"`;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* PostgREST `or`-filter: de rij wordt alleen geraakt als minstens één veld uit
|
|
71
|
+
* de patch in de database anders is (IS DISTINCT FROM). Leeg → null.
|
|
72
|
+
*/
|
|
73
|
+
export function distinctFilter(patch) {
|
|
74
|
+
const parts = [];
|
|
75
|
+
for (const [k, v] of Object.entries(patch)) {
|
|
76
|
+
if (v === undefined)
|
|
77
|
+
continue;
|
|
78
|
+
if (v === null) {
|
|
79
|
+
parts.push(`${k}.not.is.null`);
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
const lit = typeof v === "object" ? JSON.stringify(v) : String(v);
|
|
83
|
+
parts.push(`${k}.is.null`, `${k}.neq.${quote(lit)}`);
|
|
84
|
+
}
|
|
85
|
+
return parts.length ? parts.join(",") : null;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Slaat alleen gewijzigde velden op, met de "alleen als anders"-voorwaarde ook
|
|
89
|
+
* in de database. Geeft het aantal echt bijgewerkte rijen (0 of 1).
|
|
90
|
+
*/
|
|
91
|
+
export async function updateOrderIfChanged(supabase, orderId, current, patch) {
|
|
92
|
+
const diff = diffPatch(current, patch);
|
|
93
|
+
const changed = Object.keys(diff);
|
|
94
|
+
if (changed.length === 0)
|
|
95
|
+
return { written: 0, changed };
|
|
96
|
+
const filter = distinctFilter(diff);
|
|
97
|
+
const { data, error } = await supabase.from("orders")
|
|
98
|
+
.update(diff)
|
|
99
|
+
.eq("id", orderId)
|
|
100
|
+
.or(filter)
|
|
101
|
+
.select("id");
|
|
102
|
+
if (error)
|
|
103
|
+
throw new Error(error.message);
|
|
104
|
+
return { written: (data ?? []).length, changed };
|
|
105
|
+
}
|
|
@@ -10,7 +10,7 @@ export interface PickupMomentOption {
|
|
|
10
10
|
}
|
|
11
11
|
export declare function buildPickupOptions(carrier: any | null, deliveryISO: string | null): PickupMomentOption[];
|
|
12
12
|
export declare const getOrderPickupMoment: import("@tanstack/start-client-core").OptionalFetcher<readonly [import("@tanstack/start-client-core").FunctionMiddlewareAfterServer<{}, unknown, undefined, {
|
|
13
|
-
supabase: import("../integrations/supabase/auth-middleware").AuthedSupabaseClient;
|
|
13
|
+
supabase: import("../integrations/supabase/auth-middleware.js").AuthedSupabaseClient;
|
|
14
14
|
userId: string;
|
|
15
15
|
claims: import("@supabase/auth-js").User;
|
|
16
16
|
}, undefined, undefined, undefined>], (input: unknown) => {
|
|
@@ -27,7 +27,7 @@ export declare const getOrderPickupMoment: import("@tanstack/start-client-core")
|
|
|
27
27
|
hasCarrier: boolean;
|
|
28
28
|
}>>;
|
|
29
29
|
export declare const setOrderPickupMoment: import("@tanstack/start-client-core").OptionalFetcher<readonly [import("@tanstack/start-client-core").FunctionMiddlewareAfterServer<{}, unknown, undefined, {
|
|
30
|
-
supabase: import("../integrations/supabase/auth-middleware").AuthedSupabaseClient;
|
|
30
|
+
supabase: import("../integrations/supabase/auth-middleware.js").AuthedSupabaseClient;
|
|
31
31
|
userId: string;
|
|
32
32
|
claims: import("@supabase/auth-js").User;
|
|
33
33
|
}, undefined, undefined, undefined>], (input: unknown) => {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// Ophaalmoment (pickup moment) van een order lezen en wijzigen.
|
|
2
2
|
import { createServerFn } from "@tanstack/react-start";
|
|
3
3
|
import { z } from "zod";
|
|
4
|
-
import { requireSupabaseAuth } from "../integrations/supabase/auth-middleware";
|
|
5
|
-
import { normalizeTime } from "./carrier-availability";
|
|
6
|
-
import { assertRowsAffected, resolveOrderRow } from "./order-row.server";
|
|
4
|
+
import { requireSupabaseAuth } from "../integrations/supabase/auth-middleware.js";
|
|
5
|
+
import { normalizeTime } from "./carrier-availability.js";
|
|
6
|
+
import { assertRowsAffected, resolveOrderRow } from "./order-row.server.js";
|
|
7
7
|
function addDaysISO(iso, n) {
|
|
8
8
|
const [y, m, d] = iso.split("-").map(Number);
|
|
9
9
|
const dt = new Date(y, (m ?? 1) - 1, d ?? 1);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const listOrderShipments: import("@tanstack/start-client-core").OptionalFetcher<readonly [import("@tanstack/start-client-core").FunctionMiddlewareAfterServer<{}, unknown, undefined, {
|
|
2
|
-
supabase: import("../integrations/supabase/auth-middleware").AuthedSupabaseClient;
|
|
2
|
+
supabase: import("../integrations/supabase/auth-middleware.js").AuthedSupabaseClient;
|
|
3
3
|
userId: string;
|
|
4
4
|
claims: import("@supabase/auth-js").User;
|
|
5
5
|
}, undefined, undefined, undefined>], (input: unknown) => {
|
|
@@ -40,7 +40,7 @@ export declare const listOrderShipments: import("@tanstack/start-client-core").O
|
|
|
40
40
|
}[];
|
|
41
41
|
}>>;
|
|
42
42
|
export declare const createShipment: import("@tanstack/start-client-core").OptionalFetcher<readonly [import("@tanstack/start-client-core").FunctionMiddlewareAfterServer<{}, unknown, undefined, {
|
|
43
|
-
supabase: import("../integrations/supabase/auth-middleware").AuthedSupabaseClient;
|
|
43
|
+
supabase: import("../integrations/supabase/auth-middleware.js").AuthedSupabaseClient;
|
|
44
44
|
userId: string;
|
|
45
45
|
claims: import("@supabase/auth-js").User;
|
|
46
46
|
}, undefined, undefined, undefined>], (input: unknown) => {
|
|
@@ -60,7 +60,7 @@ export declare const createShipment: import("@tanstack/start-client-core").Optio
|
|
|
60
60
|
shipmentId: string;
|
|
61
61
|
}>>;
|
|
62
62
|
export declare const markShipmentShipped: import("@tanstack/start-client-core").OptionalFetcher<readonly [import("@tanstack/start-client-core").FunctionMiddlewareAfterServer<{}, unknown, undefined, {
|
|
63
|
-
supabase: import("../integrations/supabase/auth-middleware").AuthedSupabaseClient;
|
|
63
|
+
supabase: import("../integrations/supabase/auth-middleware.js").AuthedSupabaseClient;
|
|
64
64
|
userId: string;
|
|
65
65
|
claims: import("@supabase/auth-js").User;
|
|
66
66
|
}, undefined, undefined, undefined>], (input: unknown) => {
|
|
@@ -69,7 +69,7 @@ export declare const markShipmentShipped: import("@tanstack/start-client-core").
|
|
|
69
69
|
ok: true;
|
|
70
70
|
}>>;
|
|
71
71
|
export declare const cancelShipment: import("@tanstack/start-client-core").OptionalFetcher<readonly [import("@tanstack/start-client-core").FunctionMiddlewareAfterServer<{}, unknown, undefined, {
|
|
72
|
-
supabase: import("../integrations/supabase/auth-middleware").AuthedSupabaseClient;
|
|
72
|
+
supabase: import("../integrations/supabase/auth-middleware.js").AuthedSupabaseClient;
|
|
73
73
|
userId: string;
|
|
74
74
|
claims: import("@supabase/auth-js").User;
|
|
75
75
|
}, undefined, undefined, undefined>], (input: unknown) => {
|
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
// - deleteShipment : annuleert een geplande levering
|
|
6
6
|
// - markShipmentShipped : boekt voorraad af via RPC (fysiek + gereserveerd)
|
|
7
7
|
import { createServerFn } from "@tanstack/react-start";
|
|
8
|
-
import { productNameForStorage } from "./product-name";
|
|
8
|
+
import { productNameForStorage } from "./product-name.js";
|
|
9
9
|
import { z } from "zod";
|
|
10
|
-
import { requireSupabaseAuth } from "../integrations/supabase/auth-middleware";
|
|
11
|
-
import { resolveOrderRow } from "./order-row.server";
|
|
10
|
+
import { requireSupabaseAuth } from "../integrations/supabase/auth-middleware.js";
|
|
11
|
+
import { resolveOrderRow } from "./order-row.server.js";
|
|
12
12
|
const ShipmentItemInput = z.object({
|
|
13
13
|
orderItemId: z.string().uuid(),
|
|
14
14
|
productId: z.string().uuid().nullable().optional(),
|
|
@@ -128,7 +128,7 @@ export const createShipment = createServerFn({ method: "POST" })
|
|
|
128
128
|
.handler(async ({ data, context }) => {
|
|
129
129
|
const orderRow = await resolveOrderRow(context.supabase, data.orderId);
|
|
130
130
|
await assertRemainingCapacity(context.supabase, orderRow.id, data.items.map((i) => ({ orderItemId: i.orderItemId, quantity: i.quantity })));
|
|
131
|
-
const { supabaseAdmin } = await import("../integrations/supabase/client.server");
|
|
131
|
+
const { supabaseAdmin } = await import("../integrations/supabase/client.server.js");
|
|
132
132
|
const { data: shipment, error } = await supabaseAdmin.from("order_shipments")
|
|
133
133
|
.insert({
|
|
134
134
|
order_id: orderRow.id,
|
|
@@ -160,7 +160,7 @@ export const markShipmentShipped = createServerFn({ method: "POST" })
|
|
|
160
160
|
.middleware([requireSupabaseAuth])
|
|
161
161
|
.inputValidator((input) => z.object({ shipmentId: z.string().uuid() }).parse(input))
|
|
162
162
|
.handler(async ({ data }) => {
|
|
163
|
-
const { supabaseAdmin } = await import("../integrations/supabase/client.server");
|
|
163
|
+
const { supabaseAdmin } = await import("../integrations/supabase/client.server.js");
|
|
164
164
|
const { error } = await supabaseAdmin.rpc("mark_shipment_shipped", {
|
|
165
165
|
p_shipment_id: data.shipmentId,
|
|
166
166
|
});
|
|
@@ -183,7 +183,7 @@ export const cancelShipment = createServerFn({ method: "POST" })
|
|
|
183
183
|
if (s.status === "shipped") {
|
|
184
184
|
throw new Error("Reeds verzonden bezorgmomenten kunnen niet worden geannuleerd.");
|
|
185
185
|
}
|
|
186
|
-
const { supabaseAdmin } = await import("../integrations/supabase/client.server");
|
|
186
|
+
const { supabaseAdmin } = await import("../integrations/supabase/client.server.js");
|
|
187
187
|
const { error } = await supabaseAdmin.from("order_shipments").delete().eq("id", data.shipmentId);
|
|
188
188
|
if (error)
|
|
189
189
|
throw new Error(error.message);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Test (draait mee in de typecontrole én als script: `bun src/lib/plan-coverage.check.ts`).
|
|
2
2
|
// Ontbrekende tellingen moeten "onbekend" tonen, nooit "0".
|
|
3
|
-
import { combinedCartCount, coverageDetailText, parsePlanCoverageListRow, summarize } from "./plan-coverage";
|
|
3
|
+
import { combinedCartCount, coverageDetailText, parsePlanCoverageListRow, summarize } from "./plan-coverage.js";
|
|
4
4
|
function eq(actual, expected, name) {
|
|
5
5
|
if (actual !== expected)
|
|
6
6
|
throw new Error(`${name}: verwacht "${expected}", kreeg "${actual}"`);
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { type PlanCoverage } from "./plan-coverage";
|
|
1
|
+
import { type PlanCoverage } from "./plan-coverage.js";
|
|
2
2
|
export declare function loadPlanCoverage(supabase: any, orderIds: string[], mode?: "list" | "detail"): Promise<Map<string, PlanCoverage>>;
|
|
3
3
|
//# sourceMappingURL=plan-coverage.server.d.ts.map
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
// - Details (mode "detail"): per order, want alleen die geeft karren en pickrijen.
|
|
8
8
|
// - Kort geheugen per order-id zodat opnieuw tekenen geen nieuwe vragen doet.
|
|
9
9
|
// - Fail closed: een fout geeft "Indeling onbekend", nooit "Geen indeling".
|
|
10
|
-
import { parsePlanCoverage, parsePlanCoverageListRow, unknownCoverage } from "./plan-coverage";
|
|
10
|
+
import { parsePlanCoverage, parsePlanCoverageListRow, unknownCoverage } from "./plan-coverage.js";
|
|
11
11
|
const TTL_MS = 30000;
|
|
12
12
|
const CONCURRENCY = 12;
|
|
13
13
|
const cache = new Map(); // sleutel: mode:orderId
|
|
@@ -12,7 +12,7 @@ export interface ProductDimensionRow {
|
|
|
12
12
|
incomplete: boolean;
|
|
13
13
|
}
|
|
14
14
|
export declare const listProductDimensions: import("@tanstack/start-client-core").OptionalFetcher<readonly [import("@tanstack/start-client-core").FunctionMiddlewareAfterServer<{}, unknown, undefined, {
|
|
15
|
-
supabase: import("../integrations/supabase/auth-middleware").AuthedSupabaseClient;
|
|
15
|
+
supabase: import("../integrations/supabase/auth-middleware.js").AuthedSupabaseClient;
|
|
16
16
|
userId: string;
|
|
17
17
|
claims: import("@supabase/auth-js").User;
|
|
18
18
|
}, undefined, undefined, undefined>], (input: unknown) => {
|
|
@@ -24,7 +24,7 @@ export declare const listProductDimensions: import("@tanstack/start-client-core"
|
|
|
24
24
|
incompleteCount: number;
|
|
25
25
|
}>>;
|
|
26
26
|
export declare const saveProductDimensions: import("@tanstack/start-client-core").OptionalFetcher<readonly [import("@tanstack/start-client-core").FunctionMiddlewareAfterServer<{}, unknown, undefined, {
|
|
27
|
-
supabase: import("../integrations/supabase/auth-middleware").AuthedSupabaseClient;
|
|
27
|
+
supabase: import("../integrations/supabase/auth-middleware.js").AuthedSupabaseClient;
|
|
28
28
|
userId: string;
|
|
29
29
|
claims: import("@supabase/auth-js").User;
|
|
30
30
|
}, undefined, undefined, undefined>], (input: unknown) => {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// deze module vult alleen de maten aan en verzint nooit een waarde.
|
|
4
4
|
import { createServerFn } from "@tanstack/react-start";
|
|
5
5
|
import { z } from "zod";
|
|
6
|
-
import { requireSupabaseAuth } from "../integrations/supabase/auth-middleware";
|
|
6
|
+
import { requireSupabaseAuth } from "../integrations/supabase/auth-middleware.js";
|
|
7
7
|
export const listProductDimensions = createServerFn({ method: "GET" })
|
|
8
8
|
.middleware([requireSupabaseAuth])
|
|
9
9
|
.inputValidator((input) => z
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const listSalesOrders: import("@tanstack/start-client-core").OptionalFetcher<readonly [import("@tanstack/start-client-core").FunctionMiddlewareAfterServer<{}, unknown, undefined, {
|
|
2
|
-
supabase: import("../integrations/supabase/auth-middleware").AuthedSupabaseClient;
|
|
2
|
+
supabase: import("../integrations/supabase/auth-middleware.js").AuthedSupabaseClient;
|
|
3
3
|
userId: string;
|
|
4
4
|
claims: import("@supabase/auth-js").User;
|
|
5
5
|
}, undefined, undefined, undefined>], (input: unknown) => {
|
|
@@ -12,17 +12,17 @@ export declare const listSalesOrders: import("@tanstack/start-client-core").Opti
|
|
|
12
12
|
search?: string | undefined;
|
|
13
13
|
status?: string | undefined;
|
|
14
14
|
all?: boolean | undefined;
|
|
15
|
-
}, Promise<import("./salesorders-list.server").ListResult>>;
|
|
15
|
+
}, Promise<import("./salesorders-list.server.js").ListResult>>;
|
|
16
16
|
export declare const getLocalSalesOrderDetail: import("@tanstack/start-client-core").OptionalFetcher<readonly [import("@tanstack/start-client-core").FunctionMiddlewareAfterServer<{}, unknown, undefined, {
|
|
17
|
-
supabase: import("../integrations/supabase/auth-middleware").AuthedSupabaseClient;
|
|
17
|
+
supabase: import("../integrations/supabase/auth-middleware.js").AuthedSupabaseClient;
|
|
18
18
|
userId: string;
|
|
19
19
|
claims: import("@supabase/auth-js").User;
|
|
20
20
|
}, undefined, undefined, undefined>], (input: unknown) => {
|
|
21
21
|
id: string;
|
|
22
22
|
}, Promise<{
|
|
23
|
-
order: import("./salesorders-mapping").SalesOrderDTO | null;
|
|
23
|
+
order: import("./salesorders-mapping.js").SalesOrderDTO | null;
|
|
24
24
|
bufferId: string | null;
|
|
25
|
-
bufferSiblings: import("./salesorders-mapping").SalesOrderDTO[];
|
|
25
|
+
bufferSiblings: import("./salesorders-mapping.js").SalesOrderDTO[];
|
|
26
26
|
sellerFallback: string | null;
|
|
27
27
|
environment: "staging" | "live";
|
|
28
28
|
}>>;
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
// Alle logica staat in salesorders-list.server.ts.
|
|
3
3
|
import { createServerFn } from "@tanstack/react-start";
|
|
4
4
|
import { z } from "zod";
|
|
5
|
-
import { requireSupabaseAuth } from "../integrations/supabase/auth-middleware";
|
|
6
|
-
import { buildSalesOrdersList } from "./salesorders-list.server";
|
|
5
|
+
import { requireSupabaseAuth } from "../integrations/supabase/auth-middleware.js";
|
|
6
|
+
import { buildSalesOrdersList } from "./salesorders-list.server.js";
|
|
7
7
|
const listInput = z.object({
|
|
8
8
|
since: z.string().optional(),
|
|
9
9
|
until: z.string().optional(),
|
|
@@ -21,7 +21,7 @@ export const listSalesOrders = createServerFn({ method: "POST" })
|
|
|
21
21
|
.middleware([requireSupabaseAuth])
|
|
22
22
|
.inputValidator((input) => listInput.parse(input ?? {}))
|
|
23
23
|
.handler(async ({ data, context }) => {
|
|
24
|
-
const { supabaseAdmin } = await import("../integrations/supabase/client.server");
|
|
24
|
+
const { supabaseAdmin } = await import("../integrations/supabase/client.server.js");
|
|
25
25
|
return buildSalesOrdersList(context.supabase, data, supabaseAdmin);
|
|
26
26
|
});
|
|
27
27
|
const localDetailInput = z.object({
|
|
@@ -31,7 +31,7 @@ export const getLocalSalesOrderDetail = createServerFn({ method: "POST" })
|
|
|
31
31
|
.middleware([requireSupabaseAuth])
|
|
32
32
|
.inputValidator((input) => localDetailInput.parse(input))
|
|
33
33
|
.handler(async ({ data, context }) => {
|
|
34
|
-
const { supabaseAdmin } = await import("../integrations/supabase/client.server");
|
|
34
|
+
const { supabaseAdmin } = await import("../integrations/supabase/client.server.js");
|
|
35
35
|
const result = await buildSalesOrdersList(context.supabase, {
|
|
36
36
|
dateField: "ordered",
|
|
37
37
|
tab: "all",
|