<?
/**
 * Controller
 * 
 * Matriz Laudo Final
 * 
 * @author Fernando Nunes
 * @date 02/03/2011
 *
 */
class Agro_Controller_LaudoFinal extends Agro_Controller_Action {
	
    public function init() {
    	
    	
        $this->view->title = 'Sinistro » Processos » Laudo Final';
        
        if (!Agro_Util::checkPermission('sinistro:laudofinal:editarlaudoendosso')){
	        $Model = new Seguro_Model_Propostas();
	        $Proposta = $Model->find($this->getRequest()->getParam("id_proposta"))->current();
	        
	        if (is_object($Proposta)){
	        	$Produto = $Proposta->produto();
		        if ($Proposta->possuiEndosso() && $Produto['id_safra'] < 16){
		        	$this->_redirect("/sinistro2/index/bloqueiodigitacao");
		        }
	        }
        }
        
        if($this->_getParam('edit') && $this->_getParam('edit') == 0){
        	$this->view->jQuery()->addJavascriptFile('/resources/javascript/sinistro2/disableall.js');
        }
        
    }
    
	public function getModel() { }
	
	public function getForm() {	}
	
	public function getModelLaudosFinais() {
	    return new Sinistro_Model_LaudosFinais();
	}
	
	public function formAction()
    {
        $params = $this->getRequest()->getParams();

        $model = $this->getModel();
        $model_LaudosFinais = $this->getModelLaudosFinais();
        $flLaudoOK = true;

        if ($params['id_laudo_final']) {
            $idLaudoFinal = $params['id_laudo_final'];
        }

        $dadosForm['id_empresa_vistoriadora'] = $params['id_empresa_vistoriadora'];

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

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

        if (REGULACAO_ATIVA == 'S') {
            $this->view->jQuery()->addJavascriptFile(
                '/resources/javascript/sinistro2/laudofinal.js?nocache=' . rand(1, 1000)
            );
            $this->view->jQuery()->addStylesheet('/resources/css/sinistro2/laudo.css');
        } else {
            $this->view->jQuery()->addJavascriptFile(
                '/resources/javascript/sinistro/laudofinal.js?nocache=' . rand(1, 1000)
            );
            $this->view->jQuery()->addStylesheet('/resources/css/sinistro/laudo.css');
        }

        if ($this->getRequest()->isPost()) {
            $adapter = new Zend_File_Transfer_Adapter_Http();
            $adapter->setDestination(PATH_LAUDOS);
            $adapter->addValidator('Size', false, 2097152);
            $file = $adapter->getFileInfo();

            if ($file["ds_nome_laudo_fisico"]["name"]) {
                if (REGULACAO_ATIVA == "S") {
                    $modelLFIS = new Sinistro2_Model_LaudosFinaisItensSegurados();
                } else {
                    $modelLFIS = new Sinistro_Model_LaudosFinaisItensSegurados();
                }

                if ($params['id_laudo_final']) {
                    $arquivo = $model_LaudosFinais->getLaudoEscaneado($params['id_laudo_final']);

                    if ($arquivo) {
                        $model_LaudosFinais->deleteArquivo($params['id_laudo_final']);
                    }

                    $row = $model_LaudosFinais->getRow($params['id_laudo_final']);
                }

                $newName = $modelLFIS->geraNomeArquivoFisicoEventoNaoConstatado(
                    null,
                    $file["ds_nome_laudo_fisico"]["name"],
                    $params
                );

                $adapter->addFilter('Rename', array('target' => PATH_LAUDOS . "/" . $newName, 'overwrite' => true));

                if ($adapter->receive($file["ds_nome_laudo_fisico"]["name"])) {
                    if ($row->ds_nome_laudo_fisico) {
                        unlink(realpath(PATH_LAUDOS . "/" . $row->ds_nome_laudo_fisico));
                    }

                    $params['ds_nome_laudo_fisico'] = $newName;
                } else {
                    $this->view->showMessage('Erro ao salvar laudo escaneado!', 'error');
                    return false;
                }
            }

            $form->populate($params);

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

            $dados = $form->getValues();

            if ($params['fl_evento_nao_constatado']) {
                $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();

                    $mensagem = "Os seguintes itens são de preenchimento obrigatório: <br><ul><li>";
                    $mensagem .= implode("</li><li>", $message) . "</li><ul>";

                    $this->view->showMessage($mensagem, 'error');
                } else {
                    if ($params['ds_nome_laudo_fisico']) {
                        $dados['ds_nome_laudo_fisico'] = $params['ds_nome_laudo_fisico'];
                    }

                    $idLaudoFinal = $model_LaudosFinais->save($dados);
                    $model_LaudosFinais->deleteEventoNaoConstatado($idLaudoFinal, $dados);
                    $model->delete($idLaudoFinal);

                    if ($dados['id_vistoria']) {
                        // Relaciona vistoria com avisos

                        if (array_key_exists("dt_vistoria_data", $dados) && $dados['dt_vistoria_data'] != '') {
                            $data = $dados['dt_vistoria_data'] . ' ' . $dados['dt_vistoria_hora'];
                            $data .= ' ' . $dados['dt_vistoria_minutos'];

                            $dados['dt_vistoria'] = Agro_Util::formatDate($data, 'yyyy-MM-dd HH:mm:ss');
                        }
                    }

                    Agro_Db_Table_Abstract::getDefaultAdapter()->commit();
                    $this->view->showMessage(MSG_SUCCESS, 'success');
                }
            } elseif ($form->isValid($form->getValues())) {
                if ($_POST['itens_segurados_selecionados']) {
                    $dados['itens_segurados_selecionados'] = $_POST['itens_segurados_selecionados'];
                }

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

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

                $idLaudoFinal = $model->save($dados);

                if ($idLaudoFinal) {

                    if ($dados['id_vistoria']) {
                        // Relaciona vistoria com avisos

                        if (array_key_exists("dt_vistoria_data", $dados) && $dados['dt_vistoria_data'] != '') {
                            $data = $dados['dt_vistoria_data'] . ' ' . $dados['dt_vistoria_hora'];
                            $data .= ' ' . $dados['dt_vistoria_minutos'];

                            $dados['dt_vistoria'] = Agro_Util::formatDate($data, 'yyyy-MM-dd HH:mm:ss');
                        }

                        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 {
                $this->view->showMessage($this->getAllFormErros(array($form), $form->getValues()), 'error');
                $flLaudoOK = false;
            }
        }

        if ($idLaudoFinal && $flLaudoOK) {
            $params = $model_LaudosFinais->getLaudoFinal($idLaudoFinal);
            $params['id_laudo_final'] = $idLaudoFinal;

            $form->init($params['id_laudo_final']);
        }

        $form->populate($params);
        $this->view->back = '/sinistro/processo/view/id/' . $params['id_processo'];
        $this->view->form = $form;
    }
}
