/**
  * metodo para recuperar tudo na z
  * 
  * @param type $questionnaire_id
  * @return boolean
  */
 protected function recuperaValidaQuestionario($questionnaire_id)
 {
     $return = true;
     //objeto Questionario
     $objQuestionnaire = $this->Questionnaire->getQuestionnaireById($questionnaire_id);
     //tipo questionario
     $this->devolutive_id = $objQuestionnaire->getDevolutiveCalcId();
     if (!$questionnaire_id || !$objQuestionnaire) {
         $return = false;
     }
     return $return;
 }
 public function getArrayDevolutiveRAA($questionnaireId, $userId, $blockId = null)
 {
     try {
         $arrDevolutiveRAA = array();
         $arrCriteria = array();
         $arrBlocks = array();
         $arrQuestionnaire = array();
         $arrRadarData = array();
         // Definições do Questionário
         $questionnaireDefs = $this->Questionnaire->getQuestionnaireById($questionnaireId);
         $arrQuestionnaire['title'] = $questionnaireDefs->getTitle();
         $arrQuestionnaire['description'] = $questionnaireDefs->getDescription();
         $arrQuestionnaire['long_description'] = $questionnaireDefs->getLongDescription();
         $arrQuestionnaire['operation_beginning'] = Vtx_Util_Date::format_dma($questionnaireDefs->getOperationBeginning());
         $arrQuestionnaire['operation_ending'] = Vtx_Util_Date::format_dma($questionnaireDefs->getOperationEnding());
         // Definições da Questão
         $questionsDefs = $this->Question->getAllByQuestionnaireIdBlockId($questionnaireId, $blockId);
         $this->Block = new Model_Block();
         foreach ($questionsDefs as $question_def) {
             $idBlock = "";
             $idCriterion = "";
             $questionId = $question_def->getId();
             $question_value = $question_def->getQuestao();
             $perguntas = $this->Block->cacheOrModelBlockById(63);
             // Grava a questão no array de devolutiva
             $arrDevolutiveRAA[$questionId]['designation'] = $question_def->getDesignacao();
             $arrDevolutiveRAA[$questionId]['value'] = $question_value;
             $arrDevolutiveRAA[$questionId]['text'] = $question_def->getTexto();
             $arrDevolutiveRAA[$questionId]['pergunta'] = $perguntas[$questionId]["QuestionSummary"];
             // Verifica se existe Bloco válido e grava nos arrays de blocos e devolutiva
             $idBlock = $question_def->getBloco();
             if ($idBlock != "" && $idBlock != 0) {
                 $arrBlocks[$idBlock] = $question_def->getBlocoTitulo();
                 $arrDevolutiveRAA[$questionId]['block'] = $question_def->getBloco();
             }
             // Verifica se existe Critério válido e grava nos arrays de critérios e devolutiva
             $idCriterion = $question_def->getCriterio();
             if ($idCriterion != "" && $idCriterion != 0) {
                 $arrCriteria[$idCriterion] = $question_def->getCriterioTitulo();
                 $arrDevolutiveRAA[$questionId]['criterion'] = $question_def->getCriterio();
             }
             $isAnswered = $this->Question->isAnsweredByEnterprise($questionId, $userId);
             $isAnsweredVerificador = $this->Question->isAnsweredByVerificador($questionId, $this->userAuth->getUserId(), $userId);
             //var_dump(array_key_exists("objAnswered",$isAnsweredVerificador));exit;
             //var_dump($userId);
             /// print_r($this->Questionnaire->getQuestionsAnsweredByUserId($questionnaireId,43005, $blockId));
             //exit;
             if ($isAnswered['status']) {
                 // Recupera a resposta escrita
                 $answer = $this->Question->getQuestionAnswer($questionId, $userId);
                 if (!array_key_exists("objAnswered", $isAnsweredVerificador)) {
                     $alternative_id = $answer['alternative_id'];
                     $anwser_value = isset($answer['answer_value']) ? $answer['answer_value'] : "";
                 } else {
                     $alternative_id = $isAnsweredVerificador["objAnswered"]['AlternativeId'];
                     $anwser_value = isset($isAnsweredVerificador["objAnswered"]['AnswerValue']) ? $isAnsweredVerificador["objAnswered"]['AnswerValue'] : "";
                 }
                 $arrDevolutiveRAA[$questionId]['alternative_id'] = $alternative_id;
                 $arrDevolutiveRAA[$questionId]['write_answer'] = $anwser_value;
                 if (count($answer['annual_result']) > 0) {
                     $arrDevolutiveRAA[$questionId]['annual_result'] = $answer['annual_result'];
                     $arrDevolutiveRAA[$questionId]['annual_result_unit'] = $answer['annual_result_unit'];
                 } else {
                     $arrDevolutiveRAA[$questionId]['annual_result'] = "";
                     $arrDevolutiveRAA[$questionId]['annual_result_unit'] = "";
                 }
                 // Recupera o feedback da alternativa escolhida
                 $alternative = $this->Alternative->getAlternativeById($alternative_id);
                 $arrDevolutiveRAA[$questionId]['alternative_designation'] = $alternative->getDesignation();
                 $arrDevolutiveRAA[$questionId]['alternative_feedback'] = $alternative->getFeedbackDefault();
                 // Recupera o 'Pontos Fortes' do avaliador da resolução da questão
                 $arrDevolutiveRAA[$questionId]['answer_feedback'] = $this->Question->getAnswerFeedback($isAnswered['objAnswered']->getAnswerId());
                 // Recupera o 'Oportunidades de melhoria' do avaliador da resolução da questão
                 $arrDevolutiveRAA[$questionId]['answer_feedback_improve'] = $this->Question->getAnswerFeedbackImprove($isAnswered['objAnswered']->getAnswerId());
             }
             // Recupera as alternativas da questão
             $alternativesDefs = $this->Alternative->getAllByQuestionId($questionId);
             try {
                 foreach ($alternativesDefs as $alternative_def) {
                     $arr_alternative[$alternative_def['Designation']] = $alternative_def;
                     $arrDevolutiveRAA[$questionId]['alternatives'] = $arr_alternative;
                 }
             } catch (Excception $e) {
             }
         }
         return array($arrDevolutiveRAA, $arrBlocks, $arrCriteria, $arrQuestionnaire);
     } catch (Vtx_UserException $e) {
         DbTable_Questionnaire::getInstance()->getAdapter()->rollBack();
         return array('status' => false, 'messageError' => $e->getMessage());
     } catch (Exception $e) {
         DbTable_Questionnaire::getInstance()->getAdapter()->rollBack();
         throw new Exception($e);
     }
     exit;
 }