<?php

class Comercializacao_Model_Taxas extends Agro_Db_Table_Abstract {
	protected $_schema = 'comercializacao';
	protected $_name = 'taxas_agrupamento';
	protected $_primary = 'id';

	public function save($values) {
		$Row = $this->getRow($values['id']);

		$Row->id_produto = $values['id_produto'];
		$Row->ds_nome_agrupamento_taxas = $values['ds_nome_agrupamento_taxas'];
		$Row->tp_taxa_agrupamento = $values['tp_taxa_agrupamento'];

		return $Row->save();
	}

	public function getData($where) {
		$comercializacao = new Zend_Session_Namespace('comercializacao');

		$select = "
		SELECT
			t.id,
			t.vl_franquia,
			t.vl_taxa,
			t.vl_taxa_renovacao,
			t.vl_taxa_reduzida
			(
				select distinct
					ds_nome_cobertura || ' - ' || vl_franquia || '%' as rel
				from
					comercializacao.taxas_relacionadas tr inner join
					comercializacao.taxas t2 on t2.id = tr.id_taxa_relacionada inner join
					produto.coberturas c on c.id = t2.id_cobertura
				where
					tr.id_taxa = t.id
				limit 1
			) as relacionado_com,
			c.ds_nome_cobertura
		FROM
			comercializacao.taxas AS t INNER JOIN
			produto.coberturas AS c ON t.id_cobertura = c.id
		WHERE
			(id_comercializacao = '{$comercializacao->id}')
		ORDER BY
			id ASC";

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

	public function getUsuariosRelacionados($idTaxa) {
		$select = $this->select()->distinct(true)->setIntegrityCheck(false);
		$select->from(array('ta'=>'comercializacao.taxas_agrupamento'), null);
		$select->join(array('tu'=>'comercializacao.taxas_agrupamento_usuarios'), 'ta.id = tu.id_taxa_agrupamento', array('id_usuario'));
		$select->where('id = ?', $idTaxa);

		$ret = array();
		$Rs = $this->fetchAll($select);
		if ($Rs->count()) {
			foreach ($Rs as $Row) {
				$ret[] = $Row->id_usuario;
			}
		}
		return $ret;
	}

	public function getTaxaRelacionada($relacionada, $cobertura) {
		$select = $this->select()->distinct(true)->setIntegrityCheck(false);
		$select->from(array('tr'=>'comercializacao.taxas_relacionadas'), null);
		$select->join(array('tv'=>'comercializacao.taxas_valores'), 'tr.id_taxa = tv.id', array('vl_taxa', 'vl_franquia', 'vl_taxa_renovacao', 'vl_taxa_inadimplente'));
		$select->where('id_taxa_relacionada = ?', $relacionada);
		$select->where('id_cobertura = ?', $cobertura);
		$select->where('tv.fl_ativo = true');

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

	public function getTaxaNaoRelacionada($franquia, $renovada) {
		$select = $this->select()->distinct(true)->setIntegrityCheck(false);
		$select->from(array('tv'=>'comercializacao.taxas_valores'), array('vl_taxa', 'vl_franquia', 'vl_taxa_renovacao', 'vl_taxa_inadimplente'));
		$select->where('id = ?', $franquia);
		$select->where('tv.fl_ativo = true');

		if ($renovada) {
			$select->where("tv.fl_franquia_disponivel in ('S', 'R')");
		} else {
			$select->where("tv.fl_franquia_disponivel in ('S', 'N')");
		}
		return $this->fetchRow($select);
	}

	public function getTaxasProposta($idAgrupamento, $producaoGarantida, $renovada, array $campos = [])
    {
        $ordem = ($producaoGarantida ? 'vl_franquia desc' : 'vl_franquia asc');

        if (empty($campos)) {
            $campos = [
                'tv.id', 'tv.vl_taxa', 'tv.vl_franquia', 'tv.vl_taxa_renovacao', 'tv.vl_taxa_inadimplente'
                , 'tv.id_cobertura', 'tv.vl_percentual_subvencao_federal', 'pc.ds_nome_cobertura'
            ];
        }

        $select = $this->select()->distinct(true)->setIntegrityCheck(false)
            ->from(array('tv' => 'comercializacao.taxas_valores'), $campos)
            ->join(['pc' => 'produto.coberturas'], 'pc.id = tv.id_cobertura', false)
            ->join(['cta' => 'comercializacao.taxas_agrupamento'], 'cta.id = tv.id_taxa_agrupamento', false)
            ->join(
                ['ppc' => 'produto.produtos_coberturas'],
                'ppc.id_produto = cta.id_produto AND ppc.id_cobertura = pc.id',
                false
            )
            ->where('tv.id_taxa_agrupamento = ?', $idAgrupamento)
            ->where("tv.fl_ativo = true")
            ->order($ordem);

        if ($renovada) {
            $select->where("tv.fl_franquia_disponivel in ('S', 'R')");
        } else {
            $select->where("tv.fl_franquia_disponivel in ('S', 'N')");
        }

        $rs = $this->fetchAll($select);

        if ($rs->count()) {
            return $rs->toArray();
        }

        return false;
    }

	public function getTaxasUsuario($idUsuario, $produto) {
		$select = $this->select()->distinct(true)->setIntegrityCheck(false);
		$select->from(array('tv'=>'comercializacao.taxas_valores'), array('id', 'vl_taxa', 'vl_franquia', 'vl_taxa_renovacao'));
		$select->join(array('pc'=>'produto.produtos_coberturas'), 'pc.id_cobertura = tv.id_cobertura', false);
		$select->join(array('tau'=>'comercializacao.taxas_agrupamento_usuarios'), 'tv.id_taxa_agrupamento = tau.id_taxa_agrupamento', false);
		// $select->where('tv.id_taxa_agrupamento = ?', $franquia);
		$select->where('pc.id_produto = ?', $produto);
		$select->where('tau.id_usuario = ?', $idUsuario);

		$Rs = $this->fetchAll($select);

		return $this->fetchAll($select);

	}

	/*
	public function getTaxasProponente($cpf_cnpj, $franquia, $principal, $producaoGarantida, $produto) {
		$select = $this->select()->distinct(true)->setIntegrityCheck(false);
		$select->from(array('tv'=>'comercializacao.taxas_valores'), array('id', 'vl_taxa', 'vl_franquia', 'vl_taxa_renovacao'));
		$select->join(array('pc'=>'produto.produtos_coberturas'), 'pc.id_cobertura = tv.id_cobertura', false);
		$select->join(array('tap'=>'comercializacao.taxas_agrupamento_proponentes'), 'tv.id_taxa_agrupamento = tap.id_taxa_agrupamento', false);
		$select->join(array('p'=>'seguro.proponentes'), 'p.id = tap.id_proponente', false);
		$select->where('pc.fl_cobertura_principal = ?', ($principal ? 'true' : 'false'));
		$select->where('tv.id_taxa_agrupamento = ?', $franquia);
		$select->where('pc.id_produto = ?', $produto);
		$select->where("p.cpf_cnpj = ?", trim($cpf_cnpj));

		if ($producaoGarantida) {
			$select->order('tv.vl_franquia desc');
		} else {
			$select->order('tv.vl_franquia asc');
		}

		$Rs = $this->fetchAll($select);
		if ($Rs->count()) {
			return $Rs;
		} else {
			return false;
		}
	}

	public function getTaxasUsuario($idUsuario, $franquia, $principal, $producaoGarantida, $produto) {
		$select = $this->select()->distinct(true)->setIntegrityCheck(false);
		$select->from(array('tv'=>'comercializacao.taxas_valores'), array('id', 'vl_taxa', 'vl_franquia', 'vl_taxa_renovacao'));
		$select->join(array('pc'=>'produto.produtos_coberturas'), 'pc.id_cobertura = tv.id_cobertura', false);
		$select->join(array('tau'=>'comercializacao.taxas_agrupamento_usuarios'), 'tv.id_taxa_agrupamento = tau.id_taxa_agrupamento', false);
		$select->where('pc.fl_cobertura_principal = ?', ($principal ? 'true' : 'false'));
		$select->where('tv.id_taxa_agrupamento = ?', $franquia);
		$select->where('pc.id_produto = ?', $produto);
		$select->where('tau.id_usuario = ?', $idUsuario);

		if ($producaoGarantida) {
			$select->order('tv.vl_franquia desc');
		} else {
			$select->order('tv.vl_franquia asc');
		}

		$Rs = $this->fetchAll($select);
		if ($Rs->count()) {
			return $Rs;
		} else {
			return false;
		}
	}

	public function getTaxasMunicipio($idMunicipio, $franquia, $principal, $producaoGarantida, $produto) {
		$select = $this->select()->distinct(true)->setIntegrityCheck(false);
		$select->from(array('tv'=>'comercializacao.taxas_valores'), array('id', 'vl_taxa', 'vl_franquia', 'vl_taxa_renovacao'));
		$select->join(array('pc'=>'produto.produtos_coberturas'), 'pc.id_cobertura = tv.id_cobertura', false);
		$select->join(array('tam'=>'comercializacao.taxas_agrupamento_municipios'), 'tv.id_taxa_agrupamento = tam.id_taxa_agrupamento', false);
		$select->where('pc.fl_cobertura_principal = ?', ($principal ? 'true' : 'false'));
		$select->where('tv.id_taxa_agrupamento = ?', $franquia);
		$select->where('tam.id_municipio = ?', $idMunicipio);
		$select->where('pc.id_produto = ?', $produto);

		if ($producaoGarantida) {
			$select->order('tv.vl_franquia desc');
		} else {
			$select->order('tv.vl_franquia asc');
		}

		$Rs = $this->fetchAll($select);
		if ($Rs->count()) {
			return $Rs;
		} else {
			return false;
		}
	}

	public function getTaxasEstado($idEstado, $franquia, $principal, $producaoGarantida, $produto) {
		$select = $this->select()->distinct(true)->setIntegrityCheck(false);
		$select->from(array('tv'=>'comercializacao.taxas_valores'), array('id', 'vl_taxa', 'vl_franquia', 'vl_taxa_renovacao'));
		$select->join(array('pc'=>'produto.produtos_coberturas'), 'pc.id_cobertura = tv.id_cobertura', false);
		$select->join(array('tae'=>'comercializacao.taxas_agrupamento_estados'), 'tv.id_taxa_agrupamento = tae.id_taxa_agrupamento', false);
		$select->where('pc.fl_cobertura_principal = ?', ($principal ? 'true' : 'false'));
		$select->where('tv.id_taxa_agrupamento = ?', $franquia);
		$select->where('tae.id_estado = ?', $idEstado);
		$select->where('pc.id_produto = ?', $produto);

		if ($producaoGarantida) {
			$select->order('tv.vl_franquia desc');
		} else {
			$select->order('tv.vl_franquia asc');
		}

		$Rs = $this->fetchAll($select);
		if ($Rs->count()) {
			return $Rs;
		} else {
			return false;
		}
	}

	public function getTaxasProduto($produto, $franquia, $principal, $producaoGarantida) {
		$select = $this->select()->distinct(true)->setIntegrityCheck(false);
		$select->from(array('tv'=>'comercializacao.taxas_valores'), array('id', 'vl_taxa', 'vl_franquia', 'vl_taxa_renovacao'));
		$select->join(array('pc'=>'produto.produtos_coberturas'), 'pc.id_cobertura = tv.id_cobertura', false);
		$select->where('pc.fl_cobertura_principal = ?', ($principal ? 'true' : 'false'));
		$select->where('tv.id_taxa_agrupamento = ?', $franquia);
		$select->where('pc.id_produto = ?', $produto);

		if ($producaoGarantida) {
			$select->order('tv.vl_franquia desc');
		} else {
			$select->order('tv.vl_franquia asc');
		}

		$Rs = $this->fetchAll($select);
		if ($Rs->count()) {
			return $Rs;
		} else {
			return false;
		}
	}
	*/

	public function getTipoAgrupamento($dados) {
		if (isset($dados[0]) && !isset($dados[1])) {
			return 'U';
		} elseif (!isset($dados[0]) && isset($dados[1])) {
			return 'P';
		} elseif (isset($dados[8]) && isset($dados[9])) {
			return 'M';
		} elseif (isset($dados[8]) && !isset($dados[9])) {
			return 'E';
		}
	}

	public function beforeDelete($id) {
		$Rs = $this->fetchAll("id_importacao = $id");

		if ($Rs->count()) {
			foreach ($Rs as $Row) {
				$Model = new Comercializacao_Model_TaxasAgrupamentoMunicipios();
				$Model->delete($Row->id, 'id_taxa_agrupamento');

				$Model = new Comercializacao_Model_TaxasAgrupamentoEstados();
				$Model->delete($Row->id, 'id_taxa_agrupamento');

				$Model = new Comercializacao_Model_TaxasAgrupamentoUsuarios();
				$Model->delete($Row->id, 'id_taxa_agrupamento');

				$Model = new Comercializacao_Model_TaxasAgrupamentoProponente();
				$Model->delete($Row->id, 'id_taxa_agrupamento');

				$Model = new Comercializacao_Model_TaxasValores();
				$Model->delete($Row->id, 'id_taxa_agrupamento');
			}
		}
	}

	public function getTaxasCoberturas($idAgrupamento, $franquia=false, $cobertura=false) {
		$Select = $this->select()->distinct(true)->setIntegrityCheck(false);
		$Select->from(array('ta' => 'comercializacao.taxas_agrupamento'));
		$Select->join(array('tv' => 'comercializacao.taxas_valores'), 'ta.id = tv.id_taxa_agrupamento');
		$Select->where('ta.id = ?', $idAgrupamento);
		if($franquia){
		    $Select->where('tv.vl_franquia = ?', $franquia);
		}
		if($cobertura){
		    $Select->where('tv.id_cobertura = ?', $cobertura);
		}

		$Rs = $this->fetchAll($Select);
		$return = array();
		if ($Rs->count()) {
			foreach ($Rs as $Row) {
				$return[] = $Row->toArray();
			}
		}

		return $return;
	}
}