Se activa la seleccion del depto activo, se corrige el arrastre de activos y de recursos, falta arreglar el acomodo de los recursos en los deptos.

This commit is contained in:
2026-06-10 00:15:27 -06:00
parent 38950c105c
commit 3d5e5a6cc2
+244 -160
View File
@@ -93,7 +93,9 @@
} }
/* Estilos para los departamentos en una columna */ /* Estilos para los departamentos en una columna */
.departamentos.card { /* Se ajusta el selector para que apunte a los .card dentro de la columna de departamentos,
restaurando el borde gris y eliminando el padding para que la tabla se ajuste. */
.column-depts .card {
padding: 0; padding: 0;
border: solid 3px gray; border: solid 3px gray;
} }
@@ -222,6 +224,7 @@
<body> <body>
<div class="main-container"> <div class="main-container">
<!-- ================================================================= <!-- =================================================================
@@ -374,58 +377,168 @@
================================================================== --> ================================================================== -->
<div class="column column-depts"> <div class="column column-depts">
<h2>DEPARTAMENTOS</h2> <h2>DEPARTAMENTOS</h2>
<?php
$deptos = [
["id" => "MarketingYVentas", "nombre" => "MARKETING Y VENTAS", "img" => "depto-marketing.png", "act1_class" => "actPersonalCalificado", "act2_class" => "actFlujoDeEfectivo"],
["id" => "Finanzas", "nombre" => "FINANZAS", "img" => "depto-finanzas.png", "act1_class" => "actFlujoDeEfectivo", "act2_class" => "actCreditoEInversion"],
["id" => "InvestigacionYDesarrollo", "nombre" => "INVESTIGACIÓN Y DESARROLLO", "img" => "depto-investigacion.png", "act1_class" => "actCreditoEInversion", "act2_class" => "actTecnologia"],
["id" => "LogisticaYSistemas", "nombre" => "LOGÍSTICA Y SISTEMAS", "img" => "depto-logistica.png", "act1_class" => "actTecnologia", "act2_class" => "actTransporteYMaquinaria"],
["id" => "Operaciones", "nombre" => "OPERACIONES", "img" => "depto-operaciones.png", "act1_class" => "actTransporteYMaquinaria", "act2_class" => "actAnalistas"],
["id" => "RecursosHumanos", "nombre" => "RECURSOS HUMANOS", "img" => "depto-recursos.png", "act1_class" => "actPersonalCalificado", "act2_class" => "actAnalistas"]
];
foreach ($deptos as $depto) { <!-- MarketingYVentas -->
?> <div class="card">
<div class="card departamentos droppable-asset-recovery" id="<?= $depto['id'] ?>"> <table style="width:100%;" class="departamentos droppableRecursos droppable-asset-recovery" id="MarketingYVentas">
<table style="width:100%;"> <tr style="border-bottom: 1px solid gray; height: 35px;">
<tr style="border-bottom: 1px solid gray; height: 35px;"> <td style="width: 70%;"><span id="nombreDeptoCh">MARKETING Y VENTAS</span></td>
<td style="width: 70%;"><span id="nombreDeptoCh"><?= $depto['nombre'] ?></span></td> <td style="text-align:right;" colspan="2">
<td style="text-align:right;"> <span style="border:1px solid black;padding:5px;" class="actPersonalCalificado draggable activo-item" id="activoCh1">0</span>
<span style="border:1px solid black;padding:5px;" class="<?= $depto['act1_class'] ?> draggable activo-item" id="activoCh1">0</span> <span style="border:1px solid black;padding:5px;" class="actFlujoDeEfectivo draggable activo-item" id="activoCh2">0</span>
<span style="border:1px solid black;padding:5px;" class="<?= $depto['act2_class'] ?> draggable activo-item" id="activoCh2">0</span> </td>
</td> </tr>
</tr> <tr style="vertical-align:middle;">
<tr style="vertical-align:middle;"> <td style="text-align:center;">
<td colspan="2"> <img src="img/tiempoCH.png" style="width: 30px; height: 30px; vertical-align: middle;">
<table style="width:100%;"> <div style="vertical-align:middle; display:inline-block; font-weight:bold; font-size:16px;" id="tiempoCh" class="draggable recurso-item">0</div>
<tr> </td>
<td style="text-align:center;"> <td style="text-align:center;">
<img src="img/tiempoCH.png" style="width: 30px; height: 30px; vertical-align: middle;"> <img src="img/personalCH.png" style="width: 30px; height: 30px; vertical-align: middle;">
<span style="vertical-align:middle; font-weight:bold; font-size:16px;" id="tiempoCh" class="draggable recurso-item recurso-tiempo">0</span> <div style="vertical-align:middle; display:inline-block; font-weight:bold; font-size:16px;" id="personalCh" class="draggable recurso-item">0</div>
<div class="beneficio-recurso beneficio-tiempo" style="font-size: 12px; font-weight: bold; color: #28a745;"></div> </td>
</td> <td style="text-align:center;">
<td style="text-align:center;"> <img src="img/capitalCH.png" style="width: 30px; height: 30px; vertical-align: middle;">
<img src="img/personalCH.png" style="width: 30px; height: 30px; vertical-align: middle;"> <div style="vertical-align:middle; display:inline-block; font-weight:bold; font-size:16px;" id="capitalCh" class="draggable recurso-item">0</div>
<span style="vertical-align:middle; font-weight:bold; font-size:16px;" id="personalCh" class="draggable recurso-item recurso-personal">0</span> </td>
<div class="beneficio-recurso beneficio-personal" style="font-size: 12px; font-weight: bold; color: #28a745;"></div> </tr>
</td> </table>
<td style="text-align:center;"> </div>
<img src="img/capitalCH.png" style="width: 30px; height: 30px; vertical-align: middle;">
<span style="vertical-align:middle; font-weight:bold; font-size:16px;" id="capitalCh" class="draggable recurso-item recurso-capital">0</span> <!-- Finanzas -->
<div class="beneficio-recurso beneficio-capital" style="font-size: 12px; font-weight: bold; color: #28a745;"></div> <div class="card">
</td> <table style="width:100%;" class="departamentos droppableRecursos droppable-asset-recovery" id="Finanzas">
</tr> <tr style="border-bottom: 1px solid gray; height: 35px;">
</table> <td style="width: 70%;"><span id="nombreDeptoCh">FINANZAS</span></td>
</td> <td style="text-align:right;" colspan="2">
</tr> <span style="border:1px solid black;padding:5px;" class="actFlujoDeEfectivo draggable activo-item" id="activoCh1">0</span>
<tr style="border-top: 1px solid gray;"> <span style="border:1px solid black;padding:5px;" class="actCreditoEInversion draggable activo-item" id="activoCh2">0</span>
<td colspan="2" style="font-size:11px; text-align:center; background-color: #e0e0e0;"> </td>
Habilidad Especial: <span id="accionEspecialGde" style="font-weight:bold;"></span> </tr>
</td> <tr style="vertical-align:middle;">
</tr> <td style="text-align:center;">
</table> <img src="img/tiempoCH.png" style="width: 30px; height: 30px; vertical-align: middle;">
</div> <div style="vertical-align:middle; display:inline-block; font-weight:bold; font-size:16px;" id="tiempoCh" class="draggable recurso-item">0</div>
<?php } ?> </td>
<td style="text-align:center;">
<img src="img/personalCH.png" style="width: 30px; height: 30px; vertical-align: middle;">
<div style="vertical-align:middle; display:inline-block; font-weight:bold; font-size:16px;" id="personalCh" class="draggable recurso-item">0</div>
</td>
<td style="text-align:center;">
<img src="img/capitalCH.png" style="width: 30px; height: 30px; vertical-align: middle;">
<div style="vertical-align:middle; display:inline-block; font-weight:bold; font-size:16px;" id="capitalCh" class="draggable recurso-item">0</div>
</td>
</tr>
</table>
</div>
<!-- InvestigacionYDesarrollo -->
<div class="card">
<table style="width:100%;" class="departamentos droppableRecursos droppable-asset-recovery" id="InvestigacionYDesarrollo">
<tr style="border-bottom: 1px solid gray; height: 35px;">
<td style="width: 70%;"><span id="nombreDeptoCh">INVESTIGACIÓN Y DESARROLLO</span></td>
<td style="text-align:right;" colspan="2">
<span style="border:1px solid black;padding:5px;" class="actCreditoEInversion draggable activo-item" id="activoCh1">0</span>
<span style="border:1px solid black;padding:5px;" class="actTecnologia draggable activo-item" id="activoCh2">0</span>
</td>
</tr>
<tr style="vertical-align:middle;">
<td style="text-align:center;">
<img src="img/tiempoCH.png" style="width: 30px; height: 30px; vertical-align: middle;">
<div style="vertical-align:middle; display:inline-block; font-weight:bold; font-size:16px;" id="tiempoCh" class="draggable recurso-item">0</div>
</td>
<td style="text-align:center;">
<img src="img/personalCH.png" style="width: 30px; height: 30px; vertical-align: middle;">
<div style="vertical-align:middle; display:inline-block; font-weight:bold; font-size:16px;" id="personalCh" class="draggable recurso-item">0</div>
</td>
<td style="text-align:center;">
<img src="img/capitalCH.png" style="width: 30px; height: 30px; vertical-align: middle;">
<div style="vertical-align:middle; display:inline-block; font-weight:bold; font-size:16px;" id="capitalCh" class="draggable recurso-item">0</div>
</td>
</tr>
</table>
</div>
<!-- LogisticaYSistemas -->
<div class="card">
<table style="width:100%;" class="departamentos droppableRecursos droppable-asset-recovery" id="LogisticaYSistemas">
<tr style="border-bottom: 1px solid gray; height: 35px;">
<td style="width: 70%;"><span id="nombreDeptoCh">LOGÍSTICA Y SISTEMAS</span></td>
<td style="text-align:right;" colspan="2">
<span style="border:1px solid black;padding:5px;" class="actTecnologia draggable activo-item" id="activoCh1">0</span>
<span style="border:1px solid black;padding:5px;" class="actTransporteYMaquinaria draggable activo-item" id="activoCh2">0</span>
</td>
</tr>
<tr style="vertical-align:middle;">
<td style="text-align:center;">
<img src="img/tiempoCH.png" style="width: 30px; height: 30px; vertical-align: middle;">
<div style="vertical-align:middle; display:inline-block; font-weight:bold; font-size:16px;" id="tiempoCh" class="draggable recurso-item">0</div>
</td>
<td style="text-align:center;">
<img src="img/personalCH.png" style="width: 30px; height: 30px; vertical-align: middle;">
<div style="vertical-align:middle; display:inline-block; font-weight:bold; font-size:16px;" id="personalCh" class="draggable recurso-item">0</div>
</td>
<td style="text-align:center;">
<img src="img/capitalCH.png" style="width: 30px; height: 30px; vertical-align: middle;">
<div style="vertical-align:middle; display:inline-block; font-weight:bold; font-size:16px;" id="capitalCh" class="draggable recurso-item">0</div>
</td>
</tr>
</table>
</div>
<!-- Operaciones -->
<div class="card">
<table style="width:100%;" class="departamentos droppableRecursos droppable-asset-recovery" id="Operaciones">
<tr style="border-bottom: 1px solid gray; height: 35px;">
<td style="width: 70%;"><span id="nombreDeptoCh">OPERACIONES</span></td>
<td style="text-align:right;" colspan="2">
<span style="border:1px solid black;padding:5px;" class="actTransporteYMaquinaria draggable activo-item" id="activoCh1">0</span>
<span style="border:1px solid black;padding:5px;" class="actAnalistas draggable activo-item" id="activoCh2">0</span>
</td>
</tr>
<tr style="vertical-align:middle;">
<td style="text-align:center;">
<img src="img/tiempoCH.png" style="width: 30px; height: 30px; vertical-align: middle;">
<div style="vertical-align:middle; display:inline-block; font-weight:bold; font-size:16px;" id="tiempoCh" class="draggable recurso-item">0</div>
</td>
<td style="text-align:center;">
<img src="img/personalCH.png" style="width: 30px; height: 30px; vertical-align: middle;">
<div style="vertical-align:middle; display:inline-block; font-weight:bold; font-size:16px;" id="personalCh" class="draggable recurso-item">0</div>
</td>
<td style="text-align:center;">
<img src="img/capitalCH.png" style="width: 30px; height: 30px; vertical-align: middle;">
<div style="vertical-align:middle; display:inline-block; font-weight:bold; font-size:16px;" id="capitalCh" class="draggable recurso-item">0</div>
</td>
</tr>
</table>
</div>
<!-- RecursosHumanos -->
<div class="card">
<table style="width:100%;" class="departamentos droppableRecursos droppable-asset-recovery" id="RecursosHumanos">
<tr style="border-bottom: 1px solid gray; height: 35px;">
<td style="width: 70%;"><span id="nombreDeptoCh">RECURSOS HUMANOS</span></td>
<td style="text-align:right;" colspan="2">
<span style="border:1px solid black;padding:5px;" class="actPersonalCalificado draggable activo-item" id="activoCh1">0</span>
<span style="border:1px solid black;padding:5px;" class="actAnalistas draggable activo-item" id="activoCh2">0</span>
</td>
</tr>
<tr style="vertical-align:middle;">
<td style="text-align:center;">
<img src="img/tiempoCH.png" style="width: 30px; height: 30px; vertical-align: middle;">
<div style="vertical-align:middle; display:inline-block; font-weight:bold; font-size:16px;" id="tiempoCh" class="draggable recurso-item">0</div>
</td>
<td style="text-align:center;">
<img src="img/personalCH.png" style="width: 30px; height: 30px; vertical-align: middle;">
<div style="vertical-align:middle; display:inline-block; font-weight:bold; font-size:16px;" id="personalCh" class="draggable recurso-item">0</div>
</td>
<td style="text-align:center;">
<img src="img/capitalCH.png" style="width: 30px; height: 30px; vertical-align: middle;">
<div style="vertical-align:middle; display:inline-block; font-weight:bold; font-size:16px;" id="capitalCh" class="draggable recurso-item">0</div>
</td>
</tr>
</table>
</div>
</div> </div>
<!-- ================================================================= <!-- =================================================================
@@ -463,12 +576,7 @@
actualizarResumenUI(); actualizarResumenUI();
}; };
// En resumen.php, la función llenaDepartamentoGde no tiene utilidad y causa problemas. // YA NO SE NECESITA la función local `llenaDepartamentoGde` porque ahora usamos la de jsCode.js
// La sobrescribimos para que no haga nada y así evitamos que deshabilite el 'drop' en las tarjetas.
function llenaDepartamentoGde(depto) {
console.log(`[RESUMEN] Se bloqueó la llamada a llenaDepartamentoGde para el depto: ${depto}`);
// No hacer nada es la solución.
}
function formatCurrency(value) { function formatCurrency(value) {
return new Intl.NumberFormat('es-MX', { return new Intl.NumberFormat('es-MX', {
@@ -480,8 +588,8 @@
} }
/** /**
* Actualiza correctamente la UI de una tarjeta de departamento en la pantalla de resumen, * Actualiza la UI de una tarjeta de departamento en la pantalla de resumen.
* usando selectores de clase para evitar conflictos con IDs duplicados. * Usa IDs porque ahora la estructura es como en colaborando2.php
*/ */
function actualizarTarjetaDepto(deptoId) { function actualizarTarjetaDepto(deptoId) {
const deptoArr = arreglosDeptos['arr' + deptoId]; const deptoArr = arreglosDeptos['arr' + deptoId];
@@ -490,50 +598,13 @@
if (!deptoArr || !deptoCard.length) return; if (!deptoArr || !deptoCard.length) return;
// Actualizar recursos // Actualizar recursos
deptoCard.find('.recurso-tiempo').text(findArrayValue(deptoArr, 'recursoTiempo')); deptoCard.find('#tiempoCh').text(findArrayValue(deptoArr, 'recursoTiempo'));
deptoCard.find('.recurso-personal').text(findArrayValue(deptoArr, 'recursoPersonal')); deptoCard.find('#personalCh').text(findArrayValue(deptoArr, 'recursoPersonal'));
deptoCard.find('.recurso-capital').text(findArrayValue(deptoArr, 'recursoCapital')); deptoCard.find('#capitalCh').text(findArrayValue(deptoArr, 'recursoCapital'));
// --- START: NEW LOGIC FOR BENEFITS ---
// Limpiar beneficios anteriores
deptoCard.find('.beneficio-recurso').text('');
const skillSlots = ['habilidadTiempo', 'habilidadPersonal', 'habilidadCapital'];
skillSlots.forEach(slot => {
const skillName = findArrayValue(deptoArr, slot);
if (skillName && arreglosCapacitaciones[skillName]) {
const skillData = arreglosCapacitaciones[skillName];
const beneficio = findArrayValue(skillData, 'beneficio');
const tipoRecurso = findArrayValue(skillData, 'tipoRecurso');
if (beneficio !== 0) { // Solo mostrar si hay beneficio
let targetClass = '';
let resourceChar = '';
if (tipoRecurso === 'Tiempo') {
targetClass = '.beneficio-tiempo';
resourceChar = 'T';
} else if (tipoRecurso === 'Personal') {
targetClass = '.beneficio-personal';
resourceChar = 'P';
} else if (tipoRecurso === 'Capital') {
targetClass = '.beneficio-capital';
resourceChar = 'C';
}
if (targetClass) {
deptoCard.find(targetClass).text(`${beneficio}${resourceChar}`);
}
}
}
});
// --- END: NEW LOGIC FOR BENEFITS ---
// Actualizar activos // Actualizar activos
deptoCard.find('.activo-item').first().text(findArrayValue(deptoArr, 'activo1')); deptoCard.find('#activoCh1').text(findArrayValue(deptoArr, 'activo1'));
deptoCard.find('.activo-item').last().text(findArrayValue(deptoArr, 'activo2')); deptoCard.find('#activoCh2').text(findArrayValue(deptoArr, 'activo2'));
deptoCard.find('#accionEspecialGde').text(findArrayValue(deptoArr, 'accionEspecialQuincenal'));
} }
function actualizarResumenUI() { function actualizarResumenUI() {
@@ -657,6 +728,9 @@
// --- 5. Inicializar todas las interacciones de Drag & Drop --- // --- 5. Inicializar todas las interacciones de Drag & Drop ---
inicializarInteraccionesDragDrop(); inicializarInteraccionesDragDrop();
// --- 6. Seleccionar el primer departamento para activar la vista
// La función original en jsCode.js ya se encarga de esto al final de `continuamos()`
} }
function crearTarjetaProyecto(proyecto, esCompletado) { function crearTarjetaProyecto(proyecto, esCompletado) {
@@ -724,7 +798,7 @@
function inicializarInteraccionesDragDrop() { function inicializarInteraccionesDragDrop() {
console.log("[RESUMEN] Inicializando interacciones de Drag & Drop..."); console.log("[RESUMEN] Inicializando interacciones de Drag & Drop...");
// 1. DRAGGABLE: Activos recuperables de proyectos terminados // 1. DRAGGABLE: Hacemos arrastrables los activos de proyectos terminados.
$('.asset-recover').draggable({ $('.asset-recover').draggable({
revert: "invalid", revert: "invalid",
helper: "clone", helper: "clone",
@@ -736,25 +810,64 @@
} }
}); });
// 2. DRAGGABLE: Recursos intercambiables entre departamentos // La lógica DRAGGABLE para los recursos del departamento activo ya está en jsCode.js.
$('.column-depts .recurso-item').draggable({
revert: "invalid",
helper: "clone",
start: function(event, ui) {
const sourceDeptoId = $(this).closest('.departamentos').attr('id');
ui.helper.data('source-depto', sourceDeptoId);
ui.helper.css('z-index', 100);
}
});
// 3. DROPPABLE: Tarjetas de departamento que aceptan activos Y recursos // 2. DROPPABLE: Se crea UN SOLO manejador para las tablas de departamento,
$('.droppable-asset-recovery').droppable({ // que acepta tanto recursos como activos, evitando que una inicialización
accept: ".asset-recover, .recurso-item", // Acepta ambos tipos de elementos // sobrescriba a la otra.
$('.departamentos.droppableRecursos').droppable({
accept: ".recurso-item, .asset-recover", // Acepta ambos tipos de elementos.
drop: function(event, ui) { drop: function(event, ui) {
$(this).css('background-color', ''); // Limpiar feedback visual al soltar console.log(`[DROP EVENT] -> Elemento soltado en: ${this.id}. Elemento arrastrado:`, ui.draggable[0]);
// LÓGICA PARA RECURSOS (adaptada de jsCode.js)
if (ui.draggable.hasClass('recurso-item')) {
console.log("[DROP EVENT] -> Es un 'recurso-item'. Ejecutando lógica de intercambio.");
var droppedText = ui.draggable.text();
var originalValue = parseInt(droppedText) || 0;
// <<<< LÍNEA CLAVE: Regresa el elemento a su posición original >>>>
ui.draggable.css({
top: originalPosition.top,
left: originalPosition.left
});
if (originalValue === 0) {
console.log("[DROP EVENT] -> Recurso de origen tiene 0. Cancelando.");
return;
}
var newValue = originalValue - 1;
var audio = new Audio('./Microwave_bell.wav');
audio.play();
// Actualiza el texto del elemento original que se está arrastrando
ui.draggable.text(newValue);
// Determina qué tipo de recurso es y actualiza los arreglos y la UI
if (ui.draggable.attr("id") == 'recursoDispTiempoGde') {
$('#' + this.id + ' #tiempoCh').text(parseInt($('#' + this.id + ' #tiempoCh').text()) + 1);
setArrayValue(arreglosDeptos['arr' + this.id], 'recursoTiempo', parseInt($('#' + this.id + ' #tiempoCh').text()));
setArrayValue(arreglosDeptos['arr' + deptoActual], 'recursoTiempo', newValue);
$('#' + deptoActual + ' #tiempoCh').text(newValue);
} else if (ui.draggable.attr("id") == 'recursoDispPersonalGde') {
$('#' + this.id + ' #personalCh').text(parseInt($('#' + this.id + ' #personalCh').text()) + 1);
setArrayValue(arreglosDeptos['arr' + this.id], 'recursoPersonal', parseInt($('#' + this.id + ' #personalCh').text()));
setArrayValue(arreglosDeptos['arr' + deptoActual], 'recursoPersonal', newValue);
$('#' + deptoActual + ' #personalCh').text(newValue);
} else if (ui.draggable.attr("id") == 'recursoDispCapitalGde') {
$('#' + this.id + ' #capitalCh').text(parseInt($('#' + this.id + ' #capitalCh').text()) + 1);
setArrayValue(arreglosDeptos['arr' + this.id], 'recursoCapital', parseInt($('#' + this.id + ' #capitalCh').text()));
setArrayValue(arreglosDeptos['arr' + deptoActual], 'recursoCapital', newValue);
$('#' + deptoActual + ' #capitalCh').text(newValue);
}
}
// LÓGICA PARA ACTIVOS (la que ya estaba en resumen.php)
else if (ui.draggable.hasClass('asset-recover')) {
console.log("[DROP EVENT] -> Es un 'asset-recover'. Ejecutando lógica de recuperación.");
// --- LÓGICA PARA SOLTAR ACTIVOS ---
if (ui.draggable.hasClass('asset-recover')) {
const deptoId = $(this).attr('id'); const deptoId = $(this).attr('id');
const assetType = ui.draggable.data('asset-type'); const assetType = ui.draggable.data('asset-type');
const assetElementId = ui.draggable.attr('id'); const assetElementId = ui.draggable.attr('id');
@@ -786,20 +899,17 @@
const currentCount = parseInt(assetElement.text()); const currentCount = parseInt(assetElement.text());
assetElement.text(currentCount - 1); assetElement.text(currentCount - 1);
// --- INICIO: CORRECCIÓN PARA ACTUALIZAR ARREGLO DE PROYECTOS --- const assetIdParts = assetElementId.split('-');
const assetIdParts = assetElementId.split('-'); // e.g., "asset-15-0"
const projectId = parseInt(assetIdParts[1]); const projectId = parseInt(assetIdParts[1]);
const assetIndex = parseInt(assetIdParts[2]); // 0-based index const assetIndex = parseInt(assetIdParts[2]);
const projectToUpdate = proyectos.find(p => p.id === projectId); const projectToUpdate = proyectos.find(p => p.id === projectId);
if (projectToUpdate) { if (projectToUpdate) {
const assetSlotName = `activoAsignado${assetIndex + 1}`; const assetSlotName = `activoAsignado${assetIndex + 1}`;
if (projectToUpdate[assetSlotName] > 0) { if (projectToUpdate[assetSlotName] > 0) {
projectToUpdate[assetSlotName]--; projectToUpdate[assetSlotName]--;
console.log(`[RESUMEN] Activo recuperado del proyecto ${projectId}. Slot: ${assetSlotName}, nuevo valor: ${projectToUpdate[assetSlotName]}`);
} }
} }
// --- FIN: CORRECCIÓN ---
actualizarTarjetaDepto(deptoId); actualizarTarjetaDepto(deptoId);
var audio = new Audio('./Microwave_bell.wav'); var audio = new Audio('./Microwave_bell.wav');
audio.play(); audio.play();
@@ -813,58 +923,32 @@
alert("Recursos insuficientes en el departamento para recuperar este activo."); alert("Recursos insuficientes en el departamento para recuperar este activo.");
} }
} }
// --- LÓGICA PARA SOLTAR RECURSOS ---
else if (ui.draggable.hasClass('recurso-item')) {
const targetDeptoId = $(this).attr('id');
const sourceDeptoId = ui.helper.data('source-depto');
if (!sourceDeptoId || targetDeptoId === sourceDeptoId) return;
let resourceType = '';
if (ui.draggable.hasClass('recurso-tiempo')) resourceType = 'recursoTiempo';
if (ui.draggable.hasClass('recurso-personal')) resourceType = 'recursoPersonal';
if (ui.draggable.hasClass('recurso-capital')) resourceType = 'recursoCapital';
if (!resourceType) return;
const sourceDeptoArr = arreglosDeptos['arr' + sourceDeptoId];
const targetDeptoArr = arreglosDeptos['arr' + targetDeptoId];
const sourceVal = findArrayValue(sourceDeptoArr, resourceType);
if (sourceVal > 0) {
const targetVal = findArrayValue(targetDeptoArr, resourceType);
setArrayValue(sourceDeptoArr, resourceType, sourceVal - 1);
setArrayValue(targetDeptoArr, resourceType, targetVal + 1);
actualizarTarjetaDepto(sourceDeptoId);
actualizarTarjetaDepto(targetDeptoId);
var audio = new Audio('./Microwave_bell.wav');
audio.play();
}
}
}, },
over: function(event, ui) { over: function(event, ui) {
if (ui.draggable.hasClass('recurso-item') && $(this).attr('id') !== ui.helper.data('source-depto')) { // Lógica combinada para el 'over'
$(this).css('background-color', '#e9f5e9'); if (ui.draggable.hasClass('recurso-item') && $(this).attr('id') !== deptoActual) {
$(this).parent().css('background-color', '#e9f5e9'); // Pinta el div.card
} else if (ui.draggable.hasClass('asset-recover')) { } else if (ui.draggable.hasClass('asset-recover')) {
$(this).css('background-color', '#e9f5e9'); $(this).parent().css('background-color', '#e9f5e9'); // Pinta el div.card
} }
}, },
out: function(event, ui) { out: function(event, ui) {
$(this).css('background-color', ''); $(this).parent().css('background-color', ''); // Limpia el color del div.card
} }
}); });
} }
// Listener para los botones de quincena para actualizar la UI // Listener para los botones de quincena para actualizar la UI
$('#bMas, #bMenos').on('click', function() { $('#bMas, #bMenos').on('click', function() {
// Pequeño delay para asegurar que el valor del input se actualice antes de leerlo
setTimeout(actualizarResumenUI, 100); setTimeout(actualizarResumenUI, 100);
}); });
// El listener para el click en .departamentos ya está en jsCode.js y funcionará ahora
</script> </script>
</body> </body>
</html> </html>