prepare("SELECT * FROM installations WHERE id = :id");
$stmt->bindParam(':id', $installation_id, PDO::PARAM_INT);
$stmt->execute();
$installation = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$installation) {
die("Instalação não encontrada.");
}
// 4. Buscar imagens da instalação
$img_stmt = $pdo->prepare("SELECT image_path FROM installation_images WHERE installation_id = :id ORDER BY id ASC");
$img_stmt->bindParam(':id', $installation_id, PDO::PARAM_INT);
$img_stmt->execute();
$images = $img_stmt->fetchAll(PDO::FETCH_ASSOC);
} catch (Exception $e) {
// Em caso de erro, envie um cabeçalho de erro e uma mensagem clara.
header("HTTP/1.1 500 Internal Server Error");
die("Erro no servidor: Não foi possível conectar ao banco de dados. Detalhe: " . $e->getMessage());
}
// --- Funções Auxiliares ---
function xml_escape($string) {
return htmlspecialchars($string, ENT_XML1, 'UTF-8');
}
// --- Preparar variáveis ---
$filename = "instalacao_" . $installation['id'] . ".doc";
// --- Geração do XML ---
$xml_template = '
%s
';
$xml_content = '';
// Título
$xml_content .= 'Relatório de Instalação';
// Função para criar linhas da tabela
function create_table_rows($data) {
$rows = '';
foreach ($data as $label => $value) {
$label = xml_escape($label);
$value = xml_escape($value);
$rows .= <<
{$label}
{$value}
XML;
}
return $rows;
}
// Tabela de Informações
$info_data = [
"ID da Instalação" => $installation['id'],
"Cliente" => $installation['client_name'],
"Endereço" => $installation['address'],
"Técnico" => $installation['technician_name'],
"Data" => date("d/m/Y H:i", strtotime($installation['created_at'])),
"Status" => ucfirst($installation['status'])
];
$xml_content .= '' . create_table_rows($info_data) . '';
// Tabela de Dados Elétricos
$electric_data = [
"Tensão (V)" => $installation['voltage'] ?? 'N/A',
"Fase-Neutro-Terra" => $installation['phase_neutral_ground'] ?? 'N/A',
"Saída do Disjuntor" => $installation['breaker_output'] ?? 'N/A'
];
$xml_content .= 'Dados Elétricos';
$xml_content .= '' . create_table_rows($electric_data) . '';
// Observações
$observations = xml_escape($installation['observations'] ?? 'Nenhuma observação.');
$xml_content .= 'Observações';
$xml_content .= "{$observations}";
// Imagens
if (!empty($images)) {
$xml_content .= '';
$xml_content .= 'Imagens da Instalação';
foreach ($images as $image) {
$image_path = __DIR__ . '/' . $image['image_path'];
if (file_exists($image_path)) {
$image_data = base64_encode(file_get_contents($image_path));
list($width_px, $height_px) = getimagesize($image_path);
$width_pt = $width_px * 0.75; // Convert pixels to points
$height_pt = $height_px * 0.75;
$max_width_pt = 450; // Largura máxima de aprox. 6 polegadas
if ($width_pt > $max_width_pt) {
$ratio = $max_width_pt / $width_pt;
$width_pt = $max_width_pt;
$height_pt = $height_pt * $ratio;
}
$shape_id = '_x0000_i' . substr(uniqid(), 5);
$image_rid = 'rId' . substr(uniqid(), 5);
$xml_content .= '
' . $image_data . '
';
}
}
}
// --- Enviar para o navegador ---
header("Content-Type: application/vnd.ms-word; charset=UTF-8");
header("Content-Disposition: attachment; filename=\"" . $filename . "\"");
echo sprintf($xml_template, $xml_content);
ob_end_flush();
?>