Current File : //var/www/pharmacius/view/pedido_form_view.php
<?php
session_start();
require_once("menu.php");

$esEdicion = isset($pedido);
$action = $esEdicion ? "editar&IDPedido={$pedido['IDPedido']}" : "insertar";
$titulo = $esEdicion ? "Editar Pedido #{$pedido['IDPedido']}" : "Nuevo Pedido";

// Obtener todos los productos
require_once("model/productos_model.php");
$productos_model = new Productos_model();
$productos = $productos_model->get_productos();
?>

<div class="container mt-5">
    <h2 class="text-center mb-4"><?= $titulo ?></h2>

    <?php if (!empty($mensaje)): ?>
        <div class="modal fade" id="mensajeModal" tabindex="-1" aria-labelledby="mensajeModalLabel" aria-hidden="true">
            <div class="modal-dialog modal-dialog-centered">
                <div class="modal-content border-danger">
                    <div class="modal-header bg-danger text-white">
                        <h5 class="modal-title" id="mensajeModalLabel">Error</h5>
                        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Cerrar"></button>
                    </div>
                    <div class="modal-body text-center">
                        <?= htmlspecialchars($mensaje) ?>
                    </div>
                    <div class="modal-footer">
                        <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cerrar</button>
                    </div>
                </div>
            </div>
        </div>
        <script>
            document.addEventListener("DOMContentLoaded", () => {
                new bootstrap.Modal(document.getElementById('mensajeModal')).show();
            });
        </script>
    <?php endif; ?>

    <form method="post" action="index.php?controlador=pedidos&action=<?= $action ?>">

        <div class="mb-3">
            <label for="IDPedido" class="form-label">Número de Pedido</label>
            <input type="number" name="IDPedido" id="IDPedido" class="form-control" required
                   value="<?= $pedido['IDPedido'] ?? '' ?>">
        </div>

        <div class="mb-3">
            <label for="Estado">Estado</label>
            <select name="Estado" id="Estado" class="form-control" required>
                <option value="Creado" <?= ($pedido['Estado'] ?? '') === 'Creado' ? 'selected' : '' ?>>Creado</option>
                <option value="En proceso" <?= ($pedido['Estado'] ?? '') === 'En proceso' ? 'selected' : '' ?>>En proceso</option>
                <option value="Listo" <?= ($pedido['Estado'] ?? '') === 'Listo' ? 'selected' : '' ?>>Listo</option>
            </select>
        </div>

        <div class="mb-3">
            <label for="ProductosFaltantes" class="form-label">Productos faltantes</label>
            <textarea class="form-control" id="ProductosFaltantes" name="ProductosFaltantes" rows="1"><?= $pedido['ProductosFaltantes'] ?? '' ?></textarea>
        </div>

        <div class="mb-3">
            <label for="Observaciones" class="form-label">Observaciones</label>
            <textarea class="form-control" id="Observaciones" name="Observaciones" rows="1"><?= $pedido['Observaciones'] ?? '' ?></textarea>
        </div>

        <div class="mb-3">
            <label for="Incidencias" class="form-label">Incidencias</label>
            <textarea class="form-control" id="Incidencias" name="Incidencias" rows="1"><?= $pedido['Incidencias'] ?? '' ?></textarea>
        </div>

        <div class="mb-3">
            <label for="Seguimiento" class="form-label">Clientes</label>
            <textarea class="form-control" id="Seguimiento" name="Seguimiento" rows="6"><?= $pedido['Seguimiento'] ?? '' ?></textarea>
        </div>

        <hr>
        <h5 class="mb-3">Productos del Pedido</h5>
        <div id="productos-container"></div>
        <button type="button" class="btn btn-secondary mb-3" onclick="agregarProducto()">+ Añadir producto</button>

        <div class="text-center pb-5">
            <button type="submit" class="btn btn-success">
                <i class="bi bi-check-circle"></i> Guardar
            </button>
            <a href="index.php?controlador=pedidos&action=home" class="btn btn-secondary ms-2">
                <i class="bi bi-arrow-left-circle"></i> Cancelar
            </a>
        </div>
    </form>
</div>

