<?php

class Comercializacao_Model_TaxasAgrupamentos extends Agro_Db_Table_Abstract {
    const TIPO_ESTADO = 'E';
    const TIPO_MUNICIPIO = 'M';
    const TIPO_USUARIO = 'U';
    const TIPO_PROPONENTE = 'P';
	const TIPO_CAR = 'C';
    const TIPO_ORCAMENTO = 'O';

	protected $_schema = 'comercializacao';
	protected $_name = 'taxas_agrupamento';
	protected $_primary = 'id';
	public $_columnExcel = array(
		'ds_nome_agrupamento_taxas' => 'Agrupamento',
		'ds_nome_safra' => 'Safra',
		'ds_nome_produto' => 'Produto'
	);
	
	public function getFranquiaGrupo($proposta) {
		$Rs = '';
		return;
	}

	public function getData($where=false) {
		$select = $this->select()->setIntegrityCheck(false)->from(array('vt' => "comercializacao.v_taxas_agrupamento"));
		
		if (is_array($where)) {
			foreach ($where as $clause) {
				if (is_array($clause)) {
					$field = $clause['field'];
					$operator = $clause['operator'];
					$value = $clause['value'];

					$select->where("$field $operator ?", $value);
				} else {
					$select->where($clause, '');
				}
			}
		} elseif ($where != '') {
			$select->where($where);
		}
		
		if ($this->_order)
			$select->order($this->_order);
		
		return $select;
	}

	public function getTaxaEstadoXls($dados) {
		$select = $this->select();
		$select->setIntegrityCheck(false);
		$select->from(array('p' => 'produto.produtos'));
		$select->join(array('ta' => 'comercializacao.taxas_agrupamento'), 'ta.id_produto = p.id', '*');
		$select->join(array('tv' => 'comercializacao.taxas_valores'), 'ta.id = tv.id_taxa_agrupamento', array('vl_franquia', 'vl_taxa'));
		$select->join(array('cob' => 'produto.coberturas'), 'tv.id_cobertura = cob.id', 'ds_nome_cobertura');
		$select->join(array('ce' => 'comercializacao.taxas_agrupamento_estados'), 'ta.id = ce.id_taxa_agrupamento', false);
		$select->join(array('e' => 'sistema.estados'), 'ce.id_estado = e.id', array('ds_sigla'));

		if($dados['id_safra_search']) {
			$select->where('p.id_safra = ?', $dados['id_safra_search']);
		}

		if($dados['id_produto_search']) {
			$select->where('p.id = ?', $dados['id_produto_search']);
		}

		if($dados['id_estado_search']) {
			$select->where('ce.id_estado = ?', $dados['id_estado_search']);
		}

		$select->order(array('ds_nome_agrupamento_taxas', 'ds_nome_produto', 'ds_sigla', 'vl_franquia', 'vl_taxa'));
		return $this->fetchAll($select);
	}


	public function getTaxaMunicipioXls($dados) {

		$select = $this->select();
		$select->setIntegrityCheck(false);
		$select->from(array('p' => 'produto.produtos'));
		$select->join(array('ta' => 'comercializacao.taxas_agrupamento'), 'ta.id_produto = p.id', '*');
		$select->join(array('tv' => 'comercializacao.taxas_valores'), 'ta.id = tv.id_taxa_agrupamento', array('vl_franquia', 'vl_taxa'));
		$select->join(array('cob' => 'produto.coberturas'), 'tv.id_cobertura = cob.id', 'ds_nome_cobertura');
		$select->join(array('cm' => 'comercializacao.taxas_agrupamento_municipios'), 'ta.id = cm.id_taxa_agrupamento', false);
		$select->join(array('m' => 'sistema.municipios'), 'cm.id_municipio = m.id', array('ds_nome_municipio'));
		$select->join(array('e' => 'sistema.estados'), 'm.id_estado = e.id', array('ds_sigla'));

		if($dados['id_safra_search']) {
			$select->where('p.id_safra = ?', $dados['id_safra_search']);
		}

		if($dados['id_produto_search']) {
			$select->where('p.id = ?', $dados['id_produto_search']);
		}

		if($dados['id_estado_search']) {
			$select->where('e.id = ?', $dados['id_estado_search']);
		}

		if($dados['id_municipio_search']) {
			$select->where('cm.id_municipio = ?', $dados['id_municipio_search']);
		}

		$select->order(array('ds_nome_agrupamento_taxas', 'ds_nome_produto', 'ds_sigla', 'ds_nome_municipio', 'vl_franquia', 'vl_taxa'));
		return $this->fetchAll($select);
	}

