fetchOne( "SELECT id FROM assignments WHERE territory_id = ? AND returned_date IS NULL", [$territory_id] ); if ($existing) { setFlashMessage('Questo territorio è già assegnato', 'error'); header('Location: assignments.php'); exit; } // Genera link temporaneo $link_token = bin2hex(random_bytes(32)); $link_expiry_days = (int)$db->getConfig('link_expiry_days', 7); $link_expires_at = date('Y-m-d H:i:s', strtotime("+$link_expiry_days days")); $result = $db->query( "INSERT INTO assignments (territory_id, assigned_to, assigned_date, is_priority, note, link_token, link_expires_at) VALUES (?, ?, ?, ?, ?, ?, ?)", [$territory_id, $assigned_to, $assigned_date, $is_priority, $note, $link_token, $link_expires_at] ); if ($result) { $assignment_id = $db->getConnection()->lastInsertId(); $territory = $db->fetchOne("SELECT numero, zona FROM territories WHERE id = ?", [$territory_id]); logActivity('assign', "Assegnato territorio {$territory['numero']} - {$territory['zona']} a $assigned_to", 'assignment', $assignment_id); setFlashMessage('Territorio assegnato con successo', 'success'); header("Location: assignments.php?action=view&id=$assignment_id"); } else { setFlashMessage('Errore durante l\'assegnazione', 'error'); header('Location: assignments.php'); } exit; break; case 'return': $territory_id = (int)$_POST['territory_id']; $returned_date = $_POST['returned_date']; // Recupera info assegnazione $assignment = $db->fetchOne( "SELECT a.id, a.assigned_to, t.numero, t.zona FROM assignments a JOIN territories t ON a.territory_id = t.id WHERE a.territory_id = ? AND a.returned_date IS NULL", [$territory_id] ); $result = $db->query( "UPDATE assignments SET returned_date = ? WHERE territory_id = ? AND returned_date IS NULL", [$returned_date, $territory_id] ); if ($result && $assignment) { logActivity('return', "Riconsegnato territorio {$assignment['numero']} - {$assignment['zona']} da {$assignment['assigned_to']}", 'assignment', $assignment['id']); setFlashMessage('Territorio riconsegnato con successo', 'success'); } else { setFlashMessage('Errore durante la riconsegna', 'error'); } header('Location: assignments.php'); exit; break; } } } // Lista assegnazioni if ($action === 'list') { $filter = $_GET['filter'] ?? 'current'; if ($filter === 'current') { $assignments = $db->fetchAll(" SELECT a.*, t.numero, t.zona, t.tipologia, DATEDIFF(CURDATE(), a.assigned_date) as days_assigned FROM assignments a INNER JOIN territories t ON a.territory_id = t.id WHERE a.returned_date IS NULL ORDER BY a.assigned_date ASC "); } else { $assignments = $db->fetchAll(" SELECT a.*, t.numero, t.zona, t.tipologia, DATEDIFF(a.returned_date, a.assigned_date) as days_assigned FROM assignments a INNER JOIN territories t ON a.territory_id = t.id WHERE a.returned_date IS NOT NULL ORDER BY a.returned_date DESC LIMIT 100 "); } } // Pagina per nuova assegnazione if ($action === 'assign') { if ($territory_id) { $territory = $db->fetchOne("SELECT * FROM territories WHERE id = ?", [$territory_id]); if (!$territory) { setFlashMessage('Territorio non trovato', 'error'); header('Location: assignments.php'); exit; } } else { // Carica tutti i territori disponibili $available_territories = $db->fetchAll(" SELECT t.* FROM territories t WHERE t.id NOT IN ( SELECT territory_id FROM assignments WHERE returned_date IS NULL ) ORDER BY t.numero ASC "); } $is_priority = isset($_GET['priority']) ? 1 : 0; } // Pagina per riconsegna if ($action === 'return' && $territory_id) { $assignment = $db->fetchOne(" SELECT a.*, t.numero, t.zona, t.tipologia FROM assignments a INNER JOIN territories t ON a.territory_id = t.id WHERE a.territory_id = ? AND a.returned_date IS NULL ", [$territory_id]); if (!$assignment) { setFlashMessage('Assegnazione non trovata', 'error'); header('Location: assignments.php'); exit; } } // Visualizzazione dettaglio assegnazione if ($action === 'view') { $assignment_id = $_GET['id'] ?? null; if ($assignment_id) { $assignment = $db->fetchOne(" SELECT a.*, t.numero, t.zona, t.tipologia, t.image_path FROM assignments a INNER JOIN territories t ON a.territory_id = t.id WHERE a.id = ? ", [$assignment_id]); if (!$assignment) { setFlashMessage('Assegnazione non trovata', 'error'); header('Location: assignments.php'); exit; } } } include 'header.php'; ?>
| Territorio | Zona | Tipologia | Assegnato a | Data Assegnazione | Giorni | Azioni | Data Restituzione | Durata |
|---|---|---|---|---|---|---|---|---|
| Priorità | giorni | Dettagli Riconsegna | giorni |
Questo link permette di visualizzare il territorio senza accedere al sistema. Il link è valido fino al Il link è scaduto
Per generare un nuovo link, è necessario creare una nuova assegnazione.