diff --git a/assets/uploads/vouchers/6a0b67b410d5c-Screenshot_349.png b/assets/uploads/vouchers/6a0b67b410d5c-Screenshot_349.png new file mode 100644 index 00000000..3cd4d4ce Binary files /dev/null and b/assets/uploads/vouchers/6a0b67b410d5c-Screenshot_349.png differ diff --git a/assets/uploads/vouchers/6a0b7d8c443c3-Captura de pantalla 2026-05-18 155744.png b/assets/uploads/vouchers/6a0b7d8c443c3-Captura de pantalla 2026-05-18 155744.png new file mode 100644 index 00000000..4c93d837 Binary files /dev/null and b/assets/uploads/vouchers/6a0b7d8c443c3-Captura de pantalla 2026-05-18 155744.png differ diff --git a/assets/uploads/vouchers/6a0b7df2ecfaf-Captura de pantalla 2026-05-18 155946.png b/assets/uploads/vouchers/6a0b7df2ecfaf-Captura de pantalla 2026-05-18 155946.png new file mode 100644 index 00000000..7bae02c1 Binary files /dev/null and b/assets/uploads/vouchers/6a0b7df2ecfaf-Captura de pantalla 2026-05-18 155946.png differ diff --git a/assets/uploads/vouchers/6a0b821d6131a-248.png b/assets/uploads/vouchers/6a0b821d6131a-248.png new file mode 100644 index 00000000..5cb993d0 Binary files /dev/null and b/assets/uploads/vouchers/6a0b821d6131a-248.png differ diff --git a/assets/uploads/vouchers/6a0b8d3552742-723.png b/assets/uploads/vouchers/6a0b8d3552742-723.png new file mode 100644 index 00000000..918d49d0 Binary files /dev/null and b/assets/uploads/vouchers/6a0b8d3552742-723.png differ diff --git a/assets/uploads/vouchers/6a0b8d8e85104-Captura de pantalla 2026-05-18 170655.png b/assets/uploads/vouchers/6a0b8d8e85104-Captura de pantalla 2026-05-18 170655.png new file mode 100644 index 00000000..709af7f5 Binary files /dev/null and b/assets/uploads/vouchers/6a0b8d8e85104-Captura de pantalla 2026-05-18 170655.png differ diff --git a/calculo_costos.php b/calculo_costos.php index e2219166..33d1ffe4 100644 --- a/calculo_costos.php +++ b/calculo_costos.php @@ -8,7 +8,8 @@ $db = db(); // 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.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 @@ -38,19 +39,32 @@ $costos = $stmt->fetchAll(PDO::FETCH_ASSOC); object-fit: cover; border-radius: 4px; } + .editable { + background-color: #ffffff; + transition: all 0.2s; + position: relative; + } .editable:hover { - background-color: #f1f3f5; + background-color: #f0f7ff !important; cursor: pointer; + box-shadow: inset 0 0 0 1px #0d6efd; + z-index: 1; + } + .recaudo-cell { + background-color: #fdfdfd; + cursor: default; + color: #6c757d; } .inline-edit-input { width: 100%; padding: 2px 5px; font-size: 0.85rem; - border: 1px solid #0d6efd; + border: 2px solid #0d6efd; border-radius: 3px; + text-align: center; } .bg-total { - background-color: #e9ecef; + background-color: #f1f3f5; font-weight: bold; } @@ -58,14 +72,14 @@ $costos = $stmt->fetchAll(PDO::FETCH_ASSOC);

Cálculo de Costos

-

Gestión de costos por producto de marketing

+

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

