<?php

/**
 * PropostaController
 *
 * @author Renato Dehnhardt <renato.dehnhardt@agrobrasilseguros.com.br
 */
class Endosso_PropostaController extends Agro_Controller_Proposta {

	/**
	 * Define o model padrao da classe
	 */
	public function getModel() {
		return new Endosso_Model_Propostas();
	}

	/**
	 * Define o form padrao da classe
	 */
	public function getForm() {
		//return new Produto_Form_Atributo();
	}

	/**
	 * Coloca o title da página para todas as páginas
	 */
	public function init() {
		$this->view->title = 'Atendimento » Endosso » Propostas';
		$this->view->endosso = 2;
	}

	/**
	 * Metodo que duplica a proposta para fazer o endosso
	 */
	public function duplicarAction() {
		$this->isAjax();

		if ($this->getRequest()->getParam('id')) {
			$Endossar = new Endosso_Model_Endossar();
			$idEndosso = $Endossar->proposta(
                $this->getRequest()->getParam('id'),
                false,
                null,
                !empty($this->getRequest()->getParam('importar_itens_laudo'))
            );

			if ($idEndosso) {
				$Propostas = new Endosso_Model_Propostas();
				if ($Propostas->find($idEndosso)->current()) {
					$return['message'] = $Endossar->getMessages();
					$return['id'] = $idEndosso;
				} else {
					$return['message'] = 'Proposta não endossada';
				}
			} else {
				$return['message'] = $Endossar->getMessages();
			}

			$this->getResponse()->setBody(Zend_Json::encode($return));
		}
	}
	
	/**
	 * Metodo que duplica a proposta para fazer o endosso
	 */
	public function duplicarloteAction() {
		$this->isAjax();
	
		if ($this->getRequest()->getParam('id')) {
			$Endossar = new Endosso_Model_Endossar();
			$idEndosso = $Endossar->proposta($this->getRequest()->getParam('id'), $this->getRequest()->getParam('is_lote'), $this->getRequest()->getParam('nr_parcelas'));
	
			if ($idEndosso) {
				$Propostas = new Endosso_Model_Propostas();
				if ($Propostas->find($idEndosso)->current()) {
					$return['message'] = $Endossar->getMessages();
					$return['id'] = $idEndosso;
				} else {
					$return['message'] = 'Proposta não endossada';
				}
			} else {
				$return['message'] = $Endossar->getMessages();
			}
	
			$this->getResponse()->setBody(Zend_Json::encode($return));
		}
	}	

	/**
	 * Metodo que cancela um orçamento de endosso
	 */
	public function cancelarAction() {
	    $this->getHelper('ViewRenderer')->setNoRender();
	    $this->getHelper('layout')->disableLayout();

	    if ($this->getRequest()->getParam('id')) {

	        $Propostas = new Endosso_Model_Propostas();
	        $Proposta  = $Propostas->find($this->getRequest()->getParam('id'))->current();

	        if($Propostas->changeStatus(array('id_proposta' => $this->getRequest()->getParam('id')), 'ENDOSSO_INCOMPLETO', false, true)){
	            $return['status'] = true;
	        } else {
	            $return['status'] = false;
	        }
	    } else {
	        $return['status'] = false;
	    }
	    $this->getResponse()->setBody(Zend_Json::encode($return));
	}

