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
+
+
+
+ Probar JS
+
+
+ Nuevo Producto
+
+
+
+ ¡Operación realizada con éxito!
+
+
+
+
@@ -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".
+
+
+
+ Nuevo Producto
+
+
+
+
+
+
+ ¡Cambios guardados correctamente!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Producto
+
+ Seleccionar...
+
+
+
+
+
+
+ Costo del Producto (S/)
+
+
+
+ Orden
+
+
+
+ Imagen
+
+
+
+
+
+
+
+
+
+
+
+
\ 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();
}