<?

class Agro_Controller_LaudoPreliminarRegulacao extends Agro_Controller_Action {

    public $_idLaudoPreliminar;

    public function init() {
        $this->view->title = 'Sinistro » Processos » Laudo Preliminar';
    }

	public function getModel() { }

    public function getModelItensSegurados() {}

	public function getForm() {	}

	public function getModelLaudosPreliminares() {
	    return new Sinistro2_Model_LaudosPreliminares();
	}

	public function formAction() {

		$params = $this->getRequest()->getParams();
	    $Model = $this->getModel();
	    $Model_LaudosPreliminares = $this->getModelLaudosPreliminares();
        $Model_LaudosPreliminaresItensSegurados = $this->getModelItensSegurados();

        $dadosForm = array();

        $ProcessosEmpresas = new Sinistro2_Model_ProcessosEmpresas();
        $dadosForm['id_empresa_vistoriadora'] = $ProcessosEmpresas->getEmpresaByProcesso($params['id_processo']);

		$Form = $this->getForm($dadosForm);

        $flLaudoOK = true;

		if($params['id']) {
			$this->_idLaudoPreliminar = $params['id'];
            $params['id_laudo_preliminar'] = $params['id'];
		}

		if($params['enviado']){
			$this->view->showMessage("Laudo enviado com sucesso!", 'success');
		}
		
		$this->view->data = array();

		$this->view->jQuery()->addJavascriptFile('/resources/javascript/sinistro2/laudopreliminar.js');
        $this->view->jQuery()->addStylesheet('/resources/css/sinistro2/laudos_sinistro.css');

		if($this->getRequest()->isPost()) {
			$Form->populate($params);

    		Agro_Db_Table_Abstract::getDefaultAdapter()->beginTransaction();

    		$dados = $Form->getValues();
            $dados['id_status'] = Sistema_Model_Status::LAUDOS_PRELIMINARES_PENDENTE_ENVIO;

			if ($dados['fl_dt_evento_em_cobertura'] != '0' && $dados['fl_dt_evento_em_cobertura'] != '1'){
				unset($dados['fl_dt_evento_em_cobertura']);
			}

            if($_POST['itens_segurados_selecionados']) {
                $dados['itens_segurados_selecionados'] = $_POST['itens_segurados_selecionados'];
            }

            if (!$params['fl_evento_nao_constatado']) {
                $resultItensSegurados = $this->isValidItensSeguradosEspecializacao($dados, $_POST);
            }

			if ($params['fl_evento_nao_constatado'] || !$params["fl_dt_evento_em_cobertura"]) {

				$message = array();

				if (!array_key_exists("fl_assinatura_segurado", $_POST)){
					$message[] = "Assinatura do segurado";
				}

				if (!array_key_exists("fl_assinatura_regulador", $_POST)){
					$message[] = "Assinatura do regulador";
				}

				if (!$_POST["dt_vistoria_data"]){
					$message[] = "Data da vistoria";
				}

				if (!array_key_exists("vistoriadores", $_POST)){
					$message[] = "Vistoriador";
				}
				if (count($message) > 0){
					Agro_Db_Table_Abstract::getDefaultAdapter()->rollback();
	        		$this->view->showMessage("Os seguintes itens são de preenchimento obrigatório: <br><ul><li>".implode("</li><li>", $message)."</li><ul>", 'error');

				} else {
					$this->_idLaudoPreliminar = $Model_LaudosPreliminares->save($dados);

					if (!$this->_idLaudoPreliminar){
						Agro_Db_Table_Abstract::getDefaultAdapter()->rollback();
	        		    $this->view->showMessage($Model_LaudosPreliminares->getMessages(), 'error');

					} else {
						$Model_LaudosPreliminares->deleteEventoNaoConstatado($this->_idLaudoPreliminar, $dados);
						$Model->delete($this->_idLaudoPreliminar);

						Agro_Db_Table_Abstract::getDefaultAdapter()->commit();
	        			$this->view->showMessage(MSG_SUCCESS,'success');
					}
				}

			} elseif ($Form->isValid($Form->getValues()) && $resultItensSegurados['status']) {

				$this->_idLaudoPreliminar = $Model->save($dados); 
				        		
        		if($this->_idLaudoPreliminar) {

        		    $dados['id_laudo_preliminar'] = $this->_idLaudoPreliminar;

        		    //exclui todos os itens para salvá-los novamente
                    $ModelLPIS = new Sinistro2_Model_LaudosPreliminaresItensSegurados();
                    $ModelLPIS->deleteItensbyLaudoPreliminar($this->_idLaudoPreliminar);        		    
        		    
                    // Salva e relaciona cada itens segurado ao laudo
                    foreach ($_POST['itens_segurados'] as $idItemSegurado) {

                        $ItemSegurado = $Model_LaudosPreliminaresItensSegurados->preparaItemSegurado($_POST, $idItemSegurado, $dados);
                        $ItemSegurado['id_processo'] = $dados['id_processo'];

                        if (!$Model_LaudosPreliminaresItensSegurados->save($ItemSegurado)) {

                        	Agro_Db_Table_Abstract::getDefaultAdapter()->rollback();
                            $this->view->showMessage($Model->getMessages(), 'error');
                        }
                    }

        		    Agro_Db_Table_Abstract::getDefaultAdapter()->commit();
        		    $this->view->showMessage(MSG_SUCCESS,'success');

        		} else {

        		    Agro_Db_Table_Abstract::getDefaultAdapter()->rollback();
        		    $this->view->showMessage($Model->getMessages(), 'error');
        		}
			} else {

                if ($Form->isValid($Form->getValues())) {
                    $erros = $resultItensSegurados['msg'];

                } elseif ($resultItensSegurados['status']) {
                    $erros = $this->getAllFormErros(array($Form),$Form->getValues());

                } else {
                	$FormErrors = $this->getAllFormErros(array($Form),$Form->getValues());
                	$ISErrors = $resultItensSegurados['msg'];

                	$erros = array();

                	if (is_array($FormErrors)){
                		$erros = array_merge($FormErrors, $erros);
                    }

                	if (is_array($ISErrors)){
                		$erros = array_merge($ISErrors, $erros);
                    }
                }

    			$this->view->showMessage($erros, 'error');
                $flLaudoOK = false;
    		}

		}

		if ($this->_idLaudoPreliminar && $flLaudoOK) {
		    $params = $Model_LaudosPreliminares->getLaudoPreliminar($this->_idLaudoPreliminar);
			$params['id_laudo_preliminar'] = $this->_idLaudoPreliminar;

			$Form->init($params['id_laudo_preliminar']);
		}

		$Form->populate($params);

		$this->view->back = '/sinistro2/processo/view/id/'.$params['id_processo'].'#regulacao_laudos';

		$this->view->form = $Form;
	}

