<?php

class Seguro_TrocacorretagemController extends Agro_Controller_Action {

    public function init() {
		$this->view->title = 'Seguro » Proposta » Troca de Corretagem';
	}

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

	public function getForm() {
		$params = $this->getRequest()->getParams();
		$Form = new Seguro_Form_TrocaCorretagem();

		if ($params['id']){
			$Model = $this->getModel();
			$data = $Model->fetchRow($Model->getData("tc.id = " . $params['id']));
			$params['usuario_solicitante'] = $data->usuario_solicitante;
			$params['cpf_cnpj'] = $data->cpf_cnpj;
		} else if (!Sistema_Model_Usuarios::usuarioLogadoFuncionarioAgro()) {

			$Auth = Zend_Auth::getInstance()->getIdentity();
			$ModelUsuarios = new Sistema_Model_Usuarios();
			$params['id_usuario'] = $Auth->id;
			$params['usuario_solicitante'] = $ModelUsuarios->getNameById($Auth->id);
		}

		$Form->populate($params);
		return $Form;
	}

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

		if ($this->getRequest()->getParam('ds_nome_proponente')) {
			$where[] = array (
				'field' => 'ds_nome_proponente',
				'operator' => 'ilike',
				'value' => '%'.$this->getRequest()->getParam('ds_nome_proponente').'%'
			);
		}

		if ($this->getRequest()->getParam('cpf_cnpj')) {
			$where[] = array (
				'field' => 'p.cpf_cnpj',
				'operator' => '=',
				'value' => $this->getRequest()->getParam('cpf_cnpj')
			);
		}

        if ($this->getRequest()->getParam('id_preposto')) {
			$where[] = array (
				'field' => 'id_usuario',
				'operator' => '=',
				'value' => $this->getRequest()->getParam('id_preposto')
			);
		} else if ($this->getRequest()->getParam('id_corretor')) {
			$where[] = "(
				id_usuario = ". $this->getRequest()->getParam('id_corretor') . "
				OR id_usuario in (SELECT upre.id 
									FROM sistema.prepostos pre 
									JOIN sistema.usuarios upre ON upre.id = pre.id_usuario 
									JOIN sistema.corretores cor ON cor.id = pre.id_corretor 
									AND cor.id_usuario = " . $this->getRequest()->getParam('id_corretor') . ")
			)";
		}

        if ($this->getRequest()->getParam('id_status')) {
			$where[] = array (
				'field' => 'tc.id_status',
				'operator' => '=',
				'value' => $this->getRequest()->getParam('id_status')
			);
		}

		return $where;
	}

	public function formAction()
	{	
		parent::formAction();
		$this->view->bloquearFormulario = false;

		if (!empty($this->getRequest()->getParam('id'))) {
			$trocasCorretagemArquivos = new Seguro_Model_TrocasCorretagemArquivos();
			$this->view->arquivos = $trocasCorretagemArquivos->getByTrocaCorretagem($this->getRequest()->getParam('id'));

			$statusModel = new Sistema_Model_Status();
			$chaveStatus = $statusModel->getChave($this->view->form->id_status->getValue());
			$this->view->bloquearFormulario = in_array($chaveStatus, ['ACEITO', 'NEGADO']);
		}
	}

	public function saveAction()
	{
		$this->isAjax();
		$retorno = ['error' => false, 'message' => 'Troca de corretagem salva com suecsso!'];

		try {
			Agro_Db_Table_Abstract::getDefaultAdapter()->beginTransaction();

			$this->validarParametros();

			$Model = $this->getModel();
			$idTrocaCorretaem = $Model->save($this->getRequest()->getParams());

			if (empty($idTrocaCorretaem)) {
				throw new Exception("Erro ao salvar a troca de corretagem.");
			}

			if (!empty($_FILES['documentos']['name'][0])) {
				$trocasCorretagemArquivos = new Seguro_Model_TrocasCorretagemArquivos();
				$trocasCorretagemArquivos->adicionarArquivos($idTrocaCorretaem);
			}

			Agro_Db_Table_Abstract::getDefaultAdapter()->commit();
		} catch (\Throwable $th) {
			$retorno['error'] = true;
			$retorno['message'] = $th->getMessage();
			Agro_Db_Table_Abstract::getDefaultAdapter()->rollBack();
		}

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

	private function validarParametros() 
	{
		if (empty($this->getRequest()->getParam('cpf_cnpj'))) {
			throw new Exception("CPF/CNPJ não informado.");
		}

		if (empty($this->getRequest()->getParam('id_proponente'))) {
			throw new Exception("Id do proponente não informado.");
		}

		if (empty($this->getRequest()->getParam('id_status'))) {
			throw new Exception("Status não informado.");
		}

		if (empty($this->getRequest()->getParam('id_usuario'))) {
			throw new Exception("Usuário solicitante não informado.");
		}

		if (empty($this->getRequest()->getParam('id')) && empty($_FILES['documentos']['name'][0])) {
			throw new Exception("Nenhum arquivo informado.");
		}
	}

	public function removerarquivoAction()
	{
		$this->isAjax();
		
		$return = array(
			'message' => '',
			'error' => false
		);

		try {
			Agro_Db_Table_Abstract::getDefaultAdapter()->beginTransaction();
			$id = $this->getRequest()->getParam('id_troca_corretagem_arquivo');
			
			if (empty($id)) {
				throw new Exception("ID do arquivo não informado.");
			}

			$trocasCorretagemArquivos = new Seguro_Model_TrocasCorretagemArquivos();
			$trocasCorretagemArquivos->delete($id);

			Agro_Db_Table_Abstract::getDefaultAdapter()->commit();
			$return['message'] = 'Arquivo removido com sucesso.';
		} catch (Exception $e) {
			Agro_Db_Table_Abstract::getDefaultAdapter()->rollback();
			$return['message'] = $e->getMessage();
			$return['error'] = true;
		}

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

	public function getproponenteAction() {
		$this->isAjax();
		$Proponentes = new Seguro_Model_Proponentes();
		$Row = $Proponentes->fetchRow("cpf_cnpj = '" . $this->getRequest()->getParam('cpf_cnpj') . "'");
		$Row = ($Row ? $Row->toArray() : null);
		$this->getResponse()->setBody(Zend_Json::encode($Row));
	}
}