Welcome to the LimeSurvey Community Forum

Ask the community, share ideas, and connect with other LimeSurvey users!

Se puede adaptar con JAVASCRIPT?

  • gerism81
  • gerism81's Avatar Topic Author
  • Offline
  • Senior Member
  • Senior Member
More
1 month 1 day ago #267981 by gerism81
Se puede adaptar con JAVASCRIPT? was created by gerism81
Ayúdenos a ayudarle y rellene los siguientes campos:.
Su versión de LimeSurvey: 6.6.2+240827 
Servidor propio o LimeSurvey Cloud: Propio
Plantilla de diseño utilizada: Vanilla
==================
Buenos días compañeros,

Estoy realizando un cuestionario y hay un apartado sobre bajas laborales sobre el cual me gustaria adaptar código JAVA para minimizar errores. Adjunto lss de muestra.

El tema está en la p3, cuando se pregunta sobre las bajas indicadas en la p2. La pregunta está planteada como tipo matriz. En las filas aparecen tantas bajas como las descritas en p2, y en las columnas se pregunta sobre fecha inicio y fin de la baja, un código para cada baja que todos los que han re contestar tienen (alfanumérico de 10 dígitos) y un  último apartado abierto para anotar el diagnóstico. 
 Con mis limitados conocimientos de java i la IA he intentado hacer un código para insertar en p3 que está también en el archivo.

Qué me gustaría intentar hacer para minimizar errores y depuración:
Empezando por el final, y eso lo he conseguido: limitar el número de caracteres en la columna "Diagnóstico" y limitar a codigo alfanumérico de 10 digitos en la columna "Código".
En lo referente a las fechas:
1. Me gustaría poner un formato de fecha para que todas sean iguales y así poder trabajar mejor con ellas. 
2. Que la fecha inicial fuera 01-01-2020 y la final la fecha actual.
3. Tema comprobaciones: Que la fecha final no pueda ser anterior a la fecha inicial
4. Que si en la pregunta p1 se marca "Sí, y aun estoy de baja", la fecha final de la última baja (por ejemplo si en p2 se han marcado 3 bajas) o no se pueda marcar....o se ponga la fecha ne la que responde el cuestionario...o algo similar.

Mas que nada que me da miedo trabajar con fechas que tengan formatos distintos... que haya incongruencias de inicio y fin y luego ya no se puedan modificar....

No sé si lo que busco es muy complicado.... entiendo que con conocimientos de JAVAscript no tanto, pero mis conocimientos en este campo son muy limitados.
Muchas gracias 

File Attachment:

File Name: limesurvey...6145.lss
File Size:72 KB







 

Please Log in to join the conversation.

  • gerism81
  • gerism81's Avatar Topic Author
  • Offline
  • Senior Member
  • Senior Member
More
3 weeks 3 days ago #268095 by gerism81
Replied by gerism81 on topic Se puede adaptar con JAVASCRIPT?
Aquí dejo el código utilizado hasta ahora que no termina de funcionar en lo relacionado con las fechas:

<script>
$(document).on('ready pjax:scriptcomplete', function () {
var thisQuestion = $('#question{QID}');
var today = new Date().toISOString().split('T')[0]; // Fecha actual en formato yyyy-mm-dd

// Limitar la fecha máxima al día actual
thisQuestion.find('input[type="date"]').attr('max', today);

// Validar que la fecha de fin no sea anterior a la de inicio
thisQuestion.find('.answer-item.answer_cell_b').on('change', function () {
var startDate = $(this).closest('tr').find('.answer-item.answer_cell_a input').val();
var endDate = $(this).val();

if (startDate && endDate && startDate > endDate) {
alert('La fecha de fin no puede ser anterior a la fecha de inicio.');
$(this).addClass('error');
} else {
$(this).removeClass('error');
}
});

// Insertar la fecha actual si "Sigue de baja" está seleccionado
$('#answerp19').on('change', function () {
if ($(this).val() === '1') { // 1: Sigue de baja
var numBaixes = parseInt($('#answerp20').val(), 10); // Número de bajas
if (!isNaN(numBaixes) && numBaixes > 0) {
var lastRow = thisQuestion.find('table tbody tr').eq(numBaixes - 1).find('.answer-item.answer_cell_b input');
lastRow.val(today); // Configura la fecha actual
lastRow.attr('readonly', true); // Hace que el campo no sea editable
lastRow.removeClass('error');
}
} else {
thisQuestion.find('input[type="date"]').attr('readonly', false); // Permite editar las fechas nuevamente
}
});

// Validación para evitar fechas duplicadas
thisQuestion.find('input[type="date"]').on('change', function () {
var dates = [];
var hasDuplicates = false;

thisQuestion.find('input[type="date"]').each(function () {
var dateVal = $(this).val();
if (dateVal) {
if (dates.includes(dateVal)) {
hasDuplicates = true;
}
dates.push(dateVal);
}
});

if (hasDuplicates) {
alert('Las fechas no pueden estar duplicadas.');
$(this).addClass('error');
} else {
$(this).removeClass('error');
}
});

// Estilo para campos con error
$('head').append('<style>.error { border-color: red; }</style>');
});
</script>

Please Log in to join the conversation.

  • Joffm
  • Joffm's Avatar
  • Away
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
3 weeks 1 day ago - 3 weeks 1 day ago #268121 by Joffm
Replied by Joffm on topic Se puede adaptar con JAVASCRIPT?
Hola, solamente con ExpressionScript para la validación  y un poquito de javascript para deactivar los campos.
Code:
<script type="text/javascript" charset="utf-8">
    $(document).on('ready pjax:scriptcomplete',function(){
         var baja='{p1}';
         var numbajas='{p2}';
      
        if (baja==1) {
           $("#answer{SGQ}"+numbajas+"_b").prop('disabled', true);
        }
});
</script>

Aqui he usado para entrar las fechas.
[url] github.com/RobinHerbots/Inputmask [/url]
No esta necessario.
 

 

 

 

Joffm

Edit: Claro un se tiene que estar "posterior" en la ultima screenshot

 

Volunteers are not paid.
Not because they are worthless, but because they are priceless
Last edit: 3 weeks 1 day ago by Joffm.

Please Log in to join the conversation.

Moderators: holchtpartner

Lime-years ahead

Online-surveys for every purse and purpose