File "FirmaController.php"
Full Path: C:/wamp64/www/AVIDOTAPP/controllers/FirmaController.php
File size: 11.97 KB
MIME-type: text/x-php
Charset: utf-8
<?php
class FirmaController {
private $modelo;
public function __construct() {
require_once 'models/FirmaModel.php';
$this->modelo = new FirmaModel();
}
// ─────────────────────────────────────────────────────────────
// HISTORIAL - ENTREFIRMA (búsqueda y listado)
// URL: index.php?controller=Firma&action=index
// ─────────────────────────────────────────────────────────────
public function index() {
$this->verificarSesion();
$cedula_busqueda = trim($_GET['cedula'] ?? '');
$resultados = [];
$entregas_agrupadas = [];
if (!empty($cedula_busqueda)) {
try {
$data = $this->modelo->obtenerHistorialPorCedula($cedula_busqueda);
$resultados = $data['plano'];
$entregas_agrupadas = $data['agrupado'];
} catch (Exception $e) {
$error = $e->getMessage();
}
}
include 'views/firmadot/historial.php';
}
// ─────────────────────────────────────────────────────────────
// FORMULARIO DE ENTREGA / FIRMA - FORMFIRM
// URL: index.php?controller=Firma&action=formulario&cedula=X&fecha=Y&modo=firma
// ─────────────────────────────────────────────────────────────
public function formulario() {
$this->verificarSesion();
$cedula = trim($_GET['cedula'] ?? '');
$fecha_consulta = trim($_GET['fecha'] ?? date('Y-m-d'));
$modo_firma = isset($_GET['modo']) && $_GET['modo'] === 'firma';
if (empty($cedula)) {
echo "<div style='text-align:center;margin-top:50px;'>
<h2>No se proporcionó la cédula del empleado</h2>
<a href='index.php?controller=Firma&action=index' class='btn btn-primary'>Volver</a>
</div>";
return;
}
// Si hay PDF, redirigir al visor
if ($this->modelo->tienePDF($cedula, $fecha_consulta)) {
header("Location: index.php?controller=Firma&action=verPDF&cedula=" . urlencode($cedula) . "&fecha=" . urlencode($fecha_consulta));
exit();
}
// Datos generales
$primera_entrega = $this->modelo->obtenerPrimeraEntregaDia($cedula, $fecha_consulta);
if (!$primera_entrega) {
echo "<div style='text-align:center;margin-top:50px;'>
<h2>No se encontraron entregas para la fecha seleccionada</h2>
<a href='index.php?controller=Firma&action=index' class='btn btn-primary'>Volver</a>
</div>";
return;
}
$nombre = $primera_entrega['nombre'];
$operario = $this->modelo->obtenerOperario($cedula);
$cargo = $operario['cargo'] ?? 'No especificado';
// Elementos del día con tallas
$dataDia = $this->modelo->obtenerElementosDia($cedula, $fecha_consulta);
$elementos = $dataDia['elementos'];
$hay_firma = $dataDia['hay_firma'];
$hay_pdf = $dataDia['hay_pdf'];
$firma_imagen = $dataDia['firma_img'];
// Datos de fecha para el documento
$FECHAD = date("d");
$FECHAM = date("m");
$FECHAY = date("Y");
include 'views/firmadot/formulario_firma.php';
}
// ─────────────────────────────────────────────────────────────
// GUARDAR FIRMA (por fecha)
// POST AJAX → index.php?controller=Firma&action=guardarFirmaFecha
// ─────────────────────────────────────────────────────────────
public function guardarFirmaFecha() {
header('Content-Type: application/json');
$this->verificarSesion();
$cedula = $_POST['cedula'] ?? '';
$fecha = $_POST['fecha'] ?? '';
$firmaData = $_POST['firma'] ?? '';
if (empty($cedula) || empty($fecha) || empty($firmaData)) {
echo json_encode(['success' => false, 'message' => 'Datos incompletos']);
exit();
}
try {
$filas = $this->modelo->guardarFirmaFecha($cedula, $fecha, $firmaData);
if ($filas > 0) {
echo json_encode([
'success' => true,
'message' => "Firma guardada correctamente. Se actualizaron $filas registros."
]);
} else {
echo json_encode(['success' => false, 'message' => 'No se encontraron registros para actualizar']);
}
} catch (Exception $e) {
echo json_encode(['success' => false, 'message' => 'Error: ' . $e->getMessage()]);
}
exit();
}
// ─────────────────────────────────────────────────────────────
// GUARDAR FIRMA (individual por ID)
// POST AJAX → index.php?controller=Firma&action=guardarFirma
// ─────────────────────────────────────────────────────────────
public function guardarFirma() {
header('Content-Type: application/json');
$this->verificarSesion();
$id = $_POST['id'] ?? '';
$cedula = $_POST['cedula'] ?? '';
$firmaData = $_POST['firma'] ?? '';
if (empty($id) || empty($cedula) || empty($firmaData)) {
echo json_encode(['success' => false, 'message' => 'Datos incompletos']);
exit();
}
if (!preg_match('/^data:image\/(png|jpeg);base64,/', $firmaData)) {
echo json_encode(['success' => false, 'message' => 'Formato de firma no válido']);
exit();
}
try {
$ok = $this->modelo->guardarFirmaIndividual($id, $cedula, $firmaData);
if ($ok) {
echo json_encode([
'success' => true,
'message' => 'Firma guardada correctamente',
'redirect' => 'index.php?controller=Firma&action=formulario&cedula=' . urlencode($cedula)
]);
} else {
echo json_encode(['success' => false, 'message' => 'No se pudo guardar la firma']);
}
} catch (Exception $e) {
echo json_encode(['success' => false, 'message' => $e->getMessage()]);
}
exit();
}
// ─────────────────────────────────────────────────────────────
// GUARDAR PDF
// POST AJAX → index.php?controller=Firma&action=guardarPDF
// ─────────────────────────────────────────────────────────────
public function guardarPDF() {
header('Content-Type: application/json');
$this->verificarSesion();
$cedula = $_POST['cedula'] ?? '';
$fecha = $_POST['fecha'] ?? '';
if (empty($cedula) || empty($fecha) || !isset($_FILES['archivoPDF'])) {
echo json_encode(['success' => false, 'message' => 'Datos incompletos']);
exit();
}
$archivo = $_FILES['archivoPDF'];
if ($archivo['error'] !== UPLOAD_ERR_OK) {
echo json_encode(['success' => false, 'message' => 'Error al subir el archivo']);
exit();
}
if ($archivo['type'] !== 'application/pdf') {
echo json_encode(['success' => false, 'message' => 'Solo se permiten archivos PDF']);
exit();
}
if ($archivo['size'] > 5 * 1024 * 1024) {
echo json_encode(['success' => false, 'message' => 'El archivo supera el límite de 5MB']);
exit();
}
try {
$pdfData = file_get_contents($archivo['tmp_name']);
if ($pdfData === false) throw new Exception('No se pudo leer el archivo');
$filas = $this->modelo->guardarPDF($cedula, $fecha, $pdfData);
if ($filas > 0) {
echo json_encode([
'success' => true,
'message' => "PDF guardado correctamente. Se actualizaron $filas registros."
]);
} else {
echo json_encode(['success' => false, 'message' => 'No se encontraron registros para actualizar']);
}
} catch (Exception $e) {
echo json_encode(['success' => false, 'message' => $e->getMessage()]);
}
exit();
}
// ─────────────────────────────────────────────────────────────
// VER PDF
// GET → index.php?controller=Firma&action=verPDF&cedula=X&fecha=Y
// ─────────────────────────────────────────────────────────────
public function verPDF() {
$cedula = $_GET['cedula'] ?? '';
$fecha = $_GET['fecha'] ?? '';
if (empty($cedula) || empty($fecha)) {
die('Parámetros faltantes');
}
$pdfData = $this->modelo->obtenerPDF($cedula, $fecha);
if ($pdfData) {
header('Content-Type: application/pdf');
header('Content-Disposition: inline; filename="entrega_' . $cedula . '_' . $fecha . '.pdf"');
header('Cache-Control: private, max-age=0, must-revalidate');
echo $pdfData;
} else {
die('PDF no encontrado');
}
exit();
}
// ─────────────────────────────────────────────────────────────
// EXPORTAR PDF (vista imprimible con firmas)
// GET → index.php?controller=Firma&action=exportarPDF&cedula=X
// ─────────────────────────────────────────────────────────────
public function exportarPDF() {
$this->verificarSesion();
$cedula_busqueda = trim($_GET['cedula'] ?? '');
if (empty($cedula_busqueda)) {
die('Error: No se especificó la cédula del empleado.');
}
$stmt = $this->modelo->exportarRegistros($cedula_busqueda);
if (empty($stmt)) {
die('Error: No se encontraron entregas para esta cédula.');
}
$resultados = $stmt;
$primer_registro = $resultados[0];
include 'views/firmadot/exportar_pdf.php';
}
// ─────────────────────────────────────────────────────────────
private function verificarSesion() {
if (!isset($_SESSION['DIGITA']) || empty($_SESSION['DIGITA'])) {
header('Location: index.php');
exit();
}
}
}
?>