diff --git a/calculo_costos.php b/calculo_costos.php index 33d1ffe4..d289d282 100644 --- a/calculo_costos.php +++ b/calculo_costos.php @@ -5,6 +5,10 @@ include 'layout_header.php'; $db = db(); +// Obtener productos para el select del modal +$stmt_products = $db->query("SELECT id, nombre FROM products ORDER BY nombre ASC"); +$productos_select = $stmt_products->fetchAll(PDO::FETCH_ASSOC); + // Obtener videos y sus costos asociados $stmt = $db->query("SELECT mv.id, mv.orden, mv.foto_producto, p.nombre as nombre_producto, mc.costo_producto, mc.costo_fijo_film, mc.comision_asesora, @@ -43,13 +47,31 @@ $costos = $stmt->fetchAll(PDO::FETCH_ASSOC); background-color: #ffffff; transition: all 0.2s; position: relative; + min-width: 80px; + pointer-events: auto !important; } .editable:hover { background-color: #f0f7ff !important; cursor: pointer; - box-shadow: inset 0 0 0 1px #0d6efd; + box-shadow: inset 0 0 0 2px #0d6efd; z-index: 1; } + .edit-icon { + position: absolute; + right: 4px; + top: 4px; + font-size: 0.7rem; + color: #0d6efd; + background: rgba(255,255,255,0.9); + padding: 2px 4px; + border-radius: 3px; + border: 1px solid #0d6efd; + display: none; + z-index: 10; + } + .editable:hover .edit-icon { + display: block; + } .recaudo-cell { background-color: #fdfdfd; cursor: default; @@ -57,25 +79,63 @@ $costos = $stmt->fetchAll(PDO::FETCH_ASSOC); } .inline-edit-input { width: 100%; - padding: 2px 5px; + padding: 4px 8px; font-size: 0.85rem; border: 2px solid #0d6efd; - border-radius: 3px; + border-radius: 4px; text-align: center; + box-shadow: 0 2px 5px rgba(0,0,0,0.1); + pointer-events: auto !important; } .bg-total { background-color: #f1f3f5; font-weight: bold; } + .btn-delete-row { + padding: 0.2rem 0.4rem; + font-size: 0.75rem; + opacity: 0.3; + transition: opacity 0.2s; + pointer-events: auto !important; + } + tr:hover .btn-delete-row { + opacity: 1; + } + /* Fix for modal selection and backdrop issues */ + .modal { + z-index: 2000 !important; + } + .modal-backdrop { + z-index: 1900 !important; + } + .modal-content { + box-shadow: 0 5px 15px rgba(0,0,0,0.5); + pointer-events: auto !important; + }

Cálculo de Costos

-

Gestión de costos por producto de marketing. Doble clic en las celdas blancas para editar

+

Gestión de costos por producto de marketing. Haz clic en las celdas blancas para editar

+
+
+ +
+ + + +
@@ -97,12 +157,13 @@ $costos = $stmt->fetchAll(PDO::FETCH_ASSOC); Recaudo 2 (Auto) Promo 3 Recaudo 3 (Auto) + Acción - No hay videos registrados en producción. + No hay videos registrados en producción. @@ -139,42 +200,55 @@ $costos = $stmt->fetchAll(PDO::FETCH_ASSOC); Sin foto - + S/ + - + S/ + - + S/ + - + S/ + - + S/ + S/ - + + - + + - + + + + + @@ -184,130 +258,219 @@ $costos = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ + + - + \ No newline at end of file diff --git a/calculo_costos_v2.php b/calculo_costos_v2.php new file mode 100644 index 00000000..6f6b9760 --- /dev/null +++ b/calculo_costos_v2.php @@ -0,0 +1,321 @@ +query("SELECT id, nombre FROM products ORDER BY nombre ASC"); +$productos_select = $stmt_products->fetchAll(PDO::FETCH_ASSOC); + +// Obtener videos y sus costos asociados +$stmt = $db->query("SELECT mv.id, mv.orden, mv.foto_producto, p.nombre as nombre_producto, + mc.costo_producto, mc.costo_fijo_film, mc.comision_asesora, + mc.delivery, mc.costo_publicitario, mc.inversion_total, + mc.promo_1, mc.promo_2, mc.promo_3 + FROM marketing_videos mv + LEFT JOIN products p ON mv.producto_id = p.id + LEFT JOIN marketing_costos mc ON mv.id = mc.video_id + ORDER BY mv.orden ASC, mv.fecha_creacion DESC"); +$costos = $stmt->fetchAll(PDO::FETCH_ASSOC); +?> + + + +
+
+
+

