From 3b9f30a89054b5a0da4a80c477cadd1d19109fd0 Mon Sep 17 00:00:00 2001 From: DevEnv nis2-agile Date: Wed, 24 Jun 2026 08:09:07 +0200 Subject: [PATCH] =?UTF-8?q?[FEAT]=20Agile=20Technology=20=3D=20studio=20di?= =?UTF-8?q?=20consulenza=20che=20gestisce=20s=C3=A9=20stessa=20(consolidam?= =?UTF-8?q?ento)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Opzione A (decisione utente 24/6): nessun duplicato, nessuna rinomina. Seeder idempotente+transazionale build_agile_consulente.php: - consulting_firm 1: anagrafica REALE (P.IVA 07776161213, sede legale Roma Piazza di Campitelli 2 00186 RM, PEC agile.software@pec.it) — erano dati placeholder. - org 996003 (Nuova Agile Technology srl, P.IVA 07776161213): consulting_firm_id=1 → prima azienda auto-gestita dallo studio. - firm_org_assignments: studio 1 ↔ org 996003 ↔ 4 admin. - users.consulting_firm_id=1 per Benassati(4, consulente), Silvia Garretto(103, legale rappr = presidenza@), Tagliavini(326), Fattori(330). Manuale/procedure/policy (12 doc published) già su 996003, non toccati. Rollback nel file. Co-Authored-By: Claude Opus 4.8 (1M context) --- application/cli/build_agile_consulente.php | 83 ++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 application/cli/build_agile_consulente.php diff --git a/application/cli/build_agile_consulente.php b/application/cli/build_agile_consulente.php new file mode 100644 index 0000000..e81422d --- /dev/null +++ b/application/cli/build_agile_consulente.php @@ -0,0 +1,83 @@ +prepare($sql); $s->execute($p); return $s->fetch(PDO::FETCH_ASSOC); } +$inList = implode(',', ADMINS); + +echo "=== STATO PRIMA ===\n"; +echo "firm 1 : " . json_encode(one($pdo, "SELECT name,vat_number,address,city,cap,pec FROM consulting_firms WHERE id=?", [FIRM_ID]), JSON_UNESCAPED_UNICODE) . "\n"; +echo "org 996003 : cf_id=" . json_encode(one($pdo, "SELECT consulting_firm_id FROM organizations WHERE id=?", [ORG_ID])) . "\n"; +echo "users : " . json_encode($pdo->query("SELECT id,consulting_firm_id FROM users WHERE id IN ($inList)")->fetchAll(PDO::FETCH_KEY_PAIR)) . "\n"; +echo "assignments: " . (int)$pdo->query("SELECT COUNT(*) FROM firm_org_assignments WHERE consulting_firm_id=" . FIRM_ID . " AND organization_id=" . ORG_ID)->fetchColumn() . "\n\n"; + +$pdo->beginTransaction(); +try { + $pdo->prepare("UPDATE consulting_firms SET vat_number=?, fiscal_code=?, forma_giuridica=?, address=?, city=?, province=?, cap=?, pec=?, website=?, updated_at=NOW() WHERE id=?") + ->execute(['07776161213', '07776161213', 'SRL', 'Piazza di Campitelli, 2', 'Roma', 'RM', '00186', 'agile.software@pec.it', 'https://agile.software', FIRM_ID]); + echo "[1] consulting_firm 1: anagrafica reale aggiornata\n"; + + $pdo->prepare("UPDATE organizations SET consulting_firm_id=? WHERE id=?")->execute([FIRM_ID, ORG_ID]); + echo "[2] org 996003.consulting_firm_id=1 (azienda auto-gestita)\n"; + + $ins = 0; + foreach (ADMINS as $uid) { + $ex = (int)one($pdo, "SELECT COUNT(*) c FROM firm_org_assignments WHERE consulting_firm_id=? AND organization_id=? AND assigned_to=?", [FIRM_ID, ORG_ID, $uid])['c']; + if ($ex === 0) { + $pdo->prepare("INSERT INTO firm_org_assignments (consulting_firm_id,organization_id,assigned_to,assigned_by,created_at) VALUES (?,?,?,?,NOW())") + ->execute([FIRM_ID, ORG_ID, $uid, ASSIGNED_BY]); + $ins++; + } + } + echo "[3] firm_org_assignments: +$ins nuove (su " . count(ADMINS) . " admin)\n"; + + $pdo->prepare("UPDATE users SET consulting_firm_id=? WHERE id IN ($inList)")->execute([FIRM_ID]); + echo "[4] users.consulting_firm_id=1 per $inList\n"; + + $pdo->commit(); + echo "\n=== COMMIT OK ===\n"; +} catch (Throwable $e) { + $pdo->rollBack(); + echo "ROLLBACK (nessuna modifica): " . $e->getMessage() . "\n"; + exit(1); +} + +echo "\n=== STATO DOPO ===\n"; +echo "firm 1 : " . json_encode(one($pdo, "SELECT name,vat_number,fiscal_code,address,city,province,cap,pec FROM consulting_firms WHERE id=?", [FIRM_ID]), JSON_UNESCAPED_UNICODE) . "\n"; +echo "org 996003 : " . json_encode(one($pdo, "SELECT name,vat_number,consulting_firm_id FROM organizations WHERE id=?", [ORG_ID]), JSON_UNESCAPED_UNICODE) . "\n"; +echo "users : " . json_encode($pdo->query("SELECT id,email,role,consulting_firm_id FROM users WHERE id IN ($inList)")->fetchAll(PDO::FETCH_ASSOC), JSON_UNESCAPED_UNICODE) . "\n"; +echo "assignments: " . json_encode($pdo->query("SELECT assigned_to,assigned_by FROM firm_org_assignments WHERE consulting_firm_id=" . FIRM_ID . " AND organization_id=" . ORG_ID . " ORDER BY assigned_to")->fetchAll(PDO::FETCH_ASSOC)) . "\n"; +echo "doc SGSI 996003 (published): " . (int)$pdo->query("SELECT COUNT(*) FROM isms_documents WHERE organization_id=" . ORG_ID . " AND status='published'")->fetchColumn() . "\n"; + +/* ROLLBACK manuale: + UPDATE consulting_firms SET vat_number='IT12345670962',fiscal_code='12345670962',address='Via dei Consulenti 42',city='Milano',province='MI',cap='20121',pec='agiletech@pec.it' WHERE id=1; + UPDATE organizations SET consulting_firm_id=NULL WHERE id=996003; + DELETE FROM firm_org_assignments WHERE consulting_firm_id=1 AND organization_id=996003; + UPDATE users SET consulting_firm_id=NULL WHERE id IN (4,103); -- (326,330 erano GIÀ firm 1) +*/