	/**
	 * Metodo para editar o endosso
	 */
	public function editAction() {
		$this->getHelper('layout')->setLayout('popup');
		$this->view->title .= ' » Editar';

		if ($this->getRequest()->getParam('id')) {
			$Propostas = new Endosso_Model_Propostas();
			$Tipos = new Endosso_Model_TiposEndossos();

			$this->view->proposta = $Propostas->find($this->getRequest()->getParam('id'))->current();
			$this->view->opcoes_endossos = $Tipos->fetchAll('fl_ativo = true', 'ds_tipo_endosso asc');
			$this->view->tipos_endosso = $this->view->proposta->tipos_endosso();
			$this->view->tipo_endosso_proposta = $this->view->proposta->tipo_endosso_proposta();
			$this->view->importar_itens_laudo = $this->getRequest()->getParam('importar_itens_laudo');
			
			// Busca, se houver, locais de entrega
			if(!empty(array_intersect(array(33,40, 45),array_keys($this->view->proposta->coberturas_contratadas('adicional'))))) {
				$LocaisEntrega = new Seguro_Model_PropostasCooperativas();
				$this->view->locais_entrega = $LocaisEntrega->getByIdProposta($this->getRequest()->getParam('id'))->toArray();
			}
		} else {
			$this->view->showMessage('É necessário informar uma proposta.', 'error');
		}
	}

	/**
	 * Metodo para consultar propostas de endosso
	 */
	public function consultarAction() {
		$this->view->title .= ' » Consultar';
		$this->view->endosso = 1;
	}

	/**
	 * Verifica se existe endosso de redução para a apólice
	*/
	public function existereducaoAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();

		$Model = $this->getModel();
		$cont = $Model->verificaEndossoReducao($this->getRequest()->getParam('id_proposta'));

		if ($cont > 0) {
			$result = true;
		} else {
			$result = false;
		}

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

	/**
	 * Verifica se existe Subvenção federal na apólice
	*/
	public function existesubvencaofederalAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();
		$modelAtendimento = new Atendimento_Model_Proposta;

		$Model = $this->getModel();
		$row = $Model->getRow($this->getRequest()->getParam('id_proposta'));
		$idPropostaMae = $row->id_proposta_mae($this->getRequest()->getParam('id_proposta'));
		$endosso = current($row->endosso());
		$subvencoes = $Model->buscaSubvencoes($endosso['id_endosso']);
		$respostas = $row->respostas();
		$subvencaoConcedida = $modelAtendimento->subvencaoConcedida($idPropostaMae);

		if ($subvencoes->valor_subvencao_federal > 0 && $respostas['QUEST_SUBVENCAO_FEDERAL'] && $idPropostaMae == $row->id && $subvencaoConcedida == 'Sim') {
			$result = true;
		} else {
			$result = false;
		}