Cálculo de Costos Versión 2

+

Edición directa mediante cuadros de texto. Escribe y presiona "Guardar".

+
+
+ +
+
+ + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + 0 ? $p1 - $inversion_total : null; + $r2 = $p2 > 0 ? $p2 - $inversion_total : null; + $r3 = $p3 > 0 ? $p3 - $inversion_total : null; + ?> + + + + + + + + + + + + + + + + + + + + + + + + +
OrdenProductoImagenCosto Prod.FilmAsesoraDeliveryPublicidadInversión TotalPromo 1Recaudo 1Promo 2Recaudo 2Promo 3Recaudo 3Acción
+ + + + + + +
+ S/ +
+
+
+ + +
+
+
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/delete_marketing_video.php b/delete_marketing_video.php index cc94196a..012c57f8 100644 --- a/delete_marketing_video.php +++ b/delete_marketing_video.php @@ -20,5 +20,6 @@ if (isset($_GET['id'])) { } } -header("Location: marketing_produccion.php?success=1"); +$redirect = $_GET['redirect'] ?? 'marketing_produccion.php?success=1'; +header("Location: " . $redirect); exit; \ No newline at end of file diff --git a/get_product_details.php b/get_product_details.php index d5fe9cbd..7d773a1b 100644 --- a/get_product_details.php +++ b/get_product_details.php @@ -19,8 +19,8 @@ if (isset($_GET['codigo_barras'])) { if (!empty($sku)) { try { // Search by the 'sku' column - $stmt = $pdo->prepare("SELECT id, nombre, sku FROM products WHERE sku = :sku"); - $stmt->execute(['sku' => $sku]); + $stmt = $pdo->prepare("SELECT id, nombre, sku, costo FROM products WHERE sku = :sku OR id = :id"); + $stmt->execute(['sku' => $sku, 'id' => $sku]); $product = $stmt->fetch(PDO::FETCH_ASSOC); if (!$product) { $response['message'] = 'Producto no encontrado con el SKU proporcionado: ' . htmlspecialchars($sku); diff --git a/layout_footer.php b/layout_footer.php index 5c5120a2..972056a4 100644 --- a/layout_footer.php +++ b/layout_footer.php @@ -1,7 +1,6 @@
- diff --git a/layout_header.php b/layout_header.php index d83123dc..a36d4398 100644 --- a/layout_header.php +++ b/layout_header.php @@ -257,7 +257,7 @@ $navItems = [ 'roles' => ['Administrador', 'admin'] ], 'calculo_costos' => [ - 'url' => 'calculo_costos.php', + 'url' => 'calculo_costos_v2.php', 'icon' => 'fa-calculator', 'text' => 'Cálculo de Costos', 'roles' => ['Administrador', 'admin'] diff --git a/save_marketing_video.php b/save_marketing_video.php index 3bc39ffa..94d56e0d 100644 --- a/save_marketing_video.php +++ b/save_marketing_video.php @@ -76,7 +76,8 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST') { $link_inspiracion_video, $id ]); - header('Location: marketing_produccion.php?success=updated'); + $redirect = $_POST['redirect'] ?? 'marketing_produccion.php?success=updated'; + header('Location: ' . $redirect); } catch (PDOException $e) { echo "Error: " . $e->getMessage(); } @@ -165,7 +166,17 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST') { $link_video, $link_landing ]); - header('Location: marketing_produccion.php?success=created'); + $video_id = $db->lastInsertId(); + + // Guardar costo inicial si se proporcionó + if (!empty($_POST['costo_producto'])) { + $costo_producto = $_POST['costo_producto']; + $stmt_costo = $db->prepare("INSERT INTO marketing_costos (video_id, costo_producto, inversion_total) VALUES (?, ?, ?)"); + $stmt_costo->execute([$video_id, $costo_producto, $costo_producto]); + } + + $redirect = $_POST['redirect'] ?? 'marketing_produccion.php?success=created'; + header('Location: ' . $redirect); } catch (PDOException $e) { echo "Error: " . $e->getMessage(); }