@flowselections/mailbox-orders 1.0.39 → 1.0.42
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/MailboxProposalsPage.js +10 -4
- package/dist-lib/integrations/supabase/types.d.ts +2986 -85
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/mailbox.functions.d.ts +1 -0
- package/dist-lib/lib/mailbox.functions.d.ts.map +1 -1
- package/dist-lib/lib/mailbox.functions.js +7 -5
- package/dist-lib/lib/verkoop-order.d.ts +13 -0
- package/dist-lib/lib/verkoop-order.d.ts.map +1 -1
- package/dist-lib/lib/verkoop-order.js +23 -0
- package/package.json +2 -2
|
@@ -165,6 +165,7 @@ export declare const approveProposal: import("@tanstack/start-client-core").Opti
|
|
|
165
165
|
customerReference?: string | null | undefined;
|
|
166
166
|
momentKey?: string | null | undefined;
|
|
167
167
|
acceptMissingPrice?: boolean | undefined;
|
|
168
|
+
zeroPriceConfirmed?: boolean | undefined;
|
|
168
169
|
lateSignup?: {
|
|
169
170
|
reason: string;
|
|
170
171
|
} | null | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mailbox.functions.d.ts","sourceRoot":"","sources":["../../src/lib/mailbox.functions.ts"],"names":[],"mappings":"AA6BA,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;QAiBf,MAAM;cACM,MAAM;mBACI,MAAM;kBACE,MAAM,GAAG,IAAI;YACzB,MAAM,GAAG,IAAI;gBACL,MAAM,GAAG,IAAI;sBACD,MAAM,GAAG,IAAI;;;GAGnE,CAAC;AAWL,eAAO,MAAM,cAAc,2EACD,OAAO;;;;;;;;GA+B7B,CAAC;AAGL,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;GAWzB,CAAC;AAEL,+EAA+E;AAC/E,eAAO,MAAM,kBAAkB;;;;8CAEL,OAAO;;;;;GAK7B,CAAC;AAEL,iFAAiF;AACjF,eAAO,MAAM,8BAA8B;;;;;;;;;GAMvC,CAAC;AAML,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;GAWrB,CAAC;AAEL,eAAO,MAAM,YAAY;;;;8CAEC,OAAO;;;;GAa7B,CAAC;AAKL,eAAO,MAAM,aAAa;;;;8CAEA,OAAO;;;;GAuD7B,CAAC;AAIL,qEAAqE;AACrE,eAAO,MAAM,iBAAiB;;;;8CAEJ,OAAO;;;;GAyC7B,CAAC;AASL,eAAO,MAAM,uBAAuB;;;;;WAO+B,MAAM,GAAG,IAAI;;;;GAC5E,CAAC;AA2BL,eAAO,MAAM,eAAe;;;;8CAEF,OAAO
|
|
1
|
+
{"version":3,"file":"mailbox.functions.d.ts","sourceRoot":"","sources":["../../src/lib/mailbox.functions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { classifyVerkoopRefusal, existingOrderOrFilter, defaultNeedsSticker } from "./verkoop-order.js";
|
|
1
|
+
import { classifyVerkoopRefusal, existingOrderOrFilter, defaultNeedsSticker, checkLinePrices, zeroPriceFlag } from "./verkoop-order.js";
|
|
2
2
|
// Server functions voor de Mailbox-bestellingen module
|
|
3
3
|
import { createServerFn } from "@tanstack/react-start";
|
|
4
4
|
import { requireSupabaseAuth } from "../integrations/supabase/auth-middleware.js";
|
|
@@ -287,6 +287,7 @@ export const approveProposal = createServerFn({ method: "POST" })
|
|
|
287
287
|
customerReference: z.string().max(120).nullable().optional(),
|
|
288
288
|
momentKey: z.string().max(200).nullable().optional(),
|
|
289
289
|
acceptMissingPrice: z.boolean().optional(),
|
|
290
|
+
zeroPriceConfirmed: z.boolean().optional(),
|
|
290
291
|
lateSignup: z.object({ reason: z.string().min(3).max(500) }).nullable().optional(),
|
|
291
292
|
}).parse(input))
|
|
292
293
|
.handler(async ({ data, context }) => {
|
|
@@ -309,10 +310,10 @@ export const approveProposal = createServerFn({ method: "POST" })
|
|
|
309
310
|
}
|
|
310
311
|
customFields["load_carrier"] = loadCarrierType;
|
|
311
312
|
// ─── Prijs en referentie ────────────────────────────────────────────────
|
|
312
|
-
//
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
313
|
+
// Leeg/negatief altijd blokkeren; € 0 alleen met uitdrukkelijke bevestiging.
|
|
314
|
+
const priceCheck = checkLinePrices(data.lines.map((l) => l.unit_price), data.zeroPriceConfirmed === true);
|
|
315
|
+
if (!priceCheck.ok)
|
|
316
|
+
throw new Error(priceCheck.message);
|
|
316
317
|
const reference = (data.customerReference ?? "").trim();
|
|
317
318
|
if (reference)
|
|
318
319
|
customFields["customer_reference"] = reference;
|
|
@@ -391,6 +392,7 @@ export const approveProposal = createServerFn({ method: "POST" })
|
|
|
391
392
|
quantity_plants: Math.round(line.quantity ?? 0),
|
|
392
393
|
unit_price: line.unit_price,
|
|
393
394
|
needs_sticker: line.needs_sticker === true,
|
|
395
|
+
...(zeroPriceFlag(line.unit_price, data.zeroPriceConfirmed === true) ? { zero_price_confirmed: true } : {}),
|
|
394
396
|
})),
|
|
395
397
|
p_customer_reference: reference || null,
|
|
396
398
|
p_moment_key: data.momentKey ?? null,
|
|
@@ -11,4 +11,17 @@ export declare function defaultNeedsSticker(stickers: {
|
|
|
11
11
|
customer_key: string | null;
|
|
12
12
|
trade_item_key: string | null;
|
|
13
13
|
}[], customerId: string | null, productId: string | null): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Prijscontrole vóór Verkoop. Leeg blijft leeg (nooit stil 0); negatief altijd
|
|
16
|
+
* geweigerd; € 0 alleen met uitdrukkelijke bevestiging.
|
|
17
|
+
*/
|
|
18
|
+
export declare function checkLinePrices(prices: (number | null | undefined)[], zeroConfirmed: boolean): {
|
|
19
|
+
ok: true;
|
|
20
|
+
zeroLines: number;
|
|
21
|
+
} | {
|
|
22
|
+
ok: false;
|
|
23
|
+
message: string;
|
|
24
|
+
};
|
|
25
|
+
/** Vlag per regel voor p_lines: alleen bij exact € 0 én bevestiging. */
|
|
26
|
+
export declare function zeroPriceFlag(price: number | null | undefined, zeroConfirmed: boolean): boolean;
|
|
14
27
|
//# sourceMappingURL=verkoop-order.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verkoop-order.d.ts","sourceRoot":"","sources":["../../src/lib/verkoop-order.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAElF,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,aAAa,GAAG,OAAO,CAAC;AAEtE,yFAAyF;AACzF,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,GAAG,kBAAkB,CAK1E;AAED,8FAA8F;AAC9F,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,6FAA6F;AAC7F,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAE1G;AAED,mGAAmG;AACnG,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE;IAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAAE,EAC1E,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,SAAS,EAAE,MAAM,GAAG,IAAI,GACvB,OAAO,CAGT"}
|
|
1
|
+
{"version":3,"file":"verkoop-order.d.ts","sourceRoot":"","sources":["../../src/lib/verkoop-order.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAElF,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,aAAa,GAAG,OAAO,CAAC;AAEtE,yFAAyF;AACzF,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,GAAG,kBAAkB,CAK1E;AAED,8FAA8F;AAC9F,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,6FAA6F;AAC7F,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAE1G;AAED,mGAAmG;AACnG,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE;IAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAAE,EAC1E,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,SAAS,EAAE,MAAM,GAAG,IAAI,GACvB,OAAO,CAGT;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,EACrC,aAAa,EAAE,OAAO,GACrB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAUlE;AAED,wEAAwE;AACxE,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,aAAa,EAAE,OAAO,GAAG,OAAO,CAE/F"}
|
|
@@ -22,3 +22,26 @@ export function defaultNeedsSticker(stickers, customerId, productId) {
|
|
|
22
22
|
return false;
|
|
23
23
|
return stickers.some((s) => s.customer_key === customerId && s.trade_item_key === productId);
|
|
24
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* Prijscontrole vóór Verkoop. Leeg blijft leeg (nooit stil 0); negatief altijd
|
|
27
|
+
* geweigerd; € 0 alleen met uitdrukkelijke bevestiging.
|
|
28
|
+
*/
|
|
29
|
+
export function checkLinePrices(prices, zeroConfirmed) {
|
|
30
|
+
let zero = 0;
|
|
31
|
+
for (let i = 0; i < prices.length; i++) {
|
|
32
|
+
const p = prices[i];
|
|
33
|
+
if (p === null || p === undefined || Number.isNaN(p))
|
|
34
|
+
return { ok: false, message: `Regel ${i + 1}: prijs ontbreekt.` };
|
|
35
|
+
if (p < 0)
|
|
36
|
+
return { ok: false, message: `Regel ${i + 1}: prijs mag niet negatief zijn.` };
|
|
37
|
+
if (p === 0)
|
|
38
|
+
zero++;
|
|
39
|
+
}
|
|
40
|
+
if (zero > 0 && !zeroConfirmed)
|
|
41
|
+
return { ok: false, message: `${zero} regel(s) met prijs € 0: vul de prijs in of vink "Prijs € 0 klopt" aan.` };
|
|
42
|
+
return { ok: true, zeroLines: zero };
|
|
43
|
+
}
|
|
44
|
+
/** Vlag per regel voor p_lines: alleen bij exact € 0 én bevestiging. */
|
|
45
|
+
export function zeroPriceFlag(price, zeroConfirmed) {
|
|
46
|
+
return zeroConfirmed && price === 0;
|
|
47
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flowselections/mailbox-orders",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.42",
|
|
4
4
|
"private": false,
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"type": "module",
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"devDependencies": {
|
|
51
51
|
"@cloudflare/vite-plugin": "^1.25.5",
|
|
52
52
|
"@eslint/js": "^9.32.0",
|
|
53
|
-
"@flowselections/core": "1.0.
|
|
53
|
+
"@flowselections/core": "1.0.30",
|
|
54
54
|
"@lovable.dev/vite-tanstack-config": "2.26.5",
|
|
55
55
|
"@rsbuild/core": "^1.0.0",
|
|
56
56
|
"@tailwindcss/vite": "^4.2.1",
|