<?php

class Sinistro2_AvisoencerramentocolheitaController extends Agro_Controller_Action{

	public function init() {
		$this->view->title = 'Sinistro » Avisos » Encerramento de Colheita';
		$this->user = Zend_Auth::getInstance()->getIdentity();
	}

	public function getModel() {
		return new Sinistro2_Model_AvisosEncerramento();
	}

	public function indexAction() {
		$this->view->title .= " » Listagem";
		$this->view->formPesquisaProposta = new Sinistro2_Form_PesquisaProposta();
	}

	public function formAction() {
		//busca informações da tabela seguro.informacoes_bancarias atraves do id_proposta
		$InformacoesBancarias = new Seguro_Model_InformacoesBancarias();
		$this->view->informacoes_bancarias = $InformacoesBancarias->getInformacoesBancarias($this->getRequest()->getParam('proposta'));

		$this->view->back = "/sinistro2/avisoencerramentocolheita";
		$this->view->title .= " » Formulário";

		$this->view->processo = $this->getRequest()->getParam('processo');
		$this->view->proposta = $this->getRequest()->getParam('proposta');

		$User = Zend_Auth::getInstance()->getIdentity();

		$Model = $this->getModel();
		$this->view->itensSegurados = $Model->getItensSeguradosAvisosEncerramento($this->view->processo, $this->view->proposta);

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

		if ($this->getRequest()->isPost()) {
	
			$errorMsg = $this->verificaData($this->getRequest()->getParams());
			if ($errorMsg) {
				$this->populaCampos($this->getRequest()->getParams());
				$this->view->showMessage($errorMsg, 'error');
			} else {
				$this->save($this->getRequest()->getParams());
			}
		}
	}

	public function verificaData($post) {

		$dt1 = explode('/', date('d/m/Y'));
		$dt2 = explode('/', $post['dt_encerramento_colheita']);

		$dtAtual    = $dt1[2] . $dt1[1] . $dt1[0];
		$dtColheita = $dt2[2] . $dt2[1] . $dt2[0];

		$msg = '';
		if ($dtColheita > $dtAtual) {
			$msg = 'A data de encerramento de colheita não pode ser maior que a data atual.';
		}

		$date = new Zend_Date($post['dt_encerramento_colheita'], 'dd/MM/yyyy');



		$Propostas = new Seguro_Model_Propostas();
		$Proposta = $Propostas->getProposta($post['proposta']);
		$dtVigenciaFim = new Zend_Date($Proposta['dt_vigencia_fim'], 'dd/MM/yyyy');

		if($date->isLater($dtVigenciaFim)) {
		    $msg = 'A data de encerramento de colheita não pode ser após o final de vigência.';
		}

		return $msg;
	}

	public function getFilter() {
		$where = array();
		$filter = array();
		$endosso = array();
	

		if ($this->getRequest()->getParam('tipo_pesquisa') && $this->getRequest()->getParam('valor_pesquisa')) {
			$filter['field'] = $this->getRequest()->getParam('tipo_pesquisa');

	        if ($filter['field'] == "id_proposta"){
				$ModelProposta = new Seguro_Model_Propostas();
				$Endossos = $ModelProposta->fetchRow($ModelProposta->getAdapter()->quoteInto('id = ?',$this->getRequest()->getParam('valor_pesquisa')));
				if($Endossos) {
					$endosso = $Endossos->toArray();
	
					$filter['field'] = 'p.id_endosso';
					$filter['operator'] = '=';
					$filter['value'] = $endosso['id_endosso'];

				} else {
					$filter['field'] = 'p.id_endosso';
					$filter['operator'] = '=';
					$filter['value'] = $this->getRequest()->getParam('valor_pesquisa');					
				}

				$where[] = $filter;

	        } elseif(is_numeric($this->getRequest()->getParam('valor_pesquisa'))){
				$filter['operator'] = '=';
				$filter['value'] = $this->getRequest()->getParam('valor_pesquisa');
			}else{
				$filter['operator'] = 'ilike';
				$filter['value'] = '%'.$this->getRequest()->getParam('valor_pesquisa').'%';
			}

			$where[] = $filter;
		}
		if ($this->user->tp_usuario == 'C') {
			$filter['field'] = 'pc.id_usuario';
			$filter['operator'] = '=';
			$filter['value'] = $this->user->id;

			$where[] = $filter;
		} else if ($this->user->tp_usuario == 'P') {
			$filter['field'] = 'p.id_usuario_criacao';
			$filter['operator'] = '=';
			$filter['value'] = $this->user->id;

			$where[] = $filter;
		}

		return $where;
	}