	public function validapostAction(){
	
		$this->isAjax();
	
		$dados = array();
	
		$dados['dados'] = parse_str($this->getRequest()->getParam('dados'), $dados);
	
		$ProcessosEmpresas = new Sinistro_Model_ProcessosEmpresas();
		$dadosForm['id_empresa_vistoriadora'] = $ProcessosEmpresas->getEmpresaByProcesso($dados['id_processo']);
	
		$Form = $this->getForm($dadosForm);
		$Form->populate($dados);
	
		$valores = $Form->getValues();
		
		if($valores['fl_evento_nao_constatado'] == 1 || !$valores['fl_dt_evento_em_cobertura']){
			if (!array_key_exists("fl_assinatura_segurado", $valores)){
				$message[] = "Assinatura do segurado";
			}

			if (!array_key_exists("fl_assinatura_regulador", $valores)){
				$message[] = "Assinatura do regulador";
			}

			if (!$valores["dt_vistoria_data"]){
				$message[] = "Data da vistoria";
			}

			if (!array_key_exists("vistoriadores", $valores)){
				$message[] = "Vistoriador";
			}
			
			if(count($menssage)){
				$retorno = $message;	
			}else{
				$retorno = true;
			}
			
		}else{

			if(!$Form->isValid($Form->getValues())){
		
				$mensagem = $this->getAllFormErros(array($Form),$Form->getValues());
				$mensagem = explode(':', $mensagem);
				$retorno = $mensagem[1];
		
			}else{
		
				$retorno = true;
		
			}
		}
	
		$this->getResponse()->setBody(strip_tags($retorno));
	
	}	
	
