es.tekniker.framework.ktek.questionnaire.mng.db.QuestionnaireManagerDB.java Source code

Java tutorial

Introduction

Here is the source code for es.tekniker.framework.ktek.questionnaire.mng.db.QuestionnaireManagerDB.java

Source

/*
*
* Copyright 2015 IK4-Tekniker All Rights Reserved
*
* This file is part of Health Questionnaire SE at FISTAR https://www.fi-star.eu/  
*
* Health Questionnaire SE is free software: you can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* Health Questionnaire SE is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero
* General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Health Questionnaire SE. If not, see http://www.gnu.org/licenses/.
*
* For those usages not covered by this license please contact with
* patricia.casla at tekniker dot es
*
* Author: Ignacio Lazaro Llorente
*/
package es.tekniker.framework.ktek.questionnaire.mng.db;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Criteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.hibernate.transform.Transformers;
import org.orm.PersistentException;
import org.orm.PersistentSession;
import org.orm.PersistentTransaction;

import es.tekniker.framework.ktek.Ktek_answer;
import es.tekniker.framework.ktek.Ktek_answerCriteria;
import es.tekniker.framework.ktek.Ktek_answersetCriteria;
import es.tekniker.framework.ktek.Ktek_formatquestionnaire;
import es.tekniker.framework.ktek.Ktek_formatquestionnaireCriteria;
import es.tekniker.framework.ktek.Ktek_parameter;
import es.tekniker.framework.ktek.Ktek_parameterCriteria;
import es.tekniker.framework.ktek.Ktek_qitem_sectionCriteria;
import es.tekniker.framework.ktek.Ktek_qsection_questionnaireCriteria;
import es.tekniker.framework.ktek.Ktek_question;
import es.tekniker.framework.ktek.Ktek_questionCriteria;
import es.tekniker.framework.ktek.Ktek_questionnaire;
import es.tekniker.framework.ktek.Ktek_questionnaireCriteria;
import es.tekniker.framework.ktek.Ktek_questionnaireconfiguration;
import es.tekniker.framework.ktek.Ktek_questionnaireitem;
import es.tekniker.framework.ktek.Ktek_questionnaireitemCriteria;
import es.tekniker.framework.ktek.Ktek_questionnairesection;
import es.tekniker.framework.ktek.Ktek_questionnairesectionCriteria;
import es.tekniker.framework.ktek.Ktek_result_questionnaire;
import es.tekniker.framework.ktek.Ktek_result_questionnaireCriteria;
import es.tekniker.framework.ktek.Ktek_result_questionnaireitem;
import es.tekniker.framework.ktek.Ktek_result_questionnaireitemCriteria;
import es.tekniker.framework.ktek.Ktek_result_questionnairesection;
import es.tekniker.framework.ktek.Ktek_result_questionnairesectionCriteria;
import es.tekniker.framework.ktek.Ktek_unit;
import es.tekniker.framework.ktek.Ktek_unitCriteria;
import es.tekniker.framework.ktek.Ktek_userquestionnaire_planning;
import es.tekniker.framework.ktek.Ktek_userquestionnaire_planningCriteria;
import es.tekniker.framework.ktek.commons.mng.server.CommonsMngServer;
import es.tekniker.framework.ktek.dao.Ktek_answerDAO;
import es.tekniker.framework.ktek.dao.Ktek_formatquestionnaireDAO;
import es.tekniker.framework.ktek.dao.Ktek_parameterDAO;
import es.tekniker.framework.ktek.dao.Ktek_questionDAO;
import es.tekniker.framework.ktek.dao.Ktek_questionnaireDAO;
import es.tekniker.framework.ktek.dao.Ktek_questionnaireconfigurationDAO;
import es.tekniker.framework.ktek.dao.Ktek_questionnaireitemDAO;
import es.tekniker.framework.ktek.dao.Ktek_questionnairesectionDAO;
import es.tekniker.framework.ktek.dao.Ktek_result_questionnaireDAO;
import es.tekniker.framework.ktek.dao.Ktek_result_questionnaireitemDAO;
import es.tekniker.framework.ktek.dao.Ktek_result_questionnairesectionDAO;
import es.tekniker.framework.ktek.dao.Ktek_unitDAO;
import es.tekniker.framework.ktek.dao.Ktek_userquestionnaire_planningDAO;
import es.tekniker.framework.ktek.entity.KtekExceptionEntity;
import es.tekniker.framework.ktek.exception.KtekExceptionCode;
import es.tekniker.framework.ktek.exception.KtekExceptionMessage;
import es.tekniker.framework.ktek.questionaire.mng.defines.KtekQuestionnaireItemResultType;
import es.tekniker.framework.ktek.questionaire.mng.defines.KtekQuestionnaireItemType;
import es.tekniker.framework.ktek.questionaire.mng.defines.KtekQuestionnaireParameterType;
import es.tekniker.framework.ktek.questionaire.mng.defines.KtekQuestionnaireQuestionFormatAnswerUniqueType;
import es.tekniker.framework.ktek.questionaire.mng.defines.KtekQuestionnaireStatus;
import es.tekniker.framework.ktek.questionaire.mng.defines.KtekQuestionnaireType;
import es.tekniker.framework.ktek.questionnaire.DAOFactory;
import es.tekniker.framework.ktek.questionnaire.mng.bo.KtekQuestionnaireItemResultDataEntity;
import es.tekniker.framework.ktek.questionnaire.mng.bo.KtekQuestionnaireResultDataEntity;
import es.tekniker.framework.ktek.questionnaire.mng.bo.KtekQuestionnaireResultEntity;
import es.tekniker.framework.ktek.questionnaire.mng.bo.KtekQuestionnaireItemResultEntity;
import es.tekniker.framework.ktek.questionnaire.mng.bo.KtekQuestionnaireSectionResultDataEntity;
import es.tekniker.framework.ktek.questionnaire.mng.bo.KtekQuestionnaireSectionResultEntity;
import es.tekniker.framework.ktek.util.Utils;

public class QuestionnaireManagerDB {

    private static final Log log = LogFactory.getLog(QuestionnaireManagerDB.class);

