File "ReporteModel.php"

Full Path: C:/wamp64/www/AVIDOTAPP/models/ReporteModel.php
File size: 3.63 KB
MIME-type: text/x-php
Charset: utf-8

<?php
class ReporteModel {
    private $conexion;

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

    /**
     * Obtener registros de entregasst filtrados por rango de fechas
     * JOIN con reginventario para traer precio y con empleado para traer tpContrato
     */
    public function obtenerEntregasPorRangoFechas($fecha_inicio, $fecha_fin) {
        if (empty($fecha_inicio) || empty($fecha_fin)) {
            throw new Exception("Las fechas de inicio y fin son obligatorias");
        }

        $fecha_inicio = mysqli_real_escape_string($this->conexion, $fecha_inicio);
        $fecha_fin    = mysqli_real_escape_string($this->conexion, $fecha_fin);

        if (strtotime($fecha_inicio) > strtotime($fecha_fin)) {
            throw new Exception("La fecha de inicio no puede ser mayor que la fecha final");
        }

        $query = "SELECT 
                    e.cedula,
                    e.nombre,
                    e.ccosto,
                    e.area,
                    e.cargo,
                    e.fEntrega,
                    e.tpEstado,
                    e.codigo,
                    e.epp,
                    e.cantidad,
                    e.userEntrega,
                    e.tpEntrega,
                    COALESCE(
                        (SELECT i.precio FROM reginventario i WHERE i.CODIGO = e.codigo LIMIT 1),
                        ''
                    ) AS precio,
                    COALESCE(
                        (SELECT em.tpContrato FROM empleado em WHERE em.cedula = e.cedula LIMIT 1),
                        ''
                    ) AS tpContrato
                  FROM entregasst e
                  WHERE e.fEntrega BETWEEN '$fecha_inicio' AND '$fecha_fin'
                  ORDER BY e.fEntrega DESC, e.cedula ASC";

        $result = mysqli_query($this->conexion, $query);

        if (!$result) {
            throw new Exception("Error en la consulta: " . mysqli_error($this->conexion));
        }

        $registros = [];
        while ($row = mysqli_fetch_assoc($result)) {
            $registros[] = $row;
        }

        return $registros;
    }

    /**
     * Obtener estadísticas del rango de fechas
     */
    public function obtenerEstadisticas($fecha_inicio, $fecha_fin) {
        $fecha_inicio = mysqli_real_escape_string($this->conexion, $fecha_inicio);
        $fecha_fin    = mysqli_real_escape_string($this->conexion, $fecha_fin);

        $query = "SELECT 
                    COUNT(DISTINCT cedula) as total_empleados,
                    COUNT(*) as total_entregas,
                    SUM(cantidad) as total_items
                  FROM entregasst
                  WHERE fEntrega BETWEEN '$fecha_inicio' AND '$fecha_fin'";

        $result = mysqli_query($this->conexion, $query);

        if (!$result) {
            throw new Exception("Error al obtener estadísticas: " . mysqli_error($this->conexion));
        }

        return mysqli_fetch_assoc($result);
    }

    /**
     * Validar que existan registros en el rango de fechas
     */
    public function validarExistenciaRegistros($fecha_inicio, $fecha_fin) {
        $fecha_inicio = mysqli_real_escape_string($this->conexion, $fecha_inicio);
        $fecha_fin    = mysqli_real_escape_string($this->conexion, $fecha_fin);

        $query = "SELECT COUNT(*) as total 
                  FROM entregasst
                  WHERE fEntrega BETWEEN '$fecha_inicio' AND '$fecha_fin'";

        $result = mysqli_query($this->conexion, $query);

        if (!$result) {
            return false;
        }

        $row = mysqli_fetch_assoc($result);
        return ($row['total'] > 0);
    }
}
?>