Current File : /var/www/pharmacius/model/productos_model.php
<?php
class Productos_model
{
    private $db;
    private $datos;

    public function __construct()
    {
        require_once("model/conectar.php"); 
        $this->db = Conectar::conexion(); 
        $this->datos = array();
    }

    public function get_productos()
    {
        $sql = "SELECT p.*, 
                       GROUP_CONCAT(c.NombreCategoria SEPARATOR ', ') AS categorias, 
                       m.NombreMarca
                FROM productos p
                LEFT JOIN categoria c ON FIND_IN_SET(c.IDCategoria, p.IDCategoria) > 0
                LEFT JOIN marca m ON p.IDMarca = m.IDMarca
                GROUP BY p.IDProducto";
        $consulta = $this->db->query($sql);
        while ($registro = $consulta->fetch_assoc()) {
            $this->datos[] = $registro;
        }
        return $this->datos;
    }

    public function eliminar_producto($IDProducto)
    {
        //var_dump($_POST["IDProducto"]); exit();
        if (empty($IDProducto) || !is_numeric($IDProducto)) return false;
        $sql = "DELETE FROM productos WHERE IDProducto = ?";
        try {
            $stmt = $this->db->prepare($sql);
            if ($stmt === false) throw new Exception("Error al preparar la consulta SQL");
            $stmt->bind_param("i", $IDProducto);
            $stmt->execute();
            return $stmt->affected_rows > 0;
        } catch (Exception $e) {
            error_log("Error al eliminar producto: " . $e->getMessage());
            return false;
        }
        

    }

    public function get_producto($IDProducto)
    {
        $sql = "SELECT * FROM productos WHERE IDProducto = ?";
        $stmt = $this->db->prepare($sql);
        $stmt->bind_param("i", $IDProducto);
        $stmt->execute();
        $resultado = $stmt->get_result();
        return $resultado->fetch_assoc();
    }

    public function actualizar_producto($IDProducto, $datos)
    {
        if (empty($IDProducto) || !is_numeric($IDProducto) || empty($datos)) return false;

        $sql = "UPDATE productos SET
                    Referencia = ?, 
                    Nombre = ?, 
                    Enlace = ?, 
                    EAN13 = ?, 
                    PrecioSinImpuestos = ?, 
                    PrecioConImpuestos = ?, 
                    PrecioMayorista = ?, 
                    IDFiscal = ?,
                    NombreFiscal = ?, 
                    IDCategoria = ?, 
                    IDMarca = ?, 
                    Peso = ?, 
                    URLImagen = ?
                WHERE IDProducto = ?";

        try {
            $stmt = $this->db->prepare($sql);
            if ($stmt === false) throw new Exception("Error al preparar la consulta SQL");
            $stmt->bind_param("sssssssssssssi", 
                $datos['Referencia'], 
                $datos['Nombre'], 
                $datos['Enlace'], 
                $datos['EAN13'], 
                $datos['PrecioSinImpuestos'], 
                $datos['PrecioConImpuestos'], 
                $datos['PrecioMayorista'], 
                $datos['IDFiscal'],
                $datos['NombreFiscal'],
                $datos['IDCategoria'], 
                $datos['IDMarca'], 
                $datos['Peso'], 
                $datos['URLImagen'], 
                $IDProducto
            );
            $stmt->execute();
            return $stmt->affected_rows > 0;
        } catch (Exception $e) {
            error_log("Error al actualizar producto: " . $e->getMessage());
            return false;
        }
    }

    public function insertar_producto($datos)
{
    // Verificar si el ID ya existe
    if ($this->existe_id($datos['IDProducto'])) {
        throw new Exception("Ya existe un producto con ese ID.");
    }

    $sql = "INSERT INTO productos (
        IDProducto, Referencia, Nombre, Enlace, EAN13, 
        PrecioSinImpuestos, PrecioConImpuestos, PrecioMayorista,
        IDFiscal, NombreFiscal, IDCategoria, IDMarca, Peso, URLImagen
    ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

    try {
        $stmt = $this->db->prepare($sql);
        if ($stmt === false) throw new Exception("Error al preparar la consulta SQL");

        $stmt->bind_param("isssssssssssss",
            $datos['IDProducto'],
            $datos['Referencia'], 
            $datos['Nombre'], 
            $datos['Enlace'], 
            $datos['EAN13'], 
            $datos['PrecioSinImpuestos'], 
            $datos['PrecioConImpuestos'], 
            $datos['PrecioMayorista'], 
            $datos['IDFiscal'],
            $datos['NombreFiscal'], 
            $datos['IDCategoria'], 
            $datos['IDMarca'], 
            $datos['Peso'], 
            $datos['URLImagen']
        );

        return $stmt->execute();
    } catch (Exception $e) {
        error_log("Error al insertar producto: " . $e->getMessage());
        error_log("MySQL error: " . $this->db->error);
        echo "<pre>Error: " . $e->getMessage() . "\nMySQL: " . $this->db->error . "</pre>";
        return false;
    }
}


    public function actualizar_producto_con_id($IDAnterior, $datos)
    {
        $categoriasComoTexto = is_array($datos['Categorias']) ? implode(',', $datos['Categorias']) : '';

        $sql = "UPDATE productos SET
                    IDProducto = ?, 
                    Referencia = ?, 
                    Nombre = ?, 
                    Enlace = ?, 
                    EAN13 = ?, 
                    PrecioSinImpuestos = ?, 
                    PrecioConImpuestos = ?, 
                    PrecioMayorista = ?, 
                    IDFiscal = ?, 
                    NombreFiscal = ?,
                    IDCategoria = ?, 
                    IDMarca = ?, 
                    Peso = ?, 
                    URLImagen = ?
                WHERE IDProducto = ?";

        try {
            $stmt = $this->db->prepare($sql);
            if ($stmt === false) throw new Exception("Error al preparar la consulta SQL");
            $stmt->bind_param("isssssssssssssi",
                $datos['IDProducto'],
                $datos['Referencia'],
                $datos['Nombre'],
                $datos['Enlace'],
                $datos['EAN13'],
                $datos['PrecioSinImpuestos'],
                $datos['PrecioConImpuestos'],
                $datos['PrecioMayorista'],
                $datos['IDFiscal'],
                $datos['NombreFiscal'],
                $categoriasComoTexto,
                $datos['IDMarca'],
                $datos['Peso'],
                $datos['URLImagen'],
                $IDAnterior
            );
            return $stmt->execute();
        } catch (Exception $e) {
            error_log("Error al actualizar producto con ID: " . $e->getMessage());
            return false;
        }
    }

    public function existe_id($IDProducto)
    {
        $sql = "SELECT IDProducto FROM productos WHERE IDProducto = ?";
        $stmt = $this->db->prepare($sql);
        $stmt->bind_param("i", $IDProducto);
        $stmt->execute();
        $result = $stmt->get_result();
        return $result->num_rows > 0;
    }

    public function get_categorias()
    {
        $sql = "SELECT IDCategoria, NombreCategoria FROM categoria";
        $result = $this->db->query($sql);
        $categorias = [];
        while ($row = $result->fetch_assoc()) {
            $categorias[] = $row;
        }
        return $categorias;
    }

    public function get_categorias_de_producto($IDProducto)
    {
        $sql = "SELECT IDCategoria FROM productos WHERE IDProducto = ?";
        $stmt = $this->db->prepare($sql);
        $stmt->bind_param("i", $IDProducto);
        $stmt->execute();
        $result = $stmt->get_result();
        $row = $result->fetch_assoc();
        return isset($row['IDCategoria']) ? explode(',', $row['IDCategoria']) : [];
    }
}
?>