<?

class Sinistro_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 Sinistro_Model_AvisosEncerramento();
	}

	public function indexAction() {
		$this->view->title .= " » Listagem";
		$this->view->formPesquisaProposta = new Sinistro_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 = "/sinistro/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();

		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();
            	$endosso = $ModelProposta->fetchRow($ModelProposta->getAdapter()->quoteInto('id = ?',$this->getRequest()->getParam('valor_pesquisa')))->toArray();

                $filter['field'] = 'p.id_endosso';
                $filter['operator'] = '=';
                $filter['value'] = $endosso['id_endosso'];

                $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 Sinistro_Model_AvisosEncerramento();
			$AvisoInicio       = new Sinistro_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);

			// Tabela seguro.informacoes_bancarias
			$InformacoesBancarias = new Seguro_Model_InformacoesBancarias();
			for($i=0; $i<$post['num_linhas']; $i++){
				if ($post['id_'.$i] > 0) {
					$InfoRow = $InformacoesBancarias->find($post['id_'.$i])->current();
				} else {
					$InfoRow = $InformacoesBancarias->createRow();
				}

				$InfoRow->cpf_cnpj = $post['cpf_cnpj_'.$i];
				$InfoRow->id_proposta = $post['id_proposta_'.$i];
				$InfoRow->id_banco = $post['banco_'.$i] ? $post['banco_'.$i] : null;
				$InfoRow->nu_conta_corrente = $post['conta_corrente_'.$i];
				$InfoRow->nu_digito_conta_corrente = $post['digito_conta_corrente_'.$i];
				$InfoRow->nu_agencia = $post['agencia_'.$i];
				$InfoRow->nu_digito_agencia = $post['digito_agencia_'.$i];
				$InfoRow->id_forma_pagamento = $post['f_pagamento_'.$i];
				$InfoRow->save();
			}

			if ($post['itens_segurados']) {

				/****************************************************/
				// Tabela sinistro.avisos_encerramento_itens_segurados
				/***************************************************/
				$AvisoItemSegurado = new Sinistro_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);
				}
			}

			$Db->commit();
			$this->_redirect('sinistro/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 Sinistro_Model_AvisosEncerramento();
	    		$Aviso = $ModelAviso->find($params["id"])->current();

	    		$ModelProcesso = new Sinistro_Model_Processos();
	    		$Processo = $ModelProcesso->fetchRow("id_proposta=$Aviso->id_proposta");
	    		$ModelObs = new Sinistro_Model_ProcessosObservacoes();

	    		$Obs = $ModelObs->createRow();
	    		$Obs->id_processo = $Processo->id;
	    		$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 Sinistro_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 Sinistro_Model_AvisosEncerramento();
    		$Aviso = $ModelAviso->find($params["id"])->current();
		}
	    $Info = new Seguro_Model_InformacoesBancarias();
	    $this->view->informacoes_bancarias = $Info->getInformacoesBancariasByProposta($Aviso->id_proposta)->toArray();
	    $AvisosEncerramento = new Sinistro_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 Sinistro_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 Sinistro_Model_AvisosEncerramento();
		$Model_AvisosEncerramento->delete($params['id_aviso_encerramento'], 'id');

		$this->_redirect('/sinistro/processo/view/id/'.$params['id_processo']);
	}
}
