getConfig('warning_days_normal', 90);
$warning_days_priority = (int)$db->getConfig('warning_days_priority', 180);
$warning_days_return = (int)$db->getConfig('warning_days_return', 120);
// Semplice classe PDF
class PDF {
private $content = '';
public function addTitle($title) {
$this->content .= "
$title
";
}
public function addText($text) {
$this->content .= "$text
";
}
public function addTable($headers, $rows) {
$this->content .= "";
$this->content .= "";
foreach ($headers as $header) {
$this->content .= "| $header | ";
}
$this->content .= "
";
foreach ($rows as $row) {
$this->content .= "";
foreach ($row as $cell) {
$this->content .= "| $cell | ";
}
$this->content .= "
";
}
$this->content .= "
";
}
public function output($filename) {
header('Content-Type: text/html; charset=utf-8');
header('Content-Disposition: inline; filename="' . $filename . '.html"');
echo "
$filename
";
echo $this->content;
echo "";
echo "
Generato il " . date('d/m/Y H:i') . " - " . APP_NAME . "
";
echo "
";
echo "";
echo "";
}
}
$pdf = new PDF();
switch ($type) {
case 'to_assign':
// Territori da assegnare
$territories = $db->fetchAll("
SELECT
t.id,
t.numero,
t.zona,
t.tipologia,
MAX(a.returned_date) as last_returned_date,
DATEDIFF(CURDATE(), MAX(a.returned_date)) as days_in_depot
FROM territories t
LEFT JOIN assignments a ON t.id = a.territory_id
WHERE t.id NOT IN (
SELECT territory_id FROM assignments WHERE returned_date IS NULL
)
GROUP BY t.id, t.numero, t.zona, t.tipologia
HAVING days_in_depot >= ? OR MAX(a.returned_date) IS NULL
ORDER BY last_returned_date ASC NULLS FIRST
", [$warning_days_normal]);
$pdf->addTitle('Territori da Assegnare');
$pdf->addText('Territori in reparto da più di ' . $warning_days_normal . ' giorni');
$pdf->addText('Totale: ' . count($territories) . ' territori');
$headers = ['Numero', 'Zona', 'Tipologia', 'Ultima Restituzione', 'Giorni in Reparto'];
$rows = [];
foreach ($territories as $t) {
$rows[] = [
htmlspecialchars($t['numero']),
htmlspecialchars($t['zona']),
htmlspecialchars($t['tipologia']),
formatDate($t['last_returned_date']),
($t['days_in_depot'] ?? 'Mai assegnato')
];
}
$pdf->addTable($headers, $rows);
$pdf->output('Territori_da_Assegnare_' . date('Y-m-d'));
break;
case 'priority':
// Territori prioritari
$territories = $db->fetchAll("
SELECT
t.id,
t.numero,
t.zona,
t.tipologia,
MAX(a.returned_date) as last_returned_date,
DATEDIFF(CURDATE(), MAX(a.returned_date)) as days_in_depot
FROM territories t
LEFT JOIN assignments a ON t.id = a.territory_id
WHERE t.id NOT IN (
SELECT territory_id FROM assignments WHERE returned_date IS NULL
)
GROUP BY t.id, t.numero, t.zona, t.tipologia
HAVING days_in_depot >= ?
ORDER BY last_returned_date ASC NULLS FIRST
", [$warning_days_priority]);
$pdf->addTitle('Territori Prioritari');
$pdf->addText('Territori in reparto da più di ' . $warning_days_priority . ' giorni');
$pdf->addText('Totale: ' . count($territories) . ' territori');
$headers = ['Numero', 'Zona', 'Tipologia', 'Ultima Restituzione', 'Giorni in Reparto'];
$rows = [];
foreach ($territories as $t) {
$rows[] = [
htmlspecialchars($t['numero']),
htmlspecialchars($t['zona']),
htmlspecialchars($t['tipologia']),
formatDate($t['last_returned_date']),
($t['days_in_depot'] ?? 'Mai assegnato')
];
}
$pdf->addTable($headers, $rows);
$pdf->output('Territori_Prioritari_' . date('Y-m-d'));
break;
case 'to_return':
// Territori da riconsegnare
$territories = $db->fetchAll("
SELECT
t.id,
t.numero,
t.zona,
t.tipologia,
a.assigned_to,
a.assigned_date,
DATEDIFF(CURDATE(), a.assigned_date) as days_assigned
FROM territories t
INNER JOIN assignments a ON t.id = a.territory_id
WHERE a.returned_date IS NULL
AND DATEDIFF(CURDATE(), a.assigned_date) >= ?
ORDER BY a.assigned_date ASC
", [$warning_days_return]);
$pdf->addTitle('Territori da Riconsegnare');
$pdf->addText('Territori assegnati da più di ' . $warning_days_return . ' giorni');
$pdf->addText('Totale: ' . count($territories) . ' territori');
$headers = ['Numero', 'Zona', 'Tipologia', 'Assegnato a', 'Data Assegnazione', 'Giorni'];
$rows = [];
foreach ($territories as $t) {
$rows[] = [
htmlspecialchars($t['numero']),
htmlspecialchars($t['zona']),
htmlspecialchars($t['tipologia']),
htmlspecialchars($t['assigned_to']),
formatDate($t['assigned_date']),
$t['days_assigned'] . ' giorni'
];
}
$pdf->addTable($headers, $rows);
$pdf->output('Territori_da_Riconsegnare_' . date('Y-m-d'));
break;
default:
die('Tipo di export non valido');
}