		$this->getResponse()->setBody(Zend_Json::encode($result));
	}
	
	public function getFilter() {
	
		$User = Zend_Auth::getInstance()->getIdentity();
		$Status = new Sistema_Model_Status();
		$where = array();

		$where[] = array(
				'field' => 'spr.id_status',
				'operator' => 'in',
				'value' => '('.$this->getRequest()->getParam('id_status').')'
		);
		
		if ($this->getRequest()->getParam('nr_apolice')) {
			$where[] = array(
					'field' => 'spr.nr_apolice',
					'operator' => '=',
					'value' => trim($this->getRequest()->getParam('nr_apolice'))
			);
	
		} elseif ($this->getRequest()->getParam('id')) {
			$tmp = explode(" ", trim($this->getRequest()->getParam('id')));
			$ids = implode(',', $tmp);
	
			if (count($tmp) > 1) {
				$where[] = "spe.id_endosso in (select id_endosso from seguro.propostas where id in ($ids))";
			} else {
				$where[] = "spe.id_endosso = (select id_endosso from seguro.propostas where id = ($ids))";
			}
	
		} else {
	
			if ($this->getRequest()->getParam('fl_parcela_paga') == '1') {
				$where[] = array(
						'field' => 'spa.fl_pago',
						'operator' => '=',
						'value' => $this->getRequest()->getParam('fl_parcela_paga')
				);
			}
				
			if ($this->getRequest()->getParam('ds_coordenadas')) {
				$where[] = array(
						'field' => 'spd.ds_coordenadas',
						'operator' => '=',
						'value' => $this->getRequest()->getParam('ds_coordenadas')
				);
			}
				
			if ($this->getRequest()->getParam('id_corretor')) {
				$where[] = array(
						'field' => 'scr.id_usuario',
						'operator' => '=',
						'value' => $this->getRequest()->getParam('id_corretor')
				);
			}
				
			if ($this->getRequest()->getParam('id_preposto')) {
				$where[] = array(
						'field' => 'spr.id_usuario_criacao',
						'operator' => '=',
						'value' => $this->getRequest()->getParam('id_preposto')
				);
			}
				
			if ($this->getRequest()->getParam('ds_sigla_propriedade')) {
				$where[] = array(
						'field' => 'suf.ds_sigla',
						'operator' => '=',
						'value' => $this->getRequest()->getParam('ds_sigla_propriedade')
				);
			}
				
			if ($this->getRequest()->getParam('id_municipio_propriedade')) {
				$where[] = array(
						'field' => 'spd.id_municipio',
						'operator' => '=',
						'value' => $this->getRequest()->getParam('id_municipio_propriedade')
				);
			}

            if ($this->getRequest()->getParam('dt_inicio') && $this->getRequest()->getParam('dt_fim')) {
                $where[] = "to_date(spr.dt_transmissao::varchar, 'yyyy-mm-dd') between to_date('".$this->getRequest()->getParam('dt_inicio')."', 'dd/mm/yyyy') and to_date('".$this->getRequest()->getParam('dt_fim')."', 'dd/mm/yyyy')";
            }

            if ($this->getRequest()->getParam('dt_inicio') && !$this->getRequest()->getParam('dt_fim')) {
                $inicio = Agro_Util::formatDate($this->getRequest()->getParam('dt_inicio'), Zend_Date::W3C);
                $where[] = "spr.dt_transmissao >= '$inicio'";
            }
				
			
			if ($this->getRequest()->getParam('safras')) {
				$where[] = array(
						'field' => 'ppr.id_safra',
						'operator' => '>=',
						'value' => $this->getRequest()->getParam('safras')
				);
			} elseif ($this->getRequest()->getParam('id_safra')) {
				$where[] = array(
						'field' => 'ppr.id_safra',
						'operator' => '=',
						'value' => $this->getRequest()->getParam('id_safra')
				);
			}
				
			if ($this->getRequest()->getParam('id_produto')) {
				$where[] = array(
						'field' => 'spr.id_produto',
						'operator' => '=',
						'value' => $this->getRequest()->getParam('id_produto')
				);
			}
				
			if ($this->getRequest()->getParam('ds_nome_proponente')) {
				$where[] = array(
						'field' => 'spt.ds_nome_proponente',
						'operator' => 'ilike',
						'value' => '%'.$this->getRequest()->getParam('ds_nome_proponente').'%'
				);
			}
				
			if ($this->getRequest()->getParam('ds_cpf_proponente')) {
				$where[] = array(
						'field' => 'spt.cpf_cnpj',
						'operator' => '=',
						'value' => $this->getRequest()->getParam('ds_cpf_proponente')
				);
			}
				
			if ($this->getRequest()->getParam('id_pendencia')) {
				$where[] = array(
						'field' => 'id_pendencia',
						'operator' => '=',
						'value' => $this->getRequest()->getParam('id_pendencia')
				);
			}
				
			if ($this->getRequest()->getParam('id_endosso')){
				$where[] = array(
						'field' => 'spr.id_endosso',
						'operator' => '=',
						'value' => $this->getRequest()->getParam('id_endosso')
				);
			}
				
			if ($this->getRequest()->getParam('fl_proposta_vigente') == '0'){
				$where[] = array(
						'field' => 'spe.fl_proposta_vigente',
						'operator' => '=',
						'value' => $this->getRequest()->getParam('fl_proposta_vigente')
				);
			}
	
			if ($this->getRequest()->getParam('id_status_empresa')) {

				$status = $this->getRequest()->getParam('id_status_empresa');

				if($status !== 0) {
					if(is_array($status)){
				    	$filtro = "(".implode("," , $status).")";
					}else{
						$filtro = "(".$status.")";
					}

				    $where[] = "pvp.id_status in ".$filtro;

				} else {
					$where[] = array(
						'field' => 'pvp.id_status',
						'operator' => '=',
						'value' => 55
					);
				}
			}

			if ($this->getRequest()->getParam('fl_necessario_endosso')) {
				$where[] = array(
					'field' => 'pvp.fl_necessario_endosso',
					'operator' => '=',
					'value' => 'true'
				);
			}
		}
	
		if ($User->tp_usuario == 'C') {
			$where[] = array(
					'field' => 'scr.id_usuario',
					'operator' => '=',
					'value' => $User->id
			);
		}
	
		if ($User->tp_usuario == 'P') {
			$where[] = array(
					'field' => 'spr.id_usuario_criacao',
					'operator' => '=',
					'value' => $User->id
			);
		}
	
	
		$moduleName = Zend_Controller_Front::getInstance()->getRequest()->getModuleName();
		if ((($moduleName == 'atendimento') || ($moduleName == 'seguro')) && ($this->getRequest()->getParam('fl_proposta_vigente') <> '0')) {
			$where[] = array(
					'field' => 'spe.fl_proposta_vigente',
					'operator' => '=',
					'value' => '1'
			);
		}
		return $where;
	}

	public function verificaexistenciasolicitacaoAction()
    {
        $this->isAjax();

        $mensagemErro = 'Existe solicitação de endosso em andamento. Indisponível realização de novo endosso, ou edição';
        $mensagemErro .= ' de um já existente para proposta.';
        $retorno = [
          'erro'                => false,
          'mensagem'            => '',
          'permitirNovoEndosso' => true
        ];

        $statusPermitidosSolicitacao = [
          Endosso_Model_Solicitacao::ID_STATUS_SOLICITACAO_ENDOSSO_ACEITO_EFETIVADO,
          Endosso_Model_Solicitacao::ID_STATUS_SOLICITACAO_ENDOSSO_CANCELADO_CORRETOR,
          Endosso_Model_Solicitacao::ID_STATUS_SOLICITACAO_ENDOSSO_NEGADO,
          Endosso_Model_Solicitacao::ID_STATUS_SOLICITACAO_NAO_FINALIZADA,
          Endosso_Model_Solicitacao::ID_STATUS_CANCELADO
        ];

        $statusPermitidosProposta = [
          Seguro_Model_Propostas::ID_STATUS_ENDOSSO_ANULADO,
          Seguro_Model_Propostas::ID_STATUS_ENDOSSO_CANCELADO,
          Seguro_Model_Propostas::ID_STATUS_PROPOSTA_CANCELADA,
          Seguro_Model_Propostas::ID_STATUS_APOLICE_CANCELADA,
          Seguro_Model_Propostas::ID_STATUS_ENDOSSO_INCOMPLETO,
          Seguro_Model_Propostas::ID_STATUS_PROPOSTA_CANCELADA,
          Seguro_Model_Propostas::ID_STATUS_PROPOSTA_INCOMPLETA,
          Seguro_Model_Propostas::ID_STATUS_SOLICITACAO_CANCELADA,
        ];

        $rowsSolicitacoes = (new Endosso_Model_Solicitacao())->getSolicitacoesByProposta($this->getRequest()->getParam('id_proposta'));

        foreach ($rowsSolicitacoes as $rowSolicitacao) {
            if (empty($rowSolicitacao['id_status'])) {
                continue;
            }

            $idStatusProposta = (int)$rowSolicitacao['id_status_proposta'];
            $idStatusSolicitacao = (int)$rowSolicitacao['id_status'];

            if (in_array($idStatusProposta, $statusPermitidosProposta)) {
                continue;
            }

            if ($idStatusProposta === Seguro_Model_Propostas::ID_STATUS_SOLICITACAO_ENDOSSO
                && !in_array($idStatusSolicitacao, $statusPermitidosSolicitacao)
            ) {
                $retorno['permitirNovoEndosso'] = false;
                $retorno['mensagem'] = $mensagemErro;
                break;
            }
        }

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