diff --git a/add_column.php b/add_column.php deleted file mode 100644 index b070ae8..0000000 --- a/add_column.php +++ /dev/null @@ -1,65 +0,0 @@ -Acceso denegado."; - require_once 'layout_footer.php'; - exit(); -} - -$message = ''; - -if ($_SERVER['REQUEST_METHOD'] === 'POST') { - $nombre = trim($_POST['nombre'] ?? ''); - - if (!empty($nombre)) { - try { - $pdo = db(); - - // Find the current max order value - $stmt_max_order = $pdo->query('SELECT MAX(orden) AS max_orden FROM kanban_columns'); - $max_orden = $stmt_max_order->fetchColumn(); - $new_orden = ($max_orden === null) ? 0 : $max_orden + 1; - - $stmt = $pdo->prepare('INSERT INTO kanban_columns (nombre, orden) VALUES (?, ?)'); - - if ($stmt->execute([$nombre, $new_orden])) { - // Usar una variable de sesión para mostrar el mensaje en la página de configuración - $_SESSION['success_message'] = "Columna '" . htmlspecialchars($nombre) . "' añadida correctamente."; - header('Location: configuracion.php'); - exit; - } else { - $message = "
Error al añadir la columna.
"; - } - } catch (PDOException $e) { - $message = "
Error de base de datos: " . $e->getMessage() . "
"; - } - } else { - $message = "
El nombre de la columna no puede estar vacío.
"; - } -} -?> - -
-
-
-

Añadir Nueva Columna al Kanban

-
-
- -
-
- - -
- - Cancelar -
-
-
-
- - \ No newline at end of file diff --git a/db/migrations/058_add_fecha_entrega_to_pedidos.sql b/db/migrations/058_add_fecha_entrega_to_pedidos.sql new file mode 100644 index 0000000..b7ab6ce --- /dev/null +++ b/db/migrations/058_add_fecha_entrega_to_pedidos.sql @@ -0,0 +1 @@ +ALTER TABLE pedidos ADD COLUMN fecha_entrega DATE DEFAULT NULL; diff --git a/db/migrations/059_add_coordenadas_to_pedidos.sql b/db/migrations/059_add_coordenadas_to_pedidos.sql new file mode 100644 index 0000000..4b4f598 --- /dev/null +++ b/db/migrations/059_add_coordenadas_to_pedidos.sql @@ -0,0 +1 @@ +ALTER TABLE pedidos ADD COLUMN coordenadas VARCHAR(255) DEFAULT NULL; diff --git a/pedido_form.php b/pedido_form.php index 4ec51ba..c99500c 100644 --- a/pedido_form.php +++ b/pedido_form.php @@ -147,10 +147,6 @@ include 'layout_header.php'; -
- - -