	public function save(array $post)
    {
        $Db = Agro_Db_Table_Abstract::getDefaultAdapter();
        $Db->beginTransaction();

        try {
            /****************************************************/
            // Tabela sinistro.avisos_encerramento
            /***************************************************/
            $AvisoEncerramento = new Sinistro2_Model_AvisosEncerramento();
            $AvisoInicio = new Sinistro2_Model_AvisosInicio();

            $data = array();
            $data['id_proposta'] = $post['proposta'];
            $data['dt_encerramento_colheita'] = Agro_Util::formatDate($post['dt_encerramento_colheita'], 'yyyy-MM-dd');

            $idAvisoEncerramento = $AvisoEncerramento->insert($data);

            if ($post['itens_segurados']) {
                /****************************************************/
                // Tabela sinistro.avisos_encerramento_itens_segurados
                /***************************************************/
                $AvisoItemSegurado = new Sinistro2_Model_AvisosEncerramentoItensSegurados();

                foreach ($post['itens_segurados'] as $value) {
                    $idItem = $value;

                    if ($AvisoInicio->getAvisosInicioByItem($post['proposta'], $idItem)) {
                        $dtInicioColheita = new Zend_Date();
                        $dtInicioColheita->set($AvisoInicio->getAvisosInicioByItem($post['proposta'], $idItem), Zend_Date::DATES);

                        $dtEncerramentoColheita = new Zend_Date();
                        $dtEncerramentoColheita->set($data['dt_encerramento_colheita'], Zend_Date::DATES);

                        if ($dtEncerramentoColheita->get(Zend_Date::W3C) <= $dtInicioColheita->get(Zend_Date::W3C)) {
                            $Db->rollback();
                            $this->populaCampos($post);
                            $this->view->showMessage('A data de Encerramento de Colheita não pode ser inferior que a data de Início de Colheita informada para este Item Segurado.', 'error');
                            return false;
                        }
                    }

                    $item = array();
                    $item['id_aviso_encerramento'] = $idAvisoEncerramento;
                    $item['id_item_segurado'] = $idItem;

                    $AvisoItemSegurado->delete($idItem, "id_item_segurado");

                    $AvisoItemSegurado->insert($item);
					
                }
				
            }

            $serviceAvisoEncerramentoColheita = new Sinistro2_Service_AvisoEncerramentoColheita();
		
            $maiorData = $serviceAvisoEncerramentoColheita->buscarMaiorDataParaDataBase($idAvisoEncerramento);
	
            $serviceAvisoEncerramentoColheita->salvarDataBase((int)$idAvisoEncerramento, $maiorData);
			$idCronometro = $serviceAvisoEncerramentoColheita->criaCronometroRegulacao((int)$post['proposta'], (int)$idAvisoEncerramento);

			if (Sistema_Model_Usuarios::isUsuarioLogadoCorretorPreposto()) {
				$modelConfirmacaoTermoAvisosEncerramento = new Sinistro2_Model_ConfirmacaoTermoAvisosEncerramento();
				$modelConfirmacaoTermoAvisosEncerramento->save(['id_aviso_encerramento' => $idAvisoEncerramento]);
			}

            $Db->commit();
            $this->_redirect('sinistro2/avisoencerramentocolheita/');
            $this->view->showMessage(MSG_SUCCESS, 'success');
        } catch (Exception $e) {
            $Db->rollback();
            $this->populaCampos($post);
            $this->view->showMessage(MSG_ERROR, 'error');
        }
    }

