Current File : /var/www/pharmacius/editar.php |
<?php
require_once("menu.php");
require_once("model/productos_model.php");
if (!isset($_GET['IDProducto']) || !is_numeric($_GET['IDProducto'])) {
die("ID de producto inválido.");
}
$productoModel = new Productos_model();
$producto = $productoModel->get_producto($_GET['IDProducto']);
$categoriasDisponibles = $productoModel->get_categorias();
$categoriasSeleccionadas = $productoModel->get_categorias_de_producto($_GET['IDProducto']);
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['Categorias'])) {
$categoriasSeleccionadas = $_POST['Categorias'];
}
if (!$producto) {
die("Producto no encontrado.");
}
$mensaje = '';
$tipoMensaje = '';
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$IDAnterior = $_GET['IDProducto'];
$nuevoID = $_POST['IDProducto'] ?? $IDAnterior;
$datosActualizados = [
'IDProducto' => $nuevoID,
'Referencia' => $_POST['Referencia'],
'Nombre' => $_POST['Nombre'],
'Enlace' => $_POST['Enlace'],
'EAN13' => $_POST['EAN13'],
'PrecioSinImpuestos' => $_POST['PrecioSinImpuestos'],
'PrecioConImpuestos' => $_POST['PrecioConImpuestos'],
'PrecioMayorista' => $_POST['PrecioMayorista'],
'IDFiscal' => $_POST['IDFiscal'],
'NombreFiscal' => $_POST['NombreFiscal'],
'IDMarca' => $_POST['IDMarca'],
'Peso' => $_POST['Peso'],
'URLImagen' => $_POST['URLImagen'],
'Categorias' => $_POST['Categorias'] ?? []
];
if ($nuevoID != $IDAnterior && $productoModel->existe_id($nuevoID)) {
$mensaje = "Error: El nuevo ID de producto ya existe.";
$tipoMensaje = "danger";
} else {
if ($productoModel->actualizar_producto_con_id($IDAnterior, $datosActualizados)) {
$_SESSION['message'] = "Producto actualizado correctamente";
header("Location: index.php?controlador=productos&action=home");
exit();
} else {
$mensaje = "Error al actualizar el producto.";
$tipoMensaje = "danger";
}
}
}
?>
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Editar Producto</title>
<link rel="stylesheet" href="css/editarCss.css">
<link rel="stylesheet" href="css/styles.css">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons/font/bootstrap-icons.css" rel="stylesheet">
</head>
<body class="m-0 p-0">
<div class="container py-4">
<h2 class="mb-4">Editar Producto</h2>
<?php if ($mensaje): ?>
<div class="alert alert-<?= $tipoMensaje ?>"><?= $mensaje ?></div>
<?php endif; ?>
<div class="d-flex justify-content-center">
<form method="POST" class="row g-3" style="max-width: 900px; width: 100%;">
<div class="col-md-4">
<label>ID Producto:</label>
<input type="number" name="IDProducto" class="form-control" required value="<?= htmlspecialchars($producto['IDProducto']) ?>">
</div>
<div class="col-md-4">
<label>Referencia:</label>
<input type="text" name="Referencia" class="form-control" value="<?= htmlspecialchars($producto['Referencia']) ?>" required>
</div>
<div class="col-md-4">
<label>Nombre:</label>
<input type="text" name="Nombre" class="form-control" value="<?= htmlspecialchars($producto['Nombre']) ?>" required>
</div>
<div class="col-md-6">
<label>Enlace:</label>
<input type="url" name="Enlace" class="form-control" value="<?= htmlspecialchars($producto['Enlace']) ?>">
</div>
<div class="col-md-6">
<label>EAN13:</label>
<input type="text" name="EAN13" class="form-control" value="<?= htmlspecialchars($producto['EAN13']) ?>">
</div>
<div class="col-md-4">
<label>Precio Sin Impuestos:</label>
<input type="number" step="0.01" name="PrecioSinImpuestos" class="form-control" value="<?= htmlspecialchars($producto['PrecioSinImpuestos']) ?>" required>
</div>
<div class="col-md-4">
<label>Precio Con Impuestos:</label>
<input type="number" step="0.01" name="PrecioConImpuestos" class="form-control" value="<?= htmlspecialchars($producto['PrecioConImpuestos']) ?>" required>
</div>
<div class="col-md-4">
<label>Precio Mayorista:</label>
<input type="number" step="0.01" name="PrecioMayorista" class="form-control" value="<?= htmlspecialchars($producto['PrecioMayorista']) ?>" required>
</div>
<div class="col-md-6">
<label>ID Fiscal:</label>
<select id="idfiscal" name="IDFiscal" class="form-select">
<option value="0" <?= $producto['IDFiscal'] == '0' ? 'selected' : '' ?>>0</option>
<option value="1" <?= $producto['IDFiscal'] == '1' ? 'selected' : '' ?>>1 - ES Standard rate (21%)</option>
<option value="2" <?= $producto['IDFiscal'] == '2' ? 'selected' : '' ?>>2 - ES Reduced Rate (10%)</option>
<option value="3" <?= $producto['IDFiscal'] == '3' ? 'selected' : '' ?>>3 - ES Super Reduced Rate (4%)</option>
</select>
</div>
<div class="col-md-6">
<label>Nombre Fiscal:</label>
<select id="nombrefiscal" name="NombreFiscal" class="form-select">
<option value="0" <?= $producto['NombreFiscal'] == '0' ? 'selected' : '' ?>>0</option>
<option value="ES Standard rate (21%)" <?= $producto['NombreFiscal'] == 'ES Standard rate (21%)' ? 'selected' : '' ?>>ES Standard rate (21%)</option>
<option value="ES Reduced Rate (10%)" <?= $producto['NombreFiscal'] == 'ES Reduced Rate (10%)' ? 'selected' : '' ?>>ES Reduced Rate (10%)</option>
<option value="ES Super Reduced Rate (4%)" <?= $producto['NombreFiscal'] == 'ES Super Reduced Rate (4%)' ? 'selected' : '' ?>>ES Super Reduced Rate (4%)</option>
</select>
</div>
<div class="col-md-4">
<label>ID Marca:</label>
<input type="text" name="IDMarca" class="form-control" value="<?= htmlspecialchars($producto['IDMarca']) ?>">
</div>
<div class="col-md-4">
<label>Peso:</label>
<input type="number" step="0.01" name="Peso" class="form-control" value="<?= htmlspecialchars($producto['Peso']) ?>">
</div>
<div class="col-12">
<label>Imagen URL:</label>
<input type="text" name="URLImagen" class="form-control" value="<?= htmlspecialchars($producto['URLImagen']) ?>">
</div>
<div class="col-12">
<label>Categorías:</label>
<input type="text" id="buscadorCategoria" list="listaCategorias" class="form-control mb-2" placeholder="Buscar y seleccionar categoría...">
<datalist id="listaCategorias">
<?php foreach ($categoriasDisponibles as $cat): ?>
<option data-id="<?= htmlspecialchars($cat['IDCategoria']) ?>" value="<?= htmlspecialchars($cat['NombreCategoria']) ?>"></option>
<?php endforeach; ?>
</datalist>
<select id="categoriasSelect" name="Categorias[]" class="form-select" multiple size="6">
<?php foreach ($categoriasDisponibles as $cat): ?>
<?php $id = (string) $cat['IDCategoria']; ?>
<option value="<?= $id ?>" <?= in_array($id, array_map('strval', $categoriasSeleccionadas)) ? 'selected' : '' ?>>
<?= htmlspecialchars($cat['NombreCategoria']) ?>
</option>
<?php endforeach; ?>
</select>
<small class="text-muted">Mantén pulsada la tecla Ctrl (o Cmd en Mac) para seleccionar varias categorías</small>
</div>
<div class="col-12 text-center mt-4">
<button type="submit" class="btn btn-success me-3">
<i class="bi bi-check-circle"></i> Guardar Cambios
</button>
<a href="index.php?controlador=productos&action=home" class="btn btn-secondary">
<i class="bi bi-arrow-left-circle"></i> Cancelar
</a>
</div>
</form>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
const idToName = {
"0": "0",
"1": "ES Standard rate (21%)",
"2": "ES Reduced Rate (10%)",
"3": "ES Super Reduced Rate (4%)"
};
const nameToId = {
"0": "0",
"ES Standard rate (21%)": "1",
"ES Reduced Rate (10%)": "2",
"ES Super Reduced Rate (4%)": "3"
};
const idFiscalSelect = document.getElementById("idfiscal");
const nombreFiscalSelect = document.getElementById("nombrefiscal");
idFiscalSelect.addEventListener("change", function () {
const selectedId = this.value;
nombreFiscalSelect.value = idToName[selectedId] || "0";
});
nombreFiscalSelect.addEventListener("change", function () {
const selectedName = this.value;
idFiscalSelect.value = nameToId[selectedName] || "0";
});
document.getElementById('buscadorCategoria').addEventListener('change', function () {
const input = this.value.trim();
const datalist = document.getElementById('listaCategorias');
const select = document.getElementById('categoriasSelect');
for (const option of datalist.options) {
if (option.value === input) {
const id = option.dataset.id;
for (const opt of select.options) {
if (opt.value === id) {
opt.selected = true;
break;
}
}
this.value = '';
break;
}
}
});
</script>
</body>
</html>