@flowselections/logistiek-engine 1.0.175 → 1.0.180
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/db/schema/logistiek-engine.sql +2112 -0
- package/dist-lib/components/BeheerPage.d.ts.map +1 -1
- package/dist-lib/components/BeheerPage.js +2 -1
- package/dist-lib/components/BeladingIndelingCard.d.ts.map +1 -1
- package/dist-lib/components/BeladingIndelingCard.js +2 -0
- package/dist-lib/components/DocumentkeuzeCard.d.ts +2 -0
- package/dist-lib/components/DocumentkeuzeCard.d.ts.map +1 -0
- package/dist-lib/components/DocumentkeuzeCard.js +18 -0
- package/dist-lib/index.d.ts +1 -0
- package/dist-lib/index.d.ts.map +1 -1
- package/dist-lib/index.js +1 -0
- package/dist-lib/integrations/supabase/previewAuthStorage.d.ts +11 -5
- package/dist-lib/integrations/supabase/previewAuthStorage.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/previewAuthStorage.js +38 -21
- package/dist-lib/integrations/supabase/types.d.ts +376 -15
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/lib/beladingRegels.d.ts +78 -0
- package/dist-lib/lib/beladingRegels.d.ts.map +1 -0
- package/dist-lib/lib/beladingRegels.js +143 -0
- package/dist-lib/lib/bulkLoadCarrierPlanning.server.js +2 -2
- package/dist-lib/lib/controlScan.server.js +1 -1
- package/dist-lib/lib/eigenTraysticker.d.ts +17 -0
- package/dist-lib/lib/eigenTraysticker.d.ts.map +1 -0
- package/dist-lib/lib/eigenTraysticker.js +32 -0
- package/dist-lib/lib/layoutPrint.server.d.ts +10 -1
- package/dist-lib/lib/layoutPrint.server.d.ts.map +1 -1
- package/dist-lib/lib/layoutPrint.server.js +19 -1
- package/dist-lib/lib/loadCarrierPlanning.server.d.ts +35 -3
- package/dist-lib/lib/loadCarrierPlanning.server.d.ts.map +1 -1
- package/dist-lib/lib/loadCarrierPlanning.server.js +251 -89
- package/dist-lib/lib/modulePrompts.d.ts.map +1 -1
- package/dist-lib/lib/modulePrompts.js +233 -0
- package/dist-lib/lib/moduleVersion.d.ts +1 -1
- package/dist-lib/lib/moduleVersion.js +1 -1
- package/dist-lib/lib/planQueue.server.d.ts.map +1 -1
- package/dist-lib/lib/planQueue.server.js +26 -2
- package/dist-lib/lib/ruleEngineSchema.d.ts.map +1 -1
- package/dist-lib/lib/ruleEngineSchema.js +4 -38
- package/dist-lib/lib/ruleEngineWizard.d.ts.map +1 -1
- package/dist-lib/lib/ruleEngineWizard.js +0 -2
- package/dist-lib/lib/shippingNoteQueue.server.js +1 -1
- package/dist-lib/lib/stickerQueue.server.d.ts +25 -0
- package/dist-lib/lib/stickerQueue.server.d.ts.map +1 -1
- package/dist-lib/lib/stickerQueue.server.js +150 -22
- package/dist-lib/lib/stickerRules.d.ts +17 -0
- package/dist-lib/lib/stickerRules.d.ts.map +1 -1
- package/dist-lib/lib/stickerRules.js +30 -0
- package/package.json +1 -1
|
@@ -1241,6 +1241,62 @@ CONTROLELIJST
|
|
|
1241
1241
|
order: 2,
|
|
1242
1242
|
summary: "Voert belading, controle, printen en transport uit volgens de taak-payload.",
|
|
1243
1243
|
revisions: [
|
|
1244
|
+
{
|
|
1245
|
+
number: 30,
|
|
1246
|
+
title: "Karnummer koppelen aan het kar-id",
|
|
1247
|
+
date: "2026-10-21",
|
|
1248
|
+
summary: "cart_numbers heeft een kolom cart_id; vul die bij elk nieuw karnummer.",
|
|
1249
|
+
body: `KOPPELPROMPT ENGINE 1.0.179 – karnummers op kar-id
|
|
1250
|
+
|
|
1251
|
+
De Engine heeft cart_numbers uitgebreid met cart_id uuid (stabiel na herindeling) en
|
|
1252
|
+
een unieke index (pick_date, cart_id) waar cart_id gevuld is. Graag:
|
|
1253
|
+
- Vul in assign_cart_numbers bij elk nieuw karnummer ook cart_id = order_carts.id.
|
|
1254
|
+
- Zoek bestaande nummers voortaan eerst op cart_id, pas daarna op order + cart_index.
|
|
1255
|
+
- logistics_cart_seq geeft nu een duidelijke fout als een order twee karren met
|
|
1256
|
+
hetzelfde volgnummer heeft (er wordt geen kar meer weggelaten). Toon die fout.
|
|
1257
|
+
- logistics_cart_seq is niet meer aan te roepen als anon; ingelogd en server blijven werken.
|
|
1258
|
+
Bestaande nummers worden pas gekoppeld na akkoord van de opdrachtgever.
|
|
1259
|
+
Verander niets aan de Engine-functies.`,
|
|
1260
|
+
},
|
|
1261
|
+
{
|
|
1262
|
+
number: 29,
|
|
1263
|
+
title: "Antwoord 1.0.74: fusten en land per kar",
|
|
1264
|
+
date: "2026-10-21",
|
|
1265
|
+
summary: "control_get_todays_carts() geeft per kar ook crates_on_cart en country_code.",
|
|
1266
|
+
body: `ANTWOORD ENGINE 1.0.178 – Afhandeling 1.0.74 (fusten en land per kar)
|
|
1267
|
+
|
|
1268
|
+
control_get_todays_carts() heeft achteraan twee kolommen gekregen:
|
|
1269
|
+
- crates_on_cart integer: som van order_cart_items.crates op deze kar (op kar-id).
|
|
1270
|
+
Bij een gedeelde kar het totaal van alle orders, één keer geteld. Geen indeling: NULL.
|
|
1271
|
+
- country_code text: ISO-landcode (2 letters) van de afleverlocatie van de eerste
|
|
1272
|
+
order op de kar (op ordernummer), via orders.custom_fields->>'delivery_location'
|
|
1273
|
+
-> customer_delivery_locations.id. Geen geldige 2-letterige code (bijv. "Nederland")
|
|
1274
|
+
of geen locatie: NULL; er wordt niet omgezet uit een landnaam.
|
|
1275
|
+
Bestaande kolommen, volgorde, rechten en filtering zijn ongewijzigd.
|
|
1276
|
+
Je hoeft niets aan de Engine aan te passen.`,
|
|
1277
|
+
},
|
|
1278
|
+
{
|
|
1279
|
+
number: 28,
|
|
1280
|
+
title: "Geen layoutkeuze meer: document automatisch uit de order",
|
|
1281
|
+
date: "2026-10-21",
|
|
1282
|
+
summary: "Haal eigen layoutkeuzes weg; documenten en layout volgen uit de order via de centrale beslisregel.",
|
|
1283
|
+
body: `KOPPELPROMPT AFHANDELING – automatische documentkeuze (Engine 1.0.176)
|
|
1284
|
+
|
|
1285
|
+
1. Haal in je eigen instellingen en herprintschermen elke keuze voor layout of
|
|
1286
|
+
documentsoort weg. Toon: "Het document wordt automatisch bepaald uit de order."
|
|
1287
|
+
2. Bestaande opgeslagen keuzes niet verwijderen, wel negeren.
|
|
1288
|
+
3. Print je zelf een document: vraag de layout op met
|
|
1289
|
+
rpc logistics_document_for_order(p_order_id, p_documenttype)
|
|
1290
|
+
(documenttype: pakbon, productiebon, verzenddocument, sticker, traysticker,
|
|
1291
|
+
eigen_sticker). ok=false: dat document niet printen, reden tonen; andere
|
|
1292
|
+
documenten van de order gaan door.
|
|
1293
|
+
4. Verzenddocument: precies één per order. Floriday-order = wat Floriday levert;
|
|
1294
|
+
eigen order = afleverbrief (bron eigen).
|
|
1295
|
+
5. Opnieuw afdrukken blijft altijd mogelijk; maak geen tweede actieve
|
|
1296
|
+
documentregistratie per order per soort.
|
|
1297
|
+
Wanneer een document vrijkomt (vrijgave, X uur vóór pickmoment, aanmeldmoment,
|
|
1298
|
+
voorraadopwaardering) verandert niet. Wijzig geen functies van de Engine.`,
|
|
1299
|
+
},
|
|
1244
1300
|
{
|
|
1245
1301
|
number: 1,
|
|
1246
1302
|
title: "Basiskoppeling via de database",
|
|
@@ -2446,6 +2502,48 @@ CONTROLELIJST
|
|
|
2446
2502
|
order: 3,
|
|
2447
2503
|
summary: "Toont pick-taken op de door de Engine berekende starttijd.",
|
|
2448
2504
|
revisions: [
|
|
2505
|
+
{
|
|
2506
|
+
number: 51,
|
|
2507
|
+
title: "Antwoord op 1.0.56: pakbon alleen via centrale documentkeuze",
|
|
2508
|
+
date: "2026-10-21",
|
|
2509
|
+
summary: "Beide pick_enqueue_print_job-varianten en logistics_resolve_pick_document negeren payload.layout_id en weigeren bij ok=false.",
|
|
2510
|
+
body: `KOPPELPROMPT PICKSCHERMEN – antwoord op 1.0.56 (Engine 1.0.176)
|
|
2511
|
+
|
|
2512
|
+
Verwerkt:
|
|
2513
|
+
- pick_enqueue_print_job (4 en 5 velden) en logistics_resolve_pick_document
|
|
2514
|
+
kiezen de layout alleen via logistics_document_for_order(order_id, documenttype).
|
|
2515
|
+
payload.layout_id en payload.layout worden genegeerd en niet meer doorgegeven.
|
|
2516
|
+
- Bij ok=false (en geen geleverde pdf) maakt pick_enqueue_print_job GEEN
|
|
2517
|
+
printopdracht en geeft een fout (SQLSTATE 23514) met de Nederlandse reden als
|
|
2518
|
+
tekst. Toon die tekst; andere documenten van de order gaan gewoon door.
|
|
2519
|
+
- logistics_resolve_pick_document geeft nu ook terug: ok (boolean), reden (tekst
|
|
2520
|
+
of null) en layout_keuze ('layouts' of 'automatisch'). Gebruik ok/reden voor het
|
|
2521
|
+
voorbeeld op het pickstation.
|
|
2522
|
+
- Rechten, beveiliging en parameters zijn ongewijzigd.
|
|
2523
|
+
Je hoeft niets aan de Engine aan te passen.`,
|
|
2524
|
+
},
|
|
2525
|
+
{
|
|
2526
|
+
number: 50,
|
|
2527
|
+
title: "Geen layoutkeuze meer: document automatisch uit de order",
|
|
2528
|
+
date: "2026-10-21",
|
|
2529
|
+
summary: "Haal de layout- en documentsoortkeuzes uit de pickstationinstellingen; het document volgt uit de order.",
|
|
2530
|
+
body: `KOPPELPROMPT PICKSCHERMEN – automatische documentkeuze (Engine 1.0.176)
|
|
2531
|
+
|
|
2532
|
+
1. Haal in de pickstationinstellingen alle keuzelijsten voor layout en
|
|
2533
|
+
documentsoort weg. Toon op die plek: "Het document wordt automatisch bepaald uit de order."
|
|
2534
|
+
2. Bestaande opgeslagen keuzes NIET verwijderen, maar negeren.
|
|
2535
|
+
3. Een pakbon printen blijft via pick_enqueue_print_job (Engine). Die kiest de
|
|
2536
|
+
layout nu zelf via logistics_document_for_order(order_id, documenttype);
|
|
2537
|
+
een layout_id in de payload van de pickrij wordt genegeerd.
|
|
2538
|
+
4. Wil je vooraf tonen welk document eruit komt: rpc
|
|
2539
|
+
logistics_document_for_order(p_order_id, p_documenttype) -> { ok, layout_id, reden }.
|
|
2540
|
+
Bij ok=false: toon de reden, druk alleen dát document niet af; de rest van de
|
|
2541
|
+
order gaat door.
|
|
2542
|
+
5. Opnieuw afdrukken blijft altijd mogelijk (bestaande herprintknop).
|
|
2543
|
+
6. Eigen stickers (HO/MO/AO, vinkje Sticker op de orderregel) komen vanzelf mee
|
|
2544
|
+
met de pakbon op de labelprinter van dezelfde plek; geen extra knop nodig.
|
|
2545
|
+
Wijzig geen functies van de Engine.`,
|
|
2546
|
+
},
|
|
2449
2547
|
{
|
|
2450
2548
|
number: 1,
|
|
2451
2549
|
title: "Basiskoppeling via de database",
|
|
@@ -4795,6 +4893,31 @@ CONTROLELIJST
|
|
|
4795
4893
|
order: 5,
|
|
4796
4894
|
summary: "Reserveert voorraad op commando en meldt wijzigingen terug.",
|
|
4797
4895
|
revisions: [
|
|
4896
|
+
{
|
|
4897
|
+
number: 8,
|
|
4898
|
+
title: "Antwoord op Voorraad 1.0.93: reserveringen zonder Floriday-leidende FO-orders",
|
|
4899
|
+
date: "2026-10-21",
|
|
4900
|
+
summary: "logistics_recompute_reserved_targeted telt FO-toewijzingen op Floriday-leidende sleutels niet meer mee; change_source blijft RESERVATION_RECOMPUTE.",
|
|
4901
|
+
body: `KOPPELPROMPT VOORRAAD – antwoord op 1.0.93 (Engine 1.0.176)
|
|
4902
|
+
|
|
4903
|
+
Verwerkt in de Engine:
|
|
4904
|
+
1. logistics_recompute_reserved_targeted, recompute_reserved_stock en
|
|
4905
|
+
recompute_all_reserved_stock zetten vóór de UPDATE
|
|
4906
|
+
set_config('stock.change_source','RESERVATION_RECOMPUTE', true) en schrijven
|
|
4907
|
+
change_source = 'RESERVATION_RECOMPUTE' op de rij (stond al zo).
|
|
4908
|
+
2. Alle drie tellen geen toewijzingen mee van orders met
|
|
4909
|
+
normalize_order_source(order_source) = 'FO' op een sleutel waarvoor
|
|
4910
|
+
voorraad_floriday_leads_key(trade_item_key) = true. Eigen orders tellen mee.
|
|
4911
|
+
De toewijzingen (logistics_reservation_allocations) blijven bestaan.
|
|
4912
|
+
Ontbreekt voorraad_floriday_leads_key: telling zoals vroeger + melding in de
|
|
4913
|
+
Engine-trace (errorClass 'afhankelijkheid').
|
|
4914
|
+
|
|
4915
|
+
Niet van de Engine en dus NIET aangepast – deze schrijven ook reserved_stock;
|
|
4916
|
+
controleer ze zelf op change_source en de FO-regel:
|
|
4917
|
+
apply_stock_reservation, apply_stock_consumption, promote_trade_item_key,
|
|
4918
|
+
canonicalize_trade_item_stock_key, _migrate_rewrite_stock_key,
|
|
4919
|
+
floriday_ingest_sales_orders.`,
|
|
4920
|
+
},
|
|
4798
4921
|
{
|
|
4799
4922
|
number: 1,
|
|
4800
4923
|
title: "Basiskoppeling via de database",
|
|
@@ -5228,6 +5351,116 @@ Zelf rekenen doe je niet.
|
|
|
5228
5351
|
order: 9,
|
|
5229
5352
|
summary: "Levert de documentlayouts. Kiest zelf geen layout en geen printer: de Engine bepaalt welke layout en welke printplek bij een document horen.",
|
|
5230
5353
|
revisions: [
|
|
5354
|
+
{
|
|
5355
|
+
number: 13,
|
|
5356
|
+
title: "Correctie 1.69.2: eigen traysticker per fust",
|
|
5357
|
+
date: "2026-10-21",
|
|
5358
|
+
summary: "Een tray is een fust, geen laag: de Engine maakt één eigen traysticker per fust.",
|
|
5359
|
+
body: `CORRECTIE ENGINE 1.0.178 – Layouts 1.69.2 (eigen traystickers per fust)
|
|
5360
|
+
|
|
5361
|
+
Vervangt de laag-indeling uit antwoord 12. Een tray is een FUST.
|
|
5362
|
+
- Per orderregel op een kar: order_cart_items.crates opdrachten, één per fust.
|
|
5363
|
+
- tray_nummer / tray_totaal = fust x van y binnen de hele order
|
|
5364
|
+
(volgorde: kar, regel, fust).
|
|
5365
|
+
- tray_producten: één item, het product van die regel (bij een samengesteld
|
|
5366
|
+
product zoals een mixtray het samengestelde product), met
|
|
5367
|
+
aantal = planten per fust (regel, anders product); het laatste fust van een
|
|
5368
|
+
regel krijgt de rest. Optioneel 'onderdelen' als de karregel componenten heeft.
|
|
5369
|
+
- Idempotentie: eigen_traysticker:<order>:<kar>:<karregel>:<fustnummer>:<layout>.
|
|
5370
|
+
- Aantal fusten onbekend: alleen die sticker wacht met "Aantal fusten onbekend".
|
|
5371
|
+
- Verder ongewijzigd: _documenttype 'traysticker', _herkomst 'eigen',
|
|
5372
|
+
_kopieen 1, layout via layout_voor_document, geen logo_url, zelfde vrijgave.`,
|
|
5373
|
+
},
|
|
5374
|
+
{
|
|
5375
|
+
number: 12,
|
|
5376
|
+
title: "Antwoord 1.69.2: eigen traystickers per tray",
|
|
5377
|
+
date: "2026-10-21",
|
|
5378
|
+
summary: "De Engine print traystickers voor eigen orders, één opdracht per tray, via layout_print_document.",
|
|
5379
|
+
body: `ANTWOORD ENGINE 1.0.178 – Layouts 1.69.2 (eigen traystickers)
|
|
5380
|
+
|
|
5381
|
+
Voor eigen orders (HO/MO/AO) maakt de Engine per tray (laag) van de karindeling
|
|
5382
|
+
één opdracht via layout_print_document:
|
|
5383
|
+
- _documenttype 'traysticker', _herkomst 'eigen', _kopieen 1
|
|
5384
|
+
- _layout_id uit logistics_document_for_order(order_id, 'traysticker'), die
|
|
5385
|
+
layout_voor_document aanroept (= fs.eigen_traysticker)
|
|
5386
|
+
- _payload: order_id, order_number, ordernummer, klantnaam, leverdatum,
|
|
5387
|
+
afleverlocatie, cart_id, print_plek_id, tray_nummer, tray_totaal,
|
|
5388
|
+
tray_producten [{ artikelnummer, naam, aantal }]
|
|
5389
|
+
- Geen logo_url: het logo van de eigen organisatie haal je zelf uit de bedrijfsgegevens.
|
|
5390
|
+
- Idempotentie: eigen_traysticker:<order>:<kar>:<laag>:<layout>.
|
|
5391
|
+
Vrijgave: alleen als de instelling Tray-stickers niet op "Niet printen" staat;
|
|
5392
|
+
het moment is de pakbon van de kar (eigen orders hebben geen Floriday-belading).
|
|
5393
|
+
Ontbreekt de trayindeling of de layout: voor die tray geen opdracht, met uitleg;
|
|
5394
|
+
de rest van de order gaat door. Floriday-traystickers zijn ongewijzigd.`,
|
|
5395
|
+
},
|
|
5396
|
+
{
|
|
5397
|
+
number: 11,
|
|
5398
|
+
title: "Verzenddocument: de Engine bepaalt afleverbrief of veilingbrief",
|
|
5399
|
+
date: "2026-10-21",
|
|
5400
|
+
summary: "De Engine vertaalt 'verzenddocument' bij Floriday-orders naar 'afleverbrief' of 'veilingbrief' voordat layout_voor_document wordt gevraagd.",
|
|
5401
|
+
body: `KOPPELPROMPT LAYOUTS EN PRINTERS – verzenddocument (Engine 1.0.176)
|
|
5402
|
+
|
|
5403
|
+
Je ok=false voor 'verzenddocument' bij Floriday-orders (1.69.0) is juist. De Engine
|
|
5404
|
+
lost het op: logistics_document_for_order vertaalt 'verzenddocument' eerst naar het
|
|
5405
|
+
echte document en roept daarna layout_voor_document(order, 'afleverbrief' |
|
|
5406
|
+
'veilingbrief') aan. Eigen orders: 'afleverbrief'. Je hoeft niets te wijzigen.
|
|
5407
|
+
|
|
5408
|
+
Wil je het zelf lezen: rpc logistics_floriday_shipping_document(p_order_id uuid)
|
|
5409
|
+
-> { ok, documenttype: 'afleverbrief'|'veilingbrief'|null, fulfillment_order_id, reden }.
|
|
5410
|
+
|
|
5411
|
+
Eenduidige bron:
|
|
5412
|
+
public.logistics_slip_shipping_note.fulfillment_order_id
|
|
5413
|
+
-> public.floriday_fulfillment_orders_cache.floriday_id (is_deleted niet true)
|
|
5414
|
+
velden: data->>'type', data->>'isReAuctioning', data->'deliveryNoteCodes'
|
|
5415
|
+
Regel: isReAuctioning = true, of type bevat CLOCK of AUCTION -> veilingbrief;
|
|
5416
|
+
type = DIRECT_SALES met minstens één deliveryNoteCode -> afleverbrief;
|
|
5417
|
+
anders ok=false met reden (niet gokken).`,
|
|
5418
|
+
},
|
|
5419
|
+
{
|
|
5420
|
+
number: 10,
|
|
5421
|
+
title: "Eén beslisregel: layout_voor_document(order, documenttype)",
|
|
5422
|
+
date: "2026-10-21",
|
|
5423
|
+
summary: "Layouts wordt eigenaar van de layoutkeuze per documentsoort en herkomst via één functie die de Engine en Pickschermen aanroepen.",
|
|
5424
|
+
body: `KOPPELPROMPT LAYOUTS EN PRINTERS – automatische documentkeuze (Engine 1.0.176)
|
|
5425
|
+
|
|
5426
|
+
Doel: de gebruiker kiest nergens meer een layout. De keuze welke layout bij een
|
|
5427
|
+
documentsoort en herkomst hoort, is van Layouts. Bouw één functie die alle
|
|
5428
|
+
modules aanroepen:
|
|
5429
|
+
|
|
5430
|
+
public.layout_voor_document(p_order_id uuid, p_documenttype text) RETURNS jsonb
|
|
5431
|
+
{ "ok": boolean, "layout_id": uuid|null, "bron": "eigen"|"floriday",
|
|
5432
|
+
"documenttype": text, "breedte_mm": numeric|null, "hoogte_mm": numeric|null,
|
|
5433
|
+
"reden": text|null }
|
|
5434
|
+
|
|
5435
|
+
documenttype dat de Engine meestuurt: pakbon, productiebon, verzenddocument,
|
|
5436
|
+
afleverbrief, veilingbrief, sticker, traysticker, eigen_sticker.
|
|
5437
|
+
|
|
5438
|
+
Beslisregel:
|
|
5439
|
+
- pakbon / productiebon: altijd de standaardlayout van die soort met bron 'eigen'.
|
|
5440
|
+
- verzenddocument, precies één per order:
|
|
5441
|
+
- Floriday-order (orders.order_source = 'floriday'): het document dat Floriday
|
|
5442
|
+
echt gekoppeld heeft (afleverbrief/verzendbrief of veilingbrief) met de
|
|
5443
|
+
Floriday-systeemlayout van die soort.
|
|
5444
|
+
- eigen order (HO/MO/AO): afleverbrief, standaardlayout, bron 'eigen'.
|
|
5445
|
+
- Onduidelijk of ontbreekt: ok=false en een Nederlandse reden. Niet gokken.
|
|
5446
|
+
- sticker: Floriday-order -> Floriday-systeemlayout 'sticker'.
|
|
5447
|
+
- eigen_sticker: eigen order -> standaard stickerlayout bron 'eigen'. Die layout
|
|
5448
|
+
tekent de afbeelding uit payload.sticker_afbeelding = { bucket, pad }
|
|
5449
|
+
(Klanten-opslag van customer_product_stickers).
|
|
5450
|
+
- traysticker: Floriday-systeemlayout 'traysticker'.
|
|
5451
|
+
- Geen (eenduidige) layout: ok=false, reden zoals
|
|
5452
|
+
"Maak of activeer een pakbonlayout in Layouts en printers."
|
|
5453
|
+
|
|
5454
|
+
Spelregels:
|
|
5455
|
+
- STABLE, SECURITY DEFINER, search_path public; EXECUTE voor authenticated en service_role.
|
|
5456
|
+
- Geen omgevingswaarden, geen terugval op een andere soort.
|
|
5457
|
+
- Pas niets aan functies van de Engine aan. Zodra deze functie bestaat, gebruikt
|
|
5458
|
+
de Engine (logistics_document_for_order) alleen nog jouw antwoord; tot die tijd
|
|
5459
|
+
gebruikt de Engine de automatische standaardkeuze en toont Beheer
|
|
5460
|
+
"Layouts is nog niet bijgewerkt – automatische keuze gebruikt".
|
|
5461
|
+
- Opnieuw afdrukken blijft altijd mogelijk; geen tweede actieve origineel per
|
|
5462
|
+
order per soort (bestaande idempotentiesleutel).`,
|
|
5463
|
+
},
|
|
5231
5464
|
{
|
|
5232
5465
|
number: 1,
|
|
5233
5466
|
title: "De Engine kiest de layout, de Layout maker maakt hem",
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const MODULE_VERSION = "1.0.
|
|
1
|
+
export declare const MODULE_VERSION = "1.0.180";
|
|
2
2
|
//# sourceMappingURL=moduleVersion.d.ts.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// Automatisch gegenereerd door prebuild:lib; niet handmatig aanpassen.
|
|
2
|
-
export const MODULE_VERSION = "1.0.
|
|
2
|
+
export const MODULE_VERSION = "1.0.180";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planQueue.server.d.ts","sourceRoot":"","sources":["../../src/lib/planQueue.server.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"planQueue.server.d.ts","sourceRoot":"","sources":["../../src/lib/planQueue.server.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAS5D,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,2FAA2F;IAC3F,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAwBD,wFAAwF;AACxF,wBAAsB,YAAY,CAChC,EAAE,EAAE,cAAc,EAClB,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAO,GAC3D,OAAO,CAAC,eAAe,CAAC,CA8S1B;AAgCD,iGAAiG;AACjG,eAAO,MAAM,eAAe,0EAA2E,CAAC;AAgCxG,4EAA4E;AAE5E,wBAAsB,cAAc,CAAC,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtE"}
|
|
@@ -12,6 +12,7 @@ import { attachIndelingToTasks } from "./loadCarrierTaskSync.server.js";
|
|
|
12
12
|
import { trace, newTraceId, classifyError } from "./trace.server.js";
|
|
13
13
|
import { FLOW_NODE } from "./flowNodes.js";
|
|
14
14
|
import { completePlannerDiffRuns, skipPlannerDiffRuns } from "./plannerDiff.server.js";
|
|
15
|
+
import { opnieuwOverSeconden } from "./beladingRegels.js";
|
|
15
16
|
const EMPTY = {
|
|
16
17
|
claimed: 0,
|
|
17
18
|
planned: 0,
|
|
@@ -103,6 +104,7 @@ export async function runPlanQueue(sb, options = {}) {
|
|
|
103
104
|
const bufferId = group.find((g) => g.buffer_id)?.buffer_id ?? null;
|
|
104
105
|
let blocked = false;
|
|
105
106
|
let blockedReasonFor = null;
|
|
107
|
+
let bezet = false;
|
|
106
108
|
await trace(sb, {
|
|
107
109
|
...basis,
|
|
108
110
|
nodeId: FLOW_NODE.ontvangst,
|
|
@@ -120,7 +122,10 @@ export async function runPlanQueue(sb, options = {}) {
|
|
|
120
122
|
if (!plannedBuffers.has(bufferId)) {
|
|
121
123
|
plannedBuffers.add(bufferId);
|
|
122
124
|
const plan = await replanBufferInternal(sb, bufferId);
|
|
123
|
-
if (plan.skipped === "
|
|
125
|
+
if (plan.skipped === "busy") {
|
|
126
|
+
bezet = true;
|
|
127
|
+
}
|
|
128
|
+
else if (plan.skipped === "locked") {
|
|
124
129
|
result.skippedLocked++;
|
|
125
130
|
await trace(sb, {
|
|
126
131
|
...basis,
|
|
@@ -177,7 +182,10 @@ export async function runPlanQueue(sb, options = {}) {
|
|
|
177
182
|
}
|
|
178
183
|
else {
|
|
179
184
|
const plan = await replanOrderInternal(sb, row.order_id);
|
|
180
|
-
if (plan?.skipped === "
|
|
185
|
+
if (plan?.skipped === "busy") {
|
|
186
|
+
bezet = true;
|
|
187
|
+
}
|
|
188
|
+
else if (plan?.skipped === "locked") {
|
|
181
189
|
result.skippedLocked++;
|
|
182
190
|
await trace(sb, {
|
|
183
191
|
...basis,
|
|
@@ -230,6 +238,22 @@ export async function runPlanQueue(sb, options = {}) {
|
|
|
230
238
|
// De blokkade zet de wachtrijregel zelf al op 'geblokkeerd'; die mag niet
|
|
231
239
|
// alsnog als afgerond worden weggeschreven. Een wachtende vergelijking
|
|
232
240
|
// krijgt geen "na"-stand en wordt daarom als overgeslagen afgesloten.
|
|
241
|
+
// 1.0.179 (punt 5): lease bezet is geen "klaar". Opdracht blijft open en komt later terug.
|
|
242
|
+
if (bezet) {
|
|
243
|
+
const sec = opnieuwOverSeconden(Number(row.attempts ?? 0));
|
|
244
|
+
await sb.rpc("logistics_plan_retry_later", { p_id: row.id, p_seconds: sec });
|
|
245
|
+
result.skippedLocked++;
|
|
246
|
+
await trace(sb, {
|
|
247
|
+
...basis,
|
|
248
|
+
step: "Indeling later opnieuw",
|
|
249
|
+
status: "wachtend",
|
|
250
|
+
decision: "Opdracht blijft open",
|
|
251
|
+
reason: "Deze buffer werd op hetzelfde moment al ingedeeld. De order wordt over " + sec + " seconden opnieuw geprobeerd.",
|
|
252
|
+
errorClass: "regel",
|
|
253
|
+
nextStep: "Volgende planronde",
|
|
254
|
+
});
|
|
255
|
+
continue;
|
|
256
|
+
}
|
|
233
257
|
if (blocked) {
|
|
234
258
|
// De blokkade raakt soms alleen de buffer-leden zonder kar, niet de
|
|
235
259
|
// order die deze ronde oppakte (FO-2601389). Sluit die claim dan hier
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ruleEngineSchema.d.ts","sourceRoot":"","sources":["../../src/lib/ruleEngineSchema.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,SAAS,GACjB,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,MAAM,GACN,UAAU,GACV,MAAM,GACN,UAAU,GACV,OAAO,GACP,MAAM,GACN,QAAQ,GACR,aAAa,GACb,SAAS,GACT,SAAS,GACT,UAAU,CAAC;AAMf,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,OAAO,EAAE,CAAC;IACd,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8FAA8F;IAC9F,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,wFAAwF;IACxF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mEAAmE;IACnE,QAAQ,CAAC,EAAE;QACT,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,wGAAwG;IACxG,SAAS,CAAC,EAAE,cAAc,GAAG,cAAc,EAAE,CAAC;CAC/C;AAGD,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAID,eAAO,MAAM,gBAAgB,EAAE,WAAW,EAQzC,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,WAAW,EAK5C,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,UAAU,EAAE,aAAa,EAAE,CAAC;CAC7B;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAI9D,eAAO,MAAM,UAAU,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"ruleEngineSchema.d.ts","sourceRoot":"","sources":["../../src/lib/ruleEngineSchema.ts"],"names":[],"mappings":"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"}
|
|
@@ -737,19 +737,12 @@ export const RULE_STEPS = [
|
|
|
737
737
|
],
|
|
738
738
|
},
|
|
739
739
|
{ key: "packing_slip_station", label: "Pickstation", type: "pickstation" },
|
|
740
|
-
{
|
|
741
|
-
key: "packing_slip_layout",
|
|
742
|
-
label: "Pakbon layout",
|
|
743
|
-
type: "layout",
|
|
744
|
-
layoutTypes: ["pakbon"],
|
|
745
|
-
description: "De pakbon-layout voor dit soort orders. Of gelijke karren gebundeld worden, of er een barcode op staat en hoe een volle kar en een deelkar eruitzien, stel je in de Layout maker in. Op \u201cAutomatisch\u201d pakt de Layout maker zijn eigen actieve layout. Levert Floriday een kant-en-klare pakbon als PDF, dan wordt die altijd gebruikt.",
|
|
746
|
-
},
|
|
747
740
|
{
|
|
748
741
|
key: "packing_slip_help",
|
|
749
742
|
label: "Waar stel ik dit in?",
|
|
750
743
|
type: "guidance",
|
|
751
744
|
guidance: {
|
|
752
|
-
engine: "Hier bepaal je w\u00e1nneer de pakbon vrijkomt, naar welk pickstation hij gaat
|
|
745
|
+
engine: "Hier bepaal je w\u00e1nneer de pakbon vrijkomt, en naar welk pickstation hij gaat. Het document wordt automatisch bepaald uit de order.",
|
|
753
746
|
layoutMaker: "In de Layout maker teken je de layout zelf, zet je er \u00e9\u00e9n op actief en koppel je printplekken aan computers en printers. Welke printer er print, bepaal je daar.",
|
|
754
747
|
pickstations: "Op de pickschermen koppel je elk pickstation aan een printplek uit de Layout maker. Ontbreekt die koppeling, dan blijft de printopdracht wachten in plaats van op een willekeurige printer te belanden.",
|
|
755
748
|
},
|
|
@@ -819,19 +812,12 @@ export const RULE_STEPS = [
|
|
|
819
812
|
},
|
|
820
813
|
],
|
|
821
814
|
},
|
|
822
|
-
{
|
|
823
|
-
key: "sticker_layout",
|
|
824
|
-
label: "Welke layout voor dit soort orders?",
|
|
825
|
-
type: "layout",
|
|
826
|
-
layoutTypes: ["sticker", "etiket"],
|
|
827
|
-
description: "Kies de layout die bij dit soort orders hoort. Op \u201cAutomatisch\u201d pakt de Layout maker zijn eigen actieve layout. Levert Floriday kant-en-klare stickers als PDF, dan worden die altijd gebruikt.",
|
|
828
|
-
},
|
|
829
815
|
{
|
|
830
816
|
key: "sticker_help",
|
|
831
817
|
label: "Waar stel ik dit in?",
|
|
832
818
|
type: "guidance",
|
|
833
819
|
guidance: {
|
|
834
|
-
engine: "Hier bepaal je w\u00e1nneer de stickers vrijkomen, naar welk pickstation ze gaan
|
|
820
|
+
engine: "Hier bepaal je w\u00e1nneer de stickers vrijkomen, en naar welk pickstation ze gaan. Het document wordt automatisch bepaald uit de order.",
|
|
835
821
|
layoutMaker: "In de Layout maker teken je de layout zelf, zet je er \u00e9\u00e9n op actief en koppel je printplekken aan computers en printers. Welke printer er print, bepaal je daar.",
|
|
836
822
|
pickstations: "Op de pickschermen koppel je elk pickstation aan een printplek uit de Layout maker. Ontbreekt die koppeling, dan blijft de printopdracht wachten in plaats van op een willekeurige printer te belanden.",
|
|
837
823
|
},
|
|
@@ -855,25 +841,12 @@ export const RULE_STEPS = [
|
|
|
855
841
|
],
|
|
856
842
|
},
|
|
857
843
|
{ key: "shipping_note_station", label: "Pickstation", type: "pickstation" },
|
|
858
|
-
{
|
|
859
|
-
key: "shipping_note_layout",
|
|
860
|
-
label: "Verzendbrief voor BVO orders",
|
|
861
|
-
type: "layout",
|
|
862
|
-
layoutTypes: [
|
|
863
|
-
"verzendlabel",
|
|
864
|
-
"transportdocument",
|
|
865
|
-
"afleverbrief",
|
|
866
|
-
"veilingbrief",
|
|
867
|
-
"veilingbon",
|
|
868
|
-
],
|
|
869
|
-
description: "\u00c9\u00e9n layout voor de verzend-, aflever- en veilingbrief van BVO orders. Op \u201cAutomatisch\u201d pakt de Layout maker zijn eigen actieve layout. Levert Floriday een kant-en-klare brief als PDF, dan wordt die altijd gebruikt.",
|
|
870
|
-
},
|
|
871
844
|
{
|
|
872
845
|
key: "shipping_note_help",
|
|
873
846
|
label: "Waar stel ik dit in?",
|
|
874
847
|
type: "guidance",
|
|
875
848
|
guidance: {
|
|
876
|
-
engine: "Hier bepaal je w\u00e1nneer de verzendbrief vrijkomt, naar welk pickstation hij gaat
|
|
849
|
+
engine: "Hier bepaal je w\u00e1nneer de verzendbrief vrijkomt, en naar welk pickstation hij gaat. Het document wordt automatisch bepaald uit de order.",
|
|
877
850
|
layoutMaker: "In de Layout maker teken je de layout zelf, zet je er \u00e9\u00e9n op actief en koppel je printplekken aan computers en printers. Welke printer er print, bepaal je daar.",
|
|
878
851
|
pickstations: "Op de pickschermen koppel je elk pickstation aan een printplek uit de Layout maker. Ontbreekt die koppeling, dan blijft de printopdracht wachten in plaats van op een willekeurige printer te belanden.",
|
|
879
852
|
},
|
|
@@ -903,19 +876,12 @@ export const RULE_STEPS = [
|
|
|
903
876
|
],
|
|
904
877
|
},
|
|
905
878
|
{ key: "production_note_station", label: "Pickstation", type: "pickstation" },
|
|
906
|
-
{
|
|
907
|
-
key: "production_note_layout",
|
|
908
|
-
label: "Welke layout voor dit soort orders?",
|
|
909
|
-
type: "layout",
|
|
910
|
-
layoutTypes: ["productiebon", "magazijnlijst"],
|
|
911
|
-
description: "Kies de layout die bij dit soort orders hoort. Laat je dit op \u201cAutomatisch\u201d staan, dan pakt de Layout maker zijn eigen actieve layout.",
|
|
912
|
-
},
|
|
913
879
|
{
|
|
914
880
|
key: "production_note_help",
|
|
915
881
|
label: "Waar stel ik dit in?",
|
|
916
882
|
type: "guidance",
|
|
917
883
|
guidance: {
|
|
918
|
-
engine: "Hier bepaal je w\u00e1nneer de productiebon vrijkomt, naar welk pickstation hij gaat
|
|
884
|
+
engine: "Hier bepaal je w\u00e1nneer de productiebon vrijkomt, en naar welk pickstation hij gaat. Het document wordt automatisch bepaald uit de order.",
|
|
919
885
|
layoutMaker: "In de Layout maker teken je de layout zelf, zet je er \u00e9\u00e9n op actief en koppel je printplekken aan computers en printers. Welke printer er print, bepaal je daar.",
|
|
920
886
|
pickstations: "Op de pickschermen koppel je elk pickstation aan een printplek uit de Layout maker. Ontbreekt die koppeling, dan blijft de printopdracht wachten in plaats van op een willekeurige printer te belanden.",
|
|
921
887
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ruleEngineWizard.d.ts","sourceRoot":"","sources":["../../src/lib/ruleEngineWizard.ts"],"names":[],"mappings":"AAQA,OAAO,EAGL,KAAK,SAAS,EACd,KAAK,SAAS,EAEf,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,2EAA2E;IAC3E,cAAc,EAAE,OAAO,CAAC;CACzB;AAeD,eAAO,MAAM,YAAY,EAAE,UAAU,EAsDpC,CAAC;AA+BF,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAEzD;
|
|
1
|
+
{"version":3,"file":"ruleEngineWizard.d.ts","sourceRoot":"","sources":["../../src/lib/ruleEngineWizard.ts"],"names":[],"mappings":"AAQA,OAAO,EAGL,KAAK,SAAS,EACd,KAAK,SAAS,EAEf,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,2EAA2E;IAC3E,cAAc,EAAE,OAAO,CAAC;CACzB;AAeD,eAAO,MAAM,YAAY,EAAE,UAAU,EAsDpC,CAAC;AA+BF,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAEzD;AAoED,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAE9D;AAyCD,sEAAsE;AACtE,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAStF"}
|
|
@@ -137,13 +137,11 @@ const EXTRA_HELP = {
|
|
|
137
137
|
packing_slip_release: "Bepaalt op welk moment de pakbon bij het pickstation verschijnt.",
|
|
138
138
|
packing_slip_hours_before: "Zoveel uur vóór het picken staat de pakbon klaar.",
|
|
139
139
|
packing_slip_station: "Het pickstation waar de pakbon uitgeprint wordt.",
|
|
140
|
-
packing_slip_layout: "De layout die de Engine bij elke pakbon meestuurt. Bundelen van gelijke karren, de barcode en het verschil tussen een volle kar en een deelkar stel je in de Layout maker in.",
|
|
141
140
|
sticker_release: "Bepaalt op welk moment de stickers bij het pickstation verschijnen. Kies \u201cgelijk met de bijbehorende pakbon\u201d als sticker en pakbon altijd samen uit de printer moeten komen.",
|
|
142
141
|
sticker_hours_before: "Zoveel uur vóór het picken staan de stickers klaar.",
|
|
143
142
|
sticker_station: "Het pickstation waar de stickers uitgeprint worden.",
|
|
144
143
|
shipping_note_release: "Bepaalt op welk moment de verzendbrief beschikbaar komt.",
|
|
145
144
|
shipping_note_station: "Het pickstation waar de verzendbrief uitgeprint wordt.",
|
|
146
|
-
shipping_note_layout: "\u00c9\u00e9n layout voor de verzend-, aflever- en veilingbrief van BVO orders.",
|
|
147
145
|
production_note_release: "Bepaalt op welk moment de productiebon beschikbaar komt.",
|
|
148
146
|
production_note_station: "Het pickstation waar de productiebon uitgeprint wordt.",
|
|
149
147
|
control_mode: "Hoe je controleert of de kar klopt voordat hij weggaat. Bij 'Scannen voor afmelden' is één pakbonscan genoeg en wordt de hele kar direct afgemeld.",
|
|
@@ -377,7 +377,7 @@ export async function runShippingNoteQueue(sb, options = {}) {
|
|
|
377
377
|
const printPlekId = String(slipPayload["print_plek_id"] ?? "").trim() || null;
|
|
378
378
|
const cartId = slipPayload["cart_id"] ?? row.cart_id;
|
|
379
379
|
// Layout op id: de actieve Floriday-afleverbrief (bij meerdere de standaard).
|
|
380
|
-
const layout = await floridayLayout(sb, "afleverbrief");
|
|
380
|
+
const layout = await floridayLayout(sb, "afleverbrief", row.order_id);
|
|
381
381
|
if (!layout.layoutId) {
|
|
382
382
|
await sb.rpc("logistics_slip_note_hold_layout", { _id: row.id, _reason: layout.reden });
|
|
383
383
|
run.waiting++;
|
|
@@ -9,9 +9,34 @@ export interface StickerRun {
|
|
|
9
9
|
warnings: number;
|
|
10
10
|
errors: string[];
|
|
11
11
|
}
|
|
12
|
+
interface Row {
|
|
13
|
+
id: string;
|
|
14
|
+
soort: "sticker" | "traysticker" | "eigen_sticker" | "eigen_traysticker";
|
|
15
|
+
bron_id: string;
|
|
16
|
+
eigen_sticker_id?: string | null;
|
|
17
|
+
order_id: string | null;
|
|
18
|
+
order_number: string | null;
|
|
19
|
+
cart_id: string | null;
|
|
20
|
+
kopieen: number;
|
|
21
|
+
breedte_mm: number | null;
|
|
22
|
+
hoogte_mm: number | null;
|
|
23
|
+
print_plek_id: string | null;
|
|
24
|
+
fulfillment_order_id: string | null;
|
|
25
|
+
status: string;
|
|
26
|
+
attempts: number;
|
|
27
|
+
sticker_type?: string | null;
|
|
28
|
+
print_job_id?: string | null;
|
|
29
|
+
herprint_reden?: string | null;
|
|
30
|
+
herprint_requested_at?: string | null;
|
|
31
|
+
}
|
|
32
|
+
/** Opslag van eigen stickers (Klanten-module, customer_product_stickers). */
|
|
33
|
+
export declare const EIGEN_STICKER_BUCKET = "customer-stickers";
|
|
34
|
+
/** Documentsoort voor de centrale documentkeuze. */
|
|
35
|
+
export declare function documentSoort(soort: Row["soort"]): string;
|
|
12
36
|
export declare function runStickerQueue(sb: SupabaseClient, opts?: {
|
|
13
37
|
limit?: number;
|
|
14
38
|
}): Promise<StickerRun>;
|
|
15
39
|
/** Reden die de layoutkeuze geeft als er geen (eenduidige) Floriday-layout is. */
|
|
16
40
|
export declare function isGeenLayoutReden(reden: unknown): boolean;
|
|
41
|
+
export {};
|
|
17
42
|
//# sourceMappingURL=stickerQueue.server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stickerQueue.server.d.ts","sourceRoot":"","sources":["../../src/lib/stickerQueue.server.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"stickerQueue.server.d.ts","sourceRoot":"","sources":["../../src/lib/stickerQueue.server.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAkB5D,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,UAAU,GAAG;IACX,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,SAAS,GAAG,aAAa,GAAG,eAAe,GAAG,mBAAmB,CAAC;IACzE,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC;AAKD,6EAA6E;AAC7E,eAAO,MAAM,oBAAoB,sBAAsB,CAAC;AAExD,oDAAoD;AACpD,wBAAgB,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,MAAM,CAEzD;AAaD,wBAAsB,eAAe,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAuW5G;AAoGD,kFAAkF;AAClF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAGzD"}
|