From 5c7ed9abcbcdd4aa8af3a78d7a24c13b7d876339 Mon Sep 17 00:00:00 2001 From: DevEnv nis2-agile Date: Sun, 31 May 2026 11:16:43 +0200 Subject: [PATCH] [FIX] Import fornitori: valida scope org di category_id + allinea header migrazioni 032/033 - bulkUpsertSuppliers: il ramo category_id esplicito (import API/CSV) ora verifica che la categoria sia un preset (org 0) o della stessa org, come gia' fa il ramo category_slug. Evita di scrivere suppliers.category_id di un'altra org (dato sporco cross-org). Finding review multi-agente (MINORE, correttezza dati). - docs/sql/032,033: header "PROPOSTA DI DESIGN (NON applicata)" -> "APPLICATA su produzione 2026-05-31" (sono effettivamente applicate). Evita confusione operativa. Co-Authored-By: Claude Opus 4.8 --- application/controllers/SupplyChainController.php | 8 +++++++- docs/sql/032_supplier_questionnaires_module.sql | 2 +- docs/sql/033_suppliers_category_source.sql | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/application/controllers/SupplyChainController.php b/application/controllers/SupplyChainController.php index e631949..04c40ca 100644 --- a/application/controllers/SupplyChainController.php +++ b/application/controllers/SupplyChainController.php @@ -617,7 +617,13 @@ class SupplyChainController extends BaseController ); $catId = $cat['id'] ?? null; } elseif (!empty($r['category_id'])) { - $catId = (int) $r['category_id']; + // Verifica scope: la categoria deve essere un preset (org 0) o della stessa org, + // altrimenti si scriverebbe un category_id di un'altra org (dato sporco cross-org). + $cat = Database::fetchOne( + 'SELECT id FROM supplier_categories WHERE id = ? AND organization_id IN (0, ?)', + [(int) $r['category_id'], $orgId] + ); + $catId = $cat['id'] ?? null; } $data = [ diff --git a/docs/sql/032_supplier_questionnaires_module.sql b/docs/sql/032_supplier_questionnaires_module.sql index 43db329..ac830bc 100644 --- a/docs/sql/032_supplier_questionnaires_module.sql +++ b/docs/sql/032_supplier_questionnaires_module.sql @@ -1,7 +1,7 @@ -- ============================================================================ -- Migration 032 - Modulo Questionari Fornitori (supply chain Art.21.2.d) -- ---------------------------------------------------------------------------- --- PROPOSTA DI DESIGN (NON ancora applicata). Da eseguire su host MySQL. +-- APPLICATA su produzione (host MySQL) il 2026-05-31. Idempotente: ri-eseguibile. -- -- SOSTITUISCE supplier_questionnaires (mig 027, da qui DEPRECATA/read-only) con -- un modello completo a template versionati + campagne + domande + risposte: diff --git a/docs/sql/033_suppliers_category_source.sql b/docs/sql/033_suppliers_category_source.sql index e272f08..4f9e0d2 100644 --- a/docs/sql/033_suppliers_category_source.sql +++ b/docs/sql/033_suppliers_category_source.sql @@ -1,7 +1,7 @@ -- ============================================================================ -- Migration 033 - suppliers: categoria, provenienza import, soft-delete (guard) -- ---------------------------------------------------------------------------- --- PROPOSTA DI DESIGN (NON ancora applicata). Da eseguire su host MySQL. +-- APPLICATA su produzione (host MySQL) il 2026-05-31. Idempotente: ri-eseguibile. -- -- Estende suppliers per il nuovo modulo questionari/import: -- - category_id : FK supplier_categories (classificazione fornitore)