File "ActaApp-20260419143021.php"

Full Path: C:/wamp64/www/Actas_Usuarios/models/ActaApp-20260419143021.php
File size: 3.67 KB
MIME-type: text/x-php
Charset: utf-8

<?php
// models/ActaApp.php

require_once __DIR__ . '/../config/db.php';

class ActaApp
{
    private $db;
    private $dbEmpleados;

    public function __construct()
    {
        $database          = new Database();
        $this->db          = $database->connect();

        $dbEmp             = new DatabaseEmpleados();
        $this->dbEmpleados = $dbEmp->connect();
    }

    public function buscarEmpleadoPorCedula($cedula)
    {
        $stmt = $this->dbEmpleados->prepare(
            "SELECT CONCAT(nombre, ' ', apellido) AS nombre_completo, cargo
             FROM empleados WHERE cedula = ? LIMIT 1"
        );
        if (!$stmt) return null;
        $stmt->bind_param('s', $cedula);
        $stmt->execute();
        $row = $stmt->get_result()->fetch_assoc();
        $stmt->close();
        return $row ?: null;
    }

    // $d['usuarios'] es un array de [{aplicacion, usuario, link}, ...]
    public function guardar($d)
    {
        // Guardamos los usuarios como JSON en la columna UsuariosJSON
        $usuarios_json = json_encode($d['usuarios'], JSON_UNESCAPED_UNICODE);

        // Para retrocompatibilidad guardamos el primero en columnas legacy
        $primero = $d['usuarios'][0] ?? [];

        $sql = "INSERT INTO ActaEntregaApp
                    (Nombre, Cedula, Cargo,
                     UsuarioApp, Aplicacion, Link,
                     UsuariosJSON,
                     DescripcionUsuario, Observaciones,
                     NombreEntrega, CargoEntrega,
                     FirmaEntregaBase64, FirmaRecibeBase64,
                     ActaHTML, IpCreacion)
                VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

        $stmt = $this->db->prepare($sql);
        if (!$stmt) throw new RuntimeException("Prepare error: " . $this->db->error);

        $usuario_0   = $primero['usuario']    ?? '';
        $aplicacion_0= $primero['aplicacion'] ?? '';
        $link_0      = $primero['link']       ?? '';

        $stmt->bind_param('sssssssssssssss',
            $d['nombre'], $d['cedula'], $d['cargo'],
            $usuario_0, $aplicacion_0, $link_0,
            $usuarios_json,
            $d['descripcion'], $d['observaciones'],
            $d['nombre_entrega'], $d['cargo_entrega'],
            $d['firma_entrega'], $d['firma_recibe'],
            $d['acta_html'], $d['ip']
        );

        $stmt->execute();
        $id = (int) $this->db->insert_id;
        $stmt->close();
        return $id;
    }

    public function listar()
    {
        $sql = "SELECT IdActa, FechaCreacion, Nombre, Cedula,
                       Cargo, UsuarioApp, Aplicacion, UsuariosJSON,
                       NombreEntrega, CargoEntrega
                FROM ActaEntregaApp
                ORDER BY FechaCreacion DESC";

        $result = $this->db->query($sql);
        if (!$result) throw new RuntimeException("Query error: " . $this->db->error);

        $rows = [];
        while ($row = $result->fetch_assoc()) $rows[] = $row;
        $result->free();
        return $rows;
    }

    public function obtenerPorId($id)
    {
        $stmt = $this->db->prepare(
            "SELECT IdActa, ActaHTML, Nombre, FechaCreacion
             FROM ActaEntregaApp WHERE IdActa = ? LIMIT 1"
        );
        $stmt->bind_param('i', $id);
        $stmt->execute();
        $row = $stmt->get_result()->fetch_assoc();
        $stmt->close();
        return $row ?: null;
    }

    public function listarApps()
    {
        $result = $this->db->query("SELECT id, app, link FROM apps ORDER BY app ASC");
        if (!$result) throw new RuntimeException("Query error: " . $this->db->error);

        $rows = [];
        while ($row = $result->fetch_assoc()) $rows[] = $row;
        $result->free();
        return $rows;
    }
}