From 7df520a3f98e16bb788577c74f5e7f271ac11d63 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Fri, 22 May 2026 17:20:15 +0000 Subject: [PATCH] Autosave: 20260522-172015 --- configuracion_rentabilidad.php | 89 +++++++++++++++++++ .../071_add_profitability_fields_v2.sql | 4 + layout_header.php | 6 ++ pedido_form.php | 20 ++++- save_pedido.php | 13 ++- 5 files changed, 129 insertions(+), 3 deletions(-) create mode 100644 configuracion_rentabilidad.php create mode 100644 db/migrations/071_add_profitability_fields_v2.sql diff --git a/configuracion_rentabilidad.php b/configuracion_rentabilidad.php new file mode 100644 index 00000000..ee75a4ac --- /dev/null +++ b/configuracion_rentabilidad.php @@ -0,0 +1,89 @@ +exec("CREATE TABLE IF NOT EXISTS configuracion_costos ( + id INT AUTO_INCREMENT PRIMARY KEY, + clave VARCHAR(50) UNIQUE, + valor DECIMAL(10,2) +)"); + +// Valores por defecto +$defaults = [ + 'envio_contraentrega' => 10.00, + 'envio_agencia' => 12.00, + 'comision_venta' => 5.00, + 'publicidad_diaria' => 50.00 +]; + +foreach ($defaults as $clave => $valor) { + $stmt = $db->prepare("INSERT IGNORE INTO configuracion_costos (clave, valor) VALUES (?, ?)"); + $stmt->execute([$clave, $valor]); +} + +if ($_SERVER['REQUEST_METHOD'] === 'POST') { + foreach ($_POST['costos'] as $clave => $valor) { + $stmt = $db->prepare("UPDATE configuracion_costos SET valor = ? WHERE clave = ?"); + $stmt->execute([$valor, $clave]); + } + $message = '
Configuración actualizada correctamente.
'; +} + +$stmt = $db->query("SELECT * FROM configuracion_costos"); +$config = $stmt->fetchAll(PDO::FETCH_KEY_PAIR); + +$pageTitle = 'Configuración de Rentabilidad'; +include 'layout_header.php'; +?> + +
+
+
+
+
+

Configuración de Costos y Rentabilidad

