diff --git a/.antigravityrules b/.antigravityrules
new file mode 100644
index 0000000..5a2df77
--- /dev/null
+++ b/.antigravityrules
@@ -0,0 +1,5 @@
+# Antigravity AI Rules
+
+1. **Permiso explícito obligatorio para modificar archivos**:
+ - El asistente de IA **NUNCA** debe crear, modificar o eliminar ningún archivo del espacio de trabajo sin la autorización previa y explícita del usuario en el chat.
+ - El asistente debe presentar la propuesta detallada (como un diff o explicación de las líneas a cambiar) y esperar a que el usuario confirme (ej. "procede", "aplica el cambio") antes de ejecutar cualquier herramienta de escritura o modificación de archivos.
diff --git a/jsCode.js b/jsCode.js
index 9e215c5..9b7dc03 100644
--- a/jsCode.js
+++ b/jsCode.js
@@ -1980,18 +1980,7 @@ $('#accionHabilidadEspecial').click(function () {
guardaSesion()
}
} else if (accionQuincenal === 'Ordenar los próximos 5 proyectos') {
- // Actualizamos lastUsed
- setArrayValue(elArreglo, 'accionEspecialLastUsed', quincenaActual)
-
- // Aquí el código de Investigación y Desarrollo: "Ordenar los próximos 5 proyectos"
- window.alert(
- '¡Acción especial activada (Investigación y Desarrollo)!'
- )
-
- // Se guarda el avance
- if (typeof guardaSesion === 'function') {
- guardaSesion()
- }
+ abrirDialogoOrdenarProyectos(elArreglo, quincenaActual);
} else if (accionQuincenal === 'Omitir un mantenimiento') {
// Actualizamos lastUsed
setArrayValue(elArreglo, 'accionEspecialLastUsed', quincenaActual)
@@ -3706,4 +3695,83 @@ window.confirm = function (message, callback, customWidth) {
},
})
}
+
+function abrirDialogoOrdenarProyectos(elArreglo, quincenaActual) {
+ let proyectosAOrdenar = siguientesProyectos.slice(0, 5);
+ let proyectosRestantes = siguientesProyectos.slice(5);
+
+ let container = $('
');
+ container.append('Arrastra los proyectos para ordenar la prioridad en la que aparecerán:
');
+
+ let list = $('');
+ proyectosAOrdenar.forEach((p, idx) => {
+ let item = $(`
+
+ ${idx + 1}. ${p.nombreProyecto}
+ ${p.departamento}
+
+ `);
+ list.append(item);
+ });
+ container.append(list);
+
+ container.dialog({
+ modal: true,
+ title: 'Ordenar Próximos 5 Proyectos',
+ width: 500,
+ open: function() {
+ list.sortable({
+ placeholder: "ui-state-highlight",
+ forcePlaceholderSize: true,
+ update: function(event, ui) {
+ list.find('li').each(function(index) {
+ let nombre = $(this).find('span').first().text();
+ nombre = nombre.replace(/^\d+\.\s*/, '');
+ $(this).find('span').first().text((index + 1) + '. ' + nombre);
+ });
+ }
+ });
+ list.disableSelection();
+ $('').appendTo('head');
+ },
+ close: function() {
+ $('#sortable-style').remove();
+ $(this).dialog('destroy').remove();
+ },
+ buttons: {
+ "Guardar Orden": function() {
+ let nuevoOrdenIds = [];
+ list.find('li').each(function() {
+ nuevoOrdenIds.push(parseInt($(this).data('id')));
+ });
+
+ let nuevosSiguientes = [];
+ nuevoOrdenIds.forEach(id => {
+ let proj = proyectos.find(p => p.id === id);
+ if (proj) nuevosSiguientes.push(proj);
+ });
+
+ nuevosSiguientes = nuevosSiguientes.concat(proyectosRestantes);
+ siguientesProyectos = nuevosSiguientes;
+
+ proyectos.forEach(p => {
+ if (p.estatus === 'En siguientes') p.estatus = 'Pendiente';
+ });
+ siguientesProyectos.forEach(p => {
+ let proj = proyectos.find(pr => pr.id === p.id);
+ if (proj) proj.estatus = 'En siguientes';
+ });
+
+ setArrayValue(elArreglo, 'accionEspecialLastUsed', quincenaActual);
+ var audio = new Audio('./Microwave_bell.wav');
+ audio.play();
+ window.alert('¡Orden de proyectos actualizado con éxito!');
+
+ if (typeof guardaSesion === 'function') guardaSesion();
+ $(this).dialog('close');
+ },
+ "Cancelar": function() { $(this).dialog('close'); }
+ }
+ });
+}
//
diff --git a/resumen.php b/resumen.php
index cdc67e1..fe532ff 100644
--- a/resumen.php
+++ b/resumen.php
@@ -214,6 +214,27 @@
.nav-button:hover {
background-color: #0056b3;
}
+
+ /* Estilos para que los diálogos/alertas jQuery UI se muestren de color rojo (carmesí) */
+ .ui-dialog-titlebar {
+ background-color: crimson;
+ color: white;
+ }
+
+ .ui-widget.ui-widget-content {
+ border-color: crimson;
+ border-width: 5px;
+ }
+
+ .ui-dialog .ui-dialog-content {
+ font-size: 16px;
+ font-weight: bold;
+ text-align: center;
+ }
+
+ .ui-dialog .ui-dialog-buttonpane button {
+ font-size: 17px;
+ }
@@ -408,6 +429,12 @@
+
+
+ |
+ HE:
+ |
+
@@ -441,6 +468,12 @@
+
+
+ |
+ HE:
+ |
+
@@ -474,6 +507,12 @@
+
+
+ |
+ HE:
+ |
+
@@ -507,6 +546,12 @@
+
+
+ |
+ HE:
+ |
+
@@ -540,6 +585,12 @@
+
+
+ |
+ HE:
+ |
+
@@ -573,6 +624,12 @@
+
+
+ |
+ HE:
+ |
+
@@ -648,6 +705,16 @@
// Actualizar activos
deptoCard.find('#activoCh1').text(findArrayValue(deptoArr, 'activo1'));
deptoCard.find('#activoCh2').text(findArrayValue(deptoArr, 'activo2'));
+
+ // Mostrar/Ocultar Habilidad Especial si ya se acreditó
+ const accionEspecial = findArrayValue(deptoArr, 'accionEspecialQuincenal');
+ const rowHE = deptoCard.find('.fila-habilidad-especial');
+ if (accionEspecial && accionEspecial !== '') {
+ rowHE.find('.texto-habilidad-especial').text(accionEspecial);
+ rowHE.show();
+ } else {
+ rowHE.hide();
+ }
}
function actualizarResumenUI() {
@@ -1173,6 +1240,9 @@
$(this).dialog('destroy').remove();
},
});
+ } else if (accionQuincenal === 'Ordenar los próximos 5 proyectos') {
+ alert('Esta habilidad especial solo se puede utilizar desde el tablero de juego.');
+ return;
} else {
// Para las demás habilidades que solo muestran un mensaje
setArrayValue(elArreglo, 'accionEspecialLastUsed', quincenaActual);