Backend: endpoints en volledige functiecatalogus
De catalogus bevat 121 functies in LMF.pm, 36 in EmballageControl, 47 in RoutePlanImporter en 11 in de HTTP-handler, inclusief constructors/booleanhelpers. Bronnen: huidige werkboom; machineleesbaar bewijs. Alle objecten zijn Perl-hashrefs, DBH/cursorobjecten of de genoemde serviceobjecten. Voor logistieke/emballagebetekenis en statusgevolgen zie de doelregel per functie en de flowhoofdstukken.
Request- en outputcontract
HTTP → XLSLMFHandler → handle_request({base,user,request,request_method,url_param,requests}). Parameters staan normaliter onder base.params. Datumfilters heten start_date/end_date; ID-betekenissen verschillen per endpoint. POST verplicht alleen waar expliciet gecontroleerd (route_plan/dash); bestaande andere handlers lezen params zonder uniforme methodguard.
Responses zijn niet uniform: {code,data:{orders/...}}, {code,deliveries,role}, {code,data:[...]}, {success,error}, of een stubmelding. JSON-code403/500 betekent in deze handler niet automatisch HTTP403/500. Alleen malformed JSON zet expliciet HTTP400. Ongeldig/onbekend endpoint kan undef/null opleveren. true/false zijn scalarreferences voor JSON-booleans.
handle_request is de endpointregistratie: login/keana/check_token/postcode/dash/emballage_hub_control vóór rolbranches; daarna HUB, klant, leverancier, logistiek. identify en ongeauthenticeerde connector/log zitten uitsluitend in de handler. De geteste React-calls staan in frontend.
Kritieke payloadcontracten
route_plan: route_id moet positief integer zijn; route_date wordt toegestaan maar niet gebruikt/gevalideerd. stops moet een array zijn; leeg of alleen niet-customerstops levert nul updates op. Customerstops vereisen positieve location_id/sequence; locaties mogen niet dubbel, sequences worden niet op uniciteit of aaneengeslotenheid getest. Geen max500-check zoals de afzonderlijke importer.hub_*_deliveries: supplier_id of location_id (numeriek), delivery_date, packages en optioneel returned_packages met id/number/package_type. Bronreference is optioneel; ontbrekende bron blokkeert niet.stop: samengestelde stop_id, packages/returned_packages; de datum voor schrijven is vandaag, niet start_date/end_date.confirm_*_delivery: delivery_id als pakbon.guid, outbound_packages; comment/photo/signature optioneel. returned_packages/datetime worden niet voor een emballageboeking gebruikt.emballage_hub_control: start_date/end_date, eigen HUB en optionele supplier/location/article/kvd/status/paging. Let op U20: gewone hash versus blessed Base verhindert parameters uit normale handler.
Leesinstructie catalogus
Elke entry geeft doel/output, inputsignatuur/paramkeys, calls/callers en SQL-fragmenten met tabellen/writegevolgen. De common $args bevat het bovengenoemde requestobject; signatures met $dbh, lijsten of filters zijn interne helpers. “Geen directe SQL” betekent niet dat aangeroepen helpers geen DB gebruiken. Requestcache is uitsluitend in-memory.
De SQL-fragmenten zijn letterlijk uit strings gehaald en witruimte genormaliseerd. Bij stringconcatenatie staat alleen het eerste fragment hier; de gelinkte functie en genoemde bouwhelpers zijn gezaghebbend voor volledige SQL/binds. CTEnamen zijn niet als tabellen geteld. Callerindex is statisch en binnen deze vier bestanden; externe callers/React staan in andere hoofdstukken. Geen runtime calltrace of volledige CPAN-transitieve callgraph geclaimd.
XLS/LMF.pm
true
Bron. JSON-true scalarreferentie; utility, geen DB.
- Input: methodereceiver + request-args, of parameterloze helper zoals hierboven beschreven.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::keana_webhook. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
new
Bron. Leeg blessed LMF-serviceobject; geen domeinstatus of DB.
- Input: methodereceiver + request-args, of parameterloze helper zoals hierboven beschreven.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::handle_request;XLS/LMF.pm::_route_plan_importer;XLS/LMF.pm::postcode;XLS/LMF.pm::stops;XLS/LMF.pm::new_supplier_delivery;XLS/LMF.pm::new_supplier_deliveries;XLS/LMF.pm::next_logistics_delivery;XLS/LMF.pm::logistics_pickup;XLS/LMF.pm::logistics_delivery;XLS/LMF.pm::logistics_deliveries;XLS/LMF.pm::customer_delivery;XLS/LMF.pm::customer_deliveries;XLS/LMF.pm::supplier_deliveries;XLS/LMF.pm::keana_webhook;XLS/LMF.pm::klant;XLS/LMF.pm::leverancier. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
handle_request
Bron. Dispatch op request en rol; retourneert resultaat van geselecteerde functie, false bij geen rol, soms undef bij onbekende request binnen rol.
- Input: my ( $args ) = @_.
- Aanroepen:
_dash_dispatch,_dash_request,accept_new_delivery,assignment,b2c_hub_order,b2c_hub_orders,check_token,confirm_delivery,customer_dashboard,customer_deliveries,customer_delivery,download_orders,hub_customer_products,hub_customers,hub_dashboard,hub_incoming,hub_incoming_deliveries,hub_orders,hub_outgoing,hub_outgoing_deliveries,hub_routes,hub_supplier_products,hub_suppliers,hub_vehicles,keana_webhook,location_comment,log,log_report,log_report_hub,logistics_dashboard,logistics_deliveries,logistics_delivery,logistics_pickup,new,new_supplier_deliveries,new_supplier_delivery,next_logistics_delivery,orders,postcode,products,return_packaging,role,route_plan,stop,stops,supplier_dashboard,supplier_deliveries,update_supplier_delivery,upload_assortment,upload_invoices,upload_package_info. Modules: XLS::LMF::EmballageControl::new. - Statische callers: geen binnen deze vier bestanden; constructor/dispatch/externe toegang zoals beschreven.
- DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
route_plan
Bron. POST-guard en route_lokatie-updater; code/message/data met route_id/customer_stops/updated, geen importer-aanroep.
- Input: my ( $args ) = @_.
- Aanroepen:
_route_plan_post_method,_route_plan_update_route_locations. - Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
routeplan_importer
Bron. Factory voor RoutePlanImporter; retourneert nieuw object, geen actieve caller in LMF.
- Input: methodereceiver + request-args, of parameterloze helper zoals hierboven beschreven.
- Aanroepen:
new. Modules: XLS::LMF::RoutePlanImporter::new. - Statische callers: geen binnen deze vier bestanden; constructor/dispatch/externe toegang zoals beschreven.
- DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
routeplan_update_route_locations
Bron. Valideert gebruiker/payload, zoekt unieke route_lokatie per klantlocatie en wijzigt nummer; commit/rollback, code-resultaat.
- Input: my ( $args ) = @_.
- Aanroepen:
_lmf_error,_lmf_positive_int,_lmf_truthy,_route_plan_begin_transaction,_route_plan_commit_transaction,_route_plan_request_payload,_route_plan_rollback_transaction,_route_plan_route_location,_route_plan_route_location_payload,stop. - Statische callers:
XLS/LMF.pm::route_plan. - DB-objecten:
route_lokatie. Writes: route_lokatie.
<details><summary>SQL-bronfragmenten</summary>
UPDATE route_lokatie SET nummer=? WHERE id=? AND (nummer IS DISTINCT FROM ?)
</details>
routeplan_request_payload
Bron. Kopie van paramshash zonder Authorization, anders oorspronkelijke waarde; geen writes.
- Input: my ($params) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::_route_plan_update_route_locations. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
routeplan_route_location_payload
Bron. Whitelist route_id/route_date/stops, positieve route-ID; alleen customerstops, unieke location_id en positieve sequence; code+genormaliseerde data.
- Input: my ($payload) = @_.
- Aanroepen:
_lmf_error,_lmf_positive_int,stop. - Statische callers:
XLS/LMF.pm::_route_plan_update_route_locations. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
routeplan_route_location
Bron. SELECT route_lokatie op locatie; 422 bij geen rij, 409 bij meerdere; anders code+id/nummer.
- Input: my ($dbh, $location_id) = @_.
- Aanroepen:
_lmf_error. - Statische callers:
XLS/LMF.pm::_route_plan_update_route_locations. - DB-objecten:
route_lokatie. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT id, nummer FROM route_lokatie WHERE lokatie=?
</details>
routeplan_begin_transaction
Bron. DBH AutoCommit controleren/begin_work; retourneert ownership=1 ook bij bestaande transactie.
- Input: my ($dbh) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::_route_plan_update_route_locations. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
routeplan_commit_transaction
Bron. Commit wanneer ownership waar is; geen businessoutput.
- Input: my ($dbh, $owns_transaction) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::_route_plan_update_route_locations. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE; expliciete commit.
routeplan_rollback_transaction
Bron. Rollback in eval wanneer ownership waar is; geen businessoutput.
- Input: my ($dbh, $owns_transaction) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::_route_plan_update_route_locations. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
routeplan_post_method
Bron. Trim/case-normalisatie requestmethod → boolean POST.
- Input: my ($method) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::route_plan;XLS/LMF.pm::_dash_dispatch. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
dashrequest
Bron. Herkenning van vier dash-endpointnamen → boolean.
- Input: my ($request) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
dashdispatch
Bron. POST-guard, verbiedt clientscope, resolve servermarktplaatsen en roept dash-methode; response van die methode.
- Input: my ( $args ) = @_.
- Aanroepen:
_dash_has_scope_parameter,_dash_marketplace_scope,_lmf_error,_route_plan_post_method,dash_customers,dash_orders,dash_route_customers,dash_suppliers. - Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
dashhas_scope_parameter
Bron. Normaliseert parameternamen en herkent verboden tenant/partij/projectkeys → boolean.
- Input: my ($params) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::_dash_dispatch. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
dashmarketplace_scope
Bron. Rol→marktplaatsen uit DB; code403 of code200/data.marketplace_ids.
- Input: my ( $args ) = @_.
- Aanroepen:
_dash_supplier_marketplaces,_lmf_error,_lmf_positive_int,_lmf_truthy,_unique_defined_values. - Statische callers:
XLS/LMF.pm::_dash_dispatch. - DB-objecten:
klant. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT klant.marktplaats FROM klant WHERE klant.id=? AND klant.marktplaats IS NOT NULL
</details>
dashsupplier_marketplaces
Bron. Supplier-ID → unieke positieve marktplaats-ID-lijst uit leverancier_marktplaats.
- Input: my ( $dbh, $supplier_id ) = @_.
- Aanroepen:
_lmf_positive_int,_unique_defined_values. - Statische callers:
XLS/LMF.pm::_dash_marketplace_scope. - DB-objecten:
leverancier_marktplaats. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT DISTINCT marktplaats FROM leverancier_marktplaats WHERE leverancier=? AND marktplaats IS NOT NULL ORDER BY marktplaats
</details>
lmferror
Bron. code/message/optionele data → uniforme errorhash.
- Input: my ($code, $message, $data) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::_route_plan_update_route_locations;XLS/LMF.pm::_route_plan_route_location_payload;XLS/LMF.pm::_route_plan_route_location;XLS/LMF.pm::_dash_dispatch;XLS/LMF.pm::_dash_marketplace_scope;XLS/LMF.pm::dash_customers;XLS/LMF.pm::dash_route_customers;XLS/LMF.pm::dash_suppliers;XLS/LMF.pm::dash_orders. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
check_token
Bron. Authorization of token valideren; leest lmf_user en geeft data.valid/data.active JSON-booleans; geen sessievernieuwing.
- Input: my ( $args ) = @_; HTTP-paramkeys:
Authorization,token. - Aanroepen:
_extract_uuid_token. - Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
lmf_user. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT id, actief FROM lmf_user WHERE token=?
</details>
extractuuid_token
Bron. Strip Bearer/spaties, UUID-vormvalidatie → token of undef.
- Input: my ($token) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::check_token;XLSLMFHandler.pm::authorization;XLSLMFHandler.pm::credentials. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
postcode
Bron. Postcode/nummer/addition normaliseren → XLS::Postcode.lookup → code/data of foutbericht; geen DB-write.
- Input: my ( $args ) = @_.
- Aanroepen:
new. Modules: XLS::Postcode::new. - Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
hub_customer_products
Bron. Productaantallen per locatie/datum, customer_id is lokatie.id; data.products, geen extra HUB-filter in SQL.
- Input: my ( $args ) = @_; HTTP-paramkeys:
customer_id,end_date,start_date. - Aanroepen: geen interne servicecall gevonden. Modules: XLS::Datum::JSON_Datum.
- Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
leverancier,lokatie,order_regel,product,vers_order. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT leverancier.id AS supplier_id, leverancier.naam AS supplier_name, product.id, product.code, product.naam AS name, product.omschrijving_verpakking AS package_description, vers_order.afleverdatum AS delivery_date, sum(order_regel.aantal) AS number FROM lokatie, leverancier, product, order_regel, vers_order WHERE leverancier.id = product.leverancier AND product.id = order_regel.product AND order_regel.vers_order = vers_order.id AND vers_order.lokatie = lokatie.id AND lokatie.id = ? AND vers_order.afleverdatum BETWEEN ? AND ? GROUP BY leverancier.id, leverancier.naam, product.id, product.code, product.naam, product.omschrijving_verpakking, vers_order.afleverdatum ORDER BY product.naam
</details>
hub_supplier_products
Bron. Productaantallen per leverancier/datum → data.products; geen extra HUB-filter in SQL.
- Input: my ( $args ) = @_; HTTP-paramkeys:
end_date,start_date,supplier_id. - Aanroepen: geen interne servicecall gevonden. Modules: XLS::Datum::JSON_Datum.
- Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
order_regel,product,vers_order. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT product.id, product.code, product.naam AS name, product.omschrijving_verpakking AS package_description, vers_order.afleverdatum AS delivery_date, sum(order_regel.aantal) AS number FROM product, order_regel, vers_order WHERE product.id = order_regel.product AND order_regel.vers_order = vers_order.id AND vers_order.leverancier = ? AND vers_order.afleverdatum BETWEEN ? AND ? GROUP BY product.id, product.code, product.naam, product.omschrijving_verpakking, vers_order.afleverdatum ORDER BY product.naam
</details>
hub_customers
Bron. Eigen HUB-orderlocaties binnen periode → data.customers met numerieke locatie-ID en coords.
- Input: my ( $args ) = @_; HTTP-paramkeys:
end_date,start_date. - Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
lokatie,vers_order. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT DISTINCT lokatie.id, lokatie.naam, lokatie.lat_lng FROM lokatie, vers_order WHERE lokatie.id = vers_order.lokatie AND vers_order.hub = ? AND vers_order.afleverdatum::date BETWEEN ? AND ? ORDER BY lokatie.naam
</details>
hub_suppliers
Bron. Leveranciers en HUB's uit eigen HUB-orders → data.suppliers met capabilityflags/coords.
- Input: my ( $args ) = @_; HTTP-paramkeys:
end_date,start_date. - Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
leverancier,vers_order. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT DISTINCT leverancier.id, leverancier.naam AS name, leverancier.latitude, leverancier.longitude, leverancier.hub AS can_act_as_hub, leverancier.vervoerder AS can_act_as_carrier FROM leverancier, vers_order WHERE ( leverancier.id = vers_order.leverancier OR leverancier.id = vers_order.hub ) AND vers_order.hub = ? AND vers_order.afleverdatum::date BETWEEN ? AND ? ORDER BY leverancier.naam
</details>
hub_orders
Bron. Pakbon/orderselectie voor eigen HUB plus partij/dagregistratietotalen → data.orders; bedrag in centen.
- Input: my ( $args ) = @_; HTTP-paramkeys:
end_date,start_date. - Aanroepen:
_location_date_key,_preload_registration_details_by_location_date,_preload_registration_details_by_supplier_date,_registration_totals. Modules: XLS::Datum::JSON_Datum, XLS::Datum::JSON_Timestamp. - Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
leverancier,leverancier_pakbon,lokatie,vers_order. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT DISTINCT leverancier.id, leverancier.naam, leverancier.latitude, leverancier.longitude, hub.id AS hub_id, hub.naam AS hub_name, hub.latitude AS hub_latitude, hub.longitude AS hub_longitude, lokatie.id AS lokatie_id, lokatie.naam AS lokatie_naam, lokatie.lat_lng, vers_order.id AS order_id, vers_order.order_datum AS order_date, vers_order.bedrag AS order_amount, leverancier_pakbon.lever_datum FROM leverancier AS hub, leverancier, lokatie, leverancier_pakbon, vers_order WHERE vers_order.id = leverancier_pakbon.vers_order AND hub.id = leverancier_pakbon.hub AND leverancier.id = leverancier_pakbon.leverancier AND lokatie.id = leverancier_pakbon.lokatie AND leverancier_pakbon.hub = ? AND leverancier_pakbon.lever_datum::date BETWEEN ? AND ? ORDER BY leverancier.naam
</details>
dash_customers
Bron. Servermarktplaatsscope en datum → data.customers met locaties/coords.
- Input: my ( $args ) = @_; HTTP-paramkeys:
end_date,start_date. - Aanroepen:
_dash_in_clause,_lmf_error. - Statische callers:
XLS/LMF.pm::_dash_dispatch. - DB-objecten:
klant,lokatie,vers_order. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT DISTINCT lokatie.id, lokatie.naam, lokatie.lat_lng FROM vers_order JOIN lokatie ON lokatie.id = vers_order.lokatie JOIN klant ON klant.id = lokatie.klant WHERE $marketplace_sql AND (vers_order.marktplaats IS NULL OR vers_order.marktplaats = klant.marktplaats) AND vers_order.afleverdatum::date BETWEEN ? AND ? ORDER BY lokatie.naam
</details>
dash_route_customers
Bron. Scoped klanten → kandidaatroute van marktplaatseigenaar; kiest gesorteerd één route per locatie en waarschuwt bij meer; data.routes[].customers.
- Input: my ( $args ) = @_; HTTP-paramkeys:
end_date,start_date. - Aanroepen:
_dash_in_clause,_dash_route_number_sort,_lmf_error,_lmf_positive_int. - Statische callers:
XLS/LMF.pm::_dash_dispatch. - DB-objecten:
klant,lokatie,marktplaats,route,route_lokatie,vers_order. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
WITH scoped_customers AS ( SELECT DISTINCT lokatie.id, lokatie.naam, lokatie.lat_lng, klant.marktplaats FROM vers_order JOIN lokatie ON lokatie.id = vers_order.lokatie JOIN klant ON klant.id = lokatie.klant WHERE $marketplace_sql AND (vers_order.marktplaats IS NULL OR vers_order.marktplaats = klant.marktplaats) AND vers_order.afleverdatum::date BETWEEN ? AND ? ) SELECT scoped_customers.id, scoped_customers.naam, scoped_customers.lat_lng, route.id AS route_id, route.naam AS route_name, route_lokatie.nummer FROM scoped_customers LEFT JOIN marktplaats ON marktplaats.id = scoped_customers.marktplaats LEFT JOIN route_lokatie ON route_lokatie.lokatie = scoped_customers.id LEFT JOIN route ON route.id = route_lokatie.route AND route.leverancier = marktplaats.leverancier ORDER BY scoped_customers.naam, scoped_customers.id, route_lokatie.nummer, route.naam, route.id
</details>
dash_suppliers
Bron. Scoped orders → leveranciers/HUB's met coords/capabilities; data.suppliers.
- Input: my ( $args ) = @_; HTTP-paramkeys:
end_date,start_date. - Aanroepen:
_dash_in_clause,_lmf_error. - Statische callers:
XLS/LMF.pm::_dash_dispatch. - DB-objecten:
klant,leverancier,lokatie,vers_order. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT DISTINCT leverancier.id, leverancier.naam AS name, leverancier.latitude, leverancier.longitude, leverancier.hub AS can_act_as_hub, leverancier.vervoerder AS can_act_as_carrier FROM vers_order JOIN lokatie ON lokatie.id = vers_order.lokatie JOIN klant ON klant.id = lokatie.klant JOIN leverancier ON ( leverancier.id = vers_order.leverancier OR leverancier.id = vers_order.hub ) WHERE $marketplace_sql AND (vers_order.marktplaats IS NULL OR vers_order.marktplaats = klant.marktplaats) AND vers_order.afleverdatum::date BETWEEN ? AND ? ORDER BY leverancier.naam
</details>
dash_orders
Bron. Scoped pakbon/orderdata plus per HUB/partij/dag geaggregeerde registratie → data.orders.
- Input: my ( $args ) = @_; HTTP-paramkeys:
end_date,start_date. - Aanroepen:
_dash_in_clause,_dash_registration_key,_lmf_error,_preload_dash_registration_details_by_location_date,_preload_dash_registration_details_by_supplier_date,_registration_totals. Modules: XLS::Datum::JSON_Datum, XLS::Datum::JSON_Timestamp. - Statische callers:
XLS/LMF.pm::_dash_dispatch. - DB-objecten:
klant,leverancier,leverancier_pakbon,lokatie,vers_order. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
WITH scoped_pakbon AS ( SELECT DISTINCT leverancier_pakbon.id AS pakbon_id, leverancier_pakbon.hub, leverancier_pakbon.leverancier, leverancier_pakbon.lokatie, leverancier_pakbon.lever_datum, vers_order.id AS order_id, vers_order.order_datum AS order_date, vers_order.bedrag AS order_amount FROM leverancier_pakbon JOIN vers_order ON vers_order.id = leverancier_pakbon.vers_order JOIN lokatie ON lokatie.id = leverancier_pakbon.lokatie JOIN klant ON klant.id = lokatie.klant WHERE $marketplace_sql AND (vers_order.marktplaats IS NULL OR vers_order.marktplaats = klant.marktplaats) AND leverancier_pakbon.lever_datum::date BETWEEN ? AND ? ) SELECT DISTINCT leverancier.id, leverancier.naam, leverancier.latitude, leverancier.longitude, hub.id AS hub_id, hub.naam AS hub_name, hub.latitude AS hub_latitude, hub.longitude AS hub_longitude, lokatie.id AS lokatie_id, lokatie.naam AS lokatie_naam, lokatie.lat_lng, scoped_pakbon.order_id, scoped_pakbon.order_date, scoped_pakbon.order_amount, scoped_pakbon.lever_datum FROM scoped_pakbon JOIN leverancier AS hub ON hub.id = scoped_pakbon.hub JOIN leverancier ON leverancier.id = scoped_pakbon.leverancier JOIN lokatie ON lokatie.id = scoped_pakbon.lokatie ORDER BY leverancier.naam
</details>
hub_vehicles
Bron. Actieve voertuigen van eigen leverancier-ID → data.vehicles met capaciteit en km/min/stopkosten; logt supplier-ID.
- Input: my ( $args ) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
voertuig. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT * FROM voertuig WHERE leverancier=? AND actief=?
</details>
hub_routes
Bron. HUB-routeleden en pakbondatumselectie → data.route; geen opgeslagen rit of optimizer.
- Input: my ( $args ) = @_; HTTP-paramkeys:
end_date,start_date. - Aanroepen: geen interne servicecall gevonden. Modules: XLS::Datum::JSON_Datum.
- Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
leverancier,leverancier_pakbon,lokatie,route,route_lokatie. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT DISTINCT route.id AS route_id, route.naam AS route_name, route_lokatie.nummer, leverancier_pakbon.lever_datum AS delivery_date, leverancier.id AS supplier_id, lokatie.id AS customer_id FROM route, leverancier_pakbon, route_lokatie LEFT JOIN lokatie ON lokatie.id = route_lokatie.lokatie LEFT JOIN leverancier ON leverancier.id = route_lokatie.leverancier WHERE leverancier_pakbon.hub = ? AND leverancier_pakbon.lever_datum BETWEEN ? AND ? AND route.leverancier = leverancier_pakbon.hub AND route_lokatie.route = route.id ORDER BY route_lokatie.nummer
</details>
b2c_hub_orders
Bron. Stub: alleen code200, geen selectie of verwerking.
- Input: my ( $args ) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
b2c_hub_order
Bron. Stub: alleen code200, geen selectie of verwerking.
- Input: my ( $args ) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
log_report_hub
Bron. Stub: alleen code200.
- Input: my ( $args ) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
log_report
Bron. Connectorlog voor eigen leverancier en datum → code/data-array met username/message/date.
- Input: my ( $args ) = @_; HTTP-paramkeys:
end_date,start_date. - Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
lmf_log. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT username, bericht AS message, datum AS date FROM lmf_log WHERE leverancier=? AND datum::date BETWEEN ? AND ? ORDER BY id DESC
</details>
log
Bron. Connectorbericht invoegen en commit → code200.
- Input: my ( $args ) = @_; HTTP-paramkeys:
message,username. - Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
lmf_log. Writes: lmf_log; expliciete commit.
<details><summary>SQL-bronfragmenten</summary>
INSERT INTO lmf_log(leverancier, username, bericht) VALUES(?,?,?)
</details>
hub_dashboard
Bron. Eigen HUB-orders per dag en top10 productgroepen → data.orders/data.products.
- Input: my ( $args ) = @_; HTTP-paramkeys:
end_date,start_date. - Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
order_regel,product,productgroep,vers_order. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT afleverdatum AS delivery_date, count(*) AS orders FROM vers_order WHERE afleverdatum BETWEEN ? AND ? AND hub=? GROUP BY afleverdatum ORDER BY afleverdatum
SELECT productgroep.naam AS name, sum(order_regel.aantal) AS number FROM vers_order, order_regel, product, productgroep WHERE productgroep.id = product.productgroep AND product.id = order_regel.product AND order_regel.vers_order = vers_order.id AND vers_order.afleverdatum BETWEEN ? AND ? AND vers_order.hub = ? GROUP BY productgroep.naam ORDER BY number DESC LIMIT 10
</details>
supplier_dashboard
Bron. Eigen leveranciersorders per dag en top10 productgroepen → data.orders/data.products.
- Input: my ( $args ) = @_; HTTP-paramkeys:
end_date,start_date. - Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
order_regel,product,productgroep,vers_order. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT afleverdatum AS delivery_date, count(*) AS orders FROM vers_order WHERE afleverdatum BETWEEN ? AND ? AND leverancier=? GROUP BY afleverdatum ORDER BY afleverdatum
SELECT productgroep.naam AS name, sum(order_regel.aantal) AS number FROM vers_order, order_regel, product, productgroep WHERE productgroep.id = product.productgroep AND product.id = order_regel.product AND order_regel.vers_order = vers_order.id AND vers_order.afleverdatum BETWEEN ? AND ? AND vers_order.leverancier = ? GROUP BY productgroep.naam ORDER BY number DESC LIMIT 10
</details>
logistics_dashboard
Bron. Orders met transporteur=user.leverancier_id per dag en top10 groepen → data.orders/data.products.
- Input: my ( $args ) = @_; HTTP-paramkeys:
end_date,start_date. - Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
order_regel,product,productgroep,vers_order. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT afleverdatum AS delivery_date, count(*) AS orders FROM vers_order WHERE afleverdatum BETWEEN ? AND ? AND transporteur=? GROUP BY afleverdatum ORDER BY afleverdatum
SELECT productgroep.naam AS name, sum(order_regel.aantal) AS number FROM vers_order, order_regel, product, productgroep WHERE productgroep.id = product.productgroep AND product.id = order_regel.product AND order_regel.vers_order = vers_order.id AND vers_order.afleverdatum BETWEEN ? AND ? AND vers_order.transporteur = ? GROUP BY productgroep.naam ORDER BY number DESC LIMIT 10
</details>
customer_dashboard
Bron. Orders voor eerste user.locations GUID per dag en top10 groepen → data.orders/data.products; dispatch bouwt vooraf role-object.
- Input: my ( $args ) = @_; HTTP-paramkeys:
end_date,start_date. - Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
lokatie,order_regel,product,productgroep,vers_order. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT afleverdatum AS delivery_date, count(*) AS orders FROM vers_order WHERE afleverdatum BETWEEN ? AND ? AND lokatie IN( SELECT id FROM lokatie WHERE guid= ?) GROUP BY afleverdatum ORDER BY afleverdatum
SELECT productgroep.naam AS name, sum(order_regel.aantal) AS number FROM vers_order, order_regel, product, productgroep WHERE productgroep.id = product.productgroep AND product.id = order_regel.product AND order_regel.vers_order = vers_order.id AND vers_order.afleverdatum BETWEEN ? AND ? AND vers_order.lokatie IN ( SELECT id FROM lokatie WHERE guid = ?) GROUP BY productgroep.naam ORDER BY number DESC LIMIT 10
</details>
orders
Bron. Eigen leveranciersorders in periode met locatie/status en order_regels → data.orders.
- Input: my ( $args ) = @_; HTTP-paramkeys:
end_date,start_date. - Aanroepen:
order_regels. - Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
lokatie,order_status,vers_order. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT vers_order.id AS order_id, lokatie.id AS location_id, lokatie.naam AS location_name, vers_order.afleverdatum AS delivery_date, order_status.naam AS status FROM vers_order, lokatie, order_status WHERE order_status.id = vers_order.order_status AND lokatie.id = vers_order.lokatie AND vers_order.leverancier = ? AND vers_order.afleverdatum BETWEEN ? AND ? AND (vers_order.app=false OR vers_order.app=true) ORDER BY vers_order.id
</details>
order_regels
Bron. vers_order-ID → productregels-array; weight weglaten bij stuk_gewicht=1.
- Input: my ( $args ) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::orders. - DB-objecten:
order_regel,product. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT product.code, product.naam AS name, product.omschrijving_verpakking AS package_description, product.stuk_gewicht, order_regel.aantal AS number, order_regel.bestel_gewicht AS weight FROM product, order_regel WHERE product.id=order_regel.product AND order_regel.vers_order=? ORDER BY product.naam
</details>
products
Bron. Eigen orderproducten in periode geaggregeerd per naam/verpakking/datum → data.products.
- Input: my ( $args ) = @_; HTTP-paramkeys:
end_date,start_date. - Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
order_regel,product,vers_order. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT vers_order.afleverdatum AS delivery_date, product.naam AS name, product.omschrijving_verpakking AS package_description, sum(order_regel.aantal) AS number FROM product, order_regel, vers_order WHERE product.id = order_regel.product AND order_regel.vers_order = vers_order.id AND vers_order.leverancier = ? AND vers_order.afleverdatum BETWEEN ? AND ? GROUP BY product.naam, product.omschrijving_verpakking, vers_order.afleverdatum ORDER BY vers_order.afleverdatum, product.naam
</details>
lmf_bezoeker
Bron. IP→bewaarde of via Base.ip_info nieuwe bezoeker; commit bij insert; kiest gebiedspagina of willekeurige fallback → pagina-hash.
- Input: my ( $args ) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers: geen binnen deze vier bestanden; constructor/dispatch/externe toegang zoals beschreven.
- DB-objecten:
lmf_bezoeker,lmf_pagina. Writes: lmf_bezoeker; expliciete commit.
<details><summary>SQL-bronfragmenten</summary>
SELECT * FROM lmf_bezoeker WHERE ip_adres=?
INSERT INTO lmf_bezoeker(ip_adres, plaats, latitude, longitude) VALUES(?,?,?,?)
SELECT * FROM lmf_pagina WHERE ? BETWEEN west AND oost AND ? BETWEEN zuid AND noord
SELECT count(*) FROM lmf_pagina
SELECT * FROM lmf_pagina WHERE id=?
</details>
assignment
Bron. Connector debtor/date/packages → bestaande pakbonmeldingen of nieuwe LMF-pakbon/footer/HUB-registratie; commit, code/message; quantity=0→1.
- Input: my ( $args ) = @_; HTTP-paramkeys:
date,debtor,order_number,packages. - Aanroepen:
lokatie_hub. - Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
leverancier_emballage_artikel,leverancier_emballage_registratie,leverancier_pakbon,leverancier_pakbon_footer,lokatie,lokatie_leverancier. Writes: leverancier_emballage_registratie, leverancier_pakbon, leverancier_pakbon_footer; expliciete commit.
<details><summary>SQL-bronfragmenten</summary>
SELECT * FROM lokatie WHERE id IN ( SELECT lokatie FROM lokatie_leverancier WHERE debiteurnummer=? AND leverancier=?)
SELECT * FROM leverancier_pakbon WHERE leverancier=? AND lokatie=? AND lever_datum=?
SELECT * FROM leverancier_emballage_artikel WHERE leverancier=? AND code=?
INSERT INTO leverancier_pakbon(leverancier, lokatie, factuur_nummer, lever_datum, via_hub, hub, lmf_levering) VALUES(?,?,?,?,?,?,?) RETURNING id
INSERT INTO leverancier_pakbon_footer(leverancier_pakbon, totaal_emballage_bedrag) VALUES(?,?)
SELECT levering FROM leverancier_pakbon WHERE id=?
INSERT INTO leverancier_emballage_registratie(leverancier, leverancier_emballage_artikel, datum, hub, inkomend, lmf_user, leverancier_pakbon, levering) VALUES(?,?,?,?,?,?,?,?)
</details>
lokatie_hub
Bron. Locatie-ID → eerste leverancier met lokatie_leverancier.levering=2; hashref/undef.
- Input: my ( $args ) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::assignment. - DB-objecten:
leverancier,lokatie_leverancier. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT * FROM leverancier WHERE id IN(SELECT leverancier FROM lokatie_leverancier WHERE lokatie=? AND levering=?)
</details>
download_orders
Bron. Eigen status1-orders + debtor + productregels → data.orders; verandert orderstatus niet.
- Input: my ( $args ) = @_.
- Aanroepen: geen interne servicecall gevonden. Modules: XLS::Datum::JSON_Datum.
- Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
lokatie_leverancier,order_regel,product,vers_order. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT product.code, product.naam AS name, product.stuk_gewicht AS type, product.bestelgewicht AS product_weight, order_regel.aantal AS number, order_regel.bestel_gewicht AS weight FROM product, order_regel WHERE product.id = order_regel.product AND order_regel.vers_order=?
SELECT * FROM vers_order WHERE leverancier=? AND order_status=? ORDER BY id
SELECT debiteurnummer FROM lokatie_leverancier WHERE lokatie=? AND leverancier=?
</details>
upload_assortment
Bron. Stub: code200 en ontvangstmelding, geen verwerking.
- Input: my ( $args ) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
upload_invoices
Bron. Stub: code200 en ontvangstmelding, geen verwerking.
- Input: my ( $args ) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
upload_package_info
Bron. Stub: code200 en ontvangstmelding, geen verwerking.
- Input: my ( $args ) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
location_comment
Bron. Comment bij locatie-GUID opslaan, commit; klant REFRESH → code/message/locations; UPDATE niet op klant-ID begrensd.
- Input: my ( $args ) = @_; HTTP-paramkeys:
comment,location. - Aanroepen:
klant. - Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
lokatie. Writes: lokatie; expliciete commit.
<details><summary>SQL-bronfragmenten</summary>
UPDATE lokatie SET bijzonderheden=? WHERE guid=?
</details>
hub_incoming_deliveries
Bron. HUB/leverancier/dag packages→inkomend en returned_packages→uitgaand; UPDATE/INSERT, bevestigd=1, bronlinks aanvullen, commit → code/message.
- Input: my ( $args ) = @_; HTTP-paramkeys:
delivery_date,packages,returned_packages,supplier_id. - Aanroepen:
_emballage_source_reference. - Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
leverancier_emballage_registratie. Writes: leverancier_emballage_registratie; expliciete commit.
<details><summary>SQL-bronfragmenten</summary>
INSERT INTO leverancier_emballage_registratie( lmf_user, hub, leverancier_emballage_artikel, kvd, inkomend, datum, leverancier, bevestigd, leverancier_pakbon, levering) VALUES(?,?,?,?,?,?,?,?,?,?) RETURNING id
UPDATE leverancier_emballage_registratie SET inkomend=?, bevestigd=?, leverancier_pakbon=COALESCE(leverancier_pakbon, ?), levering=COALESCE(levering, ?) WHERE leverancier_emballage_artikel=? AND hub=? AND datum=? AND leverancier=?
INSERT INTO leverancier_emballage_registratie( lmf_user, hub, leverancier_emballage_artikel, kvd, uitgaand, datum, leverancier, bevestigd, leverancier_pakbon, levering) VALUES(?,?,?,?,?,?,?,?,?,?) RETURNING id
UPDATE leverancier_emballage_registratie SET uitgaand=?, bevestigd=?, leverancier_pakbon=COALESCE(leverancier_pakbon, ?), levering=COALESCE(levering, ?) WHERE leverancier_emballage_artikel=? AND hub=? AND datum=? AND leverancier=?
</details>
hub_outgoing_deliveries
Bron. HUB/locatie/dag packages→uitgaand INSERT, returned_packages→inkomend UPDATE/INSERT; bevestigd=1, bronlinks, commit → code/message.
- Input: my ( $args ) = @_; HTTP-paramkeys:
delivery_date,location_id,packages,returned_packages. - Aanroepen:
_emballage_source_reference. - Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
leverancier_emballage_registratie. Writes: leverancier_emballage_registratie; expliciete commit.
<details><summary>SQL-bronfragmenten</summary>
INSERT INTO leverancier_emballage_registratie( lmf_user, hub, leverancier_emballage_artikel, kvd, uitgaand, datum, lokatie, bevestigd, leverancier_pakbon, levering) VALUES(?,?,?,?,?,?,?,?,?,?) RETURNING id
INSERT INTO leverancier_emballage_registratie( lmf_user, hub, leverancier_emballage_artikel, kvd, inkomend, datum, lokatie, bevestigd, leverancier_pakbon, levering) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING id
UPDATE leverancier_emballage_registratie SET inkomend = ?, bevestigd = ?, leverancier_pakbon=COALESCE(leverancier_pakbon, ?), levering=COALESCE(levering, ?) WHERE leverancier_emballage_artikel = ? AND hub = ? AND datum = ? AND lokatie = ?
</details>
emballagesource_reference
Bron. Expliciete pakbon/guid/levering of unieke HUB-partij-datumbron zoeken → pakbon/levering-hash of lege hash.
- Input: my ( $args, $scope ) = @_; HTTP-paramkeys:
delivery_id,leverancier_pakbon,levering. - Aanroepen:
_emballage_source_reference_result,_lmf_positive_int. - Statische callers:
XLS/LMF.pm::hub_incoming_deliveries;XLS/LMF.pm::hub_outgoing_deliveries. - DB-objecten:
leverancier_pakbon. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT id, levering, hub, leverancier, lokatie, lever_datum FROM leverancier_pakbon WHERE id=?
SELECT id, levering, hub, leverancier, lokatie, lever_datum FROM leverancier_pakbon WHERE guid=?
SELECT id, levering, hub, leverancier, lokatie, lever_datum FROM leverancier_pakbon WHERE levering=?
SELECT id, levering, hub, leverancier, lokatie, lever_datum FROM leverancier_pakbon WHERE
</details>
emballagesource_reference_result
Bron. Gevonden bron en scope controleren → bron-ID-hash of lege hash.
- Input: my ( $row, $scope ) = @_.
- Aanroepen:
_emballage_source_in_scope,_lmf_positive_int. - Statische callers:
XLS/LMF.pm::_emballage_source_reference. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
emballagesource_in_scope
Bron. Aanwezige HUB/supplier/location/datumwaarden vergelijken → boolean; ontbrekende bronvelden blokkeren niet automatisch.
- Input: my ( $row, $scope ) = @_.
- Aanroepen:
_lmf_positive_int. - Statische callers:
XLS/LMF.pm::_emballage_source_reference_result. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
hub_incoming
Bron. Pakbonnen per leverancier/dag met eigen HUB, catalogus/locaties/registraties → data-array incoming/outgoing/ready/editable.
- Input: my ( $args ) = @_; HTTP-paramkeys:
end_date,start_date. - Aanroepen:
_location_date_key,_preload_locations_by_supplier_date,_preload_package_catalogs,_preload_registration_details_by_supplier_date. - Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
leverancier,leverancier_pakbon. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT leverancier.id AS supplier_id, leverancier.naam AS supplier, leverancier.adres AS address, leverancier.postcode AS zipcode, leverancier.plaats AS city, leverancier.latitude, leverancier.longitude, leverancier_pakbon.lever_datum AS delivery_date FROM leverancier, leverancier_pakbon WHERE leverancier.id = leverancier_pakbon.leverancier AND leverancier_pakbon.hub = ? AND leverancier_pakbon.lever_datum BETWEEN ? AND ? GROUP BY leverancier.id, leverancier.naam,leverancier.adres, leverancier.postcode, leverancier.plaats, leverancier.latitude, leverancier_pakbon.lever_datum ORDER BY leverancier.naam, leverancier_pakbon.lever_datum
</details>
hub_outgoing
Bron. Pakbonnen per locatie/dag met eigen HUB, catalogus/leveranciers/registraties → data-array incoming/outgoing/ready/coords.
- Input: my ( $args ) = @_; HTTP-paramkeys:
end_date,start_date. - Aanroepen:
_location_date_key,_preload_basic_suppliers_by_location_date,_preload_package_catalogs,_preload_registration_details_by_location_date. - Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
leverancier_pakbon,lokatie. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT lokatie.id AS location_id, lokatie.naam AS location, lokatie.adres AS address, lokatie.postcode AS zipcode, lokatie.plaats AS city, lokatie.lat_lng, leverancier_pakbon.lever_datum AS delivery_date FROM lokatie, leverancier_pakbon WHERE lokatie.id = leverancier_pakbon.lokatie AND leverancier_pakbon.hub = ? AND leverancier_pakbon.lever_datum BETWEEN ? AND ? GROUP BY lokatie.id, lokatie.naam, leverancier_pakbon.lever_datum ORDER BY lokatie.naam, leverancier_pakbon.lever_datum
</details>
stop
Bron. Split samengestelde stop_id en dispatch delivery_stop/pickup_stop; onbekend type geeft undef.
- Input: my ( $args ) = @_; HTTP-paramkeys:
stop_id. - Aanroepen:
delivery_stop,pickup_stop. - Statische callers:
XLS/LMF.pm::handle_request;XLS/LMF.pm::_route_plan_update_route_locations;XLS/LMF.pm::_route_plan_route_location_payload. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
delivery_stop
Bron. Klantstop registreren: packages→afgeleverd, retour→opgehaald, UPDATE/INSERT op vandaag; commit → code/message/data.stops met volledige stops-response.
- Input: my ( $args ) = @_; HTTP-paramkeys:
packages,returned_packages,stop_id. - Aanroepen:
_lmf_positive_int,stops. Modules: XLS::Datum::vandaag. - Statische callers:
XLS/LMF.pm::stop. - DB-objecten:
leverancier_emballage_registratie_stop,leverancier_pakbon. Writes: leverancier_emballage_registratie_stop; expliciete commit.
<details><summary>SQL-bronfragmenten</summary>
SELECT * FROM leverancier_pakbon WHERE id=?
INSERT INTO leverancier_emballage_registratie_stop( lmf_user, datum, lokatie, leverancier_emballage_artikel, opgehaald, afgeleverd, kvd, stop_id, leverancier_pakbon) VALUES(?,now(),?,?,?,?,?,?,?)
UPDATE leverancier_emballage_registratie_stop SET opgehaald=?, afgeleverd=?, leverancier_pakbon=COALESCE(leverancier_pakbon, ?) WHERE datum::date=? AND lokatie=? AND leverancier_emballage_artikel=? AND kvd=? AND stop_id=?
</details>
pickup_stop
Bron. HUB- of leveranciersstop registreren met dezelfde veldmapping; commit; berekent ongebruikte next_stop; retourneert code/message/data.stops.
- Input: my ( $args ) = @_; HTTP-paramkeys:
packages,returned_packages,stop_id. - Aanroepen:
_lmf_positive_int,next_stop,stops. Modules: XLS::Datum::vandaag. - Statische callers:
XLS/LMF.pm::stop. - DB-objecten:
leverancier_emballage_registratie_stop,leverancier_pakbon. Writes: leverancier_emballage_registratie_stop; expliciete commit.
<details><summary>SQL-bronfragmenten</summary>
SELECT * FROM leverancier_pakbon WHERE id=?
INSERT INTO leverancier_emballage_registratie_stop( lmf_user, datum, hub, leverancier_emballage_artikel, opgehaald, afgeleverd, kvd, stop_id, leverancier_pakbon) VALUES(?,now(),?,?,?,?,?,?,?)
UPDATE leverancier_emballage_registratie_stop SET opgehaald=?, afgeleverd=?, leverancier_pakbon=COALESCE(leverancier_pakbon, ?) WHERE datum::date=? AND hub=? AND leverancier_emballage_artikel=? AND kvd=? AND stop_id=?
INSERT INTO leverancier_emballage_registratie_stop( lmf_user, datum, leverancier, leverancier_emballage_artikel, opgehaald, afgeleverd, kvd, stop_id, leverancier_pakbon) VALUES(?,now(),?,?,?,?,?,?,?)
UPDATE leverancier_emballage_registratie_stop SET opgehaald=?, afgeleverd=?, leverancier_pakbon=COALESCE(leverancier_pakbon, ?) WHERE datum::date=? AND leverancier=? AND leverancier_emballage_artikel=? AND kvd=? AND stop_id=?
</details>
next_stop
Bron. Transporteur/dag pakbonnen en registratiezoeken → één volgende stop/undef; lookup-ID mist pakbondeel; geen routeoptimalisatie.
- Input: my ( $args ) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::pickup_stop. - DB-objecten:
leverancier,leverancier_emballage_registratie_stop,leverancier_pakbon,lokatie. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT DISTINCT leverancier_pakbon.id, leverancier_pakbon.levering AS delivery_id, leverancier.id AS supplier_id, leverancier.naam AS supplier_name, leverancier.adres AS supplier_address, leverancier.postcode AS supplier_postcode, leverancier.plaats AS supplier_plaats, leverancier.longitude, leverancier.latitude, lokatie.id AS location_id, lokatie.naam AS location_name, lokatie.adres AS location_adres, lokatie.postcode AS location_postcode, lokatie.aflever_nummer AS location_huisnummer, lokatie.aflever_toevoeging AS location_toevoeging, lokatie.plaats AS location_plaats, lokatie.lat_lng, leverancier_pakbon.lever_datum AS delivery_date, leverancier_pakbon.hub FROM leverancier, lokatie, leverancier_pakbon WHERE leverancier_pakbon.transporteur = ? AND leverancier_pakbon.lever_datum BETWEEN ? AND ? AND leverancier.id = leverancier_pakbon.hub AND lokatie.id = leverancier_pakbon.lokatie ORDER BY leverancier_pakbon.lever_datum
SELECT * FROM leverancier_emballage_registratie_stop WHERE datum::date=? AND stop_id=?
</details>
stops
Bron. Pakbonnen voor user.route/periode → per HUB/locatie gededupliceerde stops; ontbrekende levering schrijven/commit; ready/visit uit stopregistratie; code/role/data.route/data.stops.
- Input: my ( $args ) = @_; HTTP-paramkeys:
end_date,start_date. - Aanroepen:
emballage_artikelen_hub,new,role. Modules: Data::GUID::new. - Statische callers:
XLS/LMF.pm::handle_request;XLS/LMF.pm::delivery_stop;XLS/LMF.pm::pickup_stop. - DB-objecten:
leverancier,leverancier_emballage_registratie_stop,leverancier_pakbon,lokatie,route_lokatie. Writes: leverancier_pakbon; expliciete commit.
<details><summary>SQL-bronfragmenten</summary>
SELECT DISTINCT leverancier_pakbon.id, leverancier_pakbon.levering AS delivery_id, leverancier.id AS supplier_id, leverancier.naam AS supplier_name, leverancier.adres AS supplier_address, leverancier.postcode AS supplier_postcode, leverancier.plaats AS supplier_plaats, leverancier.longitude, leverancier.latitude, lokatie.id AS location_id, lokatie.naam AS location_name, lokatie.adres AS location_adres, lokatie.postcode AS location_postcode, lokatie.aflever_nummer AS location_huisnummer, lokatie.aflever_toevoeging AS location_toevoeging, lokatie.plaats AS location_plaats, lokatie.lat_lng, leverancier_pakbon.lever_datum AS delivery_date, leverancier_pakbon.hub, route_lokatie.route, route_lokatie.nummer FROM leverancier, lokatie, leverancier_pakbon, route_lokatie WHERE leverancier_pakbon.lever_datum BETWEEN ? AND ? AND leverancier.id = leverancier_pakbon.hub AND lokatie.id = leverancier_pakbon.lokatie AND lokatie.id = route_lokatie.lokatie AND route_lokatie.route = ? ORDER BY route_lokatie.nummer
UPDATE leverancier_pakbon SET levering=? WHERE id=?
SELECT * FROM leverancier_emballage_registratie_stop WHERE datum::date=? AND stop_id=?
SELECT * FROM leverancier_emballage_registratie_stop WHERE datum::date=? AND stop_id=?
</details>
return_packaging
Bron. Leest eerste pakbon bij levering en HUB → code/message/pakbon/hub/delivery_id; GEEN registratie ondanks melding.
- Input: my ( $args ) = @_; HTTP-paramkeys:
delivery_id. - Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
leverancier,leverancier_pakbon. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT * FROM leverancier_pakbon WHERE levering=? LIMIT 1
SELECT * FROM leverancier WHERE id=?
</details>
accept_new_delivery
Bron. Vrije pakbon.guid accepteren: status0→1, geaccepteerd now, transporteur; commit → code/message.
- Input: my ( $args ) = @_; HTTP-paramkeys:
delivery_id. - Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
leverancier_pakbon. Writes: leverancier_pakbon; expliciete commit.
<details><summary>SQL-bronfragmenten</summary>
SELECT * FROM leverancier_pakbon WHERE guid=?
UPDATE leverancier_pakbon SET geaccepteerd=now(), status_levering=?, transporteur=? WHERE guid=?
</details>
confirm_delivery
Bron. Pakbon.guid en actorbevestiging; INSERT bevestiging en outbound geleverd_volgens_leverancier; commit + optionele bestanden; code/message; retour en statuswrite ontbreken.
- Input: my ( $args ) = @_; HTTP-paramkeys:
comment,delivery_id,outbound_packages,photo,signature. - Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
leverancier_pakbon,leverancier_pakbon_emballage,leverancier_pakbon_levering. Writes: leverancier_pakbon_emballage, leverancier_pakbon_levering; expliciete commit.
<details><summary>SQL-bronfragmenten</summary>
SELECT * FROM leverancier_pakbon WHERE guid=? AND leverancier=?
SELECT * FROM leverancier_pakbon WHERE guid=?
SELECT * FROM leverancier_pakbon_levering WHERE leverancier_pakbon=? AND lmf_user=?
INSERT INTO leverancier_pakbon_levering(leverancier_pakbon, datum, commentaar, lmf_user) VALUES(?,now(),?,?)
UPDATE leverancier_pakbon_emballage SET geleverd_volgens_leverancier=? WHERE leverancier_emballage_artikel=? AND kvd=? AND leverancier_pakbon=?
INSERT INTO leverancier_pakbon_emballage(leverancier_pakbon, leverancier_emballage_artikel, kvd, geleverd_volgens_leverancier) VALUES(?,?,?,?)
</details>
new_supplier_delivery
Bron. Locatie-GUID/periode/packages → pakbon+footer+leveranciersaantallen; waarde som prijs×aantal; commit → code/message; bestaat supplier/location/datum al dan fout.
- Input: my ( $args ) = @_; HTTP-paramkeys:
delivery_date,location,packages. - Aanroepen:
new. Modules: Data::GUID::new. - Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
leverancier_emballage_artikel,leverancier_pakbon,leverancier_pakbon_emballage,leverancier_pakbon_footer,lokatie. Writes: leverancier_pakbon, leverancier_pakbon_emballage, leverancier_pakbon_footer; expliciete commit.
<details><summary>SQL-bronfragmenten</summary>
SELECT * FROM lokatie WHERE guid=?
SELECT id FROM leverancier_pakbon WHERE leverancier=? AND lokatie=? AND lever_datum=?
SELECT id FROM leverancier_pakbon WHERE leverancier=?
INSERT INTO leverancier_pakbon(leverancier, lokatie, lever_datum, factuur_nummer, guid, lmf_levering) VALUES(?,?,?,?,?,?) RETURNING id
INSERT INTO leverancier_pakbon_footer(leverancier_pakbon, totaal_netto_regel_bedrag, grondslag_bedrag_btw_hoog, grondslag_bedrag_btw_laag, grondslag_bedrag_btw_nul, btw_bedrag_hoog, btw_bedrag_laag, btw_percentage_laag, btw_percentage_hoog, totaal_btw_bedrag, totaal_emballage_bedrag, totaal_factuur_bedrag) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING id
SELECT * FROM leverancier_emballage_artikel WHERE id=?
UPDATE leverancier_pakbon_emballage SET geleverd_volgens_leverancier=? WHERE leverancier_pakbon=? AND leverancier_emballage_artikel=?
INSERT INTO leverancier_pakbon_emballage(leverancier_pakbon, leverancier_emballage_artikel, geleverd_volgens_leverancier, kvd) VALUES(?,?,?,?)
UPDATE leverancier_pakbon_footer SET totaal_emballage_bedrag=? WHERE leverancier_pakbon=?
</details>
update_supplier_delivery
Bron. Pakbon.guid/packages → actuele geleverd-aantallen en footerbedrag; commit → code/message; geen supplier-eigendomsfilter en geen kvd-key.
- Input: my ( $args ) = @_; HTTP-paramkeys:
delivery_id,packages. - Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
leverancier_emballage_artikel,leverancier_pakbon,leverancier_pakbon_emballage,leverancier_pakbon_footer. Writes: leverancier_pakbon_emballage, leverancier_pakbon_footer; expliciete commit.
<details><summary>SQL-bronfragmenten</summary>
SELECT id FROM leverancier_pakbon WHERE guid=?
SELECT * FROM leverancier_emballage_artikel WHERE id=?
UPDATE leverancier_pakbon_emballage SET geleverd=? WHERE leverancier_pakbon=? AND leverancier_emballage_artikel=?
INSERT INTO leverancier_pakbon_emballage(leverancier_pakbon, leverancier_emballage_artikel, geleverd) VALUES(?,?,?)
UPDATE leverancier_pakbon_footer SET totaal_emballage_bedrag=? WHERE leverancier_pakbon=?
</details>
new_supplier_deliveries
Bron. Datumrange/status0/lmf_levering → vrije deliveries en role; ontbrekende pakbon.guid schrijven/commit; fallback krat indien geen emballage.
- Input: my ( $args ) = @_; HTTP-paramkeys:
end_date,start_date. - Aanroepen:
new,packages,role. Modules: Data::GUID::new, XLS::Datum::JSON_Datum, XLS::Datum::today. - Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
leverancier,leverancier_pakbon,leverancier_pakbon_regel,lokatie,lokatie_leverancier. Writes: leverancier_pakbon; expliciete commit.
<details><summary>SQL-bronfragmenten</summary>
SELECT lokatie.guid AS id, lokatie.id AS lokatie_id, lokatie.naam AS name, lokatie.adres AS address, lokatie.postcode, lokatie.plaats AS city, lokatie.lat_lng, leverancier.guid AS supplier_id, leverancier.naam AS supplier_name, leverancier.adres AS supplier_address, leverancier.postcode AS supplier_postcode, leverancier.plaats AS supplier_city, leverancier.latitude AS supplier_latitude, leverancier.longitude AS supplier_longitude, leverancier_pakbon.guid AS delivery_id, leverancier_pakbon.lever_datum AS delivery_date, sum(leverancier_pakbon_regel.besteld_aantal) AS packages FROM lokatie, leverancier, leverancier_pakbon LEFT JOIN leverancier_pakbon_regel ON leverancier_pakbon_regel.leverancier_pakbon = leverancier_pakbon.id WHERE leverancier.id = leverancier_pakbon.leverancier AND lokatie.id = leverancier_pakbon.lokatie AND leverancier_pakbon.lever_datum >= ? AND leverancier_pakbon.lever_datum <= ? AND leverancier_pakbon.status_levering = ? AND leverancier_pakbon.lmf_levering = ? GROUP BY lokatie.guid, lokatie.id, lokatie.naam, lokatie.adres, lokatie.postcode, lokatie.plaats, leverancier.guid, leverancier.naam, leverancier.adres, leverancier.postcode, leverancier.plaats, leverancier.latitude, leverancier.longitude, leverancier_pakbon.guid, leverancier_pakbon.lever_datum, lokatie.lat_lng ORDER BY leverancier_pakbon.lever_datum
SELECT * FROM leverancier WHERE id IN ( SELECT leverancier FROM lokatie_leverancier WHERE lokatie=? AND (levering=? OR levering=?))
UPDATE leverancier_pakbon SET guid=? WHERE lokatie=? AND lever_datum=?
</details>
next_logistics_delivery
Bron. Eerste niet-afgeleverde pakbon voor transporteur OF HUB in periode → deliveries/role; ontbrekende levering invullen; supplier/package/catalogusdetails.
- Input: my ( $args ) = @_; HTTP-paramkeys:
end_date,start_date. - Aanroepen:
leveranciers,logistic_packages,new,packaging,role. Modules: Data::GUID::new, XLS::Datum::JSON_Datum, XLS::Datum::today. - Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
leverancier,leverancier_pakbon,leverancier_pakbon_regel,lokatie,lokatie_leverancier. Writes: leverancier_pakbon; expliciete commit.
<details><summary>SQL-bronfragmenten</summary>
SELECT lokatie.guid AS id, lokatie.id AS lokatie_id, lokatie.naam AS name, lokatie.adres AS address, lokatie.postcode, lokatie.plaats AS city, lokatie.lat_lng, leverancier_pakbon.lever_datum AS delivery_date, leverancier_pakbon.status_levering AS status, leverancier_pakbon.levering AS delivery_id, sum(leverancier_pakbon_regel.besteld_aantal) AS packages FROM lokatie, leverancier_pakbon, leverancier_pakbon_regel WHERE lokatie.id = leverancier_pakbon.lokatie AND (leverancier_pakbon.transporteur = ? OR leverancier_pakbon.hub=?) AND leverancier_pakbon.lever_datum >= ? AND leverancier_pakbon.lever_datum <= ? AND leverancier_pakbon_regel.leverancier_pakbon = leverancier_pakbon.id AND leverancier_pakbon.afgeleverd IS NULL GROUP BY lokatie.guid, lokatie.id, lokatie.naam, lokatie.adres, lokatie.postcode, lokatie.plaats, leverancier_pakbon.levering, leverancier_pakbon.lever_datum, leverancier_pakbon.status_levering, lokatie.lat_lng ORDER BY leverancier_pakbon.lever_datum LIMIT 1
SELECT * FROM leverancier WHERE id IN ( SELECT leverancier FROM lokatie_leverancier WHERE lokatie=? AND levering=?)
SELECT * FROM leverancier WHERE id IN ( SELECT leverancier FROM lokatie_leverancier WHERE lokatie=? AND levering=?)
UPDATE leverancier_pakbon SET levering=? WHERE lokatie=? AND lever_datum=?
</details>
logistics_pickup
Bron. Eerste levering-ID voor transporteur OF HUB → pickup-object/status/packages/packaging en role; geen actieve write in deze functie.
- Input: my ( $args ) = @_; HTTP-paramkeys:
delivery_id. - Aanroepen:
leveranciers,logistic_packages,new,packaging,role. Modules: Data::GUID::new, XLS::Datum::today. - Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
leverancier,leverancier_pakbon,leverancier_pakbon_regel. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT leverancier.guid AS id, leverancier.id AS supplier_id, leverancier.naam AS name, leverancier.adres AS address, leverancier.postcode, leverancier.plaats AS city, leverancier.latitude, leverancier.longitude, leverancier_pakbon.lever_datum AS delivery_date, leverancier_pakbon.status_levering AS status, leverancier_pakbon.hub, leverancier_pakbon.transporteur AS carrier, leverancier_pakbon.levering AS delivery_id, leverancier_pakbon.lokatie AS lokatie_id, sum(leverancier_pakbon_regel.besteld_aantal) AS packages FROM leverancier, leverancier_pakbon, leverancier_pakbon_regel WHERE leverancier.id = leverancier_pakbon.leverancier AND (leverancier_pakbon.transporteur = ? OR leverancier_pakbon.hub=?) AND leverancier_pakbon.levering = ? AND leverancier_pakbon_regel.leverancier_pakbon = leverancier_pakbon.id GROUP BY leverancier.guid, leverancier.id, leverancier.naam, leverancier.adres, leverancier.postcode, leverancier.plaats, leverancier_pakbon.hub, leverancier_pakbon.transporteur, leverancier_pakbon.levering, leverancier_pakbon.lokatie, leverancier_pakbon.lever_datum, leverancier_pakbon.status_levering, leverancier.latitude, leverancier.longitude ORDER BY leverancier_pakbon.lever_datum LIMIT 1
SELECT * FROM leverancier WHERE id=?
SELECT * FROM leverancier WHERE id=?
</details>
logistics_delivery
Bron. Levering-ID voor transporteur OF HUB → delivery-object + role; partner/supplier/packageinformatie; bevat GUID-writefallback.
- Input: my ( $args ) = @_; HTTP-paramkeys:
delivery_id. - Aanroepen:
leveranciers,logistic_packages,new,packaging,role. Modules: Data::GUID::new, XLS::Datum::JSON_Datum, XLS::Datum::today. - Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
leverancier,leverancier_pakbon,leverancier_pakbon_regel,lokatie,lokatie_leverancier. Writes: leverancier_pakbon; expliciete commit.
<details><summary>SQL-bronfragmenten</summary>
SELECT lokatie.guid AS id, lokatie.id AS lokatie_id, lokatie.naam AS name, lokatie.adres AS address, lokatie.postcode, lokatie.plaats AS city, lokatie.lat_lng, leverancier_pakbon.lever_datum AS delivery_date, leverancier_pakbon.status_levering AS status, leverancier_pakbon.levering AS delivery_id, sum(leverancier_pakbon_regel.besteld_aantal) AS packages FROM lokatie, leverancier_pakbon, leverancier_pakbon_regel WHERE lokatie.id = leverancier_pakbon.lokatie AND (leverancier_pakbon.transporteur = ? OR leverancier_pakbon.hub=?) AND leverancier_pakbon.levering = ? AND leverancier_pakbon_regel.leverancier_pakbon = leverancier_pakbon.id GROUP BY lokatie.guid, lokatie.id, lokatie.naam, lokatie.adres, lokatie.postcode, lokatie.plaats, leverancier_pakbon.levering, leverancier_pakbon.lever_datum, leverancier_pakbon.status_levering, lokatie.lat_lng ORDER BY leverancier_pakbon.lever_datum LIMIT 1
SELECT * FROM leverancier WHERE id IN ( SELECT leverancier FROM lokatie_leverancier WHERE lokatie=? AND levering=?)
SELECT * FROM leverancier WHERE id IN ( SELECT leverancier FROM lokatie_leverancier WHERE lokatie=? AND levering=?)
UPDATE leverancier_pakbon SET levering=? WHERE lokatie=? AND lever_datum=?
</details>
logistics_deliveries
Bron. Eigen user.route + actieve projectmarktplaatsen + actieve klantlocaties → gesorteerde deliveries/role; GUID-writefallback; status5 maakt niet editable.
- Input: my ( $args ) = @_; HTTP-paramkeys:
end_date,start_date. - Aanroepen:
_lmf_positive_int,_location_partner,_preload_delivery_packages,_preload_location_delivery_suppliers_for_records,_preload_location_partners,leveranciers,logistic_packages,new,role. Modules: Data::GUID::new, XLS::Datum::JSON_Datum, XLS::Datum::today. - Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
klant,leverancier,leverancier_marktplaats,leverancier_pakbon,leverancier_pakbon_regel,lmf_project,lmf_user_project,lokatie,route,route_lokatie,vers_order. Writes: leverancier_pakbon; expliciete commit.
<details><summary>SQL-bronfragmenten</summary>
SELECT lokatie.guid AS id, lokatie.id AS lokatie_id, lokatie.naam AS name, lokatie.adres AS address, lokatie.postcode, lokatie.plaats AS city, lokatie.lat_lng, lokatie.bijzonderheden AS comment, leverancier_pakbon.lever_datum AS delivery_date, leverancier_pakbon.status_levering AS status, leverancier_pakbon.levering AS delivery_id, route_location_order.nummer AS volgnummer, sum(leverancier_pakbon_regel.besteld_aantal) AS packages FROM leverancier_pakbon JOIN lokatie ON lokatie.id = leverancier_pakbon.lokatie JOIN klant ON klant.id = lokatie.klant LEFT JOIN vers_order ON vers_order.id = leverancier_pakbon.vers_order JOIN leverancier_pakbon_regel ON leverancier_pakbon_regel.leverancier_pakbon = leverancier_pakbon.id JOIN ( SELECT routed_stop.lokatie, MIN(routed_stop.nummer) FILTER ( WHERE routed_stop.nummer IS NOT NULL AND routed_stop.nummer >= 0 ) AS nummer, CASE WHEN COUNT(*) FILTER ( WHERE routed_stop.nummer IS NOT NULL AND routed_stop.nummer >= 0 ) > 0 THEN 0 ELSE 1 END AS nummer_missing, MIN(routed_stop.route_lokatie_id) AS route_lokatie_id FROM ( SELECT route_lokatie.lokatie, route_lokatie.nummer, route_lokatie.id AS route_lokatie_id FROM route_lokatie JOIN route route_location_scope ON route_location_scope.id = route_lokatie.route JOIN lokatie route_location_lokatie ON route_location_lokatie.id = route_lokatie.lokatie JOIN klant route_location_klant ON route_location_klant.id = route_location_lokatie.klant WHERE route_lokatie.route = ? AND route_lokatie.lokatie IS NOT NULL AND route_location_klant.actief IS TRUE AND route_location_lokatie.actief IS TRUE AND route_location_lokatie.postcode != '' AND lower(replace(route_location_lokatie.postcode, ' ', '')) != '1066jc' AND length(replace(route_location_lokatie.postcode, ' ', '')) = 6 AND lower(replace(route_location_lokatie.naam, ' ', '')) != lower(replace(route_location_lokatie.postcode, ' ', '')) AND route_location_klant.marktplaats IN ( SELECT leverancier_marktplaats.marktplaats FROM leverancier_marktplaats WHERE leverancier_marktplaats.leverancier = route_location_scope.leverancier ) UNION ALL SELECT route_supplier_pakbon.lokatie, route_lokatie.nummer, route_lokatie.id AS route_lokatie_id FROM route_lokatie JOIN route route_location_scope ON route_location_scope.id = route_lokatie.route JOIN leverancier route_location_leverancier ON route_location_leverancier.id = route_lokatie.leverancier JOIN leverancier_pakbon route_supplier_pakbon ON route_supplier_pakbon.leverancier = route_lokatie.leverancier JOIN lokatie route_location_lokatie ON route_location_lokatie.id = route_supplier_pakbon.lokatie JOIN klant route_location_klant ON route_location_klant.id = route_location_lokatie.klant WHERE route_lokatie.route = ? AND route_lokatie.leverancier IS NOT NULL AND route_location_leverancier.actief IS TRUE AND NOT EXISTS ( SELECT 1 FROM route_lokatie route_customer WHERE route_customer.route = route_lokatie.route AND route_customer.lokatie IS NOT NULL ) AND route_supplier_pakbon.lever_datum BETWEEN ? AND ? AND route_location_klant.actief IS TRUE AND route_location_lokatie.actief IS TRUE AND route_location_lokatie.postcode != '' AND lower(replace(route_location_lokatie.postcode, ' ', '')) != '1066jc' AND length(replace(route_location_lokatie.postcode, ' ', '')) = 6 AND lower(replace(route_location_lokatie.naam, ' ', '')) != lower(replace(route_location_lokatie.postcode, ' ', '')) AND route_location_klant.marktplaats IN ( SELECT leverancier_marktplaats.marktplaats FROM leverancier_marktplaats WHERE leverancier_marktplaats.leverancier = route_location_scope.leverancier ) ) routed_stop GROUP BY routed_stop.lokatie ) route_location_order ON route_location_order.lokatie = lokatie.id WHERE EXISTS ( SELECT 1 FROM lmf_user_project JOIN lmf_project ON lmf_project.id = lmf_user_project.lmf_project WHERE lmf_user_project.lmf_user = ? AND lmf_user_project.actief IS TRUE AND lmf_project.marktplaats = klant.marktplaats ) AND leverancier_pakbon.lever_datum BETWEEN ? AND ? AND (vers_order.marktplaats IS NULL OR vers_order.marktplaats = klant.marktplaats) GROUP BY lokatie.guid, lokatie.id, lokatie.naam, lokatie.adres, lokatie.postcode, lokatie.plaats, leverancier_pakbon.levering, leverancier_pakbon.lever_datum, leverancier_pakbon.status_levering, lokatie.lat_lng, route_location_order.nummer, route_location_order.nummer_missing, route_location_order.route_lokatie_id ORDER BY route_location_order.nummer_missing, route_location_order.nummer, route_location_order.route_lokatie_id, lokatie.id, leverancier_pakbon.lever_datum, lokatie.naam
UPDATE leverancier_pakbon SET levering=? WHERE lokatie=? AND lever_datum=?
</details>
leveranciers
Bron. Locatie/datum → supplierdetail-array via requestcache/projectscope, optioneel HUB-filter en fallback aantallen; packages per pakbon.guid.
- Input: my ($args) = @_.
- Aanroepen:
_location_date_key,_preload_location_delivery_suppliers_for_records,packages. - Statische callers:
XLS/LMF.pm::next_logistics_delivery;XLS/LMF.pm::logistics_pickup;XLS/LMF.pm::logistics_delivery;XLS/LMF.pm::logistics_deliveries;XLS/LMF.pm::customer_delivery;XLS/LMF.pm::customer_deliveries;XLS/LMF.pm::supplier_deliveries. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
customer_delivery
Bron. Klant-ID + levering-ID → deliveries/role, partners/coords; bevat GUID-writefallback.
- Input: my ( $args ) = @_; HTTP-paramkeys:
delivery_id. - Aanroepen:
leveranciers,new,role. Modules: Data::GUID::new, XLS::Datum::JSON_Datum, XLS::Datum::today. - Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
leverancier,leverancier_pakbon,leverancier_pakbon_regel,lokatie,lokatie_leverancier. Writes: leverancier_pakbon; expliciete commit.
<details><summary>SQL-bronfragmenten</summary>
SELECT lokatie.guid AS id, lokatie.id AS lokatie_id, lokatie.naam AS name, lokatie.adres AS address, lokatie.postcode, lokatie.plaats AS city, leverancier_pakbon.levering AS delivery_id, leverancier_pakbon.lever_datum AS delivery_date, leverancier_pakbon.status_levering AS status, lokatie.lat_lng, sum(leverancier_pakbon_regel.besteld_aantal) AS packages FROM lokatie, leverancier_pakbon LEFT JOIN leverancier_pakbon_regel ON leverancier_pakbon_regel.leverancier_pakbon = leverancier_pakbon.id WHERE lokatie.id = leverancier_pakbon.lokatie AND lokatie.klant = ? AND leverancier_pakbon.levering = ? GROUP BY lokatie.guid, lokatie.id, lokatie.naam, lokatie.adres, lokatie.postcode, lokatie.plaats, leverancier_pakbon.levering, leverancier_pakbon.lever_datum, leverancier_pakbon.status_levering, lokatie.lat_lng ORDER BY leverancier_pakbon.lever_datum
SELECT * FROM leverancier WHERE id IN ( SELECT leverancier FROM lokatie_leverancier WHERE lokatie=? AND levering=?)
SELECT * FROM leverancier WHERE id IN ( SELECT leverancier FROM lokatie_leverancier WHERE lokatie=? AND levering=?)
UPDATE leverancier_pakbon SET levering=? WHERE lokatie=? AND lever_datum=?
</details>
customer_deliveries
Bron. Klant-ID + locatie-GUID + datum → deliveries/role met ETA/emballage; kan GUID schrijven; bestaande emballage geeft response-status5.
- Input: my ( $args ) = @_; HTTP-paramkeys:
end_date,location_id,start_date. - Aanroepen:
_location_partner,_preload_guid_packages,_preload_location_delivery_suppliers_for_records,_preload_location_partners,_preload_suppliers_by_id,_supplier_by_id,leveranciers,new,packages,role. Modules: Data::GUID::new, XLS::Datum::JSON_Datum, XLS::Datum::JSON_Timestamp, XLS::Datum::today. - Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
leverancier_pakbon,leverancier_pakbon_levering,leverancier_pakbon_regel,lokatie,order_status. Writes: leverancier_pakbon; expliciete commit.
<details><summary>SQL-bronfragmenten</summary>
SELECT DISTINCT lokatie.guid AS id, lokatie.id AS lokatie_id, lokatie.naam AS name, lokatie.adres AS address, lokatie.postcode, lokatie.plaats AS city, leverancier_pakbon.guid AS slip_id, leverancier_pakbon.levering AS delivery_id, leverancier_pakbon.lever_datum AS delivery_date, leverancier_pakbon.status_levering AS status, leverancier_pakbon.leverancier AS supplier_id, lokatie.lat_lng, leverancier_pakbon_levering.datum AS delivery_time, leverancier_pakbon_levering.eta AS eta, order_status.naam AS delivery_status, sum(leverancier_pakbon_regel.besteld_aantal) AS packages FROM lokatie, leverancier_pakbon LEFT JOIN leverancier_pakbon_regel ON leverancier_pakbon_regel.leverancier_pakbon = leverancier_pakbon.id LEFT JOIN leverancier_pakbon_levering ON leverancier_pakbon_levering.leverancier_pakbon = leverancier_pakbon.id LEFT JOIN order_status ON order_status.id = leverancier_pakbon_levering.order_status WHERE leverancier_pakbon.lokatie = lokatie.id AND lokatie.klant = ? AND lokatie.guid = ? AND leverancier_pakbon.lever_datum BETWEEN ? AND ? GROUP BY lokatie.guid, lokatie.id, lokatie.naam, lokatie.adres, lokatie.postcode, lokatie.plaats, leverancier_pakbon.id, leverancier_pakbon.levering, leverancier_pakbon.lever_datum, leverancier_pakbon.status_levering, leverancier_pakbon_levering.datum, leverancier_pakbon_levering.eta, order_status.naam, lokatie.lat_lng ORDER BY leverancier_pakbon.lever_datum
UPDATE leverancier_pakbon SET levering=? WHERE lokatie=? AND lever_datum=?
</details>
supplier_deliveries
Bron. Eigen supplier-ID + datumrange of pakbon.guid → deliveries/role; GUID-writefallback; bij emballage response-status delivered.
- Input: my ( $args ) = @_; HTTP-paramkeys:
delivery_id,end_date,start_date. - Aanroepen:
_location_partner,_preload_guid_packages,_preload_location_delivery_suppliers_for_records,_preload_location_partners,leveranciers,new,packages,role. Modules: Data::GUID::new, XLS::Datum::JSON_Datum, XLS::Datum::today. - Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
leverancier_pakbon,leverancier_pakbon_regel,lokatie. Writes: leverancier_pakbon; expliciete commit.
<details><summary>SQL-bronfragmenten</summary>
SELECT lokatie.guid AS id, lokatie.id AS lokatie_id, lokatie.naam AS name, lokatie.adres AS address, lokatie.postcode, lokatie.plaats AS city, lokatie.lat_lng, leverancier_pakbon.guid AS delivery_id, leverancier_pakbon.leverancier, leverancier_pakbon.lever_datum AS delivery_date, leverancier_pakbon.status_levering AS status, sum(leverancier_pakbon_regel.besteld_aantal) AS packages FROM lokatie, leverancier_pakbon LEFT JOIN leverancier_pakbon_regel ON leverancier_pakbon_regel.leverancier_pakbon = leverancier_pakbon.id WHERE lokatie.id = leverancier_pakbon.lokatie AND leverancier_pakbon.leverancier = ? AND
UPDATE leverancier_pakbon SET guid=? WHERE lokatie=? AND lever_datum=?
</details>
_placeholders
Bron. Aantal → kommagescheiden SQL-vraagtekens.
- Input: my ($count) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::_dash_in_clause;XLS/LMF.pm::_preload_location_partners;XLS/LMF.pm::_preload_suppliers_by_id;XLS/LMF.pm::_preload_package_catalogs;XLS/LMF.pm::_preload_locations_by_supplier_date;XLS/LMF.pm::_preload_basic_suppliers_by_location_date;XLS/LMF.pm::_preload_registration_details_by_entity_date;XLS/LMF.pm::_preload_dash_registration_details_by_entity_date;XLS/LMF.pm::_preload_guid_packages;XLS/LMF.pm::_preload_delivery_packages;XLS/LMF.pm::_preload_packaging;XLS/LMF.pm::_preload_location_delivery_suppliers_for_records. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
dashin_clause
Bron. Kolom en waarden → IN-clausule plus unieke positieve integerbinds.
- Input: my ($column, $values) = @_.
- Aanroepen:
_lmf_positive_int,_placeholders,_unique_defined_values. - Statische callers:
XLS/LMF.pm::dash_customers;XLS/LMF.pm::dash_route_customers;XLS/LMF.pm::dash_suppliers;XLS/LMF.pm::dash_orders. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
dashroute_number_value
Bron. Geheel niet-negatief routenummer → numeriek of undef.
- Input: my ($number) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::_dash_route_number_sort. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
dashroute_number_sort
Bron. Twee routenummers → comparator, ongeldige waarden achteraan.
- Input: my ($left, $right) = @_.
- Aanroepen:
_dash_route_number_value. - Statische callers:
XLS/LMF.pm::dash_route_customers. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
uniquedefined_values
Bron. Lijst → unieke gedefinieerde niet-lege waarden.
- Input: methodereceiver + request-args, of parameterloze helper zoals hierboven beschreven.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::_dash_marketplace_scope;XLS/LMF.pm::_dash_supplier_marketplaces;XLS/LMF.pm::_dash_in_clause;XLS/LMF.pm::_preload_location_partners;XLS/LMF.pm::_preload_suppliers_by_id;XLS/LMF.pm::_preload_package_catalogs;XLS/LMF.pm::_preload_locations_by_supplier_date;XLS/LMF.pm::_preload_basic_suppliers_by_location_date;XLS/LMF.pm::_preload_registration_details_by_entity_date;XLS/LMF.pm::_preload_dash_registration_details_by_entity_date;XLS/LMF.pm::_preload_guid_packages;XLS/LMF.pm::_preload_delivery_packages;XLS/LMF.pm::_preload_packaging;XLS/LMF.pm::_preload_location_delivery_suppliers_for_records. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
lmfpositive_int
Bron. Waarde → boolean strikt positief geheel getal.
- Input: my ($value) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::_route_plan_update_route_locations;XLS/LMF.pm::_route_plan_route_location_payload;XLS/LMF.pm::_dash_marketplace_scope;XLS/LMF.pm::_dash_supplier_marketplaces;XLS/LMF.pm::dash_route_customers;XLS/LMF.pm::_emballage_source_reference;XLS/LMF.pm::_emballage_source_reference_result;XLS/LMF.pm::_emballage_source_in_scope;XLS/LMF.pm::delivery_stop;XLS/LMF.pm::pickup_stop;XLS/LMF.pm::logistics_deliveries;XLS/LMF.pm::_dash_in_clause;XLS/LMF.pm::_logistics_route. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
lmftruthy
Bron. Niet-referentiewaarde → Perl-truthiness 0/1; geen string false-parser.
- Input: my ($value) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::_route_plan_update_route_locations;XLS/LMF.pm::_dash_marketplace_scope. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
locationdate_key
Bron. Partij-ID/datum → interne cachekey met scheidingsteken.
- Input: my ($location_id, $delivery_date) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::hub_orders;XLS/LMF.pm::hub_incoming;XLS/LMF.pm::hub_outgoing;XLS/LMF.pm::leveranciers;XLS/LMF.pm::_preload_locations_by_supplier_date;XLS/LMF.pm::_preload_basic_suppliers_by_location_date;XLS/LMF.pm::_preload_registration_details_by_entity_date;XLS/LMF.pm::_preload_location_delivery_suppliers_for_records. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
dashregistration_key
Bron. HUB/partij/datum → interne cachekey.
- Input: my ($hub_id, $entity_id, $delivery_date) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::dash_orders;XLS/LMF.pm::_preload_dash_registration_details_by_entity_date. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
preloadlocation_partners
Bron. Locatie-ID-lijst → requestcache van HUB/transportpartner (levering2/4); kiest eerste volgens supplier-ID; geen DB-writes.
- Input: my ( $args, $location_ids ) = @_.
- Aanroepen:
_placeholders,_unique_defined_values. - Statische callers:
XLS/LMF.pm::logistics_deliveries;XLS/LMF.pm::customer_deliveries;XLS/LMF.pm::supplier_deliveries;XLS/LMF.pm::_location_partner. - DB-objecten:
leverancier,lokatie_leverancier. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT lokatie_leverancier.lokatie AS lokatie_id, lokatie_leverancier.levering, leverancier.* FROM lokatie_leverancier JOIN leverancier ON leverancier.id = lokatie_leverancier.leverancier WHERE lokatie_leverancier.lokatie IN (
</details>
locationpartner
Bron. Locatie en leveringtype → gecachte supplier-hash/undef, lazy preload.
- Input: my ( $args, $location_id, $delivery_type ) = @_.
- Aanroepen:
_preload_location_partners. - Statische callers:
XLS/LMF.pm::logistics_deliveries;XLS/LMF.pm::customer_deliveries;XLS/LMF.pm::supplier_deliveries. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
preloadsuppliers_by_id
Bron. Supplier-ID-lijst → requestcache supplierrecords; geen DB-writes.
- Input: my ( $args, $supplier_ids ) = @_.
- Aanroepen:
_placeholders,_unique_defined_values. - Statische callers:
XLS/LMF.pm::customer_deliveries;XLS/LMF.pm::_supplier_by_id. - DB-objecten:
leverancier. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT * FROM leverancier WHERE id IN (
</details>
supplierby_id
Bron. Supplier-ID → gecachte hash/undef, lazy preload.
- Input: my ( $args, $supplier_id ) = @_.
- Aanroepen:
_preload_suppliers_by_id. - Statische callers:
XLS/LMF.pm::customer_deliveries. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
registrationtotals
Bron. Detailrijen → vier totalen: inkomend/uitgaand en beide volumes; geen nettosaldo.
- Input: my ( $rows ) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::hub_orders;XLS/LMF.pm::dash_orders. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
preloadpackage_catalogs
Bron. Supplier-ID-lijst → requestcache catalogus package_id/name per leverancier, op volgorde.
- Input: my ( $args, $supplier_ids ) = @_.
- Aanroepen:
_placeholders,_unique_defined_values. - Statische callers:
XLS/LMF.pm::hub_incoming;XLS/LMF.pm::hub_outgoing. - DB-objecten:
leverancier_emballage_artikel. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT leverancier_emballage_artikel.leverancier AS supplier_id, leverancier_emballage_artikel.id AS package_id, leverancier_emballage_artikel.omschrijving AS name FROM leverancier_emballage_artikel WHERE leverancier_emballage_artikel.leverancier IN (
</details>
preloadlocations_by_supplier_date
Bron. Supplier/date-records → requestcache locatie-ID/naam per combinatie; pakbonread, geen extra HUB-filter.
- Input: my ( $args, $records ) = @_.
- Aanroepen:
_location_date_key,_placeholders,_unique_defined_values. - Statische callers:
XLS/LMF.pm::hub_incoming. - DB-objecten:
leverancier_pakbon,lokatie. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT leverancier_pakbon.leverancier AS supplier_id, leverancier_pakbon.lever_datum AS delivery_date, lokatie.id AS location_id, lokatie.naam AS name FROM leverancier_pakbon JOIN lokatie ON lokatie.id = leverancier_pakbon.lokatie WHERE leverancier_pakbon.leverancier IN (
</details>
preloadbasic_suppliers_by_location_date
Bron. Location/date-records → requestcache supplier-ID/naam per combinatie; pakbonread.
- Input: my ( $args, $records ) = @_.
- Aanroepen:
_location_date_key,_placeholders,_unique_defined_values. - Statische callers:
XLS/LMF.pm::hub_outgoing. - DB-objecten:
leverancier,leverancier_pakbon. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT leverancier_pakbon.lokatie AS location_id, leverancier_pakbon.lever_datum AS delivery_date, leverancier.id AS supplier_id, leverancier.naam AS name FROM leverancier_pakbon JOIN leverancier ON leverancier.id = leverancier_pakbon.leverancier WHERE leverancier_pakbon.lokatie IN (
</details>
preloadregistration_details_by_entity_date
Bron. Args/HUB/records/veld/kolom/cachenaam → geaggregeerde inkomend/uitgaand/confirmed/volumes in requestcache; geen DB-writes.
- Input: my ( $args, $hub_id, $records, $record_field, $entity_column, $cache_name ) = @_.
- Aanroepen:
_location_date_key,_placeholders,_unique_defined_values. - Statische callers:
XLS/LMF.pm::_preload_registration_details_by_supplier_date;XLS/LMF.pm::_preload_registration_details_by_location_date. - DB-objecten:
leverancier_emballage_artikel,leverancier_emballage_registratie. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT leverancier_emballage_registratie.
AS entity_id, leverancier_emballage_registratie.datum AS delivery_date, leverancier_emballage_artikel.id, leverancier_emballage_artikel.omschrijving AS name, leverancier_emballage_registratie.kvd AS package_type, sum(COALESCE(leverancier_emballage_registratie.inkomend, 0)) AS incoming_number, sum(COALESCE(leverancier_emballage_registratie.uitgaand, 0)) AS outgoing_number, max(CASE WHEN leverancier_emballage_registratie.bevestigd IS TRUE THEN 1 ELSE 0 END) AS confirmed, COALESCE(sum(COALESCE(leverancier_emballage_registratie.inkomend, 0)::numeric * COALESCE( ( NULLIF(leverancier_emballage_artikel.lengte, 0)::numeric * NULLIF(leverancier_emballage_artikel.breedte, 0)::numeric * NULLIF(leverancier_emballage_artikel.hoogte, 0)::numeric ) / 1000000::numeric, leverancier_emballage_artikel.volume::numeric, 0::numeric )), 0) AS incoming_volume, COALESCE(sum(COALESCE(leverancier_emballage_registratie.uitgaand, 0)::numeric * COALESCE( ( NULLIF(leverancier_emballage_artikel.lengte, 0)::numeric * NULLIF(leverancier_emballage_artikel.breedte, 0)::numeric * NULLIF(leverancier_emballage_artikel.hoogte, 0)::numeric ) / 1000000::numeric, leverancier_emballage_artikel.volume::numeric, 0::numeric )), 0) AS outgoing_volume FROM leverancier_emballage_registratie JOIN leverancier_emballage_artikel ON leverancier_emballage_artikel.id = leverancier_emballage_registratie.leverancier_emballage_artikel WHERE leverancier_emballage_registratie.hub = ? AND leverancier_emballage_registratie.
</details>
preloadregistration_details_by_supplier_date
Bron. Wrapper voor entity-preload met supplier_id/leverancier en leverancierscache; side-effect alleen cache.
- Input: my ( $args, $hub_id, $records ) = @_.
- Aanroepen:
_preload_registration_details_by_entity_date. - Statische callers:
XLS/LMF.pm::hub_orders;XLS/LMF.pm::hub_incoming. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
preloadregistration_details_by_location_date
Bron. Wrapper voor entity-preload met location_id/lokatie en locatiecache; side-effect alleen cache.
- Input: my ( $args, $hub_id, $records ) = @_.
- Aanroepen:
_preload_registration_details_by_entity_date. - Statische callers:
XLS/LMF.pm::hub_orders;XLS/LMF.pm::hub_outgoing. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
preloaddash_registration_details_by_supplier_date
Bron. Wrapper multi-HUB entity-preload voor leverancier; side-effect cache.
- Input: my ( $args, $records ) = @_.
- Aanroepen:
_preload_dash_registration_details_by_entity_date. - Statische callers:
XLS/LMF.pm::dash_orders. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
preloaddash_registration_details_by_location_date
Bron. Wrapper multi-HUB entity-preload voor locatie; side-effect cache.
- Input: my ( $args, $records ) = @_.
- Aanroepen:
_preload_dash_registration_details_by_entity_date. - Statische callers:
XLS/LMF.pm::dash_orders. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
preloaddash_registration_details_by_entity_date
Bron. Records met HUB/partij/datum → aggregaties per gewenste combinatie in cache; includes HUB in SQL-group en key.
- Input: my ( $args, $records, $record_field, $entity_column, $cache_name ) = @_.
- Aanroepen:
_dash_registration_key,_placeholders,_unique_defined_values. - Statische callers:
XLS/LMF.pm::_preload_dash_registration_details_by_supplier_date;XLS/LMF.pm::_preload_dash_registration_details_by_location_date. - DB-objecten:
leverancier_emballage_artikel,leverancier_emballage_registratie. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT leverancier_emballage_registratie.hub AS hub_id, leverancier_emballage_registratie.
AS entity_id, leverancier_emballage_registratie.datum AS delivery_date, leverancier_emballage_artikel.id, leverancier_emballage_artikel.omschrijving AS name, leverancier_emballage_registratie.kvd AS package_type, sum(COALESCE(leverancier_emballage_registratie.inkomend, 0)) AS incoming_number, sum(COALESCE(leverancier_emballage_registratie.uitgaand, 0)) AS outgoing_number, max(CASE WHEN leverancier_emballage_registratie.bevestigd IS TRUE THEN 1 ELSE 0 END) AS confirmed, COALESCE(sum(COALESCE(leverancier_emballage_registratie.inkomend, 0)::numeric * COALESCE( ( NULLIF(leverancier_emballage_artikel.lengte, 0)::numeric * NULLIF(leverancier_emballage_artikel.breedte, 0)::numeric * NULLIF(leverancier_emballage_artikel.hoogte, 0)::numeric ) / 1000000::numeric, leverancier_emballage_artikel.volume::numeric, 0::numeric )), 0) AS incoming_volume, COALESCE(sum(COALESCE(leverancier_emballage_registratie.uitgaand, 0)::numeric * COALESCE( ( NULLIF(leverancier_emballage_artikel.lengte, 0)::numeric * NULLIF(leverancier_emballage_artikel.breedte, 0)::numeric * NULLIF(leverancier_emballage_artikel.hoogte, 0)::numeric ) / 1000000::numeric, leverancier_emballage_artikel.volume::numeric, 0::numeric )), 0) AS outgoing_volume FROM leverancier_emballage_registratie JOIN leverancier_emballage_artikel ON leverancier_emballage_artikel.id = leverancier_emballage_registratie.leverancier_emballage_artikel WHERE leverancier_emballage_registratie.hub IN (
</details>
preloadguid_packages
Bron. Pakbon-GUIDs → cache aantal per artikel/kvd; supplier/customer-perspectief en nullfallback, geen DB-writes.
- Input: my ( $args, $delivery_guids ) = @_.
- Aanroepen:
_placeholders,_unique_defined_values. - Statische callers:
XLS/LMF.pm::customer_deliveries;XLS/LMF.pm::supplier_deliveries;XLS/LMF.pm::_preload_location_delivery_suppliers_for_records;XLS/LMF.pm::packages. - DB-objecten:
leverancier_emballage_artikel,leverancier_pakbon,leverancier_pakbon_emballage. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT leverancier_pakbon.guid AS delivery_guid, leverancier_emballage_artikel.id, leverancier_emballage_artikel.code, leverancier_emballage_artikel.omschrijving AS name, leverancier_pakbon_emballage.kvd AS package_type, sum(leverancier_pakbon_emballage.geleverd_volgens_leverancier) AS delivered_supplier, sum(leverancier_pakbon_emballage.retour_volgens_leverancier) AS fetched_supplier, sum(leverancier_pakbon_emballage.geleverd) AS delivered, sum(leverancier_pakbon_emballage.retour) AS fetched FROM leverancier_emballage_artikel, leverancier_pakbon_emballage, leverancier_pakbon WHERE leverancier_emballage_artikel.id = leverancier_pakbon_emballage.leverancier_emballage_artikel AND leverancier_pakbon_emballage.leverancier_pakbon = leverancier_pakbon.id AND leverancier_pakbon.guid IN (
</details>
preloaddelivery_packages
Bron. Levering-ID-lijst → cache SUM(geleverd/retour) per artikel/kvd; packaging=true, geen saldo.
- Input: my ( $args, $delivery_ids ) = @_.
- Aanroepen:
_placeholders,_unique_defined_values. - Statische callers:
XLS/LMF.pm::logistics_deliveries;XLS/LMF.pm::logistic_packages. - DB-objecten:
leverancier_emballage_artikel,leverancier_pakbon,leverancier_pakbon_emballage. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT leverancier_pakbon.levering AS delivery_id, leverancier_emballage_artikel.id, leverancier_emballage_artikel.code, leverancier_emballage_artikel.omschrijving AS name, leverancier_pakbon_emballage.kvd AS package_type, sum(leverancier_pakbon_emballage.geleverd) AS delivered, sum(leverancier_pakbon_emballage.retour) AS fetched FROM leverancier_emballage_artikel, leverancier_pakbon_emballage, leverancier_pakbon WHERE leverancier_emballage_artikel.id = leverancier_pakbon_emballage.leverancier_emballage_artikel AND leverancier_pakbon_emballage.leverancier_pakbon = leverancier_pakbon.id AND leverancier_pakbon.levering IN (
</details>
preloadpackaging
Bron. Levering-ID-lijst → cache distinct beschikbare artikelcode/naam van pakbonleveranciers, geen aantallen.
- Input: my ( $args, $delivery_ids ) = @_.
- Aanroepen:
_placeholders,_unique_defined_values. - Statische callers:
XLS/LMF.pm::packaging. - DB-objecten:
leverancier_emballage_artikel,leverancier_pakbon. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT DISTINCT leverancier_pakbon.levering AS delivery_id, leverancier_emballage_artikel.code, leverancier_emballage_artikel.omschrijving AS name FROM leverancier_emballage_artikel JOIN leverancier_pakbon ON leverancier_pakbon.leverancier = leverancier_emballage_artikel.leverancier WHERE leverancier_pakbon.levering IN (
</details>
preloadlocation_delivery_suppliers_for_records
Bron. Locatie/datum → cache supplier/pakbon-GUID/aantallen; actieve projectmarktplaats en levering3; preload guid-packages.
- Input: my ( $args, $records ) = @_.
- Aanroepen:
_location_date_key,_placeholders,_preload_guid_packages,_unique_defined_values. - Statische callers:
XLS/LMF.pm::logistics_deliveries;XLS/LMF.pm::leveranciers;XLS/LMF.pm::customer_deliveries;XLS/LMF.pm::supplier_deliveries. - DB-objecten:
klant,leverancier,leverancier_pakbon,leverancier_pakbon_regel,lmf_project,lmf_user_project,lokatie,lokatie_leverancier,vers_order. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT leverancier_pakbon.lokatie AS lokatie_id, leverancier_pakbon.lever_datum AS delivery_date, leverancier.id, leverancier.naam, leverancier.adres, leverancier.postcode, leverancier.plaats, leverancier.latitude, leverancier.longitude, leverancier_pakbon.hub, leverancier_pakbon.guid AS delivery_id, COALESCE(sum(leverancier_pakbon_regel.besteld_aantal), 0) AS packages FROM leverancier JOIN leverancier_pakbon ON leverancier_pakbon.leverancier = leverancier.id JOIN lokatie ON lokatie.id = leverancier_pakbon.lokatie JOIN klant ON klant.id = lokatie.klant LEFT JOIN vers_order ON vers_order.id = leverancier_pakbon.vers_order JOIN lokatie_leverancier ON lokatie_leverancier.lokatie = leverancier_pakbon.lokatie AND lokatie_leverancier.leverancier = leverancier.id AND lokatie_leverancier.levering = 3 LEFT JOIN leverancier_pakbon_regel ON leverancier_pakbon_regel.leverancier_pakbon = leverancier_pakbon.id WHERE EXISTS ( SELECT 1 FROM lmf_user_project JOIN lmf_project ON lmf_project.id = lmf_user_project.lmf_project WHERE lmf_user_project.lmf_user = ? AND lmf_user_project.actief IS TRUE AND lmf_project.marktplaats = klant.marktplaats ) AND leverancier_pakbon.lokatie IN (
</details>
packaging
Bron. Levering-ID → catalogus-array uit requestcache; geen hoeveelheid of saldo.
- Input: my ( $args ) = @_.
- Aanroepen:
_preload_packaging. - Statische callers:
XLS/LMF.pm::next_logistics_delivery;XLS/LMF.pm::logistics_pickup;XLS/LMF.pm::logistics_delivery. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
logistic_packages
Bron. Levering-ID → geaggregeerde geleverd/retour-array uit cache.
- Input: my ( $args ) = @_.
- Aanroepen:
_preload_delivery_packages. - Statische callers:
XLS/LMF.pm::next_logistics_delivery;XLS/LMF.pm::logistics_pickup;XLS/LMF.pm::logistics_delivery;XLS/LMF.pm::logistics_deliveries. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
emballage_artikelen_hub
Bron. Supplier-ID → artikel-ID/code/name-array; aangeroepen door stops met vaste HUB-default.
- Input: my ( $args ) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::stops. - DB-objecten:
leverancier_emballage_artikel. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT leverancier_emballage_artikel.id, leverancier_emballage_artikel.code, leverancier_emballage_artikel.omschrijving AS name FROM leverancier_emballage_artikel WHERE leverancier_emballage_artikel.leverancier = ? ORDER BY leverancier_emballage_artikel.code
</details>
packages
Bron. Parameter leverancier_pakbon is GUID → perspectiefafhankelijke aantallen-array uit cache.
- Input: my ( $args ) = @_.
- Aanroepen:
_preload_guid_packages. - Statische callers:
XLS/LMF.pm::new_supplier_deliveries;XLS/LMF.pm::leveranciers;XLS/LMF.pm::customer_deliveries;XLS/LMF.pm::supplier_deliveries. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
role
Bron. Userrol kiezen en klant/leverancier/hub/logistiek aanroepen; login- of profielresponse.
- Input: my ( $args ) = @_.
- Aanroepen:
hub,klant,leverancier,logistiek. - Statische callers:
XLS/LMF.pm::handle_request;XLS/LMF.pm::stops;XLS/LMF.pm::new_supplier_deliveries;XLS/LMF.pm::next_logistics_delivery;XLS/LMF.pm::logistics_pickup;XLS/LMF.pm::logistics_delivery;XLS/LMF.pm::logistics_deliveries;XLS/LMF.pm::customer_delivery;XLS/LMF.pm::customer_deliveries;XLS/LMF.pm::supplier_deliveries. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
keana_webhook
Bron. Callback IDs → Keana auth/tracking; externe status naar order/pakbon-events; commits per stap; success/error; vaste actor, geen incoming signature/dedup.
- Input: my ($args) = @_; HTTP-paramkeys:
deliveryId,deliveryTrackingId. - Aanroepen:
new,true. Modules: Keana::API::new. - Statische callers:
XLS/LMF.pm::handle_request. - DB-objecten:
leverancier_pakbon,leverancier_pakbon_levering,order_status,vers_order. Writes: leverancier_pakbon_levering, vers_order; expliciete commit.
<details><summary>SQL-bronfragmenten</summary>
SELECT id FROM order_status WHERE name = ?
UPDATE vers_order SET hub_status = ?, transport_status = ? WHERE id = ?
SELECT id FROM leverancier_pakbon WHERE vers_order=?
INSERT INTO leverancier_pakbon_levering (datum, commentaar, lmf_user, order_status, leverancier_pakbon, eta, ata, tracking_code) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
</details>
klant
Bron. Klant/user-ID → actieve locaties met partners/HUBcatalogus; login bevat token/user_name.locations, REFRESH alleen locaties-array, anders rolprofiel.
- Input: my ( $args ) = @_; HTTP-paramkeys:
location_id. - Aanroepen:
new. Modules: XML::TreePP::new. - Statische callers:
XLS/LMF.pm::location_comment;XLS/LMF.pm::role. - DB-objecten:
klant,klant_koppeling,leverancier,leverancier_emballage_artikel,lokatie,lokatie_leverancier. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT * FROM klant WHERE id=?
SELECT * FROM lokatie WHERE klant=? AND actief=? ORDER BY naam
SELECT lokatie_leverancier.debiteurnummer, leverancier.id, leverancier.naam, leverancier.adres, leverancier.postcode, leverancier.plaats, leverancier.latitude, leverancier.longitude, lokatie_leverancier.levering FROM lokatie_leverancier, leverancier WHERE leverancier.id = lokatie_leverancier.leverancier AND lokatie_leverancier.lokatie = ? ORDER BY leverancier.naam
SELECT * FROM leverancier_emballage_artikel WHERE leverancier=? ORDER BY omschrijving
SELECT definitie_in_xml FROM klant_koppeling WHERE klant=? AND koppeling=?
</details>
hub
Bron. Eigen supplier-ID → HUBprofiel/catalogus/navigator; loginresponse met token/flags/coords, anders compact profiel; locaties worden gelezen maar niet in loginresponse gezet.
- Input: my ( $args ) = @_.
- Aanroepen:
navigator. - Statische callers:
XLS/LMF.pm::role. - DB-objecten:
klant,leverancier,leverancier_emballage_artikel,lokatie,lokatie_leverancier. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT * FROM leverancier WHERE id=?
SELECT * FROM lokatie WHERE lat_lng IS NOT NULL AND id IN ( SELECT lokatie FROM lokatie_leverancier WHERE leverancier=?) AND actief=true AND naam!=postcode AND klant IN(SELECT id FROM klant WHERE public=false) ORDER BY lokatie.naam
SELECT levering FROM lokatie_leverancier WHERE lokatie=? AND leverancier=?
SELECT guid AS id, naam AS name, adres AS address, postcode, plaats AS city, latitude, longitude FROM leverancier WHERE id IN(SELECT leverancier FROM lokatie_leverancier WHERE lokatie=? AND levering=?)
SELECT * FROM leverancier_emballage_artikel WHERE leverancier=? ORDER BY omschrijving
</details>
leverancier_lokaties
Bron. Eigen supplier-ID → actieve niet-public locaties met GUID/debtor/coords/HUB; array.
- Input: my ( $args ) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::leverancier. - DB-objecten:
klant,leverancier,lokatie,lokatie_leverancier. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT * FROM lokatie WHERE lat_lng IS NOT NULL AND id IN ( SELECT lokatie FROM lokatie_leverancier WHERE leverancier=?) AND actief=true AND naam!=postcode AND klant IN(SELECT id FROM klant WHERE public=false) ORDER BY lokatie.naam
SELECT debiteurnummer, levering FROM lokatie_leverancier WHERE lokatie=? AND leverancier=?
SELECT guid AS id, naam AS name, adres AS address, postcode, plaats AS city, latitude, longitude FROM leverancier WHERE id IN(SELECT leverancier FROM lokatie_leverancier WHERE lokatie=? AND levering=?)
</details>
leverancier_emballage_artikelen
Bron. Eigen supplier-ID → artikel-array met maten/volume/gewicht (outputkey weigth).
- Input: my ( $args ) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::leverancier. - DB-objecten:
leverancier_emballage_artikel. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT * FROM leverancier_emballage_artikel WHERE leverancier=? ORDER BY omschrijving
</details>
leverancier
Bron. Eigen supplier-ID → profiel/login met locaties/catalogus/flags/config/prompt/public-key; koppeling30/31/32 en WhapKey gelezen, waarden niet gedocumenteerd.
- Input: my ( $args ) = @_.
- Aanroepen:
leverancier_emballage_artikelen,leverancier_lokaties,navigator,new. Modules: XML::TreePP::new. - Statische callers:
XLS/LMF.pm::role. - DB-objecten:
leverancier,leverancier_apikey,leverancier_koppeling. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT * FROM leverancier WHERE id=?
SELECT definitie_in_xml FROM leverancier_koppeling WHERE leverancier=? AND koppeling=?
SELECT key FROM leverancier_apikey WHERE naam=? AND leverancier=?
SELECT definitie_in_xml FROM leverancier_koppeling WHERE leverancier = ? AND koppeling = ?
SELECT definitie_in_xml FROM leverancier_koppeling WHERE leverancier=? AND koppeling=?
</details>
navigator
Bron. user.navigator → navigator.naam of none.
- Input: my ( $args ) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::hub;XLS/LMF.pm::leverancier;XLS/LMF.pm::logistiek. - DB-objecten:
navigator. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT naam FROM navigator WHERE id=?
</details>
logistiek
Bron. Eigen supplier-ID → logistiekprofiel; login met route/name/planningflag en meerdere forced true-flags.
- Input: my ( $args ) = @_.
- Aanroepen:
_logistics_route,_logistics_route_planning,navigator. - Statische callers:
XLS/LMF.pm::role. - DB-objecten:
leverancier. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT * FROM leverancier WHERE id=?
</details>
logisticsroute_planning
Bron. user.lmf_project → marktplaats-eigenaar leverancier.route_planning; scalar/undef.
- Input: my ( $args ) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::logistiek. - DB-objecten:
leverancier,lmf_project,marktplaats. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT leverancier.route_planning FROM lmf_project JOIN marktplaats ON marktplaats.id = lmf_project.marktplaats JOIN leverancier ON leverancier.id = marktplaats.leverancier WHERE lmf_project.id = ?
</details>
logisticsroute
Bron. user.route → {id,name} of nullvelden.
- Input: my ( $args ) = @_.
- Aanroepen:
_lmf_positive_int. - Statische callers:
XLS/LMF.pm::logistiek. - DB-objecten:
route. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT id, naam AS name FROM route WHERE id=?
</details>
XLS/LMF/EmballageControl.pm
true
Bron. JSON-true scalarreferentie; utility, geen DB.
- Input: methodereceiver + request-args, of parameterloze helper zoals hierboven beschreven.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::keana_webhook. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
new
Bron. Leeg blessed LMF-serviceobject; geen domeinstatus of DB.
- Input: my ($class, %args) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers: geen binnen deze vier bestanden; constructor/dispatch/externe toegang zoals beschreven.
- DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
handle_request
Bron. filters valideren, bronnen lezen, >2000 rijen afwijzen, ketens filteren/sorteren/pagineren → code+overview of detail; read-only
- Input: my ($self, $args) = @_.
- Aanroepen:
_attention_rank,_chains,_detail_item,_filters,_matches_filters,_overview_item,_page,_pagination,_source_rows,_summary. - Statische callers: geen binnen deze vier bestanden; constructor/dispatch/externe toegang zoals beschreven.
- DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
_filters
Bron. HUB/params/datumrange/paging/statusvalidatie → filterhash of code-error; ref(base) moet gewone HASH zijn
- Input: my ($self, $args) = @_.
- Aanroepen:
_boolean_param,_date_epoch,_positive_int. - Statische callers:
XLS/LMF/EmballageControl.pm::handle_request. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
sourcerows
Bron. args/filters → {packing,hub,stop} arrays
- Input: my ($self, $args, $filters) = @_.
- Aanroepen:
_hub_rows,_packing_rows,_stop_rows. - Statische callers:
XLS/LMF/EmballageControl.pm::handle_request;XLS/LMF/RoutePlanImporter.pm::import_route_plan. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
packingrows
Bron. HUB/datum/artikel/kvd → pakbonemballage-bronrijen
- Input: my ($self, $args, $filters) = @_.
- Aanroepen:
_add_source_filters,_selectall_hashref. - Statische callers:
XLS/LMF/EmballageControl.pm::_source_rows. - DB-objecten:
leverancier_emballage_artikel,leverancier_pakbon,leverancier_pakbon_emballage. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT emb.id, emb.leverancier_pakbon, emb.leverancier_emballage_artikel, emb.kvd, emb.geleverd, emb.retour, emb.geleverd_volgens_leverancier, emb.retour_volgens_leverancier, emb.ontvangen, emb.verstuurd, pakbon.leverancier, pakbon.lokatie, pakbon.hub, pakbon.lever_datum AS datum, pakbon.guid AS pakbon_guid, pakbon.levering AS levering_id, art.code AS emballage_code, art.omschrijving AS emballage_omschrijving FROM leverancier_pakbon_emballage emb JOIN leverancier_pakbon pakbon ON pakbon.id = emb.leverancier_pakbon LEFT JOIN leverancier_emballage_artikel art ON art.id = emb.leverancier_emballage_artikel WHERE
</details>
hubrows
Bron. HUB/datum/artikel/kvd → HUB-registratiebronrijen met pakbonmeta
- Input: my ($self, $args, $filters) = @_.
- Aanroepen:
_add_source_filters,_selectall_hashref. - Statische callers:
XLS/LMF/EmballageControl.pm::_source_rows. - DB-objecten:
leverancier_emballage_artikel,leverancier_emballage_registratie,leverancier_pakbon. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT reg.id, reg.hub, reg.leverancier, reg.lokatie, reg.leverancier_emballage_artikel, reg.kvd, reg.inkomend, reg.uitgaand, reg.bevestigd, reg.datum, reg.lmf_user, reg.leverancier_pakbon, reg.levering AS levering_id, pakbon.guid AS pakbon_guid, pakbon.leverancier AS pakbon_leverancier, pakbon.lokatie AS pakbon_lokatie, pakbon.hub AS pakbon_hub, pakbon.lever_datum AS pakbon_datum, art.code AS emballage_code, art.omschrijving AS emballage_omschrijving FROM leverancier_emballage_registratie reg LEFT JOIN leverancier_pakbon pakbon ON pakbon.id = reg.leverancier_pakbon LEFT JOIN leverancier_emballage_artikel art ON art.id = reg.leverancier_emballage_artikel WHERE
</details>
stoprows
Bron. HUB of verbonden partij/locatie + datum/artikel/kvd → stopbronnen met actor/transportpartij
- Input: my ($self, $args, $filters) = @_.
- Aanroepen:
_add_source_filters,_selectall_hashref. - Statische callers:
XLS/LMF/EmballageControl.pm::_source_rows. - DB-objecten:
leverancier,leverancier_emballage_artikel,leverancier_emballage_registratie_stop,leverancier_pakbon,lmf_user. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT stop.id, stop.hub, stop.leverancier, stop.lokatie, stop.leverancier_emballage_artikel, stop.kvd, stop.opgehaald, stop.afgeleverd, stop.datum, stop.lmf_user, stop.stop_id, stop.leverancier_pakbon, pakbon.guid AS pakbon_guid, pakbon.levering AS levering_id, pakbon.leverancier AS pakbon_leverancier, pakbon.lokatie AS pakbon_lokatie, pakbon.hub AS pakbon_hub, pakbon.lever_datum AS pakbon_datum, usr.roepnaam AS actor_first_name, usr.naam AS actor_last_name, usr.leverancier_id AS logistics_party_id, logistics.naam AS logistics_party_name, art.code AS emballage_code, art.omschrijving AS emballage_omschrijving FROM leverancier_emballage_registratie_stop stop LEFT JOIN leverancier_pakbon pakbon ON pakbon.id = stop.leverancier_pakbon LEFT JOIN lmf_user usr ON usr.id = stop.lmf_user LEFT JOIN leverancier logistics ON logistics.id = usr.leverancier_id LEFT JOIN leverancier_emballage_artikel art ON art.id = stop.leverancier_emballage_artikel WHERE
</details>
addsource_filters
Bron. WHERE/binds aanvullen voor datum/artikel/kvd; wijzigt arrays in geheugen
- Input: my ($self, $where, $bind, $filters, $columns) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/EmballageControl.pm::_packing_rows;XLS/LMF/EmballageControl.pm::_hub_rows;XLS/LMF/EmballageControl.pm::_stop_rows. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
selectallhashref
Bron. SQL+binds via DBH → array hashrefs; finish cursor
- Input: my ($self, $args, $sql, @bind) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/EmballageControl.pm::_packing_rows;XLS/LMF/EmballageControl.pm::_hub_rows;XLS/LMF/EmballageControl.pm::_stop_rows. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
_chains
Bron. packing/hub/stop-arrays → lijst definitieve controleketens
- Input: my ($self, $rows) = @_.
- Aanroepen:
_add_hub,_add_packing,_add_stop,_delivery_index,_finalize_chain,_hard_group_key,_linked_group_key,_merge_metadata,_new_chain. - Statische callers:
XLS/LMF/EmballageControl.pm::handle_request. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
hardgroup_key
Bron. bron/rij → pakbon- of levering- of bronrijsleutel + artikel/kvd
- Input: my ($self, $source, $row) = @_.
- Aanroepen:
_positive_int. - Statische callers:
XLS/LMF/EmballageControl.pm::_chains;XLS/LMF/EmballageControl.pm::_linked_group_key. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
linkedgroup_key
Bron. bron/rij/leveringindex → key en ambiguityflag; alleen unieke harde koppeling
- Input: my ($self, $source, $row, $delivery_keys) = @_.
- Aanroepen:
_delivery_index,_hard_group_key,_positive_int. - Statische callers:
XLS/LMF/EmballageControl.pm::_chains. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
newchain
Bron. key → nieuw afgeleid chainobject met SHA1, slots/sources
- Input: my ($self, $key) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/EmballageControl.pm::_chains. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
mergemetadata
Bron. keten/rij → partij/artikel/datum/bronmetadata in keten; conflicten ambiguous
- Input: my ($self, $chain, $row) = @_.
- Aanroepen:
_canonical_date,_positive_int. - Statische callers:
XLS/LMF/EmballageControl.pm::_chains. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
addpacking
Bron. pakbonrij → vier supplier/customer heen/retourslots
- Input: my ($self, $chain, $row) = @_.
- Aanroepen:
_set_slot. - Statische callers:
XLS/LMF/EmballageControl.pm::_chains. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
addhub
Bron. HUBrij → supplier-in/out of customer-out/in-slots; onduidelijke partij bron+ambiguity
- Input: my ($self, $chain, $row) = @_.
- Aanroepen:
_add_source,_positive_int,_set_slot. - Statische callers:
XLS/LMF/EmballageControl.pm::_chains. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
addstop
Bron. klantstop → twee logistiekslots; HUB/supplierstop alleen bronwaarnemingen
- Input: my ($self, $chain, $row) = @_.
- Aanroepen:
_add_source,_positive_int,_set_slot. - Statische callers:
XLS/LMF/EmballageControl.pm::_chains. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
setslot
Bron. qty valideren, bron toevoegen, dubbele slot markeren; geen som
- Input: my ($self, $chain, $slot, $raw_value, $row, $perspective, $action) = @_.
- Aanroepen:
_add_source,_registered_quantity. - Statische callers:
XLS/LMF/EmballageControl.pm::_add_packing;XLS/LMF/EmballageControl.pm::_add_hub;XLS/LMF/EmballageControl.pm::_add_stop. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
addsource
Bron. bronrij → source_type/id/action/qty/date/actor/link-meta in keten
- Input: my ($self, $chain, $row, $perspective, $action, $quantity) = @_.
- Aanroepen:
_canonical_date,_num,_positive_int. - Statische callers:
XLS/LMF/EmballageControl.pm::_add_hub;XLS/LMF/EmballageControl.pm::_add_stop;XLS/LMF/EmballageControl.pm::_set_slot. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
finalizechain
Bron. zes paren vergelijken → comparisons/control_status op keten; geen saldo
- Input: my ($self, $chain) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/EmballageControl.pm::_chains. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
matchesfilters
Bron. keten/filter → boolean incl chain_id/status/partij
- Input: my ($self, $chain, $filters) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/EmballageControl.pm::handle_request. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
_summary
Bron. ketens → aantallen per status
- Input: my ($self, $chains) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/EmballageControl.pm::handle_request. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
overviewitem
Bron. keten → compacte DTO met slots/partijen/artikel/refs
- Input: my ($self, $chain) = @_.
- Aanroepen:
_party. - Statische callers:
XLS/LMF/EmballageControl.pm::handle_request;XLS/LMF/EmballageControl.pm::_detail_item. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
detailitem
Bron. keten → overview plus sources/comparisons/ambiguous_slots
- Input: my ($self, $chain) = @_.
- Aanroepen:
_overview_item. - Statische callers:
XLS/LMF/EmballageControl.pm::handle_request. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
_page
Bron. items/offset/limit → pagina-lijst
- Input: my ($self, $items, $offset, $limit) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/EmballageControl.pm::handle_request. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
_pagination
Bron. counts/offset/limit → paginationhash met has_more
- Input: my ($self, $total, $returned, $offset, $limit) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/EmballageControl.pm::handle_request. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
_party
Bron. type/id → partij-DTO
- Input: my ($type, $id) = @_.
- Aanroepen:
_positive_int. - Statische callers:
XLS/LMF/EmballageControl.pm::_overview_item. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
registeredquantity
Bron. numerieke niet-nulwaarde → getal, anders undef
- Input: my ($value) = @_.
- Aanroepen:
_num. - Statische callers:
XLS/LMF/EmballageControl.pm::_set_slot. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
deliveryindex
Bron. rij → levering/artikel/kvd-key of undef
- Input: my ($row) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/EmballageControl.pm::_chains;XLS/LMF/EmballageControl.pm::_linked_group_key. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
canonicaldate
Bron. datum/timestamp → ISO-date of undef
- Input: my ($value) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/EmballageControl.pm::_merge_metadata;XLS/LMF/EmballageControl.pm::_add_source. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
dateepoch
Bron. geldige ISO-date → UTC-epoch of undef met roundtripcontrole
- Input: my ($value) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/EmballageControl.pm::_filters. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
booleanparam
Bron. true/false-achtige string → value/error-tuple
- Input: my ($value) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/EmballageControl.pm::_filters. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
positiveint
Bron. waarde → positief-integerboolean
- Input: my ($value) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/EmballageControl.pm::_filters;XLS/LMF/EmballageControl.pm::_hard_group_key;XLS/LMF/EmballageControl.pm::_linked_group_key;XLS/LMF/EmballageControl.pm::_merge_metadata;XLS/LMF/EmballageControl.pm::_add_hub;XLS/LMF/EmballageControl.pm::_add_stop;XLS/LMF/EmballageControl.pm::_add_source;XLS/LMF/EmballageControl.pm::_party;XLS/LMF/RoutePlanImporter.pm::import_route_plan;XLS/LMF/RoutePlanImporter.pm::_validate_payload;XLS/LMF/RoutePlanImporter.pm::_expected_stopset;XLS/LMF/RoutePlanImporter.pm::_match_payload_to_expected;XLS/LMF/RoutePlanImporter.pm::_validate_stop_references;XLS/LMF/RoutePlanImporter.pm::_resolve_route;XLS/LMF/RoutePlanImporter.pm::_active_route_owner_project_ids;XLS/LMF/RoutePlanImporter.pm::_user_has_project_access;XLS/LMF/RoutePlanImporter.pm::_routes_by_name_for_transporteur_marketplaces;XLS/LMF/RoutePlanImporter.pm::_marketplace_route_supplier_for_customer_stops;XLS/LMF/RoutePlanImporter.pm::_insert_route_locations;XLS/LMF/RoutePlanImporter.pm::_insert_route_plan;XLS/LMF/RoutePlanImporter.pm::_route_reference. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
_num
Bron. waarde → numeriek, ongeldig/null→0
- Input: my ($value) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/EmballageControl.pm::_add_source;XLS/LMF/EmballageControl.pm::_registered_quantity. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
attentionrank
Bron. ketenstatus → sorteerrang difference/missing/ambiguous/aligned
- Input: my ($chain) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/EmballageControl.pm::handle_request. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
XLS/LMF/RoutePlanImporter.pm
Niet aangesloten op de huidige route_plan-dispatch. Onderstaande writes horen bij de aanwezige module en tests, niet bij het actieve endpoint.
new
Bron. Leeg blessed LMF-serviceobject; geen domeinstatus of DB.
- Input: my ($class, %args) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers: geen binnen deze vier bestanden; constructor/dispatch/externe toegang zoals beschreven.
- DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
import_route_plan
Bron. payload/user/DBH → valideren, route/projectscope, verwachte stops, atomair sync; code/data routeplan of error
- Input: my ($self, $args) = @_.
- Aanroepen:
_active_route_owner_project_ids,_begin_transaction,_commit_transaction,_error,_expected_stopset,_match_payload_to_expected,_positive_int,_request_payload,_resolve_route,_rollback_transaction,_source_rows,_sync_route_plan,_truthy,_user_has_project_access,_validate_payload,_validate_stop_references. - Statische callers: geen binnen deze vier bestanden; constructor/dispatch/externe toegang zoals beschreven.
- DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
validatepayload
Bron. payload → genormaliseerde route/date/stops of error; max500, types/identity, unieke aaneengesloten sequences
- Input: my ($self, $payload) = @_.
- Aanroepen:
_allowed_stop_type,_error,_logical_key,_positive_int,_route_reference,_valid_date. - Statische callers:
XLS/LMF/RoutePlanImporter.pm::import_route_plan. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
expectedstopset
Bron. pakbonbronrijen → verplichte customerstops en optionele supplier/hub_start/hub_end-kandidaten met bron-ID-lijsten
- Input: my ($self, $source_rows) = @_.
- Aanroepen:
_error,_logical_key,_positive_int,_unique_ints. - Statische callers:
XLS/LMF/RoutePlanImporter.pm::import_route_plan. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
matchpayload_to_expected
Bron. payload/verwachte set → gematchte stops of error; verplichte stops en start/eindregels
- Input: my ($self, $payload_stops, $expected_stops) = @_.
- Aanroepen:
_error,_positive_int,_unique_ints. - Statische callers:
XLS/LMF/RoutePlanImporter.pm::import_route_plan. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
validatestop_references
Bron. stops → code200 of fout bij onbekende supplier/location-ID
- Input: my ($self, $dbh, $stops) = @_.
- Aanroepen:
_all_location_ids_exist,_all_supplier_ids_exist,_error,_positive_int,_unique_ints. - Statische callers:
XLS/LMF/RoutePlanImporter.pm::import_route_plan. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
resolveroute
Bron. ID/naam/transporteur/stops → bestaande of nieuw gemaakte route binnen marktplaatsherleiding; code/data
- Input: my ($self, $dbh, $args) = @_.
- Aanroepen:
_error,_insert_route,_insert_route_locations,_marketplace_route_supplier_for_customer_stops,_positive_int,_route_by_id,_routes_by_name_for_transporteur_marketplaces. - Statische callers:
XLS/LMF/RoutePlanImporter.pm::import_route_plan. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
syncroute_plan
Bron. routecontext → lock, bestaande/toegevoegde/verwijderde stops/links synchroniseren; draft/planned→planned; code/data changed
- Input: my ($self, $dbh, $args) = @_.
- Aanroepen:
_defer_sequence_constraint,_delete_stop,_delete_stop_links,_error,_existing_links,_existing_stops,_find_route_plan,_find_route_plan_by_id,_insert_route_plan,_insert_stop,_lock_route_plan,_mark_route_plan_planned,_mutable_status,_sync_stop_links,_update_stop_sequence. - Statische callers:
XLS/LMF/RoutePlanImporter.pm::import_route_plan. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
syncstop_links
Bron. stop/wanted/existing → insert/delete bronlinks, retourneert changed
- Input: my ($self, $dbh, $stop_id, $wanted_source_ids, $existing) = @_.
- Aanroepen:
_delete_stop_link,_insert_stop_link. - Statische callers:
XLS/LMF/RoutePlanImporter.pm::_sync_route_plan. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
activeroute_owner_project_ids
Bron. route-ID → actieve logistieke route-eigenaarproject-ID-lijst
- Input: my ($self, $dbh, $route_id) = @_.
- Aanroepen:
_positive_int. - Statische callers:
XLS/LMF/RoutePlanImporter.pm::import_route_plan. - DB-objecten:
lmf_user,route. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT DISTINCT lmf_user.lmf_project FROM route JOIN lmf_user ON lmf_user.leverancier_id = route.leverancier WHERE route.id=? AND lmf_user.actief IS TRUE AND lmf_user.logistiek IS TRUE AND lmf_user.lmf_project IS NOT NULL ORDER BY lmf_user.lmf_project
</details>
userhas_project_access
Bron. user/project → boolean actieve lmf_user_project
- Input: my ($self, $dbh, $user_id, $lmf_project) = @_.
- Aanroepen:
_positive_int. - Statische callers:
XLS/LMF/RoutePlanImporter.pm::import_route_plan. - DB-objecten:
lmf_user_project. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT 1 FROM lmf_user_project WHERE lmf_user=? AND lmf_project=? AND actief IS TRUE LIMIT 1
</details>
routeby_id
Bron. route-ID → id/naam hash of undef
- Input: my ($self, $dbh, $route_id) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/RoutePlanImporter.pm::_resolve_route. - DB-objecten:
route. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT id, naam FROM route WHERE id=?
</details>
routesby_name_for_transporteur_marketplaces
Bron. naam/transporteur → passende routes-array
- Input: my ($self, $dbh, $route_name, $transporteur_id) = @_.
- Aanroepen:
_positive_int. - Statische callers:
XLS/LMF/RoutePlanImporter.pm::_resolve_route. - DB-objecten:
leverancier_marktplaats,marktplaats,route. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT DISTINCT route.id, route.naam FROM route JOIN marktplaats ON marktplaats.leverancier = route.leverancier JOIN leverancier_marktplaats ON leverancier_marktplaats.marktplaats = marktplaats.id WHERE route.naam=? AND leverancier_marktplaats.leverancier=? AND marktplaats.leverancier IS NOT NULL ORDER BY route.id
</details>
marketplaceroute_supplier_for_customer_stops
Bron. transporteur/stops → unieke marktplaats/eigenaar of code-error; customerpad en supplier-only fallback
- Input: my ($self, $dbh, $transporteur_id, $stops) = @_.
- Aanroepen:
_error,_positive_int,_unique_ints. - Statische callers:
XLS/LMF/RoutePlanImporter.pm::_resolve_route. - DB-objecten:
klant,leverancier_marktplaats,lokatie,marktplaats. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT DISTINCT marktplaats.id AS marketplace_id, marktplaats.leverancier AS supplier_id FROM lokatie JOIN klant ON klant.id = lokatie.klant JOIN marktplaats ON marktplaats.id = klant.marktplaats JOIN leverancier_marktplaats ON leverancier_marktplaats.marktplaats = marktplaats.id WHERE lokatie.id IN ($placeholders) AND leverancier_marktplaats.leverancier=? AND marktplaats.leverancier IS NOT NULL ORDER BY marktplaats.id, marktplaats.leverancier
SELECT marktplaats.id AS marketplace_id, marktplaats.leverancier AS supplier_id FROM marktplaats JOIN leverancier_marktplaats transporteur_marktplaats ON transporteur_marktplaats.marktplaats = marktplaats.id AND transporteur_marktplaats.leverancier=? JOIN leverancier_marktplaats supplier_marktplaats ON supplier_marktplaats.marktplaats = marktplaats.id WHERE supplier_marktplaats.leverancier IN ($placeholders) AND marktplaats.leverancier IS NOT NULL GROUP BY marktplaats.id, marktplaats.leverancier HAVING count(DISTINCT supplier_marktplaats.leverancier)=? ORDER BY marktplaats.id, marktplaats.leverancier
</details>
insertroute
Bron. supplier/naam → INSERT route, retourneert ID
- Input: my ($self, $dbh, $supplier_id, $route_name) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/RoutePlanImporter.pm::_resolve_route. - DB-objecten:
route. Writes: route.
<details><summary>SQL-bronfragmenten</summary>
INSERT INTO route(leverancier, naam) VALUES(?, ?) RETURNING id
</details>
insertroute_locations
Bron. route/stops → INSERT route_lokatie voor customer/supplier; geen hub-start/endleden
- Input: my ($self, $dbh, $route_id, $stops) = @_.
- Aanroepen:
_positive_int. - Statische callers:
XLS/LMF/RoutePlanImporter.pm::_resolve_route. - DB-objecten:
route_lokatie. Writes: route_lokatie.
<details><summary>SQL-bronfragmenten</summary>
INSERT INTO route_lokatie(route, lokatie, nummer) VALUES(?, ?, ?)
INSERT INTO route_lokatie(route, leverancier, nummer) VALUES(?, ?, ?)
</details>
requestpayload
Bron. kopie params zonder Authorization
- Input: my ($self, $params) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/RoutePlanImporter.pm::import_route_plan. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
sourcerows
Bron. route/datum/transporteur → pakbonbronrijen; routeklanten of supplier-only fallback; carrier gelijk of null
- Input: my ($self, $dbh, $args) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/EmballageControl.pm::handle_request;XLS/LMF/RoutePlanImporter.pm::import_route_plan. - DB-objecten:
leverancier_pakbon,route_lokatie. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT DISTINCT leverancier_pakbon.id AS leverancier_pakbon_id, leverancier_pakbon.leverancier AS supplier_id, CASE WHEN route_lokatie.lokatie IS NOT NULL THEN leverancier_pakbon.lokatie ELSE NULL END AS location_id, leverancier_pakbon.hub AS hub_id FROM route_lokatie JOIN leverancier_pakbon ON ( ( route_lokatie.lokatie IS NOT NULL AND leverancier_pakbon.lokatie = route_lokatie.lokatie ) OR ( route_lokatie.leverancier IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM route_lokatie route_customer WHERE route_customer.route = route_lokatie.route AND route_customer.lokatie IS NOT NULL ) AND leverancier_pakbon.leverancier = route_lokatie.leverancier ) ) WHERE route_lokatie.route = ? AND leverancier_pakbon.lever_datum::date = ? AND ( leverancier_pakbon.transporteur = ? OR leverancier_pakbon.transporteur IS NULL ) ORDER BY leverancier_pakbon.id
</details>
allsupplier_ids_exist
Bron. IDs → boolean alle supplierrecords aanwezig
- Input: my ($self, $dbh, $ids) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/RoutePlanImporter.pm::_validate_stop_references. - DB-objecten:
leverancier. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT count(DISTINCT id) FROM leverancier WHERE id IN ($placeholders)
</details>
alllocation_ids_exist
Bron. IDs → boolean alle locaties aanwezig
- Input: my ($self, $dbh, $ids) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/RoutePlanImporter.pm::_validate_stop_references. - DB-objecten:
lokatie. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT count(DISTINCT id) FROM lokatie WHERE id IN ($placeholders)
</details>
findroute_plan
Bron. project/route/date/carrier → id/status van plan of undef
- Input: my ($self, $dbh, $args) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/RoutePlanImporter.pm::_sync_route_plan;XLS/LMF/RoutePlanImporter.pm::_insert_route_plan. - DB-objecten:
lmf_route. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT id, status FROM lmf_route WHERE lmf_project=? AND route_id=? AND route_date=? AND transporteur_id=?
</details>
findroute_plan_by_id
Bron. plan-ID → id/status of undef
- Input: my ($self, $dbh, $id) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/RoutePlanImporter.pm::_sync_route_plan. - DB-objecten:
lmf_route. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT id, status FROM lmf_route WHERE id=?
</details>
insertroute_plan
Bron. context → INSERT draft met conflict-ignore, bestaand ID fallback
- Input: my ($self, $dbh, $args) = @_.
- Aanroepen:
_find_route_plan,_positive_int. - Statische callers:
XLS/LMF/RoutePlanImporter.pm::_sync_route_plan. - DB-objecten:
lmf_route. Writes: lmf_route.
<details><summary>SQL-bronfragmenten</summary>
INSERT INTO lmf_route(lmf_project, nummer, naam, route_id, route_date, transporteur_id, status) VALUES(?, ?, ?, ?, ?, ?, 'draft') ON CONFLICT ON CONSTRAINT lmf_route_project_route_date_transporteur_uid DO NOTHING RETURNING id
</details>
lockroute_plan
Bron. plan-ID → id/status onder FOR UPDATE-lock
- Input: my ($self, $dbh, $id) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/RoutePlanImporter.pm::_sync_route_plan. - DB-objecten:
lmf_route. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT id, status FROM lmf_route WHERE id=? FOR UPDATE
</details>
existingstops
Bron. plan-ID → gelockte stops-array met logical_key
- Input: my ($self, $dbh, $lmf_route_id) = @_.
- Aanroepen:
_logical_key. - Statische callers:
XLS/LMF/RoutePlanImporter.pm::_sync_route_plan. - DB-objecten:
lmf_stop. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT id, stop_type, leverancier AS supplier_id, lokatie AS location_id, volgnummer FROM lmf_stop WHERE lmf_route=? ORDER BY id FOR UPDATE
</details>
existinglinks
Bron. plan-ID → stop→pakbon-ID-set
- Input: my ($self, $dbh, $lmf_route_id) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/RoutePlanImporter.pm::_sync_route_plan. - DB-objecten:
lmf_stop,lmf_stop_leverancier_pakbon. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT lmf_stop_leverancier_pakbon.lmf_stop, lmf_stop_leverancier_pakbon.leverancier_pakbon FROM lmf_stop_leverancier_pakbon JOIN lmf_stop ON lmf_stop.id = lmf_stop_leverancier_pakbon.lmf_stop WHERE lmf_stop.lmf_route=?
</details>
insertstop
Bron. plan/stop → INSERT lmf_stop, retourneert ID
- Input: my ($self, $dbh, $lmf_route_id, $stop) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/RoutePlanImporter.pm::_sync_route_plan. - DB-objecten:
lmf_stop. Writes: lmf_stop.
<details><summary>SQL-bronfragmenten</summary>
INSERT INTO lmf_stop(lmf_route, leverancier, lokatie, volgnummer, stop_type) VALUES(?, ?, ?, ?, ?) RETURNING id
</details>
updatestop_sequence
Bron. stop-ID/sequence → UPDATE volgnummer
- Input: my ($self, $dbh, $stop_id, $sequence) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/RoutePlanImporter.pm::_sync_route_plan. - DB-objecten:
lmf_stop. Writes: lmf_stop.
<details><summary>SQL-bronfragmenten</summary>
UPDATE lmf_stop SET volgnummer=? WHERE id=?
</details>
insertstop_link
Bron. stop/pakbon → INSERT bronlink ON CONFLICT DO NOTHING
- Input: my ($self, $dbh, $stop_id, $source_id) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/RoutePlanImporter.pm::_sync_stop_links. - DB-objecten:
lmf_stop_leverancier_pakbon. Writes: lmf_stop_leverancier_pakbon.
<details><summary>SQL-bronfragmenten</summary>
INSERT INTO lmf_stop_leverancier_pakbon(lmf_stop, leverancier_pakbon) VALUES(?, ?) ON CONFLICT DO NOTHING
</details>
deletestop_link
Bron. stop/pakbon → DELETE specifieke link
- Input: my ($self, $dbh, $stop_id, $source_id) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/RoutePlanImporter.pm::_sync_stop_links. - DB-objecten:
lmf_stop_leverancier_pakbon. Writes: lmf_stop_leverancier_pakbon.
<details><summary>SQL-bronfragmenten</summary>
DELETE FROM lmf_stop_leverancier_pakbon WHERE lmf_stop=? AND leverancier_pakbon=?
</details>
deletestop_links
Bron. stop-ID → DELETE alle bronlinks
- Input: my ($self, $dbh, $stop_id) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/RoutePlanImporter.pm::_sync_route_plan. - DB-objecten:
lmf_stop_leverancier_pakbon. Writes: lmf_stop_leverancier_pakbon.
<details><summary>SQL-bronfragmenten</summary>
DELETE FROM lmf_stop_leverancier_pakbon WHERE lmf_stop=?
</details>
deletestop
Bron. stop-ID → DELETE lmf_stop
- Input: my ($self, $dbh, $stop_id) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/RoutePlanImporter.pm::_sync_route_plan. - DB-objecten:
lmf_stop. Writes: lmf_stop.
<details><summary>SQL-bronfragmenten</summary>
DELETE FROM lmf_stop WHERE id=?
</details>
markroute_plan_planned
Bron. plan-ID → status planned en updated_at now
- Input: my ($self, $dbh, $lmf_route_id) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/RoutePlanImporter.pm::_sync_route_plan. - DB-objecten:
lmf_route. Writes: lmf_route.
<details><summary>SQL-bronfragmenten</summary>
UPDATE lmf_route SET status='planned', updated_at=CURRENT_TIMESTAMP WHERE id=?
</details>
defersequence_constraint
Bron. DBH → SET CONSTRAINTS volgnummer-uniciteit DEFERRED
- Input: my ($self, $dbh) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/RoutePlanImporter.pm::_sync_route_plan. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SET CONSTRAINTS lmf_stop_route_volgnummer_uid DEFERRED
</details>
begintransaction
Bron. DBH → ownershipflag; caller_managed_transaction geeft0, anders begin_work zo nodig en1
- Input: my ($self, $dbh) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/RoutePlanImporter.pm::import_route_plan. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
committransaction
Bron. DBH/ownership → commit indien eigenaar
- Input: my ($self, $dbh, $owns_transaction) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/RoutePlanImporter.pm::import_route_plan. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE; expliciete commit.
rollbacktransaction
Bron. DBH/ownership → rollback in eval indien eigenaar
- Input: my ($self, $dbh, $owns_transaction) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/RoutePlanImporter.pm::import_route_plan. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
_error
Bron. code/error/message/data → foutresponse
- Input: my ($http_code, $error_code, $message, $details) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/RoutePlanImporter.pm::import_route_plan;XLS/LMF/RoutePlanImporter.pm::_validate_payload;XLS/LMF/RoutePlanImporter.pm::_expected_stopset;XLS/LMF/RoutePlanImporter.pm::_match_payload_to_expected;XLS/LMF/RoutePlanImporter.pm::_validate_stop_references;XLS/LMF/RoutePlanImporter.pm::_resolve_route;XLS/LMF/RoutePlanImporter.pm::_sync_route_plan;XLS/LMF/RoutePlanImporter.pm::_marketplace_route_supplier_for_customer_stops. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
logicalkey
Bron. type/supplier/location → string businessidentiteit stop
- Input: my ($type, $supplier_id, $location_id) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/RoutePlanImporter.pm::_validate_payload;XLS/LMF/RoutePlanImporter.pm::_expected_stopset;XLS/LMF/RoutePlanImporter.pm::_existing_stops. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
allowedstop_type
Bron. type → boolean hub_start/supplier/customer/hub_end
- Input: my ($type) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/RoutePlanImporter.pm::_validate_payload. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
mutablestatus
Bron. status → boolean draft/planned
- Input: my ($status) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/RoutePlanImporter.pm::_sync_route_plan. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
positiveint
Bron. waarde → positief-integerboolean
- Input: my ($value) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/EmballageControl.pm::_filters;XLS/LMF/EmballageControl.pm::_hard_group_key;XLS/LMF/EmballageControl.pm::_linked_group_key;XLS/LMF/EmballageControl.pm::_merge_metadata;XLS/LMF/EmballageControl.pm::_add_hub;XLS/LMF/EmballageControl.pm::_add_stop;XLS/LMF/EmballageControl.pm::_add_source;XLS/LMF/EmballageControl.pm::_party;XLS/LMF/RoutePlanImporter.pm::import_route_plan;XLS/LMF/RoutePlanImporter.pm::_validate_payload;XLS/LMF/RoutePlanImporter.pm::_expected_stopset;XLS/LMF/RoutePlanImporter.pm::_match_payload_to_expected;XLS/LMF/RoutePlanImporter.pm::_validate_stop_references;XLS/LMF/RoutePlanImporter.pm::_resolve_route;XLS/LMF/RoutePlanImporter.pm::_active_route_owner_project_ids;XLS/LMF/RoutePlanImporter.pm::_user_has_project_access;XLS/LMF/RoutePlanImporter.pm::_routes_by_name_for_transporteur_marketplaces;XLS/LMF/RoutePlanImporter.pm::_marketplace_route_supplier_for_customer_stops;XLS/LMF/RoutePlanImporter.pm::_insert_route_locations;XLS/LMF/RoutePlanImporter.pm::_insert_route_plan;XLS/LMF/RoutePlanImporter.pm::_route_reference. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
routereference
Bron. route-ID/naam → parsed reference of undef
- Input: my ($value) = @_.
- Aanroepen:
_positive_int. - Statische callers:
XLS/LMF/RoutePlanImporter.pm::_validate_payload. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
_truthy
Bron. scalar → boolean uitsluitend bij scalarwaarde eq 1
- Input: my ($value) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/RoutePlanImporter.pm::import_route_plan. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
validdate
Bron. ISO-date → geldigheidsboolean
- Input: my ($value) = @_.
- Aanroepen:
_leap_year. - Statische callers:
XLS/LMF/RoutePlanImporter.pm::_validate_payload. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
leapyear
Bron. jaar → schrikkeljaarboolean
- Input: my ($year) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/RoutePlanImporter.pm::_valid_date. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
uniqueints
Bron. lijst → unieke gesorteerde int-geconverteerde waarden; geen eigen positiviteitsfilter
- Input: methodereceiver + request-args, of parameterloze helper zoals hierboven beschreven.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF/RoutePlanImporter.pm::_expected_stopset;XLS/LMF/RoutePlanImporter.pm::_match_payload_to_expected;XLS/LMF/RoutePlanImporter.pm::_validate_stop_references;XLS/LMF/RoutePlanImporter.pm::_marketplace_route_supplier_for_customer_stops. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
XLSLMFHandler.pm
handler
Bron. HTTP-request → Base/params/auth/dispatch → JSON en Apache OK; malformed JSON HTTP400; standaard code-fouten blijven JSON
- Input: methodereceiver + request-args, of parameterloze helper zoals hierboven beschreven; HTTP-paramkeys:
Authorization,POSTDATA,message,url,username. - Aanroepen:
_build_cgi,_capture_request_body,_populate_request_params,_request_method,authen,authorization,credentials,request. Modules: Apache2::Cookie::Jar::new, XLS::Base::new, XLS::LMF::lmf_bezoeker, XLS::LMF::new. - Statische callers: geen binnen deze vier bestanden; constructor/dispatch/externe toegang zoals beschreven.
- DB-objecten:
domain,lmf_log. Writes: lmf_log; expliciete commit.
<details><summary>SQL-bronfragmenten</summary>
SELECT title, logo, favicon, achtergrond AS background FROM domain WHERE naam=?
SELECT title, logo, favicon, achtergrond AS background FROM domain WHERE naam=?
INSERT INTO lmf_log(username, bericht) VALUES(?,?)
</details>
authorization
Bron. Authorization → UUID → actieve lmf_user-hash of undef
- Input: methodereceiver + request-args, of parameterloze helper zoals hierboven beschreven.
- Aanroepen:
_extract_uuid_token. - Statische callers:
XLSLMFHandler.pm::handler. - DB-objecten:
lmf_user. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT * FROM lmf_user WHERE token=? AND actief=?
</details>
credentials
Bron. cookie/username-password/tokenparams → credentialobject; hash/base64, geen nieuwe DB-write
- Input: methodereceiver + request-args, of parameterloze helper zoals hierboven beschreven.
- Aanroepen:
_extract_uuid_token. - Statische callers:
XLSLMFHandler.pm::handler. - DB-objecten:
lmf_user. Writes: geen directe INSERT/UPDATE/DELETE.
<details><summary>SQL-bronfragmenten</summary>
SELECT email, password FROM lmf_user WHERE token=?
</details>
extractuuid_token
Bron. Bearer/spaties/UUID → token of undef
- Input: my ($token) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLS/LMF.pm::check_token;XLSLMFHandler.pm::authorization;XLSLMFHandler.pm::credentials. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
buildcgi
Bron. request/rawbody → CGI-query of normale CGI-parser
- Input: my ($r, $raw_body) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLSLMFHandler.pm::handler. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
capturerequest_body
Bron. HTTP-method/body/header → ruwe body voor POST/PUT/PATCH/DELETE
- Input: my ($r) = @_.
- Aanroepen:
_header_value. - Statische callers:
XLSLMFHandler.pm::handler. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
requestmethod
Bron. request → genormaliseerde methodenaam
- Input: my ($r) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLSLMFHandler.pm::handler. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
populaterequest_params
Bron. CGI/body → samengevoegde params met POSTDATA
- Input: my ($cgi, $raw_body) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLSLMFHandler.pm::handler. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
headervalue
Bron. request/headernaam → waarde via get/hashfallback
- Input: my ($r, $name) = @_.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLSLMFHandler.pm::_capture_request_body. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
request
Bron. URI → niet-lege segmentenarray
- Input: methodereceiver + request-args, of parameterloze helper zoals hierboven beschreven.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLSLMFHandler.pm::handler. - DB-objecten: geen directe tabelselectie. Writes: geen directe INSERT/UPDATE/DELETE.
authen
Bron. credentials → actieve lmf_user met bestaand token; last_login/from UPDATE/commit of undef
- Input: methodereceiver + request-args, of parameterloze helper zoals hierboven beschreven.
- Aanroepen: geen interne servicecall gevonden.
- Statische callers:
XLSLMFHandler.pm::handler. - DB-objecten:
lmf_user. Writes: lmf_user; expliciete commit.
<details><summary>SQL-bronfragmenten</summary>
SELECT * FROM lmf_user WHERE email=? AND password=? AND actief=?
UPDATE lmf_user SET last_login=now(), last_login_from=? WHERE token=?
</details>