D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
var
/
www
/
html
/
novonote
/
adm
/
app
/
gre
/
Views
/
Contrato
/
Filename :
VieImpContrato_3.php
back
Copy
<?php require_once($_SERVER['DOCUMENT_ROOT'] . '/novonote/adm/vendor/autoload.php'); use PhpOffice\PhpWord\TemplateProcessor; //var_dump(SOFFIDEPATH); //var_dump($_SERVER['DOCUMENT_ROOT']); //die; // Dados principais $formData = $this->Dados['form'][0]; $itens = $this->Dados['dadosItens']; //var_dump( $this->Dados['dadosItens']); //die; $tipo_id = $formData['tipo_id']; $opcao_compra = $formData['opcao_compra']; $num_contrato = $formData['numero_contrato']; // Sanitiza nome do contratante para uso em nome de arquivo $contratante = iconv('UTF-8', 'ASCII//TRANSLIT', $formData['nome_contratante']); $contratante = preg_replace('/[^A-Za-z0-9]/', '_', $contratante); // Caminho do modelo function caminhoContratoModelo($tipo_id, $opcao_compra) { return realpath(__DIR__ . '/../../../../ContratosNovonote/ContratoJuridica.docx'); } // Diretório de saída $destinoDir = __DIR__ . '/../../../../ContratoImpresso/impContrato'; if (!is_dir($destinoDir)) { mkdir($destinoDir, 0777, true); } // Caminhos dos arquivos $saidaDocx = "$destinoDir/{$num_contrato}_{$contratante}.docx"; $saidaPdf = "$destinoDir/{$num_contrato}_{$contratante}.pdf"; // Dados do contrato $dadosContrato = [ 'numero_contrato' => $formData['numero_contrato'], 'nome_contratante' => $formData['nome_contratante'], 'endereco_contratante' => $formData['endereco_contratante'], 'tipo_documento' => $formData['tipo_docto'], 'num_documento' => $formData['tipo_docto'] === 'CNPJ' ? $formData['cnpj'] : $formData['cpf'], 'prazo_contrato' => $formData['prazo_contrato'], 'data_vigencia' => $formData['data_inicio_completa'], 'local_entrega' => $formData['local_entrega'], 'valor_contrato' => $formData['valor_contratof'], 'valor_extenso' => $formData['valor_extenso'], 'dia_pagamento' => $formData['dia_pagto'], 'data_inicio_completa' => $formData['data_inicio_completa'] ]; try { // Carrega o modelo $modeloContrato = caminhoContratoModelo($tipo_id, $opcao_compra); if (!$modeloContrato || !file_exists($modeloContrato)) { throw new Exception("Modelo de contrato não encontrado em: " . caminhoContratoModelo($tipo_id, $opcao_compra)); } $template = new TemplateProcessor($modeloContrato); // Verifica se o marcador 'num' existe no modelo $variaveis = $template->getVariables(); if (!in_array('num', $variaveis)) { throw new Exception("O marcador '${num}' não foi encontrado no modelo. Verifique se está escrito exatamente como '${num}' e sem formatação."); } // Preenche os campos do contrato foreach ($dadosContrato as $chave => $valor) { $template->setValue($chave, $valor); } // Prepara os dados dos itens $dadosItens = []; foreach ($itens as $i => $item) { $dadosItens[] = [ 'num' => $i + 1, 'descricao' => $item['descricao'], 'quantidade' => $item['quantidade'], 'valor_unitario' => number_format((float)str_replace(',', '.', $item['valor_unitario']), 2, ',', '.'), 'valor_total' => number_format((float)str_replace(',', '.', $item['valor_total']), 2, ',', '.') ]; } // Clona a linha da tabela para cada item $template->cloneRowAndSetValues('num', $dadosItens); // Salva o contrato preenchido $template->saveAs($saidaDocx); // Verifica se o DOCX foi gerado if (!file_exists($saidaDocx)) { throw new Exception("Falha ao salvar o arquivo DOCX em: $saidaDocx"); } // Converte para PDF no Windows // $sofficePath = '"C:\\Program Files\\LibreOffice\\program\\soffice.exe"'; $sofficePath = '"'.SOFFIDEPATH.'"'; $cmd = $sofficePath . ' --headless --convert-to pdf --outdir "' . $destinoDir . '" "' . $saidaDocx . '"'; exec($cmd, $output, $resultCode); if ($resultCode !== 0 || !file_exists($saidaPdf)) { throw new Exception("Falha na conversão para PDF. Código de erro: $resultCode"); } // Link para download automático $urlPdfFinal = URLADM.'ContratoImpresso/impContrato/' . basename($saidaPdf); echo "<script> window.onload = function() { const link = document.createElement('a'); link.href = '$urlPdfFinal'; link.download = 'contrato_completo.pdf'; document.body.appendChild(link); link.click(); document.body.removeChild(link); }; </script>"; $_SESSION['msg'] = "<div class='alert alert-success alert-dismissible fade show' role='alert'> Contrato emitido com sucesso! <button type='button' class='btn-close' data-bs-dismiss='alert' aria-label='Close'></button> </div>"; header("Location: " . URLADM . 'contrato/listar'); } catch (Exception $e) { echo "❌ Erro: " . $e->getMessage(); }