Autosave: 20260522-172015
This commit is contained in:
parent
5707981abe
commit
7df520a3f9
89
configuracion_rentabilidad.php
Normal file
89
configuracion_rentabilidad.php
Normal file
@ -0,0 +1,89 @@
|
||||
<?php
|
||||
session_start();
|
||||
require_once 'db/config.php';
|
||||
|
||||
// Verificar si el usuario es Administrador
|
||||
if (!isset($_SESSION['user_id']) || ($_SESSION['user_role'] !== 'admin' && $_SESSION['user_role'] !== 'Administrador')) {
|
||||
header("Location: login.php");
|
||||
exit;
|
||||
}
|
||||
|
||||
$db = db();
|
||||
$message = '';
|
||||
|
||||
// Crear tabla de configuración si no existe
|
||||
$db->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 = '<div class="alert alert-success">Configuración actualizada correctamente.</div>';
|
||||
}
|
||||
|
||||
$stmt = $db->query("SELECT * FROM configuracion_costos");
|
||||
$config = $stmt->fetchAll(PDO::FETCH_KEY_PAIR);
|
||||
|
||||
$pageTitle = 'Configuración de Rentabilidad';
|
||||
include 'layout_header.php';
|
||||
?>
|
||||
|
||||
<div class="container-fluid mt-4">
|
||||
<div class="row">
|
||||
<div class="col-md-8 offset-md-2">
|
||||
<div class="card shadow">
|
||||
<div class="card-header bg-primary text-white">
|
||||
<h4 class="mb-0"><i class="fas fa-calculator me-2"></i>Configuración de Costos y Rentabilidad</h4>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<?php echo $message; ?>
|
||||
<form method="POST">
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label">Costo Envío Contraentrega Estándar (S/)</label>
|
||||
<input type="number" step="0.01" name="costos[envio_contraentrega]" class="form-control" value="<?php echo $config['envio_contraentrega']; ?>">
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label">Costo Envío Agencia Estándar (S/)</label>
|
||||
<input type="number" step="0.01" name="costos[envio_agencia]" class="form-control" value="<?php echo $config['envio_agencia']; ?>">
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label">Comisión por Venta Estándar (S/)</label>
|
||||
<input type="number" step="0.01" name="costos[comision_venta]" class="form-control" value="<?php echo $config['comision_venta']; ?>">
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label">Presupuesto Publicidad Diario Estimado (S/)</label>
|
||||
<input type="number" step="0.01" name="costos[publicidad_diaria]" class="form-control" value="<?php echo $config['publicidad_diaria']; ?>">
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="alert alert-info">
|
||||
<i class="fas fa-info-circle me-2"></i> Estos valores se utilizarán para calcular la rentabilidad automática en los reportes, sin necesidad de llenar datos en cada pedido.
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary w-100">Guardar Configuración</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php include 'layout_footer.php'; ?>
|
||||
4
db/migrations/071_add_profitability_fields_v2.sql
Normal file
4
db/migrations/071_add_profitability_fields_v2.sql
Normal file
@ -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;
|
||||
@ -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',
|
||||
|
||||
@ -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';
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-4 mb-3">
|
||||
<label for="comision_vendedora" class="form-label">Comisión Vendedora (S/)</label>
|
||||
<input type="number" step="0.01" class="form-control" id="comision_vendedora" name="comision_vendedora" value="<?php echo htmlspecialchars($pedido['comision_vendedora'] ?? '0.00'); ?>">
|
||||
</div>
|
||||
<div class="col-md-4 mb-3">
|
||||
<label for="costo_envio_real" class="form-label">Costo Envío Real (S/)</label>
|
||||
<input type="number" step="0.01" class="form-control" id="costo_envio_real" name="costo_envio_real" value="<?php echo htmlspecialchars($pedido['costo_envio_real'] ?? '0.00'); ?>">
|
||||
</div>
|
||||
<div class="col-md-4 mb-3">
|
||||
<label for="gasto_publicidad_unitario" class="form-label">Gasto Publicidad Unit. (S/)</label>
|
||||
<input type="number" step="0.01" class="form-control" id="gasto_publicidad_unitario" name="gasto_publicidad_unitario" value="<?php echo htmlspecialchars($pedido['gasto_publicidad_unitario'] ?? '0.00'); ?>">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="notas" class="form-label">Notas</label>
|
||||
<textarea class="form-control" id="notas" name="notas" rows="3"><?php echo htmlspecialchars($pedido['notas']); ?></textarea>
|
||||
|
||||
@ -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)) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user