iberck
11/18/2017 - 3:00 AM

Acumula lo contestado en el cuadro de conocimiento

Acumula lo contestado en el cuadro de conocimiento

Agrega lo contestado de P2-P7 en las otras menciones de P1A

////////////// ACCUMULATE CUADRO DE CONOCIMIENTO
function accumulateCuadroConocimiento() {
    var valuesAccumulateMap = {};
    accumulateMultipleValues("P3A", valuesAccumulateMap);
    accumulateMultipleValues("P4", valuesAccumulateMap);
    accumulateMultipleValues("P5", valuesAccumulateMap);
    accumulateMultipleValues("P6", valuesAccumulateMap);
    accumulateSingleValue("P7", valuesAccumulateMap);
    accumulateSingleValue("P8", valuesAccumulateMap);
    accumulateSingleValue("P9", valuesAccumulateMap);
    accumulateSingleValue("P10", valuesAccumulateMap);
    
    // excluir lo elegido en P3 y NINGUNA(999)
    excludeValues([getEnterValue("P3"), "999"], valuesAccumulateMap);

    // En P3A (otras menciones) debe asignarse la respuesta de lo acumulado
    var selectedOpts = new JSONArray();
    var mapValueAliasP3A = createMapValueAlias("P3A");
    for (var val in valuesAccumulateMap) {
        if (val in mapValueAliasP3A) {
            var alias = mapValueAliasP3A[val];
            selectedOpts.put(alias); // alias válido para P3A
        }
    }

    var node = ApiClient.findQuestionOptions("P3A");
    var answer1 = ApiClient.findAnswerOptions("P3A");
    answer1.setOptions(selectedOpts);
    // Establecer en P3A los textos de las opciones otra de los alias indicados
    var accumulativeOtherTexts = getAccumulativeOtherText(["P3A", "P4", "P5", "P6", "P7", "P8", "P9", "P10"]);
    answer1.setOtherText(accumulativeOtherTexts);
    answer1.setOptionsShowOrder(node.getVisibleOptionsJSONArray());
}

// Agrega el valor elegido en la pregunta de opciones simples "alias" dentro de map
function accumulateSingleValue(alias, map) {
    var val = getEnterValue(alias);
    if (val!=-1) {
        map[val] = true;    
    }
}

// obtiene el valor elegido en la pregunta de opciones simples "alias"
function getEnterValue(alias) {
    var answerOpts = ApiClient.findAnswerOptions(alias);
    if (answerOpts!=null) {
        var value = ApiClient.findItem(answerOpts.getEnterOption()).getValue();
        return value;    
    }
    return -1;
}

// Agrega los valores elegidos en la pregunta de opciones múltiples "alias" dentro de map
function accumulateMultipleValues(alias, map) {
    var valuesSel = getEnterValues(alias);
    for (var i = 0; i < valuesSel.length; i++) {
        var val = valuesSel[i];
        map[val] = true;
    }
}

// obtiene los valores elegidos en la pregunta de opciones múltiples "alias"
function getEnterValues(alias) {
    var valuesSel = [];
    var answerOpts = ApiClient.findAnswerOptions(alias);
    if (answerOpts!=null) {
        var enterOptions = answerOpts.getEnterOptions();
        for (var i = 0; i < enterOptions.length(); i++) {
            var optAlias = enterOptions.get(i);
            var opt = ApiClient.findItem(optAlias);
            valuesSel.push(opt.getValue());
        }    
    }

    return valuesSel;
}

// Crea un mapa con el formato: map[value]=alias con las opciones de la pregunta "alias"
function createMapValueAlias(alias) {
    var mapValueAlias = {}; // 
    var pThis=ApiClient.findQuestionOptions(alias);
    var thisOpts = pThis.getOptions();
    for (var i = 0; i < thisOpts.length; i++) {
        var opt = thisOpts[i];
        mapValueAlias[opt.getValue()] = opt.getAlias();
    }
    return mapValueAlias;
}

// Elimina los valores dentro del array "values" de map
function excludeValues(values, map) {
    for (var i = 0; i < values.length; i++) {
        var val = values[i];
        if (val in map) {
            delete map[val];    
        }
    }
}

// Retorna los textos de la opción otra de las preguntas contenidas en "aliasesArray" separados por "," valueOther es el valor de la opción otra en el conjunto de preguntas
function getAccumulativeOtherText(aliasesArray) {
    var accumulativeOtherTexts = "";
    for (var i = 0; i < aliasesArray.length; i++) {
        var alias = aliasesArray[i];
        var valuesSel = getEnterValues(alias);
        var answer = ApiClient.findAnswerOptions(alias);
        if (answer!=null) {
            var otherText = answer.getEnterOtherText();
            if (otherText!=null && otherText.trim()!="") {
                if (accumulativeOtherTexts.indexOf(otherText)==-1) {
                    accumulativeOtherTexts = accumulativeOtherTexts=="" ? otherText : accumulativeOtherTexts + "," + otherText;    
                }
            }
        }
    }

    return accumulativeOtherTexts;
}