    public Ktek_questionnaire getQuestionnaireModel(int idquestionnaire) {

        Ktek_questionnaire instance = null;

        PersistentSession session = null;
        DAOFactory lDAOFactory = null;
        Ktek_questionnaireDAO instanceDAO = null;
        Ktek_questionnaireCriteria objKtek_questionnaireCriteria = null;
        long nowInMillis = 0;
        try {
            nowInMillis = Utils.getCalendarGMT().getTimeInMillis();

            session = es.tekniker.framework.ktek.questionnaire.KTEKPersistentManager.instance().getSession();
            session.beginTransaction();

            lDAOFactory = es.tekniker.framework.ktek.questionnaire.DAOFactory.getDAOFactory();
            instanceDAO = lDAOFactory.getKtek_questionnaireDAO();

            objKtek_questionnaireCriteria = new Ktek_questionnaireCriteria();
            objKtek_questionnaireCriteria.isdeleted.eq((short) 0);
            objKtek_questionnaireCriteria.datevalidfrom.lt(nowInMillis);

            objKtek_questionnaireCriteria.add(Restrictions.or(Restrictions.isNull("datevalidto"),
                    Restrictions.gt("datevalidto", nowInMillis)));

            objKtek_questionnaireCriteria.ktek_pk_idquestionnaire.eq(idquestionnaire);
            instance = instanceDAO.loadKtek_questionnaireByCriteria(objKtek_questionnaireCriteria);

            session.close();

            if (instance != null) {
                log.debug("getQuestionnaireModel is not null ");
            } else {
                log.debug("getQuestionnaireModel is null ");
            }

        } catch (Exception e) {
            log.error("getQuestionnaireModel Exception " + e.getMessage());
            e.printStackTrace();
            try {
                if (session != null)
                    session.close();
            } catch (PersistentException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }
        return instance;
    }

    public Ktek_formatquestionnaire getQuestionnaireAssessmentConfiguration(int idquestionnaire) {
        Ktek_formatquestionnaire instance = null;

        PersistentSession session = null;
        DAOFactory lDAOFactory = null;
        Ktek_formatquestionnaireDAO instanceDAO = null;
        Ktek_formatquestionnaireCriteria objKtek_formatquestionnaireCriteria = null;
        Ktek_questionnaireCriteria objKtek_fk_questionnaireCriteria = null;
        long nowInMillis = 0;

        try {
            nowInMillis = Utils.getCalendarGMT().getTimeInMillis();

            session = es.tekniker.framework.ktek.questionnaire.KTEKPersistentManager.instance().getSession();
            session.beginTransaction();

            lDAOFactory = es.tekniker.framework.ktek.questionnaire.DAOFactory.getDAOFactory();
            instanceDAO = lDAOFactory.getKtek_formatquestionnaireDAO();

            objKtek_formatquestionnaireCriteria = new Ktek_formatquestionnaireCriteria();
            objKtek_fk_questionnaireCriteria = objKtek_formatquestionnaireCriteria
                    .createKtek_fk_questionnaireCriteria();
            objKtek_fk_questionnaireCriteria.ktek_pk_idquestionnaire.eq(idquestionnaire);
            objKtek_fk_questionnaireCriteria.isdeleted.eq((short) 0);
            objKtek_fk_questionnaireCriteria.datevalidfrom.lt(nowInMillis);
            objKtek_fk_questionnaireCriteria.add(Restrictions.or(Restrictions.isNull("datevalidto"),
                    Restrictions.gt("datevalidto", nowInMillis)));

            instance = instanceDAO.loadKtek_formatquestionnaireByCriteria(objKtek_formatquestionnaireCriteria);

            session.close();

            if (instance != null) {
                log.debug("getQuestionnaireAssesmentConfiguration is not null ");
            } else {
                log.debug("getQuestionnaireAssesmentConfiguration is null ");
            }

        } catch (Exception e) {
            log.error("getQuestionnaireAssesmentConfiguration Exception " + e.getMessage());
            e.printStackTrace();
            try {
                if (session != null)
                    session.close();
            } catch (PersistentException e1) {
                e1.printStackTrace();
            }
        }
        return instance;
    }

    public Ktek_questionnairesection[] getQuestionnaireAssessmentSectionList(int idquestionnaire) {
        Ktek_questionnairesection[] instanceArray = null;

        PersistentSession session = null;
        DAOFactory lDAOFactory = null;
        Ktek_questionnairesectionDAO instanceDAO = null;
        Ktek_questionnairesectionCriteria objKtek_questionnairesectionCriteria = null;
        Ktek_qsection_questionnaireCriteria objKtek_qsection_questionnaireCriteria = null;
        Ktek_questionnaireCriteria objKtek_fk_idquestionnaireCriteria = null;
        long nowInMillis = 0;

        try {
            nowInMillis = Utils.getCalendarGMT().getTimeInMillis();

            session = es.tekniker.framework.ktek.questionnaire.KTEKPersistentManager.instance().getSession();
            session.beginTransaction();

            lDAOFactory = es.tekniker.framework.ktek.questionnaire.DAOFactory.getDAOFactory();
            instanceDAO = lDAOFactory.getKtek_questionnairesectionDAO();
            objKtek_questionnairesectionCriteria = new Ktek_questionnairesectionCriteria();
            objKtek_qsection_questionnaireCriteria = objKtek_questionnairesectionCriteria
                    .createKtek_qsection_questionnaireCriteria();
            objKtek_qsection_questionnaireCriteria.ktek_fk_idquestionnaire_ktek_pk_idquestionnaire
                    .eq(idquestionnaire);

            objKtek_fk_idquestionnaireCriteria = objKtek_qsection_questionnaireCriteria
                    .createKtek_fk_idquestionnaireCriteria();
            objKtek_fk_idquestionnaireCriteria.ktek_pk_idquestionnaire.eq(idquestionnaire);
            objKtek_fk_idquestionnaireCriteria.isdeleted.eq((short) 0);
            objKtek_fk_idquestionnaireCriteria.datevalidfrom.lt(nowInMillis);

            objKtek_fk_idquestionnaireCriteria.add(Restrictions.or(Restrictions.isNull("datevalidto"),
                    Restrictions.gt("datevalidto", nowInMillis)));

            instanceArray = instanceDAO
                    .listKtek_questionnairesectionByCriteria(objKtek_questionnairesectionCriteria);

            session.close();

            if (instanceArray != null) {
                log.debug("getQuestionnaireAssesmentSectionList is not null ");
            } else {
                log.debug("getQuestionnaireAssesmentSectionList is null ");
            }

        } catch (Exception e) {
            log.error("getQuestionnaireAssesmentSectionList Exception " + e.getMessage());
            e.printStackTrace();
            try {
                if (session != null)
                    session.close();
            } catch (PersistentException e1) {
                e1.printStackTrace();
            }
        }
        return instanceArray;
    }

    public Ktek_questionnaireitem[] getQuestionnaireItemList4Section(int idQuestionaireSection) {
        Ktek_questionnaireitem[] instanceArray = null;

        PersistentSession session = null;
        DAOFactory lDAOFactory = null;
        Ktek_questionnaireitemDAO instanceDAO = null;
        Ktek_questionnaireitemCriteria objKtek_questionnaireitemCriteria = null;
        Ktek_qitem_sectionCriteria objKtek_qitem_sectionCriteria = null;

        try {
            session = es.tekniker.framework.ktek.questionnaire.KTEKPersistentManager.instance().getSession();
            session.beginTransaction();

            lDAOFactory = es.tekniker.framework.ktek.questionnaire.DAOFactory.getDAOFactory();
            instanceDAO = lDAOFactory.getKtek_questionnaireitemDAO();

            objKtek_questionnaireitemCriteria = new Ktek_questionnaireitemCriteria();
            objKtek_qitem_sectionCriteria = objKtek_questionnaireitemCriteria.createKtek_qitem_sectionCriteria();

            objKtek_qitem_sectionCriteria.ktek_fk_idquestionnairesection_ktek_pk_idquestionnairesection
                    .eq(idQuestionaireSection);
            objKtek_qitem_sectionCriteria.addOrder(Order.asc("sortorder"));

            instanceArray = instanceDAO.listKtek_questionnaireitemByCriteria(objKtek_questionnaireitemCriteria);

            session.close();

        } catch (Exception e) {
            log.error("getQuestionnaireItemList4Section Exception " + e.getMessage());
            e.printStackTrace();
            try {
                if (session != null)
                    session.close();
            } catch (PersistentException e1) {
                e1.printStackTrace();
            }
        }
        return instanceArray;
    }

    public Ktek_answer[] getQuestionnaireItemAnwser4QuestionnaireItem(int idquestionnaireitem, int idanswerset) {
        Ktek_answer[] arrayInstance = null;

        PersistentSession session = null;
        DAOFactory lDAOFactory = null;
        Ktek_answerDAO instanceDAO = null;
        Ktek_answerCriteria objKtek_answerCriteria = null;
        Ktek_answersetCriteria objKtekAnswersetCriteria = null;
        Ktek_questionnaireitemCriteria objKtek_fk_idquestionnaireitemCriteria = null;
        try {

            session = es.tekniker.framework.ktek.questionnaire.KTEKPersistentManager.instance().getSession();
            session.beginTransaction();

            lDAOFactory = es.tekniker.framework.ktek.questionnaire.DAOFactory.getDAOFactory();
            instanceDAO = lDAOFactory.getKtek_answerDAO();

            objKtek_answerCriteria = new Ktek_answerCriteria();

            if (idanswerset > 0) {
                objKtekAnswersetCriteria = objKtek_answerCriteria.createKtek_fk_idanswersetCriteria();
                objKtekAnswersetCriteria.ktek_pk_idanswerset.eq(idanswerset);
            } else {
                objKtek_fk_idquestionnaireitemCriteria = objKtek_answerCriteria
                        .createKtek_fk_idquestionnaireitemCriteria().createKtek_fk_idquestionnaireitemCriteria();
                objKtek_fk_idquestionnaireitemCriteria.ktek_pk_idquestionnaireitem.eq(idquestionnaireitem);
                objKtek_fk_idquestionnaireitemCriteria.isdeleted.eq((short) 0);
            }

            arrayInstance = instanceDAO.listKtek_answerByCriteria(objKtek_answerCriteria);

            session.close();

        } catch (Exception e) {
            log.error("getQuestionnaireItemAnwser4QuestionnaireItem Exception " + e.getMessage());
            e.printStackTrace();
            try {
                if (session != null)
                    session.close();
            } catch (PersistentException e1) {
                e1.printStackTrace();
            }
        }

        return arrayInstance;
    }

    public Ktek_question getQuestion4QuestionnaireItem(PersistentSession session, int idquestionnaireitem) {
        Ktek_question instance = null;
        DAOFactory lDAOFactory = null;
        Ktek_questionDAO instanceDAO = null;
        Ktek_questionCriteria objKtek_questionCriteria = null;
        Ktek_questionnaireitemCriteria objKtek_fk_idquestionnaireitemCriteria = null;
        try {

            lDAOFactory = es.tekniker.framework.ktek.questionnaire.DAOFactory.getDAOFactory();
            instanceDAO = lDAOFactory.getKtek_questionDAO();

            objKtek_questionCriteria = new Ktek_questionCriteria();
            objKtek_fk_idquestionnaireitemCriteria = objKtek_questionCriteria
                    .createKtek_fk_idquestionnaireitemCriteria();
            objKtek_fk_idquestionnaireitemCriteria.ktek_pk_idquestionnaireitem.eq(idquestionnaireitem);
            objKtek_fk_idquestionnaireitemCriteria.isdeleted.eq((short) 0);

            instance = instanceDAO.loadKtek_questionByCriteria(objKtek_questionCriteria);

        } catch (Exception e) {
            log.error("getQuestion4QuestionnaireItem Exception " + e.getMessage());
            e.printStackTrace();
        }

        return instance;
    }

    public Ktek_question getQuestion4QuestionnaireItem(int idquestionnaireitem) {
        Ktek_question instance = null;
        PersistentSession session = null;
        try {
            session = es.tekniker.framework.ktek.questionnaire.KTEKPersistentManager.instance().getSession();
            session.beginTransaction();

            instance = getQuestion4QuestionnaireItem(session, idquestionnaireitem);

            session.close();

        } catch (Exception e) {
            log.error("getQuestion4QuestionnaireItem Exception " + e.getMessage());
            e.printStackTrace();
            try {
                if (session != null)
                    session.close();
            } catch (PersistentException e1) {
                e1.printStackTrace();
            }
        }

        return instance;
    }

    public Ktek_result_questionnaire saveQuestionnaireResultByStepsLogic(KtekQuestionnaireResultEntity instance)
            throws KtekExceptionEntity {
        boolean boolOK = true;

        Ktek_questionnaire objQuestionnaire = null;
        Ktek_questionnairesection objQuestionnaireSection = null;
        Ktek_questionnaireitem objQuestionnaireItem = null;
        Ktek_answer instanceAnswer = null;
        String codAnswer = null;
        Ktek_result_questionnaire objResultQuestionnaire = null;
        Ktek_result_questionnairesection objResultQuestionnaireSection = null;
        KtekQuestionnaireSectionResultEntity itResultQuestionnaireSection = null;
        KtekQuestionnaireItemResultEntity itResultQuestionnaireItem = null;
        Iterator<KtekQuestionnaireSectionResultEntity> itSection = null;
        Iterator<KtekQuestionnaireItemResultEntity> itItem = null;
        PersistentSession session = null;
        PersistentTransaction tr = null;
        short scoreAnswer = 0;
        short typeResult = 0;
        short scoreQuestionnaireSection = 0;
        CommonsMngServer manager = null;
        String exceptionText = null;
        String paramValue = null;
        float decParamValue = 0;
        long longParamValue = 0;
        String stringParamValue = null, textParamValue = null;
        Ktek_parameter parameterDB = null;
        Ktek_userquestionnaire_planning instanceQuestionnaireUserPlanning = null;
        String sFunction = "QuestionnaireManagerDB.saveQuestionnaireResultByStepsLogic";

        try {

            log.info("saveQuestionnaireResultByStepsLogic START ");
            manager = new CommonsMngServer();

            // 1- OPEN CONNECTION AND TRANSACTION TO DATABASE
            log.info("saveQuestionnaireResultByStepsLogic 1: OPEN CONNECTION AND TRANSACTION TO DATABASE ");
            session = es.tekniker.framework.ktek.questionnaire.KTEKPersistentManager.instance().getSession();
            tr = session.beginTransaction();

            // 2- GET KTEK_QUESTIONNAIRE
            log.info("saveQuestionnaireResultByStepsLogic 2: GET KTEK_QUESTIONNAIRE ");

            objQuestionnaire = getQuestionnaire(session, instance.getIdquestionnaire());

            if (objQuestionnaire == null) {
                log.debug("saveQuestionnaireResultByStepsLogic objQuestionnaire is null ");

                exceptionText = manager
                        .getExceptionText(KtekExceptionMessage.EXCEPTION_CODE_QUESTIONNAIRE_DOES_NOT_EXIST);
                KtekExceptionEntity e = new KtekExceptionEntity();
                e.setCode(KtekExceptionCode.EXCEPTION_CODE_QUESTIONNAIRE_DOES_NOT_EXIST);
                e.setMessage(exceptionText);
                e.setFunction(sFunction);
                e.setParams(String.valueOf(instance.getIdquestionnaire()));
                throw e;
            }
            if (objQuestionnaire.getTypequestionnaire() == KtekQuestionnaireType.QUESTIONNAIRE_TYPE_MONITORING) {

                // 3- GET Ktek_userquestionnaire_planning INSTANCE IS EXISTS
                if (instance.getIduserquestionnaireplanning() > 0) {
                    instanceQuestionnaireUserPlanning = getQuestionnaireUserPlanning(session,
                            instance.getIduserquestionnaireplanning());

                    log.debug("instanceQuestionnaireUserPlanning " + instance.getIduserquestionnaireplanning());

                    //CHECK IF STATUS IS DONE
                    if (instanceQuestionnaireUserPlanning
                            .getStatusquestionnaire() == KtekQuestionnaireStatus.QUESTIONNAIRE_STATUS_COMPLETED) {
                        log.debug("instanceQuestionnaireUserPlanning " + instance.getIduserquestionnaireplanning()
                                + " with status " + KtekQuestionnaireStatus.QUESTIONNAIRE_STATUS_COMPLETED);

                        exceptionText = manager.getExceptionText(
                                KtekExceptionMessage.EXCEPTION_CODE_QUESTIONNAIRE_MONITORING_PLANNING_ALREADY_DONE);
                        KtekExceptionEntity e = new KtekExceptionEntity();
                        e.setCode(KtekExceptionCode.EXCEPTION_CODE_QUESTIONNAIRE_MONITORING_PLANNING_ALREADY_DONE);
                        e.setMessage(exceptionText);
                        e.setFunction(sFunction);
                        e.setParams(String.valueOf(instance.getIdquestionnaire()));
                        throw e;
                    }
                } else {
                    log.debug("instanceQuestionnaireUserPlanning Iduserquestionnaireplanning no defined "
                            + instance.getIduserquestionnaireplanning());

                    exceptionText = manager.getExceptionText(
                            KtekExceptionMessage.EXCEPTION_CODE_QUESTIONNAIRE_MONITORING_PLANNING_NO_DEFINED);
                    KtekExceptionEntity e = new KtekExceptionEntity();
                    e.setCode(KtekExceptionCode.EXCEPTION_CODE_QUESTIONNAIRE_MONITORING_PLANNING_NO_DEFINED);
                    e.setMessage(exceptionText);
                    e.setFunction(sFunction);
                    e.setParams(String.valueOf(instance.getIdquestionnaire()));
                    throw e;
                }
            }

            // 4- INSERT IN TABLE KTEK_RESULT_QUESTIONNAIRE 
            log.info("saveQuestionnaireResultByStepsLogic 4: INSERT IN TABLE KTEK_RESULT_QUESTIONNAIRE  ");

            objResultQuestionnaire = saveQuestionnaireResult(session, instance.getCodtelecareprogram(),
                    instance.getCoduser(), instance.getScore(), objQuestionnaire,
                    instanceQuestionnaireUserPlanning);
            if (objResultQuestionnaire == null) {
                log.debug("saveQuestionnaireResultByStepsLogic objResultQuestionnaire is null ");

                exceptionText = manager
                        .getExceptionText(KtekExceptionMessage.EXCEPTION_CODE_QUESTIONNAIRE_RESULT_INSERT_ERROR);
                KtekExceptionEntity e = new KtekExceptionEntity();
                e.setCode(KtekExceptionCode.EXCEPTION_CODE_QUESTIONNAIRE_RESULT_INSERT_ERROR);
                e.setMessage(exceptionText);
                e.setFunction(sFunction);
                e.setParams(String.valueOf(instance.getIdquestionnaire() + " " + instance.getCodtelecareprogram()
                        + " " + instance.getCoduser()));
                throw e;
            }

            // 5- PARSE RESULT QUESTIONNAIRE SECTIONS
            log.info("saveQuestionnaireResultByStepsLogic 5: PARSE RESULT QUESTIONNAIRE SECTIONS ");
            itSection = instance.getListsections().iterator();

            while (itSection.hasNext()) {
                itResultQuestionnaireSection = (KtekQuestionnaireSectionResultEntity) itSection.next();

                // 6 GET QUESTIONNAIRE SECTION 
                log.info("saveQuestionnaireResultByStepsLogic 6- GET QUESTIONNAIRE SECTION ");
                objQuestionnaireSection = getQuestionnaireSection(session,
                        itResultQuestionnaireSection.getIdquestionnairesection());

                if (objQuestionnaireSection == null) {
                    log.debug("saveQuestionnaireResultByStepsLogic objQuestionnaireSection is null ");

                    exceptionText = manager.getExceptionText(
                            KtekExceptionMessage.EXCEPTION_CODE_QUESTIONNAIRE_SECTION_DOES_NOT_EXIST);
                    KtekExceptionEntity e = new KtekExceptionEntity();
                    e.setCode(KtekExceptionCode.EXCEPTION_CODE_QUESTIONNAIRE_SECTION_DOES_NOT_EXIST);
                    e.setMessage(exceptionText);
                    e.setFunction(sFunction);
                    e.setParams(String.valueOf(itResultQuestionnaireSection.getIdquestionnairesection()));
                    throw e;
                }

                // 7- INSERT in TABLE KTEK_RESULT_QUESTIONNAIRESECTION 
                log.info("saveQuestionnaireResultByStepsLogic 7- INSERT in TABLE KTEK_RESULT_QUESTIONAIRESECTION ");
                scoreQuestionnaireSection = itResultQuestionnaireSection.getScore();
                objResultQuestionnaireSection = saveQuestionnaireSectionResult(session, scoreQuestionnaireSection,
                        objResultQuestionnaire, objQuestionnaireSection);

                // 8- PARSE RESULT QUESTIONNAIRE ITEMS
                log.info("saveQuestionnaireResultByStepsLogic 8- PARSE RESULT QUESTIONNAIRE ITEMS ");
                itItem = itResultQuestionnaireSection.getListitems().iterator();

                while (itItem.hasNext()) {
                    itResultQuestionnaireItem = (KtekQuestionnaireItemResultEntity) itItem.next();

                    // 9- GET QUESTIONNAIRE ITEM
                    log.info("saveQuestionnaireResultByStepsLogic 9- GET QUESTIONNAIRE ITEM ");
                    objQuestionnaireItem = getQuestionnaireItem(session,
                            itResultQuestionnaireItem.getIdquestionnaireitem());

                    // 10- GET LIST CODANSWER
                    if (itResultQuestionnaireItem.getListcodanswer() != null) {
                        for (int i = 0; i < itResultQuestionnaireItem.getListcodanswer().length; i++) {

                            codAnswer = itResultQuestionnaireItem.getListcodanswer()[i];
                            instanceAnswer = getQuestionnaireAnswer(session, codAnswer);

                            if (instanceAnswer == null) {
                                log.debug("saveQuestionnaireResultByStepsLogic instanceAnswer is null ");

                                exceptionText = manager.getExceptionText(
                                        KtekExceptionMessage.EXCEPTION_CODE_QUESTIONNAIRE_ANSWER_DOES_NOT_EXIST);
                                KtekExceptionEntity e = new KtekExceptionEntity();
                                e.setCode(KtekExceptionCode.EXCEPTION_CODE_QUESTIONNAIRE_ANSWER_DOES_NOT_EXIST);
                                e.setMessage(exceptionText);
                                e.setFunction(sFunction);
                                e.setParams(String.valueOf(itResultQuestionnaireSection.getIdquestionnairesection())
                                        + "  codAnswer " + codAnswer);
                                throw e;
                            } else {
                                scoreAnswer = instanceAnswer.getScoreanswer();
                            }

                            // 11- INSERT IN TABLE KTEK_RESULT_QUESTIONNAIRE ITEM
                            log.info(
                                    "saveQuestionnaireResultByStepsLogic 11- INSERT IN TABLE KTEK_RESULT_QUESTIONNAIRE ITEM answer "
                                            + codAnswer);
                            typeResult = KtekQuestionnaireItemResultType.QUESTIONNAIRE_ITEM_RESULT_TYPE_ANSWERSET;
                            decParamValue = 0;
                            longParamValue = 0;
                            stringParamValue = null;
                            textParamValue = null;
                            saveQuestionnaireItemResult(session, codAnswer, decParamValue, longParamValue,
                                    stringParamValue, textParamValue, objQuestionnaireItem,
                                    objResultQuestionnaireSection, scoreAnswer, typeResult);
                        }
                    }
                    //12 - Get PARAMETERs 
                    else if (objQuestionnaireItem
                            .getTypequestionnaireitem() == KtekQuestionnaireItemType.QUESTIONNAIRE_ITEM_PARAMETER) {

                        paramValue = itResultQuestionnaireItem.getParamvalue();
                        if (paramValue != null && objQuestionnaireItem.getKtek_pk_idquestionnaireitem() > 0) {
                            parameterDB = getQuestionnaireParameters4QuestionnaireItem(session,
                                    objQuestionnaireItem.getKtek_pk_idquestionnaireitem());
                            if (parameterDB != null) {
                                decParamValue = 0;
                                longParamValue = 0;
                                if (parameterDB
                                        .getTypeparameter() == KtekQuestionnaireParameterType.QUESTIONNAIRE_PARAMETER_TYPE_INTEGER) {
                                    longParamValue = Integer.valueOf(paramValue);
                                    typeResult = KtekQuestionnaireItemResultType.QUESTIONNAIRE_ITEM_RESULT_TYPE_INTEGER;
                                } else if (parameterDB
                                        .getTypeparameter() == KtekQuestionnaireParameterType.QUESTIONNAIRE_PARAMETER_TYPE_DECIMAL) {
                                    decParamValue = Float.valueOf(paramValue);
                                    typeResult = KtekQuestionnaireItemResultType.QUESTIONNAIRE_ITEM_RESULT_TYPE_DECIMAL;
                                }

                                codAnswer = null;
                                scoreAnswer = 0;
                                stringParamValue = null;
                                textParamValue = null;

                                log.info(
                                        "saveQuestionnaireResultByStepsLogic 12- INSERT IN TABLE KTEK_RESULT_QUESTIONNAIRE ITEM parameter");

                                saveQuestionnaireItemResult(session, codAnswer, decParamValue, longParamValue,
                                        stringParamValue, textParamValue, objQuestionnaireItem,
                                        objResultQuestionnaireSection, scoreAnswer, typeResult);
                            }
                        } else {
                            log.info(
                                    "saveQuestionnaireResultByStepsLogic 12- NO parameter to INSERT IN TABLE KTEK_RESULT_QUESTIONNAIRE ITEM ");
                        }
                    }
                    //13 - Get ANSWERs values 
                    else if (objQuestionnaireItem
                            .getTypequestionnaireitem() == KtekQuestionnaireItemType.QUESTIONNAIRE_ITEM_QUESTION) {
                        paramValue = itResultQuestionnaireItem.getAnswervalue();
                        if (paramValue != null && objQuestionnaireItem.getKtek_pk_idquestionnaireitem() > 0) {
                            //get ktek_question to verify typeanswer and formatanswerunique

                            longParamValue = 0;
                            decParamValue = 0;
                            stringParamValue = null;
                            textParamValue = null;
                            decParamValue = 0;

                            if (objQuestionnaireItem.getKtek_question()
                                    .getFormatanswerunique() == KtekQuestionnaireQuestionFormatAnswerUniqueType.QUESTIONNAIRE_QUESTION_FORMAT_ANSWER_UNIQUE_INTEGER) {
                                longParamValue = Integer.valueOf(paramValue);
                                typeResult = KtekQuestionnaireItemResultType.QUESTIONNAIRE_ITEM_RESULT_TYPE_INTEGER;
                            } else if (objQuestionnaireItem.getKtek_question()
                                    .getFormatanswerunique() == KtekQuestionnaireQuestionFormatAnswerUniqueType.QUESTIONNAIRE_QUESTION_FORMAT_ANSWER_UNIQUE_DECIMAL) {
                                decParamValue = Float.valueOf(paramValue);
                                typeResult = KtekQuestionnaireItemResultType.QUESTIONNAIRE_ITEM_RESULT_TYPE_DECIMAL;
                            } else if (objQuestionnaireItem.getKtek_question()
                                    .getFormatanswerunique() == KtekQuestionnaireQuestionFormatAnswerUniqueType.QUESTIONNAIRE_QUESTION_FORMAT_ANSWER_UNIQUE_STRING) {
                                stringParamValue = paramValue;
                                typeResult = KtekQuestionnaireItemResultType.QUESTIONNAIRE_ITEM_RESULT_TYPE_STRING;
                            } else if (objQuestionnaireItem.getKtek_question()
                                    .getFormatanswerunique() == KtekQuestionnaireQuestionFormatAnswerUniqueType.QUESTIONNAIRE_QUESTION_FORMAT_ANSWER_UNIQUE_TEXT) {
                                textParamValue = paramValue;
                                typeResult = KtekQuestionnaireItemResultType.QUESTIONNAIRE_ITEM_RESULT_TYPE_TEXT;
                            } else if (objQuestionnaireItem.getKtek_question()
                                    .getFormatanswerunique() == KtekQuestionnaireQuestionFormatAnswerUniqueType.QUESTIONNAIRE_QUESTION_FORMAT_ANSWER_UNIQUE_DATE) {
                                decParamValue = Float.valueOf(paramValue);
                                typeResult = KtekQuestionnaireItemResultType.QUESTIONNAIRE_ITEM_RESULT_TYPE_DATETIME;
                            }

                            //reset previous value    
                            scoreAnswer = 0;

                            instanceAnswer = getQuestionnaireAnswer(session, codAnswer);

                            if (instanceAnswer != null) {
                                scoreAnswer = instanceAnswer.getScoreanswer();
                                log.info(
                                        "saveQuestionnaireResultByStepsLogic 13- INSERT IN TABLE KTEK_RESULT_QUESTIONNAIRE ITEM answers scoreAnswer "
                                                + scoreAnswer);
                            }

                            codAnswer = null;
                            log.info(
                                    "saveQuestionnaireResultByStepsLogic 13- INSERT IN TABLE KTEK_RESULT_QUESTIONNAIRE ITEM answers values");

                            saveQuestionnaireItemResult(session, codAnswer, decParamValue, longParamValue,
                                    stringParamValue, textParamValue, objQuestionnaireItem,
                                    objResultQuestionnaireSection, scoreAnswer, typeResult);
                        } else {
                            log.info(
                                    "saveQuestionnaireResultByStepsLogic 13- NO answer value to INSERT IN TABLE KTEK_RESULT_QUESTIONNAIRE ITEM ");
                        }
                    }

                }
            }

            // 14- UPDATE USER QUESTIONNAIRE PLANNING STATE : ONLY FOR MONITORING QUESTIONNAIRE
            if (objQuestionnaire.getTypequestionnaire() == KtekQuestionnaireType.QUESTIONNAIRE_TYPE_MONITORING) {

                if (instance.getIduserquestionnaireplanning() > 0) {
                    boolOK = updateUserQuestionnairePlanning(session, instance.getIduserquestionnaireplanning(),
                            KtekQuestionnaireStatus.QUESTIONNAIRE_STATUS_COMPLETED);
                } else {
                    log.error("Questionnaire has no value for Iduserquestionnaireplanning");
                }
            }

            if (tr.wasCommitted() == false)
                tr.commit();

            session.close();

            log.info("saveQuestionnaireResultByStepsLogic END ");

        } catch (PersistentException e) {
            e.printStackTrace();
            try {
                if (tr != null)
                    tr.rollback();

                if (session != null)
                    session.close();
            } catch (PersistentException e1) {
                e1.printStackTrace();
            }
            e.printStackTrace();
            exceptionText = manager
                    .getExceptionText(KtekExceptionMessage.EXCEPTION_CODE_QUESTIONNAIRE_RESULT_INSERT_ERROR);
            KtekExceptionEntity eQsave = new KtekExceptionEntity();
            eQsave.setCode(KtekExceptionCode.EXCEPTION_CODE_QUESTIONNAIRE_RESULT_INSERT_ERROR);
            eQsave.setMessage(exceptionText);
            eQsave.setFunction(sFunction);
            eQsave.setParams(String.valueOf(instance.getIdquestionnaire()));
            throw eQsave;

        } catch (KtekExceptionEntity eKtekExceptionEntity) {
            throw eKtekExceptionEntity;
        } catch (Exception e) {
            e.printStackTrace();
            try {
                if (tr != null)
                    tr.rollback();

                if (session != null)
                    session.close();
            } catch (PersistentException e1) {
                e1.printStackTrace();
            }
            exceptionText = manager
                    .getExceptionText(KtekExceptionMessage.EXCEPTION_CODE_QUESTIONNAIRE_RESULT_INSERT_ERROR);
            KtekExceptionEntity eQsave = new KtekExceptionEntity();
            eQsave.setCode(KtekExceptionCode.EXCEPTION_CODE_QUESTIONNAIRE_RESULT_INSERT_ERROR);
            eQsave.setMessage(exceptionText);
            eQsave.setFunction(sFunction);
            eQsave.setParams(String.valueOf(instance.getIdquestionnaire()));
            throw eQsave;
        }

        return objResultQuestionnaire;
    }

    private Ktek_userquestionnaire_planning getQuestionnaireUserPlanning(PersistentSession session,
            int iduserquestionnaireplanning) {
        Ktek_userquestionnaire_planning instance = null;
        DAOFactory lDAOFactory = null;
        Ktek_userquestionnaire_planningDAO instanceDAO = null;

        try {

            lDAOFactory = es.tekniker.framework.ktek.questionnaire.DAOFactory.getDAOFactory();
            instanceDAO = lDAOFactory.getKtek_userquestionnaire_planningDAO();
            instance = instanceDAO.getKtek_userquestionnaire_planningByORMID(iduserquestionnaireplanning);

        } catch (PersistentException e) {
            log.error("getQuestionnaireUserPlanning Exception " + e.getMessage());
            e.printStackTrace();
        }

        return instance;
    }

    private boolean updateUserQuestionnairePlanning(PersistentSession session, int iduserquestionnaireplanning,
            short state) {
        boolean boolOK = true;
        DAOFactory lDAOFactory = null;
        Ktek_userquestionnaire_planningDAO instanceDAO = null;
        Ktek_userquestionnaire_planning instance = null;

        try {

            lDAOFactory = es.tekniker.framework.ktek.questionnaire.DAOFactory.getDAOFactory();
            instanceDAO = lDAOFactory.getKtek_userquestionnaire_planningDAO();

            instance = instanceDAO.getKtek_userquestionnaire_planningByORMID(iduserquestionnaireplanning);
            instance.setStatusquestionnaire(state);

            boolOK = instanceDAO.save(instance);

        } catch (PersistentException e) {
            boolOK = false;
            log.error("updateUserQuestionnairePlanning Exception " + e.getMessage());
            e.printStackTrace();
        }

        return boolOK;
    }

    private Ktek_result_questionnaire saveQuestionnaireResult(PersistentSession session, String codTelecareProgram,
            String codUserId, short score, Ktek_questionnaire idquestionnaire,
            Ktek_userquestionnaire_planning userquestionnaireplanning) throws Exception {

        boolean boolOK = true;
        Ktek_result_questionnaire objKtek_result_questionnaire = null;
        long resultCreation = 0;

        try {

            resultCreation = Utils.getCalendarGMT().getTimeInMillis();

            objKtek_result_questionnaire = new Ktek_result_questionnaire();
            objKtek_result_questionnaire.setCodtelecareprogram(codTelecareProgram);
            objKtek_result_questionnaire.setCoduserid(codUserId);
            objKtek_result_questionnaire.setEvaluationscorequestionnaire(score);
            objKtek_result_questionnaire.setKtek_fk_idquestionnaire(idquestionnaire);
            objKtek_result_questionnaire.setResultcreation(resultCreation);
            if (userquestionnaireplanning != null)
                objKtek_result_questionnaire.setKtek_fk_iduserquestionnaireplanning(userquestionnaireplanning);

            session.save(objKtek_result_questionnaire);
            if (boolOK) {
                log.info("saveQuestionnaireResult OK "
                        + objKtek_result_questionnaire.getKtek_pk_idresultquestionnaire());
            } else {
                log.info("saveQuestionnaireResult ERROR");
            }

        } catch (Exception e) {
            log.error("saveQuestionnaireResult Exception " + e.getMessage());
            e.printStackTrace();
            throw e;
        }
        return objKtek_result_questionnaire;
    }

    private Ktek_result_questionnairesection saveQuestionnaireSectionResult(PersistentSession session, short score,
            Ktek_result_questionnaire idResultQuestionnaire, Ktek_questionnairesection idQuestionnaireSection)
            throws Exception {
        Ktek_result_questionnairesection objKtek_result_questionnairesection = null;

        try {
            objKtek_result_questionnairesection = new Ktek_result_questionnairesection();
            objKtek_result_questionnairesection.setEvaluationscorequestionnairesection(score);
            objKtek_result_questionnairesection.setKtek_fk_idresultquestionnaire(idResultQuestionnaire);
            objKtek_result_questionnairesection.setKtek_fk_idquestionnairesection(idQuestionnaireSection);

            session.save(objKtek_result_questionnairesection);

        } catch (Exception e) {
            log.error("saveQuestionnaireSectionResult Exception " + e.getMessage());
            e.printStackTrace();
            throw e;
        }

        return objKtek_result_questionnairesection;
    }

    private Ktek_result_questionnaireitem saveQuestionnaireItemResult(PersistentSession session, String codAnswer,
            double decValue, long longValue, String stringValue, String textValue,
            Ktek_questionnaireitem objQuestionnaireItem, Ktek_result_questionnairesection objQuestionnaireSection,
            short score, short type) throws Exception {
        Ktek_result_questionnaireitem instance = null;
        Ktek_result_questionnaireitem objKtek_result_questionnaireitem = null;
        boolean boolOK = true;

        try {

            objKtek_result_questionnaireitem = new Ktek_result_questionnaireitem();

            if (codAnswer != null) { //for ANSWERS
                objKtek_result_questionnaireitem.setCodanswer(codAnswer);
                objKtek_result_questionnaireitem.setScoreanswer(score);
            } else { // for PARAMETERS
                objKtek_result_questionnaireitem.setDecimalvalue((float) decValue);
                objKtek_result_questionnaireitem.setIntegervalue(longValue);

                objKtek_result_questionnaireitem.setTextvalue(textValue);
                objKtek_result_questionnaireitem.setStringvalue(stringValue);
            }

            objKtek_result_questionnaireitem.setKtek_fk_idquestionnaireitem(objQuestionnaireItem); //objQuestionnaireItem
            objKtek_result_questionnaireitem.setKtek_fk_idresultquestionnairesection(objQuestionnaireSection);
            objKtek_result_questionnaireitem.setTyperesult(type);

            session.save(objKtek_result_questionnaireitem);

            if (boolOK) {
                log.info("saveQuestionnaireItemResult OK ");
            } else {
                log.info("saveQuestionnaireItemResult ERROR ");
            }

        } catch (Exception e) {
            log.error("saveQuestionnaireItemResult Exception " + e.getMessage());
            e.printStackTrace();
            throw e;
        }
        return instance;
    }

    public Ktek_questionnaire getQuestionnaire(int idquestionnaire) {
        Ktek_questionnaire instance = null;
        DAOFactory lDAOFactory = null;
        PersistentSession session = null;
        Ktek_questionnaireDAO instanceDAO = null;
        Ktek_questionnaireCriteria objKtek_questionnaireCriteria = null;
        long nowInMillis = 0;
        try {
            nowInMillis = Utils.getCalendarGMT().getTimeInMillis();
            session = es.tekniker.framework.ktek.questionnaire.KTEKPersistentManager.instance().getSession();

            lDAOFactory = es.tekniker.framework.ktek.questionnaire.DAOFactory.getDAOFactory();
            instanceDAO = lDAOFactory.getKtek_questionnaireDAO();

            objKtek_questionnaireCriteria = new Ktek_questionnaireCriteria();
            objKtek_questionnaireCriteria.ktek_pk_idquestionnaire.eq(idquestionnaire);
            objKtek_questionnaireCriteria.isdeleted.eq((short) 0);
            objKtek_questionnaireCriteria.datevalidfrom.lt(nowInMillis);

            objKtek_questionnaireCriteria.add(Restrictions.or(Restrictions.isNull("datevalidto"),
                    Restrictions.gt("datevalidto", nowInMillis)));

            instance = instanceDAO.loadKtek_questionnaireByCriteria(objKtek_questionnaireCriteria);

            if (instance != null)
                log.debug("getQuestionnaire instance is not null");
            else
                log.info("getQuestionnaire instance is null for idquestionnaire " + idquestionnaire);

            session.close();

        } catch (Exception e) {
            log.error("getQuestionnaire Exception " + e.getMessage());
            e.printStackTrace();
            try {
                if (session != null)
                    session.close();
            } catch (PersistentException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }

        return instance;
    }

    public Ktek_questionnaire getQuestionnaire(PersistentSession session, int idquestionnaire) throws Exception {
        Ktek_questionnaire instance = null;
        DAOFactory lDAOFactory = null;
        Ktek_questionnaireDAO instanceDAO = null;
        Ktek_questionnaireCriteria objKtek_questionnaireCriteria = null;
        long nowInMillis = 0;
        try {
            nowInMillis = Utils.getCalendarGMT().getTimeInMillis();

            lDAOFactory = es.tekniker.framework.ktek.questionnaire.DAOFactory.getDAOFactory();
            instanceDAO = lDAOFactory.getKtek_questionnaireDAO();

            objKtek_questionnaireCriteria = new Ktek_questionnaireCriteria();
            objKtek_questionnaireCriteria.ktek_pk_idquestionnaire.eq(idquestionnaire);
            objKtek_questionnaireCriteria.isdeleted.eq((short) 0);
            objKtek_questionnaireCriteria.datevalidfrom.lt(nowInMillis);

            objKtek_questionnaireCriteria.add(Restrictions.or(Restrictions.isNull("datevalidto"),
                    Restrictions.gt("datevalidto", nowInMillis)));

            instance = instanceDAO.loadKtek_questionnaireByCriteria(objKtek_questionnaireCriteria);

            if (instance != null)
                log.debug("getQuestionnaire instance is not null");
            else
                log.info("getQuestionnaire instance is null for idquestionnaire " + idquestionnaire);

        } catch (Exception e) {
            log.error("getQuestionnaire Exception " + e.getMessage());
            e.printStackTrace();
            throw e;
        }

        return instance;
    }

    public Ktek_questionnaireitem getQuestionnaireItem(int idresultquestionnaire) throws Exception {
        Ktek_questionnaireitem instance = null;
        DAOFactory lDAOFactory = null;
        PersistentSession session = null;
        Ktek_questionnaireitemDAO instanceDAO = null;

        Ktek_questionnaireitemCriteria objKtek_questionnaireitemCriteria = null;

        try {
            lDAOFactory = es.tekniker.framework.ktek.questionnaire.DAOFactory.getDAOFactory();

            session = es.tekniker.framework.ktek.questionnaire.KTEKPersistentManager.instance().getSession();

            instanceDAO = lDAOFactory.getKtek_questionnaireitemDAO();

            objKtek_questionnaireitemCriteria = new Ktek_questionnaireitemCriteria();
            objKtek_questionnaireitemCriteria.createKtek_result_questionnaireitemCriteria()
                    .createKtek_fk_idresultquestionnairesectionCriteria()
                    .createKtek_fk_idresultquestionnaireCriteria().ktek_pk_idresultquestionnaire
                            .eq(idresultquestionnaire);

            instance = instanceDAO.loadKtek_questionnaireitemByCriteria(objKtek_questionnaireitemCriteria);

            session.close();

            if (instance != null)
                log.debug("getQuestionnaireItem instance is not null");
            else
                log.info(
                        "getQuestionnaireItem instance is null for idresultquestionnaire " + idresultquestionnaire);
        } catch (Exception e) {
            log.error("getQuestionnaireItem Exception " + e.getMessage());
            e.printStackTrace();
            throw e;
        }

        return instance;
    }

    public Ktek_questionnaireitem getQuestionnaireItem(PersistentSession session, int idquestionnaireitem)
            throws Exception {
        Ktek_questionnaireitem instance = null;
        DAOFactory lDAOFactory = null;
        Ktek_questionnaireitemDAO instanceDAO = null;
        Ktek_questionnaireitemCriteria objKtek_questionnaireitemCriteria = null;
        try {
            lDAOFactory = es.tekniker.framework.ktek.questionnaire.DAOFactory.getDAOFactory();
            instanceDAO = lDAOFactory.getKtek_questionnaireitemDAO();

            objKtek_questionnaireitemCriteria = new Ktek_questionnaireitemCriteria();
            objKtek_questionnaireitemCriteria.isdeleted.eq((short) 0);

            objKtek_questionnaireitemCriteria.ktek_pk_idquestionnaireitem.eq(idquestionnaireitem);
            instance = instanceDAO.loadKtek_questionnaireitemByCriteria(objKtek_questionnaireitemCriteria);

            if (instance != null)
                log.debug("getQuestionnaireItem instance is not null");
            else
                log.info("getQuestionnaireItem instance is null for idquestionnaire " + idquestionnaireitem);
        } catch (Exception e) {
            log.error("getQuestionnaireItem Exception " + e.getMessage());
            e.printStackTrace();
            throw e;
        }

        return instance;
    }

    public Ktek_questionnairesection getQuestionnaireSection(PersistentSession session, int idquestionnairesection)
            throws Exception {
        Ktek_questionnairesection instance = null;
        DAOFactory lDAOFactory = null;
        Ktek_questionnairesectionDAO instanceDAO = null;

        try {
            lDAOFactory = es.tekniker.framework.ktek.questionnaire.DAOFactory.getDAOFactory();
            instanceDAO = lDAOFactory.getKtek_questionnairesectionDAO();
            instance = instanceDAO.getKtek_questionnairesectionByORMID(session, idquestionnairesection);
            if (instance != null)
                log.debug("getQuestionnaireSection instance is not null");
            else
                log.info("getQuestionnaireSection instance is null for idquestionnaire " + idquestionnairesection);
        } catch (Exception e) {
            log.error("getQuestionnaireSection Exception " + e.getMessage());
            e.printStackTrace();
            throw e;
        }

        return instance;
    }

    public Ktek_answer getQuestionnaireAnswer(PersistentSession session, String codAnswer) throws Exception {
        Ktek_answer instance = null;
        DAOFactory lDAOFactory = null;
        Ktek_answerDAO instanceDAO = null;
        Ktek_answerCriteria objKtek_answerCriteria = null;

        try {

            lDAOFactory = es.tekniker.framework.ktek.questionnaire.DAOFactory.getDAOFactory();
            instanceDAO = lDAOFactory.getKtek_answerDAO();

            objKtek_answerCriteria = new Ktek_answerCriteria(session);
            objKtek_answerCriteria.ktek_uk_codanswer.eq(codAnswer);

            instance = instanceDAO.loadKtek_answerByCriteria(objKtek_answerCriteria);

            if (instance != null)
                log.debug("getQuestionnaireAnswer instance is not null");
            else
                log.info("getQuestionnaireAnswer instance is null for idAnswer " + codAnswer);

        } catch (Exception e) {
            log.error("getQuestionnaireAnswer Exception " + e.getMessage());
            e.printStackTrace();
            throw e;
        }

        return instance;
    }

    public Ktek_parameter getQuestionnaireParameters4QuestionnaireItem(int idquestionnaireitem) {
        Ktek_parameter instance = null;

        PersistentSession session = null;
        DAOFactory lDAOFactory = null;
        Ktek_parameterDAO instanceDAO = null;
        Ktek_parameterCriteria objKtek_parameterCriteria = null;
        Ktek_questionnaireitemCriteria objKtek_fk_idquestionnaireitemCriteria = null;

        try {
            session = es.tekniker.framework.ktek.questionnaire.KTEKPersistentManager.instance().getSession();
            session.beginTransaction();

            lDAOFactory = es.tekniker.framework.ktek.questionnaire.DAOFactory.getDAOFactory();
            instanceDAO = lDAOFactory.getKtek_parameterDAO();

            objKtek_parameterCriteria = new Ktek_parameterCriteria();
            objKtek_fk_idquestionnaireitemCriteria = objKtek_parameterCriteria
                    .createKtek_fk_idquestionnaireitemCriteria();
            objKtek_fk_idquestionnaireitemCriteria.ktek_pk_idquestionnaireitem.eq(idquestionnaireitem);
            objKtek_fk_idquestionnaireitemCriteria.isdeleted.eq((short) 0);

            instance = instanceDAO.loadKtek_parameterByCriteria(objKtek_parameterCriteria);

            session.close();

            if (instance != null) {
                log.debug("getQuestionnaireParameters4QuestionnaireItem instance is not null ");
            } else {
                log.debug("getQuestionnaireParameters4QuestionnaireItem instance is null ");
            }

        } catch (Exception e) {
            log.error("getQuestionnaireParameters4QuestionnaireItem Exception " + e.getMessage());
            e.printStackTrace();
            try {
                if (session != null)
                    session.close();
            } catch (PersistentException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }
        return instance;
    }

    private Ktek_parameter getQuestionnaireParameters4QuestionnaireItem(PersistentSession session,
            int idquestionnaireitem) {
        Ktek_parameter instance = null;

        DAOFactory lDAOFactory = null;
        Ktek_parameterDAO instanceDAO = null;
        Ktek_parameterCriteria objKtek_parameterCriteria = null;
        Ktek_questionnaireitemCriteria objKtek_fk_idquestionnaireitemCriteria = null;

        try {

            lDAOFactory = es.tekniker.framework.ktek.questionnaire.DAOFactory.getDAOFactory();
            instanceDAO = lDAOFactory.getKtek_parameterDAO();

            objKtek_parameterCriteria = new Ktek_parameterCriteria();
            objKtek_fk_idquestionnaireitemCriteria = objKtek_parameterCriteria
                    .createKtek_fk_idquestionnaireitemCriteria();
            objKtek_fk_idquestionnaireitemCriteria.ktek_pk_idquestionnaireitem.eq(idquestionnaireitem);
            objKtek_fk_idquestionnaireitemCriteria.isdeleted.eq((short) 0);

            instance = instanceDAO.loadKtek_parameterByCriteria(objKtek_parameterCriteria);

            if (instance != null) {
                log.debug("getQuestionnaireParameters4QuestionnaireItem instance is not null ");
            } else {
                log.debug("getQuestionnaireParameters4QuestionnaireItem instance is null ");
            }

        } catch (Exception e) {
            log.error("getQuestionnaireParameters4QuestionnaireItem Exception " + e.getMessage());
            e.printStackTrace();
        }
        return instance;
    }

    public Ktek_unit getUnit4QuestionnaireItem(int idquestionnaireitem) {
        Ktek_unit instance = null;

        PersistentSession session = null;
        DAOFactory lDAOFactory = null;
        Ktek_unitDAO instanceDAO = null;
        Ktek_unitCriteria objKtek_unitCriteria = null;
        try {
            session = es.tekniker.framework.ktek.questionnaire.KTEKPersistentManager.instance().getSession();
            session.beginTransaction();

            lDAOFactory = es.tekniker.framework.ktek.questionnaire.DAOFactory.getDAOFactory();
            instanceDAO = lDAOFactory.getKtek_unitDAO();

            objKtek_unitCriteria = new Ktek_unitCriteria();
            objKtek_unitCriteria
                    .createKtek_unit_parameterCriteria().ktek_fk_idquestionnaireitem_ktek_fk_idquestionnaireitem
                            .eq(idquestionnaireitem);
            instance = instanceDAO.loadKtek_unitByCriteria(objKtek_unitCriteria);

            session.close();

            if (instance != null) {
                log.debug("getUnit4QuestionnaireItem instance is not null ");
            } else {
                log.debug("getUnit4QuestionnaireItem instance is null ");
            }

        } catch (Exception e) {
            log.error("getUnit4QuestionnaireItem Exception " + e.getMessage());
            e.printStackTrace();
            try {
                if (session != null)
                    session.close();
            } catch (PersistentException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }
        return instance;
    }

    public Ktek_userquestionnaire_planning[] getQuestionnaireMonitoringSchedule(String codUser, long datefrom,
            long dateto, short typemonitoringactivity) {
        Ktek_userquestionnaire_planning[] instanceArray = null;

        PersistentSession session = null;
        DAOFactory lDAOFactory = null;
        Ktek_userquestionnaire_planningDAO instanceDAO = null;
        Ktek_userquestionnaire_planningCriteria objKtek_userquestionnaire_planningCriteria = null;
        try {
            session = es.tekniker.framework.ktek.questionnaire.KTEKPersistentManager.instance().getSession();
            session.beginTransaction();

            lDAOFactory = es.tekniker.framework.ktek.questionnaire.DAOFactory.getDAOFactory();
            instanceDAO = lDAOFactory.getKtek_userquestionnaire_planningDAO();

            objKtek_userquestionnaire_planningCriteria = new Ktek_userquestionnaire_planningCriteria();

            objKtek_userquestionnaire_planningCriteria.plannedfrom.ge(datefrom);
            objKtek_userquestionnaire_planningCriteria.plannedto.le(dateto);
            objKtek_userquestionnaire_planningCriteria.coduser.eq(codUser);

            if (typemonitoringactivity > 0)
                objKtek_userquestionnaire_planningCriteria
                        .createKtek_fk_idquestionnaireCriteria().typemonitoringactivity.eq(typemonitoringactivity);

            instanceArray = instanceDAO
                    .listKtek_userquestionnaire_planningByCriteria(objKtek_userquestionnaire_planningCriteria);

            if (instanceArray != null) {
                log.debug(
                        "getKtekQuestionnaireMonitoringSchedule instanceArray is not null " + instanceArray.length);
            } else {
                log.debug("getKtekQuestionnaireMonitoringSchedule instanceArray is null ");
            }
            session.close();

        } catch (Exception e) {
            log.error("getKtekQuestionnaireMonitoringSchedule Exception " + e.getMessage());
            e.printStackTrace();
            try {
                if (session != null)
                    session.close();
            } catch (PersistentException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }
        return instanceArray;
    }

    public Ktek_userquestionnaire_planning[] getQuestionnaireMonitoringScheduleNow(String codUser,
            String codtelecareprogram, short typemonitoringactivity, short status) {
        Ktek_userquestionnaire_planning[] instanceArray = null;

        PersistentSession session = null;
        DAOFactory lDAOFactory = null;
        Ktek_userquestionnaire_planningDAO instanceDAO = null;
        Ktek_userquestionnaire_planningCriteria objKtek_userquestionnaire_planningCriteria = null;
        long nowInImillis = 0;
        try {

            nowInImillis = Utils.getCalendarGMT().getTimeInMillis();
            session = es.tekniker.framework.ktek.questionnaire.KTEKPersistentManager.instance().getSession();
            lDAOFactory = es.tekniker.framework.ktek.questionnaire.DAOFactory.getDAOFactory();
            instanceDAO = lDAOFactory.getKtek_userquestionnaire_planningDAO();

            objKtek_userquestionnaire_planningCriteria = new Ktek_userquestionnaire_planningCriteria();
            objKtek_userquestionnaire_planningCriteria.plannedfrom.le(nowInImillis);
            objKtek_userquestionnaire_planningCriteria.plannedto.ge(nowInImillis);
            objKtek_userquestionnaire_planningCriteria.codtelecareprogram.eq(codtelecareprogram);
            objKtek_userquestionnaire_planningCriteria.coduser.eq(codUser);

            if (status > 0)
                objKtek_userquestionnaire_planningCriteria.statusquestionnaire.eq(status);

            if (typemonitoringactivity > 0)
                objKtek_userquestionnaire_planningCriteria
                        .createKtek_fk_idquestionnaireCriteria().typemonitoringactivity.eq(typemonitoringactivity);

            instanceArray = instanceDAO
                    .listKtek_userquestionnaire_planningByCriteria(objKtek_userquestionnaire_planningCriteria);

            if (instanceArray != null) {
                log.debug(
                        "getQuestionnaireMonitoringScheduleNow instanceArray is not null " + instanceArray.length);
            } else {
                log.debug("getQuestionnaireMonitoringScheduleNow instanceArray is null ");
            }
            session.close();

        } catch (Exception e) {
            log.error("getQuestionnaireMonitoringScheduleNow Exception " + e.getMessage());
            e.printStackTrace();
            try {
                if (session != null)
                    session.close();
            } catch (PersistentException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }
        return instanceArray;
    }

    public boolean saveQuestionnaireMonitoringSchedule(List<Ktek_userquestionnaire_planning> list) {
        boolean boolOK = false;
        PersistentSession session = null;
        PersistentTransaction tr = null;

        try {

            if (list != null) {
                session = es.tekniker.framework.ktek.questionnaire.KTEKPersistentManager.instance().getSession();
                tr = session.beginTransaction();

                for (int i = 0; i < list.size(); i++) {
                    session.save(list.get(i));
                }

                if (tr.wasCommitted() == false)
                    tr.commit();

                session.close();
            }
            boolOK = true;

        } catch (Exception e) {
            log.error("setQuestionnaireMonitoringSchedule Exception " + e.getMessage());
            e.printStackTrace();
            try {
                if (session != null)
                    session.close();
            } catch (PersistentException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }
        return boolOK;
    }

    public int getScoreQuestionnaireResult(KtekQuestionnaireResultEntity instance) {
        int score = 0;
        PersistentSession session = null;
        PersistentTransaction tr = null;

        try {

            session = es.tekniker.framework.ktek.questionnaire.KTEKPersistentManager.instance().getSession();
            tr = session.beginTransaction();

            score = getScoreQuestionnaireResult(session, instance);

            if (tr.wasCommitted() == false)
                tr.commit();

            session.close();

        } catch (PersistentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            try {
                if (session != null)
                    session.close();
            } catch (PersistentException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }

        return score;
    }

    private int getScoreQuestionnaireResult(PersistentSession session, KtekQuestionnaireResultEntity instance) {
        int score = 0;
        int scoreSection = 0;
        int weightQuestion = 0;

        Iterator<KtekQuestionnaireSectionResultEntity> itSection = null;
        Iterator<KtekQuestionnaireItemResultEntity> itItem = null;
        KtekQuestionnaireSectionResultEntity itResultQuestionnaireSection = null;
        KtekQuestionnaireItemResultEntity itResultQuestionnaireItem = null;
        String codAnswer = null;
        Ktek_questionnairesection objQuestionnaireSection = null;
        Ktek_answer instanceAnswer = null;
        Ktek_question instanceQuestion = null;
        itSection = instance.getListsections().iterator();

        try {
            while (itSection.hasNext()) {
                itResultQuestionnaireSection = (KtekQuestionnaireSectionResultEntity) itSection.next();

                // GET QUESTIONNAIRE SECTION 
                log.debug("getScoreQuestionnaireResult 5- GET QUESTIONNAIRE SECTION ");
                objQuestionnaireSection = getQuestionnaireSection(session,
                        itResultQuestionnaireSection.getIdquestionnairesection());

                if (objQuestionnaireSection != null) {
                    // PARSE RESULT QUESTIONNAIRE ITEMS
                    itItem = itResultQuestionnaireSection.getListitems().iterator();
                    while (itItem.hasNext()) {
                        itResultQuestionnaireItem = (KtekQuestionnaireItemResultEntity) itItem.next();

                        // GET LIST CODANSWER
                        if (itResultQuestionnaireItem.getListcodanswer() != null) {
                            for (int i = 0; i < itResultQuestionnaireItem.getListcodanswer().length; i++) {

                                codAnswer = itResultQuestionnaireItem.getListcodanswer()[i];
                                instanceAnswer = getQuestionnaireAnswer(session, codAnswer);

                                instanceQuestion = getQuestion4QuestionnaireItem(session,
                                        itResultQuestionnaireItem.getIdquestionnaireitem());
                                if (instanceQuestion != null) {
                                    weightQuestion = instanceQuestion.getWeightquestion();
                                    log.debug("getScoreQuestionnaireResult weight is NOT null " + weightQuestion);
                                } else {
                                    log.debug("getScoreQuestionnaireResult weight is null ");
                                }

                                if (instanceAnswer != null) {
                                    itResultQuestionnaireItem.setScore(instanceAnswer.getScoreanswer());
                                    scoreSection = scoreSection
                                            + (instanceAnswer.getScoreanswer()) * weightQuestion;

                                    log.debug("getScoreQuestionnaireResult Idquestionnaireitem "
                                            + itResultQuestionnaireItem.getIdquestionnaireitem());
                                    log.debug("getScoreQuestionnaireResult weight " + weightQuestion);
                                    log.debug("getScoreQuestionnaireResult score answer "
                                            + instanceAnswer.getScoreanswer());
                                    log.debug("getScoreQuestionnaireResult score section " + scoreSection);
                                }
                            }
                        }
                    }
                    score = score + scoreSection;
                    itResultQuestionnaireSection.setScore((short) scoreSection);
                }
                instance.setScore((short) score);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return score;
    }

    public KtekQuestionnaireResultDataEntity getQuestionnaireResultWithValues(int idresultquestionnaire)
            throws KtekExceptionEntity {
        Ktek_result_questionnaire instanceResult = null;
        PersistentSession session = null;

        List<KtekQuestionnaireSectionResultDataEntity> listsections = null;
        KtekQuestionnaireSectionResultDataEntity instanceSection = null;

        List<KtekQuestionnaireItemResultDataEntity> listItems = null;
        KtekQuestionnaireItemResultDataEntity instanceItem = null;

        Ktek_result_questionnairesection instanceResultSection = null;
        Ktek_result_questionnaireitem instanceResultItem = null;

        Iterator<Ktek_result_questionnairesection> itSections = null;
        Iterator<Ktek_result_questionnaireitem> itItems = null;
        String sValueCodQuestionnaireItem = null;
        String sValueCodAnswer = null;

        KtekQuestionnaireResultDataEntity entity = null;

        String keyException = null;
        int keyExceptionCode = 0;

        try {
            session = es.tekniker.framework.ktek.questionnaire.KTEKPersistentManager.instance().getSession();
            session.beginTransaction();

            instanceResult = getQuestionnaireResultBySession(session, idresultquestionnaire);

            if (instanceResult == null) {

                keyException = KtekExceptionMessage.EXCEPTION_CODE_QUESTIONNAIRE_RESULT_DOES_NOT_EXIST;
                keyExceptionCode = KtekExceptionCode.EXCEPTION_CODE_QUESTIONNAIRE_RESULT_DOES_NOT_EXIST;

                KtekExceptionEntity e = new KtekExceptionEntity();
                e.setCode(keyExceptionCode);
                e.setMessage(keyException);
                e.setFunction("QuestionnaireManagerDB.getQuestionnaireResultWithValues");
                e.setParams(String.valueOf(idresultquestionnaire));
                throw e;
            } else {
                entity = new KtekQuestionnaireResultDataEntity();

                entity.setCodtelecareprogram(instanceResult.getCodtelecareprogram());
                entity.setCoduser(instanceResult.getCoduserid());
                entity.setIdquestionnaire(instanceResult.getKtek_fk_idquestionnaire().getKtek_pk_idquestionnaire());
                entity.setIdresultquestionnaire(instanceResult.getKtek_pk_idresultquestionnaire());
                entity.setResultcreation(instanceResult.getResultcreation());
                entity.setScore(instanceResult.getEvaluationscorequestionnaire());

                if (instanceResult.getKtek_result_questionnairesection() != null) {
                    listsections = new ArrayList<KtekQuestionnaireSectionResultDataEntity>();

                    itSections = instanceResult.getKtek_result_questionnairesection().iterator();
                    while (itSections.hasNext()) {
                        instanceResultSection = (Ktek_result_questionnairesection) itSections.next();

                        instanceSection = new KtekQuestionnaireSectionResultDataEntity();
                        instanceSection.setScore(instanceResultSection.getEvaluationscorequestionnairesection());
                        instanceSection.setIdquestionnairesection(instanceResultSection
                                .getKtek_fk_idquestionnairesection().getKtek_pk_idquestionnairesection());
                        instanceSection.setIdresultquestionnairesection(
                                instanceResultSection.getKtek_pk_idresultquestionnairesection());

                        if (instanceResultSection.getKtek_result_questionnaireitem() != null) {
                            listItems = new ArrayList<KtekQuestionnaireItemResultDataEntity>();

                            itItems = instanceResultSection.getKtek_result_questionnaireitem().iterator();
                            while (itItems.hasNext()) {
                                instanceResultItem = (Ktek_result_questionnaireitem) itItems.next();

                                instanceItem = new KtekQuestionnaireItemResultDataEntity();

                                instanceItem.setIdquestionnaireitem(instanceResultItem
                                        .getKtek_fk_idquestionnaireitem().getKtek_pk_idquestionnaireitem());
                                instanceItem.setIdresultquestionnaireitem(
                                        instanceResultItem.getKtek_pk_idresultquestionnaireitem());
                                if (instanceResultItem.getScoreanswer() != null)
                                    instanceItem.setScore(instanceResultItem.getScoreanswer());

                                if (instanceResultItem
                                        .getTyperesult() == KtekQuestionnaireItemResultType.QUESTIONNAIRE_ITEM_RESULT_TYPE_INTEGER)
                                    sValueCodAnswer = String.valueOf(instanceResultItem.getIntegervalue());
                                else if (instanceResultItem
                                        .getTyperesult() == KtekQuestionnaireItemResultType.QUESTIONNAIRE_ITEM_RESULT_TYPE_DECIMAL)
                                    sValueCodAnswer = String.valueOf(instanceResultItem.getDecimalvalue());
                                else if (instanceResultItem
                                        .getTyperesult() == KtekQuestionnaireItemResultType.QUESTIONNAIRE_ITEM_RESULT_TYPE_STRING)
                                    sValueCodAnswer = instanceResultItem.getStringvalue();
                                else if (instanceResultItem
                                        .getTyperesult() == KtekQuestionnaireItemResultType.QUESTIONNAIRE_ITEM_RESULT_TYPE_TEXT)
                                    sValueCodAnswer = instanceResultItem.getTextvalue();
                                else if (instanceResultItem
                                        .getTyperesult() == KtekQuestionnaireItemResultType.QUESTIONNAIRE_ITEM_RESULT_TYPE_ANSWERSET)
                                    sValueCodAnswer = String.valueOf(instanceResultItem.getCodanswer());
                                else if (instanceResultItem
                                        .getTyperesult() == KtekQuestionnaireItemResultType.QUESTIONNAIRE_ITEM_RESULT_TYPE_DATETIME)
                                    sValueCodAnswer = String.valueOf(instanceResultItem.getDecimalvalue());
                                else if (instanceResultItem
                                        .getTyperesult() == KtekQuestionnaireItemResultType.QUESTIONNAIRE_ITEM_RESULT_TYPE_IMAGE)
                                    sValueCodAnswer = instanceResultItem.getStringvalue();
                                else
                                    sValueCodAnswer = instanceResultItem.getCodanswer();

                                sValueCodQuestionnaireItem = instanceResultItem.getKtek_fk_idquestionnaireitem()
                                        .getKtek_uk_codquestionnaireitem();

                                instanceItem.setCodquestionnaireitemvalue(sValueCodQuestionnaireItem);
                                instanceItem.setCodanswervalue(sValueCodAnswer);

                                listItems.add(instanceItem);
                            }
                        }
                        instanceSection.setListItems(listItems);
                        listsections.add(instanceSection);
                    }
                }
                entity.setListsections(listsections);
            }

            session.close();

            if (entity != null) {
                log.debug("getQuestionnaireResultWithValues is not null ");
            } else {
                log.debug("getQuestionnaireResultWithValues is null ");
            }

        } catch (PersistentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            try {
                if (session != null)
                    session.close();
            } catch (PersistentException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }
        return entity;
    }

    private Ktek_result_questionnaire getQuestionnaireResultBySession(PersistentSession session,
            int idresultquestionnaire) {
        Ktek_result_questionnaire instance = null;
        DAOFactory lDAOFactory = null;
        Ktek_result_questionnaireDAO instanceDAO = null;

        try {
            lDAOFactory = es.tekniker.framework.ktek.questionnaire.DAOFactory.getDAOFactory();
            instanceDAO = lDAOFactory.getKtek_result_questionnaireDAO();

            instance = instanceDAO.getKtek_result_questionnaireByORMID(idresultquestionnaire);

            if (instance != null) {
                log.debug("getQuestionnaireResultBySession is not null ");
            } else {
                log.debug("getQuestionnaireResultBySession is null ");
            }

        } catch (PersistentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return instance;
    }

    public Ktek_result_questionnaire getQuestionnaireResult(int idresultquestionnaire) {
        Ktek_result_questionnaire instance = null;
        PersistentSession session = null;

        try {

            session = es.tekniker.framework.ktek.questionnaire.KTEKPersistentManager.instance().getSession();
            instance = getQuestionnaireResultBySession(session, idresultquestionnaire);
            session.close();

            if (instance != null) {
                log.debug("getQuestionnaireResult is not null ");
            } else {
                log.debug("getQuestionnaireResult is null ");
            }

        } catch (PersistentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return instance;
    }

    public Ktek_questionnaire[] getQuestionnaires4TypeMonitoringActivityPlanned(short typeMonitoringActivity,
            String codUser, String codtelecareprogram, short status) {
        Ktek_questionnaire[] arrayInstance = null;
        DAOFactory lDAOFactory = null;
        Ktek_questionnaireDAO instanceDAO = null;
        Ktek_questionnaireCriteria objKtek_questionnaireCriteria = null;
        long nowInMillis = 0, todayStartInMillis = 0, todayEndInMillis = 0;
        PersistentSession session = null;
        Ktek_userquestionnaire_planningCriteria objKtek_userquestionnaire_planningCriteria = null;

        try {
            int hours, minutes, seconds;
            nowInMillis = Utils.getCalendarGMT().getTimeInMillis();

            hours = 0;
            minutes = 0;
            seconds = 0;
            todayStartInMillis = Utils.getTimeinMillis4TimeGMT(hours, minutes, seconds);

            hours = 23;
            minutes = 59;
            seconds = 59;
            todayEndInMillis = Utils.getTimeinMillis4TimeGMT(hours, minutes, seconds);

            session = es.tekniker.framework.ktek.questionnaire.KTEKPersistentManager.instance().getSession();
            session.beginTransaction();

            lDAOFactory = es.tekniker.framework.ktek.questionnaire.DAOFactory.getDAOFactory();
            instanceDAO = lDAOFactory.getKtek_questionnaireDAO();

            objKtek_questionnaireCriteria = new Ktek_questionnaireCriteria();
            objKtek_questionnaireCriteria.typemonitoringactivity.eq(typeMonitoringActivity);
            objKtek_questionnaireCriteria.isdeleted.eq((short) 0);
            objKtek_questionnaireCriteria.datevalidfrom.lt(nowInMillis);

            objKtek_userquestionnaire_planningCriteria = objKtek_questionnaireCriteria
                    .createKtek_userquestionnaire_planningCriteria();
            objKtek_userquestionnaire_planningCriteria.coduser.eq(codUser);
            objKtek_userquestionnaire_planningCriteria.codtelecareprogram.eq(codtelecareprogram);
            objKtek_userquestionnaire_planningCriteria.statusquestionnaire.eq(status);
            objKtek_userquestionnaire_planningCriteria.plannedfrom.le(nowInMillis);
            objKtek_userquestionnaire_planningCriteria.plannedto.ge(nowInMillis);

            objKtek_questionnaireCriteria
                    .setProjection(Projections.projectionList()
                            .add(Projections.groupProperty("ktek_pk_idquestionnaire"), "ktek_pk_idquestionnaire"))
                    .setResultTransformer(Transformers.aliasToBean(Ktek_questionnaire.class));

            arrayInstance = instanceDAO.listKtek_questionnaireByCriteria(objKtek_questionnaireCriteria);

            log.error("nowInMillis " + nowInMillis);

            if (arrayInstance != null)
                log.debug(
                        "getQuestionnaires4TypeMonitoringActivityPlanned instance is not null Before Filter unique values "
                                + arrayInstance.length);
            else
                log.info(
                        "getQuestionnaires4TypeMonitoringActivityPlanned instance is null for typeMonitoringActivity "
                                + typeMonitoringActivity);

            if (arrayInstance.length > 0) {
                Integer[] arrayIds = new Integer[arrayInstance.length];
                for (int i = 0; i < arrayInstance.length; i++) {
                    arrayIds[i] = arrayInstance[i].getKtek_pk_idquestionnaire();
                }

                objKtek_questionnaireCriteria = new Ktek_questionnaireCriteria();
                objKtek_questionnaireCriteria.ktek_pk_idquestionnaire.in(arrayIds);
                arrayInstance = instanceDAO.listKtek_questionnaireByCriteria(objKtek_questionnaireCriteria);
            }

            session.close();

        } catch (PersistentException e) {
            log.error("getQuestionnaires4TypeMonitoringActivityPlanned Exception " + e.getMessage());
            e.printStackTrace();
            try {
                if (session != null)
                    session.close();
            } catch (PersistentException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }

        return arrayInstance;
    }

    public Ktek_result_questionnaire[] getQuestionnaireResults(String codUser, boolean all, long datefrom,
            long dateto, int orderby, String codtelecareprogram, short typemonitoringactivity)
            throws KtekExceptionEntity {
        Ktek_result_questionnaire[] array = null;
        DAOFactory lDAOFactory = null;
        Ktek_result_questionnaireDAO instanceDAO = null;
        Ktek_result_questionnaireCriteria objKtek_result_questionnaireCriteria = null;
        Ktek_questionnaireCriteria objKtek_fk_idquestionnaireCriteria = null;
        PersistentSession session = null;
        try {
            session = es.tekniker.framework.ktek.questionnaire.KTEKPersistentManager.instance().getSession();
            session.beginTransaction();
            lDAOFactory = es.tekniker.framework.ktek.questionnaire.DAOFactory.getDAOFactory();
            instanceDAO = lDAOFactory.getKtek_result_questionnaireDAO();

            objKtek_result_questionnaireCriteria = new Ktek_result_questionnaireCriteria();

            objKtek_fk_idquestionnaireCriteria = objKtek_result_questionnaireCriteria
                    .createKtek_fk_idquestionnaireCriteria();
            objKtek_fk_idquestionnaireCriteria.typequestionnaire
                    .eq(KtekQuestionnaireType.QUESTIONNAIRE_TYPE_MONITORING);
            objKtek_fk_idquestionnaireCriteria.typemonitoringactivity.eq(typemonitoringactivity);
            objKtek_result_questionnaireCriteria.codtelecareprogram.eq(codtelecareprogram);

            if (all == false)
                objKtek_result_questionnaireCriteria.resultcreation.between(datefrom, dateto);

            if (orderby == 1)
                objKtek_result_questionnaireCriteria.addOrder(Order.desc("resultcreation"));
            else if (orderby == 2)
                objKtek_result_questionnaireCriteria.addOrder(Order.asc("resultcreation"));

            objKtek_result_questionnaireCriteria.coduserid.eq(codUser);

            array = instanceDAO.listKtek_result_questionnaireByCriteria(objKtek_result_questionnaireCriteria);

            session.close();

            if (array == null)
                log.debug("getQuestionnaireResults array is null");
            else
                log.debug("getQuestionnaireResults array is not null " + array.length);

        } catch (PersistentException e) {
            log.error("getQuestionnaireResults Exception " + e.getMessage());
            e.printStackTrace();
            try {
                if (session != null)
                    session.close();
            } catch (PersistentException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }

            KtekExceptionEntity eDB = new KtekExceptionEntity();
            eDB.setCode(KtekExceptionCode.EXCEPTION_CODE_PERSISSTENT_EXCEPTION);
            eDB.setMessage(e.getMessage());
            eDB.setFunction("QuestionnaireManagerDB.getQuestionnaireResults");
            eDB.setParams("");
            throw eDB;
        }

        return array;
    }

    public Ktek_result_questionnaireitem[] getResultQuestionnaireItems4ResultQuestionnaire(boolean all,
            long datefrom, long dateto, int orderby, short typemonitoringactivity, String codUser, Integer[] ids,
            String codtelecareprogram) {

        Ktek_result_questionnaireitem[] array = null;
        PersistentSession session = null;
        DAOFactory lDAOFactory = null;
        Ktek_result_questionnaireitemDAO instanceDAO = null;
        Ktek_result_questionnaireitemCriteria objKtek_result_questionnaireitemCriteria = null;
        Ktek_result_questionnaireCriteria objKtek_result_questionnaireCriteria = null;
        Ktek_questionnaireCriteria objKtek_fk_idquestionnaireCriteria = null;
        try {

            session = es.tekniker.framework.ktek.questionnaire.KTEKPersistentManager.instance().getSession();
            lDAOFactory = es.tekniker.framework.ktek.questionnaire.DAOFactory.getDAOFactory();

            instanceDAO = lDAOFactory.getKtek_result_questionnaireitemDAO();

            objKtek_result_questionnaireitemCriteria = new Ktek_result_questionnaireitemCriteria();

            objKtek_result_questionnaireCriteria = objKtek_result_questionnaireitemCriteria
                    .createKtek_fk_idresultquestionnairesectionCriteria()
                    .createKtek_fk_idresultquestionnaireCriteria();

            objKtek_fk_idquestionnaireCriteria = objKtek_result_questionnaireCriteria
                    .createKtek_fk_idquestionnaireCriteria();
            objKtek_fk_idquestionnaireCriteria.typequestionnaire
                    .eq(KtekQuestionnaireType.QUESTIONNAIRE_TYPE_MONITORING);
            objKtek_fk_idquestionnaireCriteria.typemonitoringactivity.eq(typemonitoringactivity);

            objKtek_result_questionnaireCriteria
                    .createKtek_fk_iduserquestionnaireplanningCriteria().codtelecareprogram.eq(codtelecareprogram);

            if (all == false)
                objKtek_result_questionnaireCriteria.resultcreation.between(datefrom, dateto);

            objKtek_result_questionnaireCriteria.coduserid.eq(codUser);
            objKtek_result_questionnaireitemCriteria.addOrder(Order.asc("ktek_fk_idquestionnaireitem"));

            /* ORDER BY parameter*/
            if (orderby == 1)
                objKtek_result_questionnaireCriteria.addOrder(Order.desc("resultcreation"));
            else if (orderby == 2)
                objKtek_result_questionnaireCriteria.addOrder(Order.asc("resultcreation"));

            if (ids != null && ids.length > 0 && ids[0] != 0) {
                objKtek_result_questionnaireitemCriteria
                        .createKtek_fk_idquestionnaireitemCriteria().ktek_pk_idquestionnaireitem.in(ids);
            } else {
                if (ids != null && ids.length > 0)
                    log.debug("getResultQuestionnaireItems4ResultQuestionnaire ids[0] value is " + ids[0]);
            }

            array = instanceDAO
                    .listKtek_result_questionnaireitemByCriteria(objKtek_result_questionnaireitemCriteria);

            if (array != null)
                log.debug("getResultQuestionnaireItems4ResultQuestionnaire array is not null " + array.length);
            else
                log.debug("getResultQuestionnaireItems4ResultQuestionnaire array is null");
            session.close();

        } catch (PersistentException e) {
            log.error("getResultQuestionnaireItems4ResultQuestionnaire Exception " + e.getMessage());
            e.printStackTrace();
            try {
                if (session != null)
                    session.close();
            } catch (PersistentException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }

        return array;
    }

    public Ktek_result_questionnaire[] getQuestionnaireResultsByIds(boolean all, long datefrom, long dateto,
            int orderby, short typemonitoringactivity, Integer[] ids, String codUser) {
        Ktek_result_questionnaire[] array = null;
        DAOFactory lDAOFactory = null;
        Ktek_result_questionnaireDAO instanceDAO = null;
        Ktek_result_questionnaireCriteria objKtek_result_questionnaireCriteria = null;
        Ktek_questionnaireCriteria objKtek_fk_idquestionnaireCriteria = null;
        PersistentSession session = null;

        try {

            session = es.tekniker.framework.ktek.questionnaire.KTEKPersistentManager.instance().getSession();
            session.beginTransaction();
            lDAOFactory = es.tekniker.framework.ktek.questionnaire.DAOFactory.getDAOFactory();
            instanceDAO = lDAOFactory.getKtek_result_questionnaireDAO();

            objKtek_result_questionnaireCriteria = new Ktek_result_questionnaireCriteria();

            objKtek_fk_idquestionnaireCriteria = objKtek_result_questionnaireCriteria
                    .createKtek_fk_idquestionnaireCriteria();
            objKtek_fk_idquestionnaireCriteria.typequestionnaire
                    .eq(KtekQuestionnaireType.QUESTIONNAIRE_TYPE_MONITORING);
            objKtek_fk_idquestionnaireCriteria.typemonitoringactivity.eq(typemonitoringactivity);

            if (all == false)
                objKtek_result_questionnaireCriteria.resultcreation.between(datefrom, dateto);

            if (ids != null && ids.length > 0 && ids[0] != 0) {
                objKtek_result_questionnaireCriteria.createKtek_result_questionnairesectionCriteria()
                        .createKtek_result_questionnaireitemCriteria()
                        .createKtek_fk_idquestionnaireitemCriteria().ktek_pk_idquestionnaireitem.in(ids);
            } else {
                if (ids != null && ids.length > 0)
                    log.debug("getQuestionnaireResultsByIds ids[0] value is " + ids[0]);
            }

            objKtek_result_questionnaireCriteria.coduserid.eq(codUser);

            if (orderby == 1)
                objKtek_result_questionnaireCriteria.addOrder(Order.desc("resultcreation"));
            else if (orderby == 2)
                objKtek_result_questionnaireCriteria.addOrder(Order.asc("resultcreation"));

            array = instanceDAO.listKtek_result_questionnaireByCriteria(objKtek_result_questionnaireCriteria);

            session.close();

            if (array == null)
                log.debug("getQuestionnaireResultsByIds array is null");
            else
                log.debug("getQuestionnaireResultsByIds array is not null " + array.length);

        } catch (PersistentException e) {
            log.error("getQuestionnaireResultsByIds Exception " + e.getMessage());
            e.printStackTrace();
            try {
                if (session != null)
                    session.close();
            } catch (PersistentException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }

        return array;
    }

    public Ktek_questionnaire[] getQuestionnaireWithResults(long datefrom, long dateto, int orderby, short type) {
        Ktek_questionnaire[] array = null;
        DAOFactory lDAOFactory = null;
        Ktek_questionnaireDAO instanceDAO = null;
        Ktek_questionnaireCriteria objKtek_questionnaireCriteria = null;
        Ktek_result_questionnaireCriteria objKtek_result_questionnaireCriteria = null;
        PersistentSession session = null;
        try {

            session = es.tekniker.framework.ktek.questionnaire.KTEKPersistentManager.instance().getSession();
            session.beginTransaction();
            lDAOFactory = es.tekniker.framework.ktek.questionnaire.DAOFactory.getDAOFactory();
            instanceDAO = lDAOFactory.getKtek_questionnaireDAO();

            objKtek_questionnaireCriteria = new Ktek_questionnaireCriteria();

            objKtek_result_questionnaireCriteria = objKtek_questionnaireCriteria
                    .createKtek_result_questionnaireCriteria();
            objKtek_result_questionnaireCriteria.resultcreation.between(datefrom, dateto);
            objKtek_questionnaireCriteria.typequestionnaire.eq(type);
            if (orderby == 1)
                objKtek_result_questionnaireCriteria.addOrder(Order.desc("resultcreation"));
            else if (orderby == 2)
                objKtek_result_questionnaireCriteria.addOrder(Order.asc("resultcreation"));

            array = instanceDAO.listKtek_questionnaireByCriteria(objKtek_questionnaireCriteria);

            session.close();

            if (array == null)
                log.debug("getQuestionnaireWithResults array is null");
            else
                log.debug("getQuestionnaireWithResults array is not null " + array.length);

        } catch (PersistentException e) {
            log.error("getQuestionnaireWithResults Exception " + e.getMessage());
            e.printStackTrace();
            try {
                if (session != null)
                    session.close();
            } catch (PersistentException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }
        return array;
    }

    public Ktek_questionnaireitem[] getQuestionnaireitemList4QuestionnaireSet(Integer[] idQuestionnaireArray,
            short[] typeMonitoringActivityArray) {
        Ktek_questionnaireitem[] array = null;
        Ktek_questionnaireitemCriteria objKtek_questionnaireitemCriteria = null;

        Ktek_questionnaireCriteria objKtek_questionnaireCriteria = null;

        DAOFactory lDAOFactory = null;
        Ktek_questionnaireitemDAO instanceDAO = null;
        PersistentSession session = null;

        try {
            session = es.tekniker.framework.ktek.questionnaire.KTEKPersistentManager.instance().getSession();
            session.beginTransaction();
            lDAOFactory = es.tekniker.framework.ktek.questionnaire.DAOFactory.getDAOFactory();
            instanceDAO = lDAOFactory.getKtek_questionnaireitemDAO();

            objKtek_questionnaireitemCriteria = new Ktek_questionnaireitemCriteria();

            objKtek_questionnaireCriteria = objKtek_questionnaireitemCriteria.createKtek_qitem_sectionCriteria()
                    .createKtek_fk_idquestionnairesectionCriteria().createKtek_qsection_questionnaireCriteria()
                    .createKtek_fk_idquestionnaireCriteria();

            objKtek_questionnaireCriteria.typemonitoringactivity.in(typeMonitoringActivityArray);
            objKtek_questionnaireCriteria.ktek_pk_idquestionnaire.in(idQuestionnaireArray);
            objKtek_questionnaireitemCriteria.isdeleted.eq((short) 0);

            objKtek_questionnaireitemCriteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
            array = instanceDAO.listKtek_questionnaireitemByCriteria(objKtek_questionnaireitemCriteria);

            session.close();
            if (array == null)
                log.debug("getQuestionnaireitemList4QuestionnaireSet array is null");
            else
                log.debug("getQuestionnaireitemList4QuestionnaireSet array is not null " + array.length);

        } catch (PersistentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            try {
                if (session != null)
                    session.close();
            } catch (PersistentException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }
        return array;
    }

    public Ktek_questionnaireitem[] getQuestionnaireitemList4QuestionnairePlannedFinished(String coduser,
            short[] typeMonitoringActivityArray, String codtelecareprogram) {
        Ktek_questionnaireitem[] array = null;
        Ktek_questionnaireitemCriteria objKtek_questionnaireitemCriteria = null;

        DAOFactory lDAOFactory = null;
        Ktek_questionnaireitemDAO instanceDAO = null;
        PersistentSession session = null;
        Ktek_userquestionnaire_planningCriteria objKtek_userquestionnaire_planningCriteria = null;

        try {

            session = es.tekniker.framework.ktek.questionnaire.KTEKPersistentManager.instance().getSession();
            session.beginTransaction();
            lDAOFactory = es.tekniker.framework.ktek.questionnaire.DAOFactory.getDAOFactory();
            instanceDAO = lDAOFactory.getKtek_questionnaireitemDAO();

            objKtek_questionnaireitemCriteria = new Ktek_questionnaireitemCriteria();

            objKtek_questionnaireitemCriteria.createKtek_result_questionnaireitemCriteria()
                    .createKtek_fk_idresultquestionnairesectionCriteria()
                    .createKtek_fk_idquestionnairesectionCriteria().createKtek_qsection_questionnaireCriteria()
                    .createKtek_fk_idquestionnaireCriteria().typemonitoringactivity.in(typeMonitoringActivityArray);

            objKtek_userquestionnaire_planningCriteria = objKtek_questionnaireitemCriteria
                    .createKtek_qitem_sectionCriteria().createKtek_fk_idquestionnairesectionCriteria()
                    .createKtek_qsection_questionnaireCriteria().createKtek_fk_idquestionnaireCriteria()
                    .createKtek_userquestionnaire_planningCriteria();

            objKtek_userquestionnaire_planningCriteria.coduser.eq(coduser);
            objKtek_userquestionnaire_planningCriteria.statusquestionnaire
                    .eq(KtekQuestionnaireStatus.QUESTIONNAIRE_STATUS_COMPLETED);
            objKtek_userquestionnaire_planningCriteria.codtelecareprogram.eq(codtelecareprogram);

            objKtek_questionnaireitemCriteria.isdeleted.eq((short) 0);

            objKtek_questionnaireitemCriteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

            array = instanceDAO.listKtek_questionnaireitemByCriteria(objKtek_questionnaireitemCriteria);

            session.close();
            if (array == null)
                log.debug("getQuestionnaireitemList4QuestionnairePlannedFinished array is null");
            else
                log.debug(
                        "getQuestionnaireitemList4QuestionnairePlannedFinished array is not null " + array.length);

        } catch (PersistentException e) {
            // TODO Auto-generated catch block
            log.error("PersistentException " + e.getMessage());
            e.printStackTrace();
            try {
                if (session != null)
                    session.close();
            } catch (PersistentException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }

        if (array == null)
            log.debug("getQuestionnaireitemList4QuestionnairePlannedFinished return array is null");
        else
            log.debug("getQuestionnaireitemList4QuestionnairePlannedFinished return array is not null "
                    + array.length);

        return array;
    }

    public Ktek_userquestionnaire_planning getUserPlanningQuestionnaire(String codUser, String codTelecareprogram,
            int ktek_pk_idquestionnaire) {
        Ktek_userquestionnaire_planning[] array = null;
        Ktek_userquestionnaire_planning instance = null;
        DAOFactory lDAOFactory = null;
        Ktek_userquestionnaire_planningDAO instanceDAO = null;
        long nowInMillis = 0;
        PersistentSession session = null;
        Ktek_userquestionnaire_planningCriteria objKtek_userquestionnaire_planningCriteria = null;

        try {

            nowInMillis = Utils.getCalendarGMT().getTimeInMillis();

            session = es.tekniker.framework.ktek.questionnaire.KTEKPersistentManager.instance().getSession();
            session.beginTransaction();

            lDAOFactory = es.tekniker.framework.ktek.questionnaire.DAOFactory.getDAOFactory();
            instanceDAO = lDAOFactory.getKtek_userquestionnaire_planningDAO();

            objKtek_userquestionnaire_planningCriteria = new Ktek_userquestionnaire_planningCriteria();
            objKtek_userquestionnaire_planningCriteria
                    .createKtek_fk_idquestionnaireCriteria().ktek_pk_idquestionnaire.eq(ktek_pk_idquestionnaire);
            objKtek_userquestionnaire_planningCriteria.coduser.eq(codUser);
            objKtek_userquestionnaire_planningCriteria.codtelecareprogram.eq(codTelecareprogram);

            objKtek_userquestionnaire_planningCriteria.plannedfrom.lt(nowInMillis);
            objKtek_userquestionnaire_planningCriteria.plannedto.gt(nowInMillis);
            objKtek_userquestionnaire_planningCriteria.addOrder(Order.desc("plannedfrom"));

            array = instanceDAO
                    .listKtek_userquestionnaire_planningByCriteria(objKtek_userquestionnaire_planningCriteria);

            if (array != null)
                log.debug("getUserPlanningQuestionnaire instance " + nowInMillis
                        + "  is not null for ktek_pk_idquestionnaire " + ktek_pk_idquestionnaire + " "
                        + array.length);
            else
                log.info("getUserPlanningQuestionnaire instance " + nowInMillis
                        + " is null for ktek_pk_idquestionnaire " + ktek_pk_idquestionnaire);

            if (array.length > 0)
                instance = array[0];

            session.close();

        } catch (PersistentException e) {
            log.error("getUserPlanningQuestionnaire Exception " + e.getMessage());
            e.printStackTrace();
            try {
                if (session != null)
                    session.close();
            } catch (PersistentException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }

        return instance;
    }

    public Ktek_result_questionnaireitem[] getQuestionnaireResultItems4QuestionnaireResult(
            int idresultquestionnaire) {
        Ktek_result_questionnaireitem[] array = null;

        PersistentSession session = null;
        DAOFactory lDAOFactory = null;

        Ktek_result_questionnaireitemDAO instanceDAO = null;
        Ktek_result_questionnaireitemCriteria objKtek_result_questionnaireitemCriteria = null;

        try {
            session = es.tekniker.framework.ktek.questionnaire.KTEKPersistentManager.instance().getSession();
            session.beginTransaction();

            lDAOFactory = es.tekniker.framework.ktek.questionnaire.DAOFactory.getDAOFactory();
            instanceDAO = lDAOFactory.getKtek_result_questionnaireitemDAO();

            objKtek_result_questionnaireitemCriteria = new Ktek_result_questionnaireitemCriteria();

            objKtek_result_questionnaireitemCriteria.createKtek_fk_idresultquestionnairesectionCriteria()
                    .createKtek_fk_idresultquestionnaireCriteria().ktek_pk_idresultquestionnaire
                            .eq(idresultquestionnaire);

            array = instanceDAO
                    .listKtek_result_questionnaireitemByCriteria(objKtek_result_questionnaireitemCriteria);

            session.close();

            if (array == null)
                log.info("getQuestionnaireResultItems4QuestionnaireResult array is null ");
            else
                log.debug("getQuestionnaireResultItems4QuestionnaireResult array is NOT null " + array.length);

        } catch (PersistentException e) {
            log.error("getQuestionnaireResultItems4QuestionnaireResult Exception " + e.getMessage());
            e.printStackTrace();
            try {
                if (session != null)
                    session.close();
            } catch (PersistentException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }
        return array;
    }

    public Ktek_result_questionnaireitem[] getQuestionnaireResults4IdquestionnaireItem(int idquestionnaireitem,
            int idresultquestionnaire) {
        Ktek_result_questionnaireitem[] array = null;

        PersistentSession session = null;
        DAOFactory lDAOFactory = null;
        Ktek_result_questionnaireitemDAO instanceDAO = null;
        Ktek_result_questionnaireitemCriteria objKtek_result_questionnaireitemCriteria = null;

        try {
            session = es.tekniker.framework.ktek.questionnaire.KTEKPersistentManager.instance().getSession();
            session.beginTransaction();

            lDAOFactory = es.tekniker.framework.ktek.questionnaire.DAOFactory.getDAOFactory();
            instanceDAO = lDAOFactory.getKtek_result_questionnaireitemDAO();

            objKtek_result_questionnaireitemCriteria = new Ktek_result_questionnaireitemCriteria();
            objKtek_result_questionnaireitemCriteria.createKtek_fk_idresultquestionnairesectionCriteria()
                    .createKtek_fk_idresultquestionnaireCriteria().ktek_pk_idresultquestionnaire
                            .eq(idresultquestionnaire);

            objKtek_result_questionnaireitemCriteria
                    .createKtek_fk_idquestionnaireitemCriteria().ktek_pk_idquestionnaireitem
                            .eq(idquestionnaireitem);

            array = instanceDAO
                    .listKtek_result_questionnaireitemByCriteria(objKtek_result_questionnaireitemCriteria);

            if (array == null)
                log.debug("getQuestionnaireResults4IdquestionnaireItem  array is null ");
            else
                log.debug("getQuestionnaireResults4IdquestionnaireItem  array is not null " + array.length);

            session.close();

        } catch (PersistentException e) {
            log.error("getQuestionnaireResults4IdquestionnaireItem Exception " + e.getMessage());
            e.printStackTrace();
            try {
                if (session != null)
                    session.close();
            } catch (PersistentException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }

        return array;
    }

    public Ktek_result_questionnairesection getQuestionnaireResultSection4Id(int ktek_pk_idresultquestionnaire,
            long idquestionnairesection) {
        Ktek_result_questionnairesection instance = null;

        PersistentSession session = null;
        DAOFactory lDAOFactory = null;
        Ktek_result_questionnairesectionDAO instanceDAO = null;
        Ktek_result_questionnairesectionCriteria objKtek_result_questionnairesectionCriteria = null;
        try {
            session = es.tekniker.framework.ktek.questionnaire.KTEKPersistentManager.instance().getSession();
            lDAOFactory = es.tekniker.framework.ktek.questionnaire.DAOFactory.getDAOFactory();

            instanceDAO = lDAOFactory.getKtek_result_questionnairesectionDAO();

            objKtek_result_questionnairesectionCriteria = new Ktek_result_questionnairesectionCriteria();
            objKtek_result_questionnairesectionCriteria
                    .createKtek_fk_idresultquestionnaireCriteria().ktek_pk_idresultquestionnaire
                            .eq(ktek_pk_idresultquestionnaire);

            objKtek_result_questionnairesectionCriteria
                    .createKtek_fk_idquestionnairesectionCriteria().ktek_pk_idquestionnairesection
                            .eq((int) idquestionnairesection);

            instance = instanceDAO
                    .loadKtek_result_questionnairesectionByCriteria(objKtek_result_questionnairesectionCriteria);

            if (instance == null)
                log.debug("getQuestionnaireResultSection4Id  instance is null");
            else
                log.debug("getQuestionnaireResultSection4Id  instance is NOT null");

            session.close();

        } catch (PersistentException e) {
            log.error("getQuestionnaireResultSection4Id Exception " + e.getMessage());
            e.printStackTrace();
            try {
                if (session != null)
                    session.close();
            } catch (PersistentException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }
        return instance;
    }

    public Ktek_questionnaireconfiguration[] getQuestionnaireConfiguration() {
        PersistentSession session = null;
        DAOFactory lDAOFactory = null;
        Ktek_questionnaireconfigurationDAO instanceDAO = null;
        Ktek_questionnaireconfiguration[] array = null;

        try {
            session = es.tekniker.framework.ktek.questionnaire.KTEKPersistentManager.instance().getSession();
            lDAOFactory = es.tekniker.framework.ktek.questionnaire.DAOFactory.getDAOFactory();
            instanceDAO = lDAOFactory.getKtek_questionnaireconfigurationDAO();

            array = instanceDAO.listKtek_questionnaireconfigurationByQuery(null, null);

            if (array != null)
                log.debug("getQuestionnaireConfiguration array is not null " + array.length);
            else
                log.debug("getQuestionnaireConfiguration array is null");

            session.close();

        } catch (PersistentException e) {
            log.error("getQuestionnaireConfiguration Exception " + e.getMessage());
            e.printStackTrace();
            try {
                if (session != null)
                    session.close();
            } catch (PersistentException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }
        return array;
    }

    public boolean saveQuestionaireConfiguration(Ktek_questionnaireconfiguration instance) {
        boolean boolOK = false;

        PersistentSession session = null;
        DAOFactory lDAOFactory = null;
        Ktek_questionnaireconfigurationDAO instanceDAO = null;
        Ktek_questionnaireconfiguration instanceDB = null;
        PersistentTransaction t = null;
        boolean boolToUpdate = false;
        try {

            session = es.tekniker.framework.ktek.questionnaire.KTEKPersistentManager.instance().getSession();
            t = session.beginTransaction();
            lDAOFactory = es.tekniker.framework.ktek.questionnaire.DAOFactory.getDAOFactory();
            instanceDAO = lDAOFactory.getKtek_questionnaireconfigurationDAO();

            instanceDB = instanceDAO.getKtek_questionnaireconfigurationByORMID(
                    instance.getKtek_pk_ktek_idquestionnaireconfiguration());

            if (instanceDB == null) {
                log.debug("instanceDB does not exist");
                instanceDB = new Ktek_questionnaireconfiguration();
                instanceDB.setKtek_pk_ktek_idquestionnaireconfiguration(1);
            } else {
                log.debug("instanceDB exist");
                boolToUpdate = true;
            }

            instanceDB.setEndpointserver(instance.getEndpointserver());
            instanceDB.setEventserviceoauth2headertoken(instance.getEventserviceoauth2headertoken());
            instanceDB.setKtek_typesave(instance.getKtek_typesave());
            instanceDB.setTimeout(instance.getTimeout());
            instanceDB.setPort(instance.getPort());

            if (boolToUpdate) {
                log.debug("instanceDB to be updated");
                session.update(instanceDB);
            } else {
                log.debug("instanceDB to be created ");
                session.saveOrUpdate(instanceDB);
            }

            t.commit();

            session.close();
            boolOK = true;

        } catch (PersistentException e) {
            log.error("saveQuestionaireConfiguration Exception " + e.getMessage());
            e.printStackTrace();
            try {
                if (session != null)
                    session.close();
            } catch (PersistentException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }

        return boolOK;
    }

    public Ktek_result_questionnaire[] getQuestionnaireResult4IdQuestionnaire(int idquestionnaire) {
        Ktek_result_questionnaire[] array = null;

        PersistentSession session = null;
        DAOFactory lDAOFactory = null;
        Ktek_result_questionnaireDAO instanceDAO = null;
        Ktek_result_questionnaireCriteria objktek_result_questionnaireCriteria = null;

        try {
            session = es.tekniker.framework.ktek.questionnaire.KTEKPersistentManager.instance().getSession();
            lDAOFactory = es.tekniker.framework.ktek.questionnaire.DAOFactory.getDAOFactory();
            instanceDAO = lDAOFactory.getKtek_result_questionnaireDAO();

            objktek_result_questionnaireCriteria = new Ktek_result_questionnaireCriteria();
            objktek_result_questionnaireCriteria.createKtek_fk_idquestionnaireCriteria().ktek_pk_idquestionnaire
                    .eq(idquestionnaire);

            array = instanceDAO.listKtek_result_questionnaireByCriteria(objktek_result_questionnaireCriteria);

            if (array != null)
                log.debug("getQuestionnaireResult4IdQuestionnaire array is not null " + array.length);
            else
                log.debug("getQuestionnaireResult4IdQuestionnaire array is null");

        } catch (PersistentException e) {
            log.error("getQuestionnaireResult4IdQuestionnaire Exception " + e.getMessage());
            e.printStackTrace();
            try {
                if (session != null)
                    session.close();
            } catch (PersistentException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }

        return array;
    }

}