- 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
+44 -44
View File
@@ -2,8 +2,8 @@
"arregloGeneral": { "arregloGeneral": {
"usuario": "omar", "usuario": "omar",
"empresa": "Ludoteca Empresarial", "empresa": "Ludoteca Empresarial",
"quincena": 2, "quincena": "4",
"proyectoGdeActual": 71, "proyectoGdeActual": 56,
"nombreSesion": "cheve", "nombreSesion": "cheve",
"trimestre1": 98100, "trimestre1": 98100,
"trimestre2": 0, "trimestre2": 0,
@@ -708,15 +708,15 @@
}, },
{ {
"name": "recursoTiempo", "name": "recursoTiempo",
"value": 30 "value": 27
}, },
{ {
"name": "recursoPersonal", "name": "recursoPersonal",
"value": 29 "value": 27
}, },
{ {
"name": "recursoCapital", "name": "recursoCapital",
"value": 29 "value": 27
}, },
{ {
"name": "habilidadTiempo", "name": "habilidadTiempo",
@@ -766,7 +766,7 @@
}, },
{ {
"name": "activo2", "name": "activo2",
"value": 20 "value": 23
}, },
{ {
"name": "activo2Tipo", "name": "activo2Tipo",
@@ -774,15 +774,15 @@
}, },
{ {
"name": "recursoTiempo", "name": "recursoTiempo",
"value": 26 "value": 27
}, },
{ {
"name": "recursoPersonal", "name": "recursoPersonal",
"value": 30 "value": 27
}, },
{ {
"name": "recursoCapital", "name": "recursoCapital",
"value": 26 "value": 27
}, },
{ {
"name": "habilidadTiempo", "name": "habilidadTiempo",
@@ -824,7 +824,7 @@
}, },
{ {
"name": "activo1", "name": "activo1",
"value": 20 "value": 22
}, },
{ {
"name": "activo1Tipo", "name": "activo1Tipo",
@@ -832,7 +832,7 @@
}, },
{ {
"name": "activo2", "name": "activo2",
"value": 20 "value": 22
}, },
{ {
"name": "activo2Tipo", "name": "activo2Tipo",
@@ -840,15 +840,15 @@
}, },
{ {
"name": "recursoTiempo", "name": "recursoTiempo",
"value": 30 "value": 28
}, },
{ {
"name": "recursoPersonal", "name": "recursoPersonal",
"value": 30 "value": 27
}, },
{ {
"name": "recursoCapital", "name": "recursoCapital",
"value": 30 "value": 27
}, },
{ {
"name": "habilidadTiempo", "name": "habilidadTiempo",
@@ -898,7 +898,7 @@
}, },
{ {
"name": "activo2", "name": "activo2",
"value": 21 "value": 25
}, },
{ {
"name": "activo2Tipo", "name": "activo2Tipo",
@@ -906,15 +906,15 @@
}, },
{ {
"name": "recursoTiempo", "name": "recursoTiempo",
"value": 29 "value": 27
}, },
{ {
"name": "recursoPersonal", "name": "recursoPersonal",
"value": 29 "value": 27
}, },
{ {
"name": "recursoCapital", "name": "recursoCapital",
"value": 30 "value": 27
}, },
{ {
"name": "habilidadTiempo", "name": "habilidadTiempo",
@@ -956,7 +956,7 @@
}, },
{ {
"name": "activo1", "name": "activo1",
"value": 21 "value": 23
}, },
{ {
"name": "activo1Tipo", "name": "activo1Tipo",
@@ -964,7 +964,7 @@
}, },
{ {
"name": "activo2", "name": "activo2",
"value": 21 "value": 22
}, },
{ {
"name": "activo2Tipo", "name": "activo2Tipo",
@@ -972,15 +972,15 @@
}, },
{ {
"name": "recursoTiempo", "name": "recursoTiempo",
"value": 28 "value": 25
}, },
{ {
"name": "recursoPersonal", "name": "recursoPersonal",
"value": 28 "value": 26
}, },
{ {
"name": "recursoCapital", "name": "recursoCapital",
"value": 30 "value": 27
}, },
{ {
"name": "habilidadTiempo", "name": "habilidadTiempo",
@@ -1004,7 +1004,7 @@
}, },
{ {
"name": "accionEspecialLastUsed", "name": "accionEspecialLastUsed",
"value": 0 "value": 4
}, },
{ {
"name": "accionEspecialPeriodicidad", "name": "accionEspecialPeriodicidad",
@@ -1030,7 +1030,7 @@
}, },
{ {
"name": "activo2", "name": "activo2",
"value": 21 "value": 23
}, },
{ {
"name": "activo2Tipo", "name": "activo2Tipo",
@@ -1038,15 +1038,15 @@
}, },
{ {
"name": "recursoTiempo", "name": "recursoTiempo",
"value": 29 "value": 27
}, },
{ {
"name": "recursoPersonal", "name": "recursoPersonal",
"value": 24 "value": 23
}, },
{ {
"name": "recursoCapital", "name": "recursoCapital",
"value": 25 "value": 27
}, },
{ {
"name": "habilidadTiempo", "name": "habilidadTiempo",
@@ -1119,7 +1119,7 @@
"morados": null, "morados": null,
"activoAsignado1": 0, "activoAsignado1": 0,
"activoAsignado2": 0, "activoAsignado2": 0,
"activoAsignado3": 1, "activoAsignado3": 0,
"mantenimiento": "N\/A", "mantenimiento": "N\/A",
"imagen": "2-onboarding.jpg", "imagen": "2-onboarding.jpg",
"puntosGanados": 1, "puntosGanados": 1,
@@ -1146,7 +1146,7 @@
"morados": null, "morados": null,
"activoAsignado1": 0, "activoAsignado1": 0,
"activoAsignado2": 0, "activoAsignado2": 0,
"activoAsignado3": 1, "activoAsignado3": 0,
"mantenimiento": "N\/A", "mantenimiento": "N\/A",
"imagen": "3Prestaciones.jpg", "imagen": "3Prestaciones.jpg",
"puntosGanados": 1, "puntosGanados": 1,
@@ -1298,7 +1298,7 @@
"morados": null, "morados": null,
"activoAsignado1": 0, "activoAsignado1": 0,
"activoAsignado2": 0, "activoAsignado2": 0,
"activoAsignado3": 3, "activoAsignado3": 0,
"mantenimiento": "2T 2P 1C", "mantenimiento": "2T 2P 1C",
"imagen": "9Capacitacion.jpg", "imagen": "9Capacitacion.jpg",
"puntosGanados": 4, "puntosGanados": 4,
@@ -1400,7 +1400,7 @@
"morados": 1, "morados": 1,
"activoAsignado1": 0, "activoAsignado1": 0,
"activoAsignado2": 0, "activoAsignado2": 0,
"activoAsignado3": 1, "activoAsignado3": 0,
"mantenimiento": "N\/A", "mantenimiento": "N\/A",
"imagen": "13PuntoVenta.jpg", "imagen": "13PuntoVenta.jpg",
"puntosGanados": 1, "puntosGanados": 1,
@@ -1477,7 +1477,7 @@
"morados": 1, "morados": 1,
"activoAsignado1": 0, "activoAsignado1": 0,
"activoAsignado2": 0, "activoAsignado2": 0,
"activoAsignado3": 1, "activoAsignado3": 0,
"mantenimiento": "1T 1P 1C", "mantenimiento": "1T 1P 1C",
"imagen": "16EstudioMercado.jpg", "imagen": "16EstudioMercado.jpg",
"puntosGanados": 2, "puntosGanados": 2,
@@ -1604,7 +1604,7 @@
"morados": null, "morados": null,
"activoAsignado1": 2, "activoAsignado1": 2,
"activoAsignado2": 2, "activoAsignado2": 2,
"activoAsignado3": 3, "activoAsignado3": 0,
"mantenimiento": "2T 2P 1C", "mantenimiento": "2T 2P 1C",
"imagen": "21TiendaLinea.jpg", "imagen": "21TiendaLinea.jpg",
"puntosGanados": 4, "puntosGanados": 4,
@@ -1755,8 +1755,8 @@
"rojos": null, "rojos": null,
"morados": 1, "morados": 1,
"activoAsignado1": 1, "activoAsignado1": 1,
"activoAsignado2": 1, "activoAsignado2": 0,
"activoAsignado3": 1, "activoAsignado3": 0,
"mantenimiento": "N\/A", "mantenimiento": "N\/A",
"imagen": "27CarteraVencida.jpg", "imagen": "27CarteraVencida.jpg",
"puntosGanados": 1, "puntosGanados": 1,
@@ -1783,7 +1783,7 @@
"morados": 2, "morados": 2,
"activoAsignado1": 2, "activoAsignado1": 2,
"activoAsignado2": 1, "activoAsignado2": 1,
"activoAsignado3": 2, "activoAsignado3": 0,
"mantenimiento": "1T 1P 1C", "mantenimiento": "1T 1P 1C",
"imagen": "28Franquicias.jpg", "imagen": "28Franquicias.jpg",
"puntosGanados": 2, "puntosGanados": 2,
@@ -1810,7 +1810,7 @@
"morados": null, "morados": null,
"activoAsignado1": 2, "activoAsignado1": 2,
"activoAsignado2": 2, "activoAsignado2": 2,
"activoAsignado3": 1, "activoAsignado3": 0,
"mantenimiento": "1T 1P 1C", "mantenimiento": "1T 1P 1C",
"imagen": "29AperturaTiendas.jpg", "imagen": "29AperturaTiendas.jpg",
"puntosGanados": 2, "puntosGanados": 2,
@@ -1936,7 +1936,7 @@
"rojos": 1, "rojos": 1,
"morados": 1, "morados": 1,
"activoAsignado1": 1, "activoAsignado1": 1,
"activoAsignado2": 1, "activoAsignado2": 0,
"activoAsignado3": 1, "activoAsignado3": 1,
"mantenimiento": "N\/A", "mantenimiento": "N\/A",
"imagen": "34HombreDeNegro", "imagen": "34HombreDeNegro",
@@ -1954,7 +1954,7 @@
"nombreProyecto": "Incidencia", "nombreProyecto": "Incidencia",
"descripcion": "El d\u00f3lar por las nubes", "descripcion": "El d\u00f3lar por las nubes",
"departamento": "FINANZAS", "departamento": "FINANZAS",
"estatus": "Pendiente", "estatus": "En siguientes",
"dificultad": "Incidencia", "dificultad": "Incidencia",
"amarillo": 1, "amarillo": 1,
"naranjas": null, "naranjas": null,
@@ -2693,7 +2693,7 @@
"nombreProyecto": "Centro de distribuci\u00f3n", "nombreProyecto": "Centro de distribuci\u00f3n",
"descripcion": "Abrir nuevo centro de distribuci\u00f3n", "descripcion": "Abrir nuevo centro de distribuci\u00f3n",
"departamento": "OPERACIONES", "departamento": "OPERACIONES",
"estatus": "Pendiente", "estatus": "En siguientes",
"dificultad": 2, "dificultad": 2,
"amarillo": 1, "amarillo": 1,
"naranjas": 2, "naranjas": 2,
@@ -2768,7 +2768,7 @@
"nombreProyecto": "Planta industrial", "nombreProyecto": "Planta industrial",
"descripcion": "Construir la nueva planta industrial", "descripcion": "Construir la nueva planta industrial",
"departamento": "OPERACIONES", "departamento": "OPERACIONES",
"estatus": "En proceso", "estatus": "descartado",
"dificultad": 3, "dificultad": 3,
"amarillo": 3, "amarillo": 3,
"naranjas": 2, "naranjas": 2,
@@ -2895,7 +2895,7 @@
"nombreProyecto": "Incidencia", "nombreProyecto": "Incidencia",
"descripcion": "Accidentalmente se entregaron 50 cajas de calcetines sin par", "descripcion": "Accidentalmente se entregaron 50 cajas de calcetines sin par",
"departamento": "OPERACIONES", "departamento": "OPERACIONES",
"estatus": "En proceso", "estatus": "descartado",
"dificultad": "Incidencia", "dificultad": "Incidencia",
"amarillo": null, "amarillo": null,
"naranjas": null, "naranjas": null,
@@ -2903,7 +2903,7 @@
"azules": null, "azules": null,
"rojos": 2, "rojos": 2,
"morados": null, "morados": null,
"activoAsignado1": 0, "activoAsignado1": 1,
"activoAsignado2": 0, "activoAsignado2": 0,
"activoAsignado3": 0, "activoAsignado3": 0,
"mantenimiento": "N\/A", "mantenimiento": "N\/A",
+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. * 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)' 'Descartar un proyecto (se va al limbo con todo y activos)'
) { ) {
// Actualizamos lastUsed // 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)" if (proyectosEnProceso.length === 0) {
window.alert('¡Acción especial activada (Operaciones)!') alert('No hay proyectos en proceso para descartar.')
return // No se usa la habilidad si no hay nada que descartar
// Se guarda el avance
if (typeof guardaSesion === 'function') {
guardaSesion()
} }
// 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 { } else {
// Acción desconocida (o Finanzas si llegara hasta aquí por error, aunque se bloquea antes) // Acción desconocida (o Finanzas si llegara hasta aquí por error, aunque se bloquea antes)
window.alert( window.alert(