	public function populaCampos($post) {

		$this->view->dt_colheita = $post['dt_colheita'];

		if ($post['itens_segurados']) {
			foreach ($post['itens_segurados'] as $item) {
				$idItem = $item;

				$this->view->listDadosItens[$idItem] = $idItem;
			}
		}
	}

	public function viewAction() {
	    $this->getHelper('layout')->setLayout('popup');

	    $idAvisoEncerramento = $this->getRequest()->getParam('id');
		$this->view->id_aviso_encerramento = $idAvisoEncerramento;

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

		if ($params["item"]) {

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

	    	try {
	    		$ModelIS = new Seguro_Model_ItensSegurados();
	    		$IS = $ModelIS->find($params["id_item_segurado"])->current();

	    		$ModelAviso = new Sinistro2_Model_AvisosEncerramento();
	    		$Aviso = $ModelAviso->find($params["id"])->current();

	    		$idProcesso = !empty($params['id_processo']) ? $params['id_processo'] : null;

	    		if (empty($idProcesso)) {
                    $ModelProcesso = new Sinistro2_Model_Processos();
                    $Processo = $ModelProcesso->fetchRow("id_proposta=$Aviso->id_proposta");
                    $idProcesso = $Processo->id;
                }

	    		$ModelObs = new Sinistro2_Model_ProcessosObservacoes();
	    		$Obs = $ModelObs->createRow();
	    		$Obs->id_processo = $idProcesso;
	    		$Obs->ds_observacao = "Excluiu o item $IS->nr_item_segurado($IS->ds_item_segurado) do aviso de encerramento n° $Aviso->id";
	    		$Obs->save();

	    		$Model = new Sinistro2_Model_AvisosEncerramentoItensSegurados();
	    		$Model->deleteItem($params["item"]);

	    		$this->view->showMessage("Item excluído com sucesso.", 'success');
	    		Zend_Db_Table::getDefaultAdapter()->commit();

	    	} catch (Exception $e) {
	    		Zend_Db_Table::getDefaultAdapter()->rollBack();
	    		$this->view->showMessage("Não foi possível excluir o item.<br> A equipe de desenvolvimento foi informada.", 'error');
	    		Agro_Util::informaErroAgronet($e->getMessage());
	    	}
	    }

	    if (!$Aviso->id_proposta) {
    		$ModelAviso = new Sinistro2_Model_AvisosEncerramento();
    		$Aviso = $ModelAviso->find($params["id"])->current();
		}
	    $Info = new Seguro_Model_InformacoesBancarias();
	    $this->view->informacoes_bancarias = $Info->getInformacoesBancarias($Aviso->id_proposta);
	    $AvisosEncerramento = new Sinistro2_Model_AvisosEncerramento();
	    $this->view->data = $AvisosEncerramento->getDataViewAvisoEncerramento($idAvisoEncerramento);

	}

	public function excluirAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();

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

		// Insere observação no processo com o motivo da exclusão
		$Model_ProcessosObservacoes = new Sinistro2_Model_ProcessosObservacoes();
		$Model_ProcessosObservacoes->insert(
			array(
				'id_processo'=>$params['id_processo'],
				'ds_observacao'=>'Aviso de encerramento de colheita nº '.$params['id_aviso_encerramento'].' excluído - Motivo: '.$params['ds_motivo_exclusao']
			)
		);

		$Model_AvisosEncerramento = new Sinistro2_Model_AvisosEncerramento();
		$Model_AvisosEncerramento->delete($params['id_aviso_encerramento']);

		$Model_AvisosEncerramentoItem = new Sinistro2_Model_AvisosEncerramentoItensSegurados();
		$Model_AvisosEncerramentoItem->delete($params['id_aviso_encerramento']);

        (new Sinistro2_Model_AvisosEncerramentoDataBase())->delete($params['id_aviso_encerramento'], 'id_aviso_encerramento');
		//zerar cronometro
		$modelCronometro 	= new Sinistro2_Model_CronometroRegulacao();
		$cronometro			= $modelCronometro->getCronometroByAvisoId($params['id_aviso_encerramento']);
		$modelCronometro->zerar($cronometro['id']);
		
		
	}
}