- +
@@ -78,12 +92,17 @@ $costos = $stmt->fetchAll(PDO::FETCH_ASSOC); + + + + + - + @@ -93,8 +112,24 @@ $costos = $stmt->fetchAll(PDO::FETCH_ASSOC); ($c['comision_asesora'] ?? 0) + ($c['delivery'] ?? 0) + ($c['costo_publicitario'] ?? 0); + + $costos_operativos = ($c['costo_fijo_film'] ?? 0) + + ($c['comision_asesora'] ?? 0) + + ($c['delivery'] ?? 0) + + ($c['costo_publicitario'] ?? 0); + + function calculateRecaudo($promo, $costos) { + if (!$promo || $promo == '-') return null; + preg_match('/[\d.]+/', $promo, $matches); + $val = isset($matches[0]) ? floatval($matches[0]) : 0; + return $val > 0 ? $val - $costos : null; + } + + $recaudo1 = calculateRecaudo($c['promo_1'], $costos_operativos); + $recaudo2 = calculateRecaudo($c['promo_2'], $costos_operativos); + $recaudo3 = calculateRecaudo($c['promo_3'], $costos_operativos); ?> - + + + + + + @@ -136,83 +186,126 @@ $costos = $stmt->fetchAll(PDO::FETCH_ASSOC); diff --git a/db/migrations/021_add_promo_2_3_to_marketing_costos.sql b/db/migrations/021_add_promo_2_3_to_marketing_costos.sql new file mode 100644 index 00000000..991119ed --- /dev/null +++ b/db/migrations/021_add_promo_2_3_to_marketing_costos.sql @@ -0,0 +1,3 @@ +-- Add promo_2 and promo_3 to marketing_costos +ALTER TABLE marketing_costos ADD COLUMN promo_2 VARCHAR(255) DEFAULT NULL AFTER promo_1; +ALTER TABLE marketing_costos ADD COLUMN promo_3 VARCHAR(255) DEFAULT NULL AFTER promo_2; diff --git a/marketing_produccion.php b/marketing_produccion.php index 140bc6e2..f3a08c0a 100644 --- a/marketing_produccion.php +++ b/marketing_produccion.php @@ -43,18 +43,19 @@ foreach ($videos as $v) { background-color: #f8f9fa; } .table-excel { - font-size: 0.85rem; + font-size: 0.9rem; } .table-excel th { - background-color: #ffffff; - border-bottom: 2px solid #f1f3f5; + background-color: #f8f9fa; + border-bottom: 2px solid #dee2e6; white-space: nowrap; text-transform: uppercase; - font-size: 0.75rem; - letter-spacing: 0.5px; - font-weight: 700; - color: #6c757d; - padding: 15px 10px; + font-size: 0.85rem; + letter-spacing: 0.8px; + font-weight: 800; + color: #495057; + padding: 18px 12px; + vertical-align: middle; } .table-excel td { vertical-align: middle; @@ -156,12 +157,18 @@ foreach ($videos as $v) { } .link-icon { - font-size: 1.1rem; + font-size: 1.35rem; transition: transform 0.2s; } .link-icon:hover { transform: translateY(-2px); } + .text-wrap-cell { + white-space: normal !important; + word-break: break-word; + line-height: 1.4; + min-width: 180px; + } .status-badge { font-size: 0.7rem; padding: 0.5em 1em; @@ -190,6 +197,48 @@ foreach ($videos as $v) { font-size: 1.2rem; margin-bottom: 10px; } + .card-link-badge { + width: 35px; + height: 35px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 10px; + font-size: 1.1rem; + } + /* Estilos para Cuadros (Tags) */ + .tag-container { + display: flex; + flex-wrap: wrap; + gap: 6px; + padding: 4px 0; + } + .tag-item { + background: #ffffff; + border: 1px solid #e2e8f0; + color: #475569; + padding: 4px 10px; + border-radius: 8px; + font-size: 0.75rem; + font-weight: 700; + display: inline-block; + box-shadow: 0 2px 4px rgba(0,0,0,0.04); + transition: all 0.2s; + max-width: 100%; + word-break: break-word; + } + .tag-item:hover { + transform: translateY(-1px); + box-shadow: 0 4px 6px rgba(0,0,0,0.08); + } + .tag-item-material { + border-left: 4px solid #4361ee; + background-color: #f8faff; + } + .tag-item-angulo { + border-left: 4px solid #f72585; + background-color: #fff5f9; + }
@@ -277,19 +326,19 @@ foreach ($videos as $v) {
OrdenCosto Publicitario Inversión Total Promo 1Recaudo 1 (Auto)Promo 2Recaudo 2 (Auto)Promo 3Recaudo 3 (Auto)
No hay videos registrados en producción.No hay videos registrados en producción.
@@ -125,6 +160,21 @@ $costos = $stmt->fetchAll(PDO::FETCH_ASSOC); + + + + + + + + + +
- - - - - - - - - - - - - + + + + + + + + + + + + + @@ -320,14 +369,32 @@ foreach ($videos as $v) { - -
#Fecha EntregaProductoImagenMaterialÁnguloInsp. LandingVideo Ref.Link VideoLink LandingLink FlyerEstadoAcción # Fecha Entrega Producto Imagen Material Ángulo Insp. Landing Video Ref. Link Video Link Landing Link Flyer Estado Acción
-
- +
+
+ + + -'; ?>
-
- +
+
+ + + -'; ?>
@@ -464,19 +531,28 @@ foreach ($videos as $v) { Orden:
- MATERIAL: -

- -

+ MATERIAL: +
+ + + No especificado'; ?> +