<?php

class Sinistro2_Model_ProcessosQuestionarios extends Agro_Db_Table_Abstract {
	protected $_log = true;
	protected $_schema = 'sinistro';
	protected $_name = 'processos_questionario';
	protected $_primary = array('id_processo', 'id_atributo_rn');
	public $camposAlterados;
	
	public function fetchRespostas() {}
	
	public function deleteProcesso($id_processo) {
		if ($id_processo) {
			$this->getAdapter()->query("delete from sinistro.processos_questionario where id_processo = $id_processo");
		}
	}
	
	public function save(array $values, $Processo) {
		if (!is_object($Processo)) {
			$Model = new Sinistro2_Model_Processos();
			$Processo = $Model->find($Processo)->current();
		}
		
		$Questionario = $Processo->questionarios();
		$Atributos = new Produto_Model_Atributos();
		
		try {
			
			$this->deleteProcesso($Processo->id);
			
			$this->salvaQuestionario($Questionario, $Processo, $Atributos, $values);
			
			return true;
			
		} catch (Exception $e) {
			return false;
		}
		
	}
	
	public function salvaQuestionario($Questionario, $Processo, $Atributos, $values){
		
		foreach ($Questionario as $atributo) {
			
			$Atributo = $Atributos->getAtributo($atributo["ds_chave_rn"]);
			$resposta = $values[$atributo["ds_chave_rn"]];
				
			if ($Atributo->ds_chave_tipo_atributo == 'radio' && !$resposta) {
				$resposta = 0;
			}
			
			$Row = $this->createRow();
			$Row->id_atributo_rn = $Atributo->id;
			$Row->id_processo = $Processo->id;
			$Row->ds_resposta = $resposta;
			
			$Row->save();
			
			if ($atributo["chields"]){
				$this->salvaQuestionario($atributo["chields"], $Processo, $Atributos, $values);
			}
		}
	}
	

	public function getResposta($idProcesso, $chave) {
		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array('q' => 'sinistro.processos_questionario'), 'ds_resposta');
		$Select->join(array('a' => 'produto.atributos_rn'), 'a.id = q.id_atributo_rn', null);
		$Select->where('q.id_processo = ?', $idProcesso);
		$Select->where('a.ds_chave_rn = ?', $chave);
		
		return $this->getAdapter()->fetchOne($Select);
	}
	
	public function getRespostas($idProcesso) {
		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array('q' => 'sinistro.processos_questionario'), array('ds_resposta', 'dt_criacao as dt_criacao_questionario'));
		$Select->join(array('a' => 'produto.atributos_rn'), 'a.id = q.id_atributo_rn');
		$Select->join(array('u' => 'sistema.usuarios'), 'u.id = q.id_usuario_criacao', 'ds_nome_usuario');
		$Select->where('q.id_processo = ?', $idProcesso);
		$Rs = $this->fetchAll($Select);
		
		$ret = array();
		foreach ($Rs as $Row) {
			$ret[$Row->ds_chave_rn] = $Row->ds_resposta;
		}
		$ret['DT_RESPOSTA'] = $Row->dt_criacao_questionario;
		$ret['DS_LOGIN'] = $Row->ds_nome_usuario;
		
		return $ret;
	}
	
	public function fetchProcessoQuestionarios($id_processo, $idParent=0) {
		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array('p'=>'sinistro.processos_questionario'), array('ds_resposta'));
		$Select->join(array('a'=>'produto.atributos_rn'), 'p.id_atributo_rn = a.id and a.fl_ativo = true', array('id', 'ds_descricao_atributo', 'ds_valores_opcoes', 'ds_chave_rn'));
		$Select->where("p.id_processo = ?", $id_processo);
		$Select->where("a.id_parent = ?", $idParent);
		$Select->where("p.ds_resposta != ''");
		$Select->where("p.fl_ativo = true");
		$Select->order("ds_ordem");
		
		$Rs = $this->fetchAll($Select);
		
		$return = array();
		if ($Rs->count()) {
			$i = 0;
			foreach ($Rs as $Row) {
				$return[$Row->ds_chave_rn] = array('ds_descricao_atributo' => $Row->ds_descricao_atributo, 'ds_valores_opcoes' => $Row->ds_valores_opcoes, 'resposta' => $Row->ds_resposta);
				$return[$Row->ds_chave_rn]['chields'] = $this->fetchProcessoQuestionarios($id_processo, $Row->id);
				
				$i++;
			}
		}
		
		return $return;
	}
}