@flowselections/layout-maker 1.63.5 → 1.66.1
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/README.md +10 -4
- package/dist-lib/components/BedrijfsgegevensKaart.d.ts +3 -0
- package/dist-lib/components/BedrijfsgegevensKaart.d.ts.map +1 -0
- package/dist-lib/components/BedrijfsgegevensKaart.js +58 -0
- package/dist-lib/components/KlaarOmTePrintenBlok.d.ts +3 -0
- package/dist-lib/components/KlaarOmTePrintenBlok.d.ts.map +1 -0
- package/dist-lib/components/KlaarOmTePrintenBlok.js +69 -0
- package/dist-lib/components/LayoutsPage.d.ts.map +1 -1
- package/dist-lib/components/LayoutsPage.js +23 -3
- package/dist-lib/components/PakbonPreview.d.ts.map +1 -1
- package/dist-lib/components/PakbonPreview.js +10 -7
- package/dist-lib/components/PrintenPage.d.ts.map +1 -1
- package/dist-lib/components/PrintenPage.js +8 -2
- package/dist-lib/components/StandaardLayoutActies.d.ts +19 -0
- package/dist-lib/components/StandaardLayoutActies.d.ts.map +1 -0
- package/dist-lib/components/StandaardLayoutActies.js +105 -0
- package/dist-lib/index.d.ts +9 -2
- package/dist-lib/index.d.ts.map +1 -1
- package/dist-lib/index.js +10 -3
- package/dist-lib/integrations/supabase/types.d.ts +1078 -0
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/bedrijfsgegevens.d.ts +41 -0
- package/dist-lib/lib/bedrijfsgegevens.d.ts.map +1 -0
- package/dist-lib/lib/bedrijfsgegevens.functions.d.ts +41 -0
- package/dist-lib/lib/bedrijfsgegevens.functions.d.ts.map +1 -0
- package/dist-lib/lib/bedrijfsgegevens.functions.js +75 -0
- package/dist-lib/lib/bedrijfsgegevens.js +126 -0
- package/dist-lib/lib/documentTypes.d.ts +10 -0
- package/dist-lib/lib/documentTypes.d.ts.map +1 -1
- package/dist-lib/lib/documentTypes.js +8 -0
- package/dist-lib/lib/klaarOmTePrinten.d.ts +39 -0
- package/dist-lib/lib/klaarOmTePrinten.d.ts.map +1 -0
- package/dist-lib/lib/klaarOmTePrinten.js +65 -0
- package/dist-lib/lib/layoutStandaarden.d.ts +19 -0
- package/dist-lib/lib/layoutStandaarden.d.ts.map +1 -0
- package/dist-lib/lib/layoutStandaarden.js +23 -0
- package/dist-lib/lib/orderData.server.d.ts.map +1 -1
- package/dist-lib/lib/orderData.server.js +163 -0
- package/dist-lib/lib/pakbonBuilder.d.ts +30 -0
- package/dist-lib/lib/pakbonBuilder.d.ts.map +1 -1
- package/dist-lib/lib/pakbonBuilder.js +90 -2
- package/dist-lib/lib/pakbonContent.d.ts.map +1 -1
- package/dist-lib/lib/pakbonContent.js +15 -8
- package/dist-lib/lib/pakbonHtml.d.ts.map +1 -1
- package/dist-lib/lib/pakbonHtml.js +24 -7
- package/dist-lib/lib/printQueue.server.d.ts.map +1 -1
- package/dist-lib/lib/printQueue.server.js +33 -2
- package/dist-lib/lib/printService.functions.d.ts +1 -1
- package/dist-lib/lib/printnodeWebhookBeheer.server.d.ts +1 -1
- package/dist-lib/lib/shellPoort.d.ts +2 -2
- package/dist-lib/lib/shellPoort.d.ts.map +1 -1
- package/dist-lib/lib/shellPoort.js +3 -2
- package/dist-lib/lib/standaardLayouts.server.d.ts +7 -1
- package/dist-lib/lib/standaardLayouts.server.d.ts.map +1 -1
- package/dist-lib/lib/standaardLayouts.server.js +52 -54
- package/dist-lib/lib/useDocumentData.d.ts.map +1 -1
- package/dist-lib/lib/useDocumentData.js +9 -5
- package/dist-lib/lib/versie.generated.d.ts +2 -0
- package/dist-lib/lib/versie.generated.d.ts.map +1 -0
- package/dist-lib/lib/versie.generated.js +2 -0
- package/package.json +9 -4
- package/sql/print-schema.sql +3205 -0
|
@@ -222,6 +222,129 @@ export async function laadPakbonData(db, opties) {
|
|
|
222
222
|
stickerUrls.set(String(s["product_id"]), url);
|
|
223
223
|
}
|
|
224
224
|
}
|
|
225
|
+
// --- samenstelling (halffabricaten) ----------------------------------------
|
|
226
|
+
// Alleen lezen uit `product_bom_items`. Een ouder kan gekoppeld zijn op
|
|
227
|
+
// product-id of op Floriday-handelsartikel-id; beide vormen worden gelezen.
|
|
228
|
+
const floridayVan = (p) => {
|
|
229
|
+
if (!p)
|
|
230
|
+
return "";
|
|
231
|
+
const extra = (p["custom_fields"] ?? {});
|
|
232
|
+
return String(p["floriday_trade_item_id"] ?? p["trade_item_key"] ?? extra["floriday_id"] ?? "");
|
|
233
|
+
};
|
|
234
|
+
const ouderFloridayIds = uniek(Array.from(producten.values()).map((p) => floridayVan(p)));
|
|
235
|
+
const bomPerOuder = new Map(); // sleutel: "p:<id>" of "f:<floridayId>"
|
|
236
|
+
{
|
|
237
|
+
const rijen = [];
|
|
238
|
+
if (productIds.length)
|
|
239
|
+
rijen.push(...arr(await veilig(() => db.from("product_bom_items").select("*").in("parent_product_id", productIds))));
|
|
240
|
+
if (ouderFloridayIds.length)
|
|
241
|
+
rijen.push(...arr(await veilig(() => db
|
|
242
|
+
.from("product_bom_items")
|
|
243
|
+
.select("*")
|
|
244
|
+
.in("parent_trade_item_floriday_id", ouderFloridayIds))));
|
|
245
|
+
const gezien = new Set();
|
|
246
|
+
for (const r of rijen) {
|
|
247
|
+
const id = String(r["id"] ?? "");
|
|
248
|
+
if (gezien.has(id))
|
|
249
|
+
continue;
|
|
250
|
+
gezien.add(id);
|
|
251
|
+
const sleutel = r["parent_product_id"]
|
|
252
|
+
? `p:${r["parent_product_id"]}`
|
|
253
|
+
: `f:${r["parent_trade_item_floriday_id"] ?? ""}`;
|
|
254
|
+
bomPerOuder.set(sleutel, [...(bomPerOuder.get(sleutel) ?? []), r]);
|
|
255
|
+
}
|
|
256
|
+
for (const lijstje of bomPerOuder.values())
|
|
257
|
+
lijstje.sort((a, b) => num(a["sort_order"]) - num(b["sort_order"]));
|
|
258
|
+
}
|
|
259
|
+
const alleBom = Array.from(bomPerOuder.values()).flat();
|
|
260
|
+
// Onderdelen ophalen als product, zodat kleur/potmaat dezelfde verrijking krijgen.
|
|
261
|
+
const onderdeelProductIds = uniek(alleBom.map((r) => r["component_product_id"])).filter((id) => !producten.has(id));
|
|
262
|
+
if (onderdeelProductIds.length) {
|
|
263
|
+
const data = await veilig(() => db
|
|
264
|
+
.from("products")
|
|
265
|
+
.select("id, product, article_number, custom_fields, floriday_trade_item_id, trade_item_key")
|
|
266
|
+
.in("id", onderdeelProductIds));
|
|
267
|
+
for (const p of arr(data))
|
|
268
|
+
producten.set(String(p["id"]), p);
|
|
269
|
+
}
|
|
270
|
+
const onderdeelFloridayIds = uniek(alleBom.filter((r) => !r["component_product_id"]).map((r) => r["component_trade_item_floriday_id"]));
|
|
271
|
+
const productOpFloriday = new Map();
|
|
272
|
+
if (onderdeelFloridayIds.length) {
|
|
273
|
+
const data = await veilig(() => db
|
|
274
|
+
.from("products")
|
|
275
|
+
.select("id, product, article_number, custom_fields, floriday_trade_item_id, trade_item_key")
|
|
276
|
+
.in("floriday_trade_item_id", onderdeelFloridayIds));
|
|
277
|
+
for (const p of arr(data)) {
|
|
278
|
+
producten.set(String(p["id"]), p);
|
|
279
|
+
productOpFloriday.set(String(p["floriday_trade_item_id"]), String(p["id"]));
|
|
280
|
+
}
|
|
281
|
+
// Onderdelen zonder eigen product: naam uit de Floriday-artikelcache.
|
|
282
|
+
const zonder = onderdeelFloridayIds.filter((fid) => !productOpFloriday.has(fid));
|
|
283
|
+
if (zonder.length) {
|
|
284
|
+
const items = arr(await veilig(() => db.from("floriday_trade_items_cache").select("floriday_id, data").in("floriday_id", zonder)));
|
|
285
|
+
for (const it of items) {
|
|
286
|
+
const d = (it["data"] ?? {});
|
|
287
|
+
const fid = String(it["floriday_id"]);
|
|
288
|
+
producten.set(`fl:${fid}`, {
|
|
289
|
+
id: `fl:${fid}`,
|
|
290
|
+
product: taalTekst(d["tradeItemName"]) || taalTekst(d["name"]) || "",
|
|
291
|
+
floriday_trade_item_id: fid,
|
|
292
|
+
custom_fields: {},
|
|
293
|
+
});
|
|
294
|
+
productOpFloriday.set(fid, `fl:${fid}`);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
// --- stickerinformatie ----------------------------------------------------
|
|
299
|
+
// 1. Floriday-klantstickers van de order van de regel (match op
|
|
300
|
+
// verkooporder-id + handelsartikel-id; should_be_printed bepaalt Ja/Nee).
|
|
301
|
+
// 2. Anders `customer_product_stickers` (klant + handelsartikel) → Ja.
|
|
302
|
+
// 3. Anders onbekend ("–"). Nooit op naam matchen.
|
|
303
|
+
const orderPerId = new Map(orders.map((o) => [String(o["id"]), o]));
|
|
304
|
+
const floridayOrderIds = uniek(orders.map((o) => o["floriday_sales_order_id"]));
|
|
305
|
+
const floridayStickers = new Map(); // salesOrder → tradeItem → print
|
|
306
|
+
if (floridayOrderIds.length) {
|
|
307
|
+
const rijen = arr(await veilig(() => db
|
|
308
|
+
.from("floriday_customer_stickers_cache")
|
|
309
|
+
.select("sales_order_id, trade_item_id, should_be_printed, is_deleted")
|
|
310
|
+
.in("sales_order_id", floridayOrderIds)));
|
|
311
|
+
for (const r of rijen) {
|
|
312
|
+
if (r["is_deleted"] === true)
|
|
313
|
+
continue;
|
|
314
|
+
const so = String(r["sales_order_id"] ?? "");
|
|
315
|
+
const m = floridayStickers.get(so) ?? new Map();
|
|
316
|
+
const ti = String(r["trade_item_id"] ?? "");
|
|
317
|
+
m.set(ti, (m.get(ti) ?? false) || r["should_be_printed"] !== false);
|
|
318
|
+
floridayStickers.set(so, m);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
const klantSleutels = uniek(orders.map((o) => o["customer_id"]));
|
|
322
|
+
const klantStickers = new Set(); // "<klant>|<artikel>"
|
|
323
|
+
if (klantSleutels.length) {
|
|
324
|
+
const rijen = arr(await veilig(() => db
|
|
325
|
+
.from("customer_product_stickers")
|
|
326
|
+
.select("customer_key, trade_item_key")
|
|
327
|
+
.in("customer_key", klantSleutels)));
|
|
328
|
+
for (const r of rijen)
|
|
329
|
+
klantStickers.add(`${r["customer_key"]}|${r["trade_item_key"]}`);
|
|
330
|
+
}
|
|
331
|
+
const stickerVoor = (orderId, p) => {
|
|
332
|
+
if (!p)
|
|
333
|
+
return "–";
|
|
334
|
+
const order = orderPerId.get(orderId);
|
|
335
|
+
const fid = floridayVan(p);
|
|
336
|
+
const so = String(order?.["floriday_sales_order_id"] ?? "");
|
|
337
|
+
const opOrder = so ? floridayStickers.get(so) : undefined;
|
|
338
|
+
if (opOrder && fid)
|
|
339
|
+
return opOrder.get(fid) === true ? "Ja" : "Nee";
|
|
340
|
+
const klant = String(order?.["customer_id"] ?? "");
|
|
341
|
+
if (klant) {
|
|
342
|
+
const sleutels = [fid, String(p["trade_item_key"] ?? ""), String(p["id"] ?? "")].filter(Boolean);
|
|
343
|
+
if (sleutels.some((k) => klantStickers.has(`${klant}|${k}`)))
|
|
344
|
+
return "Ja";
|
|
345
|
+
}
|
|
346
|
+
return "–";
|
|
347
|
+
};
|
|
225
348
|
// --- verrijking vanuit Floriday-artikelcache ------------------------------
|
|
226
349
|
// `products.unit` is vrijwel altijd "stuks" en zegt niets over het fust.
|
|
227
350
|
// De echte fustsoort, potmaat en kleur staan in de Floriday-cache:
|
|
@@ -303,6 +426,44 @@ export async function laadPakbonData(db, opties) {
|
|
|
303
426
|
p["custom_fields"] = extra;
|
|
304
427
|
}
|
|
305
428
|
}
|
|
429
|
+
const orderVan = (bron) => String(bron["order_id"] ??
|
|
430
|
+
regelPerId.get(String(bron["order_item_id"] ?? ""))?.["order_id"] ??
|
|
431
|
+
karrenRijen.find((k) => k["id"] === bron["cart_id"])?.["order_id"] ??
|
|
432
|
+
(orders.length === 1 ? orders[0]["id"] : ""));
|
|
433
|
+
const kenmerk = (extra, sleutels) => {
|
|
434
|
+
for (const k of sleutels) {
|
|
435
|
+
const w = extra[k];
|
|
436
|
+
if (w != null && String(w).trim())
|
|
437
|
+
return String(w);
|
|
438
|
+
}
|
|
439
|
+
return "";
|
|
440
|
+
};
|
|
441
|
+
const onderdelenVoor = (bron, p, aantal) => {
|
|
442
|
+
const id = String(bron["product_id"] ?? "");
|
|
443
|
+
const fid = floridayVan(p);
|
|
444
|
+
const rijen = bomPerOuder.get(`p:${id}`) ?? (fid ? bomPerOuder.get(`f:${fid}`) : undefined);
|
|
445
|
+
if (!rijen?.length)
|
|
446
|
+
return undefined;
|
|
447
|
+
const orderId = orderVan(bron);
|
|
448
|
+
return rijen.map((r) => {
|
|
449
|
+
const cid = r["component_product_id"]
|
|
450
|
+
? String(r["component_product_id"])
|
|
451
|
+
: productOpFloriday.get(String(r["component_trade_item_floriday_id"] ?? "")) ?? "";
|
|
452
|
+
const c = producten.get(cid);
|
|
453
|
+
const extra = (c?.["custom_fields"] ?? {});
|
|
454
|
+
const perStuk = num(r["quantity"]);
|
|
455
|
+
return {
|
|
456
|
+
artikelnaam: taalTekst(c?.["product"]) || "",
|
|
457
|
+
kleur: kenmerk(extra, ["kleur", "Kleur", "colour", "color", "__kleur"]),
|
|
458
|
+
potmaat: kenmerk(extra, ["potmaat", "Potmaat", "pot_size", "potSize", "potmaat_cm", "maat", "__potmaat"]),
|
|
459
|
+
per_stuk: perStuk,
|
|
460
|
+
aantal: perStuk * (aantal || 0),
|
|
461
|
+
sticker: stickerVoor(orderId, c ?? (r["component_trade_item_floriday_id"]
|
|
462
|
+
? { floriday_trade_item_id: r["component_trade_item_floriday_id"] }
|
|
463
|
+
: undefined)),
|
|
464
|
+
};
|
|
465
|
+
});
|
|
466
|
+
};
|
|
306
467
|
const maakProduct = (bron, aantalPlanten, fusten, perFust) => {
|
|
307
468
|
const p = producten.get(String(bron["product_id"] ?? "")) ?? {};
|
|
308
469
|
const extra = (p["custom_fields"] ?? {});
|
|
@@ -340,6 +501,8 @@ export async function laadPakbonData(db, opties) {
|
|
|
340
501
|
extra["__fustsoort"] ??
|
|
341
502
|
(unit && unit.toLowerCase() !== "stuks" ? unit : "Niet ingesteld")),
|
|
342
503
|
planten_per_fust: perFust,
|
|
504
|
+
sticker: stickerVoor(orderVan(bron), p),
|
|
505
|
+
onderdelen: onderdelenVoor(bron, p, aantalPlanten),
|
|
343
506
|
};
|
|
344
507
|
};
|
|
345
508
|
// --- karren met lagen -----------------------------------------------------
|
|
@@ -42,6 +42,11 @@ export declare const BESCHIKBARE_KOLOMMEN: {
|
|
|
42
42
|
key: string;
|
|
43
43
|
label: string;
|
|
44
44
|
}[];
|
|
45
|
+
export declare const ONDERDEEL_VELD_OPTIES: {
|
|
46
|
+
value: string;
|
|
47
|
+
label: string;
|
|
48
|
+
}[];
|
|
49
|
+
export declare const ONDERDEEL_VELDEN_STANDAARD: string[];
|
|
45
50
|
export declare function kolomLabel(key: string): string;
|
|
46
51
|
export declare function nieuweKolom(key: string): PakbonKolom;
|
|
47
52
|
/**
|
|
@@ -147,7 +152,32 @@ export interface DemoProduct {
|
|
|
147
152
|
fust_aantal: number;
|
|
148
153
|
fustsoort: string;
|
|
149
154
|
planten_per_fust: number;
|
|
155
|
+
/** "Ja", "Nee" of "–" (onbekend). */
|
|
156
|
+
sticker?: string;
|
|
157
|
+
/** Onderdelen (halffabricaten) van een samengesteld product. */
|
|
158
|
+
onderdelen?: DemoProductOnderdeel[];
|
|
159
|
+
}
|
|
160
|
+
export interface DemoProductOnderdeel {
|
|
161
|
+
artikelnaam: string;
|
|
162
|
+
kleur: string;
|
|
163
|
+
potmaat: string;
|
|
164
|
+
/** aantal per stuk van het samengestelde product */
|
|
165
|
+
per_stuk: number;
|
|
166
|
+
/** totaal voor deze regel (per_stuk × aantal hoofdproduct) */
|
|
167
|
+
aantal: number;
|
|
168
|
+
sticker: string;
|
|
150
169
|
}
|
|
170
|
+
/** Staat de samenstelling aan voor deze productsectie? (standaard aan) */
|
|
171
|
+
export declare function samenstellingTonen(opties: Record<string, unknown> | undefined): boolean;
|
|
172
|
+
export declare function onderdeelVelden(opties: Record<string, unknown> | undefined): string[];
|
|
173
|
+
/**
|
|
174
|
+
* Cellen voor één onderdeelregel, uitgelijnd op de kolommen van de hoofdregel.
|
|
175
|
+
* Gekozen onderdeelgegevens zonder eigen kolom in de hoofdtabel worden achter
|
|
176
|
+
* de naam gezet, zodat niets wegvalt. Lege waarden blijven leeg.
|
|
177
|
+
*/
|
|
178
|
+
export declare function onderdeelCellen(o: DemoProductOnderdeel, velden: string[], gekozen: string[]): string[];
|
|
179
|
+
/** Telt een product op bij een gelijk product (groeperen), incl. onderdelen. */
|
|
180
|
+
export declare function voegProductSamen(doel: DemoProduct, p: DemoProduct): void;
|
|
151
181
|
export interface DemoLaag {
|
|
152
182
|
laagnummer: number;
|
|
153
183
|
belading: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pakbonBuilder.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonBuilder.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN,kBAAkB,GAClB,eAAe,GACf,cAAc,GACd,cAAc,GACd,iBAAiB,GACjB,qBAAqB,GACrB,aAAa,GACb,aAAa,GACb,YAAY,GACZ,aAAa,GACb,QAAQ,GACR,OAAO,GACP,WAAW,GACX,QAAQ,GACR,SAAS,GACT,cAAc,GACd,WAAW,GACX,QAAQ,GACR,SAAS,GACT,YAAY,CAAC;AAEjB,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,OAAO,GAAG,MAAM,GAAG,WAAW,CAAC;IAClE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,gBAAgB,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,SAAS,EAAE,cAAc,EAAE,CAAC;CAC7B;AAED,yEAAyE;AACzE,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;CAC1C;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,0DAA0D;IAC1D,IAAI,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;CAClC;AAID,eAAO,MAAM,oBAAoB,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"pakbonBuilder.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,7 +21,16 @@ export const BESCHIKBARE_KOLOMMEN = [
|
|
|
21
21
|
{ key: "fust_aantal", label: "Aantal fusten" },
|
|
22
22
|
{ key: "fustsoort", label: "Fustsoort" },
|
|
23
23
|
{ key: "planten_per_fust", label: "Planten per fust" },
|
|
24
|
+
{ key: "sticker", label: "Sticker" },
|
|
24
25
|
];
|
|
26
|
+
export const ONDERDEEL_VELD_OPTIES = [
|
|
27
|
+
{ value: "artikelnaam", label: "Productnaam" },
|
|
28
|
+
{ value: "kleur", label: "Kleur" },
|
|
29
|
+
{ value: "potmaat", label: "Potmaat" },
|
|
30
|
+
{ value: "aantal", label: "Aantal" },
|
|
31
|
+
{ value: "sticker", label: "Sticker" },
|
|
32
|
+
];
|
|
33
|
+
export const ONDERDEEL_VELDEN_STANDAARD = ["artikelnaam", "kleur", "potmaat", "aantal"];
|
|
25
34
|
export function kolomLabel(key) {
|
|
26
35
|
return BESCHIKBARE_KOLOMMEN.find((k) => k.key === key)?.label ?? key;
|
|
27
36
|
}
|
|
@@ -58,6 +67,7 @@ export function productVeldBreedtes(velden) {
|
|
|
58
67
|
fust_aantal: 10,
|
|
59
68
|
fustsoort: 12,
|
|
60
69
|
planten_per_fust: 11,
|
|
70
|
+
sticker: 8,
|
|
61
71
|
foto: 9,
|
|
62
72
|
qrcode: 9,
|
|
63
73
|
};
|
|
@@ -547,6 +557,20 @@ export const SECTIE_REGISTER = [
|
|
|
547
557
|
{ value: "qrcode", label: "QR-code" },
|
|
548
558
|
]),
|
|
549
559
|
},
|
|
560
|
+
{
|
|
561
|
+
key: "toonSamenstelling",
|
|
562
|
+
label: "Samenstelling tonen",
|
|
563
|
+
type: "schakelaar",
|
|
564
|
+
standaard: true,
|
|
565
|
+
hint: "Toont onder een samengesteld product uit welke onderdelen het bestaat.",
|
|
566
|
+
},
|
|
567
|
+
{
|
|
568
|
+
key: "onderdeelVelden",
|
|
569
|
+
label: "Gegevens per onderdeel (halffabricaat)",
|
|
570
|
+
type: "meerkeuze",
|
|
571
|
+
standaard: ONDERDEEL_VELDEN_STANDAARD,
|
|
572
|
+
opties: ONDERDEEL_VELD_OPTIES,
|
|
573
|
+
},
|
|
550
574
|
{ key: "groeperen", label: "Gelijke producten groeperen", type: "schakelaar", standaard: false },
|
|
551
575
|
{
|
|
552
576
|
key: "kop_eenmalig",
|
|
@@ -864,6 +888,59 @@ export function sectieOnderdruktVoorVariant(type, methode, variant) {
|
|
|
864
888
|
return type === "pickmethode";
|
|
865
889
|
return type === "pickmethode" ? false : [...KAR_SECTIES, "orderregels"].includes(type);
|
|
866
890
|
}
|
|
891
|
+
/** Staat de samenstelling aan voor deze productsectie? (standaard aan) */
|
|
892
|
+
export function samenstellingTonen(opties) {
|
|
893
|
+
return opties?.["toonSamenstelling"] !== false;
|
|
894
|
+
}
|
|
895
|
+
export function onderdeelVelden(opties) {
|
|
896
|
+
const v = opties?.["onderdeelVelden"];
|
|
897
|
+
return Array.isArray(v) ? v.map(String) : ONDERDEEL_VELDEN_STANDAARD;
|
|
898
|
+
}
|
|
899
|
+
/**
|
|
900
|
+
* Cellen voor één onderdeelregel, uitgelijnd op de kolommen van de hoofdregel.
|
|
901
|
+
* Gekozen onderdeelgegevens zonder eigen kolom in de hoofdtabel worden achter
|
|
902
|
+
* de naam gezet, zodat niets wegvalt. Lege waarden blijven leeg.
|
|
903
|
+
*/
|
|
904
|
+
export function onderdeelCellen(o, velden, gekozen) {
|
|
905
|
+
const waarde = (v) => {
|
|
906
|
+
if (!gekozen.includes(v))
|
|
907
|
+
return "";
|
|
908
|
+
if (v === "aantal")
|
|
909
|
+
return o.aantal ? String(o.aantal) : "";
|
|
910
|
+
return String(o[v] ?? "");
|
|
911
|
+
};
|
|
912
|
+
const naamKolom = velden.includes("artikelnaam")
|
|
913
|
+
? "artikelnaam"
|
|
914
|
+
: velden.find((v) => v !== "foto" && v !== "qrcode") ?? velden[0];
|
|
915
|
+
const zonderKolom = gekozen.filter((v) => !velden.includes(v) && v !== "artikelnaam");
|
|
916
|
+
return velden.map((v) => {
|
|
917
|
+
if (v === naamKolom) {
|
|
918
|
+
const delen = [];
|
|
919
|
+
const naam = gekozen.includes("artikelnaam") ? o.artikelnaam : "";
|
|
920
|
+
const kop = `↳ ${o.per_stuk ? `${o.per_stuk}× ` : ""}${naam}`.trimEnd();
|
|
921
|
+
delen.push(kop);
|
|
922
|
+
for (const extra of zonderKolom) {
|
|
923
|
+
const w = waarde(extra);
|
|
924
|
+
if (!w)
|
|
925
|
+
continue;
|
|
926
|
+
delen.push(extra === "sticker" ? `Sticker: ${w}` : extra === "aantal" ? `${w} st` : w);
|
|
927
|
+
}
|
|
928
|
+
return delen.join(" · ");
|
|
929
|
+
}
|
|
930
|
+
return waarde(v);
|
|
931
|
+
});
|
|
932
|
+
}
|
|
933
|
+
/** Telt een product op bij een gelijk product (groeperen), incl. onderdelen. */
|
|
934
|
+
export function voegProductSamen(doel, p) {
|
|
935
|
+
doel.aantal += p.aantal;
|
|
936
|
+
doel.fust_aantal += p.fust_aantal;
|
|
937
|
+
if (doel.onderdelen && p.onderdelen) {
|
|
938
|
+
doel.onderdelen = doel.onderdelen.map((o, i) => {
|
|
939
|
+
const ander = p.onderdelen[i]?.artikelnaam === o.artikelnaam ? p.onderdelen[i] : undefined;
|
|
940
|
+
return ander ? { ...o, aantal: o.aantal + ander.aantal } : o;
|
|
941
|
+
});
|
|
942
|
+
}
|
|
943
|
+
}
|
|
867
944
|
/**
|
|
868
945
|
* Bepaalt de canonieke positie binnen de reeks volle karren. De Engine kan in
|
|
869
946
|
* cartTotal ook een afsluitende deelkar meetellen en stuurde bij oudere K2-jobs
|
|
@@ -973,7 +1050,10 @@ export const DEMO_ORDER = {
|
|
|
973
1050
|
gewicht: "48 kg",
|
|
974
1051
|
opmerking: "Onderin plaatsen",
|
|
975
1052
|
producten: [
|
|
976
|
-
|
|
1053
|
+
{
|
|
1054
|
+
...p("A1001", "Phalaenopsis wit 2-tak", "12 cm", 96, "A-03", "Orchidee", "Wit"),
|
|
1055
|
+
sticker: "Ja",
|
|
1056
|
+
},
|
|
977
1057
|
p("A1042", "Phalaenopsis roze 2-tak", "12 cm", 48, "A-04", "Orchidee", "Roze"),
|
|
978
1058
|
],
|
|
979
1059
|
fusten: [
|
|
@@ -1009,7 +1089,15 @@ export const DEMO_ORDER = {
|
|
|
1009
1089
|
gewicht: "38 kg",
|
|
1010
1090
|
opmerking: "",
|
|
1011
1091
|
producten: [
|
|
1012
|
-
|
|
1092
|
+
{
|
|
1093
|
+
...p("C3300", "Pernettya mix 12", "12 cm", 10, "C-02", "Bloeiend", "Mix"),
|
|
1094
|
+
sticker: "Nee",
|
|
1095
|
+
onderdelen: [
|
|
1096
|
+
{ artikelnaam: "Pernettya wit", kleur: "Wit", potmaat: "9 cm", per_stuk: 2, aantal: 20, sticker: "Ja" },
|
|
1097
|
+
{ artikelnaam: "Pernettya rood", kleur: "Rood", potmaat: "9 cm", per_stuk: 5, aantal: 50, sticker: "Ja" },
|
|
1098
|
+
{ artikelnaam: "Pernettya roze", kleur: "Roze", potmaat: "9 cm", per_stuk: 5, aantal: 50, sticker: "Nee" },
|
|
1099
|
+
],
|
|
1100
|
+
},
|
|
1013
1101
|
p("C3311", "Succulenten mix", "9 cm", 80, "C-05", "Bloeiend", "Mix"),
|
|
1014
1102
|
],
|
|
1015
1103
|
fusten: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pakbonContent.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonContent.ts"],"names":[],"mappings":"AASA,OAAO,
|
|
1
|
+
{"version":3,"file":"pakbonContent.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonContent.ts"],"names":[],"mappings":"AASA,OAAO,EAyBL,KAAK,SAAS,EAEd,KAAK,YAAY,EAGlB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAe,KAAK,IAAI,EAAmC,MAAM,kBAAkB,CAAC;AAE3F,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,2EAA2E;AAC3E,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC;IAC/B,KAAK,EAAE,eAAe,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,6EAA6E;IAC7E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7B,CAAC;AAinBF,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,SAAS,EAAE,IAAI,EAAE,CAAC;IAClB,UAAU,EAAE,IAAI,EAAE,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,sDAAsD;AACtD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,GAAG,YAAY,CA+EvE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,iBAAiB,GAAG,YAAY,CAmB9E"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
// layout-engine (pakbonDocument.ts) bepaalt WAAR het terechtkomt. Er is geen
|
|
7
7
|
// tweede plek meer waar pakboninhoud wordt samengesteld.
|
|
8
8
|
// ============================================================================
|
|
9
|
-
import { beperkTotDeelkar, conditieContext, deelkarVoorbeeldOrder, fustVerzamellijst, groepeerIdentiekeKarren, groepeerIdentiekeLagen, karKopNummer, karBundelTekst, laagBundelTekst, leesPakbonConfig, pakbonLayoutVariant, pickMethode, productVeldBreedtes, sectieOnderdruktVoorVariant, sectieZichtbaar, sorteerProducten, totalen, vulVeldcodes, } from "./pakbonBuilder.js";
|
|
9
|
+
import { beperkTotDeelkar, conditieContext, deelkarVoorbeeldOrder, fustVerzamellijst, groepeerIdentiekeKarren, groepeerIdentiekeLagen, karKopNummer, karBundelTekst, laagBundelTekst, leesPakbonConfig, pakbonLayoutVariant, pickMethode, productVeldBreedtes, sectieOnderdruktVoorVariant, sectieZichtbaar, sorteerProducten, onderdeelCellen, onderdeelVelden, samenstellingTonen, voegProductSamen, totalen, vulVeldcodes, } from "./pakbonBuilder.js";
|
|
10
10
|
import { karMetadata } from "./pakbonPresentation.js";
|
|
11
11
|
import { KLEUR_GRIJS } from "./pakbonDocument.js";
|
|
12
12
|
const arr = (v) => (Array.isArray(v) ? v : []);
|
|
@@ -33,6 +33,7 @@ const PRODUCT_LABELS = {
|
|
|
33
33
|
fust_aantal: "Aantal fusten",
|
|
34
34
|
fustsoort: "Fustsoort",
|
|
35
35
|
planten_per_fust: "Planten per fust",
|
|
36
|
+
sticker: "Sticker",
|
|
36
37
|
};
|
|
37
38
|
const FUST_KOLOM_LABELS = {
|
|
38
39
|
artikelnummer: "Artikel",
|
|
@@ -62,7 +63,7 @@ function sectitel(tekst, basis) {
|
|
|
62
63
|
},
|
|
63
64
|
];
|
|
64
65
|
}
|
|
65
|
-
function productTabel(velden, producten, toonKop, basis) {
|
|
66
|
+
function productTabel(velden, producten, toonKop, basis, onderdeelKolommen = null) {
|
|
66
67
|
if (!velden.length || !producten.length)
|
|
67
68
|
return null;
|
|
68
69
|
const breedtes = productVeldBreedtes(velden);
|
|
@@ -74,7 +75,12 @@ function productTabel(velden, producten, toonKop, basis) {
|
|
|
74
75
|
return {
|
|
75
76
|
kind: "tabel",
|
|
76
77
|
kolommen,
|
|
77
|
-
rijen: producten.
|
|
78
|
+
rijen: producten.flatMap((p) => [
|
|
79
|
+
velden.map((v) => cel(p, v)),
|
|
80
|
+
...(onderdeelKolommen && p.onderdelen?.length
|
|
81
|
+
? p.onderdelen.map((o) => onderdeelCellen(o, velden, onderdeelKolommen))
|
|
82
|
+
: []),
|
|
83
|
+
]),
|
|
78
84
|
toonKop,
|
|
79
85
|
groottePt: basis,
|
|
80
86
|
randen: "onder",
|
|
@@ -193,10 +199,8 @@ function karBlokFlow(s, kar, lagen, zoek, omkaderd, aantal, basis) {
|
|
|
193
199
|
const map = new Map();
|
|
194
200
|
for (const p of producten) {
|
|
195
201
|
const b = map.get(p.artikelnummer);
|
|
196
|
-
if (b)
|
|
197
|
-
b
|
|
198
|
-
b.fust_aantal += p.fust_aantal;
|
|
199
|
-
}
|
|
202
|
+
if (b)
|
|
203
|
+
voegProductSamen(b, p);
|
|
200
204
|
else
|
|
201
205
|
map.set(p.artikelnummer, { ...p });
|
|
202
206
|
}
|
|
@@ -204,7 +208,10 @@ function karBlokFlow(s, kar, lagen, zoek, omkaderd, aantal, basis) {
|
|
|
204
208
|
}
|
|
205
209
|
const toonKop = opt(productSectie, "toonKoppen", true) !== false &&
|
|
206
210
|
(index === 0 || opt(productSectie, "kop_eenmalig", true) === false);
|
|
207
|
-
const
|
|
211
|
+
const sub = samenstellingTonen(productSectie.opties)
|
|
212
|
+
? onderdeelVelden(productSectie.opties)
|
|
213
|
+
: null;
|
|
214
|
+
const tabel = productTabel(velden2, producten, toonKop, basis, sub);
|
|
208
215
|
if (tabel)
|
|
209
216
|
kinderen.push(tabel);
|
|
210
217
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pakbonHtml.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonHtml.ts"],"names":[],"mappings":"AAUA,OAAO,
|
|
1
|
+
{"version":3,"file":"pakbonHtml.d.ts","sourceRoot":"","sources":["../../src/lib/pakbonHtml.ts"],"names":[],"mappings":"AAUA,OAAO,EA6BL,KAAK,SAAS,EAEd,KAAK,YAAY,EAGlB,MAAM,iBAAiB,CAAC;AAMzB,2FAA2F;AAC3F,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE;QACL,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0BAA0B;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oEAAoE;IACpE,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,sEAAsE;IACtE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;OAGG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAWD,wBAAgB,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAKtC;AAyBD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAqF3D;AAuFD,mEAAmE;AACnE,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAGlD;AAwpBD,oEAAoE;AACpE,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,GAAG,OAAO,EAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,kBAAuB,GAC9B,MAAM,CA8DR;AAgBD,gEAAgE;AAChE,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,YAAY,GAAG,OAAO,EAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,kBAAuB,GAC9B,MAAM,CAkFR;AAED,iEAAiE;AACjE,wBAAgB,oBAAoB,IAAI,WAAW,CAElD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,YAAY,GAAG,OAAO,EAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,kBAAuB,GAC9B,IAAI,CAsCN;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,YAAY,GAAG,OAAO,EAC9B,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,kBAAuB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAUf"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
// layoutconfiguratie en de echte ordergegevens. Zo tonen het live voorbeeld en
|
|
8
8
|
// de afdruk altijd exact dezelfde secties — inclusief de orderregels.
|
|
9
9
|
// ============================================================================
|
|
10
|
-
import { DEMO_ORDER, deelkarVoorbeeldOrder, conditieContext, groepeerIdentiekeKarren, groepeerIdentiekeLagen, karBundelTekst, fustVerzamellijst, fustRegels, FUSTREGEL_LABELS, FUSTREGEL_RECHTS, pickMethode, pakbonLayoutVariant, productVeldBreedtes, sectieOnderdruktVoorVariant, karKopNummer, laagBundelTekst, leesPakbonConfig, sectieZichtbaar, sorteerProducten, totalen, vulVeldcodes, } from "./pakbonBuilder.js";
|
|
10
|
+
import { DEMO_ORDER, deelkarVoorbeeldOrder, conditieContext, groepeerIdentiekeKarren, groepeerIdentiekeLagen, karBundelTekst, fustVerzamellijst, fustRegels, FUSTREGEL_LABELS, FUSTREGEL_RECHTS, pickMethode, pakbonLayoutVariant, productVeldBreedtes, sectieOnderdruktVoorVariant, karKopNummer, laagBundelTekst, leesPakbonConfig, sectieZichtbaar, sorteerProducten, onderdeelCellen, onderdeelVelden, samenstellingTonen, voegProductSamen, totalen, vulVeldcodes, } from "./pakbonBuilder.js";
|
|
11
11
|
import { haalPrintLogos } from "./logoLibrary.js";
|
|
12
12
|
import { code128BarsHtml } from "./code128.js";
|
|
13
13
|
import { karMetadata } from "./pakbonPresentation.js";
|
|
@@ -150,6 +150,17 @@ function normProduct(p) {
|
|
|
150
150
|
fust_aantal: Number(p["fust_aantal"] ?? 0) || 0,
|
|
151
151
|
fustsoort: String(p["fustsoort"] ?? ""),
|
|
152
152
|
planten_per_fust: Number(p["planten_per_fust"] ?? 0) || 0,
|
|
153
|
+
sticker: p["sticker"] == null || p["sticker"] === "" ? "–" : String(p["sticker"]),
|
|
154
|
+
onderdelen: Array.isArray(p["onderdelen"])
|
|
155
|
+
? p["onderdelen"].map((o) => ({
|
|
156
|
+
artikelnaam: String(o["artikelnaam"] ?? ""),
|
|
157
|
+
kleur: String(o["kleur"] ?? ""),
|
|
158
|
+
potmaat: String(o["potmaat"] ?? ""),
|
|
159
|
+
per_stuk: Number(o["per_stuk"] ?? 0) || 0,
|
|
160
|
+
aantal: Number(o["aantal"] ?? 0) || 0,
|
|
161
|
+
sticker: o["sticker"] == null || o["sticker"] === "" ? "–" : String(o["sticker"]),
|
|
162
|
+
}))
|
|
163
|
+
: undefined,
|
|
153
164
|
};
|
|
154
165
|
}
|
|
155
166
|
// --- secties ----------------------------------------------------------------
|
|
@@ -304,10 +315,8 @@ function productenHtml(sectie, laag, toonKop = true) {
|
|
|
304
315
|
const map = new Map();
|
|
305
316
|
for (const p of producten) {
|
|
306
317
|
const b = map.get(p.artikelnummer);
|
|
307
|
-
if (b)
|
|
308
|
-
b
|
|
309
|
-
b.fust_aantal += p.fust_aantal;
|
|
310
|
-
}
|
|
318
|
+
if (b)
|
|
319
|
+
voegProductSamen(b, p);
|
|
311
320
|
else
|
|
312
321
|
map.set(p.artikelnummer, { ...p });
|
|
313
322
|
}
|
|
@@ -317,9 +326,13 @@ function productenHtml(sectie, laag, toonKop = true) {
|
|
|
317
326
|
return "";
|
|
318
327
|
const label = (v) => v === "foto" ? "Foto" : v === "qrcode" ? "QR-code" : PRODUCT_LABELS[v] ?? v;
|
|
319
328
|
const weergave = optS(sectie, "weergave", "tabel");
|
|
329
|
+
const sub = samenstellingTonen(sectie.opties) ? onderdeelVelden(sectie.opties) : null;
|
|
330
|
+
const subRijen = (p) => sub && p.onderdelen?.length ? p.onderdelen.map((o) => onderdeelCellen(o, velden, sub)) : [];
|
|
320
331
|
if (weergave === "lijst") {
|
|
321
332
|
return `<ul class="plijst">${producten
|
|
322
|
-
.map((p) => `<li>${velden.map((v) => esc(cel(p, v))).filter(Boolean).join(" · ")}
|
|
333
|
+
.map((p) => `<li>${velden.map((v) => esc(cel(p, v))).filter(Boolean).join(" · ")}${subRijen(p)
|
|
334
|
+
.map((r) => `<div class="onderdeel">${esc(r.filter(Boolean).join(" · "))}</div>`)
|
|
335
|
+
.join("")}</li>`)
|
|
323
336
|
.join("")}</ul>`;
|
|
324
337
|
}
|
|
325
338
|
const kop = toonKop && opt(sectie, "toonKoppen", true) !== false
|
|
@@ -330,7 +343,10 @@ function productenHtml(sectie, laag, toonKop = true) {
|
|
|
330
343
|
.map((_, index) => `<col style="width:${(breedtes[index] ?? 0).toFixed(4)}%">`)
|
|
331
344
|
.join("")}</colgroup>`;
|
|
332
345
|
const rijen = producten
|
|
333
|
-
.map((p) => `<tr>${velden.map((v) => `<td class="onder">${esc(cel(p, v))}</td>`).join("")}</tr>`
|
|
346
|
+
.map((p) => `<tr>${velden.map((v) => `<td class="onder">${esc(cel(p, v))}</td>`).join("")}</tr>` +
|
|
347
|
+
subRijen(p)
|
|
348
|
+
.map((r) => `<tr class="onderdeel">${r.map((w) => `<td class="onder" style="font-size:.88em;color:#555">${esc(w)}</td>`).join("")}</tr>`)
|
|
349
|
+
.join(""))
|
|
334
350
|
.join("");
|
|
335
351
|
return `<table class="regels vast">${colgroup}${kop}${rijen}</table>`;
|
|
336
352
|
}
|
|
@@ -349,6 +365,7 @@ const PRODUCT_LABELS = {
|
|
|
349
365
|
fust_aantal: "Aantal fusten",
|
|
350
366
|
fustsoort: "Fustsoort",
|
|
351
367
|
planten_per_fust: "Planten per fust",
|
|
368
|
+
sticker: "Sticker",
|
|
352
369
|
};
|
|
353
370
|
function karKop(s, kar, velden, bundelTekst = "") {
|
|
354
371
|
const scheiding = optS(s, "scheiding", "kop");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"printQueue.server.d.ts","sourceRoot":"","sources":["../../src/lib/printQueue.server.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAwC5D,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE/B,mFAAmF;AACnF,MAAM,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEpD;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAW1E;AAiFD,2EAA2E;AAC3E,qBAAa,gBAAiB,SAAQ,KAAK;IAChC,IAAI,SAAsB;CACpC;AAED,+EAA+E;AAC/E,qBAAa,iBAAkB,SAAQ,KAAK;IACjC,IAAI,SAAuB;CACrC;AAED,oFAAoF;AACpF,qBAAa,kBAAmB,SAAQ,gBAAgB;IAC7C,IAAI,SAAwB;CACtC;AAED;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG;IAAE,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAAC;AAEvE,yEAAyE;AACzE,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,cAAc,GAAG,aAAa,GAAG,aAAa,GAAG,eAAe,CAAC;AAE5G,6EAA6E;AAC7E,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC;AAcnD,4EAA4E;AAC5E,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAI7D;AASD,sEAAsE;AACtE,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAQnD;AAkCD,yEAAyE;AACzE,wBAAgB,cAAc,CAAC,GAAG,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAIlE;AAED,wFAAwF;AACxF,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAe7C;AA8ND;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAQlH;AAWD;;;GAGG;AACH,wBAAsB,cAAc,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAqClF;
|
|
1
|
+
{"version":3,"file":"printQueue.server.d.ts","sourceRoot":"","sources":["../../src/lib/printQueue.server.ts"],"names":[],"mappings":"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"}
|
|
@@ -761,6 +761,30 @@ function verzamelLogoIds(waarde, uit, diepte = 0) {
|
|
|
761
761
|
}
|
|
762
762
|
}
|
|
763
763
|
/** Haalt de logo's op die in de layout gebruikt worden, met tijdelijke URL. */
|
|
764
|
+
/** Eigen bedrijfsgegevens (app_settings) als terugval voor een lege payload.bedrijf. */
|
|
765
|
+
async function bedrijfsInstelling(db) {
|
|
766
|
+
const { BEDRIJFSGEGEVENS_SLEUTEL, leesBedrijfsgegevens } = await import("./bedrijfsgegevens.js");
|
|
767
|
+
const { data } = await db.from("app_settings").select("value").eq("key", BEDRIJFSGEGEVENS_SLEUTEL).maybeSingle();
|
|
768
|
+
return leesBedrijfsgegevens(data?.["value"] ?? null);
|
|
769
|
+
}
|
|
770
|
+
/** Vult order.bedrijf en (zonder eigen documentlogo) het logo uit de instelling. */
|
|
771
|
+
async function metBedrijfsTerugval(db, order, layout) {
|
|
772
|
+
try {
|
|
773
|
+
const { bedrijfMetTerugval, heeftBedrijfsgegevens } = await import("./bedrijfsgegevens.js");
|
|
774
|
+
if (heeftBedrijfsgegevens(order.bedrijf))
|
|
775
|
+
return { order, layout };
|
|
776
|
+
const inst = await bedrijfsInstelling(db);
|
|
777
|
+
const nieuweOrder = { ...order, bedrijf: bedrijfMetTerugval(order.bedrijf, inst) };
|
|
778
|
+
const cfg = (layout?.config ?? {});
|
|
779
|
+
if (inst.logoId && !cfg?.logo?.logoId) {
|
|
780
|
+
return { order: nieuweOrder, layout: { ...layout, config: { ...cfg, logo: { ...(cfg.logo ?? {}), logoId: inst.logoId } } } };
|
|
781
|
+
}
|
|
782
|
+
return { order: nieuweOrder, layout };
|
|
783
|
+
}
|
|
784
|
+
catch {
|
|
785
|
+
return { order, layout };
|
|
786
|
+
}
|
|
787
|
+
}
|
|
764
788
|
async function logosVoor(db, layout) {
|
|
765
789
|
const config = layout?.config ?? null;
|
|
766
790
|
const ids = new Set();
|
|
@@ -794,7 +818,7 @@ async function logosVoor(db, layout) {
|
|
|
794
818
|
* het documenttype. Zo werkt een bijgewerkte layout meteen door.
|
|
795
819
|
*/
|
|
796
820
|
export async function bouwHtml(db, job, keuze, uitkomst) {
|
|
797
|
-
|
|
821
|
+
let layout = keuze.layout;
|
|
798
822
|
const noteer = (bron) => {
|
|
799
823
|
if (uitkomst)
|
|
800
824
|
uitkomst.bron = bron;
|
|
@@ -861,7 +885,9 @@ export async function bouwHtml(db, job, keuze, uitkomst) {
|
|
|
861
885
|
const gekozen = (cartId ? karren.find((k) => String(k?.cart_id ?? "").trim() === cartId) : null) ??
|
|
862
886
|
karren[0] ??
|
|
863
887
|
null;
|
|
864
|
-
const
|
|
888
|
+
const metTerugval = await metBedrijfsTerugval(db, { ...volledig, karren: gekozen ? [gekozen] : [] }, layout);
|
|
889
|
+
const order = metTerugval.order;
|
|
890
|
+
layout = metTerugval.layout;
|
|
865
891
|
return renderPakbonDocument(leesAfleverbriefConfig(layout.config), order, {
|
|
866
892
|
breedteMm,
|
|
867
893
|
hoogteMm,
|
|
@@ -1047,6 +1073,11 @@ export async function bouwHtml(db, job, keuze, uitkomst) {
|
|
|
1047
1073
|
};
|
|
1048
1074
|
}
|
|
1049
1075
|
}
|
|
1076
|
+
{
|
|
1077
|
+
const t = await metBedrijfsTerugval(db, order, layout);
|
|
1078
|
+
order = t.order;
|
|
1079
|
+
layout = t.layout;
|
|
1080
|
+
}
|
|
1050
1081
|
const html = renderPakbonDocument(layout.config, order, {
|
|
1051
1082
|
breedteMm,
|
|
1052
1083
|
hoogteMm,
|
|
@@ -143,7 +143,7 @@ export declare const webhookStatus: import("@tanstack/start-client-core").Option
|
|
|
143
143
|
niet_gematcht: string[];
|
|
144
144
|
}[];
|
|
145
145
|
aan: boolean;
|
|
146
|
-
weergave: "
|
|
146
|
+
weergave: "uit" | "aan" | "onbekend";
|
|
147
147
|
nietBereikbaar: boolean;
|
|
148
148
|
pnUrl: string | null;
|
|
149
149
|
pnGeslaagd: number | null;
|