	public function getTaxaUsuarioXls($dados) {

		$select = $this->select();
		$select->setIntegrityCheck(false);
		$select->from(array('p' => 'produto.produtos'));
		$select->join(array('ta' => 'comercializacao.taxas_agrupamento'), 'ta.id_produto = p.id', '*');
		$select->join(array('tv' => 'comercializacao.taxas_valores'), 'ta.id = tv.id_taxa_agrupamento', array('vl_franquia', 'vl_taxa'));
		$select->join(array('cob' => 'produto.coberturas'), 'tv.id_cobertura = cob.id', 'ds_nome_cobertura');
		$select->join(array('tu' => 'comercializacao.taxas_agrupamento_usuarios'), 'ta.id= tu.id_taxa_agrupamento', '*');
		$select->join(array('corr' => 'sistema.corretores'), 'tu.id_usuario = corr.id_usuario', array('ds_nome_fantasia'));
		$select->joinLeft(array('prep' => 'sistema.prepostos'), 'corr.id = prep.id_corretor', array('ds_nome_preposto'));
		$select->joinLeft(array('ce' => 'comercializacao.taxas_agrupamento_estados'), 'ta.id = ce.id_taxa_agrupamento', false);
		$select->joinLeft(array('e' => 'sistema.estados'), 'ce.id_estado = e.id', array('ds_sigla'));


		if($dados['id_safra_search']) {
			$select->where('p.id_safra = ?', $dados['id_safra_search']);
		}

		if($dados['id_produto_search']) {
			$select->where('p.id = ?', $dados['id_produto_search']);
		}

		if($dados['id_estado_search']) {
			$select->where('ce.id_estado = ?', $dados['id_estado_search']);
		}

		if($dados['id_preposto_search']) {
			$select->where('prep.id_usuario = ?', $dados['id_preposto_search']);
		} else {
			if($dados['id_corretor_search']) {
				$select->where('tu.id_usuario = ?', $dados['id_corretor_search']);
			}
		}

		$select->order(array('ds_nome_agrupamento_taxas', 'ds_nome_fantasia', 'ds_nome_fantasia', 'ds_nome_preposto', 'ds_nome_produto', 'ds_sigla'));

		return $this->fetchAll($select);
	}


	public function getTaxaProponenteXls($dados) {

		$select = $this->select();
		$select->setIntegrityCheck(false);
		$select->from(array('p' => 'produto.produtos'));
		$select->join(array('ta' => 'comercializacao.taxas_agrupamento'), 'ta.id_produto = p.id', '*');
		$select->join(array('tv' => 'comercializacao.taxas_valores'), 'ta.id = tv.id_taxa_agrupamento', array('vl_franquia', 'vl_taxa'));
		$select->join(array('cob' => 'produto.coberturas'), 'tv.id_cobertura = cob.id', 'ds_nome_cobertura');
		$select->join(array('tp' => 'comercializacao.taxas_agrupamento_proponentes'), 'ta.id= tv.id_taxa_agrupamento', '*');
		$select->join(array('prop' => 'seguro.proponentes'), 'tp.id_proponente = prop.id', array('cpf_cnpj'));
		$select->joinLeft(array('ce' => 'comercializacao.taxas_agrupamento_estados'), 'ta.id = ce.id_taxa_agrupamento', false);
		$select->joinLeft(array('e' => 'sistema.estados'), 'ce.id_estado = e.id', array('ds_sigla'));

		if($dados['id_safra_search']) {
			$select->where('p.id_safra = ?', $dados['id_safra_search']);
		}

		if($dados['id_produto_search']) {
			$select->where('p.id = ?', $dados['id_produto_search']);
		}

		if($dados['id_estado_search']) {
			$select->where('ce.id_estado = ?', $dados['id_estado_search']);
		}

		if($dados['cpf_cnpj']) {
			$select->where("prop.cpf_cnpj = ?", $dados['cpf_cnpj']);
		}

		$select->order(array('cpf_cnpj', 'ds_nome_agrupamento_taxas', 'ds_nome_produto', 'ds_sigla'));

		return $this->fetchAll($select);
	}

	public function getTaxaCarXls($dados) {
		$select = $this->select();
		$select->setIntegrityCheck(false);
		$select->from(array('p' => 'produto.produtos'));
		$select->join(array('ta' => 'comercializacao.taxas_agrupamento'), 'ta.id_produto = p.id', '*');
		$select->join(array('tv' => 'comercializacao.taxas_valores'), 'ta.id = tv.id_taxa_agrupamento', array('vl_franquia', 'vl_taxa'));
		$select->join(array('cob' => 'produto.coberturas'), 'tv.id_cobertura = cob.id', 'ds_nome_cobertura');
		$select->join(array('tp' => 'comercializacao.taxas_agrupamento_car'), 'ta.id= tp.id_taxa_agrupamento', '*');
		$select->joinLeft(array('ce' => 'comercializacao.taxas_agrupamento_estados'), 'ta.id = ce.id_taxa_agrupamento', false);
		$select->joinLeft(array('e' => 'sistema.estados'), 'ce.id_estado = e.id', array('ds_sigla'));

		if($dados['id_safra_search']) {
			$select->where('p.id_safra = ?', $dados['id_safra_search']);
		}

		if($dados['id_produto_search']) {
			$select->where('p.id = ?', $dados['id_produto_search']);
		}

		if($dados['id_estado_search']) {
			$select->where('ce.id_estado = ?', $dados['id_estado_search']);
		}

		return $this->fetchAll($select);
	}


