<?php
/**
 * PropostaDocumentoFisicoController
 *
 * @author Marcelo Paulino
 * @date 04/01/2017
 */
class Atendimento_PropostaDocumentoFisicoController extends Agro_Controller_Proposta {

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

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

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

	/**
	 * Executa a baixa de documentos fisicos
	 */
	public function formAction() {
		$this->view->form = $this->getForm();
		$this->view->title .= ' » Formulário';
		$this->view->back = '/atendimento/propostadocumentofisico/consultar';
		
		$Model = $this->getModel();
		
		if ($this->getRequest()->isPost()) {
			
			$post = $this->getRequest()->getPost();
			$fl_erro = false;
				
			if ($this->view->form->isValid($post)) {
				
				$arDocumentos = explode(" - PRO", strtoupper($this->getRequest()->getParam('ds_documentos_baixados')));
				
				foreach ($arDocumentos as $documento) {
					if($documento > 0){
						if(!$Model->changeStatus(array('id_proposta' => trim($documento), 'ds_documento_fisico_baixado' => $this->getRequest()->getParam('ds_observacao')), 'DOC_BAIXADO')){
							$fl_erro = true;
							break;
						}
					}
				}
				
				if(!$fl_erro){
					$this->view->showMessage(MSG_SUCCESS, 'success');
				} else {
					$this->view->showMessage(MSG_ERROR, 'error');
				}

			} else {
				$Errors = $this->view->form->getMessages();
				$this->view->showMessage($this->getHtmlFormError($Errors), 'error');
				$this->view->form->populate($this->getRequest()->getParams());
			}
		}
	}
	
	/**
	 * Metodo para consultar propostas
	 */
	public function consultarAction() {
		$this->view->title .= ' » Consultar';
	}

	/**
	 * Busca informacoes do Gerenciamento de Status dos Documentos Fisicos
	 *
	 * @author Marcelo Paulino
	 * @date 05/01/2017
	 */
	public function documentofisicoAction() {
		$this->getHelper('layout')->disableLayout();
		
		$this->view->date = new Zend_Date();
		$this->view->dateFormat = 'dd/MM/Y HH:mm:ss';

		$Model = $this->getModel();
		$RsStatus = $Model->getStatusDocFisico($this->getRequest()->getParam('id_proposta'), true);
		$this->view->id_status_doc_fisico = $RsStatus[0]['id_status']; 
		$this->view->ds_observacao = $RsStatus[0]['ds_observacao'];
		
		$Propostas = new Seguro_Model_Propostas();
		$this->view->proposta = $Propostas->get($this->getRequest()->getParam('id_proposta'));
		
		// Adiciona os Status na View
		$Status = new Sistema_Model_Status();
		$this->view->status = $Status->getCombo('DOCUMENTO_FISICO',true);
		
		// Adiciona as Pendencias na View
		$Pendencias = new Atendimento_Model_Pendencia();
		$this->view->pendencias = $Pendencias->getPendenciasDocFisico($this->getRequest()->getParam('id_proposta'), 'PENDENCIA_DOCUMENTOS_FISICO_PROPOSTA');
		
		// Adiciona o Historico de Alteracao de Status
		$this->view->historico_status = $Model->getHistoricoStatus($this->getRequest()->getParam('id_proposta'));
	}
	
	/**
	 * Altera o status do documento fisico da proposta
	 *
	 * @author Marcelo Paulino
	 * @date 05/01/2017
	 */
	public function alterastatusAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		
		$result = array('status' => false);
		$this->isAjax();
		
		Agro_Db_Table_Abstract::getDefaultAdapter()->beginTransaction();
	
		$Model = $this->getModel();
		$ModelStatus = new Sistema_Model_Status();
		$ModelPendencia = new Atendimento_Model_Proposta_PendenciasDocumentoFisico();
		
		if ($this->getRequest()->getParam('id_status_doc_fisico')) {
			
			$ds_chave = $ModelStatus->getChave($this->getRequest()->getParam('id_status_doc_fisico'));
			if($Model->changeStatus(array(	'id_proposta' => $this->getRequest()->getParam('id_proposta'),
											'ds_documento_fisico_baixado' => $this->getRequest()->getParam('ds_documento_fisico_baixado')
										), $ds_chave))
			{
				
				//Salva as pendencias quando existirem
				// Seta as novas pendencias no novo status
				if($this->getRequest()->getParam('id_status_doc_fisico') == 217){
					if ($this->getRequest()->getParam('id_pendencia')) {
						foreach ($this->getRequest()->getParam('id_pendencia') as $idPendencia) {
							$data = array(
								'id_pendencia' => $idPendencia,
								'id_proposta' => $this->getRequest()->getParam('id_proposta'),
								'id_proposta_status_doc_fisico' => $this->getLastStatus($this->getRequest()->getParam('id_proposta'))
							);
					
							if (!$ModelPendencia->save($data)) {
								Agro_Db_Table_Abstract::getDefaultAdapter()->rollback();
								$return = array('status' => false, 'message' => 'Erro ao salvar pendências');
								$this->getResponse()->setBody(Zend_Json::encode($return));
								return false;
							}
						}
					} else {
						Agro_Db_Table_Abstract::getDefaultAdapter()->rollback();
						$return = array('status' => false, 'message' => 'Selecione pendência(s)');
						$this->getResponse()->setBody(Zend_Json::encode($return));
						return false;
					}
				} 
				
				Agro_Db_Table_Abstract::getDefaultAdapter()->commit();
				$return = array('status' => true, 'message' => MSG_SUCCESS);
			} else {
				Agro_Db_Table_Abstract::getDefaultAdapter()->rollback();
				$return = array('status' => false, 'message' => MSG_ERROR);
			}
		}

	
		$this->getResponse()->setBody(Zend_Json::encode($return));
	}
	
	/**
	 * Recupera o ulitmo id da tabela propostas_status_doc_fisico para a proposta informada
	 * @author Marcelo Paulino
	 * @date 05/01/2017
	 */
	public function getLastStatus($idProposta) {
		return Agro_Db_Table_Abstract::getDefaultAdapter()->fetchOne("select id from seguro.propostas_status_doc_fisico where id_proposta=$idProposta and fl_ativo=true limit 1");
	}
	
	public function getFilter() {
		$User = Zend_Auth::getInstance()->getIdentity();
		$Status = new Sistema_Model_Status();
		$where = array();

		if ($this->getRequest()->getParam('id_status')) {
			$status = $this->getRequest()->getParam('id_status');
			if (is_array($status)) {
				$status = implode(',', $status);
			}
			$where[] = array(
					'field' => 'spr.id_status',
					'operator' => 'in',
					'value' => '('.$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')) {
				$inicio = Agro_Util::formatDate($this->getRequest()->getParam('dt_inicio'), Zend_Date::W3C);
				$final = Agro_Util::formatDate($this->getRequest()->getParam('dt_fim'), Zend_Date::W3C);
					
				$where[] = "spr.dt_vigencia_inicio between '$inicio' and '$final'";
			}
				
			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_vigencia_inicio >= '$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 ($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
			);
		}
		
		return $where;
	}
}