<script>
    const productosDisponibles = <?= json_encode($productos) ?>;
    const productosExistentes = <?= json_encode($pedido['productos_asociados'] ?? []) ?>;

    function agregarProducto(id = '', cantidad = '', referencia = '', nota = '', recepcionado = 0) {
    const container = document.getElementById('productos-container');
    const index = container.children.length;

    const row = document.createElement('div');
    row.className = 'row align-items-end mb-3 producto-row';
    row.innerHTML = `
        <div class="col-md-3">
            <label class="form-label">Seleccionar por ID</label>
            <select class="form-select" onchange="productoSeleccionadoPorID(this, ${index})">
                <option value="">Seleccione un producto</option>
                ${productosDisponibles.map(p =>
                    `<option value="${p.IDProducto}" data-referencia="${p.Referencia}" ${p.IDProducto == id ? 'selected' : ''}>
                        ${p.IDProducto} - ${p.Nombre}
                    </option>`).join('')}
            </select>
        </div>

        <div class="col-md-3">
            <label class="form-label">O buscar por Referencia</label>
            <input list="referencias" class="form-control" oninput="asignarProductoPorReferencia(this, ${index})" placeholder="Escribe la referencia" value="${referencia}">
            <datalist id="referencias">
                ${productosDisponibles.map(p =>
                    `<option value="${p.Referencia}" data-id="${p.IDProducto}" data-nombre="${p.Nombre}"></option>`).join('')}
            </datalist>
        </div>

        <input type="hidden" name="productos[]" id="producto-id-${index}" value="${id}">

        <div class="col-auto">
            <label class="form-label">Cantidad</label>
            <input type="number" name="cantidades[]" class="form-control" required value="${cantidad}" style="width: 80px;">
        </div>

        <div class="col-md-2">
            <label class="form-label">Referencia confirmada</label>
            <input type="text" name="referencias[]" class="form-control" readonly id="referencia-${index}" value="${referencia}">
        </div>

        <div class="col-md-2">
            <label class="form-label">Notas</label>
            <input type="text" name="notas[]" class="form-control" value="${nota}">
        </div>

        <div class="col-md-1 text-center">
            <label class="form-label">Recepcionado</label>
            <div class="form-check mt-1">
                <input type="hidden" name="recepcionado_valor[${index}]" value="0">
<input type="checkbox" class="form-check-input checkbox-grande" name="recepcionado_valor[${index}]" value="1" ${recepcionado == 1 ? 'checked' : ''}>
            </div>
        </div>

        <div class="col-md-1 text-end">
            <button type="button" class="btn btn-danger mt-4" onclick="eliminarProducto(this)">
                <i class="bi bi-trash"></i>
            </button>
        </div>
    `;
    container.appendChild(row);
}


   function productoSeleccionadoPorID(select, index) {
    const selected = select.options[select.selectedIndex];
    const id = selected.value;
    const referencia = selected.dataset.referencia;

    document.getElementById(`producto-id-${index}`).value = id;
    document.getElementById(`referencia-${index}`).value = referencia;

    // 🆕 Actualizar el input de búsqueda por referencia también
    const inputReferencia = select.closest('.producto-row').querySelector('input[list="referencias"]');
    if (inputReferencia) {
        inputReferencia.value = referencia;
    }
}


    function asignarProductoPorReferencia(input, index) {
        const datalist = document.getElementById('referencias');
        const valor = input.value;
        const opciones = datalist.options;

        for (let i = 0; i < opciones.length; i++) {
            if (opciones[i].value === valor) {
                const idProducto = opciones[i].dataset.id;
                const referenciaInput = document.getElementById(`referencia-${index}`);
                const idInput = document.getElementById(`producto-id-${index}`);

                if (referenciaInput) referenciaInput.value = valor;
                if (idInput) idInput.value = idProducto;

                // También actualizar el select si está presente
                const select = input.closest('.producto-row').querySelector('select');
                if (select) {
                    for (let j = 0; j < select.options.length; j++) {
                        if (select.options[j].value == idProducto) {
                            select.selectedIndex = j;
                            break;
                        }
                    }
                }

                break;
            }
        }
    }

    function eliminarProducto(button) {
        const row = button.closest('.producto-row');
        row.remove();
    }

    window.onload = () => {
    if (productosExistentes.length > 0) {
        productosExistentes.forEach(p =>
            agregarProducto(p.IDProducto, p.Cantidad, p.Referencia, p.Notas || '', p.Recepcionado || 0)
        );
    } else {
        agregarProducto();
    }
};

</script>