query( "INSERT INTO territories (numero, zona, tipologia, image_path, note) VALUES (?, ?, ?, ?, ?)", [$numero, $zona, $tipologia, $image_path, $note] ); if ($result) { $territory_id = $db->getConnection()->lastInsertId(); logActivity('create', "Creato territorio $numero - $zona", 'territory', $territory_id); setFlashMessage('Territorio aggiunto con successo', 'success'); } else { setFlashMessage('Errore durante l\'aggiunta del territorio', 'error'); } header('Location: territories.php'); exit; break; case 'edit': $id = (int)$_POST['id']; $numero = sanitize($_POST['numero']); $zona = sanitize($_POST['zona']); $tipologia = sanitize($_POST['tipologia']); $note = sanitize($_POST['note'] ?? ''); // Gestione upload nuova immagine $image_path = $_POST['current_image'] ?? null; if (isset($_FILES['image']) && $_FILES['image']['error'] === UPLOAD_ERR_OK) { $file = $_FILES['image']; $ext = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)); if (in_array($ext, ALLOWED_EXTENSIONS) && $file['size'] <= MAX_FILE_SIZE) { // Elimina vecchia immagine if ($image_path && file_exists(BASE_PATH . $image_path)) { unlink(BASE_PATH . $image_path); } $filename = 'territory_' . time() . '_' . uniqid() . '.' . $ext; $upload_dir = UPLOAD_PATH; if (!is_dir($upload_dir)) { mkdir($upload_dir, 0755, true); } if (move_uploaded_file($file['tmp_name'], $upload_dir . '/' . $filename)) { $image_path = UPLOAD_URL . '/' . $filename; } } } $result = $db->query( "UPDATE territories SET numero = ?, zona = ?, tipologia = ?, image_path = ?, note = ? WHERE id = ?", [$numero, $zona, $tipologia, $image_path, $note, $id] ); if ($result) { logActivity('update', "Modificato territorio $numero - $zona", 'territory', $id); setFlashMessage('Territorio modificato con successo', 'success'); } else { setFlashMessage('Errore durante la modifica del territorio', 'error'); } header('Location: territories.php'); exit; break; case 'delete': $id = (int)$_POST['id']; // Recupera l'immagine per eliminarla $territory = $db->fetchOne("SELECT numero, zona, image_path FROM territories WHERE id = ?", [$id]); if ($territory && $territory['image_path']) { $file_path = BASE_PATH . $territory['image_path']; if (file_exists($file_path)) { unlink($file_path); } } $result = $db->query("DELETE FROM territories WHERE id = ?", [$id]); if ($result) { if ($territory) { logActivity('delete', "Eliminato territorio {$territory['numero']} - {$territory['zona']}", 'territory', $id); } setFlashMessage('Territorio eliminato con successo', 'success'); } else { setFlashMessage('Errore durante l\'eliminazione del territorio', 'error'); } header('Location: territories.php'); exit; break; } } } // Recupera dati per modifica $territory = null; if ($action === 'edit' && $territory_id) { $territory = $db->fetchOne("SELECT * FROM territories WHERE id = ?", [$territory_id]); if (!$territory) { setFlashMessage('Territorio non trovato', 'error'); header('Location: territories.php'); exit; } } // Lista territori con informazioni sullo stato if ($action === 'list') { $search = $_GET['search'] ?? ''; $filter_zona = $_GET['zona'] ?? ''; $filter_tipologia = $_GET['tipologia'] ?? ''; $where = []; $params = []; if ($search) { $where[] = "(t.numero LIKE ? OR t.zona LIKE ? OR t.tipologia LIKE ?)"; $search_term = "%$search%"; $params[] = $search_term; $params[] = $search_term; $params[] = $search_term; } if ($filter_zona) { $where[] = "t.zona = ?"; $params[] = $filter_zona; } if ($filter_tipologia) { $where[] = "t.tipologia = ?"; $params[] = $filter_tipologia; } $where_clause = $where ? "WHERE " . implode(" AND ", $where) : ""; $territories = $db->fetchAll(" SELECT t.*, a.id as current_assignment_id, a.assigned_to, a.assigned_date, DATEDIFF(CURDATE(), a.assigned_date) as days_assigned FROM territories t LEFT JOIN assignments a ON t.id = a.territory_id AND a.returned_date IS NULL $where_clause ORDER BY t.numero ASC ", $params); // Ottieni liste per filtri $zones = $db->fetchAll("SELECT DISTINCT zona FROM territories ORDER BY zona"); $types = $db->fetchAll("SELECT DISTINCT tipologia FROM territories ORDER BY tipologia"); } include 'header.php'; ?>
Reset
0): ?>
Numero Zona Tipologia Stato Assegnato a Giorni Azioni
Assegnato Disponibile Dettagli Modifica

Nessun territorio trovato

Es: Residenziale, Commerciale, Rurale, ecc.
Piantina
Formati supportati: JPG, PNG, GIF, PDF. Dimensione massima: 5 MB
fetchOne("SELECT * FROM territories WHERE id = ?", [$territory_id]); if (!$territory) { setFlashMessage('Territorio non trovato', 'error'); header('Location: territories.php'); exit; } // Storico assegnazioni $history = $db->fetchAll(" SELECT assigned_to, assigned_date, returned_date, DATEDIFF(COALESCE(returned_date, CURDATE()), assigned_date) as days_duration, is_priority, note FROM assignments WHERE territory_id = ? ORDER BY assigned_date DESC ", [$territory_id]); ?>
Numero:
Zona:
Tipologia:
Note:

Piantina:
Piantina

Storico Assegnazioni

0): ?>
Assegnato a Data Assegnazione Data Restituzione Durata Priorità
In corso'; } ?> giorni Priorità -

Nessuna assegnazione storica