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>