prepare("INSERT INTO ragioni_sociali (denominazione, codice_fiscale, email_amministrazione, telefono_fisso, cellulare, whatsapp, indirizzo_postale) VALUES (:denom, :cf, :email, :fisso, :cell, :wa, :ind)");
$stmt->execute([
'denom' => $denominazione, 'cf' => $cf, 'email' => $email,
'fisso' => $fisso, 'cell' => $cell, 'wa' => $wa_clean, 'ind' => $indirizzo
]);
$new_id = $pdo->lastInsertId();
header("Location: ragioni_sociali.php?action=scadenze&id=" . $new_id . "&msg=created");
exit;
} else {
// MODIFICA ESISTENTE
$stmt = $pdo->prepare("UPDATE ragioni_sociali SET denominazione = :denom, codice_fiscale = :cf, email_amministrazione = :email, telefono_fisso = :fisso, cellulare = :cell, whatsapp = :wa, indirizzo_postale = :ind WHERE id = :id");
$stmt->execute([
'denom' => $denominazione, 'cf' => $cf, 'email' => $email,
'fisso' => $fisso, 'cell' => $cell, 'wa' => $wa_clean, 'ind' => $indirizzo, 'id' => $id_azienda_mod
]);
$messaggio = "
Dati anagrafici aggiornati con successo!
";
}
} catch (PDOException $e) {
$messaggio = "Errore nel salvataggio: " . htmlspecialchars($e->getMessage()) . "
";
}
} else {
$messaggio = "Denominazione e Codice Fiscale/P.IVA sono obbligatori.
";
}
}
// 2. SALVATAGGIO CONFIGURAZIONE SCADENZE CON PULIZIA FILE ORFANI
if (isset($_POST['azione']) && $_POST['azione'] === 'salva_scadenze') {
try {
$pdo->beginTransaction();
$scadenze_attuali_raw = $pdo->prepare("SELECT id_tipologia_scadenza, id FROM scadenze WHERE id_ragione_sociale = :id_az");
$scadenze_attuali_raw->execute(['id_az' => $id_azienda]);
$mappa_attuali = $scadenze_attuali_raw->fetchAll(PDO::FETCH_KEY_PAIR);
$tipologie_post = isset($_POST['scadenza_attiva']) ? array_keys($_POST['scadenza_attiva']) : [];
// A. Rimuovi file e record solo delle spunte disattivate
foreach ($mappa_attuali as $id_tip_esistente => $id_scadenza) {
if (!in_array($id_tip_esistente, $tipologie_post)) {
$stmt_files = $pdo->prepare("SELECT percorso_file FROM documenti_scadenze WHERE id_scadenza = ?");
$stmt_files->execute([$id_scadenza]);
foreach ($stmt_files->fetchAll(PDO::FETCH_COLUMN) as $f) {
if (!empty($f)) @unlink(__DIR__ . '/uploads/' . $f);
}
$pdo->prepare("DELETE FROM documenti_scadenze WHERE id_scadenza = ?")->execute([$id_scadenza]);
$pdo->prepare("DELETE FROM scadenze WHERE id = ?")->execute([$id_scadenza]);
}
}
// B. Aggiorna o inserisci quelle attive
foreach ($tipologie_post as $id_tipologia) {
$data_scad = !empty($_POST['data_scadenza'][$id_tipologia]) ? $_POST['data_scadenza'][$id_tipologia] : null;
$id_forn = !empty($_POST['id_fornitore'][$id_tipologia]) ? $_POST['id_fornitore'][$id_tipologia] : null;
$note = trim($_POST['note'][$id_tipologia] ?? '');
if (isset($mappa_attuali[$id_tipologia])) {
$stmt_upd = $pdo->prepare("UPDATE scadenze SET data_scadenza = :data, id_fornitore = :id_forn, note = :note WHERE id = :id_scad");
$stmt_upd->execute(['data' => $data_scad, 'id_forn' => $id_forn, 'note' => $note, 'id_scad' => $mappa_attuali[$id_tipologia]]);
} else {
$stmt_ins = $pdo->prepare("INSERT INTO scadenze (id_ragione_sociale, id_tipologia_scadenza, id_fornitore, data_scadenza, note) VALUES (:id_az, :id_tip, :id_forn, :data, :note)");
$stmt_ins->execute(['id_az' => $id_azienda, 'id_tip' => $id_tipologia, 'id_forn' => $id_forn, 'data' => $data_scad, 'note' => $note]);
}
}
$pdo->commit();
header("Location: ragioni_sociali.php?msg=updated");
exit;
} catch (PDOException $e) {
$pdo->rollBack();
$messaggio = "Errore nel salvataggio dello scadenziario: " . htmlspecialchars($e->getMessage()) . "
";
}
}
// 3. CANCELLAZIONE RAGIONE SOCIALE CON PULIZIA TOTALE FILE
if (isset($_POST['azione']) && $_POST['azione'] === 'elimina_azienda') {
$id_del = (int)($_POST['id_azienda'] ?? 0);
try {
$pdo->beginTransaction();
$stmt_files = $pdo->prepare("
SELECT ds.percorso_file
FROM documenti_scadenze ds
JOIN scadenze s ON ds.id_scadenza = s.id
WHERE s.id_ragione_sociale = :id
");
$stmt_files->execute(['id' => $id_del]);
$files_da_cancellare = $stmt_files->fetchAll(PDO::FETCH_COLUMN);
foreach ($files_da_cancellare as $file) {
if (!empty($file)) {
$file_path = __DIR__ . '/uploads/' . $file;
if (file_exists($file_path)) {
@unlink($file_path);
}
}
}
$pdo->prepare("DELETE FROM documenti_scadenze WHERE id_scadenza IN (SELECT id FROM scadenze WHERE id_ragione_sociale = :id)")->execute(['id' => $id_del]);
$pdo->prepare("DELETE FROM scadenze WHERE id_ragione_sociale = :id")->execute(['id' => $id_del]);
$pdo->prepare("DELETE FROM ragioni_sociali WHERE id = :id")->execute(['id' => $id_del]);
$pdo->commit();
$messaggio = " Ragione Sociale, scadenze e file fisici eliminati con successo!
";
} catch (Exception $e) {
$pdo->rollBack();
$messaggio = "Errore durante la cancellazione.
";
}
}
}
if (isset($_GET['msg'])) {
if ($_GET['msg'] === 'created') $messaggio = "Anagrafica creata! Configura ora le sue scadenze tramite i Check Web qui sotto.
";
if ($_GET['msg'] === 'updated') $messaggio = "Scadenziario aziendale aggiornato con successo!
";
}
?>
Ragioni Sociali - NEXT_GEN
Anagrafica Ragioni Sociali
= $messaggio ?>
query("SELECT * FROM ragioni_sociali ORDER BY denominazione ASC")->fetchAll();
?>
Denominazione / C.F.
Contatti Amministrazione
Indirizzo
Azioni
Nessuna ragione sociale in archivio.
= htmlspecialchars($az['denominazione']) ?>
= htmlspecialchars($az['codice_fiscale']) ?>
= htmlspecialchars($az['email_amministrazione']) ?>
= htmlspecialchars($az['telefono_fisso']) ?>
= htmlspecialchars($az['cellulare']) ?>
= htmlspecialchars($az['indirizzo_postale'] ?: '-') ?>
0):
$az = $pdo->prepare("SELECT denominazione FROM ragioni_sociali WHERE id = ?");
$az->execute([$id_azienda]);
$azienda = $az->fetch();
$categorie = $pdo->query("SELECT * FROM categorie_scadenze ORDER BY nome_categoria ASC")->fetchAll();
$tipologie = $pdo->query("SELECT * FROM tipologie_scadenze ORDER BY nome_scadenza ASC")->fetchAll();
$fornitori = $pdo->query("SELECT id, nome_o_ragione_sociale, ruolo FROM fornitori ORDER BY ruolo ASC, nome_o_ragione_sociale ASC")->fetchAll();
$scad_salvate_raw = $pdo->prepare("SELECT * FROM scadenze WHERE id_ragione_sociale = ?");
$scad_salvate_raw->execute([$id_azienda]);
$scad_salvate = [];
foreach ($scad_salvate_raw->fetchAll() as $s) {
$scad_salvate[$s['id_tipologia_scadenza']] = $s;
}
?>
Torna alla lista
Configurazione Scadenze per: = htmlspecialchars($azienda['denominazione']) ?>
Attiva le scadenze desiderate tramite i check. Puoi compilare la data e il fornitore in un secondo momento.