diff --git a/pedidos_contraentrega.php b/pedidos_contraentrega.php index 538495d..7a8cc53 100644 --- a/pedidos_contraentrega.php +++ b/pedidos_contraentrega.php @@ -143,8 +143,19 @@ include 'layout_header.php';
- - + + +
+ + +
+
+ + +
+
+ +
diff --git a/ruta_contraentrega.php b/ruta_contraentrega.php index 57267d2..283bacc 100644 --- a/ruta_contraentrega.php +++ b/ruta_contraentrega.php @@ -37,6 +37,17 @@ function getStatusStyle($status) { return "background-color: {$bgColor} !important; {$style}"; } +function getFechaEntregaStyle($fecha) { + if (empty($fecha) || $fecha === '0000-00-00') { + return 'background-color: #f8f9fa; color: #6c757d;'; // Light grey for N/A + } + // Check if the date is in the past + if (strtotime($fecha) < time()) { + return 'background-color: #f8d7da; color: #721c24;'; // Light red for past dates + } + return 'background-color: #e0f7fa; color: black;'; // Light cyan background for upcoming dates +} + $pdo = db(); $user_id = $_SESSION['user_id']; @@ -163,6 +174,7 @@ include 'layout_header.php'; Monto Total Monto Debe Estado + Fecha de Entrega Asesor Fecha Creación Acciones @@ -175,16 +187,36 @@ include 'layout_header.php'; - + + '; + echo ''; + echo ''; + } else { + echo 'N/A'; + } + ?> + - - + + + @@ -215,7 +247,7 @@ $(document).ready(function() { "language": { "url": "//cdn.datatables.net/plug-ins/1.10.25/i18n/Spanish.json" }, - "order": [[ , "desc" ]], + "order": [[ , "desc" ]], "paging": false, "lengthChange": false, "info": false diff --git a/save_pedido.php b/save_pedido.php index d31e93c..9484acb 100644 --- a/save_pedido.php +++ b/save_pedido.php @@ -51,7 +51,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { $codigo_rastreo = trim($_POST['codigo_rastreo'] ?? ''); $codigo_tracking = trim($_POST['codigo_tracking'] ?? ''); $clave = trim($_POST['clave'] ?? ''); - $seguimiento = trim($_POST['seguimiento'] ?? ''); + // --- Manejo de multiples productos --- $productos_post = $_POST['productos'] ?? []; @@ -108,7 +108,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { 'codigo_rastreo' => $codigo_rastreo, 'codigo_tracking' => $codigo_tracking, 'clave' => $clave, - 'seguimiento' => $seguimiento, + 'producto' => $producto, 'cantidad' => $cantidad, 'monto_total' => $monto_total, @@ -133,7 +133,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { "codigo_rastreo = :codigo_rastreo", "codigo_tracking = :codigo_tracking", "clave = :clave", - "seguimiento = :seguimiento", + "producto = :producto", "cantidad = :cantidad", "monto_total = :monto_total", @@ -173,8 +173,8 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { // INSERT: The advisor is the user creating the order. $params['asesor_id'] = $_SESSION['user_id']; - $columns_sql = "dni_cliente, nombre_completo, celular, sede_envio, codigo_rastreo, codigo_tracking, clave, seguimiento, producto, cantidad, monto_total, monto_adelantado, numero_operacion, monto_debe, estado, asesor_id, notas, voucher_adelanto_path, voucher_restante_path"; - $values_sql = ":dni_cliente, :nombre_completo, :celular, :sede_envio, :codigo_rastreo, :codigo_tracking, :clave, :seguimiento, :producto, :cantidad, :monto_total, :monto_adelantado, :numero_operacion, :monto_debe, :estado, :asesor_id, :notas, :voucher_adelanto_path, :voucher_restante_path"; + $columns_sql = "dni_cliente, nombre_completo, celular, sede_envio, codigo_rastreo, codigo_tracking, clave, producto, cantidad, monto_total, monto_adelantado, numero_operacion, monto_debe, estado, asesor_id, notas, voucher_adelanto_path, voucher_restante_path"; + $values_sql = ":dni_cliente, :nombre_completo, :celular, :sede_envio, :codigo_rastreo, :codigo_tracking, :clave, :producto, :cantidad, :monto_total, :monto_adelantado, :numero_operacion, :monto_debe, :estado, :asesor_id, :notas, :voucher_adelanto_path, :voucher_restante_path"; $completed_states = ['Completado', 'COMPLETADO ✅']; if (in_array($estado, $completed_states)) { diff --git a/save_pedido_contraentrega.php b/save_pedido_contraentrega.php index 0aae7bf..1daa83e 100644 --- a/save_pedido_contraentrega.php +++ b/save_pedido_contraentrega.php @@ -20,6 +20,9 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { $codigo_tracking = trim($_POST['codigo_tracking'] ?? ''); $direccion_exacta = trim($_POST['direccion_exacta'] ?? ''); $referencia_domicilio = trim($_POST['referencia_domicilio'] ?? ''); + $coordenadas = trim($_POST['coordenadas'] ?? ''); + $seguimiento = trim($_POST['seguimiento'] ?? ''); + $fecha_entrega = trim($_POST['fecha_entrega'] ?? null); // --- Manejo de multiples productos --- $productos_post = $_POST['productos'] ?? []; @@ -51,8 +54,11 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { $notas .= "\n\n" . $notas_adicionales; } - if (empty($dni) || empty($nombre_completo) || empty($celular) || empty($sede_envio) || empty($producto) || $cantidad === false || $monto_total === false) { - die('Por favor, complete todos los campos obligatorios.'); + if (empty($dni) || empty($nombre_completo) || empty($celular) || empty($sede_envio) || empty($producto) || $cantidad === false || $monto_total === false || empty($coordenadas)) { + $error_message = urlencode('Por favor, complete todos los campos obligatorios, incluyendo las coordenadas.'); + $id_param = $id ? '&id=' . $id : ''; + header('Location: pedidos_contraentrega.php?error=' . $error_message . $id_param); + exit; } $monto_debe = $monto_total - $monto_adelantado; @@ -64,6 +70,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { 'sede_envio' => $sede_envio, 'direccion_exacta' => $direccion_exacta, 'referencia_domicilio' => $referencia_domicilio, + 'coordenadas' => $coordenadas, 'codigo_rastreo' => $codigo_rastreo, 'codigo_tracking' => $codigo_tracking, 'producto' => $producto, @@ -73,6 +80,8 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { 'numero_operacion' => $numero_operacion, 'monto_debe' => $monto_debe, 'notas' => $notas, + 'seguimiento' => $seguimiento, + 'fecha_entrega' => $fecha_entrega, ]; if ($id) { @@ -86,6 +95,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { "sede_envio = :sede_envio", "direccion_exacta = :direccion_exacta", "referencia_domicilio = :referencia_domicilio", + "coordenadas = :coordenadas", "codigo_rastreo = :codigo_rastreo", "codigo_tracking = :codigo_tracking", "producto = :producto", @@ -95,6 +105,8 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { "numero_operacion = :numero_operacion", "monto_debe = :monto_debe", "notas = :notas", + "seguimiento = :seguimiento", + "fecha_entrega = :fecha_entrega", ]; // Conditionally add asesor_id @@ -113,8 +125,8 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { $params['asesor_id'] = $_SESSION['user_id']; $params['estado'] = 'RUTA_CONTRAENTREGA'; - $columns_sql = "dni_cliente, nombre_completo, celular, sede_envio, direccion_exacta, referencia_domicilio, codigo_rastreo, codigo_tracking, producto, cantidad, monto_total, monto_adelantado, numero_operacion, monto_debe, asesor_id, notas, estado"; - $values_sql = ":dni_cliente, :nombre_completo, :celular, :sede_envio, :direccion_exacta, :referencia_domicilio, :codigo_rastreo, :codigo_tracking, :producto, :cantidad, :monto_total, :monto_adelantado, :numero_operacion, :monto_debe, :asesor_id, :notas, :estado"; + $columns_sql = "dni_cliente, nombre_completo, celular, sede_envio, direccion_exacta, referencia_domicilio, coordenadas, codigo_rastreo, codigo_tracking, producto, cantidad, monto_total, monto_adelantado, numero_operacion, monto_debe, asesor_id, notas, estado, seguimiento, fecha_entrega"; + $values_sql = ":dni_cliente, :nombre_completo, :celular, :sede_envio, :direccion_exacta, :referencia_domicilio, :coordenadas, :codigo_rastreo, :codigo_tracking, :producto, :cantidad, :monto_total, :monto_adelantado, :numero_operacion, :monto_debe, :asesor_id, :notas, :estado, :seguimiento, :fecha_entrega"; $sql = "INSERT INTO pedidos ($columns_sql) VALUES ($values_sql)"; $stmt = $pdo->prepare($sql);