- Boton de habilidades especiales en resumen

- Descartar un proyecto implementado
This commit is contained in:
2026-06-10 21:47:26 -06:00
parent 3d5e5a6cc2
commit f361c22f4c
2 changed files with 187 additions and 51 deletions
+143 -7
View File
@@ -949,6 +949,82 @@ function llenaSiguienteProyectoChico() {
// }
}
/**
* Redibuja todo el tablero de proyectos (grande y chicos) basado en el estado actual.
*/
function redibujarTablero() {
console.log('Redibujando tablero de proyectos...')
// 1. Determinar cuál será el nuevo proyecto grande.
let nuevoProyectoGde = null
// Prioridad 1: El que ya era grande, si sigue 'En proceso'.
if (
proyectoGdeActual !== '' &&
proyectos[proyectoGdeActual] &&
proyectos[proyectoGdeActual].estatus === 'En proceso'
) {
nuevoProyectoGde = proyectos[proyectoGdeActual]
} else {
// Prioridad 2: El primer proyecto 'En proceso' que se encuentre.
nuevoProyectoGde = proyectos.find((p) => p.estatus === 'En proceso')
}
// Prioridad 3: Si no hay ninguno 'En proceso', tomar el primero de la cola 'En siguientes'.
if (!nuevoProyectoGde) {
nuevoProyectoGde = proyectos.find((p) => p.estatus === 'En siguientes')
}
// 2. Limpiar todos los slots de proyectos chicos.
for (let i = 1; i <= 7; i++) {
limpiaProyectoChico('proyecto_' + i)
}
ultimoProyectoLlenado = 0 // Resetear contador
// 3. Llenar o limpiar el proyecto grande.
if (nuevoProyectoGde) {
llenaProyectoGde(nuevoProyectoGde.id)
} else {
limpiarProyectoGde()
proyectoGdeActual = '' // Asegurarse de que el ID del proyecto grande se limpie.
}
// 4. Llenar los proyectos chicos con los restantes 'En proceso'.
const idProyectoGde = nuevoProyectoGde ? nuevoProyectoGde.id : -1
const proyectosEnTableroChico = proyectos.filter(
(p) => p.estatus === 'En proceso' && p.id !== idProyectoGde
)
proyectosEnTableroChico.forEach((proyecto) => {
llenaProyectoChico(proyecto.id - 1)
})
// 5. Asegurarse de que la cola de 'siguientesProyectos' esté actualizada.
obtenerProyectosPendientes()
}
/**
* Limpia la vista del proyecto grande.
*/
function limpiarProyectoGde() {
$('#TablaProyectoGde').attr('num', '').css('background-color', 'white')
$('#nombreProyectoGde').html('')
$('#descripcionProyectoGde').html('')
$('#TablaProyectoGde #puntosGanados').html('')
$('#puntosPerdidos').html('')
$('#imagenProyectoGde').attr('src', '')
for (let i = 1; i <= 3; i++) {
$('#activoReqProyectoNom' + i)
.attr('class', 'actNinguno')
.text('')
$('#activoReqProyectoCantX' + i).text('')
$('#activoReqProyectoCant' + i)
.attr('class', 'actNinguno')
.text('')
}
$('#mantoGde').text('MANTENIMIENTO')
}
/**
* Checks if the current project is completed and updates its status and the UI accordingly.
*/
@@ -1932,15 +2008,75 @@ $('#accionHabilidadEspecial').click(function () {
'Descartar un proyecto (se va al limbo con todo y activos)'
) {
// Actualizamos lastUsed
setArrayValue(elArreglo, 'accionEspecialLastUsed', quincenaActual)
const proyectosEnProceso = proyectos.filter(
(p) => p.estatus === 'En proceso'
)
// Aquí el código de Operaciones: "Descartar un proyecto (se va al limbo con todo y activos)"
window.alert('¡Acción especial activada (Operaciones)!')
// Se guarda el avance
if (typeof guardaSesion === 'function') {
guardaSesion()
if (proyectosEnProceso.length === 0) {
alert('No hay proyectos en proceso para descartar.')
return // No se usa la habilidad si no hay nada que descartar
}
// Crear y mostrar el diálogo de selección
let dialogContent = $(
'<div><p>Selecciona el proyecto a descartar:</p></div>'
)
let projectList = $('<form>')
proyectosEnProceso.forEach((p) => {
projectList.append(
`<div style="display: flex; align-items: flex-start; margin: 8px 0; text-align: left;">
<input type="radio" id="proj-discard-${p.id}" name="proyectoADescartar" value="${p.id}" style="margin-top: 2px; flex-shrink: 0;">
<label for="proj-discard-${p.id}" style="margin-left: 8px; cursor: pointer;">
${p.nombreProyecto} <span style="color: #555; font-size: 0.9em;">(${p.departamento})</span>
</label>
</div>`
)
})
dialogContent.append(projectList)
dialogContent.dialog({
modal: true,
title: 'Descartar Proyecto',
width: 450,
buttons: {
Descartar: function () {
const selectedProjectId = $(
'input[name="proyectoADescartar"]:checked'
).val()
if (!selectedProjectId) {
alert('Por favor, selecciona un proyecto.')
return
}
const proyectoADescartar = proyectos.find(
(p) => p.id == selectedProjectId
)
if (proyectoADescartar) {
proyectoADescartar.estatus = 'descartado'
setArrayValue(
elArreglo,
'accionEspecialLastUsed',
quincenaActual
)
redibujarTablero()
var audio = new Audio('./Microwave_bell.wav')
audio.play()
alert('¡Proyecto descartado con éxito!')
if (typeof guardaSesion === 'function') {
guardaSesion()
}
}
$(this).dialog('close')
},
Cancelar: function () {
$(this).dialog('close')
},
},
close: function () {
$(this).dialog('destroy').remove()
},
})
} else {
// Acción desconocida (o Finanzas si llegara hasta aquí por error, aunque se bloquea antes)
window.alert(