	public function checkGrupoTaxas($produto, $estado, $municipio) {
		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array('a' => 'comercializacao.taxas_agrupamento'));
		$select->join(array('e' => 'comercializacao.taxas_agrupamento_estados'), 'a.id = e.id_taxa_agrupamento');
		$select->where('id_produto = ?', $produto);
		$select->where('id_estado = ?', $estado);
		$countEstado = $this->fetchAll($select)->count();

		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array('a' => 'comercializacao.taxas_agrupamento'));
		$select->join(array('m' => 'comercializacao.taxas_agrupamento_municipios'), 'a.id = m.id_taxa_agrupamento');
		$select->where('id_produto = ?', $produto);
		$select->where('id_municipio = ?', $municipio);
		$countMunicipio = $this->fetchAll($select)->count();

		if ($countEstado || $countMunicipio) {
			return true;
		} else {
			return false;
		}
	}


	public function beforeDelete($id_taxa) {
		//exclui as taxas relacionadas
		$sql = "delete from comercializacao.taxas_relacionadas where id_taxa_relacionada in (select id from comercializacao.taxas_valores where id_taxa_agrupamento= $id_taxa)";
		try {
			$this->_db->query($sql);
		}catch (Exception $e) {}

		$sql = "delete from comercializacao.taxas_agrupamento_proponentes where id_taxa_agrupamento = $id_taxa ";
		try {
			$this->_db->query($sql);
		}catch (Exception $e) {}

		$sql = "delete from comercializacao.taxas_agrupamento_usuarios where id_taxa_agrupamento = $id_taxa ";
		try {
			$this->_db->query($sql);
		}catch (Exception $e) {}

		$sql = "delete from comercializacao.taxas_agrupamento_municipios where id_taxa_agrupamento = $id_taxa ";
		try {
			$this->_db->query($sql);
		}catch (Exception $e) {}

		$sql = "delete from comercializacao.taxas_agrupamento_estados where id_taxa_agrupamento = $id_taxa ";
		try {
			$this->_db->query($sql);
		}catch (Exception $e) {}

        $sql = "delete from comercializacao.taxas_agrupamento_orcamentos where id_taxa_agrupamento = $id_taxa ";
        try {
            $this->_db->query($sql);
        }catch (Exception $e) {}

        $sql = "delete from seguro.propostas_taxas_agrupamento where id_taxa_agrupamento = $id_taxa ";
        try {
            $this->_db->query($sql);
        }catch (Exception $e) {}

		$sql = "delete from comercializacao.taxas_agrupamento_car where id_taxa_agrupamento = $id_taxa ";
        try {
            $this->_db->query($sql);
        }catch (Exception $e) {}

        $sql = "update seguro.propostas set id_taxa_agrupamento = null where id_taxa_agrupamento = {$id_taxa}";
        try {
            $this->_db->query($sql);
        }catch (Exception $e) {}

		$sql = "delete from comercializacao.taxas_valores where id_taxa_agrupamento = $id_taxa";
		try {
			return $this->_db->query($sql);
		}catch (Exception $e) {
			return false;
		}
	}

	public function delete($id, $field='') {
		parent::delete($id, $field);

		$sql = "delete from comercializacao.taxas_agrupamento where id = $id";
		try {
			return $this->_db->query($sql);
		}catch (Exception $e) {
			return false;
		}

		return false;
	}

	public function deleteByProposta(int $idProposta)
	{
		return $this->_db->query("delete from comercializacao.taxas_agrupamento where id = $id");
	}

	public function getTaxaAgrupamento(int $idTaxaAgrupamento)
    {
        $row = $this->find($idTaxaAgrupamento)->current();

        return !empty($row) ? $row->toArray() : [];
    }

    public function salvar(array $dados)
    {
        $id = !empty($dados['id']) ? $dados['id'] : null;
        $id = empty($id) && !empty($dados['id_taxa_agrupamento']) ? $dados['id_taxa_agrupamento'] : (!empty($id) ? $id : null);

        $row = !empty($id) ? $this->getRow($id) : $this->createRow();
        $row = !empty($row) ? $row : $this->createRow();

        $row->id_produto = $dados['id_produto'];
        $row->ds_nome_agrupamento_taxas = $dados['ds_nome_agrupamento_taxas'];
        $row->tp_taxa_agrupamento = $dados['tp_taxa_agrupamento'];
        $row->vl_comissao = $dados['vl_comissao'];
        $row->fl_ativo = !empty($dados['fl_ativo']) ? 1 : 0;
        $row->id_secao = !empty($dados['id_secao']) && $dados['id_secao'] > 0 ? $dados['id_secao'] : null;
		$row->fl_del = !empty($dados['fl_del']) ? 1 : 0;
		
        $row->save();

        return $row;
    }
}