+
+
+ +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ Estos valores se utilizarán para calcular la rentabilidad automática en los reportes, sin necesidad de llenar datos en cada pedido. +
+ +
+
+
+
+
+
+ + \ No newline at end of file diff --git a/db/migrations/071_add_profitability_fields_v2.sql b/db/migrations/071_add_profitability_fields_v2.sql new file mode 100644 index 00000000..ad40536d --- /dev/null +++ b/db/migrations/071_add_profitability_fields_v2.sql @@ -0,0 +1,4 @@ +-- Migración para añadir campos de rentabilidad a pedidos +ALTER TABLE pedidos ADD COLUMN IF NOT EXISTS comision_vendedora DECIMAL(10,2) DEFAULT 0.00; +ALTER TABLE pedidos ADD COLUMN IF NOT EXISTS costo_envio_real DECIMAL(10,2) DEFAULT 0.00; +ALTER TABLE pedidos ADD COLUMN IF NOT EXISTS gasto_publicidad_unitario DECIMAL(10,2) DEFAULT 0.00; diff --git a/layout_header.php b/layout_header.php index 3e87e65f..ea573c02 100644 --- a/layout_header.php +++ b/layout_header.php @@ -281,6 +281,12 @@ $navItems = [ 'text' => 'Configuración', 'roles' => ['Administrador', 'admin'] ], + 'configuracion_rentabilidad' => [ + 'url' => 'configuracion_rentabilidad.php', + 'icon' => 'fa-calculator', + 'text' => 'Config. Rentabilidad', + 'roles' => ['Administrador', 'admin'] + ], 'sesiones_iniciadas' => [ 'url' => 'sesiones_iniciadas.php', 'icon' => 'fa-user-shield', diff --git a/pedido_form.php b/pedido_form.php index 4d5a963d..23edcfd0 100644 --- a/pedido_form.php +++ b/pedido_form.php @@ -32,8 +32,11 @@ $pedido = [ 'estado' => 'ROTULADO 📦', 'asesor_id' => $user_id, // Default to current user 'notas' => '', + 'descargo' => '', + 'comision_vendedora' => 0, + 'costo_envio_real' => 0, + 'gasto_publicidad_unitario' => 0, 'voucher_adelanto_path' => '', - 'voucher_restante_path' => '' ]; $page_title = 'Crear Pedido'; @@ -343,6 +346,21 @@ include 'layout_header.php'; +
+
+ + +
+
+ + +
+
+ + +
+
+
diff --git a/save_pedido.php b/save_pedido.php index 2d9f938c..0fe14ed1 100644 --- a/save_pedido.php +++ b/save_pedido.php @@ -85,6 +85,9 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { $nota_adicional = trim($_POST['nota_adicional'] ?? ''); $observacion = trim($_POST['observacion'] ?? ''); $descargo = trim($_POST['descargo'] ?? ''); + $comision_vendedora = filter_var($_POST['comision_vendedora'] ?? 0, FILTER_VALIDATE_FLOAT) ?: 0; + $costo_envio_real = filter_var($_POST['costo_envio_real'] ?? 0, FILTER_VALIDATE_FLOAT) ?: 0; + $gasto_publicidad_unitario = filter_var($_POST['gasto_publicidad_unitario'] ?? 0, FILTER_VALIDATE_FLOAT) ?: 0; if (!empty($productos_detalle)) { $notas .= "\n\n" . $notas_adicionales; @@ -157,6 +160,9 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { 'nota_adicional' => $nota_adicional, 'observacion' => $observacion, 'descargo' => $descargo, + 'comision_vendedora' => $comision_vendedora, + 'costo_envio_real' => $costo_envio_real, + 'gasto_publicidad_unitario' => $gasto_publicidad_unitario, 'voucher_adelanto_path' => $voucher_adelanto_path, 'voucher_restante_path' => $voucher_restante_path ]; @@ -188,6 +194,9 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { "nota_adicional = :nota_adicional", "observacion = :observacion", "descargo = :descargo", + "comision_vendedora = :comision_vendedora", + "costo_envio_real = :costo_envio_real", + "gasto_publicidad_unitario = :gasto_publicidad_unitario", "voucher_adelanto_path = :voucher_adelanto_path", "voucher_restante_path = :voucher_restante_path" ]; @@ -240,8 +249,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, agencia, sede_envio, codigo_rastreo, codigo_tracking, clave, pendientes, producto, cantidad, monto_total, monto_adelantado, numero_operacion, banco, monto_debe, estado, asesor_id, notas, nota_adicional, observacion, descargo, voucher_adelanto_path, voucher_restante_path"; - $values_sql = ":dni_cliente, :nombre_completo, :celular, :agencia, :sede_envio, :codigo_rastreo, :codigo_tracking, :clave, :pendientes, :producto, :cantidad, :monto_total, :monto_adelantado, :numero_operacion, :banco, :monto_debe, :estado, :asesor_id, :notas, :nota_adicional, :observacion, :descargo, :voucher_adelanto_path, :voucher_restante_path"; + $columns_sql = "dni_cliente, nombre_completo, celular, agencia, sede_envio, codigo_rastreo, codigo_tracking, clave, pendientes, producto, cantidad, monto_total, monto_adelantado, numero_operacion, banco, monto_debe, estado, asesor_id, notas, nota_adicional, observacion, descargo, comision_vendedora, costo_envio_real, gasto_publicidad_unitario, voucher_adelanto_path, voucher_restante_path"; + $values_sql = ":dni_cliente, :nombre_completo, :celular, :agencia, :sede_envio, :codigo_rastreo, :codigo_tracking, :clave, :pendientes, :producto, :cantidad, :monto_total, :monto_adelantado, :numero_operacion, :banco, :monto_debe, :estado, :asesor_id, :notas, :nota_adicional, :observacion, :descargo, :comision_vendedora, :costo_envio_real, :gasto_publicidad_unitario, :voucher_adelanto_path, :voucher_restante_path"; $completed_states = ['Completado', 'COMPLETADO ✅']; if (in_array($estado, $completed_states)) {