<?php
class Sinistro2_AvisofinalreplantioController extends Agro_Controller_Action {

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

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

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

    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->getRequest()->getParam('id_safra') != 'TODAS') {
            $tipo_pesquisa = $this->getRequest()->getParam('tipo_pesquisa');
            if(strcmp($tipo_pesquisa, 'id_proposta') != 0){
                $filter['field'] = 'pd.id_safra';
                $filter['operator'] = '=';
                $filter['value'] = $this->getRequest()->getParam('id_safra');
                $where[] = $filter;
            }else if(!$this->getRequest()->getParam('valor_pesquisa')){
                $filter['field'] = 'pd.id_safra';
                $filter['operator'] = '=';
                $filter['value'] = $this->getRequest()->getParam('id_safra');
                $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 formAction() {
        
        $this->view->back = '/sinistro2/avisofinalreplantio';
        $this->view->title .= " » Formulário";

        $this->view->processo = $this->getRequest()->getParam('processo');
        $this->view->proposta = $this->getRequest()->getParam('proposta');
        $this->getRequest()->setParam('id_processo',  $this->getRequest()->getParam('processo'));
        $User = Zend_Auth::getInstance()->getIdentity();

        $Model = $this->getModel();
        $ModelBeneficiarios = new Seguro_Model_PropostasBeneficiarios();
     
        $this->view->itensSegurados = $Model->getItensSeguradosAvisosFinalReplantio($this->view->processo, $this->view->proposta);

        $this->view->listDadosItens = array();
     
        $this->view->possuiBeneficiario = (!empty($ModelBeneficiarios->getBeneficiarios($this->view->proposta))) ? '1' : '0';

        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_final_replantio']);
        
        $dtAtual = $dt1[2] . $dt1[1] . $dt1[0];
        $dtReplantio = $dt2[2] . $dt2[1] . $dt2[0];

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

        return $msg;
    }

    public function populaCampos($post) {
        $this->view->dt_final_replantio = $post['dt_final_replantio'];
        if ($post['itens_segurados']) {
            foreach ($post['itens_segurados'] as $item) {
                $idItem = $item;
                $this->view->listDadosItens[$idItem] = $idItem;
            }
        }
    }

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

        try {
            $AvisoFinalReplantio = new Sinistro2_Model_AvisosFinalReplantio();
            $data = array();
            $data['id_proposta'] = $post['proposta'];
            $data['dt_final_replantio'] = Agro_Util::formatDate($post['dt_final_replantio'], 'yyyy-MM-dd');

            $data['ds_beneficiario_alteracao'] = !empty($post['pagamento_beneficiario']) ? $post['pagamento_beneficiario'] : '';
            $data['ds_beneficiario_original'] = $data['ds_beneficiario_alteracao'];
          
            $idAvisoFinalReplantio = $AvisoFinalReplantio->insert($data);

            if(!empty($data['ds_beneficiario_original'])){
                $ModelProcessosObservacoes = new Sinistro2_Model_ProcessosObservacoes();
                $Obs = $ModelProcessosObservacoes->createRow();
                $Obs->id_processo = $post['id_processo'];
                $Obs->ds_observacao = "ATENÇÃO! Cobertura adicional de replantio será paga ao beneficiário, caso haja indenização, solicitar 'Termo de crédito em conta bancária'.";
                $Obs->save();
            }
            if ($post['itens_segurados']) {
                $AvisoItemSegurado = new Sinistro2_Model_AvisosFinalReplantioItensSegurados();

                foreach ($post['itens_segurados'] as $value) {
                    $idItem = $value;
                    $item = array();
                    $item['id_aviso_final_replantio'] = $idAvisoFinalReplantio;
                    $item['id_item_segurado'] = $idItem;
                    $AvisoItemSegurado->delete($idItem,'id_item_segurado');
                    $AvisoItemSegurado->insert($item);
                }
            }

            if (Sistema_Model_Usuarios::isUsuarioLogadoCorretorPreposto()) {
				$modelConfirmacaoTermoAvisosFinalReplantio = new Sinistro2_Model_ConfirmacaoTermoAvisosFinalReplantio();
				$modelConfirmacaoTermoAvisosFinalReplantio->save(['id_aviso_final_replantio' => $idAvisoFinalReplantio]);
			}

            $Db->commit();
            $this->_redirect('sinistro2/avisofinalreplantio/');
            $this->view->showMessage(MSG_SUCCESS, 'success');
        } catch (Exception $e) {

            $Db->rollback();
            $this->populaCampos($post);
            $this->view->showMessage(MSG_ERROR, 'error');
        }
    }

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

        $idAvisoFinalReplantio = $this->getRequest()->getParam('id');
        
        $this->view->id_aviso_final_replantio = $idAvisoFinalReplantio;
        $params = $this->getRequest()->getParams();
        $ModelAvisoFinalReplantio = new Sinistro2_Model_AvisosFinalReplantio();

        //excluir um item do aviso de final de replantio
        if ($params['item']) {
            Zend_Db_Table::getDefaultAdapter()->beginTransaction();

            try {
                $ModelItensSegurados = new Seguro_Model_ItensSegurados();
                $ItemSegurado = $ModelItensSegurados->find($params['id_item_segurado'])->current();

                $AvisoFinalReplantio = $ModelAvisoFinalReplantio->find($params['id'])->current();
                $idProcesso = !empty($params['id_processo']) ? $params['id_processo'] : null;

                if ($AvisoFinalReplantio->id_proposta && empty($idProcesso)) {
                    $ModelProcesso = new Sinistro2_Model_Processos();
                    $Processo = $ModelProcesso->fetchRow('id_proposta='.$AvisoFinalReplantio->id_proposta);
                    $idProcesso = $Processo->id;
                }

                $ModelProcessosObservacoes = new Sinistro2_Model_ProcessosObservacoes();
                $Obs = $ModelProcessosObservacoes->createRow();
                $Obs->id_processo = $idProcesso;
                $Obs->ds_observacao = "Excluído item $ItemSegurado->nr_item_segurado($ItemSegurado->ds_item_segurado) do aviso de final de replantio nro. $AvisoFinalReplantio->id";
                $Obs->save();

                $ModelAvisosFinalReplantioItensSegurados = new Sinistro2_Model_AvisosFinalReplantioItensSegurados();
                $ModelAvisosFinalReplantioItensSegurados->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.', 'error');
                Agro_Util::informaErroAgronet($e->getMessage());
            }
        }

        $this->view->data = $ModelAvisoFinalReplantio->getDataViewAvisoFinalReplantio($idAvisoFinalReplantio);
    }

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

        $modelProcessosObservacoes = new Sinistro2_Model_ProcessosObservacoes();
        $modelProcessosObservacoes->insert(
            array('id_processo' => $params['id_processo'],
                'ds_observacao' => 'Aviso de final de replantio nro. '. $params['id_aviso_final_replantio'].' excluído - Motivo: '.
                    $params['ds_motivo_exclusao_final_replantio']
                )
        );

        $modelAvisoFinalReplantio = new Sinistro2_Model_AvisosFinalReplantio();
        $modelAvisoFinalReplantio->delete($params['id_aviso_final_replantio']);

        $modelAvisosFinalReplantioItensSegurados = new Sinistro2_Model_AvisosFinalReplantioItensSegurados();
        $modelAvisosFinalReplantioItensSegurados->delete($params['id_aviso_final_replantio']);
    }

    public function beneficiariosAction()
    {
        $this->getHelper('layout')->setLayout('popup');
        $proposta   = $this->getRequest()->getParam('proposta');
        $id_aviso   = $this->getRequest()->getParam('aviso');
        
        $aviso      =  (!empty($id_aviso)) ? $this->getModel()->fetchAll(['id = ?' =>$id_aviso])->current() : "";
        $beneficiarioConfigurado = $aviso['ds_beneficiario_alteracao'];
        
        $processo   = (new Sinistro2_Model_Processos())->fetchRow(['id_proposta = ?'=>$proposta])->toArray();
        $modelbeneficiarios = new Seguro_Model_PropostasBeneficiarios();

        $this->view->proposta = $proposta;
        $this->view->processo = $processo['id'];

        $this->view->beneficiarios = $modelbeneficiarios->getBeneficiarios($proposta);
        $this->view->beneficiarioConfigurado = ($beneficiarioConfigurado) ? $beneficiarioConfigurado : "";
        $this->view->id_aviso = $id_aviso;
    }

    public function uploadtermobancarioAction()
    {
        $this->isAjax();
        if ($_FILES) {
            $this->saveFile($this->getRequest()->getParams());
        }
    }

    public function savefile(array $post) {
        
		// Obtém o arquivo do upload
		$adapter = new Zend_File_Transfer_Adapter_Http();
		$file = $adapter->getFileInfo();
     
		$Db = Agro_Db_Table_Abstract::getDefaultAdapter();
		$Db->beginTransaction();

		try {
            
			// Gera o nome do novo arquivo
			$TipoArquivoProcesso = new Sistema_Model_TipoArquivoProcesso();
			$post['id_tipo_arquivo'] = $TipoArquivoProcesso->getIdArquivo('TERMO_DE_CRÉDITO_EM_CONTA_BANCÁRIA');
            
			$ProcessoArquivo = new Sinistro2_Model_ProcessosArquivos();
			$id = $ProcessoArquivo->nextSequenceId();

			$Processo = new Sinistro2_Model_Processos();
            $Beneficiarios = new Seguro_Model_Beneficiarios();
			$RowProcesso = $Processo->find($post['id_processo']);
			$Proponente = $Processo->getProponenteProcesso($post['id_processo']);

			$countArquivos = $ProcessoArquivo->getCountTipoArquivo($Proponente['cpf_cnpj'], $post['id_tipo_arquivo']);
			if($countArquivos < 1){
			    $countArquivos = 1;
			} else {
			    $countArquivos += 1;
			}

            $extensao = strtolower(end(explode('.', $file['arquivo']['name'])));

			$cpf_cnpj = str_replace(".", "", $Proponente['cpf_cnpj']);
			$cpf_cnpj = str_replace("-", "", $cpf_cnpj);
			$cpf_cnpj = str_replace("/", "", $cpf_cnpj);

			$nomeArquivo = $cpf_cnpj."_TERMO_CRÉDITO_EM_CONTA_BANCÁRIA_".$countArquivos.".".$extensao;

			$target = APPLICATION_PATH.'/upload_files/sinistro_processo/'.$nomeArquivo;

			// Faz o upload do arquivo
			$adapter->addFilter('Rename', array(
				'source' => $file['arquivo']['tmp_name'],
				'target' => $target,
				'overwrite' => true)
			);

			$adapter->addValidator('Size', false, 14680064)
				->addValidator('Extension', false, ['pdf', 'PDF', 'jpg', 'JPG', 'jpeg', 'JPEG', 'png', 'PNG', 'jfif', 'JFIF']);
			
			if (!$adapter->isValid()) {
				throw new Exception('Por favor, verifique o tamanho do arquivo (máximo permitido 14Mb) e/ou a sua extensão (permitidas pdf,jpg,jpeg,png ou jfif)');
			} else if ($adapter->receive()) {
				// Salva registro na tabela processos_arquivos
				$data = array();
				$data['id'] = $id;
				$data['id_processo'] = $post['id_processo'];
				$data['id_tipo_arquivo'] = $post['id_tipo_arquivo'];
				$data['ds_nome_arquivo'] = $nomeArquivo;

				$ProcessoArquivo->insert($data);

                $RowBeneficiario                    = $Beneficiarios->find(['id'=>$post['id_beneficiario']])->current();
				$idStatusAnaliseConcluida           = $Processo->getIdStatus('ANALISE_CONCLUIDA', 'ARQUIVOS_PROCESSO_SINISTRO');
                $id_status_arquivos_beneficiario    = $RowBeneficiario['id_status_arquivos'];
          
				if($idStatusAnaliseConcluida == $id_status_arquivos_beneficiario) {
					$RowBeneficiario->id_status_arquivos = $Processo->getIdStatus('NAO_ANALISADO', 'ARQUIVOS_PROCESSO_SINISTRO');
					$RowBeneficiario->save();
				}
				$Db->commit();

			}
		} catch (Exception $e) {
			$Db->rollback();
			$this->view->showMessage(MSG_ERROR."<br />".$e->getMessage(), 'error');
		}
	}

    public function atualizadestinatariopagamentoAction(){
        try{
            $this->isAjax();
            
            $idAviso                                    = $this->getRequest()->getParam('id_aviso');
            $beneficiario                               = $this->getRequest()->getParam('beneficiario');
            $id_processo                                = $this->getRequest()->getParam('id_processo');
            $modelAvisos                                = new Sinistro2_Model_AvisosFinalReplantio();
            $modelCoberturas                            = new Produto_Model_Coberturas();
            $modelLiquidacoes                           = new Sinistro2_Model_Liquidacoes(); 
            $modelItensSegurados                        = new Sinistro2_Model_AvisosFinalReplantioItensSegurados();
            $modelLiquidacoesItensSeguradosCoberturas   = new Sinistro2_Model_LiquidacoesItensSeguradosCoberturas();
            $idStatusPendentePagamento          = (new Sistema_Model_Status())->getIdByChaveTipoChave('ENVIADA_SEGURADORA', 'LIQUIDACOES');
            $idStatusIndenizacaoPaga            = (new Sistema_Model_Status())->getIdByChaveTipoChave('INDENIZACAO_PAGA', 'LIQUIDACOES');
            
            $itensSegurados                             = $modelItensSegurados->fetchAll(['id_aviso_final_replantio = ?' => $idAviso])->toArray();
     
            if(!empty($itensSegurados)){
                foreach($itensSegurados as $item){
                    //Se o item estiver vinculado a uma liquidacao precisa validar seu status antes de seguir na operação
                    $liquidacoes = $modelLiquidacoesItensSeguradosCoberturas->fetchAll(['id_item_segurado = ?' => $item['id_item_segurado']]);
                    foreach($liquidacoes as $liq){
                        if($modelCoberturas->isReplantio($liq['id_cobertura'])){
                            $liquidacao = $modelLiquidacoes->fetchRow(['id = ?' => $liq['id_liquidacao']])->toArray();
                            if($liquidacao['id_status'] == $idStatusPendentePagamento OR $liquidacao['id_status'] == $idStatusIndenizacaoPaga){
                                $return = array("status"=>false, "message"=>"Liquidação com status inválido.");
                                $this->getResponse()->setBody(Zend_Json::encode($return));
                                return false;
                            }
                        }
                    }

                    if(filter_var($this->getRequest()->getParam('segurado'),FILTER_VALIDATE_BOOLEAN)){
                        $res = $modelAvisos->configuraDestinatarioPagamento($id_processo, $idAviso);
                    }else{
                        $res = $modelAvisos->configuraDestinatarioPagamento($id_processo, $idAviso,$beneficiario);
                    }
                    if($res['status']){
                        $return = array("status"=>true, "message"=>"Operação concluída com sucesso!");
                    }else{
                        $return = array("status"=>false, "message"=>$res['message']);
                    }
                }
            }
        }catch(Exception $e){
            $return = array('status' => false, 'message'=>"Falha ao salvar alteração!");
        }

        $this->getResponse()->setBody(Zend_Json::encode($return));
    }

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

    public function historicodestinatariopagamentoAction()
    {
        $this->getHelper('layout')->setLayout('popup');
        $model              = $this->getModel();
        $idAviso            = $this->getRequest()->getParam('id_aviso');
        $logs               = $model->getLogs($idAviso);
        $this->view->logs   = $logs;
    }
}