prepare("DELETE FROM rentabilidad_productos WHERE reporte_id = ? AND product_id = ?");
$stmt->execute([$_GET['reporte_id'], $_GET['product_id']]);
$_SESSION['message'] = '
Producto eliminado de este reporte.
';
}
} catch (PDOException $e) {
$_SESSION['message'] = 'Error de base de datos: ' . $e->getMessage() . '
';
}
header('Location: rentabilidad.php');
exit;
}
$db = db();
$message = '';
// Manejar las acciones del formulario (POST requests)
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action'])) {
try {
switch ($_POST['action']) {
case 'create_report':
// 1. Crear el reporte
$stmt = $db->prepare("INSERT INTO rentabilidad_reportes (fecha_inicio, fecha_fin) VALUES (CURDATE(), CURDATE())");
$stmt->execute();
$reporte_id = $db->lastInsertId();
// 2. Poblar el reporte con todos los productos existentes
$products_stmt = $db->query("SELECT id FROM products");
$products_ids = $products_stmt->fetchAll(PDO::FETCH_COLUMN);
$insert_sql = "INSERT INTO rentabilidad_productos (reporte_id, product_id) VALUES (:reporte_id, :product_id)";
$insert_stmt = $db->prepare($insert_sql);
foreach ($products_ids as $product_id) {
$insert_stmt->execute([':reporte_id' => $reporte_id, ':product_id' => $product_id]);
}
$_SESSION['message'] = 'Nuevo reporte creado y poblado con todos los productos.
';
break;
case 'delete_report':
if (isset($_POST['reporte_id'])) {
$stmt = $db->prepare("DELETE FROM rentabilidad_reportes WHERE id = ?");
$stmt->execute([$_POST['reporte_id']]);
// Los productos asociados se borran en cascada por la BD
$_SESSION['message'] = 'Reporte eliminado correctamente.
';
}
break;
case 'save_report':
if (isset($_POST['reporte_id']) && isset($_POST['fecha_inicio']) && isset($_POST['fecha_fin'])) {
$reporte_id = $_POST['reporte_id'];
$stmt = $db->prepare("UPDATE rentabilidad_reportes SET fecha_inicio = ?, fecha_fin = ? WHERE id = ?");
$stmt->execute([$_POST['fecha_inicio'], $_POST['fecha_fin'], $reporte_id]);
if (isset($_POST['productos'])) {
$sql = "INSERT INTO rentabilidad_productos (reporte_id, product_id, recaudo, recaudo_ct, unidades_vendidas, unidades_vendidas_ct, costo_producto, costo_ads, comision)
VALUES (:reporte_id, :product_id, :recaudo, :recaudo_ct, :unidades_vendidas, :unidades_vendidas_ct, :costo_producto, :costo_ads, :comision)
ON DUPLICATE KEY UPDATE
recaudo = VALUES(recaudo),
recaudo_ct = VALUES(recaudo_ct),
unidades_vendidas = VALUES(unidades_vendidas),
unidades_vendidas_ct = VALUES(unidades_vendidas_ct),
costo_producto = VALUES(costo_producto),
costo_ads = VALUES(costo_ads),
comision = VALUES(comision)";
$stmt = $db->prepare($sql);
foreach ($_POST['productos'] as $product_id => $data) {
$stmt->execute([
':reporte_id' => $reporte_id,
':product_id' => $product_id,
':recaudo' => $data['recaudo'] ?: 0,
':recaudo_ct' => $data['recaudo_ct'] ?: 0,
':unidades_vendidas' => $data['unidades_vendidas'] ?: 0,
':unidades_vendidas_ct' => $data['unidades_vendidas_ct'] ?: 0,
':costo_producto' => $data['costo_producto'] ?: 0,
':costo_ads' => $data['costo_ads'] ?: 0,
':comision' => $data['comision'] ?: 0,
]);
}
}
$_SESSION['message'] = 'Reporte guardado correctamente.
';
}
break;
case 'remove_product':
if (isset($_POST['reporte_id']) && isset($_POST['product_id'])) {
$stmt = $db->prepare("DELETE FROM rentabilidad_productos WHERE reporte_id = ? AND product_id = ?");
$stmt->execute([$_POST['reporte_id'], $_POST['product_id']]);
$_SESSION['message'] = 'Producto eliminado de este reporte.
';
}
break;
case 'add_product':
if (isset($_POST['reporte_id']) && isset($_POST['product_id']) && !empty($_POST['product_id'])) {
$stmt = $db->prepare("INSERT IGNORE INTO rentabilidad_productos (reporte_id, product_id) VALUES (?, ?)");
$stmt->execute([$_POST['reporte_id'], $_POST['product_id']]);
$_SESSION['message'] = 'Producto añadido al reporte.
';
}
break;
}
} catch (PDOException $e) {
$_SESSION['message'] = 'Error de base de datos: ' . $e->getMessage() . '
';
}
header('Location: rentabilidad.php');
exit;
}
if (isset($_SESSION['message'])) {
$message = $_SESSION['message'];
unset($_SESSION['message']);
}
// --- Carga de datos ---
$master_products = [];
try {
$products_stmt = $db->query("SELECT id, nombre as name, costo FROM products ORDER BY name ASC");
$master_products = $products_stmt->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
$message .= 'Error al cargar productos.
';
}
$reports = [];
try {
$reports_stmt = $db->query("SELECT * FROM rentabilidad_reportes ORDER BY fecha_inicio DESC, id DESC");
$reports = $reports_stmt->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
$message .= 'Error al cargar reportes.
';
}
$report_data = [];
try {
$report_data_stmt = $db->query("SELECT * FROM rentabilidad_productos");
$report_data_flat = $report_data_stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($report_data_flat as $item) {
$report_data[$item['reporte_id']][$item['product_id']] = $item;
}
} catch (PDOException $e) {
$message .= 'Error al cargar datos de rentabilidad.
';
}
$pageTitle = "Reportes de Rentabilidad";
include 'layout_header.php';
?>
No hay reportes. ¡Crea uno para empezar!