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';
+?>
+
+
+
+
\ 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)) {