    public function viewAction() {
        //$this->getHelper('layout')->setLayout('popup');

        $params = $this->getRequest()->getParams();
        $Model = $this->getModel();
        $Model_LaudosPreliminares = $this->getModelLaudosPreliminares();
        $Model_LaudosPreliminaresItensSegurados = $this->getModelItensSegurados();

        $dadosForm = array();

        $ProcessosEmpresas = new Sinistro2_Model_ProcessosEmpresas();
        $dadosForm['id_empresa_vistoriadora'] = $ProcessosEmpresas->getEmpresaByProcesso($params['id_processo']);

        $Form = $this->getForm($dadosForm);

        $flLaudoOK = true;

        if($params['id']) {
            $this->_idLaudoPreliminar = $params['id'];
            $params['id_laudo_preliminar'] = $params['id'];
        }

        $this->view->data = array();

        $this->view->jQuery()->addJavascriptFile('/resources/javascript/sinistro2/laudopreliminar.js');
        $this->view->jQuery()->addStylesheet('/resources/css/sinistro2/laudos_sinistro.css');

        if($this->getRequest()->isPost()) {

            $Form->populate($params);

            Agro_Db_Table_Abstract::getDefaultAdapter()->beginTransaction();

            $dados = $Form->getValues();

            if($_POST['itens_segurados_selecionados']) {
                $dados['itens_segurados_selecionados'] = $_POST['itens_segurados_selecionados'];
            }

            if (!$params['fl_evento_nao_constatado']) {
                $resultItensSegurados = $this->isValidItensSeguradosEspecializacao($dados, $_POST);
            }

            if ($params['fl_evento_nao_constatado']) {

                $this->_idLaudoPreliminar = $Model_LaudosPreliminares->save($dados);
                $Model_LaudosPreliminares->deleteEventoNaoConstatado($this->_idLaudoPreliminar, $dados);
                $Model->delete($this->_idLaudoPreliminar);

                Agro_Db_Table_Abstract::getDefaultAdapter()->commit();
                $this->view->showMessage(MSG_SUCCESS,'success');

            } elseif ($Form->isValid($Form->getValues()) && $resultItensSegurados['status']) {

                $this->_idLaudoPreliminar = $Model->save($dados);
                if($this->_idLaudoPreliminar) {
                    $dados['id_laudo_preliminar'] = $this->_idLaudoPreliminar;
                    // Salva e relaciona cada itens segurado ao laudo
                    foreach ($_POST['itens_segurados'] as $idItemSegurado) {
                        $ItemSegurado = $Model_LaudosPreliminaresItensSegurados->preparaItemSegurado($_POST, $idItemSegurado, $dados);
                        if (!$Model_LaudosPreliminaresItensSegurados->save($ItemSegurado)) {
                            Agro_Db_Table_Abstract::getDefaultAdapter()->rollback();
                            $this->view->showMessage($Model->getMessages(), 'error');
                        }
                    }
                    Agro_Db_Table_Abstract::getDefaultAdapter()->commit();
                    $this->view->showMessage(MSG_SUCCESS,'success');
                } else {
                    Agro_Db_Table_Abstract::getDefaultAdapter()->rollback();
                    $this->view->showMessage($Model->getMessages(), 'error');
                }
            } else {

                if ($Form->isValid($Form->getValues())) {
                    $erros = $resultItensSegurados['msg'];
                } elseif ($resultItensSegurados['status']) {
                    $erros = $this->getAllFormErros(array($Form),$Form->getValues());
                } else {
                    $erros = array_merge($this->getAllFormErros(array($Form),$Form->getValues()), $resultItensSegurados['msg']);
                }

                $this->view->showMessage($erros, 'error');
                $flLaudoOK = false;
            }

        }

        if ($this->_idLaudoPreliminar && $flLaudoOK) {
            $params = $Model_LaudosPreliminares->getLaudoPreliminar($this->_idLaudoPreliminar);
            $params['id_laudo_preliminar'] = $this->_idLaudoPreliminar;

            $Form->init($params['id_laudo_preliminar']);
        }

        $Form->populate($params);

        $this->view->back = '/sinistro2/processo/view/id/'.$params['id_processo'].'#regulacao_laudos';

        $this->view->form = $Form;
    }

    public function isValidItensSeguradosGeneralizacao(array $dados, array $post) {

    }

    public function isValidItensSeguradosEspecializacao(array $dados, array $post) { }

    public function loaditensseguradosAction () {
        $this->getHelper('layout')->disableLayout();

        $params = $this->getRequest()->getParams();

        $this->view->data = array();

        $Model_LaudosPreliminares = new Sinistro2_Model_LaudosPreliminares();

        $dadosProposta = $Model_LaudosPreliminares->getInformacoesProposta($params['id_proposta']);

        $params['id_cultura'] = $dadosProposta['id_cultura'];

        if ($params['view']) {
            $params['itens_segurados'] = $Model_LaudosPreliminares->getItensSeguradosByProposta($params['id_proposta'], null, $params['id_laudo_preliminar']);

        } elseif ($params['fl_area_atingida'] == 'T') {
            $params['itens_segurados'] = $Model_LaudosPreliminares->getItensSeguradosByProposta($params['id_proposta']);

        } else {
            $params['itens_segurados'] = $Model_LaudosPreliminares->getItensSeguradosByProposta($params['id_proposta'], $params['itens_segurados_selecionados']);
        }

        $dsNomeModelEspecializacao = ucwords($params['module_name']).'_Model_'.ucwords($params['controller_name']);

        $Model_Especializacao = new $dsNomeModelEspecializacao();

        $params['campos_especializacao'] = $Model_Especializacao->getCamposEspecializacao();
        $params['valores'] = array();

        $dsNomeModelEspecializacaoItensSegurados = $dsNomeModelEspecializacao.'ItensSegurados';
        $Model_EspecializacaoItensSegurados = new $dsNomeModelEspecializacaoItensSegurados();

        if ($params['id_laudo_preliminar']) {
            $params['valores'] = $Model_EspecializacaoItensSegurados->getItensLaudoPreliminar($params['id_laudo_preliminar']);

        }

        $this->view->data = $params;
    }
}
