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']) : [];
}
}
?>