✏️ 正在编辑: Contrato.php
路径:
/srv/systems_dir/yuppiecred/application/models/Contrato.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php use Service_Exception_ImportacaoContratoException as ImportacaoContratoException; class Model_Contrato { /** @var string */ public const EMPTY_FILTER = 'Você deve informar pelo menos uma opção de busca.'; private $_id; private $_empresaId; private $_clienteId; private $_tabelaId; private $_bancoId; private $_convenioId; private $_corretorId; private $_numeroContrato; private $_tipo; private $_dataEmissao; private $_prazo; private $_produto; private $_tipoProduto; private $_formaLiberacao; private $_statusProposta; private $_digitador; private $_dataRecebimentoComissao; private $_dataRecebimentoBonus; private $_numeroBeneficio; private $_dataLiberacao; private $_taxaContrato; private $_valorTac; private $_numeroPrestacoes; private $_valorLiberado; private $_valorBeneficio; private $_valorSeguro; private $_valorFinanciado; private $_valorIof; private $_valorPrestacao; private $_dataPrimeiroVencimento; private $_valorLiquido; private $_valorBruto; private $_comissaoEmpresa; private $_comissaoCorretor; private $_comissaoGerente; private $_bancoBeneficiado; private $_agenciaBeneficiado; private $_contaBeneficiado; private $_obs; private $_descricaoPendencia; private $_dataQuitacao; private $_matricula; private $_subestabelecidoId; private $_bonusCorretor; private $_diferimentoCorretor; private $_especie; private $_numeroAde; private $_estornado; private $_dataTedDevolvida; private $_dataOpSacada; private $_dataOpDisponivel; private $_verificarContratos; private $_cobrancaBanco; private $_saldoBanco; private $_baseComissaoValor; private $_baseComissaoBonus; private $_baseComissaoAdiantamento; private $_baseComissaoDiferimento; private $_baseComissaoEmpresaValor; private $_baseComissaoEmpresaBonus; private $_baseComissaoEmpresaAdiantamento; private $_valorFixoEmpresa; private $_valorFixoCorretor; private $_rco; private $_outrasDespesas; private $_codigoBarrasAde; private $_midiaOrigemId; private $_cobrancaPromotora; private $_adiantamentoComissaoEmpresa; private $_bonusEmpresa; private $_taxaPortabilidade; private $_anteriorSaldoDevedor; private $_anteriorPrazo; private $_anteriorValorParcela; private $_anteriorParcelasRestantes; private $_usuarioPendencia; private $_tipoFormalizacao; private $_anteriorBanco; private $_anteriorNumero; private $_contratoBanco; private $_dataAgendamentoProposta; private $_nomeArquivo; private $_idadeCliente; private $_srcc; private $_beneficiadoRecebeCartao; private $_bancoCartao; private $_agenciaCartao; private $_captadorId; private $_tipoPix; private $_chavePix; private static $bancos = [ 1 => 'BMG (SALDO PAGO CONSIG)', // 99 => 'BMG (SALDO)', 2 => 'BRADESCO PROMOTORA', 3 => 'BV (PAGOS)', 4 => 'DAYCOVAL', 5 => 'MERCANTIL (PAGOS)', 6 => 'BMG (EXTRATOR DE DADOS)', 7 => 'BMG (COMISSÃO CARTAO) - DIRETO', 8 => 'BANRISUL', 9 => 'ITAÚ (COMISSIONAMENTO)', 10 => 'ITAÚ (EXTRATOR DE DADOS)', 11 => 'CIFRA (COMISSIONAMENTO)', 12 => 'BCV (COMISSIONAMENTO)', 13 => 'BMG (COMISSÃO CONSIGNADO)', 14 => 'MERCANTIL (GERAL)', 15 => 'BMG (ABERTURA DE CONTA)', 16 => 'PAN (LIB)', 17 => 'BCV (BONUS)', 18 => 'BCV (EXTRATOR DE DADOS)', 19 => 'CIFRA (BONUS)', 20 => 'CIFRA (EXTRATOR DE DADOS)', 21 => 'ITAÚ (BONUS)', 22 => 'DAYCOVAL (CARTÃO)', 24 => 'PAN (Relatório de Comissão)', 25 => 'BV', 26 => 'BGN', 28 => 'PAN (CARTÃO COMISSIONAMENTO)', 29 => 'BRADESCO PROMOTORA (BP NET)', 30 => 'BONSUCESSO (Cliente)', 31 => 'BONSUCESSO (DadosProposta)', 32 => 'BONSUCESSO (SituacaoProposta)', 33 => 'BONSUCESSO (CreditoCliente)', 34 => 'CETELEM', 35 => 'SAFRA', 36 => 'BEVI', 37 => 'BANCO GENÉRICO', 38 => 'SABEMI', 39 => 'MERCANTIL (TED CANCELADA)', 40 => 'MERCANTIL (OP CANCELADA)', 41 => 'BGN (COMISSIONAMENTO)', 42 => 'BGN (PRODUCAO)', 43 => 'ITAÚ (ATUALIZAÇÃO DE STATUS)', 44 => 'BONSUCESSO (StatusContrato)', 45 => 'BMG (SALDO PAGO CARD)', 46 => 'BRADESCO PROMOTORA (FTP)', 47 => 'PAN (CARTÃO EXTRATOR CSV)', 48 => 'ITAÚ (EXTRATOR QLIKVIEW)', 49 => 'C6 Bank', 50 => 'BANCO DO BRASIL (Empréstimo diário)', 51 => 'BANCO DO BRASIL (Abertura Conta diário)', 52 => 'BMG (SEGURO)', 53 => 'BMG (COMISSÃO FGTS)', 54 => 'ITAÚ (IC 360)', 55 => 'DIGIO', 74 => 'BMG (COMISSÃO CARTAO) - SUB', -1 => 'ICRED', -2 => 'NBC BANK', -3 => 'AMIGOZ' ]; private static $bancosRecebimento = [ 1 => 'BRADESCO PROMOTORA', 2 => 'BV', 3 => 'MERCANTIL', 4 => 'PAN', 5 => 'BONSUCESSO', 6 => 'ITAU', 7 => 'BONSUCESSO (DIÁRIO)', 8 => 'ITAU KGIRO', 9 => 'CETELEM', 10 => 'SAFRA', 11 => 'BANCO GENERICO', 12 => 'C6 Bank', 13 => 'BMG (Diferido)', 14 => 'BMG (Acerto Card)', 15 => 'FACTA', 16 => 'C6 Bank (Não comissionados)', 17 => 'ITAU IC 360', 18 => 'FACTA (NOVO)', 51 => 'BANCO DO BRASIL (Abertura Conta diário)', -1 => 'ICRED', -2 => 'NBC BANK', -3 => 'C6 Bank (Débito SRCC)', -4 => 'BANCO DO BRASIL (Á vista)', -5 => 'BANCO DO BRASIL (PRT)', -6 => 'BANCO DO BRASIL (Seguro)', -7 => 'BMG (COMISSÃO ATO & DIFERIDO CONSOLIDADO)', -8 => 'BMG (SEGURO ATO CONSOLIDADO)' ]; function getAdiantamentoComissaoEmpresa() { return $this->_adiantamentoComissaoEmpresa; } function setAdiantamentoComissaoEmpresa($_adiantamentoComissaoEmpresa) { $this->_adiantamentoComissaoEmpresa = $_adiantamentoComissaoEmpresa; } function getBonusEmpresa() { return $this->_bonusEmpresa; } function setBonusEmpresa($_bonusEmpresa) { $this->_bonusEmpresa = $_bonusEmpresa; } function getTaxaPortabilidade() { return $this->_taxaPortabilidade; } function setTaxaPortabilidade($_taxaPortabilidade) { $this->_taxaPortabilidade = $_taxaPortabilidade; } private static $bancosAdiantamentoComissao = array( 'BMG' => 'BMG', 'PAN' => 'PAN', ); public static function getBancos() { //pega a lista de bancos criados $bancos = (new Model_Banco())->listar(['ativo' => 1], 'id'); foreach ($bancos as $banco) { $neddle = $banco['nome']; if (array_filter(array_map(function($haystack) use($neddle) { if (stristr($haystack, $neddle) !== false) { return $haystack; } }, self::$bancos, [$banco['nome']]))) { continue; } self::$bancos[] = $banco['nome']; } return self::$bancos; } public static function getBancosRecebimento() { //pega a lista de bancos criados $bancos = (new Model_Banco())->listar(['ativo' => 1], 'id'); foreach ($bancos as $banco) { $neddle = String_Refatorar::removerAcentuacao($banco['nome']); if (array_filter(array_map(function($haystack) use($neddle) { if (stristr($haystack, $neddle) !== false) { return $haystack; } }, self::$bancosRecebimento, [$banco['nome']]))) { continue; } self::$bancosRecebimento[] = $banco['nome']; } return self::$bancosRecebimento; } public static function getBancosAdiantamentoComissao() { return self::$bancosAdiantamentoComissao; } public function getId() { return $this->_id; } public function setId($id) { $this->_id = $id; } function getMidiaOrigemId() { return $this->_midiaOrigemId; } function setMidiaOrigemId($midiaOrigemId) { $this->_midiaOrigemId = $midiaOrigemId; } function getEsteiraBanco() { return $this->_esteiraBanco; } function setEsteiraBanco($esteiraBanco) { $this->_esteiraBanco = $esteiraBanco; } public function getEmpresaId() { return $this->_empresaId; } public function setEmpresaId($empresaId) { $this->_empresaId = $empresaId; } public function getTipoFormalizacao() { return $this->_tipoFormalizacao; } public function setTipoFormalizacao($tipoFormalizacao) { $this->_tipoFormalizacao = $tipoFormalizacao; } public function getClienteId() { return $this->_clienteId; } public function setClienteId($clienteId) { $this->_clienteId = $clienteId; } public function getTabelaId() { return $this->_tabelaId; } public function setTabelaId($tabelaId) { $this->_tabelaId = $tabelaId; } public function getBancoId() { return $this->_bancoId; } public function setBancoId($bancoId) { $this->_bancoId = $bancoId; } public function getConvenioId() { return $this->_convenioId; } public function setConvenioId($convenioId) { $this->_convenioId = $convenioId; } public function getCorretorId() { return $this->_corretorId; } public function setCorretorId($corretorId) { $this->_corretorId = $corretorId; } public function getNumeroContrato() { return $this->_numeroContrato; } public function setNumeroContrato($numeroContrato) { $this->_numeroContrato = $numeroContrato; } public function getTipo() { return $this->_tipo; } public function setTipo($tipo) { $this->_tipo = $tipo; } public function getDataEmissao() { return $this->_dataEmissao; } public function setDataEmissao($dataEmissao) { if( !empty($dataEmissao) ){ try { $data = new Zend_Date($dataEmissao, Zend_Date::DATES, 'pt'); $dataEmissao = $data->toString('yyyy-MM-dd'); } catch ( Zend_Date_Exception $e ) { echo $e->getMessage(); $dataEmissao = null; } } else { $dataEmissao = null; } $this->_dataEmissao = $dataEmissao; } public function getPrazo() { return $this->_prazo; } public function setPrazo($prazo) { $this->_prazo = $prazo; } public function getProduto() { return $this->_produto; } public function setProduto($produto) { $this->_produto = $produto; } function getTipoProduto() { return $this->_tipoProduto; } function setTipoProduto($tipoProduto) { $this->_tipoProduto = $tipoProduto; } public function getFormaLiberacao() { return $this->_formaLiberacao; } public function setFormaLiberacao($formaLiberacao) { $this->_formaLiberacao = $formaLiberacao; } public function getStatusProposta() { return $this->_statusProposta; } public function setStatusProposta($statusProposta) { $this->_statusProposta = $statusProposta; } public function getDigitador() { return $this->_digitador; } public function setDigitador($digitador) { $this->_digitador = $digitador; } public function getDataRecebimentoComissao() { return $this->_dataRecebimentoComissao; } public function setDataRecebimentoComissao($dataRecebimentoComissao) { if( !empty($dataRecebimentoComissao) ){ try { $data = new Zend_Date($dataRecebimentoComissao, Zend_Date::DATES, 'pt'); $dataRecebimentoComissao = $data->toString('yyyy-MM-dd'); } catch ( Zend_Date_Exception $e ) { echo $e->getMessage(); $dataRecebimentoComissao = null; } } else { $dataRecebimentoComissao = null; } $this->_dataRecebimentoComissao = $dataRecebimentoComissao; } public function getDataRecebimentoBonus() { return $this->_dataRecebimentoBonus; } public function setDataRecebimentoBonus($dataRecebimentoBonus) { if( !empty($dataRecebimentoBonus) ){ try { $data = new Zend_Date($dataRecebimentoBonus, Zend_Date::DATES, 'pt'); $dataRecebimentoBonus = $data->toString('yyyy-MM-dd'); } catch ( Zend_Date_Exception $e ) { echo $e->getMessage(); $dataRecebimentoBonus = null; } } else { $dataRecebimentoBonus = null; } $this->_dataRecebimentoBonus = $dataRecebimentoBonus; } public function getNumeroBeneficio() { return $this->_numeroBeneficio; } public function setNumeroBeneficio($numeroBeneficio) { $this->_numeroBeneficio = $numeroBeneficio; } public function getDataLiberacao() { return $this->_dataLiberacao; } public function setDataLiberacao($dataLiberacao) { if( !empty($dataLiberacao) ){ try { $data = new Zend_Date($dataLiberacao, Zend_Date::DATES, 'pt'); $dataLiberacao = $data->toString('yyyy-MM-dd'); } catch ( Zend_Date_Exception $e ) { echo $e->getMessage(); $dataLiberacao = null; } } else { $dataLiberacao = null; } $this->_dataLiberacao = $dataLiberacao; } public function getTaxaFinanciamento() { return $this->_taxaContrato; } public function setTaxaFinanciamento($taxaFinanciamento) { $this->_taxaContrato = $taxaFinanciamento; } public function getValorTac() { return $this->_valorTac; } public function setValorTac($valorTac) { $this->_valorTac = $valorTac; } public function getNumeroPrestacoes() { return $this->_numeroPrestacoes; } public function setNumeroPrestacoes($numeroPrestacoes) { $this->_numeroPrestacoes = $numeroPrestacoes; } public function getValorLiberado() { return $this->_valorLiberado; } public function setValorLiberado($valorLiberado) { $this->_valorLiberado = $valorLiberado; } public function getValorBeneficio() { return $this->_valorBeneficio; } public function setValorBeneficio($valorBeneficio) { $this->_valorBeneficio = $valorBeneficio; } public function getValorSeguro() { return $this->_valorSeguro; } public function setValorSeguro($valorSeguro) { $this->_valorSeguro = $valorSeguro; } public function getValorFinanciado() { return $this->_valorFinanciado; } public function setValorFinanciado($valorFinanciado) { $this->_valorFinanciado = $valorFinanciado; } public function getValorIof() { return $this->_valorIof; } public function setValorIof($valorIof) { $this->_valorIof = $valorIof; } public function getValorPrestacao() { return $this->_valorPrestacao; } public function setValorPrestacao($valorPrestacao) { $this->_valorPrestacao = $valorPrestacao; } public function getDataPrimeiroVencimento() { return $this->_dataPrimeiroVencimento; } public function setDataPrimeiroVencimento($dataPrimeiroVencimento) { if( !empty($dataPrimeiroVencimento) ){ try { $data = new Zend_Date($dataPrimeiroVencimento, Zend_Date::DATES, 'pt'); $dataPrimeiroVencimento = $data->toString('yyyy-MM-dd'); } catch ( Zend_Date_Exception $e ) { echo $e->getMessage(); $dataPrimeiroVencimento = null; } } else { $dataPrimeiroVencimento = null; } $this->_dataPrimeiroVencimento = $dataPrimeiroVencimento; } public function getValorLiquido() { return $this->_valorLiquido; } public function setValorLiquido($valorLiquido) { $this->_valorLiquido = $valorLiquido; } public function getValorBruto() { return $this->_valorBruto; } public function setValorBruto($valorBruto) { $this->_valorBruto = $valorBruto; } public function getComissaoEmpresa() { return $this->_comissaoEmpresa; } public function setComissaoEmpresa($comissaoEmpresa) { $this->_comissaoEmpresa = $comissaoEmpresa; } public function getComissaoCorretor() { return $this->_comissaoCorretor; } public function setComissaoCorretor($comissaoCorretor) { $this->_comissaoCorretor = $comissaoCorretor; } public function getComissaoGerente() { return $this->_comissaoGerente; } public function setComissaoGerente($comissaoGerente) { $this->_comissaoGerente = $comissaoGerente; } public function getBancoBeneficiado() { return $this->_bancoBeneficiado; } public function setBancoBeneficiado($bancoBeneficiado) { $this->_bancoBeneficiado = $bancoBeneficiado; } public function getAgenciaBeneficiado() { return $this->_agenciaBeneficiado; } public function setAgenciaBeneficiado($agenciaBeneficiado) { $this->_agenciaBeneficiado = $agenciaBeneficiado; } public function getContaBeneficiado() { return $this->_contaBeneficiado; } public function setContaBeneficiado($contaBeneficiado) { $this->_contaBeneficiado = $contaBeneficiado; } public function getObs() { return $this->_obs; } public function setObs($obs) { $this->_obs = $obs; } public function getDescricaoPendencia() { return $this->_descricaoPendencia; } public function setDescricaoPendencia($descricaoPendencia) { $this->_descricaoPendencia = $descricaoPendencia; } public function getDataQuitacao() { return $this->_dataQuitacao; } public function setDataQuitacao($dataQuitacao) { if( !empty($dataQuitacao) ){ try { $data = new Zend_Date($dataQuitacao, Zend_Date::DATES, 'pt'); $dataQuitacao = $data->toString('yyyy-MM-dd'); } catch ( Zend_Date_Exception $e ) { echo $e->getMessage(); $dataQuitacao = null; } } else { $dataQuitacao = null; } $this->_dataQuitacao = $dataQuitacao; } public function getMatricula() { return $this->_matricula; } public function setMatricula($matricula) { $this->_matricula = $matricula; } public function getSubestabelecidoId() { return $this->_subestabelecidoId; } public function setSubestabelecidoId($subestabelecidoId) { $this->_subestabelecidoId = $subestabelecidoId; } public function getBonusCorretor() { return $this->_bonusCorretor; } public function setBonusCorretor($bonusCorretor) { $this->_bonusCorretor = $bonusCorretor; } public function getDiferimentoCorretor() { return $this->_diferimentoCorretor; } public function setDiferimentoCorretor($diferimentoCorretor) { $this->_diferimentoCorretor = $diferimentoCorretor; } public function getEspecie() { return $this->_especie; } public function setEspecie($especie) { $this->_especie = $especie; } public function getNumeroAde() { return $this->_numeroAde; } public function setNumeroAde($numeroAde) { $this->_numeroAde = $numeroAde; } public function getEstornado() { return $this->_estornado; } public function setEstornado($estornado) { $this->_estornado = $estornado; } function getDataTedDevolvida() { return $this->_dataTedDevolvida; } function getDataOpSacada() { return $this->_dataOpSacada; } public function getCobrancaBanco() { return $this->_cobrancaBanco; } public function setCobrancaBanco($cobrancaBanco) { $this->_cobrancaBanco = $cobrancaBanco; } public function getCobrancaPromotora() { return $this->_cobrancaPromotora; } public function setCobrancaPromotora($cobrancaPromotora) { $this->_cobrancaPromotora = $cobrancaPromotora; } function setDataTedDevolvida($dataTedDevolvida) { if( !empty($dataTedDevolvida) ){ try { $data = new Zend_Date($dataTedDevolvida, Zend_Date::DATES, 'pt'); $dataTedDevolvida = $data->toString('yyyy-MM-dd'); } catch ( Zend_Date_Exception $e ) { echo $e->getMessage(); $dataTedDevolvida = null; } } else { $dataTedDevolvida = null; } $this->_dataTedDevolvida = $dataTedDevolvida; } function setDataOpSacada($dataOpSacada) { if( !empty($dataOpSacada) ){ try { $data = new Zend_Date($dataOpSacada, Zend_Date::DATES, 'pt'); $dataOpSacada = $data->toString('yyyy-MM-dd'); } catch ( Zend_Date_Exception $e ) { echo $e->getMessage(); $dataOpSacada = null; } } else { $dataOpSacada = null; } $this->_dataOpSacada = $dataOpSacada; } public function getDataOpDisponivel() { return $this->_dataOpDisponivel; } public function setDataOpDisponivel($dataOpDisponivel) { if( !empty($dataOpDisponivel) ){ try { $data = new Zend_Date($dataOpDisponivel, Zend_Date::DATES, 'pt'); $dataOpDisponivel = $data->toString('yyyy-MM-dd'); } catch ( Zend_Date_Exception $e ) { echo $e->getMessage(); $dataOpDisponivel = null; } } else { $dataOpDisponivel = null; } $this->_dataOpDisponivel = $dataOpDisponivel; } public function getVerificarContratos() { return $this->_verificarContratos; } public function setVerificarContratos($verificarContratos) { $this->_verificarContratos = $verificarContratos; } public function getSaldoBanco() { return $this->_saldoBanco; } public function setSaldoBanco($saldoBanco) { $this->_saldoBanco = $saldoBanco; } /** * @param string $categoriaDre * @return string */ public function getWhereCategorias(string $categoriaDre): string { $categoriaDbTable = new Model_DbTable_Categoria(); $categoria = new Model_Categoria(); $dadosCategorias = $categoriaDbTable->fetchAll("categoria_dre LIKE '{$categoriaDre}' AND (categoria_pai = 0 OR categoria_pai IS NULL)"); $whereImpostos = null; $subCategorias = []; $idsPaiFilhos = []; foreach ($dadosCategorias as $dadosCategoria) { $subCategorias += array_flip($categoria->getDescendentes($dadosCategoria->id)); $idsPaiFilhos += array_merge(array_flip([$dadosCategoria->id => $dadosCategoria->nome]), $subCategorias); } $idsPaiFilhos = array_flip($idsPaiFilhos); if ($idsPaiFilhos) { $idsCategorias = array_keys($idsPaiFilhos); return 'lancamentos.categoria_id IN (' . implode(',', $idsCategorias) . ')'; } return "(categoria_dre LIKE '{$categoriaDre}' AND (categoria_pai = 0 OR categoria_pai IS NULL))"; } public function getBaseComissaoValor() { return $this->_baseComissaoValor; } public function setBaseComissaoValor($baseComissaoValor) { $this->_baseComissaoValor = $baseComissaoValor; } public function getBaseComissaoBonus() { return $this->_baseComissaoBonus; } public function setBaseComissaoBonus($baseComissaoBonus) { $this->_baseComissaoBonus = $baseComissaoBonus; } public function getBaseComissaoAdiantamento() { return $this->_baseComissaoAdiantamento; } public function setBaseComissaoAdiantamento($baseComissaoAdiantamento) { $this->_baseComissaoAdiantamento = $baseComissaoAdiantamento; } public function getBaseComissaoDiferimento() { return $this->_baseComissaoDiferimento; } public function setBaseComissaoDiferimento($baseComissaoDiferimento) { $this->_baseComissaoDiferimento = $baseComissaoDiferimento; } function getBaseComissaoEmpresaValor() { return $this->_baseComissaoEmpresaValor; } function setBaseComissaoEmpresaValor($baseComissaoEmpresaValor) { $this->_baseComissaoEmpresaValor = $baseComissaoEmpresaValor; } function getBaseComissaoEmpresaBonus() { return $this->_baseComissaoEmpresaBonus; } function setBaseComissaoEmpresaBonus($baseComissaoEmpresaBonus) { $this->_baseComissaoEmpresaBonus = $baseComissaoEmpresaBonus; } function getBaseComissaoEmpresaAdiantamento() { return $this->_baseComissaoEmpresaAdiantamento; } function setBaseComissaoEmpresaAdiantamento($baseComissaoEmpresaAdiantamento) { $this->_baseComissaoEmpresaAdiantamento = $baseComissaoEmpresaAdiantamento; } public function getValorFixoEmpresa() { return $this->_valorFixoEmpresa; } public function getValorFixoCorretor() { return $this->_valorFixoCorretor; } public function setValorFixoEmpresa($valorFixoEmpresa) { $this->_valorFixoEmpresa = $valorFixoEmpresa; } public function setValorFixoCorretor($valorFixoCorretor) { $this->_valorFixoCorretor = $valorFixoCorretor; } public function getRco() { return $this->_rco; } public function setRco($rco) { $this->_rco = $rco; } public function getCodigoBarrasAde() { return $this->_codigoBarrasAde; } public function setCodigoBarrasAde($codigoBarrasAde) { $this->_codigoBarrasAde = $codigoBarrasAde; } public function getOutrasDespesas() { return $this->_outrasDespesas; } public function setOutrasDespesas($outrasDespesas) { $this->_outrasDespesas = $outrasDespesas; } public function getAnteriorSaldoDevedor() { return $this->_anteriorSaldoDevedor; } public function setAnteriorSaldoDevedor($anteriorSaldoDevedor) { $this->_anteriorSaldoDevedor = $anteriorSaldoDevedor; } public function getAnteriorPrazo() { return $this->_anteriorPrazo; } public function setAnteriorPrazo($anteriorPrazo) { $this->_anteriorPrazo = $anteriorPrazo; } public function getAnteriorValorParcela() { return $this->_anteriorValorParcela; } public function setAnteriorValorParcela($anteriorValorParcela) { $this->_anteriorValorParcela = $anteriorValorParcela; } public function getAnteriorParcelasRestantes() { return $this->_anteriorParcelasRestantes; } public function setAnteriorParcelasRestantes($anteriorParcelasRestantes): void { $this->_anteriorParcelasRestantes = $anteriorParcelasRestantes; } public function getUsuarioPendencia() { return $this->_usuarioPendencia; } public function setUsuarioPendencia($usuarioPendencia): void { $this->_usuarioPendencia = $usuarioPendencia; } public function getAnteriorBanco() { return $this->_anteriorBanco; } public function setAnteriorBanco($anteriorBanco): void { $this->_anteriorBanco = $anteriorBanco; } public function getAnteriorNumero() { return $this->_anteriorNumero; } public function setAnteriorNumero($anteriorNumero): void { $this->_anteriorNumero = $anteriorNumero; } public function getContratoBanco() { return $this->_contratoBanco; } public function setContratoBanco($contratoBanco): void { $this->_contratoBanco = $contratoBanco; } public function getDataAgendamentoProposta() { return $this->_dataAgendamentoProposta; } public function setDataAgendamentoProposta($dataAgendamentoProposta) { if( !empty($dataAgendamentoProposta) ){ try { $data = new Zend_Date($dataAgendamentoProposta, Zend_Date::DATES, 'pt'); $dataAgendamentoProposta = $data->toString('yyyy-MM-dd'); } catch ( Zend_Date_Exception $e ) { echo $e->getMessage(); $dataAgendamentoProposta = null; } } else { $dataAgendamentoProposta = null; } $this->_dataAgendamentoProposta = $dataAgendamentoProposta; } public function getTaxaContrato() { return $this->_taxaContrato; } public function setTaxaContrato($taxaContrato) { $this->_taxaContrato = $taxaContrato; } public function getIdadeCliente() { return $this->_idadeCliente; } public function setIdadeCliente($idadeCliente): void { $this->_idadeCliente = $idadeCliente; } public function getBeneficiadoRecebeCartao() { return $this->_beneficiadoRecebeCartao; } public function setBeneficiadoRecebeCartao($beneficiadoRecebeCartao) { $recebeCartao = $beneficiadoRecebeCartao; if ($beneficiadoRecebeCartao == '') { $recebeCartao = null; } $this->_beneficiadoRecebeCartao = $recebeCartao; } public function getBancoCartao() { return $this->_bancoCartao; } public function setBancoCartao($bancoCartao) { $this->_bancoCartao = $bancoCartao; } public function getAgenciaCartao() { return $this->_agenciaCartao; } public function setAgenciaCartao($agenciaCartao) { $this->_agenciaCartao = $agenciaCartao; } public function getCaptadorId() { return $this->_captadorId; } public function setCaptadorId($captadorId) { $this->_captadorId = $captadorId; } public function getTipoPix() { return $this->_tipoPix; } public function setTipoPix($tipoPix) { $this->_tipoPix = $tipoPix; } public function getChavePix() { return $this->_chavePix; } public function setChavePix($chavePix) { $this->_chavePix = $chavePix; } public function __construct($options = null) { if( is_array($options) ){ $this->setOptions($options); } } public function setOptions(array $options) { $values = $options; if( isset($options['id']) && $options['id'] > 0 ){ $fetch = $this->exibir($options['id']); $values = array_merge($fetch->toArray(), $options); } $methods = get_class_methods($this); foreach ( $values as $key => $value ) { $explode = explode("_", $key); $methodName = ''; foreach ( $explode as $v ) { $methodName .= ucfirst($v); } $key = $methodName != '' ? $methodName : $key; $method = 'set' . ucfirst($key); if( in_array($method, $methods) ){ $this->$method($value); } } return $this; } public function _toArray() { $dbtable = new Model_DbTable_Contrato(); $info = $dbtable->info(); $methods = get_class_methods($this); $data = array(); foreach ( $info['cols'] as $key ) { if( $key != "bonus_recebido" ){ $col = $key; $explode = explode("_", $key); $methodName = ''; foreach ( $explode as $v ) { $methodName .= ucfirst($v); } $key = $methodName != '' ? $methodName : $key; $method = 'get' . ucfirst($key); if( in_array($method, $methods) ){ $data[$col] = $this->$method(); } } } return $data; } /** * Insere ou altera o registro passado por parâmetro * @param Model_Contrato $contrato */ public function salvar(Model_Contrato $contrato) { $dbtable = new Model_DbTable_Contrato(); $data = $contrato->_toArray(); $dbtable->getComissaoCorretorAndEmpresa($data); if ($contrato->getId() > 0) { $dadosContrato = $this->exibir($contrato->getId()); $banco = $dadosContrato->findParentRow('Model_DbTable_Banco'); if ($banco->bloquear_comissao_manual) { unset($data['comissao_corretor'], $data['bonus_corretor'], $data['valor_fixo_corretor']); unset($data['comissao_empresa'], $data['bonus_empresa'], $data['adiantamento_comissao_empresa']); } if ($dbtable->update($data, "id = " . $contrato->getId()) > 0) { return $contrato->getId(); } } else { return $dbtable->insert($data); } } /** * Exclui o registro passado por parâmetro * @param int $id * @return int The number of rows deleted */ public function excluir($id) { if( $id > 0 ){ $dbtable = new Model_DbTable_Contrato(); $result = $dbtable->delete("id = " . $id); if( $result ){ $dbRecebimento = new Model_DbTable_RecebimentoContrato(); $dbRecebimento->delete("contrato_id = " . $id); } return $result; } return null; } /** * Retorna uma lista * @param string $where * @param string $order * @param int $count * @param int $offset * @return array */ public function listar($where = null, $order = null, $count = null, $offset = null) { $dbtable = new Model_DbTable_Contrato(); return $dbtable->fetchAll($where, $order, $count, $offset); } public function listarProtocolos($protocoloId) { $dbtable = new Model_DbTable_ProtocoloContrato(); $select = $dbtable->getAdapter()->select() ->from(array( 'protocolo_contrato' => 'tb_protocolo_contrato' ), array( 'percentual' )) ->joinInner(array( 'contratos' => 'tb_contratos' ), 'protocolo_contrato.contrato_id = contratos.id', array( 'id', 'valor_liquido', 'prazo', 'comissao_corretor', 'bonus_corretor', 'numero_contrato', 'data_emissao', 'forma_liberacao', 'data_liberacao', 'produto', 'tipo', 'diferimento_corretor', 'taxa_portabilidade', 'estornado', 'cartao', 'base_comissao_valor', 'base_comissao_empresa_valor', 'tipo_formalizacao' )) ->joinInner(array( 'clientes' => 'tb_clientes' ), 'contratos.cliente_id = clientes.id', array( 'cliente' => 'nome', 'clienteCpf' => 'cpf' )) ->joinInner(array( 'tabelas' => 'tb_tabelas' ), 'contratos.tabela_id = tabelas.id', array( 'tabela' => 'nome' )) ->joinInner(array( 'convenios' => 'tb_convenios' ), 'contratos.convenio_id = convenios.id', array( 'convenio' => 'nome' )) ->joinInner(array( 'bancos' => 'tb_bancos' ), 'contratos.banco_id = bancos.id', array( 'banco' => 'nome' )) ->joinLeft(array( 'status_propostas' => 'tb_tipos' ), 'contratos.status_proposta = status_propostas.id', array( 'status_proposta' => 'status_propostas.descricao' )) ->where("protocolo_contrato.excluido<>1") ->where("contratos.excluido<>1") ->where('protocolo_contrato.protocolo_id = ' . $protocoloId); return $dbtable->getAdapter()->fetchAll($select); } public function listarProtocolosParaEmail($protocolos) { //emails adicionais $dbtable = new Model_DbTable_CorretorEmail(); $emailsAdicionais = $dbtable->getAdapter()->select()->from(array( 'emails_adicionais' => 'tb_corretores_emails' ), array("corretor_id", "emails" => new Zend_Db_Expr("GROUP_CONCAT(email_adicional)"))) ->group("corretor_id") ->where("excluido <> 1 AND protocolo = 1 and receber_email = 1"); $dbtableRecuperados = new Model_DbTable_ProtocoloValorRecuperado(); $recuperados = $dbtableRecuperados->getAdapter()->select() ->from(array("recuperado" => "tb_protocolo_valor_recuperado"), array("recuperado_protocolo_id" => "protocolo_id", "recuperado" => "SUM(recuperado.valor)")) ->where("recuperado.excluido <> 1") ->group(array("recuperado.protocolo_id")); $dbtable = new Model_DbTable_ProtocoloContrato(); $select = $dbtable->getAdapter()->select()->from(array('protocolos_pagamentos' => "tb_protocolo_pagamento"), array( "protocolo_id" => "id", "forma_pagamento_id", 'codigo_banco' => 'banco', 'agencia', 'conta', 'tipo_conta', 'comentario', 'data_baixa', 'data_pagamento', 'acrescimo', 'desconto')) ->joinLeft (array( 'bancos_febraban' => 'tb_bancos_febraban' ), 'protocolos_pagamentos.banco = bancos_febraban.codigo', array( 'taxa_transf', 'banco_corretor' => 'nome' )) ->joinInner(array( 'protocolo_contrato' => 'tb_protocolo_contrato' ), 'protocolos_pagamentos.id = protocolo_contrato.protocolo_id', array( 'valor_protocolo' => 'valor', 'percentual', 'situacao')) ->joinInner(array( 'contratos' => 'tb_contratos' ), 'protocolo_contrato.contrato_id = contratos.id', array('id', 'corretor_id', 'prazo', 'numero_contrato', 'data_emissao', 'forma_liberacao', 'data_liberacao', 'produto', 'tipo','taxa_portabilidade', 'base_comissao_valor', 'base_comissao_bonus', 'bonus_corretor','digitador', 'valor_fixo_corretor' )) ->joinLeft(array( 'recuperado' => $recuperados ), 'recuperado.recuperado_protocolo_id = protocolos_pagamentos.id', array( 'recuperado' )) ->joinInner(array( 'clientes' => 'tb_clientes' ), 'contratos.cliente_id = clientes.id', array( 'cliente' => 'nome', 'clienteCpf' => 'cpf' )) ->joinInner(array( 'tabelas' => 'tb_tabelas' ), 'contratos.tabela_id = tabelas.id', array( 'tabela' => 'nome' )) ->joinInner(array( 'convenios' => 'tb_convenios' ), 'contratos.convenio_id = convenios.id', array( 'convenio' => 'nome' )) ->joinInner(array( 'bancos' => 'tb_bancos' ), 'contratos.banco_id = bancos.id', array( 'banco' => 'nome' )) ->joinLeft (array( 'status_propostas' => 'tb_tipos' ), 'contratos.status_proposta = status_propostas.id', array( 'status_proposta' => 'descricao' )) ->joinInner(array( 'corretores' => 'tb_corretores' ), 'protocolos_pagamentos.corretor_id = corretores.id', array( "corretor" => "nome", "titular", "cpf_titular", "email_corretor" => "email")) //emails com copia ->joinLeft(array( 'rota' => 'tb_rotas' ), 'corretores.rota_id = rota.id AND rota.excluido <> 1', array()) ->joinLeft(array( 'gerentes_rotas' => 'tb_gerente_rota' ), 'rota.gerente_id = gerentes_rotas.id AND gerentes_rotas.receber_email_copia = 1 AND gerentes_rotas.email IS NOT NULL AND gerentes_rotas.excluido <> 1', array( 'supervisor' => 'nome', 'email_supervisor' => "gerentes_rotas.email")) ->joinLeft(array( 'gerentes' => 'tb_gerentes' ), 'gerentes_rotas.gerente_id = gerentes.id AND gerentes.receber_email_copia = 1 AND gerentes.email IS NOT NULL AND gerentes.excluido <> 1', array( 'gerente' => 'nome', 'email_gerente' => 'gerentes.email')) //emails adicionais ->joinLeft(array('emails_adicionais' => $emailsAdicionais), 'emails_adicionais.corretor_id = corretores.id', array("emails_adicionais" => "emails")) ->where("protocolo_contrato.excluido<>1") ->where("protocolos_pagamentos.excluido<>1") ->where("contratos.excluido<>1") ->where("corretores.excluido<>1") ->where("protocolos_pagamentos.id IN ({$protocolos})") ->order(array("protocolos_pagamentos.id", "corretores.id", "bancos.nome")); return $dbtable->getAdapter()->fetchAll($select); } public static function ocultarSeCartao($tipo){ $tipos = array("ATIVAÇÃO", "ATIVACAO", "PLASTICO", "PLÁSTICO"); return in_array($tipo, $tipos); } /** * Retorna um fetchRow do item passado por parâmetro * @param int $id * @return Zend_Db_Table_Row_Abstract | null */ public function exibir($id) { $dbtable = new Model_DbTable_Contrato(); $corretorId = Yuppie_Auth::getIdentity()->grupo == 'Corretor' ? Yuppie_Auth::getIdentity()->id : (!empty(Yuppie_Auth::getIdentity()->corretor_id) ? Yuppie_Auth::getIdentity()->corretor_id : 0); $where = ["id = ?" => $id]; if( $corretorId ){ $where["corretor_id = ?"] = $corretorId; } return $dbtable->fetchRow($where); } /** * Retorna uma lista de contratos * @param array $fields * @param array $order */ public function getComissaoPagar($fields, $order = array( 'corretor', 'contratos.corretor_id', 'situacao_pagamento', 'banco', 'cliente' )) { if( !isset($fields['corretores']) ){ die('Atenção! Pelo menos um corretor deve ser informado.'); } $dbtable = new Model_DbTable_Contrato(); if(empty($fields['corretores'])){ return null; } /* contratos que: * não foram estornados (nenhum protocolo negativo) * não precisam de físico para ser pago OU que precisam de físico e já houve recebimento do físico * não foram pagos (nenhum protocolo positivo) OU foi gerado pelo menos 1 protocolo e tem diferimento */ $pagamentoComissao = "(protocolos_corretor.negativos = 0 OR protocolos_corretor.negativos IS NULL)" . " AND (contratos.estornado IS NULL OR contratos.estornado = 0)" . " AND (contratos.cobranca_banco = 0)" . " AND (bancos.pagar_com_fisico <> 1 OR (bancos.pagar_com_fisico = 1 AND ((contratos.protocolo_recebimento_fisico IS NOT NULL AND contratos.tipo_formalizacao = 0) OR contratos.tipo_formalizacao = 1)))" . " AND ((protocolos_corretor.positivos = 0 OR protocolos_corretor.positivos IS NULL)" . " OR (protocolos_corretor.positivos > 0 AND contratos.diferimento_corretor > 0 AND protocolos_corretor.positivos < (contratos.prazo + 1)" . " AND (CURRENT_DATE() >= DATE_ADD(data_pag, INTERVAL 30 DAY))))" . " AND (contratos.data_ted_devolvida IS NULL OR contratos.data_ted_devolvida = '0000-00-00')" . " AND (contratos.cobranca_promotora IS NULL OR contratos.cobranca_promotora <> 1)"; $filterContrato = Core_Filters::_prepareFilterContrato($fields); $filterSelectContrato = Core_Filters::_prepareFilterSelectContrato($fields); $whereContrato = !empty($filterContrato['where']) ? $filterContrato['where'] : []; $whereSelectContrato = !empty($filterContrato['where']) ? $filterSelectContrato['where'] : []; $wheres = array_merge($whereContrato, $whereSelectContrato); $havingContrato = !empty($filterContrato['having']) ? $filterContrato['having'] : []; $hagingSelectContrato = !empty($filterContrato['having']) ? $filterSelectContrato['having'] : []; $havings = array_merge($havingContrato, $hagingSelectContrato); if(count($wheres) > 0) $where = "(" . implode(") AND (", $wheres) . ")"; //contratos com devolução automaticamente: se filtrar pela data de liberação contratos devolvidos que não estejam entre o periodo, //exibirá obrigatoriamente os contratos devolvidos para pagar. $devolucao = "coalesce(protocolos_corretor.negativos, 0) = coalesce(protocolos_corretor.positivos, 0)" . " AND (bancos.pagar_com_fisico <> 1 OR (bancos.pagar_com_fisico = 1 AND contratos.pendente = 0))" . " AND protocolos_corretor.negativos > 0 AND contratos.cobranca_banco = 0 AND coalesce(contratos.cobranca_promotora, 0) = 0" . " AND coalesce(contratos.estornado, 0) = 0" . " AND (contratos.data_ted_devolvida IS NULL OR contratos.data_ted_devolvida = '0000-00-00')"; //contratos que deverão ser estornados por TED DEVOLVIDA $tedDevolvida = "protocolos_corretor.valor_total > 0 AND (contratos.data_ted_devolvida IS NOT NULL AND contratos.data_ted_devolvida <> '0000-00-00')"; $wherePreviaCorretorSupervisor = $dbtable->getWherePreviaCorretorSupervisor(); //contratos que deverão ser estornados por PENDENCIA DE FÍSICO (prazo definido no cadastro do corretor ou na aba prazos por banco) $pendenciaDeFisico = "$wherePreviaCorretorSupervisor AND protocolos_corretor.valor_total > 0 AND bancos.estornar_pendentes = 1" . " AND ((contratos.tipo_formalizacao = 0 AND contratos.pendente = 1 AND (contratos.motivo_pendencia IN(1,3))) OR (contratos.tipo_formalizacao = 1 AND contratos.pendente = 1 AND contratos.motivo_pendencia = 2))" . " AND coalesce(contratos.estornado, 0) = 0"; //contratos que foram estornados da empresa e que devem ser estornados do corretor $estornado = "protocolos_corretor.valor_total >= 0 AND coalesce(protocolos_corretor.negativos, 0) < coalesce(protocolos_corretor.positivos, 0) AND " . "(contratos.estornado = 1" . " OR contratos.cobranca_banco = 1" . " OR contratos.cobranca_promotora = 1)"; //soma dos pagamentos e estornos do corretor //quantidade de protocolos pagos/positivos //quantidade de protocolos a devolver/estornados/negativos $selectProtocolosCorretor = $dbtable->getAdapter()->select()->from('tb_protocolo_contrato', [ 'contrato_id', 'protocolo_id', 'valor_total' => 'SUM(valor)', 'negativos' => "SUM(if(situacao in ('Estorno', 'Pendência de físico', 'SRCC', 'TED Devolvida'), 1, 0))", 'positivos' => "SUM(if(situacao in ('Pagamento comissão', 'Devolução', 'Diferimento'), 1, 0))" ]) ->joinInner(['pagamento' => 'tb_protocolo_pagamento'], 'tb_protocolo_contrato.protocolo_id = pagamento.id AND pagamento.excluido <> 1', ['data_pag' => "MAX(pagamento.data_pagamento)"] ) ->where('tb_protocolo_contrato.excluido <> 1') ->group('contrato_id'); $selectSaldoCorretor = $dbtable->getAdapter()->select()->from('tb_lancamentos', array( 'valor_saldo_corretor' => "SUM(CASE WHEN tb_lancamentos.tipo = 'CREDITO_CORRETOR' THEN valor_pago WHEN tb_lancamentos.tipo = 'DEBITO_CORRETOR' THEN -(valor_pago) ELSE 0 END)", 'corretor_id' )) ->where("tb_lancamentos.excluido <> 1 AND (tb_lancamentos.tipo = 'CREDITO_CORRETOR' OR tb_lancamentos.tipo = 'DEBITO_CORRETOR')") ->where("tb_lancamentos.corretor_id IN ({$fields['corretores']})") ->group('corretor_id'); $campos = array( 'id', 'numero_contrato', 'corretor_id', 'valor_liquido', 'valor_bruto', 'pendente', 'base_comissao_valor', 'base_comissao_bonus', 'comissao_empresa', 'bonus_empresa', 'comissao_corretor', 'valor_fixo_corretor', 'valor_fixo_empresa', 'bonus_corretor', 'taxa_contrato', 'data_recebimento_previa', 'data_recebimento_fisico', 'data_emissao', 'data_liberacao', 'forma_liberacao', 'prazo', 'tipo', 'cliente_id', 'status_proposta', 'taxa_portabilidade', 'verificar_contratos', 'digitador', 'tipo_formalizacao', 'srcc', 'comissao_prevista' => 'comissao_empresa', new Zend_Db_Expr("CASE WHEN ($pagamentoComissao) THEN 'Pagamento comissão' WHEN ($devolucao) THEN 'Devolução' WHEN ($tedDevolvida) THEN 'TED devolvida' WHEN ($pendenciaDeFisico) THEN 'Pendência de físico' WHEN ($estornado) THEN 'Estorno' ELSE '' END as situacao_pagamento"), new Zend_Db_Expr("CASE WHEN ($pagamentoComissao) THEN contratos.estornado WHEN ($devolucao) THEN '0' ELSE '1' END as estornado"), 'status' ); $prazoFisico = "IF(corretores_prazos.id IS NOT NULL, corretores_prazos.prazo, corretores.prazo_fisico)"; $select = $dbtable->getAdapter()->select()->from(array( 'contratos' => 'tb_contratos' ), $campos) ->joinInner(array( 'corretores' => 'tb_corretores' ), "contratos.corretor_id = corretores.id", array( 'corretor' => 'nome', 'prazo_fisico' => $prazoFisico, 'apelido', 'uf_corretor' => 'corretores.uf' )) ->joinLeft( array( 'corretores_prazos' => 'tb_corretores_prazos' ), 'contratos.corretor_id = corretores_prazos.corretor_id AND contratos.banco_id = corretores_prazos.banco_id AND corretores_prazos.excluido<>1', array()) ->joinInner(array( 'tabelas' => 'tb_tabelas' ), "contratos.tabela_id = tabelas.id", array( 'tabela' => 'nome' )) ->joinInner(array( 'clientes' => 'tb_clientes' ), "contratos.cliente_id = clientes.id", array( 'cliente' => 'nome', 'cpf', 'data_nascimento' )) ->joinInner(array( 'convenios' => 'tb_convenios' ), "contratos.convenio_id = convenios.id", array( 'convenio' => 'nome' )) ->joinInner(array( 'bancos' => 'tb_bancos' ), "contratos.banco_id = bancos.id", array( 'banco' => 'nome', 'estornar_pendentes' )) ->joinLeft(array( 'bancos_febraban' => 'tb_bancos_febraban' ), 'corretores.banco = bancos_febraban.codigo', array( 'banco_pagamento' => 'nome' )) ->joinLeft(array( 'grupos' => 'tb_grupos_comissao' ), 'corretores.grupo_comissao = grupos.id', array( 'grupo' => 'descricao' )) ->joinLeft(array( 'status_propostas' => 'tb_tipos' ), "contratos.status_proposta = status_propostas.id", array( 'status_proposta_descricao' => 'descricao' )) ->joinLeft(array( 'rotas' => 'tb_rotas' ), "corretores.rota_id = rotas.id", array( 'rota' => 'rotas.nome' )) ->joinLeft(array( 'supervisores' => 'tb_gerente_rota' ), "rotas.gerente_id = supervisores.id", array( 'prazo_pendencia_supervisor' => 'supervisores.prazo' )) ->joinLeft(array( 'recebimento_contratos' => "tb_recebimento_contratos" ), "recebimento_contratos.contrato_id = contratos.id", ['comissao_recebida' => 'comissao_empresa']) ->joinLeft(array( 'saldos_corretores' => $selectSaldoCorretor ), "saldos_corretores.corretor_id = corretores.id", array( 'valor_saldo_corretor' )) ->joinLeft(array( 'protocolos_corretor' => $selectProtocolosCorretor ), 'protocolos_corretor.contrato_id = contratos.id', array('contrato_id')) ->where("contratos.corretor_id IN ({$fields['corretores']})") ->where("corretores.corretor_desativado <> 1 AND corretores.excluido <> 1") ->where("contratos.tipo_registro = 1 AND contratos.excluido <> 1") ->where("clientes.excluido <> 1") ->where("bancos.bloquear_pagamento_comissao <> 1") ->group('contratos.id'); $pagamentoComissao = !empty($where) ? "$pagamentoComissao AND $where" : "$pagamentoComissao"; $select->where("($pagamentoComissao) OR ($devolucao) OR ($tedDevolvida) OR ($pendenciaDeFisico) OR ($estornado)"); if (count($havings)) { $select->having(implode(" AND ", $havings)); } if( !is_null($order) ){ $select->order($order); } else { $select->order(array( 'corretor', 'data_liberacao' )); } return $dbtable->getAdapter()->fetchAll($select); } public function getComissaoReceber($fields, $page = null, $limit = null, $order = array( 'data_liberacao' ), $range = null) { $dbtable = new Model_DbTable_Contrato(); $columns = array( 'contratos.numero_contrato', 'contratos.data_emissao', 'contratos.data_liberacao', 'contratos.prazo', 'contratos.valor_liquido', 'contratos.valor_bruto', 'contratos.valor_fixo_empresa', 'contratos.valor_fixo_corretor', 'contratos.corretor_id', 'contratos.subestabelecido_id', 'comissao_prevista' => 'contratos.comissao_empresa', 'empresa' => 'empresas.nome', 'contratos.base_comissao_empresa_valor', 'comissao_recebida' => 'recebimento_contratos.comissao_empresa', 'produto' => 'contratos.tipo', 'contratos.tipo', 'id_contrato' => 'contratos.id' ); $select = $this->_getSelectProducaoAnalitico($dbtable, $columns); $select->joinLeft(array( 'recebimento_contratos' => "tb_recebimento_contratos" ), "recebimento_contratos.contrato_id = contratos.id", array()) ->joinLeft(array( 'empresas' => 'tb_empresas' ), 'empresas.id = contratos.empresa_id', array()) ->joinLeft(array( 'produtos' => 'tb_produtos' ), 'produtos.id = contratos.produto', array()) ->where("(contratos.data_recebimento_comissao IS NULL OR contratos.data_recebimento_comissao = '0000-00-00')") ->where("(recebimento_contratos.data_recebimento_comissao IS NULL OR recebimento_contratos.data_recebimento_comissao = '0000-00-00')") ->group(array( 'recebimento_contratos.id', 'contratos.id' )); $this->_prepareFilterSelect($fields, $select); if( $order != null ){ $select->order($order); } else { $select->order(array( 'corretores.nome', 'contratos.data_liberacao' )); } if( $page ){ $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($page); if( $limit && is_numeric($limit) ){ $paginator->setItemCountPerPage($limit); } if( $range && is_numeric($range) ){ $paginator->setPageRange($range); } return $paginator; } return $dbtable->getAdapter()->fetchAll($select); } public function getComissaoPendenteTotalizador(array $fields) { $dbtable = new Model_DbTable_Contrato(); $columns = array( 'total_valor_liquido' => 'SUM(valor_liquido)', 'total_comissao_recebida' => 'SUM(IF(recebimento_contratos.comissao_empresa IS NULL, 0, (contratos.valor_fixo_empresa+recebimento_contratos.comissao_empresa*base_comissao_empresa_valor/100)))', 'total_comissao_prevista' => 'SUM(IF(contratos.comissao_empresa IS NULL, 0, (contratos.valor_fixo_empresa+contratos.comissao_empresa*base_comissao_empresa_valor/100)))' ); $select = $this->_getSelectProducaoAnalitico($dbtable, $columns); $select->joinLeft(array( 'recebimento_contratos' => "tb_recebimento_contratos" ), "recebimento_contratos.contrato_id = contratos.id", array()) ->joinLeft(array( 'produtos' => 'tb_produtos' ), 'produtos.id = contratos.produto', array()) ->where("(contratos.data_recebimento_comissao IS NULL OR contratos.data_recebimento_comissao = '0000-00-00')") ->where("(recebimento_contratos.data_recebimento_comissao IS NULL OR recebimento_contratos.data_recebimento_comissao = '0000-00-00')"); $this->_prepareFilterSelect($fields, $select); return $dbtable->getAdapter()->fetchRow($select); } public function getRecebimentoBradesco(array $fields, $page = null, $limit = null, $order = array( 'corretores.nome', 'contratos.data_liberacao' ), $range = null) { $dbtable = new Model_DbTable_Contrato(); $columns = array( 'contratos.numero_contrato', 'contratos.data_emissao', 'contratos.data_liberacao', 'contratos.prazo', 'contratos.valor_liquido', 'contratos.valor_bruto', 'contratos.base_comissao_empresa_bonus', 'contratos.base_comissao_empresa_adiantamento', 'contratos.corretor_id', 'contratos.base_comissao_empresa_valor', 'contratos.tipo', 'empresa' => 'empresas.nome', 'contratos.valor_fixo_empresa', 'recebimento_contrato' => 'recebimento_contratos.data_recebimento_comissao', 'recebimento_contratos.parcelas', 'recebimento_contratos.rco', 'recebimento_contratos.data_saldo', 'recebimento_contratos.data_recebimento_comissao', 'recebimento_contratos.valor_lancamento', 'comissao_recebida' => 'recebimento_contratos.comissao_empresa', 'contratos.produto', 'natureza' => 'recebimento_contratos.natureza_descricao', 'tipo_remuneracao' => 'recebimento_contratos.tipo_remuneracao_descricao' ); $selectComissaoPrevista = $dbtable->getAdapter()->select()->from(array( 'c' => 'tb_comissionamento' ), array( 'banco_id', 'empresa_id', 'tabela_id', 'convenio_id', 'produto', 'prazo', 'prazo_de', 'prazo_a' )) ->joinInner(array( 'p' => 'tb_comissionamento_percentual' ), 'c.id = p.comissionamento_id', array( 'comissao', 'bonus', 'diferimento', 'adiantamento', 'data_inicial', 'data_final' )) ->where('c.excluido<>1') ->where('p.excluido<>1'); $select = $this->_getSelectProducaoAnalitico($dbtable, $columns); // -1 = comissao, 1 = remuneracao adicional, 2 = diferimento, 3 = bônus $remuneracao = in_array($fields['tipo_relatorio'], array(-1, 3, 1)) ? 1 : 2; $natureza = in_array($fields['tipo_relatorio'], array(-1, 2)) ? 1 : 2; $selectRecebimento = $dbtable->getAdapter()->select()->from(array( 'recebimento_contratos' => "tb_recebimento_contratos" ), array( 'recebimento_contratos.*' )) ->joinLeft(array( 'naturezas' => 'tb_tipos' ), "naturezas.codigo = recebimento_contratos.natureza AND naturezas.tipo = 'NATUREZA_BRADESCO'", array( 'natureza_descricao' => 'descricao' )) ->joinLeft(array( 'tipos_remuneracao' => 'tb_tipos' ), "tipos_remuneracao.codigo = recebimento_contratos.tipo_remuneracao AND tipos_remuneracao.tipo = 'TIPO_REMUNERACAO'", array( 'tipo_remuneracao_descricao' => 'descricao' )) ->where('recebimento_contratos.excluido <> 1') ->where("recebimento_contratos.tipo_remuneracao = '$remuneracao' AND natureza = '$natureza'"); $select->joinLeft(array( 'recebimento_contratos' => $selectRecebimento ), "recebimento_contratos.contrato_id = contratos.id AND recebimento_contratos.excluido <> 1", array()) ->joinLeft(array( 'empresas' => 'tb_empresas' ), 'empresas.id = contratos.empresa_id', array()) ->joinLeft(array('comissoes' => $selectComissaoPrevista ), "comissoes.convenio_id = contratos.convenio_id AND comissoes.tabela_id = contratos.tabela_id" . " AND comissoes.prazo_de <= contratos.prazo AND comissoes.prazo_a >= contratos.prazo" . " AND contratos.data_emissao >= comissoes.data_inicial" . " AND (contratos.data_emissao <= comissoes.data_final OR comissoes.data_final IS NULL)", array( 'comissao_prevista' => 'comissao', 'bonus_previsto' => 'bonus', 'diferimento_previsto' => 'diferimento', 'adiantamento_previsto' => 'adiantamento' ) ) ->group(array( 'recebimento_contratos.id', 'contratos.id' )); $this->_prepareFilterSelect($fields, $select); if( $order != null ){ $select->order($order); } else { $select->order(array( 'corretores.nome', 'contratos.data_liberacao' )); } if( $page ){ $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($page); if( $limit && is_numeric($limit) ){ $paginator->setItemCountPerPage($limit); } if( $range && is_numeric($range) ){ $paginator->setPageRange($range); } return $paginator; } return $dbtable->getAdapter()->fetchAll($select); } public function getRecebimentoBradescoTotalizador(array $fields) { $dbtable = new Model_DbTable_Contrato(); $columns = array( 'contratos.numero_contrato', 'contratos.data_emissao', 'contratos.data_liberacao', 'contratos.prazo', 'contratos.valor_liquido', 'contratos.valor_bruto', 'contratos.valor_fixo_empresa', 'contratos.base_comissao_empresa_bonus', 'contratos.base_comissao_empresa_adiantamento', 'contratos.corretor_id', 'contratos.base_comissao_empresa_valor', 'contratos.tipo', 'empresa' => 'empresas.nome', 'recebimento_contrato' => 'recebimento_contratos.data_recebimento_comissao', 'recebimento_contratos.parcelas', 'recebimento_contratos.rco', 'recebimento_contratos.data_saldo', 'recebimento_contratos.data_recebimento_comissao', 'recebimento_contratos.valor_lancamento', 'comissao_recebida' => 'recebimento_contratos.comissao_empresa', 'contratos.produto', 'comissoes.adiantamento', 'comissoes.bonus', 'natureza' => 'recebimento_contratos.natureza_descricao', 'tipo_remuneracao' => 'recebimento_contratos.tipo_remuneracao_descricao' ); $selectComissaoPrevista = $dbtable->getAdapter()->select()->from(array( 'c' => 'tb_comissionamento' ), array( 'banco_id', 'empresa_id', 'tabela_id', 'convenio_id', 'produto', 'prazo', 'prazo_de', 'prazo_a' )) ->joinInner(array( 'p' => 'tb_comissionamento_percentual' ), 'c.id = p.comissionamento_id', array( 'comissao', 'bonus', 'diferimento', 'adiantamento', 'data_inicial', 'data_final' )) ->where('c.excluido<>1') ->where('p.excluido<>1'); $select = $this->_getSelectProducaoAnalitico($dbtable, $columns); $selectRecebimento = $dbtable->getAdapter()->select()->from(array( 'recebimento_contratos' => "tb_recebimento_contratos" ), array( 'recebimento_contratos.*' )) ->joinLeft(array( 'naturezas' => 'tb_tipos' ), "naturezas.codigo = recebimento_contratos.natureza AND naturezas.tipo = 'NATUREZA_BRADESCO'", array( 'natureza_descricao' => 'descricao' )) ->joinLeft(array( 'tipos_remuneracao' => 'tb_tipos' ), "tipos_remuneracao.codigo = recebimento_contratos.tipo_remuneracao AND tipos_remuneracao.tipo = 'TIPO_REMUNERACAO'", array( 'tipo_remuneracao_descricao' => 'descricao' )); if( isset($fields['tipo_relatorio']) && !empty($fields['tipo_relatorio']) ){ if( $fields['tipo_relatorio'] == -1 ){ //comissão $selectRecebimento->where("recebimento_contratos.tipo_remuneracao = '1' AND natureza = '1'"); } elseif( $fields['tipo_relatorio'] == 3 || $fields['tipo_relatorio'] == 1 ){ //bônus ou remuneração adicional $selectRecebimento->where("recebimento_contratos.tipo_remuneracao = '1' AND natureza = '2'"); } elseif( $fields['tipo_relatorio'] == 2 ){ //diferimento $selectRecebimento->where("recebimento_contratos.tipo_remuneracao = '2' AND natureza = '1'"); } } $select->joinLeft(array( 'recebimento_contratos' => $selectRecebimento ), "recebimento_contratos.contrato_id = contratos.id AND recebimento_contratos.excluido <> 1", array()) ->joinLeft(array( 'empresas' => 'tb_empresas' ), 'empresas.id = contratos.empresa_id', array()) ->joinLeft(array( 'comissoes' => $selectComissaoPrevista ), "comissoes.convenio_id = contratos.convenio_id AND comissoes.tabela_id = contratos.tabela_id AND " . "comissoes.prazo_de <= contratos.prazo AND comissoes.prazo_a >= contratos.prazo AND " . "contratos.data_emissao >= comissoes.data_inicial AND (contratos.data_emissao <= comissoes.data_final OR comissoes.data_final IS NULL)", array( 'comissao_prevista' => 'comissao', 'bonus_previsto' => 'bonus', 'diferimento_previsto' => 'diferimento', 'adiantamento_previsto' => 'adiantamento' )) ->group(array( 'recebimento_contratos.id', 'contratos.id' )); $this->_prepareFilterSelect($fields, $select); $result = $dbtable->getAdapter()->fetchAll($select); $totalValorLiquido = 0; $totalBaseComissao = 0; $totalValorLancamento = 0; $totalComissaoPrevista = 0; $totalComissaoRecebida = 0; $totalAdiantamentoPrevisto = 0; $totalBonusPrevisto = 0; foreach ( $result as $values ) { $totalValorLiquido += $values['valor_liquido']; $totalBaseComissao += $values['base_comissao_empresa_valor']; $totalValorLancamento += $values['valor_lancamento']; $totalComissaoPrevista += $values['valor_fixo_empresa'] + $values['comissao_prevista'] * $values['base_comissao_empresa_valor'] / 100; $totalComissaoRecebida += $values['valor_fixo_empresa'] + $values['comissao_recebida'] * $values['base_comissao_empresa_valor'] / 100; $totalAdiantamentoPrevisto += $values['adiantamento'] * $values['base_comissao_empresa_adiantamento'] / 100; $totalBonusPrevisto += $values['bonus'] * $values['base_comissao_empresa_bonus'] / 100; } return array( 'total_valor_liquido' => $totalValorLiquido, 'total_base_comissao' => $totalBaseComissao, 'total_valor_lancamento' => $totalValorLancamento, 'total_comissao_prevista' => $totalComissaoPrevista, 'total_comissao_recebida' => $totalComissaoRecebida, 'total_adiantamento_previsto' => $totalAdiantamentoPrevisto, 'total_bonus_previsto' => $totalBonusPrevisto ); } public function getRecebimentoMercantil(array $fields, $page = null, $limit = null, $order = array( 'data_recebimento_comissao' ), $range = null) { $columns = array( 'id_contrato' => 'contratos.id', 'contratos.numero_contrato', 'contratos.prazo', 'contratos.valor_liquido', 'contratos.corretor_id', 'contratos.base_comissao_empresa_valor', 'contratos.tipo', 'contratos.valor_fixo_empresa', 'recebimento_id' => 'recebimento_contratos.id', 'recebimento_contratos.data_recebimento_comissao','recebimento_contratos.valor_lancamento', 'recebimento_contratos.parcelas', 'recebimento_contratos.rco', 'recebimento_contratos.data_saldo', 'comissao_recebida' => 'recebimento_contratos.comissao_empresa', 'comissao_recebida' => 'recebimento_contratos.comissao_empresa', 'comissao_prevista' => 'comissoes.comissao', 'natureza' => 'recebimento_contratos.natureza_descricao', 'tipo_remuneracao' => 'recebimento_contratos.tipo_remuneracao_descricao', 'comissoes.adiantamento_previsto', 'comissoes.bonus_previsto', 'base_comissao_empresa_valor_prevista' => new Zend_Db_Expr("CASE WHEN comissoes.base_comissao_empresa = 'VALOR LIQUIDO' THEN contratos.valor_liquido WHEN comissoes.base_comissao_empresa = 'VALOR BRUTO' THEN contratos.valor_bruto END") ); $select = $this->getSelectRecebimentoGenerico($fields, $columns, $order); if( $page ){ $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($page); if( $limit && is_numeric($limit) ){ $paginator->setItemCountPerPage($limit); } if( $range && is_numeric($range) ){ $paginator->setPageRange($range); } return $paginator; } $dbtable = new Model_DbTable_Contrato(); return $dbtable->getAdapter()->fetchAll($select); } public function getRecebimentoMercantilTotalizador(array $fields) { $dbtable = new Model_DbTable_Contrato(); $columns = array( 'total_valor_liquido' => 'SUM(valor_liquido)', 'comissao_recebida' => 'recebimento_contratos.comissao_empresa', 'comissao_prevista' => 'comissoes.comissao', 'total_comissao_recebida' => 'SUM(IF(recebimento_contratos.comissao_empresa IS NULL, 0, (contratos.valor_fixo_empresa+recebimento_contratos.comissao_empresa*base_comissao_empresa_valor/100)))', 'total_comissao_prevista' => 'SUM(IF(contratos.comissao_empresa IS NULL, 0, (contratos.valor_fixo_empresa+contratos.comissao_empresa*contratos.base_comissao_empresa_valor/100)))' ); $select = $this->getSelectRecebimentoGenerico($fields, $columns); $this->_prepareFilterSelect($fields, $select); return $dbtable->getAdapter()->fetchRow($select); } public function getRecebimentoPan(array $fields, $page = null, $limit = null, $order = array( 'data_recebimento_comissao' ), $range = null) { $columns = array( 'contratos.numero_contrato', 'contratos.prazo', 'contratos.valor_liquido', 'contratos.corretor_id', 'contratos.base_comissao_empresa_valor', 'contratos.tipo', 'contratos.valor_fixo_empresa', 'recebimento_contratos.data_recebimento_comissao','recebimento_contratos.valor_lancamento', 'recebimento_contratos.parcelas', 'recebimento_contratos.rco', 'recebimento_contratos.data_saldo', 'comissoes.comissao_prevista', 'comissao_recebida' => 'recebimento_contratos.comissao_empresa', 'natureza' => 'recebimento_contratos.natureza_descricao', 'tipo_remuneracao' => 'recebimento_contratos.tipo_remuneracao_descricao', 'comissoes.adiantamento_previsto', 'comissoes.bonus_previsto', 'base_comissao_empresa_valor_prevista' => new Zend_Db_Expr("CASE WHEN comissoes.base_comissao_empresa = 'VALOR LIQUIDO' THEN contratos.valor_liquido WHEN comissoes.base_comissao_empresa = 'VALOR BRUTO' THEN contratos.valor_bruto END") ); $select = $this->getSelectRecebimentoGenerico($fields, $columns, $order); if( $page ){ $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($page); if( $limit && is_numeric($limit) ){ $paginator->setItemCountPerPage($limit); } if( $range && is_numeric($range) ){ $paginator->setPageRange($range); } return $paginator; } $dbtable = new Model_DbTable_Contrato(); return $dbtable->getAdapter()->fetchAll($select); } public function getRecebimentoPanTotalizador(array $fields) { $dbtable = new Model_DbTable_Contrato(); $columns = array( 'total_valor_liquido' => 'SUM(valor_liquido)', 'total_comissao_recebida' => 'SUM(IF(recebimento_contratos.comissao_empresa IS NULL, 0, (contratos.valor_fixo_empresa+recebimento_contratos.comissao_empresa*base_comissao_empresa_valor/100)))', 'total_comissao_prevista' => 'SUM(IF(contratos.comissao_empresa IS NULL, 0, (contratos.valor_fixo_empresa+contratos.comissao_empresa*contratos.base_comissao_empresa_valor/100)))' ); $select = $this->_getSelectProducaoAnalitico($dbtable, $columns); $select->joinLeft(array( 'recebimento_contratos' => "tb_recebimento_contratos" ), "recebimento_contratos.contrato_id = contratos.id", array()) ->joinLeft(array( 'produtos' => 'tb_produtos' ), 'produtos.id = contratos.produto', array()) ->joinLeft(array( 'tipos_remuneracao' => 'tb_tipos' ), "tipos_remuneracao.codigo = recebimento_contratos.tipo_remuneracao AND tipos_remuneracao.tipo = 'TIPO_REMUNERACAO'", array()); $select->where('recebimento_contratos.excluido <> 1'); $this->_prepareFilterSelect($fields, $select); return $dbtable->getAdapter()->fetchRow($select); } public function getRecebimentoBv(array $fields, $page = null, $limit = null, $order = array( 'data_recebimento_comissao' ), $range = null) { $dbtable = new Model_DbTable_Contrato(); $columns = array( 'contratos.numero_contrato', 'contratos.data_emissao', 'contratos.data_liberacao', 'contratos.valor_liquido', 'comissao_prevista' => 'contratos.comissao_empresa', 'contratos.corretor_id', 'contratos.valor_fixo_empresa', 'recebimento_contrato' => 'recebimento_contratos.data_recebimento_comissao', 'recebimento_contratos.parcelas', 'recebimento_contratos.data_saldo', 'recebimento_contratos.data_recebimento_comissao', 'recebimento_contratos.valor_lancamento', 'comissao_recebida' => 'recebimento_contratos.comissao_empresa', 'produto' => 'produtos.tipo', 'contratos.base_comissao_empresa_valor', 'tipo_remuneracao' => 'recebimento_contratos.tipo_remuneracao' ); $select = $this->_getSelectProducaoAnalitico($dbtable, $columns); $select->joinLeft(array( 'recebimento_contratos' => "tb_recebimento_contratos" ), "recebimento_contratos.contrato_id = contratos.id", array()) ->joinLeft(array( 'produtos' => 'tb_produtos' ), 'produtos.id = contratos.produto', array()) ->group(array( 'recebimento_contratos.id', 'contratos.id' )); $this->_prepareFilterSelect($fields, $select); if( $order != null ){ $select->order($order); } else { $select->order(array( 'corretores.nome', 'contratos.data_liberacao' )); } if( $page ){ $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($page); if( $limit && is_numeric($limit) ){ $paginator->setItemCountPerPage($limit); } if( $range && is_numeric($range) ){ $paginator->setPageRange($range); } return $paginator; } return $dbtable->getAdapter()->fetchAll($select); } public function getRecebimentoBvTotalizador(array $fields) { $dbtable = new Model_DbTable_Contrato(); $columns = array( 'total_valor_liquido' => 'SUM(valor_liquido)', 'total_comissao_recebida' => 'SUM(IF(recebimento_contratos.comissao_empresa IS NULL, 0, (contratos.valor_fixo_empresa+recebimento_contratos.comissao_empresa*base_comissao_empresa_valor/100)))', 'total_comissao_prevista' => 'SUM(IF(contratos.comissao_empresa IS NULL, 0, (contratos.valor_fixo_empresa+contratos.comissao_empresa*base_comissao_empresa_valor/100)))' ); $select = $this->_getSelectProducaoAnalitico($dbtable, $columns); $select->joinLeft(array( 'recebimento_contratos' => "tb_recebimento_contratos" ), "recebimento_contratos.contrato_id = contratos.id AND recebimento_contratos.excluido <> 1", array()) ->joinLeft(array( 'produtos' => 'tb_produtos' ), 'produtos.id = contratos.produto', array()) ->joinLeft(array( 'tipos_remuneracao' => 'tb_tipos' ), "tipos_remuneracao.codigo = recebimento_contratos.tipo_remuneracao AND tipos_remuneracao.tipo = 'TIPO_REMUNERACAO'", array()); $this->_prepareFilterSelect($fields, $select); return $dbtable->getAdapter()->fetchRow($select); } public function getRecebimentoBonsucesso(array $fields, $page = null, $limit = null, $order = array( 'corretores.nome', 'contratos.data_liberacao' ), $range = null) { $dbtable = new Model_DbTable_Contrato(); $columns = array( 'contratos.numero_contrato', 'contratos.data_emissao', 'contratos.data_liberacao', 'contratos.prazo', 'contratos.valor_liquido', 'contratos.valor_bruto', 'contratos.corretor_id', 'contratos.base_comissao_empresa_valor', 'empresa' => 'empresas.nome', 'contratos.valor_fixo_empresa', 'recebimento_id' => 'recebimento_contratos.id', 'recebimento_contratos.contrato_id', 'recebimento_contrato' => 'recebimento_contratos.data_recebimento_comissao', 'recebimento_contratos.parcelas', 'recebimento_contratos.rco', 'recebimento_contratos.data_saldo', 'recebimento_contratos.data_recebimento_comissao', 'recebimento_contratos.valor_lancamento', 'comissao_recebida' => 'recebimento_contratos.comissao_empresa', 'recebimento_contratos.descricao', 'contratos.produto', 'natureza' => 'recebimento_contratos.natureza_descricao', 'tipo_remuneracao' => 'recebimento_contratos.tipo_remuneracao_descricao' ); $selectComissaoPrevista = $dbtable->getAdapter()->select()->from(array( 'c' => 'tb_comissionamento' ), array( 'banco_id', 'empresa_id', 'tabela_id', 'convenio_id', 'produto', 'prazo' )) ->joinInner(array( 'p' => 'tb_comissionamento_percentual' ), 'c.id = p.comissionamento_id', array( 'comissao', 'bonus', 'diferimento', 'adiantamento', 'data_inicial', 'data_final' )) ->where('c.excluido<>1') ->where('p.excluido<>1'); $select = $this->_getSelectProducaoAnalitico($dbtable, $columns); $selectRecebimento = $dbtable->getAdapter()->select()->from(array( 'recebimento_contratos' => "tb_recebimento_contratos" ), array( 'recebimento_contratos.*' )) ->joinLeft(array( 'naturezas' => 'tb_tipos' ), "naturezas.id = recebimento_contratos.natureza AND naturezas.tipo = 'NATUREZA_BONSUCESSO'", array( 'natureza_descricao' => 'descricao' )) ->joinLeft(array( 'tipos_remuneracao' => 'tb_tipos' ), "tipos_remuneracao.id = recebimento_contratos.tipo_remuneracao AND tipos_remuneracao.tipo = 'TIPO_REMUNERACAO_BONSUCESSO'", array( 'tipo_remuneracao_descricao' => 'descricao' )) ->where('recebimento_contratos.excluido <> 1'); $select->joinLeft(array( 'recebimento_contratos' => $selectRecebimento ), "recebimento_contratos.contrato_id = contratos.id AND recebimento_contratos.excluido <> 1", array()) ->joinLeft(array( 'empresas' => 'tb_empresas' ), 'empresas.id = contratos.empresa_id', array()) ->joinLeft(array( 'comissoes' => $selectComissaoPrevista ), "comissoes.convenio_id = contratos.convenio_id AND comissoes.tabela_id = contratos.tabela_id AND " . "contratos.produto = comissoes.produto AND contratos.prazo = comissoes.prazo AND " . "contratos.data_emissao >= comissoes.data_inicial AND (contratos.data_emissao <= comissoes.data_final OR comissoes.data_final IS NULL)", array( 'comissao_prevista' => 'comissao', 'bonus_previsto' => 'bonus', 'diferimento_previsto' => 'diferimento', 'adiantamento_previsto' => 'adiantamento' )) ->group(array( 'recebimento_contratos.id', 'contratos.id' )); $this->_prepareFilterSelect($fields, $select); if( $order != null ){ $select->order($order); } else { $select->order(array( 'corretores.nome', 'contratos.data_liberacao' )); } if( $page ){ $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($page); if( $limit && is_numeric($limit) ){ $paginator->setItemCountPerPage($limit); } if( $range && is_numeric($range) ){ $paginator->setPageRange($range); } return $paginator; } return $dbtable->getAdapter()->fetchAll($select); } public function getRecebimentoBonsucessoTotalizador(array $fields) { $dbtable = new Model_DbTable_Contrato(); $columns = array( 'total_valor_liquido' => 'SUM(valor_liquido)', 'total_comissao_recebida' => 'SUM(IF(recebimento_contratos.comissao_empresa IS NULL, 0, (contratos.valor_fixo_empresa+recebimento_contratos.comissao_empresa*base_comissao_empresa_valor/100)))', 'total_comissao_prevista' => 'SUM(IF(comissoes.comissao IS NULL, 0, (contratos.valor_fixo_empresa+comissoes.comissao*base_comissao_empresa_valor/100)))', 'total_adiantamento_previsto' => 'SUM(IF(comissoes.adiantamento IS NULL, 0, (comissoes.adiantamento*base_comissao_empresa_adiantamento/100)))', 'total_bonus_previsto' => 'SUM(IF(comissoes.bonus IS NULL, 0, (comissoes.bonus*base_comissao_empresa_bonus/100)))', ); $selectComissaoPrevista = $dbtable->getAdapter()->select()->from(array( 'c' => 'tb_comissionamento' ), array( 'banco_id', 'empresa_id', 'tabela_id', 'convenio_id', 'produto', 'prazo' )) ->joinInner(array( 'p' => 'tb_comissionamento_percentual' ), 'c.id = p.comissionamento_id', array( 'comissao', 'bonus', 'diferimento', 'adiantamento', 'data_inicial', 'data_final' )) ->where('c.excluido<>1') ->where('p.excluido<>1'); $select = $this->_getSelectProducaoAnalitico($dbtable, $columns); $selectRecebimento = $dbtable->getAdapter()->select()->from(array( 'recebimento_contratos' => "tb_recebimento_contratos" ), array( 'recebimento_contratos.*' )) ->joinLeft(array( 'naturezas' => 'tb_tipos' ), "naturezas.codigo = recebimento_contratos.natureza AND naturezas.tipo = 'NATUREZA_BRADESCO'", array( 'natureza_descricao' => 'descricao' )) ->joinLeft(array( 'tipos_remuneracao' => 'tb_tipos' ), "tipos_remuneracao.codigo = recebimento_contratos.tipo_remuneracao AND tipos_remuneracao.tipo = 'TIPO_REMUNERACAO_BONSUCESSO'", array( 'tipo_remuneracao_descricao' => 'descricao' )) ->where('recebimento_contratos.excluido <> 1'); $select->joinLeft(array( 'recebimento_contratos' => $selectRecebimento ), "recebimento_contratos.contrato_id = contratos.id AND recebimento_contratos.excluido <> 1", array()) ->joinLeft(array( 'empresas' => 'tb_empresas' ), 'empresas.id = contratos.empresa_id', array()) ->joinLeft(array( 'comissoes' => $selectComissaoPrevista ), "comissoes.convenio_id = contratos.convenio_id AND comissoes.tabela_id = contratos.tabela_id AND " . "contratos.produto = comissoes.produto AND contratos.prazo = comissoes.prazo AND " . "contratos.data_emissao >= comissoes.data_inicial AND (contratos.data_emissao <= comissoes.data_final OR comissoes.data_final IS NULL)", array()); $this->_prepareFilterSelect($fields, $select); return $dbtable->getAdapter()->fetchRow($select); } public function getRecebimentoBmg(array $fields, $page = null, $limit = null, $order = array( 'corretores.nome', 'contratos.data_liberacao' ), $range = null) { $dbtable = new Model_DbTable_Contrato(); $columns = array( 'contratos.numero_contrato', 'contratos.data_emissao', 'contratos.data_liberacao', 'contratos.prazo', 'contratos.valor_liquido', 'contratos.valor_bruto', 'contratos.corretor_id', 'contratos.base_comissao_empresa_valor', 'empresa' => 'empresas.nome', 'contratos.valor_fixo_empresa', 'recebimento_id' => 'recebimento_contratos.id', 'recebimento_contratos.contrato_id', 'recebimento_contrato' => 'recebimento_contratos.data_recebimento_comissao', 'recebimento_contratos.parcelas', 'recebimento_contratos.rco', 'recebimento_contratos.data_saldo', 'recebimento_contratos.data_recebimento_comissao', 'recebimento_contratos.valor_lancamento', 'comissao_recebida' => 'recebimento_contratos.comissao_empresa', 'recebimento_contratos.descricao', 'contratos.produto', 'natureza' => 'recebimento_contratos.natureza_descricao', 'tipo_remuneracao' => 'recebimento_contratos.tipo_remuneracao_descricao' ); $selectComissaoPrevista = $dbtable->getAdapter()->select()->from(array( 'c' => 'tb_comissionamento' ), array( 'banco_id', 'empresa_id', 'tabela_id', 'convenio_id', 'produto', 'prazo' )) ->joinInner(array( 'p' => 'tb_comissionamento_percentual' ), 'c.id = p.comissionamento_id', array( 'comissao', 'bonus', 'diferimento', 'adiantamento', 'data_inicial', 'data_final' )) ->where('c.excluido<>1') ->where('p.excluido<>1'); $select = $this->_getSelectProducaoAnalitico($dbtable, $columns); $selectRecebimento = $dbtable->getAdapter()->select()->from(array( 'recebimento_contratos' => "tb_recebimento_contratos" ), array( 'recebimento_contratos.*' )) ->joinLeft(array( 'naturezas' => 'tb_tipos' ), "naturezas.id = recebimento_contratos.natureza AND naturezas.tipo = 'NATUREZA_BMG'", array( 'natureza_descricao' => 'descricao' )) ->joinLeft(array( 'tipos_remuneracao' => 'tb_tipos' ), "tipos_remuneracao.id = recebimento_contratos.tipo_remuneracao AND tipos_remuneracao.tipo = 'TIPO_REMUNERACAO_BMG'", array( 'tipo_remuneracao_descricao' => 'descricao' )) ->where('recebimento_contratos.excluido <> 1'); $select->joinLeft(array( 'recebimento_contratos' => $selectRecebimento ), "recebimento_contratos.contrato_id = contratos.id AND recebimento_contratos.excluido <> 1", array()) ->joinLeft(array( 'empresas' => 'tb_empresas' ), 'empresas.id = contratos.empresa_id', array()) ->joinLeft(array( 'comissoes' => $selectComissaoPrevista ), "comissoes.convenio_id = contratos.convenio_id AND comissoes.tabela_id = contratos.tabela_id AND " . "contratos.produto = comissoes.produto AND contratos.prazo = comissoes.prazo AND " . "contratos.data_emissao >= comissoes.data_inicial AND (contratos.data_emissao <= comissoes.data_final OR comissoes.data_final IS NULL)", array( 'comissao_prevista' => 'comissao', 'bonus_previsto' => 'bonus', 'diferimento_previsto' => 'diferimento', 'adiantamento_previsto' => 'adiantamento' )) ->group(array( 'recebimento_contratos.id', 'contratos.id' )); $this->_prepareFilterSelect($fields, $select); if( $order != null ){ $select->order($order); } else { $select->order(array( 'corretores.nome', 'contratos.data_liberacao' )); } if( $page ){ $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($page); if( $limit && is_numeric($limit) ){ $paginator->setItemCountPerPage($limit); } if( $range && is_numeric($range) ){ $paginator->setPageRange($range); } return $paginator; } return $dbtable->getAdapter()->fetchAll($select); } public function getRecebimentoBmgTotalizador(array $fields) { $dbtable = new Model_DbTable_Contrato(); $columns = array( 'total_valor_liquido' => 'SUM(valor_liquido)', 'comissao_recebida' => 'recebimento_contratos.comissao_empresa', 'comissao_prevista' => 'comissoes.comissao', 'total_comissao_recebida' => 'SUM(IF(recebimento_contratos.comissao_empresa IS NULL, 0, (contratos.valor_fixo_empresa+recebimento_contratos.comissao_empresa*base_comissao_empresa_valor/100)))', 'total_comissao_prevista' => 'SUM(IF(comissoes.comissao IS NULL, 0, (contratos.valor_fixo_empresa+comissoes.comissao*base_comissao_empresa_valor/100)))', 'total_adiantamento_previsto' => 'SUM(IF(comissoes.adiantamento IS NULL, 0, (comissoes.adiantamento*base_comissao_empresa_adiantamento/100)))', 'total_bonus_previsto' => 'SUM(IF(comissoes.bonus IS NULL, 0, (comissoes.bonus*base_comissao_empresa_bonus/100)))', ); $selectComissaoPrevista = $dbtable->getAdapter()->select()->from(array( 'c' => 'tb_comissionamento' ), array( 'banco_id', 'empresa_id', 'tabela_id', 'convenio_id', 'produto', 'prazo' )) ->joinInner(array( 'p' => 'tb_comissionamento_percentual' ), 'c.id = p.comissionamento_id', array( 'comissao', 'bonus', 'diferimento', 'adiantamento', 'data_inicial', 'data_final' )) ->where('c.excluido<>1') ->where('p.excluido<>1'); $select = $this->_getSelectProducaoAnalitico($dbtable, $columns); $selectRecebimento = $dbtable->getAdapter()->select()->from(array( 'recebimento_contratos' => "tb_recebimento_contratos" ), array( 'recebimento_contratos.*' )) ->joinLeft(array( 'naturezas' => 'tb_tipos' ), "naturezas.codigo = recebimento_contratos.natureza AND naturezas.tipo = 'NATUREZA_BMG'", array( 'natureza_descricao' => 'descricao' )) ->joinLeft(array( 'tipos_remuneracao' => 'tb_tipos' ), "tipos_remuneracao.codigo = recebimento_contratos.tipo_remuneracao AND tipos_remuneracao.tipo = 'TIPO_REMUNERACAO_BMG'", array( 'tipo_remuneracao_descricao' => 'descricao' )) ->where('recebimento_contratos.excluido <> 1'); $select->joinLeft(array( 'recebimento_contratos' => $selectRecebimento ), "recebimento_contratos.contrato_id = contratos.id AND recebimento_contratos.excluido <> 1", array()) ->joinLeft(array( 'empresas' => 'tb_empresas' ), 'empresas.id = contratos.empresa_id', array()) ->joinLeft(array( 'comissoes' => $selectComissaoPrevista ), "comissoes.convenio_id = contratos.convenio_id AND comissoes.tabela_id = contratos.tabela_id AND " . "contratos.produto = comissoes.produto AND contratos.prazo = comissoes.prazo AND " . "contratos.data_emissao >= comissoes.data_inicial AND (contratos.data_emissao <= comissoes.data_final OR comissoes.data_final IS NULL)", array()); $this->_prepareFilterSelect($fields, $select); return $dbtable->getAdapter()->fetchRow($select); } public function getRelatorioComissaoGerente($fields, $page = null, $limit = null, $order = array( 'data_liberacao' ), $range = null) { $dbtable = new Model_DbTable_Contrato(); $columns = array( 'contratos.numero_contrato', 'contratos.data_emissao', 'contratos.data_liberacao', 'contratos.prazo', 'contratos.valor_liquido', 'contratos.valor_bruto', 'contratos.corretor_id', 'contratos.base_comissao_valor', 'contratos.base_comissao_empresa_valor', 'comissao_prevista' => 'contratos.comissao_empresa', 'cpf_cliente' => 'clientes.cpf', 'cliente' => 'clientes.nome', 'corretor' => 'corretores.prazo_fisico', 'corretor' => 'corretores.nome', 'empresa' => 'empresas.nome', 'convenio' => 'convenios.nome', 'tabela' => 'tabelas.nome', 'status_proposta_nome' => 'status_propostas.descricao', // 'produto' => 'produtos.tipo', 'valor_comissao_gerente' => 'gerentes.valor_comissao' ); $select = $this->_getSelectProducaoAnalitico($dbtable, $columns, true, array( 'valor_comissao_gerente' => 'valor_comissao' )); $select->group(array( 'contratos.id' )); $this->_prepareFilterSelect($fields, $select); if( $order != null ){ $select->order($order); } else { $select->order(array( 'corretores.nome', 'contratos.data_liberacao' )); } if( $page ){ $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($page); if( $limit && is_numeric($limit) ){ $paginator->setItemCountPerPage($limit); } if( $range && is_numeric($range) ){ $paginator->setPageRange($range); } return $paginator; } return $dbtable->getAdapter()->fetchAll($select); } public function getComissaoGerenteTotalizador(array $fields) { $dbtable = new Model_DbTable_Contrato(); $columns = array( 'total_liquido' => 'SUM(valor_liquido)', 'total_comissao_gerente' => 'SUM(IF(gerentes.valor_comissao IS NULL, 0, (contratos.valor_fixo_corretor+contratos.base_comissao_valor*gerentes.valor_comissao/100)))' ); $select = $this->_getSelectProducaoAnalitico($dbtable, $columns, true); $this->_prepareFilterSelect($fields, $select); return $dbtable->getAdapter()->fetchRow($select); } public function getComissaoSupervisor($fields, $page = null, $limit = null, $order = array( 'data_liberacao' ), $range = null) { $dbtable = new Model_DbTable_Contrato(); $columns = array( 'contratos.numero_contrato', 'contratos.data_emissao', 'contratos.data_liberacao', 'contratos.prazo', 'contratos.valor_liquido', 'contratos.valor_bruto', 'contratos.corretor_id', 'contratos.base_comissao_valor', 'contratos.base_comissao_empresa_valor', 'comissao_prevista' => 'contratos.comissao_empresa', 'cpf_cliente' => 'clientes.cpf', 'cliente' => 'clientes.nome', 'corretor' => 'corretores.prazo_fisico', 'corretor' => 'corretores.nome', 'empresa' => 'empresas.nome', 'convenio' => 'convenios.nome', 'tabela' => 'tabelas.nome', 'status_proposta_nome' => 'status_propostas.descricao', 'produto' => 'contratos.tipo', 'valor_comissao_supervisor' => 'gerentes_rotas.valor_comissao', 'valor_comissao_gerente' => 'gerentes.valor_comissao' ); $select = $this->_getSelectProducaoAnalitico($dbtable, $columns, true, array( 'valor_comissao_gerente' => 'valor_comissao' )); $select->group(array( 'contratos.id' )); $this->_prepareFilterSelect($fields, $select); if( $order != null ){ $select->order($order); } else { $select->order(array( 'corretores.nome', 'contratos.data_liberacao' )); } if( $page ){ $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($page); if( $limit && is_numeric($limit) ){ $paginator->setItemCountPerPage($limit); } if( $range && is_numeric($range) ){ $paginator->setPageRange($range); } return $paginator; } return $dbtable->getAdapter()->fetchAll($select); } public function getComissaoSupervisorTotalizador(array $fields) { $dbtable = new Model_DbTable_Contrato(); $columns = array( 'total_valor_liquido' => 'SUM(valor_liquido)', 'total_comissao_supervisor' => 'SUM(gerentes_rotas.valor_comissao)', 'total_valor_supervisor' => 'SUM(IF(gerentes_rotas.valor_comissao IS NULL, 0, (contratos.valor_fixo_corretor+base_comissao_valor*gerentes_rotas.valor_comissao/100)))' ); $select = $this->_getSelectProducaoAnalitico($dbtable, $columns, true); $this->_prepareFilterSelect($fields, $select); return $dbtable->getAdapter()->fetchRow($select); } public function getProducaoGerenteTotalizador(array $fields) { $dbtable = new Model_DbTable_Contrato(); $columns = [ 'total_bruto' => 'SUM(valor_bruto)', 'total_liquido' => 'SUM(valor_liquido)', 'total_base_comissao_empresa' => 'SUM(base_comissao_empresa_valor)', ]; $select = $this->_getSelectProducaoAnalitico($dbtable, $columns, true); $this->_prepareFilterSelect($fields, $select); return $dbtable->getAdapter()->fetchRow($select); } public function getProducaoSupervisor($fields, $page = null, $limit = null, $order = array( 'data_liberacao' ), $range = null) { $dbtable = new Model_DbTable_Contrato(); $columns = array( 'contratos.numero_contrato', 'contratos.data_emissao', 'contratos.data_liberacao', 'contratos.prazo', 'contratos.valor_liquido', 'contratos.valor_bruto', 'contratos.base_comissao_valor', 'contratos.base_comissao_empresa_valor', 'contratos.corretor_id', 'contratos.comissao_empresa', 'contratos.bonus_recebido', 'cpf_cliente' => 'clientes.cpf', 'cliente' => 'clientes.nome', 'corretor' => 'corretores.prazo_fisico', 'corretor' => 'corretores.nome', 'empresa' => 'empresas.nome', 'convenio' => 'convenios.nome', 'tabela' => 'tabelas.nome', 'status_proposta_nome' => 'status_propostas.descricao', 'contratos.tipo', 'banco' => 'bancos.nome', 'contratos.usuario_previa', 'contratos.usuario_previa' ); $select = $this->_getSelectProducaoAnalitico($dbtable, $columns, true, array(), array( 'valor_comissao_supervisor' => 'valor_comissao' )); $select->group(array( 'contratos.id' )); $this->_prepareFilterSelect($fields, $select); if( $order != null ){ $select->order($order); } else { $select->order(array( 'corretores.nome', 'contratos.data_liberacao' )); } if( $page ){ $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($page); if( $limit && is_numeric($limit) ){ $paginator->setItemCountPerPage($limit); } if( $range && is_numeric($range) ){ $paginator->setPageRange($range); } return $paginator; } return $dbtable->getAdapter()->fetchAll($select); } public function getProducaoSupervisorTotalizador(array $fields) { $dbtable = new Model_DbTable_Contrato(); $columns = array( 'total_liquido' => 'SUM(base_comissao_empresa_valor)', ); $select = $this->_getSelectProducaoAnalitico($dbtable, $columns, true); $this->_prepareFilterSelect($fields, $select); return $dbtable->getAdapter()->fetchRow($select); } public function getProducaoGerente($fields, $page = null, $limit = null, $order = array( 'data_liberacao' ), $range = null) { $this->validFieldsFilter($fields); $dbtable = new Model_DbTable_Contrato(); $columns = [ 'contratos.numero_contrato', 'contratos.data_emissao', 'contratos.data_liberacao', 'contratos.prazo', 'contratos.valor_liquido', 'contratos.valor_bruto', 'contratos.corretor_id', 'contratos.base_comissao_valor', 'comissao_prevista' => 'contratos.comissao_empresa', 'cpf_cliente' => 'clientes.cpf', 'cliente' => 'clientes.nome', 'prazo_fisico' => 'corretores.prazo_fisico', 'corretor' => 'corretores.nome', 'empresa' => 'empresas.nome', 'convenio' => 'convenios.nome', 'tabela' => 'tabelas.nome', 'status_proposta_nome' => 'status_propostas.descricao', 'contratos.tipo', 'banco' => 'bancos.nome', // 'produto_descricao' => 'produtos.descricao' ]; $select = $this->_getSelectProducaoAnalitico($dbtable, $columns, true, array(), array( 'valor_comissao_gerente' => 'valor_comissao', 'gerente' => 'nome' )); $select->group(array( 'contratos.id' )); $this->_prepareFilterSelect($fields, $select); if( $order != null ){ $select->order($order); } else { $select->order(array( 'corretores.nome', 'contratos.data_liberacao' )); } if( $page ){ $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($page); if( $limit && is_numeric($limit) ){ $paginator->setItemCountPerPage($limit); } if( $range && is_numeric($range) ){ $paginator->setPageRange($range); } return $paginator; } return $dbtable->getAdapter()->fetchAll($select); } protected function _prepareFilterSelect(array $fields, Zend_Db_Select &$select) { if( count($fields) <= 0 ){ throw new Core_Exception('Atenção! Você deve informar pelo menos uma opção de busca.'); } if( isset($fields['idade']) && !empty($fields['idade']) ){ $date = String_Refatorar::calcularIdade($fields['idade']); if( $date ){ $select->where("clientes.data_nascimento IS NOT NULL AND YEAR(clientes.data_nascimento) = {$date}"); } } if (!empty($fields['idade_inicial']) && !empty($fields['idade_final'])) { $select->where("contratos.idade_cliente >= {$fields['idade_inicial']}"); $select->where("contratos.idade_cliente <= {$fields['idade_final']}"); } if( !empty($fields['tipo_lancamento']) ){ $tipoLancamento = $fields['tipo_lancamento']; if( $tipoLancamento == 1 ){ $select->where("recebimento_contratos.valor_lancamento >= 0"); } if( $tipoLancamento == 2 ){ $select->where("recebimento_contratos.valor_lancamento < 0"); } } if(isset($fields['usuario_grupo_previa']) && !empty($fields['usuario_grupo_previa'])){ $model = new Model_GrupoUsuario(); $grupoUsuario = $model->exibir($fields['usuario_grupo_previa']); switch ( $grupoUsuario['nome'] ) { case "Corretor": $select->joinLeft(array('corretores_previa' => 'tb_corretores'), 'contratos.usuario_previa = corretores_previa.id', array('usuario_previa_nome' => 'corretores_previa.nome')); break; case "Supervisor": $select->joinLeft(array('supervisores_previa' => 'tb_gerente_rota'), 'contratos.usuario_previa = supervisores_previa.id', array('usuario_previa_nome' => 'supervisores_previa.nome')); break; case "Gerente Regional": $select->joinLeft(array('gerentes_previa' => 'tb_gerentes'), 'contratos.usuario_previa = gerentes_previa.id', array('usuario_previa_nome' => 'gerentes_previa.nome')); break; default : $select->joinLeft(array('outros_previa' => 'tb_usuarios'), 'contratos.usuario_previa = outros_previa.id', array('usuario_previa_nome' => 'outros_previa.nome')); break; } } Core_Filters::_prepareFilterSelectContrato($fields, $select); Core_Filters::_prepareFilterContrato($fields, $select); if (Yuppie_Auth::getIdentity()) { $bancosAtribuidos = (new Model_CorretorBancosAtribuidos())->listar('usuario_id = ' . Yuppie_Auth::getIdentity()->id); if ($bancosAtribuidos) { $select->where("contratos.banco_id IN (" . implode(",", array_map(function($banco) { return $banco['banco_id']; }, $bancosAtribuidos)) . ")"); } } //verifica as permissoes $ns = new Zend_Session_Namespace(); if( !$ns->acl->isAllowed(Yuppie_Auth::getIdentity()->grupo, 'visualizar-contratos-filiais') ){ $select->where('contratos.empresa_id = ' . Yuppie_Auth::getIdentity()->empresa_id); } //exibe os contratos de cartão, caso esteja com a permissão setada e tenha passado por parametro o cartao_corretor. if( !$ns->acl->isAllowed(Yuppie_Auth::getIdentity()->grupo, 'permitir-exibir-cartao') && !isset($fields['cartao_corretor']) ){ $select->where('contratos.cartao <> 1'); } if (Yuppie_Auth::getIdentity()->grupo == 'Supervisor') { if( !array_key_exists('corretores', $select->getPart(Zend_Db_Select::FROM)) ){ $select->joinLeft(array( 'corretores' => 'tb_corretores' ), 'corretores.id = contratos.corretor_id', array()); } if( !array_key_exists('rotas', $select->getPart(Zend_Db_Select::FROM)) ){ $select->joinLeft(array( 'rotas' => 'tb_rotas' ), 'corretores.rota_id = rotas.id', array()); } $select->where('rotas.gerente_id = ' . Yuppie_Auth::getIdentity()->id); } elseif ( Yuppie_Auth::getIdentity()->grupo == 'Gerente Regional' ){ if( !array_key_exists('rotas', $select->getPart(Zend_Db_Select::FROM)) ){ $select->joinLeft(array( 'rotas' => 'tb_rotas' ), 'corretores.rota_id = rotas.id', array()); } if( !array_key_exists('supervisores', $select->getPart(Zend_Db_Select::FROM)) ){ $select->joinLeft(array( 'supervisores' => 'tb_gerente_rota' ), 'supervisores.id = rotas.gerente_id', array()); } $select->where('supervisores.gerente_id = ' . Yuppie_Auth::getIdentity()->id); } elseif ( Yuppie_Auth::getIdentity()->grupo == 'Corretor' || Yuppie_Auth::getIdentity()->grupo == 'Afiliado' ){ $select->where('corretores.id = ' . Yuppie_Auth::getIdentity()->id); //caso não tenha a permissao de visualizar-corretores-callcenter exibira os clientes do usuário que tenha corretor no seu cadastro } elseif (Yuppie_Auth::getIdentity()->grupo == 'Indicador') { $select->where('corretores.indicador_id = ' . Yuppie_Auth::getIdentity()->id); } elseif ( Yuppie_Auth::getIdentity()->corretor_id > 0 && !$ns->acl->isAllowed(Yuppie_Auth::getIdentity()->grupo, 'visualizar-corretores-callcenter') ){ $select->where('corretores.id = ' . Yuppie_Auth::getIdentity()->corretor_id); } } protected function _getSelectProducaoAnalitico(Model_DbTable_Contrato $dbtable, array $columns, $extra = false, $gerentesCols = array(), $gerentesRotasCols = array()) { $select = $dbtable->getAdapter()->select()->from(array( 'contratos' => 'tb_contratos' ), array()) ->columns($columns) ->joinInner(array( "clientes" => "tb_clientes" ), "contratos.cliente_id = clientes.id", array( 'cliente' => 'nome', 'cpf_cliente' => 'cpf', 'dt_nascimento_cliente' => 'clientes.data_nascimento', 'endereco_cliente' => 'clientes.endereco', 'bairro_cliente' => 'clientes.bairro', 'cidade_cliente' => 'clientes.cidade', 'uf_cliente' => 'clientes.uf', 'celular_cliente' => 'clientes.celular', 'fone_cliente' => 'clientes.fone' )) ->joinInner(array( "corretores" => "tb_corretores" ), "contratos.corretor_id = corretores.id", array( 'corretor' => 'nome', 'corretor_uf' => 'corretores.uf', 'prazo_fisico' => 'IF(corretores_prazos.id IS NOT NULL, corretores_prazos.prazo, corretores.prazo_fisico)', 'grupo_comissao')) ->joinLeft(["indicadores" => "tb_corretores"], "corretores.indicador_id = indicadores.id", ['indicador' => 'nome']) ->joinLeft(["captadores" => "tb_corretores"], "contratos.captador_id = captadores.id", ['captador' => 'nome']) ->joinLeft(array( "corretores_prazos" => "tb_corretores_prazos" ), "contratos.corretor_id = corretores_prazos.corretor_id AND contratos.banco_id = corretores_prazos.banco_id AND corretores_prazos.excluido<>1", array()) ->joinLeft(array( 'bancos' => 'tb_bancos' ), "bancos.id = contratos.banco_id", array( 'banco' => 'nome', 'notificar_atraso' )) ->joinLeft(array( 'convenios' => 'tb_convenios' ), "convenios.id = contratos.convenio_id", array( 'convenio' => 'nome' )) ->joinLeft(array( 'tabelas' => 'tb_tabelas' ), "tabelas.id = contratos.tabela_id", array( 'tabela' => 'nome', 'informacao_adicional', 'codigo_tabela' => 'tabelas.codigo' )) ->joinLeft(array( 'status_propostas' => 'tb_tipos' ), 'contratos.status_proposta = status_propostas.id', array( 'status_proposta_nome' => 'descricao' )) ->joinLeft(array( 'subestabelecidos' => 'tb_empresas' ), 'contratos.subestabelecido_id = subestabelecidos.id', array( 'subestabelecido_codigo' => 'codigo_promotora', 'subestabelecido_nome' => 'subestabelecidos.nome' )) ->joinLeft(array( 'midias_origem' => 'tb_tipos' ), 'contratos.midia_origem_id = midias_origem.id', array( 'midia_origem' => 'midias_origem.descricao' )) ->where("contratos.excluido<>1") ->where("contratos.tipo_registro = 1") ->where("clientes.excluido<>1"); if($extra){ $select->joinLeft(array( 'empresas' => 'tb_empresas' ), 'empresas.id = contratos.empresa_id', array()) ->joinLeft(array( 'rotas' => 'tb_rotas' ), 'corretores.rota_id = rotas.id', array()) // ->joinLeft(['produtos' => 'tb_produtos'], 'produtos.codigo = contratos.produto AND produtos.banco_id = contratos.banco_id AND produtos.tipo = contratos.tipo AND produtos.excluido <> 1', []) ->joinLeft(array( 'gerentes_rotas' => 'tb_gerente_rota' ), 'rotas.gerente_id = gerentes_rotas.id', $gerentesRotasCols) ->joinLeft(array( 'gerentes' => 'tb_gerentes' ), 'gerentes_rotas.gerente_id = gerentes.id', $gerentesCols); } return $select; } protected function _getSelectRecebimentoComissao(Model_DbTable_Contrato $dbtable, array $columns) { $select = $dbtable->getAdapter()->select()->from(array( 'contratos' => 'tb_contratos' ), array()) ->columns($columns) ->joinInner(array( "clientes" => "tb_clientes" ), "contratos.cliente_id = clientes.id", array('cliente' => 'nome', 'cpf_cliente' => 'cpf')) ->joinInner(array( 'corretores' => 'tb_corretores' ), "contratos.corretor_id = corretores.id", array('corretor' => 'nome', 'prazo_fisico' => 'IF(corretores_prazos.id IS NOT NULL, corretores_prazos.prazo, corretores.prazo_fisico)' )) ->joinInner(array( 'rotas' => 'tb_rotas' ), "corretores.rota_id = rotas.id", ['rota' => 'nome']) ->joinInner(array( 'supervisores' => 'tb_gerente_rota' ), "rotas.gerente_id = supervisores.id", ['supervisor' => 'nome']) ->joinLeft(array( 'corretores_prazos' => 'tb_corretores_prazos' ), "contratos.corretor_id = corretores_prazos.corretor_id AND contratos.banco_id = corretores_prazos.banco_id AND corretores_prazos.excluido<>1", array()) ->joinLeft(array( 'bancos' => 'tb_bancos' ), "bancos.id = contratos.banco_id", array('banco' => 'nome')) ->joinLeft(array( 'convenios' => 'tb_convenios' ), "convenios.id = contratos.convenio_id", array('convenio' => 'nome' )) ->joinLeft(array( 'tabelas' => 'tb_tabelas' ), "tabelas.id = contratos.tabela_id", array('tabela' => 'nome')) ->joinLeft(array( 'status_propostas' => 'tb_tipos' ), 'contratos.status_proposta = status_propostas.id', array('status_proposta_nome' => 'descricao' )) //->joinLeft(array( 'recebimento_contratos' => "tb_recebimento_contratos" ), "recebimento_contratos.contrato_id = contratos.id", array()) // ->joinLeft(array( 'produtos' => 'tb_produtos' ), 'produtos.codigo = contratos.produto AND produtos.tipo = contratos.tipo', array('produto' => "CONCAT(produtos.codigo, ' (', produtos.tipo, ')')")) ->joinLeft(['indicadores' => 'tb_corretores'], 'indicadores.id = corretores.indicador_id', ['indicador' => 'nome']) ->where("contratos.excluido<>1") ->where("contratos.tipo_registro = 1") ->where("clientes.excluido<>1"); return $select; } protected function _getSelectContratos(Model_DbTable_Contrato $dbtable, array $columns) { $select = $dbtable->getAdapter()->select()->from(array( 'contratos' => 'tb_contratos' ), array()) ->columns($columns) ->joinInner(array( 'clientes' => 'tb_clientes' ), "contratos.cliente_id = clientes.id", array()) ->joinLeft(array( 'corretores' => 'tb_corretores' ), "contratos.corretor_id = corretores.id", array('prazo_fisico' => 'IF(corretores_prazos.id IS NOT NULL, corretores_prazos.prazo, corretores.prazo_fisico)')) ->joinLeft(array( 'corretores_prazos' => 'tb_corretores_prazos' ), "contratos.corretor_id = corretores_prazos.corretor_id AND contratos.banco_id = corretores_prazos.banco_id AND corretores_prazos.excluido<>1", array()) ->joinLeft(array( 'bancos' => 'tb_bancos' ), "bancos.id = contratos.banco_id", array()) ->joinLeft(array( 'convenios' => 'tb_convenios' ), "convenios.id = contratos.convenio_id", array()) ->joinLeft(array( 'tabelas' => 'tb_tabelas' ), "tabelas.id = contratos.tabela_id", array()) ->joinLeft(array( 'status_propostas' => 'tb_tipos' ), 'contratos.status_proposta = status_propostas.id', array()) ->where("contratos.excluido<>1") ->where("contratos.tipo_registro = 1") ->where("clientes.excluido<>1"); return $select; } public function getProducaoSintetico(array $fields, $page = null, $limit = null, $range = null) { $dbtable = new Model_DbTable_Contrato(); $columns = [ 'contratos.corretor_id', 'total_contratos' => 'COUNT(DISTINCT contratos.id)', 'total_tabelas' => 'COUNT(DISTINCT contratos.tabela_id)', 'total_liquido' => 'SUM(contratos.valor_liquido)', 'total_bruto' => 'SUM(contratos.valor_bruto)', 'base_comissao_valor' => 'SUM(base_comissao_valor)', 'total_comissao' => 'SUM(contratos.valor_fixo_corretor+(contratos.base_comissao_valor*contratos.comissao_corretor/100))', 'total_empresa' => 'SUM(contratos.valor_fixo_empresa+(contratos.base_comissao_empresa_valor*contratos.comissao_empresa/100))', 'total_adiantamento_empresa' => 'SUM(contratos.base_comissao_empresa_adiantamento*contratos.adiantamento_comissao_empresa/100)', 'total_base_comissao_empresa' => 'SUM(contratos.base_comissao_empresa_valor)' ]; $select = $dbtable->getSelectProducaoSintetico($columns, ['base_comissao_valor DESC']); $this->_prepareFilterSelect($fields, $select); if( $page ){ $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($page); if( $limit && is_numeric($limit) ){ $paginator->setItemCountPerPage($limit); } if( $range && is_numeric($range) ){ $paginator->setPageRange($range); } return $paginator; } return $dbtable->getAdapter()->fetchAll($select); } public function getProducaoSinteticoTotalizador(array $fields) { $dbtable = new Model_DbTable_Contrato(); $select = $this->_getSelectProducaoAnalitico($dbtable, array( 'total_liquido' => 'SUM(valor_liquido)', 'total_bruto' => 'SUM(valor_bruto)', 'base_comissao_valor' => 'SUM(base_comissao_valor)', 'total_comissao_corretor' => 'SUM(IF(comissao_corretor IS NULL, 0, (contratos.valor_fixo_corretor+base_comissao_valor*comissao_corretor/100)))', 'total_base_comissao_empresa' => 'SUM(contratos.base_comissao_empresa_valor)', 'total_empresa' => 'SUM(contratos.valor_fixo_empresa+(IF(contratos.comissao_empresa IS NULL, 0, contratos.base_comissao_empresa_valor*contratos.comissao_empresa/100)))', 'total_adiantamento_empresa' => 'SUM(IF(contratos.adiantamento_comissao_empresa IS NULL, 0, contratos.base_comissao_empresa_adiantamento*contratos.adiantamento_comissao_empresa/100))', )); $this->_prepareFilterSelect($fields, $select); return $dbtable->getAdapter()->fetchRow($select); } public function getProducaoFormalizacao(array $fields, $order = 'corretor_id', $page = null, $limit = null, $range = null) { $this->validFieldsFilter($fields); $dbtable = new Model_DbTable_Contrato(); $select = $this->_getSelectProducaoAnalitico($dbtable, array( 'contratos.numero_contrato', 'contratos.tipo', 'contratos.prazo', 'contratos.valor_bruto', 'contratos.data_recebimento_fisico', 'contratos.valor_liquido', 'contratos.corretor_id', 'contratos.comissao_empresa', 'contratos.base_comissao_empresa_valor', 'contratos.base_comissao_valor', 'contratos.bonus_recebido', 'contratos.comissao_corretor', 'contratos.bonus_corretor', 'contratos.bonus_empresa', 'contratos.adiantamento_comissao_empresa', 'contratos.bordero_newspace', 'contratos.numero_envelope', 'contratos.data_envio_fisico', 'cliente' => 'clientes.nome', 'cpf_cliente' => 'clientes.cpf', 'corretor' => 'corretores.nome', 'contratos.digitador', 'contratos.usuario_previa', 'contratos.usuario_grupo_previa', 'banco' => 'bancos.nome', 'status_proposta_nome' => 'status_propostas.descricao' )); $select->joinLeft(array( 'usuarios' => "tb_usuarios" ), "usuarios.id = contratos.usuario_formalizacao", array( 'formalizacao' => 'nome' )) ->joinLeft(array( 'usuarios2' => "tb_usuarios" ), "usuarios2.id = contratos.usuario_recebimento", array( 'usuario_recebimento' => 'nome' )) ->joinLeft(array('grupos_usuarios' => 'tb_grupos_usuarios'), 'contratos.usuario_grupo_previa = grupos_usuarios.id', array('grupo_usuario' => 'grupos_usuarios.nome')) ->joinLeft(array( 'tabela' => 'tb_tabelas' ), 'contratos.tabela_id = tabela.id', array( 'tabela' => 'nome' )) ->group(array( 'contratos.id' )); $this->_prepareFilterSelect($fields, $select); if( $order != null ){ $select->order($order); } else { $select->order(array( 'corretores.nome', 'contratos.data_liberacao' )); } if( $page ){ $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($page); if( $limit && is_numeric($limit) ){ $paginator->setItemCountPerPage($limit); } if( $range && is_numeric($range) ){ $paginator->setPageRange($range); } return $paginator; } return $dbtable->getAdapter()->fetchAll($select); } /** * Exibe os últimos 300 contratos que ainda não possuem físico recebido * @param array $fields * @param string|array $order * @return \rowsetClass */ public function getFisicosReceber($fields, $order = array( 'id DESC', 'corretores.id ASC', 'numero_contrato ASC' ), $limit = 998) { /** @var Service_Filter $filter */ $filter = service('filter'); $params = [ "clientes.excluido <> 1", "contratos.tipo_registro = 1", "contratos.excluido<>1", "(data_recebimento_fisico IS NULL OR data_recebimento_fisico = '0000-00-00')", "contratos.tipo_formalizacao <> 1" //retira os contatos do tipo digital ]; $dbtable = new Model_DbTable_Contrato(); $select = $dbtable->getAdapter()->select()->from(array( 'contratos' => 'tb_contratos' ), array( 'contratos.*' )) ->joinInner(array( 'clientes' => 'tb_clientes' ), "contratos.cliente_id = clientes.id", array( 'cliente' => 'nome', 'cpf' )) ->joinLeft(array( 'corretores' => 'tb_corretores' ), "contratos.corretor_id = corretores.id", array( 'corretor' => 'nome' )) ->joinLeft(array( 'convenios' => 'tb_convenios' ), "contratos.convenio_id = convenios.id", array( 'convenio' => 'nome' )) ->joinLeft(array( 'tabelas' => 'tb_tabelas' ), "contratos.tabela_id = tabelas.id", array( 'tabela' => 'nome' )) ->joinLeft(array( 'bancos' => 'tb_bancos' ), "contratos.banco_id = bancos.id", array( 'banco' => 'nome' )) ->joinLeft(array( 'rotas' => 'tb_rotas' ), "corretores.rota_id = rotas.id", array( 'rota' => 'nome' )) ->joinLeft(array( 'supervisores' => 'tb_gerente_rota' ), "rotas.gerente_id = supervisores.id", array( 'supervisor' => 'nome' )) ->joinLeft(array( 'tb_status_proposta' => 'tb_tipos' ), "contratos.status_proposta = tb_status_proposta.id", array( 'status_proposta_nome' => 'descricao' )); if( Yuppie_Auth::getIdentity()->grupo == "Supervisor" ){ $params[] = "rotas.gerente_id = " . Yuppie_Auth::getIdentity()->id; } elseif( Yuppie_Auth::getIdentity()->grupo == "Gerente Regional" ){ $params[] = "supervisores.gerente_id = " . Yuppie_Auth::getIdentity()->id; } elseif( Yuppie_Auth::getIdentity()->grupo == "Corretor" ){ $params[] = "corretores.id = " . Yuppie_Auth::getIdentity()->id; } if( isset($fields['data_emissao_de']) && !empty($fields['data_emissao_de']) && isset($fields['data_emissao_a']) && !empty($fields['data_emissao_a']) ){ $params[] = "(data_emissao >= STR_TO_DATE('" . $fields['data_emissao_de'] . "', '%d/%m/%Y') AND " . " data_emissao <= STR_TO_DATE('" . $fields['data_emissao_a'] . "', '%d/%m/%Y'))"; } if( isset($fields['data_liberacao_de']) && !empty($fields['data_liberacao_de']) && isset($fields['data_liberacao_a']) && !empty($fields['data_liberacao_a']) ){ $params[] = "(data_liberacao >= STR_TO_DATE('" . $fields['data_liberacao_de'] . "', '%d/%m/%Y') AND " . " data_liberacao <= STR_TO_DATE('" . $fields['data_liberacao_a'] . "', '%d/%m/%Y'))"; } if (isset($fields['numero_contrato']) && !empty($fields['numero_contrato'])) { $filterContrato = $filter->getOneOrMultiWhere( $fields['numero_contrato'], 'contratos.numero_contrato', true ); $params[] = ("(" . $filterContrato . ")"); } if (isset($fields['numero_ade']) && !empty($fields['numero_ade'])) { $params[] = $filter->getOneOrMultiWhere($fields['numero_ade'], 'contratos.numero_ade'); } if( isset($fields['cpf_cliente']) && !empty($fields['cpf_cliente']) ){ $params[] = "clientes.cpf = '" . String_Refatorar::formatarCpf($fields['cpf_cliente']) . "'"; } if( isset($fields['empresa_id']) && !empty($fields['empresa_id']) ){ $params[] = "contratos.empresa_id = " . $fields['empresa_id']; } if( isset($fields['corretor_id']) && !empty($fields['corretor_id']) ){ $params[] = "corretores.id = " . $fields['corretor_id']; } if( isset($fields['status_proposta']) && !empty($fields['status_proposta']) ){ if( is_array($fields['status_proposta']) ){ $fields['status_proposta'] = array_filter($fields['status_proposta']); $params[] = "contratos.status_proposta IN ('" . implode("','", $fields['status_proposta']) . "')"; } else { $params[] = "contratos.status_proposta = " . $fields['status_proposta']; } } if( isset($fields['banco_id']) && !empty($fields['banco_id']) ){ $params[] = "contratos.banco_id = " . $fields['banco_id']; } if( isset($fields['convenio_id']) && !empty($fields['convenio_id']) ){ $params[] = "contratos.convenio_id = " . $fields['convenio_id']; } if( isset($fields['supervisor_id']) && !empty($fields['supervisor_id']) ){ $params[] = "rotas.gerente_id = " . $fields['supervisor_id']; } if( isset($fields['rota_id']) && !empty($fields['rota_id']) ){ $params[] = "rotas.id = " . $fields['rota_id']; } if( isset($fields['uf_corretor']) && !empty($fields['uf_corretor']) ){ $params[] = "corretores.uf = '" . $fields['uf_corretor'] . "'"; } if( isset($fields['data_recebimento_previa_de']) && !empty($fields['data_recebimento_previa_de']) ){ $params[] = "(data_recebimento_previa >= STR_TO_DATE('" . $fields['data_recebimento_previa_de'] . "', '%d/%m/%Y'))"; } if( isset($fields['data_recebimento_previa_a']) && !empty($fields['data_recebimento_previa_a']) ){ $params[] = "(data_recebimento_previa <= STR_TO_DATE('" . $fields['data_recebimento_previa_a'] . "', '%d/%m/%Y'))"; } if( isset($fields['tipo_contrato']) && !empty($fields['tipo_contrato']) ){ if( is_array($fields['tipo_contrato']) ){ $fields['tipo_contrato'] = array_filter($fields['tipo_contrato']); $params[] = ("contratos.tipo IN ('" . implode("','", $fields['tipo_contrato']) . "')"); } else { $params[] = ("contratos.tipo = '" . $fields['tipo_contrato'] . "'"); } } if( isset($fields['cod_barras']) && !empty($fields['cod_barras']) ){ $corretorId = (int) substr($fields['cod_barras'], 0, strlen($fields['cod_barras']) - 10); $timestampDataPrevia = trim(substr($fields['cod_barras'], strlen($fields['cod_barras']) - 10, 10)); $dataPrevia = new Zend_Date($timestampDataPrevia, Zend_Date::TIMESTAMP); $params[] = "corretores.id = {$corretorId}"; $params[] = "data_recebimento_previa = '{$dataPrevia->get('yyyy-MM-dd')}'"; } if( !empty($fields['bordero_corretor']) ){ $select->joinLeft(array("contratos_bordero" => "tb_contrato_bordero"), "contratos_bordero.numero_contrato = contratos.numero_contrato", array()) ->joinLeft(array("borderos" => "tb_bordero"), "contratos_bordero.bordero_id = borderos.id", array()); $select->where("borderos.num_cod_barras = ?", ltrim($fields['bordero_corretor']), '0') ->where("contratos_bordero.status = 'Validado'") ->where("borderos.status = 'Validado'"); } $where = implode(" AND ", $params); $select->where($where) ->order($order) ->limit($limit) ->group("contratos.id"); $data = array( 'table' => $dbtable, 'rowClass' => $dbtable->getRowClass(), 'stored' => true, 'data' => $dbtable->getAdapter()->fetchAll($select) ); $rowsetClass = $dbtable->getRowsetClass(); return new $rowsetClass($data); } public function receberFisicos($contratoId, $dataRecebimento, $obsRecebimento, $protocolo, $numeroContrato = null) { if( !empty($dataRecebimento) ){ try { $data = new Zend_Date($dataRecebimento, Zend_Date::DATES, 'pt'); $dataRecebimento = $data->toString('yyyy-MM-dd'); } catch ( Zend_Date_Exception $e ) { echo $e->getMessage(); $dataRecebimento = null; } } else { $dataRecebimento = null; } if( $contratoId > 0 && $dataRecebimento != null ){ $dbtable = new Model_DbTable_Contrato(); return $dbtable->baixarRecebimentoFisico($contratoId, $dataRecebimento, $obsRecebimento, $protocolo); } return null; } /** * Verifica se existe o número de protocolo registrado para outro corretor * @param int $corretorId * @param int $protocolo * @return boolean */ public function existeProtocoloRecebimentoOutroCorretor($corretorId, $protocolo) { $dbtable = new Model_DbTable_Contrato(); if( $dbtable->fetchRow("protocolo_recebimento_fisico = '{$protocolo}' AND corretor_id <> {$corretorId} ") ){ return true; } return false; } /** * Verifica se existe o número de protocolo no contrato * @param int $contratoId * @param int $protocolo * @return boolean */ public function existeProtocoloContrato($contratoId) { $dbtable = new Model_DbTable_ProtocoloContrato(); return $dbtable->fetchAll("contrato_id = {$contratoId} "); } public function existeProtocoloContratoDiferimento($contratoId) { $dbtable = new Model_DbTable_ProtocoloContrato(); return $dbtable->fetchAll("contrato_id = {$contratoId} AND situacao LIKE 'Diferimento'"); } public function getFisicosEnviar($fields, $order = 'corretor_id') { $params = [ "contratos.excluido <> 1 AND contratos.tipo_registro = 1 AND (data_envio_fisico IS NULL OR data_envio_fisico = '0000-00-00') AND contratos.tipo_formalizacao <> 1" ]; if( isset($fields['data_emissao_de']) && !empty($fields['data_emissao_de']) && isset($fields['data_emissao_a']) && !empty($fields['data_emissao_a']) ){ $params[] = "(data_emissao >= STR_TO_DATE('" . $fields['data_emissao_de'] . "', '%d/%m/%Y') AND " . " data_emissao <= STR_TO_DATE('" . $fields['data_emissao_a'] . "', '%d/%m/%Y'))"; } if( isset($fields['data_liberacao_de']) && !empty($fields['data_liberacao_de']) && isset($fields['data_liberacao_a']) && !empty($fields['data_liberacao_a']) ){ $params[] = "(data_liberacao >= STR_TO_DATE('" . $fields['data_liberacao_de'] . "', '%d/%m/%Y') AND " . " data_liberacao <= STR_TO_DATE('" . $fields['data_liberacao_a'] . "', '%d/%m/%Y'))"; } if( isset($fields['cpf_cliente']) && !empty($fields['cpf_cliente']) ){ $params[] = "clientes.cpf = '" . String_Refatorar::formatarCpf($fields['cpf_cliente']) . "'"; } if( isset($fields['empresa_id']) && !empty($fields['empresa_id']) ){ $params[] = "contratos.empresa_id = " . $fields['empresa_id']; } if( isset($fields['corretor_id']) && !empty($fields['corretor_id']) ){ $params[] = "corretor_id = " . $fields['corretor_id']; } if( isset($fields['numero_contrato']) && !empty($fields['numero_contrato']) ){ $fields['numero_contrato'] = addslashes($fields['numero_contrato']); $params[] = ("(contratos.numero_contrato = '" . $fields['numero_contrato'] . "' OR contratos.numero_contrato LIKE '" . $fields['numero_contrato'] . "%')"); } if( isset($fields['numero_ade']) && !empty($fields['numero_ade']) ){ $fields['numero_ade'] = addslashes($fields['numero_ade']); $params[] = "numero_ade = '" . $fields['numero_ade'] . "'"; } if( isset($fields['banco_id']) && !empty($fields['banco_id']) ){ $params[] = "banco_id = " . $fields['banco_id']; } if( isset($fields['protocolo_recebimento_fisico']) && !empty($fields['protocolo_recebimento_fisico']) ){ $params[] = "protocolo_recebimento_fisico = " . $fields['protocolo_recebimento_fisico']; } if( isset($fields['status_proposta']) && !empty($fields['status_proposta']) ){ if( is_array($fields['status_proposta']) ){ $params[] = "status_proposta IN (" . implode(", ", $fields['status_proposta']) . ")"; } else { $params[] = "status_proposta = " . $fields['status_proposta']; } } if( isset($fields['menos_status_proposta']) && !empty($fields['menos_status_proposta']) ){ $params[] = "(status_proposta <> " . implode(" AND status_proposta <> ", $fields['menos_status_proposta']) . ")"; } if( isset($fields['fisico_recebido']) && !empty($fields['fisico_recebido']) ){ if( $fields['fisico_recebido'] == "RECEBIDO" ){ $params[] = ("(contratos.data_recebimento_fisico IS NOT NULL AND contratos.data_recebimento_fisico <> '0000-00-00')"); } elseif( $fields['fisico_recebido'] == "EM TRANSITO" ){ $params[] = ("(contratos.data_recebimento_fisico IS NULL OR contratos.data_recebimento_fisico = '0000-00-00')"); $params[] = ("previa_recebimento = 1"); } else { $params[] = ("previa_recebimento <> 1"); $params[] = ("(contratos.data_recebimento_fisico IS NULL OR contratos.data_recebimento_fisico = '0000-00-00')"); } } if( isset($fields['rota_id']) && !empty($fields['rota_id']) ){ $params[] = ("corretores.rota_id = " . $fields['rota_id']); } if( isset($fields['convenio_id']) && !empty($fields['convenio_id']) ){ $params[] = ("contratos.convenio_id = " . $fields['convenio_id']); } if( isset($fields['data_recebimento_fisico_de']) && !empty($fields['data_recebimento_fisico_de']) && isset($fields['data_recebimento_fisico_a']) && !empty($fields['data_recebimento_fisico_a']) ){ $params[] = ("(data_recebimento_fisico >= STR_TO_DATE('" . $fields['data_recebimento_fisico_de'] . "', '%d/%m/%Y')" . " AND data_recebimento_fisico <= STR_TO_DATE('" . $fields['data_recebimento_fisico_a'] . "', '%d/%m/%Y'))"); } if( isset($fields['data_recebimento_previa_de']) && !empty($fields['data_recebimento_previa_de']) && isset($fields['data_recebimento_previa_a']) && !empty($fields['data_recebimento_previa_a']) ){ $params[] = ("(data_recebimento_previa >= STR_TO_DATE('" . $fields['data_recebimento_previa_de'] . "', '%d/%m/%Y')" . " AND data_recebimento_previa <= STR_TO_DATE('" . $fields['data_recebimento_previa_a'] . "', '%d/%m/%Y'))"); } if( isset($fields['data_agendamento_proposta_de']) && !empty($fields['data_agendamento_proposta_de']) && isset($fields['data_agendamento_proposta_a']) && !empty($fields['data_agendamento_proposta_a']) ){ $params[] = ("(data_agendamento_proposta >= STR_TO_DATE('" . $fields['data_agendamento_proposta_de'] . "', '%d/%m/%Y')" . " AND data_agendamento_proposta <= STR_TO_DATE('" . $fields['data_agendamento_proposta_a'] . "', '%d/%m/%Y'))"); } if( isset($fields['produto']) && !empty($fields['produto']) ){ $params[] = ("contratos.produto LIKE '%" . $fields['produto'] . "%'"); } if( isset($fields['tipo_contrato']) && !empty($fields['tipo_contrato']) ){ if( is_array($fields['tipo_contrato']) ){ $fields['tipo_contrato'] = array_filter($fields['tipo_contrato']); $params[] = ("contratos.tipo IN ('" . implode("','", $fields['tipo_contrato']) . "')"); } else { $params[] = ("contratos.tipo = '" . $fields['tipo_contrato'] . "'"); } } $where = implode(" AND ", $params); $dbtable = new Model_DbTable_Contrato(); $select = $dbtable->getAdapter()->select()->from(array( 'contratos' => 'tb_contratos' ), array( 'contratos.*' )) ->joinInner(array( 'clientes' => 'tb_clientes' ), "contratos.cliente_id = clientes.id", array( 'cliente' => 'nome', 'cpf' )) ->joinLeft(array( 'corretores' => 'tb_corretores' ), "contratos.corretor_id = corretores.id", array( 'corretor' => 'nome' )) ->joinLeft(array( 'convenios' => 'tb_convenios' ), "contratos.convenio_id = convenios.id", array( 'convenio' => 'nome' )) ->joinLeft(array( 'tb_status_proposta' => 'tb_tipos' ), "contratos.status_proposta = tb_status_proposta.id", array( 'status_proposta_nome' => 'descricao' )) ->where($where) ->order($order) ->limit(990); $data = array( 'table' => $dbtable, 'rowClass' => $dbtable->getRowClass(), 'stored' => true, 'data' => $dbtable->getAdapter()->fetchAll($select) ); $rowsetClass = $dbtable->getRowsetClass(); return new $rowsetClass($data); } public function enviarFisicos($contratoId, $dataEnvio, $obsEnvio, $bordero, $envelope, $protocolo, $baixarRecebimento = true, $usuarioFormalizacao = null) { if( !empty($dataEnvio) ){ try { $data = new Zend_Date($dataEnvio, Zend_Date::DATES, 'pt'); $dataEnvio = $data->toString('yyyy-MM-dd'); } catch ( Zend_Date_Exception $e ) { echo $e->getMessage(); $dataEnvio = null; } } else { $dataEnvio = null; } if( $contratoId > 0 && $dataEnvio != null ){ $dbtable = new Model_DbTable_Contrato(); return $dbtable->baixarEnvioFisicoManual($dataEnvio, $bordero, $envelope, $contratoId, $protocolo, $protocolo, $obsEnvio, $baixarRecebimento, $usuarioFormalizacao); } return null; } /** * Verifica se o registro passado por parâmetro existe * @param int $numero * @return array|null */ public function existe($numero, $bancoId = null) { $where = "numero_contrato = '" . addslashes($numero) . "'"; if( $bancoId > 0 ) $where .= " AND banco_id = " . $bancoId; $dbtable = new Model_DbTable_Contrato(); return $dbtable->fetchRow($where); } /** * Verifica se o registro passado por parâmetro existe * @param int $numero * @return array|null */ public function existeAde($numeroAde, $bancoId = null) { $where = ["numero_ade = ?" => $numeroAde]; if( $bancoId > 0 ){ $where["banco_id = ?"] = $bancoId; } $dbtable = new Model_DbTable_Contrato(); return $dbtable->fetchRow($where); } /** * Baixa o recebimento do bonus para o contrato passado por parâmetro * @param array $sheetData * @param type $bancoId * @param type $dataBonus * @return int */ public function baixarRecebimentoBonus(array $sheetData, $bancoId, $dataBonus) { $qtdBaixado = 0; if( count($sheetData) > 0 ){ $dt = new Zend_Date($dataBonus); $dataBonus = $dt->get('yyyy-MM-dd'); $dbtable = new Model_DbTable_Contrato(); foreach ( $sheetData as $dados ) { if( isset($dados['B']) && !empty($dados['B']) ){ if( (($dadosContrato = $this->existe($dados['B'], $bancoId)) != null) && $dataBonus != null ){ $bonusEmpresa = ($dados['C'] * 100 / $dadosContrato['base_comissao_empresa_bonus']); $result = $dbtable->update(array( 'id' => $dadosContrato['id'], 'data_recebimento_bonus' => $dataBonus, 'bonus_recebido' => number_format($bonusEmpresa, 2, ',', '.') ), "id = " . $dadosContrato['id']); if( $result > 0 ){ $qtdBaixado++; } } } } } return $qtdBaixado; } protected function getDadosContrato($numeroContrato, $bancoId) { $where = null; $banco = new Model_Banco(); $dados = $banco->exibir($bancoId); if( $dados->nome == 'BMG' ){ $where = "contratos.numero_ade = '{$numeroContrato}'"; } elseif( $dados->nome == 'ITAU' ){ $where = "contratos.numero_ade = '{$numeroContrato}'"; } elseif( $dados->nome == 'ITAÚ' ){ $where = "contratos.numero_ade = '{$numeroContrato}'"; } elseif( $dados->nome == 'PAN' ){ $where = ("(contratos.numero_contrato = '" . $numeroContrato . "' OR contratos.numero_contrato LIKE '" . $numeroContrato . "-%')"); } else { $where = "contratos.numero_contrato = '{$numeroContrato}'"; } $db = new Model_DbTable_Contrato(); $select = $db->getAdapter()->select() ->from(array( 'contratos' => 'tb_contratos' )) ->joinInner(array( 'empresas' => 'tb_empresas' ), 'empresas.id = contratos.empresa_id', array( 'empresa' => 'nome' )) ->joinLeft(array( 'corretores' => 'tb_corretores' ), 'corretores.id = contratos.corretor_id', array( 'corretor' => 'nome' )) ->joinLeft(array( 'convenios' => 'tb_convenios' ), 'convenios.id = contratos.convenio_id', array( 'convenio' => 'convenios.nome' )) ->where($where) ->where('contratos.banco_id = ' . $bancoId) ->where('contratos.excluido <> 1') ->group('contratos.id'); return $db->getAdapter()->fetchAll($select); } public function gravarPendencia($numeroContrato, $pendencia, $bancoId, $cobrancaBanco = 0) { if( ( ($contratos = $this->getDadosContrato($numeroContrato, $bancoId)) != null ) ){ foreach ( $contratos as $dadosContrato ) { $dbtable = new Model_DbTable_Contrato(); $analisePendencia = $dadosContrato['descricao_pendencia'] . " - " . $pendencia; //marca como que o banco está cobrando apenas se não tiver protocolo de recebimento e envio if( !Zend_Date::isDate($dadosContrato['data_recebimento_fisico'], 'yyyy-MM-dd') && !Zend_Date::isDate($dadosContrato['data_envio_fisico'], 'yyyy-MM-dd') ){ $cobrancaBanco = 1; } // Caso receba algum valor diferente de 0 e 1 $cobrancaBanco = $cobrancaBanco ? 1 : 0; if( $dbtable->analisarPendencia($analisePendencia, $dadosContrato['id'], $cobrancaBanco) ){ $pendencia = " - (PENDÊNCIA INSERIDA NO CONTRATO)"; } if( empty($dadosContrato['data_envio_fisico']) ){ $dadosContrato['analise_pendencia'] = "NAO_ENVIADO " . $pendencia; } else { $dadosContrato['analise_pendencia'] = "ENVIADO " . $pendencia; } $dadosContrato['analise_pendencia'] = "Físico Enviado " . $pendencia; //foi enviado para o banco. Deve-se analisar a descrição da pendência if( empty($dadosContrato['corretor_id']) ){ $dadosContrato['analise_pendencia'] = "Corretor não encontrado " . $pendencia; } } return $dadosContrato; } return null; //contrato não encontrado } /** * Os contratos para estornar são os contratos que foram estornados pelo banco, * que estão acima do prazo limite estabelecido desde que o banco esteja marcado * para estornar automaticamente e/ou tem ted devolvida. * @param type $dadosContrato * @return boolean * @throws Core_Exception */ protected function _paraEstornar($dadosContrato) { $banco = $dadosContrato->findParentRow('Model_DbTable_Banco'); if( !$banco ){ throw new Core_Exception("Banco não identificado no contrato {$dadosContrato['numero_contrato']}"); } $corretor = $dadosContrato->findParentRow('Model_DbTable_Corretor'); if( !$corretor ){ throw new Core_Exception('Corretor não identificado no contrato.'); } $modelCorretor = new Model_Corretor(); $prazoBanco = $modelCorretor->getPrazoBanco($corretor['id'], $dadosContrato['id']); $prazo = $prazoBanco ? $prazoBanco['prazo'] : $corretor->prazo_fisico; $recebimentoFisico = !empty($dadosContrato['protocolo_recebimento_fisico']) && $dadosContrato['protocolo_recebimento_fisico'] > 0; $liberacao = !empty($dadosContrato['data_liberacao']) && $dadosContrato['data_liberacao'] != '0000-00-00'; $cobrancaBanco = $dadosContrato['cobranca_banco'] == 1; $cobrancaPromotora = $dadosContrato['cobranca_promotora'] == 1; $estornado = $dadosContrato['estornado'] == 1; $diasAtraso = 0; if( (!$recebimentoFisico || $cobrancaBanco) && $liberacao ){ $diasAtraso = $this->getDiasAtraso($dadosContrato['data_liberacao'], $dadosContrato['data_recebimento_fisico'], $dadosContrato['data_recebimento_previa'], $prazo); } if( !empty($dadosContrato['data_recebimento_previa']) ){ $supervisor = $corretor->findParentRow("Model_DbTable_Rota") ->findParentRow("Model_DbTable_GerenteRota"); $prazo = $supervisor->prazo; } $tedDevolvida = !empty($dadosContrato['data_ted_devolvida']) && $dadosContrato['data_ted_devolvida'] != '0000-00-00'; $alemPrazo = empty($dadosContrato['tipo_formalizacao']) ? ($banco->estornar_pendentes && $diasAtraso > $prazo) : false; //estornado pelo banco e prazo além do limite se o contrato for tipo de formalizacao Fisica //estornado pelo banco, prazo além do limite permitido, ted devolvida ou cobrança banco. return ( $alemPrazo || $tedDevolvida || $cobrancaBanco || $cobrancaPromotora || $estornado ); } protected function _getSomaProtocoloContrato($contratoId) { $dbtable = new Model_DbTable_ProtocoloContrato(); $select = $dbtable->select()->from($dbtable, array( 'valor_total' => "SUM(valor)" )) ->where("contrato_id = " . $contratoId) ->where("excluido <> 1"); return $dbtable->getAdapter()->fetchCol($select); } /** * Retorna verdadeiro SE O PROTOCOLO NEGATIVO, e falso SE FOR POSITIVO * @param array $contratos * @return type */ public function validarProtocoloNegativo(array $contratos) { $acl = (new Zend_Session_Namespace())->acl; if ($acl->isAllowed(Yuppie_Auth::getIdentity()->grupo, 'financeiro', 'gerar-protocolo-corretor-negativo') ) { return false; } $valorTotal = 0; foreach ( $contratos as $contratoId => $situacao ) { $dadosContrato = $this->exibir($contratoId); if( !$dadosContrato ){ continue; } $calculoValorComissao = $this->_calculaValorComissao($dadosContrato, $situacao, count($this->existeProtocoloContrato($contratoId)), count($this->existeProtocoloContratoDiferimento($contratoId))); if( !$calculoValorComissao['status'] ){ continue; } $valorTotal += $calculoValorComissao['valor_comissao']; } if( $valorTotal < 0 ){ return true; } return false; } protected function _calculaValorComissao($dadosContrato, &$situacao, $qtdProtocolosGerados = 0, $qtdProtocolosDiferimento = 0) { $valorComissao = $this->getValorComissaoPagar($dadosContrato); $baseComissao = $dadosContrato['base_comissao_valor']; $baseBonus = $dadosContrato['base_comissao_bonus']; if($dadosContrato['tipo'] == 'REFIN DA PORTABILIDADE'){ $valorComissao = $valorComissao - $dadosContrato['rco'] - $dadosContrato['outras_despesas'] - $dadosContrato['taxa_portabilidade']; }else{ $valorComissao = $valorComissao - $dadosContrato['rco'] - $dadosContrato['outras_despesas']; } if( $situacao == 'Estorno' ){ $valorComissao = $valorComissao * (-1); } $percentual = $dadosContrato['comissao_corretor']; $percentualBonus = $dadosContrato['bonus_corretor']; $somaProtocoloContrato = $this->_getSomaProtocoloContrato($dadosContrato['id']); //verifica se o contrato tem diferimento preenchido if ($qtdProtocolosGerados > 0 && !empty($dadosContrato['diferimento_corretor']) && $dadosContrato['diferimento_corretor'] > 0) { //se não com prazo + 1 if ($qtdProtocolosDiferimento < $dadosContrato['prazo'] ) { $valorComissao = $dadosContrato['base_comissao_diferimento'] * $dadosContrato['diferimento_corretor'] / 100 / $dadosContrato['prazo']; $percentual = $dadosContrato['diferimento_corretor']; $situacao = 'Diferimento'; } else { return [ 'status' => 0, 'numero_contrato' => $dadosContrato['numero_contrato'], 'motivo' => 'O contrato já possui protocolo gerado.', ]; } } elseif (!$this->_paraEstornar($dadosContrato) && $somaProtocoloContrato[0] > 0 ){ return [ 'status' => 0, 'numero_contrato' => $dadosContrato['numero_contrato'], 'motivo' => 'O contrato já possui protocolo gerado e não está diferido.', ]; } //verifica se tem estorno e dá o valor negativo; if( $situacao != 'Estorno' && $this->_paraEstornar($dadosContrato) && $somaProtocoloContrato[0] > 0 ){ //da o valor negativo sem ser diferido $valorComissao = ($valorComissao * -1); } return $this->getDataBaixaPagamento( $dadosContrato, $valorComissao, $percentual, $percentualBonus, $baseComissao, $baseBonus ); } /** * Grava o protocolo e o contrato, verificando o diferimento * @param int $contratoId * @param int $protocoloId * @return array * @throws Core_Exception */ public function pagarComissao($contratoId, $protocoloId, $situacao) { if( !$protocoloId || !$contratoId ){ throw new Core_Exception('Atenção! Protocolo não gerado.'); } $dadosContrato = $this->exibir($contratoId); if( !$dadosContrato ){ return array( 'status' => 0, 'numero_contrato' => NULL, 'motivo' => 'Contrato não cadastrado. ID passado: ' . $contratoId, ); } $dbtable = new Model_DbTable_ProtocoloContrato(); $calculoValorComissao = $this->_calculaValorComissao($dadosContrato, $situacao, count($this->existeProtocoloContrato($contratoId)), count($this->existeProtocoloContratoDiferimento($contratoId))); if( !$calculoValorComissao['status'] ){ return $calculoValorComissao; } $data = array( 'contrato_id' => $contratoId, 'protocolo_id' => $protocoloId, 'valor' => $calculoValorComissao['valor_comissao'], 'percentual' => $calculoValorComissao['percentual'], 'situacao' => $situacao, 'valor_fixo_corretor' => $calculoValorComissao['valor_fixo_corretor'], 'percentual_bonus' => $calculoValorComissao['percentual_bonus'], 'base_comissao' => $calculoValorComissao['base_comissao'], 'base_bonus' => $calculoValorComissao['base_bonus'], ); if (($protocoloContratoId = $dbtable->insert($data)) != null) { unset( $data['valor'], $data['percentual'], $data['valor_fixo_corretor'], $data['percentual_bonus'], $data['base_comissao'], $data['base_bonus'] ); $data['id'] = $protocoloContratoId; (new Model_DbTable_Log())->save($dbtable, [], $data); return array( 'status' => 1, 'numero_contrato' => $dadosContrato['numero_contrato'], 'motivo' => NULL, ); } else { return array( 'status' => 0, 'numero_contrato' => $dadosContrato['numero_contrato'], 'motivo' => 'Contrato e protocolo não inseridos no banco de dados.', ); } } public function getBonusPendente($fields, $order = "contratos.data_emissao ASC") { $dbtableBonus = new Model_DbTable_Bonus(); $selectBonus = $dbtableBonus->select()->from($dbtableBonus, array( 'tabela_id', 'convenio_id', 'prazo', 'produto' )) ->where("excluido<>1") ->group(array( 'tabela_id', 'convenio_id', 'prazo', 'produto' )); $params = array( "contratos.excluido<>1 AND (contratos.data_recebimento_bonus IS NULL OR contratos.data_recebimento_bonus = '0000-00-00')" ); $where = null; if( isset($fields['data_recebimento_bonus']) && $fields['data_recebimento_bonus'] != null ){ $params[] = "(contratos.data_liberacao < DATE_SUB(STR_TO_DATE('" . $fields['data_recebimento_bonus'] . "', '%d/%m/%Y'), INTERVAL 1 DAY)" . " AND contratos.data_liberacao >= (DATE_SUB(STR_TO_DATE('" . $fields['data_recebimento_bonus'] . "', '%d/%m/%Y'), INTERVAL 8 DAY)))"; } if( isset($fields['tabela_id']) && $fields['tabela_id'] > 0 ){ $params[] = "contratos.tabela_id = " . $fields['tabela_id']; } if( isset($fields['convenio_id']) && $fields['convenio_id'] > 0 ){ $params[] = "contratos.convenio_id = " . $fields['convenio_id']; } if( isset($fields['status_proposta']) && $fields['status_proposta'] > 0 ){ $params[] = "contratos.status_proposta = " . $fields['status_proposta']; } if( count($params) > 0 ) $where = implode(" AND ", $params); $dbtable = new Model_DbTable_Contrato(); $select = $dbtable->getAdapter()->select()->from(array( "contratos" => 'tb_contratos' ), array( 'contratos.*' )) ->joinInner(array( "bonificacoes" => $selectBonus ), "contratos.tabela_id = bonificacoes.tabela_id" . " AND contratos.convenio_id = bonificacoes.convenio_id" . " AND contratos.prazo = bonificacoes.prazo" . " AND contratos.produto = bonificacoes.produto", array()) ->joinInner(array( 'clientes' => 'tb_clientes' ), "contratos.cliente_id = clientes.id", array( 'cliente' => 'nome', 'cpf' )) ->joinLeft(array( 'corretores' => 'tb_corretores' ), "corretores.id = contratos.corretor_id", array( 'corretor' => 'nome' )) ->joinLeft(array( 'tabelas' => 'tb_tabelas' ), "contratos.tabela_id = tabelas.id", array( 'tabela' => 'nome' )) ->joinLeft(array( 'convenios' => 'tb_convenios' ), "contratos.convenio_id = convenios.id", array( 'convenio' => 'nome' )) ->joinLeft(array( 'tb_status_proposta' => 'tb_tipos' ), "tb_status_proposta.id = contratos.status_proposta", array( 'status_proposta_nome' => 'descricao' )); $select->where($where); $select->order($order); $select->group(array( 'contratos.id' )); $data = array( 'table' => $dbtable, 'rowClass' => $dbtable->getRowClass(), 'stored' => true, 'data' => $dbtable->getAdapter()->fetchAll($select) ); $rowsetClass = $dbtable->getRowsetClass(); return new $rowsetClass($data); } public function exportarBonusPendente($contratos) { $objPhpExcel = new PHPExcel(); $objPhpExcel->getProperties()->setDescription('Relatório de Bônus Pendente'); $objPhpExcel->getProperties()->setCreator('Yuppie Tech'); $objPhpExcel->getProperties()->setTitle('Relatório de Bônus Pendente'); $objPhpExcel->setActiveSheetIndex(0); $objPhpExcel->getActiveSheet()->setTitle('Bônus Pendente'); //cabeçalho do arquivo $objPhpExcel->getActiveSheet()->SetCellValue('A' . 1, "Nº Contrato"); $objPhpExcel->getActiveSheet()->SetCellValue('B' . 1, "Cliente"); $objPhpExcel->getActiveSheet()->SetCellValue('C' . 1, "CPF Cliente"); $objPhpExcel->getActiveSheet()->SetCellValue('D' . 1, "Tabela"); $objPhpExcel->getActiveSheet()->SetCellValue('E' . 1, "Convenio"); $objPhpExcel->getActiveSheet()->SetCellValue('F' . 1, "Prazo"); $objPhpExcel->getActiveSheet()->SetCellValue('G' . 1, "Produto"); $objPhpExcel->getActiveSheet()->SetCellValue('H' . 1, "Status Proposta"); $objPhpExcel->getActiveSheet()->SetCellValue('I' . 1, "Corretor"); $objPhpExcel->getActiveSheet()->SetCellValue('J' . 1, "Valor Liquido"); $objPhpExcel->getActiveSheet()->SetCellValue('K' . 1, "Data Liberacao"); $objPhpExcel->getActiveSheet()->SetCellValue('L' . 1, "Data Emissao"); //linhas do arquivo foreach ( $contratos as $key => $contrato ) { $objPhpExcel->getActiveSheet()->setCellValueByColumnAndRow(0, $key + 2, $contrato['numero_contrato']); $objPhpExcel->getActiveSheet()->setCellValueByColumnAndRow(1, $key + 2, $contrato['cliente']); $objPhpExcel->getActiveSheet()->setCellValueByColumnAndRow(2, $key + 2, $contrato['cpf']); $objPhpExcel->getActiveSheet()->setCellValueByColumnAndRow(3, $key + 2, $contrato['tabela']); $objPhpExcel->getActiveSheet()->setCellValueByColumnAndRow(4, $key + 2, $contrato['convenio']); $objPhpExcel->getActiveSheet()->setCellValueByColumnAndRow(5, $key + 2, $contrato['prazo']); $objPhpExcel->getActiveSheet()->setCellValueByColumnAndRow(6, $key + 2, $contrato['produto']); $objPhpExcel->getActiveSheet()->setCellValueByColumnAndRow(7, $key + 2, $contrato['status_proposta_nome']); $objPhpExcel->getActiveSheet()->setCellValueByColumnAndRow(8, $key + 2, $contrato['corretor']); $objPhpExcel->getActiveSheet()->setCellValueByColumnAndRow(9, $key + 2, $contrato['valor_liquido']); $objPhpExcel->getActiveSheet()->setCellValueByColumnAndRow(10, $key + 2, $contrato['data_liberacao']); $objPhpExcel->getActiveSheet()->setCellValueByColumnAndRow(11, $key + 2, $contrato['data_emissao']); } $objWriter = new PHPExcel_Writer_Excel2007($objPhpExcel); $fileName = PUBLIC_PATH . "/../public/downloads/bonus.xlsx"; $objWriter->save($fileName); return $fileName; } public function exportarPendencias($contratos, $pendencias) { $objPhpExcel = new PHPExcel(); $objPhpExcel->getProperties()->setDescription('Relatório de Pendências'); $objPhpExcel->getProperties()->setCreator('Yuppie Tech'); $objPhpExcel->getProperties()->setTitle('Relatório de Pendências'); $objPhpExcel->setActiveSheetIndex(0); $objPhpExcel->getActiveSheet()->setTitle('Pendências'); //cabeçalho do arquivo $objPhpExcel->getActiveSheet()->SetCellValue('A' . 1, "Nº Contrato"); $objPhpExcel->getActiveSheet()->SetCellValue('B' . 1, "Impedimento"); //linhas do arquivo for ( $i = 0; $i < count($contratos); $i++ ) { $objPhpExcel->getActiveSheet()->setCellValueByColumnAndRow(0, $i + 2, $contratos[$i]); $objPhpExcel->getActiveSheet()->setCellValueByColumnAndRow(1, $i + 2, $pendencias[$contratos[$i]]); } $objWriter = new PHPExcel_Writer_Excel2007($objPhpExcel); $fileName = PUBLIC_PATH . "/../public/downloads/pendencias.xlsx"; $objWriter->save($fileName); return $fileName; } public function getRankingFisicosPendentes($fields = null, $order = "qtd_pendentes DESC") { $params = array( "contratos.tipo_registro = 1 AND contratos.excluido<>1 AND (data_recebimento_fisico IS NULL OR data_recebimento_fisico = '0000-00-00') AND tipo_formalizacao <> 1" ); if( Yuppie_Auth::getIdentity()->grupo == "Supervisor" ){ $params[] = "rotas.gerente_id = " . Yuppie_Auth::getIdentity()->id; } elseif( Yuppie_Auth::getIdentity()->grupo == "Gerente Regional" ){ $params[] = "gerentes.id = " . Yuppie_Auth::getIdentity()->id; } elseif( Yuppie_Auth::getIdentity()->grupo == "Corretor" ){ $params[] = "corretores.id = " . Yuppie_Auth::getIdentity()->id; } if( isset($fields['data_emissao_de']) && !empty($fields['data_emissao_de']) && isset($fields['data_emissao_a']) && !empty($fields['data_emissao_a']) ){ $params[] = "(data_emissao >= STR_TO_DATE('" . $fields['data_emissao_de'] . "', '%d/%m/%Y') AND " . " data_emissao <= STR_TO_DATE('" . $fields['data_emissao_a'] . "', '%d/%m/%Y'))"; } if( isset($fields['data_liberacao_de']) && !empty($fields['data_liberacao_de']) && isset($fields['data_liberacao_a']) && !empty($fields['data_liberacao_a']) ){ $params[] = "(data_liberacao >= STR_TO_DATE('" . $fields['data_liberacao_de'] . "', '%d/%m/%Y') AND " . " data_liberacao <= STR_TO_DATE('" . $fields['data_liberacao_a'] . "', '%d/%m/%Y'))"; } if( isset($fields['empresa_id']) && !empty($fields['empresa_id']) ){ $params[] = "contratos.empresa_id = " . $fields['empresa_id']; } if( isset($fields['corretor_id']) && !empty($fields['corretor_id']) ){ $params[] = "corretor_id = " . $fields['corretor_id']; } if( isset($fields['gerente_id']) && !empty($fields['gerente_id']) ){ $params[] = "gerentes_rotas.id = " . $fields['gerente_id']; } if( isset($fields['rota_id']) && !empty($fields['rota_id']) ){ $params[] = "corretores.rota_id = " . $fields['rota_id']; } if( isset($fields['status_proposta']) && !empty($fields['status_proposta']) ){ if( is_array($fields['status_proposta']) ){ $fields['status_proposta'] = array_filter($fields['status_proposta']); $params[] = ("contratos.status_proposta IN ('" . implode("','", $fields['status_proposta']) . "')"); } else { $params[] = ('contratos.status_proposta = ' . $fields['status_proposta']); } } if( isset($fields['banco_id']) && !empty($fields['banco_id']) ){ $params[] = "contratos.banco_id = " . $fields['banco_id']; } $where = implode(" AND ", $params); $dbtable = new Model_DbTable_Contrato(); $select = $dbtable->getAdapter()->select()->from(array( 'contratos' => 'tb_contratos' ), array( 'qtd_pendentes' => 'COUNT(DISTINCT(contratos.id))' )) ->joinInner(array( 'clientes' => 'tb_clientes' ), "contratos.cliente_id = clientes.id", array()) ->joinLeft(array( 'corretores' => 'tb_corretores' ), "contratos.corretor_id = corretores.id", array( 'corretor' => 'nome' )) ->joinLeft(array( 'rotas' => 'tb_rotas' ), "corretores.rota_id = rotas.id", array( 'rota' => 'nome' )) ->joinLeft(array( 'gerentes_rotas' => "tb_gerente_rota" ), 'rotas.gerente_id = gerentes_rotas.id', array( 'supervisor' => 'nome' )) ->joinLeft(array( 'gerentes' => "tb_gerentes" ), 'gerentes_rotas.gerente_id = gerentes.id', array()) ->where($where) ->order($order) ->group('contratos.corretor_id'); return $dbtable->getAdapter()->fetchAll($select); } public function getRankingEnviosPendentes($fields = null, $order = "qtd_pendentes DESC") { $params = array( "contratos.tipo_registro = 1 AND contratos.excluido<>1 AND (data_envio_fisico IS NULL OR data_envio_fisico = '0000-00-00')" ); if( Yuppie_Auth::getIdentity()->grupo == "Supervisor" ){ $params[] = "rotas.gerente_id = " . Yuppie_Auth::getIdentity()->id; } elseif( Yuppie_Auth::getIdentity()->grupo == "Gerente Regional" ){ $params[] = "gerentes.id = " . Yuppie_Auth::getIdentity()->id; } elseif( Yuppie_Auth::getIdentity()->grupo == "Corretor" ){ $params[] = "corretores.id = " . Yuppie_Auth::getIdentity()->id; } if( isset($fields['data_emissao_de']) && !empty($fields['data_emissao_de']) && isset($fields['data_emissao_a']) && !empty($fields['data_emissao_a']) ){ $params[] = "(data_emissao >= STR_TO_DATE('" . $fields['data_emissao_de'] . "', '%d/%m/%Y') AND " . " data_emissao <= STR_TO_DATE('" . $fields['data_emissao_a'] . "', '%d/%m/%Y'))"; } if( isset($fields['data_liberacao_de']) && !empty($fields['data_liberacao_de']) && isset($fields['data_liberacao_a']) && !empty($fields['data_liberacao_a']) ){ $params[] = "(data_liberacao >= STR_TO_DATE('" . $fields['data_liberacao_de'] . "', '%d/%m/%Y') AND " . " data_liberacao <= STR_TO_DATE('" . $fields['data_liberacao_a'] . "', '%d/%m/%Y'))"; } if( isset($fields['empresa_id']) && !empty($fields['empresa_id']) ){ $params[] = "contratos.empresa_id = " . $fields['empresa_id']; } if( isset($fields['corretor_id']) && !empty($fields['corretor_id']) ){ $params[] = "corretor_id = " . $fields['corretor_id']; } if( isset($fields['gerente_id']) && !empty($fields['gerente_id']) ){ $params[] = "gerentes_rotas.id = " . $fields['gerente_id']; } if( isset($fields['rota_id']) && !empty($fields['rota_id']) ){ $params[] = "corretores.rota_id = " . $fields['rota_id']; } if( isset($fields['status_proposta']) && !empty($fields['status_proposta']) ){ $params[] = "contratos.status_proposta = " . $fields['status_proposta']; } if( isset($fields['banco_id']) && !empty($fields['banco_id']) ){ $params[] = "contratos.banco_id = " . $fields['banco_id']; } $where = implode(" AND ", $params); $dbtable = new Model_DbTable_Contrato(); $select = $dbtable->getAdapter()->select()->from(array( 'contratos' => 'tb_contratos' ), array( 'qtd_pendentes' => 'COUNT(DISTINCT(contratos.id))' )) ->joinInner(array( 'clientes' => 'tb_clientes' ), "contratos.cliente_id = clientes.id", array()) ->joinLeft(array( 'corretores' => 'tb_corretores' ), "contratos.corretor_id = corretores.id", array( 'corretor' => 'nome' )) ->joinLeft(array( 'rotas' => 'tb_rotas' ), "corretores.rota_id = rotas.id", array( 'rota' => 'nome' )) ->joinLeft(array( 'gerentes_rotas' => "tb_gerente_rota" ), 'rotas.gerente_id = gerentes_rotas.id', array( 'supervisor' => 'nome' )) ->joinLeft(array( 'gerentes' => "tb_gerentes" ), 'gerentes_rotas.gerente_id = gerentes.id', array()) ->where($where) ->order($order) ->group('contratos.corretor_id'); return $dbtable->getAdapter()->fetchAll($select); } /** * Retorna uma lista de contratos que ainda não tiveram a comissão paga ao supervisor * @param array $fields * @param string $order */ public function getComissaoPagarSupervisor(array $fields, $page = null) { $dbtable = new Model_DbTable_Contrato(); //SITUACAO CORRETOR $selectProtocolosCorretor = $dbtable->getAdapter()->select()->from('tb_protocolo_contrato', array( 'contrato_id', 'situacao' )) ->where('excluido <> 1') ->group('contrato_id'); //SITUACAO SUPERVISOR $selectProtocolosSupervisor = $dbtable->getAdapter()->select()->from('tb_protocolo_pagamento_supervisor_itens', array( 'contrato_id', 'protocolo_id', 'valor_total' => 'SUM(valor_comissao)', 'negativos' => 'SUM(if(valor_comissao < 0, 1, 0))', 'positivos' => 'SUM(if(valor_comissao >= 0, 1, 0))' )) ->where('excluido <> 1') ->group('contrato_id'); //Contratos estornados para o corretor e pagos ao supervisor - Exibir para estornar $estorno = "protocolos_supervisor_itens.valor_total > 0 AND protocolos_corretor.situacao IN ('Pendência de físico', 'TED devolvida', 'Estorno')"; //Contratos devolvidos para o corretor e estornados para o supervisor - Exibir para devolver $devolucao = "protocolos_supervisor_itens.valor_total <= 0 AND protocolos_supervisor_itens.valor_total IS NOT NULL" . " AND protocolos_supervisor_itens.negativos > 0 AND protocolos_corretor.situacao IN ('Pendência de físico', 'TED devolvida', 'Estorno', 'Devolução')"; //Contratos estornados para o corretor que ainda não foram pagos para o supervisor - Não exibir $naoPagoEstonado = "protocolos_supervisor_itens.contrato_id IS NULL AND protocolos_corretor.situacao IN ('Pendência de físico', 'TED devolvida', 'Estorno')"; //Contratos devolvidos para o corretor que ainda não foram pagos para o supervisor - Exibir para pagamento $naoPagoDevolvido = "protocolos_supervisor_itens.contrato_id IS NULL AND protocolos_corretor.situacao = 'Devolução'"; //Contratos pagos que possuem qtd de protocolos de pagamento positivos maiores que negativos ou pendencias - Não exibir $pagamentoComissao = "(protocolos_supervisor_itens.contrato_id IS NOT NULL AND (protocolos_supervisor_itens.valor_total > 0" . " OR protocolos_supervisor_itens.positivos > protocolos_supervisor_itens.negativos))" . " OR (contratos.cobranca_banco = 1)" . " OR (contratos.cobranca_promotora = 1)" . " OR (contratos.estornado = 1)" . " OR (contratos.data_ted_devolvida <> '0000-00-00' and contratos.data_ted_devolvida IS NOT NULL)"; $columns = [ 'empresa' => 'empresas.nome', 'contratos.data_recebimento_fisico', 'contratos.data_envio_fisico', 'contratos.convenio_id', 'contratos.data_emissao', 'contratos.data_recebimento_previa', 'contratos.data_liberacao', 'contratos.numero_contrato', 'contratos.banco_id', 'contratos.tabela_id', 'contratos.prazo', 'id_contrato' => 'contratos.id', 'contratos.tipo', 'contratos.valor_liquido','contratos.valor_bruto', 'contratos.corretor_id', 'tipo_formalizacao' => 'contratos.tipo_formalizacao', 'cobranca_banco' => 'contratos.cobranca_banco', 'cliente_id' => 'contratos.cliente_id', 'cpf' => 'clientes.cpf', 'banco' => 'bancos.nome', 'corretor' => 'CONVERT(corretores.nome USING utf8)', 'convenio' => 'CONVERT(convenios.nome USING utf8)', 'tabela' => 'CONVERT(tabelas.nome USING utf8)', 'produto' => 'produtos.tipo', 'supervisor_id' => 'gerentes_rotas.id', 'prazo_pendencia_supervisor' => 'gerentes_rotas.prazo', 'comissao_corretor', 'comissao_empresa', 'bonus_corretor', 'contratos.base_comissao_valor', 'contratos.base_comissao_empresa_valor', 'situacao_corretor' => 'protocolos_corretor.situacao', new Zend_Db_Expr("CASE WHEN ($estorno) THEN 'Estorno' WHEN ($devolucao) THEN 'Devolução' WHEN ($naoPagoEstonado) " . "THEN 'Não pago estornado' WHEN ($naoPagoDevolvido) THEN 'Não pago devolvido' WHEN ($pagamentoComissao) " . "THEN 'Pagamento comissão' ELSE '' END as situacao_pagamento"), 'comissao_grupo_supervisor' => 'grupos_comissao.comissao_supervisor', 'grupos_comissao.incidencia_comissao_supervisor' ]; $modelPercentualSupervisor = new Model_PercentualSupervisor(); $columns["valor_comissao_supervisor"] = $modelPercentualSupervisor->getColunaValorComissaoSupervisor(); $baseCalculoComissao = $modelPercentualSupervisor->getBaseCalculoComissao(); $select = $this->_getSelectContratos($dbtable, $columns); $select->joinLeft(array( 'rotas' => 'tb_rotas' ), 'corretores.rota_id = rotas.id', []) ->joinLeft(array( 'gerentes_rotas' => 'tb_gerente_rota' ), 'rotas.gerente_id = gerentes_rotas.id', []) ->joinLeft(array( 'grupos_comissao' => 'tb_grupos_comissao' ), 'grupos_comissao.id = corretores.grupo_comissao', []) ->joinLeft(array( 'spread_bancos' => 'tb_bancos_spread_faixa_comissao' ), 'spread_bancos.banco_id = bancos.id AND valor_inicial <= contratos.comissao_empresa AND valor_final >= contratos.comissao_empresa', ['spread']) ->joinLeft(array( 'faixas_valor' => 'tb_faixa_valores' ), "$baseCalculoComissao >= percentual_de AND $baseCalculoComissao <= percentual_a AND faixas_valor.excluido <> 1", ['comissao_supervisor_faixa' => 'comissao']) ->joinLeft(array( 'gerentes' => 'tb_gerentes' ), 'gerentes_rotas.gerente_id = gerentes.id', []) ->joinLeft(array( 'empresas' => 'tb_empresas' ), 'contratos.empresa_id = empresas.id', []) ->joinLeft(array( 'produtos' => 'tb_produtos' ), 'produtos.id = contratos.produto', []) ->joinLeft(array( 'protocolos_corretor' => $selectProtocolosCorretor), 'contratos.id = protocolos_corretor.contrato_id', []) ->joinLeft(array( 'protocolos_supervisor_itens' => $selectProtocolosSupervisor ), 'contratos.id = protocolos_supervisor_itens.contrato_id', ['contrato_id']) ->joinLeft(array( 'protocolos_supervisor' => 'tb_protocolo_pagamento_supervisor' ), 'protocolos_supervisor.id = protocolos_supervisor_itens.protocolo_id', ['data_pagamento']) ->where('contratos.srcc <> 1') ->group('contratos.id') ->order(['corretores.nome ASC', 'contratos.data_liberacao', 'contratos.id']); $this->_prepareFilterSelect($fields, $select); if( $page ){ $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($page); $paginator->setItemCountPerPage(100); return $paginator; } return $dbtable->getAdapter()->fetchAll($select); } public function pagarComissaoSupervisor($contratoId, $valorComissao, $protocoloId) { if( $contratoId > 0 && $protocoloId > 0 ){ $dbtable = new Model_DbTable_ProtocoloPagamentoSupervisorItem(); if( $dbtable->fetchRow("contrato_id = $contratoId AND protocolo_id = $protocoloId") ){ throw new Exception("Contrato($contratoId) já possui protocolo($protocoloId) gerado."); } return $dbtable->insert(array( 'contrato_id' => $contratoId, 'protocolo_id' => $protocoloId, 'valor_comissao' => $valorComissao )); } return null; } public function atualizarComissao($empresaId, $bancoId, $produto, $prazo, $dataInicial, $dataFinal, $comissao) { $where = "empresa_id = $empresaId AND produto = '$produto' AND banco_id = '$bancoId'" . " AND prazo = '$prazo' AND data_emissao >= '$dataInicial' AND data_emissao <= '$dataFinal'"; $dbtable = new Model_DbTable_Contrato(); return $dbtable->update(array( 'comissao_empresa' => number_format($comissao, 2, ',', '.') ), $where); } public function getComissaoPagarGerente(array $fields, $page = null, $limit = null, $order = 'corretor_id', $range = null) { $dbtable = new Model_DbTable_Contrato(); $columns = array( 'empresa' => 'empresas.nome', 'contratos.data_recebimento_fisico', 'contratos.data_envio_fisico', 'contratos.data_recebimento_previa', 'corretores.prazo_fisico', 'prazo_pendencia_supervisor' => 'gerentes_rotas.prazo', 'contratos.data_liberacao', 'contratos.numero_contrato', 'contratos.data_liberacao', 'id_contrato' => 'contratos.id', 'contratos.valor_liquido', 'contratos.corretor_id', 'cpf' => 'clientes.cpf', 'cliente_id' => 'contratos.cliente_id', 'corretor' => 'corretores.nome', 'convenio' => 'convenios.nome', 'produto' => 'produtos.tipo', 'prazo' => 'contratos.prazo', 'gerente_id' => 'gerentes.id', 'contratos.base_comissao_valor', 'banco' => 'banco.nome' ); $select = $this->_getSelectContratos($dbtable, $columns); $select->joinLeft(array( 'rotas' => 'tb_rotas' ), 'corretores.rota_id = rotas.id', array()) ->joinLeft(array( 'gerentes_rotas' => 'tb_gerente_rota' ), 'rotas.gerente_id = gerentes_rotas.id', array( 'gerente' => 'nome' )) ->joinLeft(array( 'gerentes' => 'tb_gerentes' ), 'gerentes_rotas.gerente_id = gerentes.id', array()) ->joinLeft(array( 'empresas' => 'tb_empresas' ), 'contratos.empresa_id = empresas.id', array()) ->joinLeft(array( 'produtos' => 'tb_produtos' ), 'produtos.id = contratos.produto', array()) ->joinLeft(array( 'banco' => 'tb_bancos' ), 'banco.id = contratos.banco_id', array()) ->joinLeft(array( 'protocolos_pagamentos_gerente_itens' => 'tb_protocolo_pagamento_gerente_itens' ), 'contratos.id = protocolos_pagamentos_gerente_itens.contrato_id', array()) ->where('contratos.srcc <> 1') ->group('contratos.id'); $this->_prepareFilterSelect($fields, $select); if( $order != null ){ $select->order($order); } else { $select->order(array( 'corretores.nome', 'contratos.data_liberacao' )); } if( $page ){ $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($page); if( $limit && is_numeric($limit) ){ $paginator->setItemCountPerPage($limit); } if( $range && is_numeric($range) ){ $paginator->setPageRange($range); } return $paginator; } } public function getComissaoPagarGerenteTotalizador(array $fields) { $dbtable = new Model_DbTable_Contrato(); $columns = array( 'total_valor_liquido' => 'SUM(valor_liquido)', ); $select = $this->_getSelectContratos($dbtable, $columns); $select->joinLeft(array( 'rotas' => 'tb_rotas' ), 'corretores.rota_id = rotas.id', array()) ->joinLeft(array( 'gerentes_rotas' => 'tb_gerente_rota' ), 'rotas.gerente_id = gerentes_rotas.id', array()) ->joinLeft(array( 'gerentes' => 'tb_gerentes' ), 'gerentes_rotas.gerente_id = gerentes.id', array()) ->joinLeft(array( 'empresas' => 'tb_empresas' ), 'contratos.empresa_id = empresas.id', array()) ->joinLeft(array( 'produtos' => 'tb_produtos' ), 'produtos.id = contratos.produto', array()) ->joinLeft(array( 'protocolos_pagamentos_gerente_itens' => 'tb_protocolo_pagamento_gerente_itens' ), 'contratos.id = protocolos_pagamentos_gerente_itens.contrato_id', array()) ->where('contratos.srcc <> 1') ; $this->_prepareFilterSelect($fields, $select); return $dbtable->getAdapter()->fetchRow($select); } public function pagarComissaoGerente($contratoId, $protocoloId) { if( $contratoId > 0 && $protocoloId > 0 ){ $dbtable = new Model_DbTable_ProtocoloPagamentoGerenteItem(); return $dbtable->insert(array( 'contrato_id' => $contratoId, 'protocolo_id' => $protocoloId )); } return null; } public function getProtocoloPagamentoGerente($protocoloId) { if( $protocoloId > 0 ){ $dbtable = new Model_DbTable_Contrato(); return $dbtable->fetchAllDependents(array( "protocolo_pagamento_gerente_id" => $protocoloId ), 'data_emissao ASC'); } return null; } public function getProtocoloPagamentoSupervisor($protocoloId) { if( $protocoloId > 0 ){ $dbtable = new Model_DbTable_Contrato(); return $dbtable->fetchAllDependents(array( "protocolo_pagamento_supervisor_id" => $protocoloId ), 'data_emissao ASC'); } return null; } public function atualizarComissaoCorretor($corretorId, $bancoId, $tabelaId, $convenioId, $prazo, $dataInicial, $dataFinal, $comissao) { $where = "corretor_id = " . $corretorId . " AND tabela_id = " . $tabelaId . " AND convenio_id = " . $convenioId . " AND banco_id = '" . $bancoId . "'" . " AND prazo = '" . $prazo . "'"; if( $dataFinal != null ){ $where .= " AND data_emissao >= '" . $dataInicial . "' AND data_emissao <= '" . $dataFinal . "'"; } else { $where .= " AND data_emissao >= '" . $dataInicial . "'"; } $dbtable = new Model_DbTable_Contrato(); return $dbtable->update(array( 'comissao_corretor' => number_format($comissao, 2, ',', '.') ), $where); } public function getContratosLiberados($fields, $page = null, $limit = null, $order = array( 'corretores.nome ASC', 'clientes.nome ASC' ), $range = null) { $dbtable = new Model_DbTable_Contrato(); $select = $this->_getSelectProducaoAnalitico($dbtable, array( 'contratos.numero_contrato', 'contratos.tipo', 'contratos.prazo', 'contratos.valor_bruto', 'contratos.valor_liquido', 'contratos.comissao_empresa', 'contratos.data_liberacao', 'contratos.valor_fixo_corretor', 'contratos.data_emissao', 'contratos.base_comissao_valor', 'contratos.base_comissao_empresa_valor', 'contratos.bonus_empresa', 'contratos.adiantamento_comissao_empresa', 'contratos.comissao_corretor', 'contratos.bonus_corretor', 'contratos.corretor_id', 'cliente' => 'clientes.nome', 'cpf_cliente' => 'clientes.cpf', 'corretor' => 'corretores.nome', 'banco' => 'bancos.nome', 'convenio' => 'convenios.nome', 'tabela' => 'tabelas.nome', 'status_proposta_nome' => 'status_propostas.descricao' ) ); $select->group(array( 'contratos.id' )); $this->_prepareFilterSelect($fields, $select); if( $order != null ){ $select->order($order); } else { $select->order(array( 'corretores.nome', 'contratos.data_liberacao' )); } if( $page ){ $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($page); if( $limit && is_numeric($limit) ){ $paginator->setItemCountPerPage($limit); } if( $range && is_numeric($range) ){ $paginator->setPageRange($range); } return $paginator; } return $dbtable->getAdapter()->fetchAll($select); } public function getContratosLiberadosTotalizador(array $fields) { $dbtable = new Model_DbTable_Contrato(); $select = $this->_getSelectProducaoAnalitico($dbtable, array( 'total_liquido' => 'SUM(valor_liquido)', 'total_comissao_corretor' => 'SUM(IF(comissao_corretor IS NULL, 0, (contratos.valor_fixo_corretor+base_comissao_valor*comissao_corretor/100)))', )); $this->_prepareFilterSelect($fields, $select); return $dbtable->getAdapter()->fetchRow($select); } /** * Faz a exclusão do protocolo de pagamento de físico * @param type $protocoloId */ public function excluirProtocoloFisico($protocoloId) { $dbtable = new Model_DbTable_Contrato(); return $dbtable->excluirRecebimentoFisico($protocoloId); } /** * Lista vendas agrupadas por corretor * @param type $fields * @param type $order * @return type */ public function rankingVendas($fields, $order = array( 'base_comissao_valor DESC', 'corretor ASC', 'mes', 'ano' )) { $params = array( "contratos.tipo_registro = 1 AND contratos.excluido<>1" ); if( Yuppie_Auth::getIdentity()->grupo == 'Supervisor' ){ $params[] = 'rotas.gerente_id = ' . Yuppie_Auth::getIdentity()->id; } elseif( Yuppie_Auth::getIdentity()->grupo == 'Gerente Regional' ){ $params[] = 'gerentes.id = ' . Yuppie_Auth::getIdentity()->id; } if( isset($fields['data_emissao_de']) && !empty($fields['data_emissao_de']) && isset($fields['data_emissao_a']) && !empty($fields['data_emissao_a']) ){ $params[] = "(data_emissao >= STR_TO_DATE('" . $fields['data_emissao_de'] . "', '%d/%m/%Y') AND " . " data_emissao <= STR_TO_DATE('" . $fields['data_emissao_a'] . "', '%d/%m/%Y'))"; } if( isset($fields['data_liberacao_de']) && !empty($fields['data_liberacao_de']) && isset($fields['data_liberacao_a']) && !empty($fields['data_liberacao_a']) ){ $params[] = "(data_liberacao >= STR_TO_DATE('" . $fields['data_liberacao_de'] . "', '%d/%m/%Y') AND " . " data_liberacao <= STR_TO_DATE('" . $fields['data_liberacao_a'] . "', '%d/%m/%Y'))"; } if( isset($fields['empresa_id']) && !empty($fields['empresa_id']) ){ $params[] = "contratos.empresa_id = " . $fields['empresa_id']; } if( isset($fields['rota_id']) && !empty($fields['rota_id']) ){ $params[] = "corretores.rota_id = " . $fields['rota_id']; } if( isset($fields['gerente_id']) && !empty($fields['gerente_id']) ){ $params[] = "gerentes.id = " . $fields['gerente_id']; } if( isset($fields['supervisor_id']) && !empty($fields['supervisor_id']) ){ $params[] = "gerentes_rotas.id = " . $fields['supervisor_id']; } if( isset($fields['status_proposta']) && !empty($fields['status_proposta']) ){ if( is_array($fields['status_proposta']) ){ $fields['status_proposta'] = array_filter($fields['status_proposta']); $params[] = "contratos.status_proposta IN ('" . implode("','", $fields['status_proposta']) . "')"; } else { $params[] = 'contratos.status_proposta = ' . $fields['status_proposta']; } } if( isset($fields['banco_id']) && !empty($fields['banco_id']) ){ $params[] = "contratos.banco_id = " . $fields['banco_id']; } if( isset($fields['convenio_id']) && !empty($fields['convenio_id']) ){ $params[] = "contratos.convenio_id = " . $fields['convenio_id']; } if( isset($fields['tipo_contrato']) && !empty($fields['tipo_contrato']) ){ if( is_array($fields['tipo_contrato']) ){ $fields['tipo_contrato'] = array_filter($fields['tipo_contrato']); $params[] = ("contratos.tipo IN ('" . implode("','", $fields['tipo_contrato']) . "')"); } else { $params[] = ("contratos.tipo = '" . $fields['tipo_contrato'] . "'"); } } if( isset($fields['periodo_data1']) && !empty($fields['periodo_data1']) && isset($fields['periodo_data1_a']) && !empty($fields['periodo_data1_a']) && $fields['periodo1'] ){ $params[] = "(data_emissao >= STR_TO_DATE('" . $fields['periodo_data1'] . "', '%d/%m/%Y') AND " . " data_emissao <= STR_TO_DATE('" . $fields['periodo_data1_a'] . "', '%d/%m/%Y'))"; } if( isset($fields['periodo_data2']) && !empty($fields['periodo_data2']) && isset($fields['periodo_data2_a']) && !empty($fields['periodo_data2_a']) && !$fields['periodo1'] ){ $params[] = "(data_emissao >= STR_TO_DATE('" . $fields['periodo_data2'] . "', '%d/%m/%Y') AND " . " data_emissao <= STR_TO_DATE('" . $fields['periodo_data2_a'] . "', '%d/%m/%Y'))"; } $where = implode(' AND ', $params); $dbtable = new Model_DbTable_Contrato(); $select = $dbtable->getAdapter()->select() ->from(array( 'contratos' => 'tb_contratos' ), array( 'base_comissao' => 'SUM(contratos.base_comissao_valor)', 'mes' => 'MONTH(contratos.data_emissao)', 'ano' => 'YEAR(contratos.data_emissao)' )) ->joinInner(array( 'corretores' => 'tb_corretores' ), "contratos.corretor_id = corretores.id", array( 'corretor' => 'nome' )) ->joinLeft(array( 'convenios' => 'tb_convenios' ), "contratos.convenio_id = convenios.id", array( 'convenio' => 'nome' )) ->joinLeft(array( 'rotas' => 'tb_rotas' ), "corretores.rota_id = rotas.id", array( 'rota' => 'nome' )) ->joinLeft(array( 'gerentes_rotas' => "tb_gerente_rota" ), 'rotas.gerente_id = gerentes_rotas.id', array( 'supervisor' => 'nome' )) ->joinLeft(array( 'gerentes' => "tb_gerentes" ), 'gerentes_rotas.gerente_id = gerentes.id', array()) ->where($where) ->group(array( 'corretores.id', 'mes' )) ->order($order); return $dbtable->getAdapter()->fetchAll($select); } /** * Lista os corretores que não produziram no período * @param type $fields * @param type $order * @return type */ public function corretoresSemProducao($fields = null) { $params = array( "contratos.tipo_registro = 1 AND contratos.excluido<>1 AND (corretores.corretor_desativado IS NULL OR corretores.corretor_desativado <> 1)" ); if( isset($fields['data_emissao_de']) && !empty($fields['data_emissao_de']) && isset($fields['data_emissao_a']) && !empty($fields['data_emissao_a']) ){ $params[] = "(data_emissao >= STR_TO_DATE('" . $fields['data_emissao_de'] . "', '%d/%m/%Y') AND " . " data_emissao <= STR_TO_DATE('" . $fields['data_emissao_a'] . "', '%d/%m/%Y'))"; } if( isset($fields['data_liberacao_de']) && !empty($fields['data_liberacao_de']) && isset($fields['data_liberacao_a']) && !empty($fields['data_liberacao_a']) ){ $params[] = "(data_liberacao >= STR_TO_DATE('" . $fields['data_liberacao_de'] . "', '%d/%m/%Y') AND " . " data_liberacao <= STR_TO_DATE('" . $fields['data_liberacao_a'] . "', '%d/%m/%Y'))"; } if( isset($fields['empresa_id']) && !empty($fields['empresa_id']) ){ $params[] = "contratos.empresa_id = " . $fields['empresa_id']; } if( isset($fields['rota_id']) && !empty($fields['rota_id']) ){ $params[] = "corretores.rota_id = " . $fields['rota_id']; } if( isset($fields['gerente_id']) && !empty($fields['gerente_id']) ){ $params[] = "gerentes_rotas.id = " . $fields['gerente_id']; } if( isset($fields['status_proposta']) && !empty($fields['status_proposta']) ){ if( is_array($fields['status_proposta']) ){ $fields['status_proposta'] = array_filter($fields['status_proposta']); $params[] = "contratos.status_proposta IN ('" . implode("','", $fields['status_proposta']) . "')"; } else { $params[] = 'contratos.status_proposta = ' . $fields['status_proposta']; } } if( isset($fields['banco_id']) && !empty($fields['banco_id']) ){ $params[] = "contratos.banco_id = " . $fields['banco_id']; } if( isset($fields['tipo_contrato']) && !empty($fields['tipo_contrato']) ){ if( is_array($fields['tipo_contrato']) ){ $fields['tipo_contrato'] = array_filter($fields['tipo_contrato']); $params[] = ("contratos.tipo IN ('" . implode("','", $fields['tipo_contrato']) . "')"); } else { $params[] = ("contratos.tipo = '" . $fields['tipo_contrato'] . "'"); } } $where = implode(" AND ", $params); $dbtable = new Model_DbTable_Corretor(); $select = $dbtable->getAdapter()->select() ->from(array( 'contratos' => 'tb_contratos' ), array( 'corretor_id' )) ->joinInner(array( 'corretores' => 'tb_corretores' ), "contratos.corretor_id = corretores.id", array()) ->joinLeft(array( 'rotas' => 'tb_rotas' ), "corretores.rota_id = rotas.id", array()) ->joinLeft(array( 'gerentes_rotas' => "tb_gerente_rota" ), 'rotas.gerente_id = gerentes_rotas.id', array()) ->joinLeft(array( 'gerentes' => "tb_gerentes" ), 'gerentes_rotas.gerente_id = gerentes.id', array()) ->where($where); return $dbtable->fetchAll("id NOT IN (" . $select . ") AND (corretor_desativado IS NULL OR corretor_desativado <> 1)", "nome ASC"); } public function getRefinanciamento(array $fields, $page = null, $limit = null, $order = array(), $range = null) { $dbtable = new Model_DbTable_Contrato(); $select = $this->_getSelectProducaoAnalitico($dbtable, array( 'contratos.numero_contrato', 'contratos.tipo', 'contratos.prazo', 'contratos.valor_bruto', 'contratos.valor_liquido', 'contratos.comissao_empresa', 'contratos.bonus_empresa', 'contratos.adiantamento_comissao_empresa', 'contratos.comissao_corretor', 'contratos.bonus_corretor', 'contratos.corretor_id', 'contratos.data_liberacao', 'clientes.fone', 'clientes.celular', 'contratos.bonus_recebido' ) ); $select->group(array( 'contratos.id' )); $this->_prepareFilterSelect($fields, $select); if( $order != null ){ $select->order($order); } else { $select->order(array( 'corretores.nome ASC', 'clientes.nome ASC', 'contratos.data_liberacao ASC' )); } if( $page ){ $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($page); if( $limit && is_numeric($limit) ){ $paginator->setItemCountPerPage($limit); } if( $range && is_numeric($range) ){ $paginator->setPageRange($range); } return $paginator; } } public function getRefinanciamentoTotalizador(array $fields) { $dbtable = new Model_DbTable_Contrato(); $select = $this->_getSelectProducaoAnalitico($dbtable, array( 'total_valor_liquido' => 'SUM(valor_liquido)' )); $this->_prepareFilterSelect($fields, $select); return $dbtable->getAdapter()->fetchRow($select); } public function getProducaoAnalitico(array $fields, $page = null, $limit = null, $order = array( 'corretores.nome ASC', 'contratos.data_liberacao', 'contratos.id' ), $range = null) { $dbtable = new Model_DbTable_Contrato(); $select = $this->_getSelectProducaoAnalitico($dbtable, [ 'contrato_id' => 'contratos.id', 'contratos.numero_contrato', 'contratos.numero_ade', 'contratos.tipo', 'contratos.prazo', 'contratos.valor_bruto', 'contratos.valor_prestacao', 'contratos.comissao_empresa', 'contratos.digitador', 'contratos.cartao', 'contratos.valor_fixo_empresa', 'contratos.bonus_empresa', 'contratos.adiantamento_comissao_empresa', 'contratos.comissao_corretor', 'contratos.bonus_corretor', 'contratos.valor_fixo_corretor', 'contratos.corretor_id', 'contratos.captador_id', 'contratos.data_liberacao', 'contratos.data_emissao', 'contratos.produto', 'contratos.data_recebimento_comissao', 'contratos.bonus_recebido', 'contratos.base_comissao_valor', 'contratos.base_comissao_empresa_valor', 'contratos.base_comissao_bonus', 'contratos.base_comissao_empresa_bonus', 'contratos.base_comissao_empresa_adiantamento', 'contratos.base_comissao_adiantamento', 'contratos.anterior_banco', 'contratos.taxa_contrato', 'contratos.tipo_formalizacao', 'rota' => 'rotas.nome', 'supervisor' => 'gerentes_rotas.nome', 'valor_liquido' => 'SUM(contratos.valor_liquido)', 'contratos.valor_seguro', 'contratos.srcc', 'contratos.agencia_beneficiado', 'contratos.banco_beneficiado', 'contratos.conta_beneficiado' ], true ); $select->group('contratos.id'); $this->_prepareFilterSelect($fields, $select); if( $order != null ){ $select->order($order); } else { $select->order(array( 'corretores.nome ASC', 'contratos.data_liberacao' )); } if( $page ){ $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($page); if( $limit && is_numeric($limit) ){ $paginator->setItemCountPerPage($limit); } if( $range && is_numeric($range) ){ $paginator->setPageRange($range); } return $paginator; } return $dbtable->getAdapter()->fetchAll($select); } public function getProducaoAnaliticoCorretor(array $fields, $page = null, $limit = null, $order = array( 'corretores.nome ASC', 'contratos.data_liberacao', 'contratos.id' ), $range = null) { $dbtable = new Model_DbTable_Contrato(); $select = $this->_getSelectProducaoAnalitico($dbtable, [ 'contrato_id' => 'contratos.id', 'contratos.numero_contrato', 'contratos.numero_ade', 'contratos.tipo', 'contratos.prazo', 'contratos.valor_bruto', 'contratos.valor_prestacao', 'contratos.comissao_empresa', 'contratos.digitador', 'contratos.cartao', 'contratos.valor_fixo_empresa', 'contratos.bonus_empresa', 'contratos.adiantamento_comissao_empresa', 'contratos.comissao_corretor', 'contratos.bonus_corretor', 'contratos.valor_fixo_corretor', 'contratos.corretor_id', 'contratos.data_liberacao', 'contratos.data_emissao', 'contratos.produto', 'contratos.data_recebimento_comissao', 'contratos.bonus_recebido', 'contratos.base_comissao_valor', 'contratos.base_comissao_empresa_valor', 'contratos.base_comissao_bonus', 'contratos.base_comissao_empresa_bonus', 'contratos.base_comissao_empresa_adiantamento', 'contratos.base_comissao_adiantamento', 'contratos.especie', 'contratos.numero_beneficio', 'rota' => 'rotas.nome', 'supervisor' => 'gerentes_rotas.nome', 'valor_liquido' => 'contratos.valor_liquido' ], true ); $select ->joinLeft(['protocolos' => 'tb_protocolo_contrato'], 'protocolos.contrato_id = contratos.id AND protocolos.excluido<>1', ['protocolo_id']) ->joinLeft(['protocolo_pagamento' => 'tb_protocolo_pagamento'], 'protocolo_pagamento.id = protocolos.protocolo_id AND protocolo_pagamento.excluido<>1', ['dt_pag_protocolo' => 'data_pagamento']) ->group('contratos.id'); $this->_prepareFilterSelect($fields, $select); if ($order != null) { $select->order($order); } else { $select->order(['corretores.nome ASC', 'contratos.data_liberacao']); } if ($page) { $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($page); if ($limit && is_numeric($limit)) { $paginator->setItemCountPerPage($limit); } if ($range && is_numeric($range)) { $paginator->setPageRange($range); } return $paginator; } return $dbtable->getAdapter()->fetchAll($select); } public function getGroupProducaoAnalitico($fields, &$select) { if( ( !empty($fields['data_pagamento_de']) || !empty($fields['data_pagamento_a']) || !empty($fields['contrato_pago']) || !empty($fields['comissao_paga']) ) && !array_key_exists('protocolos_pagamentos', $select->getPart(Zend_Db_Select::FROM)) ){ $select->group(['protocolos_pagamentos.id', 'contratos.id']); }else{ $select->group(['contratos.id']); } } public function getProducaoAnaliticoTotalizador(array $fields) { $dbtable = new Model_DbTable_Contrato(); $select = $this->_getSelectProducaoAnalitico($dbtable, array( 'total_bruto' => 'SUM(valor_bruto)', 'total_liquido' => 'SUM(valor_liquido)', 'total_base_comissao_empresa' => 'SUM(base_comissao_empresa_valor)', 'total_comissao_empresa' => 'SUM(IFNULL(IFNULL(valor_fixo_empresa, 0) + IFNULL(base_comissao_empresa_valor, 0) * IFNULL(comissao_empresa, 0) / 100, 0))', 'total_bonus_empresa' => 'SUM(IFNULL(IFNULL(base_comissao_empresa_bonus, 0) * IFNULL(bonus_empresa,0) / 100, 0))', 'total_comissao_corretor' => 'SUM(IFNULL(IFNULL(contratos.valor_fixo_corretor, 0) + IFNULL(base_comissao_valor, 0) * IFNULL(comissao_corretor, 0) /100, 0))', 'total_bonus_corretor' => 'SUM(IFNULL(IFNULL(base_comissao_bonus, 0) * IFNULL(bonus_corretor, 0) / 100, 0))', )); $this->_prepareFilterSelect($fields, $select); return $dbtable->getAdapter()->fetchRow($select); } public function getProducaoFormalizacaoTotalizador(array $fields) { $dbtable = new Model_DbTable_Contrato(); $select = $this->_getSelectProducaoAnalitico($dbtable, array( 'total_bruto' => 'SUM(valor_bruto)', 'total_liquido' => 'SUM(valor_liquido)', 'total_comissao_empresa' => 'SUM(IF(comissao_empresa IS NULL, 0, (contratos.valor_fixo_empresa+base_comissao_empresa_valor*comissao_empresa/100)))', 'total_bonus_empresa' => 'SUM(IF(bonus_empresa IS NULL, 0, (base_comissao_empresa_bonus*bonus_empresa/100)))', 'total_comissao_corretor' => 'SUM(IF(comissao_corretor IS NULL, 0, (contratos.valor_fixo_corretor+base_comissao_valor*comissao_corretor/100)))', 'total_bonus_corretor' => 'SUM(IF(bonus_corretor IS NULL, 0, (base_comissao_bonus*bonus_corretor/100)))', )); $this->_prepareFilterSelect($fields, $select); return $dbtable->getAdapter()->fetchRow($select); } /** * Importa a planilha de recebimento do banco * @param int $bancoId * @param array $values * @return int */ public function importarComissaoBanco($bancoId, array $values, $usarPadrao = false, $inicioLaco = null, $layoutBanco = null, $arquivo = null) { $bancoId = (int) $bancoId; $result = null; $bancos = array( 1 => 'BRADESCO PROMOTORA', 2 => 'BV', 3 => 'MERCANTIL', 4 => 'PAN', 5 => 'BONSUCESSO', 6 => 'ITAU', 7 => 'BONSUCESSO', 8 => 'ITAU', 9 => 'CETELEM', 10 => 'SAFRA', 11 => 'BANCO GENERICO', 12 => 'C6 Bank', 13 => 'BMG', 14 => 'BMG', 15 => 'FACTA', 16 => 'C6 Bank', 17 => 'ITAU', 18 => 'FACTA', 51 => 'BANCO DO BRASIL', -1 => 'ICRED', -2 => 'NBC BANK', -3 => 'C6 Bank', -4 => 'BANCO DO BRASIL', -5 => 'BANCO DO BRASIL', -6 => 'BANCO DO BRASIL', -7 => 'BMG', -8 => 'BMG' ); if (!$bancoId) { throw new Core_Exception("Banco não informado."); } if ($usarPadrao) { $importarPadrao = new Core_Banco_Planilha_RecebimentoGenerica($bancoId); $importarPadrao->setArquivoOrigem($arquivo); return $importarPadrao->importar($values); } //verifica se está na lista implementada if (empty($bancos[$bancoId])) { $idBanco = Model_Banco::bancoPorNome(self::getBancosRecebimento()[$bancoId]); } else { $idBanco = Model_Banco::bancoPorNome($bancos[$bancoId]); } if ($layoutBanco) { $importarMeuLayout = new Core_Banco_Planilha_MeuLayoutComissao($idBanco); $importarMeuLayout->setInicioLaco($inicioLaco); $importarMeuLayout->setMeuLayout($layoutBanco); $importarMeuLayout->setBancoGenerico($bancos[$bancoId]); $importarMeuLayout->setArquivoOrigem($arquivo); return $importarMeuLayout->importar($values); } switch ( $bancoId ) { case 1: //Bradesco Recebimento $importarBradesco = new Core_Banco_Planilha_Bradesco_Recebimento($idBanco); $importarBradesco->setInicioLaco($inicioLaco); $importarBradesco->setArquivoOrigem($arquivo); $result = $importarBradesco->importar($values); break; case 2: //Bv Recebimento $importarBv = new Core_Banco_Planilha_Bv_Recebimento($idBanco); $importarBv->setInicioLaco($inicioLaco); $importarBv->setArquivoOrigem($arquivo); $result = $importarBv->importar($values); break; case 3: //Mercantil Recebimento $importarMercantil = new Core_Banco_Planilha_Mercantil_Recebimento($idBanco); $importarMercantil->setInicioLaco($inicioLaco); $importarMercantil->setArquivoOrigem($arquivo); $result = $importarMercantil->importar($values); break; case 4: //Pan Recebimento $importarPan = new Core_Banco_Planilha_Pan_Recebimento($idBanco); $importarPan->setArquivoOrigem($arquivo); $result = $importarPan->importar($values); break; case 5: //BBS $importarBbs = new Core_Banco_Planilha_Bonsucesso_Comissionamento($idBanco); $importarBbs->setInicioLaco($inicioLaco); $importarBbs->setArquivoOrigem($arquivo); $result = $importarBbs->importar($values); break; case 6: //ITAU $importarItau = new Core_Banco_Planilha_Itau_Comissionamento($idBanco); $importarItau->setInicioLaco($inicioLaco); $importarItau->setArquivoOrigem($arquivo); $result = $importarItau->importar($values); break; case 7: //BONSUCESSO DIÁRIO $importarBbs = new Core_Banco_Planilha_Bonsucesso_ComissionamentoDiario($idBanco); $importarBbs->setInicioLaco($inicioLaco); $importarBbs->setArquivoOrigem($arquivo); $result = $importarBbs->importar($values); break; case 8: //ITAU KGIRO $importar = new Core_Banco_Planilha_Itau_Kgiro($idBanco); $importar->setInicioLaco($inicioLaco); $importar->setArquivoOrigem($arquivo); $result = $importar->importar($values); break; case 9: //CETELEM $importar = new Core_Banco_Planilha_Cetelem_Comissao($idBanco); $importar->setInicioLaco($inicioLaco); $importar->setArquivoOrigem($arquivo); $result = $importar->importar($values); break; case 10: //SAFRA $importar = new Core_Banco_Planilha_Safra_Comissao($idBanco); $importar->setInicioLaco($inicioLaco); $importar->setArquivoOrigem($arquivo); $result = $importar->importar($values); break; case 11: throw new Exception("Por favor, selecione um layout para o banco genérico. Caso não tenha cadastrado <a href='../layout-banco-comissao/save' target='_blank'>clique aqui</a>."); break; case 12: //C6 Bank $importar = new Core_Banco_Planilha_C6_Comissao($idBanco); $importar->setInicioLaco($inicioLaco); $importar->setArquivoOrigem($arquivo); $result = $importar->importar($values); break; case 13: //BMG $importar = new Core_Banco_Planilha_Bmg_ComissaoDiferida($idBanco); $importar->setInicioLaco($inicioLaco); $importar->setArquivoOrigem($arquivo); $result = $importar->importar($values); break; case 14: //BMG $importar = new Core_Banco_Planilha_Bmg_AcertoCard($idBanco); $importar->setInicioLaco($inicioLaco); $importar->setArquivoOrigem($arquivo); $result = $importar->importar($values); break; case 15: //FACTA $importar = new Core_Banco_Planilha_Facta_Comissionamento($idBanco); $importar->setInicioLaco($inicioLaco); $importar->setArquivoOrigem($arquivo); $result = $importar->importar($values); break; case 16: //C6 BANK $importar = new Core_Banco_Planilha_C6_NaoComissionados($idBanco); $importar->setInicioLaco($inicioLaco); $importar->setArquivoOrigem($arquivo); $result = $importar->importar($values); break; case 17: //ITAU IC 360 $importar = new Core_Banco_Planilha_Itau_ComissaoIc360($idBanco); $importar->setInicioLaco($inicioLaco); $importar->setArquivoOrigem($arquivo); $result = $importar->importar($values); break; case 18: //FACTA $importar = new Core_Banco_Planilha_Facta_Comissionamento2($idBanco); $importar->setInicioLaco($inicioLaco); $importar->setArquivoOrigem($arquivo); $result = $importar->importar($values); break; case 51: //Banco do Brasil (Abertura de Conta diário) $importar = new Core_Banco_Planilha_BB_ComissaoAberturaConta($idBanco); $importar->setInicioLaco($inicioLaco); $importar->setArquivoOrigem($arquivo); $result = $importar->importar($values); break; case -1: //ICRED $importar = new Core_Banco_Planilha_Icred_Comissao($idBanco); $importar->setInicioLaco($inicioLaco); $importar->setArquivoOrigem($arquivo); $result = $importar->importar($values); break; case -2: //NBC $importar = new Core_Banco_Planilha_NBC_Comissao($idBanco); $importar->setInicioLaco($inicioLaco); $importar->setArquivoOrigem($arquivo); $result = $importar->importar($values); break; case -3: //C6 Bank Débito SRCC $importar = new Core_Banco_Planilha_C6_DebitoSrcc($idBanco); $importar->setInicioLaco($inicioLaco); $importar->setArquivoOrigem($arquivo); $result = $importar->importar($values); break; case -4: //Banco do Brasil (Á Vista) $importar = new Core_Banco_Planilha_BB_ComissaoAVista($idBanco); $importar->setInicioLaco($inicioLaco); $importar->setArquivoOrigem($arquivo); $result = $importar->importar($values); break; case -5: //Banco do Brasil (PRT) $importar = new Core_Banco_Planilha_BB_ComissaoPrt($idBanco); $importar->setInicioLaco($inicioLaco); $importar->setArquivoOrigem($arquivo); $result = $importar->importar($values); break; case -6: //Banco do Brasil (SEGURO) $importar = new Core_Banco_Planilha_BB_ComissaoSeguro($idBanco); $importar->setInicioLaco($inicioLaco); $importar->setArquivoOrigem($arquivo); $result = $importar->importar($values); break; case -7: //BMG $importar = new Core_Banco_Planilha_Bmg_Cartao_ComissaoAtoConsolidado($idBanco); $importar->setInicioLaco($inicioLaco); $importar->setArquivoOrigem($arquivo); $result = $importar->importar($values); break; case -8: // BMG (SEGURO ATO CONSOLIDADO) $importarBmgSeguro = new Core_Banco_Planilha_Bmg_SeguroAto($idBanco); $importarBmgSeguro->setInicioLaco($inicioLaco); $result = $importarBmgSeguro->importar($values); break; } return $result; } /** * Importa a planilha de produção do banco * @param int $bancoId * @param array $values * @return int */ public function importarProducaoBanco($bancoId, array $values, $inicioLaco = null, $subestabelecidoId = null, $extensao = null, $log = null, $layoutBanco = null) { $bancoId = (int) $bancoId; $result = null; $bancos = array( 1 => 'BMG', // 99 => 'BMG', 2 => 'BRADESCO PROMOTORA', 3 => 'BV', 4 => 'DAYCOVAL', 5 => 'MERCANTIL', 6 => 'BMG', 7 => 'BMG', 8 => 'BANRISUL', 9 => 'ITAÚ', 10 => 'ITAÚ', 11 => 'CIFRA', 12 => 'BCV', 13 => 'BMG', 14 => 'MERCANTIL', 15 => 'BMG', 16 => 'PAN', 17 => 'BCV', 18 => 'BCV', 19 => 'CIFRA', 20 => 'CIFRA', 21 => 'ITAÚ', 22 => 'DAYCOVAL', 23 => '', 24 => 'PAN', 25 => 'BV', 27 => '', 28 => 'PAN', 29 => 'BRADESCO PROMOTORA', 30 => 'BONSUCESSO', 31 => 'BONSUCESSO', 32 => 'BONSUCESSO', 33 => 'BONSUCESSO', 34 => 'CETELEM', 37 => 'BANCO GENERICO', 39 => 'MERCANTIL', 40 => 'MERCANTIL', 41 => 'BGN', 42 => 'BGN', 43 => 'ITAÚ', 44 => 'BONSUCESSO', 45 => 'BMG', 46 => 'BRADESCO PROMOTORA', 47 => 'PAN', 48 => 'ITAÚ', 49 => 'C6 Bank', // LAYOUT BANCO 26 => 'BGN', 35 => 'SAFRA', 36 => 'BEVI', 38 => 'SABEMI', 50 => 'BANCO DO BRASIL', 51 => 'BANCO DO BRASIL', 52 => 'BMG', 53 => 'BMG', 54 => 'ITAÚ', 55 => 'DIGIO', 74 => 'BMG', -1 => 'ICRED', -2 => 'NBC BANK', -3 => 'AMIGOZ' ); if ($bancoId == 0 || (empty($layoutBanco) && empty($bancos[$bancoId]))) { throw new Core_Exception('Banco/Layout não identificado.'); } //verifica se está na lista implementada if (empty($bancos[$bancoId])) { $idBanco = Model_Banco::bancoPorNome(self::getBancos()[$bancoId]); } else { $idBanco = Model_Banco::bancoPorNome($bancos[$bancoId]); } if ($layoutBanco) { $importarMeuLayout = new Core_Banco_Planilha_MeuLayout($idBanco); $importarMeuLayout->setInicioLaco($inicioLaco); $importarMeuLayout->setArquivoOrigem($log); $importarMeuLayout->setMeuLayout($layoutBanco); $importarMeuLayout->setSubestabelecidoId($subestabelecidoId); $importarMeuLayout->setBancoGenerico($bancos[$bancoId] == "BANCO GENERICO"); return $importarMeuLayout->importar($values); } switch ( $bancoId ) { case 1: //BMG $importarBmg = new Core_Banco_Planilha_Bmg_ComissaoSaldoPago($idBanco, $extensao); $importarBmg->setInicioLaco($inicioLaco); $importarBmg->setSubestabelecidoId($subestabelecidoId); $importarBmg->setArquivoOrigem($log); $result = $importarBmg->importar($values); break; case 13: //BMG $importarBmg = new Core_Banco_Planilha_Bmg_ComissaoConsignado($idBanco, $extensao); $importarBmg->setInicioLaco($inicioLaco); $importarBmg->setSubestabelecidoId($subestabelecidoId); $importarBmg->setArquivoOrigem($log); $result = $importarBmg->importar($values); break; case 7: //BMG DIRETO $importarBmg = new Core_Banco_Planilha_Bmg_Cartao_Comissao($idBanco, $extensao); $importarBmg->setInicioLaco($inicioLaco); $importarBmg->setSubestabelecidoId($subestabelecidoId); $importarBmg->setArquivoOrigem($log); $result = $importarBmg->importar($values); break; case 74: //BMG SUB $importarBmg = new Core_Banco_Planilha_Bmg_Cartao_ComissaoSub($idBanco, $extensao); $importarBmg->setInicioLaco($inicioLaco); $importarBmg->setSubestabelecidoId($subestabelecidoId); $importarBmg->setArquivoOrigem($log); $result = $importarBmg->importar($values); break; // case 99: //BMG // $importarBmg = new Core_Banco_Planilha_Bmg_Cartao_ComissaoSaque($idBanco, $extensao); // $importarBmg->setInicioLaco($inicioLaco); // $importarBmg->setSubestabelecidoId($subestabelecidoId); // $importarBmg->setArquivoOrigem($log); // $result = $importarBmg->importar($values); // break; case 45: $importarBmg = new Core_Banco_Planilha_Bmg_Cartao_ComissaoSaldoPago($idBanco, $extensao); $importarBmg->setInicioLaco($inicioLaco); $importarBmg->setSubestabelecidoId($subestabelecidoId); $importarBmg->setArquivoOrigem($log); $result = $importarBmg->importar($values); break; case 9: //ITAÚ case 11: //CIFRA case 12: //BCV $importarBmg = new Core_Banco_Planilha_Itau_Comissao($idBanco, $extensao); $importarBmg->setInicioLaco($inicioLaco); $importarBmg->setSubestabelecidoId($subestabelecidoId); $importarBmg->setArquivoOrigem($log); $result = $importarBmg->importar($values); break; case 2: $importarBradesco = new Core_Banco_Planilha_Bradesco_Producao($idBanco); $importarBradesco->setInicioLaco($inicioLaco); $importarBradesco->setSubestabelecidoId($subestabelecidoId); $importarBradesco->setArquivoOrigem($log); $result = $importarBradesco->importar($values); break; case 3: $importarBv = new Core_Banco_Planilha_Bv_Pagos($idBanco); $importarBv->setInicioLaco($inicioLaco); $importarBv->setSubestabelecidoId($subestabelecidoId); $importarBv->setArquivoOrigem($log); $result = $importarBv->importar($values); break; case 4: $ns = new Zend_Session_Namespace('importacao_prod_banco'); if( isset($ns->cabecalho) ){ /* Planilha com 2 colunas (Forma de liberação, Motivo Estorno, Valor liberação) */ $importarDaycoval = new Core_Banco_Planilha_Daycoval_Producao($idBanco); foreach ( $ns->cabecalho as $value ) { /* Planilha com 3 colunas (Forma de liberação, Motivo Estorno, Valor liberação) */ if( $value['AO'] == 'Motivo do Estorno 3' ){ $importarDaycoval = new Core_Banco_Planilha_Daycoval_Producao2($idBanco); break; } } } $importarDaycoval->setInicioLaco($inicioLaco); $importarDaycoval->setSubestabelecidoId($subestabelecidoId); $importarDaycoval->setArquivoOrigem($log); $result = $importarDaycoval->importar($values); break; case 5: // IMPORTAÇÃO MERCATIL (PAGOS) $importarMercantil = new Core_Banco_Planilha_Mercantil_Pagos($idBanco); $importarMercantil->setInicioLaco($inicioLaco); $importarMercantil->setSubestabelecidoId($subestabelecidoId); $importarMercantil->setArquivoOrigem($log); $result = $importarMercantil->importar($values); break; case 6: //BMG $importarBmgExtrator = new Core_Banco_Planilha_Bmg_Cartao_Extrator($idBanco); $importarBmgExtrator->setInicioLaco($inicioLaco); $importarBmgExtrator->setSubestabelecidoId($subestabelecidoId); $importarBmgExtrator->setArquivoOrigem($log); $result = $importarBmgExtrator->importar($values); break; case 10: //ITAÚ case 18: //BCV case 20: //CIFRA $importarBmgExtrator = new Core_Banco_Planilha_Itau_Extrator($idBanco); $importarBmgExtrator->setInicioLaco($inicioLaco); $importarBmgExtrator->setSubestabelecidoId($subestabelecidoId); $importarBmgExtrator->setArquivoOrigem($log); $result = $importarBmgExtrator->importar($values); break; case 14: // IMPORTAÇÃO MERCANTIL (GERAL) $importarMercantil = new Core_Banco_Planilha_Mercantil_Producao($idBanco); $importarMercantil->setInicioLaco($inicioLaco); $importarMercantil->setSubestabelecidoId($subestabelecidoId); $importarMercantil->setArquivoOrigem($log); $result = $importarMercantil->importar($values); break; case 15: //BMG $importarBmg = new Core_Banco_Planilha_Bmg_ComissaoAberturaConta($idBanco, $extensao); $importarBmg->setInicioLaco($inicioLaco); $importarBmg->setSubestabelecidoId($subestabelecidoId); $importarBmg->setArquivoOrigem($log); $result = $importarBmg->importar($values); break; case 17: //BCV case 19: //CIFRA case 21: //ITAÚ $importarBmg = new Core_Banco_Planilha_Bmg_Bonus($idBanco); $importarBmg->setInicioLaco($inicioLaco); $importarBmg->setSubestabelecidoId($subestabelecidoId); $importarBmg->setArquivoOrigem($log); $result = $importarBmg->importar($values); break; case 16: $importarPan = new Core_Banco_Planilha_Pan_PanXLS($idBanco); $importarPan->setInicioLaco($inicioLaco); $importarPan->setSubestabelecidoId($subestabelecidoId); $importarPan->setArquivoOrigem($log); $result = $importarPan->importar($values); break; case 8: $importarBanrisul = new Core_Banco_Planilha_Banrisul_Producao($idBanco); $importarBanrisul->setInicioLaco($inicioLaco); $importarBanrisul->setSubestabelecidoId($subestabelecidoId); $importarBanrisul->setArquivoOrigem($log); $result = $importarBanrisul->importar($values); break; case 22: //DAYCOVAL $importarBmg = new Core_Banco_Planilha_Daycoval_Cartao($idBanco); $importarBmg->setInicioLaco($inicioLaco); $importarBmg->setSubestabelecidoId($subestabelecidoId); $importarBmg->setArquivoOrigem($log); $result = $importarBmg->importar($values); break; case 24: //Planilha Pan Novo Formato $importarPanNovoFormato = new Core_Banco_Planilha_Pan_ExtratorCsv($idBanco); $importarPanNovoFormato->setSubestabelecidoId($subestabelecidoId); $importarPanNovoFormato->setArquivoOrigem($log); $importarPanNovoFormato->setInicioLaco($inicioLaco); $result = $importarPanNovoFormato->importar($values); break; case 47: //Planilha Pan Cartão novo Layout $importarPanNovoFormato = new Core_Banco_Planilha_Pan_Cartao_ExtratorCartao($idBanco); $importarPanNovoFormato->setSubestabelecidoId($subestabelecidoId); $importarPanNovoFormato->setArquivoOrigem($log); $importarPanNovoFormato->setInicioLaco($inicioLaco); $result = $importarPanNovoFormato->importar($values); break; case 25: //Bv $importarBvProducao = new Core_Banco_Planilha_Bv_Producao($idBanco); $importarBvProducao->setInicioLaco($inicioLaco); $importarBvProducao->setSubestabelecidoId($subestabelecidoId); $importarBvProducao->setArquivoOrigem($log); $result = $importarBvProducao->importar($values); break; case 28: //Cartao PAN (Comissao) $importarProducao = new Core_Banco_Planilha_Pan_Cartao_Comissao($idBanco); $importarProducao->setSubestabelecidoId($subestabelecidoId); $importarProducao->setInicioLaco($inicioLaco); $importarProducao->setArquivoOrigem($log); $result = $importarProducao->importar($values); break; case 29: //Bradesco promotora (BP NET) $importarProducao = new Core_Banco_Planilha_Bradesco_ProducaoBpNet($idBanco); $importarProducao->setSubestabelecidoId($subestabelecidoId); $importarProducao->setInicioLaco($inicioLaco); $importarProducao->setArquivoOrigem($log); $result = $importarProducao->importar($values); break; case 30: //Bonsucesso Cliente $importarProducao = new Core_Banco_Planilha_Bonsucesso_Cliente($extensao); $importarProducao->setInicioLaco($inicioLaco); $importarProducao->setArquivoOrigem($log); $result = $importarProducao->importar($values); break; case 31: //Bonsucesso DadosProposta $importarProducao = new Core_Banco_Planilha_Bonsucesso_DadosProposta($idBanco, $extensao); $importarProducao->setSubestabelecidoId($subestabelecidoId); $importarProducao->setInicioLaco($inicioLaco); $importarProducao->setArquivoOrigem($log); $result = $importarProducao->importar($values); break; case 32: //Bonsucesso Status $importarProducao = new Core_Banco_Planilha_Bonsucesso_Status($idBanco, $extensao); $importarProducao->setArquivoOrigem($log); $result = $importarProducao->importar($values); break; case 33: //Bonsucesso CreditoCliente break; case 39://Ted (Cancelada) $importarMercantil = new Core_Banco_Planilha_Mercantil_TedCancelada($idBanco); $importarMercantil->setInicioLaco($inicioLaco); $importarMercantil->setSubestabelecidoId($subestabelecidoId); $importarMercantil->setArquivoOrigem($log); $result = $importarMercantil->importar($values); break; case 40://Op (Cancelada) $importarMercantil = new Core_Banco_Planilha_Mercantil_OpCancelada($idBanco); $importarMercantil->setInicioLaco($inicioLaco); $importarMercantil->setSubestabelecidoId($subestabelecidoId); $importarMercantil->setArquivoOrigem($log); $result = $importarMercantil->importar($values); break; case 41: //BGN (Comissionamento) $importarBgnComissao = new Core_Banco_Planilha_Bgn_Comissao($idBanco); $importarBgnComissao->setSubestabelecidoId($subestabelecidoId); $importarBgnComissao->setInicioLaco($inicioLaco); $importarBgnComissao->setArquivoOrigem($log); $result = $importarBgnComissao->importar($values); break; case 42: //BGN (Produção) $importarBgnProducao = new Core_Banco_Planilha_Bgn_Producao($idBanco); $importarBgnProducao->setSubestabelecidoId($subestabelecidoId); $importarBgnProducao->setInicioLaco($inicioLaco); $importarBgnProducao->setArquivoOrigem($log); $result = $importarBgnProducao->importar($values); break; case 43: //ITAÚ (Atualização de Status) $importarItauStatus = new Core_Banco_Planilha_Itau_AtualizarStatus($idBanco); $importarItauStatus->setSubestabelecidoId($subestabelecidoId); $importarItauStatus->setInicioLaco($inicioLaco); $importarItauStatus->setArquivoOrigem($log); $result = $importarItauStatus->importar($values); break; case 44: //Bonsucesso (Atualização de Status) $importarItauStatus = new Core_Banco_Planilha_Bonsucesso_AtualizarStatus($idBanco); $importarItauStatus->setSubestabelecidoId($subestabelecidoId); $importarItauStatus->setInicioLaco($inicioLaco); $importarItauStatus->setArquivoOrigem($log); $result = $importarItauStatus->importar($values); break; case 46: //Bradesco promotora (FTP) $importarProducao = new Core_Banco_Planilha_Bradesco_ProducaoFtp($idBanco); $importarProducao->setSubestabelecidoId($subestabelecidoId); $importarProducao->setArquivoOrigem($log); $result = $importarProducao->importar($values); break; case 48: //ITAU QLIKVIEW $importarProducao = new Core_Banco_Planilha_Itau_ExtratorQlikView($idBanco); $importarProducao->setInicioLaco($inicioLaco); $importarProducao->setSubestabelecidoId($subestabelecidoId); $importarProducao->setArquivoOrigem($log); $result = $importarProducao->importar($values); break; case 49: // C6 $importarProducao = new Core_Banco_Planilha_C6_Producao($idBanco); $importarProducao->setInicioLaco($inicioLaco); $importarProducao->setSubestabelecidoId($subestabelecidoId); $importarProducao->setArquivoOrigem($log); $result = $importarProducao->importar($values); break; case 34: //Cetelem Producao $importarProducao = new Core_Banco_Planilha_Cetelem_Producao($idBanco); $importarProducao->setInicioLaco($inicioLaco); $importarProducao->setSubestabelecidoId($subestabelecidoId); $importarProducao->setArquivoOrigem($log); $result = $importarProducao->importar($values); break; case 50: // Banco do Brasil (Planilha diaria emprestimo) $importarBancoDoBrasil = new Core_Banco_Planilha_BB_Emprestimo($idBanco); $importarBancoDoBrasil->setSubestabelecidoId($subestabelecidoId); $importarBancoDoBrasil->setInicioLaco($inicioLaco); $importarBancoDoBrasil->setArquivoOrigem($log); $result = $importarBancoDoBrasil->importar($values); break; case 51: // Banco do Brasil (Planilha diaria abertura conta) $importarBancoDoBrasil = new Core_Banco_Planilha_BB_AberturaConta($idBanco); $importarBancoDoBrasil->setSubestabelecidoId($subestabelecidoId); $importarBancoDoBrasil->setInicioLaco($inicioLaco); $importarBancoDoBrasil->setArquivoOrigem($log); $result = $importarBancoDoBrasil->importar($values); break; case 52: // BMG (SEGURO) $importarBmgSeguro = new Core_Banco_Planilha_Bmg_Seguro($idBanco); $importarBmgSeguro->setSubestabelecidoId($subestabelecidoId); $importarBmgSeguro->setInicioLaco($inicioLaco); $importarBmgSeguro->setArquivoOrigem($log); $result = $importarBmgSeguro->importar($values); break; case 53: // BMG (FGTS) $importarBmg = new Core_Banco_Planilha_Bmg_ComissaoFgts($idBanco); $importarBmg->setInicioLaco($inicioLaco); $importarBmg->setArquivoOrigem($log); $result = $importarBmg->importar($values); break; // case 53: // BMG (FGTS) // $importarBmg = new Core_Banco_Planilha_Bmg_ComissaoSaqueFgts($idBanco); // $importarBmg->setInicioLaco($inicioLaco); // $importarBmg->setArquivoOrigem($log); // $result = $importarBmg->importar($values); // break; case 54: //ITAÚ IC360 $importarItauIc360 = new Core_Banco_Planilha_Itau_Ic360($idBanco); $importarItauIc360->setInicioLaco($inicioLaco); $importarItauIc360->setSubestabelecidoId($subestabelecidoId); $importarItauIc360->setArquivoOrigem($log); $result = $importarItauIc360->importar($values); break; case 55: //DÍGIO $importarDigio = new Core_Banco_Planilha_Digio_Producao($idBanco); $importarDigio->setInicioLaco($inicioLaco); $importarDigio->setSubestabelecidoId($subestabelecidoId); $importarDigio->setArquivoOrigem($log); $result = $importarDigio->importar($values); break; case -1: //ICRED $importar = new Core_Banco_Planilha_Icred_Producao($idBanco, $extensao); $importar->setInicioLaco($inicioLaco); $importar->setSubestabelecidoId($subestabelecidoId); $importar->setArquivoOrigem($log); $result = $importar->importar($values); break; case -2: //NBC $importar = new Core_Banco_Planilha_NBC_Producao($idBanco, $extensao); $importar->setInicioLaco($inicioLaco); $importar->setSubestabelecidoId($subestabelecidoId); $importar->setArquivoOrigem($log); $result = $importar->importar($values); break; case -3: //AMIGOZ $importar = new Core_Banco_Planilha_Amigoz_Producao($idBanco, $extensao); $importar->setInicioLaco($inicioLaco); $importar->setSubestabelecidoId($subestabelecidoId); $importar->setArquivoOrigem($log); $result = $importar->importar($values); break; default : throw new Core_Exception('Layout não reconhecido! Informe um layout válido.'); break; } return $result; } /** * Importa a planilha de TED devolvida * @param int $bancoId * @param array $values * @return int */ public function importarTedDevolvida($bancoId, array $values) { $bancoId = (int) $bancoId; $result = null; if( $bancoId > 0 ){ switch ( $bancoId ) { case 1: $model = new Core_TedDevolvida_Bmg(Model_Banco::bancoPorNome("BMG")); $result = $model->importar($values); break; case 2: $model = new Core_TedDevolvida_Mercantil(Model_Banco::bancoPorNome("Mercantil")); $result = $model->importar($values); break; case 3: $model = new Core_TedDevolvida_Pan(Model_Banco::bancoPorNome("PAN")); $result = $model->importar($values); break; } } return $result; } /** * Importa a planilha de TED devolvida * @param int $bancoId * @param array $values * @return int */ public function importarValorARecuperar($bancoId, array $values) { $bancoId = (int) $bancoId; $result = null; if( $bancoId > 0 ){ switch ( $bancoId ) { case 2: $model = new Core_Banco_Planilha_Bradesco_ValorARecuperar($bancoId); break; default: $model = new Core_Banco_Planilha_ValorARecuperar($bancoId); break; } $result = $model->importar($values); } return $result; } /** * Importa a planilha de TED devolvida * @param int $bancoId * @param array $values * @return int */ public function importarOpSacada($bancoId, array $values) { $bancoId = (int) $bancoId; if( $bancoId > 0 ){ switch ( $bancoId ) { case 1: $model = new Core_OpSacada_Bmg(); break; case 2: $model = new Core_OpSacada_Mercantil(); break; case 3: $model = new Core_OpSacada_Itau(); break; case 4: $model = new Core_OpSacada_Pan(); break; } $importacao = $model->importar($values); return $importacao; } return null; } public function getPaginatorAdapter($fields, $order = null) { $params = array( "contratos.tipo_registro = 1 AND (data_envio_fisico IS NULL OR data_envio_fisico = '0000-00-00')" ); if( isset($fields['data_emissao_de']) && !empty($fields['data_emissao_de']) && isset($fields['data_emissao_a']) && !empty($fields['data_emissao_a']) ){ $params[] = "(data_emissao >= STR_TO_DATE('" . $fields['data_emissao_de'] . "', '%d/%m/%Y') AND " . " data_emissao <= STR_TO_DATE('" . $fields['data_emissao_a'] . "', '%d/%m/%Y'))"; } if( isset($fields['data_liberacao_de']) && !empty($fields['data_liberacao_de']) && isset($fields['data_liberacao_a']) && !empty($fields['data_liberacao_a']) ){ $params[] = "(data_liberacao >= STR_TO_DATE('" . $fields['data_liberacao_de'] . "', '%d/%m/%Y') AND " . " data_liberacao <= STR_TO_DATE('" . $fields['data_liberacao_a'] . "', '%d/%m/%Y'))"; } if( isset($fields['empresa_id']) && !empty($fields['empresa_id']) ){ $params[] = "contratos.empresa_id = " . $fields['empresa_id']; } if( isset($fields['corretor_id']) && !empty($fields['corretor_id']) ){ $params[] = "corretor_id = " . $fields['corretor_id']; } if( isset($fields['numero_contrato']) && !empty($fields['numero_contrato']) ){ $params[] = "numero_contrato = '" . $fields['numero_contrato'] . "'"; } if( isset($fields['banco_id']) && !empty($fields['banco_id']) ){ $params[] = "banco_id = " . $fields['banco_id']; } if( isset($fields['status_proposta']) && !empty($fields['status_proposta']) ){ $params[] = "status_proposta = " . $fields['status_proposta']; } if( isset($fields['menos_status_proposta']) && !empty($fields['menos_status_proposta']) ){ $params[] = "(status_proposta <> " . implode(" AND status_proposta <> ", $fields['menos_status_proposta']) . ")"; } $where = null; if( count($params) > 0 ){ $where = implode(" AND ", $params); } $dbtable = new Model_DbTable_Contrato(); $select = $dbtable->getAdapter()->select()->from(array( 'contratos' => 'tb_contratos' ), array( 'contratos.*' )) ->joinInner(array( 'clientes' => 'tb_clientes' ), "contratos.cliente_id = clientes.id", array( 'cliente' => 'nome', 'cpf' )) ->joinLeft(array( 'corretores' => 'tb_corretores' ), "contratos.corretor_id = corretores.id", array( 'corretor' => 'nome' )) ->joinLeft(array( 'convenios' => 'tb_convenios' ), "contratos.convenio_id = convenios.id", array( 'convenio' => 'nome' )) ->joinLeft(array( 'tb_status_proposta' => 'tb_tipos' ), "contratos.status_proposta = tb_status_proposta.id", array( 'status_proposta_nome' => 'descricao' )) ->where($where) ->order($order) ->limit(1000); if( $where != null ) $select->where($where); if( $order != null ) $select->order($order); return new Zend_Paginator_Adapter_DbTableSelect($select); } public function relatorioPosVenda($fields) { $prospectos = new Model_DbTable_ProspectoContato(); $queryProspectos = $prospectos->getAdapter()->select() ->from('tb_prospectos_contatos', ['id', 'nota', 'contrato_id']) ->where('excluido = 0') ->order('id DESC'); $dbtable = new Model_DbTable_Contrato(); $query = $dbtable->getAdapter()->select() ->from(['contratos' => 'tb_contratos'], ['id', 'cliente_id', 'numero_contrato', 'data_liberacao']) ->joinInner(['clientes' => 'tb_clientes'], 'clientes.id = contratos.cliente_id', ['nome', 'cpf', 'fone', 'celular', 'email']) ->joinInner(['corretores' => 'tb_corretores'], 'contratos.corretor_id = corretores.id', ['corretor' => 'nome']) ->joinLeft(['prospecto' => $queryProspectos], 'contratos.id = prospecto.contrato_id', ['prospecto_id' => 'id', 'nota']) ->where("data_liberacao >= STR_TO_DATE(?, '%d/%m/%Y')", $fields['data_liberacao_de']) ->where("data_liberacao <= STR_TO_DATE(?, '%d/%m/%Y')", $fields['data_liberacao_a']) ->group('contratos.id') ->order(['TRIM(clientes.nome)', 'contratos.cliente_id']); if (!empty($fields['banco_id'])) { $query->where('banco_id = ?', $fields['banco_id']); } switch ($fields['situacao']) { case 1: $query->where('prospecto.id is not null'); break; case 2: $query->where('prospecto.id is null'); break; case 3: $query->where('prospecto.id is not null AND (nota is null OR nota < 0)'); break; } if (!empty($fields['corretor_id'])) { $query->where('contratos.corretor_id = ?', $fields['corretor_id']); } if (!empty($fields['status_proposta'])) { $ids = implode(', ', $fields['status_proposta']); $query->where("contratos.status_proposta IN ($ids)"); } return $dbtable->getAdapter()->fetchAll($query); } public function salvarAnexos(array $anexos, $contratoId) { $dbContrato = new Model_DbTable_Contrato(); $contrato = $dbContrato->fetchRow('id = ' . $contratoId); $dbCliente = new Model_DbTable_Cliente(); $paramsCliente = array(); $paramsContrato = array(); if( count($anexos) > 0 ){ if( isset($anexos['anexo_cpf']) ){ $paramsContrato['anexo_cpf'] = $anexos['anexo_cpf']; $paramsCliente['anexo_cpf'] = $anexos['anexo_cpf']; } if( isset($anexos['anexo_rg']) ){ $paramsContrato['anexo_rg'] = $anexos['anexo_rg']; $paramsCliente['anexo_rg'] = $anexos['anexo_rg']; } if( isset($anexos['anexo_contra_cheque']) ){ $paramsContrato['anexo_contra_cheque'] = $anexos['anexo_contra_cheque']; $paramsCliente['anexo_contra_cheque'] = $anexos['anexo_contra_cheque']; } if( isset($anexos['anexo_ficha_cadastral']) ){ $paramsContrato['anexo_ficha_cadastral'] = $anexos['anexo_ficha_cadastral']; } if( isset($anexos['anexo_beneficio']) ){ $paramsContrato['anexo_beneficio'] = $anexos['anexo_beneficio']; } if( isset($anexos['anexo_comprovante_residencia']) ){ $paramsContrato['anexo_comprovante_residencia'] = $anexos['anexo_comprovante_residencia']; } if( isset($anexos['anexo_termo_adesao']) ){ $paramsContrato['anexo_termo_adesao'] = $anexos['anexo_termo_adesao']; } if( isset($anexos['anexo_autorizacao_saque']) ){ $paramsContrato['anexo_autorizacao_saque'] = $anexos['anexo_autorizacao_saque']; } if( isset($anexos['anexo_arrogo_testemunha']) ){ $paramsContrato['anexo_arrogo_testemunha'] = $anexos['anexo_arrogo_testemunha']; } if( isset($anexos['anexo_capa']) ){ $paramsContrato['anexo_capa'] = $anexos['anexo_capa']; } try { if( count($paramsCliente) > 0 ){ $dbCliente->update($paramsCliente, 'id = ' . $contrato['cliente_id']); } if( count($paramsContrato) > 0 ){ $result = $dbContrato->update($paramsContrato, 'id = ' . $contratoId); } return $result; } catch ( Zend_Exception $e ) { print_r($e->getMessage()); } } return false; } public function setarPreviaRecebimento($contratoId) { $dbtable = new Model_DbTable_Contrato(); return $dbtable->previaRecebimento($contratoId); } public function alterarEstornado($contratoId) { $dbtable = new Model_DbTable_Contrato(); return $dbtable->alterarEstornado($contratoId); } public function alterarPreviaRecebimento($contratoId) { $dbTable = new Model_DbTable_Contrato(); return $dbTable->alterarPreviaRecebimento($contratoId); } public function excluirSelecionados(array $contratos) { if( !is_array($contratos) ){ return 0; } $cont = 0; foreach ( $contratos as $contratoId ) { try { $result = $this->excluir($contratoId); } catch ( Exception $e ) { continue; } if( $result > 0 ){ $cont++; } } return $cont; } public function getRelatorioImposto(array $periodo) { $dbtable = new Model_DbTable_Contrato(); $sql = $dbtable->getAdapter()->select() ->from(array( 'bancos' => 'tb_bancos' ), array( 'banco' => 'nome', 'imposto' )) ->joinLeft(array( 'contratos' => 'tb_contratos' ), 'bancos.id = contratos.banco_id', array( 'total' => 'SUM(contratos.base_comissao_empresa_valor)', 'valor_imposto' => '(SUM(contratos.base_comissao_empresa_valor) * bancos.imposto / 100)', 'valor_liquido' => '(SUM(contratos.valor_liquido))')) ->where("contratos.excluido <> 1 AND bancos.excluido <> 1 AND contratos.estornado <= 0") ->where("contratos.data_liberacao >= STR_TO_DATE('" . $periodo['periodo_de'] . "', '%d/%m/%Y')") ->where("contratos.data_liberacao <= STR_TO_DATE('" . $periodo['periodo_a'] . "', '%d/%m/%Y')") ->group(array( 'bancos.id' )) ->order('bancos.nome ASC'); return $dbtable->getAdapter()->fetchAll($sql); } public function exportarProducaoCorretor($contratos) { $dadosCsv = array(); $dadosCsv[] = implode(";", array( 'Banco', 'Nº Contrato', 'Tipo', 'Cliente', 'CPF Cliente', 'Endereço', 'Celular', 'Telefone', 'Data Nascimento', 'Cod. Tabela', 'Tabela', 'Convênio', 'Prazo', 'Produto', 'Status Proposta', 'Corretor', 'Valor Bruto', 'Valor Líquido', 'Base Comissão', 'Comissão (%)', 'Comissão ($)', 'Data Liberação', 'Data Emissão', 'Digitador', 'Nº ADE', 'VL. Parcela', 'Nº Protocolo', 'Data Pagamento', 'Tipo Benefício', 'Matrícula / Benefício', )); foreach( $contratos as $contrato ){ $ocultarSeCartao = Model_Contrato::ocultarSeCartao($contrato['tipo']); $dadosCsv[] = implode(";", array( $contrato['banco'], $contrato['numero_contrato'], $contrato['tipo'], $contrato['cliente'], $contrato['cpf_cliente'], $contrato['endereco_cliente'], $contrato['celular_cliente'], $contrato['fone_cliente'], $contrato['dt_nascimento_cliente'] != '0000-00-00' && $contrato['dt_nascimento_cliente'] ? $contrato['dt_nascimento_cliente'] : '', $contrato['codigo_tabela'], ($contrato['informacao_adicional']) ? $contrato['tabela'] . " " . $contrato['informacao_adicional'] : $contrato['tabela'], $contrato['convenio'], $contrato['prazo'], $contrato['produto'], $contrato['status_proposta_nome'], $contrato['corretor'], (!$ocultarSeCartao) ? number_format($contrato['valor_bruto'], 2, ',', '.') : "-", (!$ocultarSeCartao) ? number_format($contrato['valor_liquido'], 2, ',', '.') : "-", (!$ocultarSeCartao) ? number_format($contrato['base_comissao_valor'], 2, ',', '.') : "-", (!$ocultarSeCartao) ? number_format($contrato['comissao_corretor'], 2, ',', '.') : "-", (!$ocultarSeCartao) ? number_format($contrato['base_comissao_valor'] * ($contrato['comissao_corretor']/100), 2, ',', '.') : "-", $contrato['data_liberacao'] != '0000-00-00' && $contrato['data_liberacao'] ? $contrato['data_liberacao'] : '', $contrato['data_emissao'] != '0000-00-00' && $contrato['data_emissao'] ? $contrato['data_emissao'] : '', $contrato['digitador'], $contrato['numero_ade'], $contrato['valor_prestacao'], $contrato['protocolo_id'], $contrato['dt_pag_protocolo'], $contrato['especie'], $contrato['numero_beneficio'], )); } $exportCsv = utf8_decode(implode("\n", $dadosCsv)); $name = "YUPPIE-RELATORIO-PROCUCAO-CORRETOR-" . time() . ".csv"; $fileName = getcwd() . "/downloads/" . $name; $fp = fopen($fileName, "w+"); fwrite($fp, $exportCsv); fclose($fp); return $name; } public function corretorSemProducao(array $dados) { $params = [ 'contratos.excluido <> 1', 'clientes.excluido <> 1', 'contratos.corretor_id IS NOT NULL' ]; $where = NULL; if (!empty($dados['empresa_id'])) { $params[] = "contratos.empresa_id = " . $dados['empresa_id']; } if (!empty($dados['banco_id'])) { $params[] = "contratos.banco_id = " . $dados['banco_id']; } if (!empty($dados['convenio_id'])) { $params[] = "contratos.convenio_id = " . $dados['convenio_id']; } if (!empty($dados['rota_id'])) { $params[] = "rotas.id = " . $dados['rota_id']; } if (!empty($dados['supervisor_id'])) { $params[] = "supervisores.id = " . $dados['supervisor_id']; } if (!empty($dados['gerente_rota_id'])) { $params[] = "supervisores.id = " . $dados['gerente_rota_id']; } if (!empty($dados['gerente_id'])) { $params[] = "gerentes.id = " . $dados['gerente_id']; } if (!empty($dados['data_emissao_de'])) { $params[] = "contratos.data_emissao >= STR_TO_DATE('{$dados['data_emissao_de']}', '%d/%m/%Y')"; } if (!empty($dados['data_emissao_a'])) { $params[] = "contratos.data_emissao <= STR_TO_DATE('{$dados['data_emissao_a']}', '%d/%m/%Y')"; } if (!empty($dados['data_liberacao_de'])) { $params[] = "contratos.data_liberacao >= STR_TO_DATE('{$dados['data_liberacao_de']}', '%d/%m/%Y')"; } if (!empty($dados['data_liberacao_a'])) { $params[] = "contratos.data_liberacao <= STR_TO_DATE('{$dados['data_liberacao_a']}', '%d/%m/%Y')"; } if (!empty($dados['mes_ano'])) { $params[] = "DATE_FORMAT(contratos.data_liberacao, '%m/%Y') = '{$dados['mes_ano']}'"; } if( Yuppie_Auth::getIdentity()->grupo == "Supervisor" ){ $params[] = "supervisores.id = " . Yuppie_Auth::getIdentity()->id; } elseif( Yuppie_Auth::getIdentity()->grupo == "Gerente Regional" ){ $params[] = "gerentes.id = " . Yuppie_Auth::getIdentity()->id; } if( count($params) > 0 ){ $where = implode(" AND ", $params); } $dbtable = new Model_DbTable_Contrato(); $sqlContratos = $dbtable->getAdapter()->select()->distinct() ->from([ 'contratos' => 'tb_contratos' ], [ 'corretor_id', 'dias' => new Zend_Db_Expr("MIN(DATEDIFF(CURDATE(), `data_emissao`))") ]) ->joinInner([ 'clientes' => 'tb_clientes' ], 'contratos.cliente_id = clientes.id', []) ->joinLeft ([ 'corretores' => 'tb_corretores' ], 'contratos.corretor_id = corretores.id', ['nome', 'email']) ->joinInner([ 'rotas' => 'tb_rotas' ], 'corretores.rota_id = rotas.id', []) ->joinInner([ 'empresas' => 'tb_empresas' ], 'corretores.empresa_id = empresas.id', [ 'empresa' => 'nome' ]) ->joinInner([ 'supervisores' => 'tb_gerente_rota' ], 'rotas.gerente_id = supervisores.id', []) ->joinInner([ 'gerentes' => 'tb_gerentes' ], 'supervisores.gerente_id = gerentes.id', []) ->where($where) ->where("contratos.tipo_registro = 1") ->where('corretores.corretor_desativado IS NULL OR corretores.corretor_desativado <> 1') ->group('corretor_id') ->order('dias ASC'); $contratos = $dbtable->getAdapter()->fetchAll($sqlContratos); $sqlCorretores = $dbtable->getAdapter()->select() ->from([ 'corretores' => 'tb_corretores' ], ['corretor_id' => 'id', 'nome', 'email']) ->joinInner([ 'empresas' => 'tb_empresas' ], 'corretores.empresa_id = empresas.id', [ 'empresa' => 'nome' ]) ->joinInner([ 'rotas' => 'tb_rotas' ], 'corretores.rota_id = rotas.id', []) ->joinInner([ 'supervisores' => 'tb_gerente_rota' ], 'rotas.gerente_id = supervisores.id', []) ->joinInner([ 'gerentes' => 'tb_gerentes' ], 'supervisores.gerente_id = gerentes.id', []) ->where('corretores.excluido <> 1') ->where('corretores.corretor_desativado IS NULL OR corretores.corretor_desativado <> 1') ->order('corretores.nome ASC'); if (!empty($dados['empresa_id'])) { $sqlCorretores->where('corretores.empresa_id = ' . $dados['empresa_id']); } if (!empty($dados['rota_id'])) { $sqlCorretores->where("rotas.id = " . $dados['rota_id']); } if (!empty($dados['supervisor_id'])) { $sqlCorretores->where("supervisores.id = " . $dados['supervisor_id']); } if (!empty($dados['gerente_rota_id'])) { $sqlCorretores->where("supervisores.id = " . $dados['gerente_rota_id']); } if (!empty($dados['gerente_id'])) { $sqlCorretores->where("gerentes.id = " . $dados['gerente_id']); } if (Yuppie_Auth::getIdentity()->grupo == "Supervisor") { $sqlCorretores->where("supervisores.id = " . Yuppie_Auth::getIdentity()->id); } elseif (Yuppie_Auth::getIdentity()->grupo == "Gerente Regional") { $sqlCorretores->where("gerentes.id = " . Yuppie_Auth::getIdentity()->id); } if( count($contratos) > 0 ){ foreach ($contratos as $contrato){ $corretores[] = $contrato['corretor_id']; } $corretoresContratos = implode(',', $corretores); $sqlCorretores->where('corretores.id NOT IN (' . $corretoresContratos . ')'); } $corretoresSemProducao = $dbtable->getAdapter()->fetchAll($sqlCorretores); return [ 'periodo_sem_producao' => $corretoresSemProducao, 'dias_sem_producao' => $contratos ]; } public function getValorBonificacao($bancoId, $convenios, $dataDe, $dataA) { $dbtable = new Model_DbTable_Contrato(); $dataDe = new Zend_Date($dataDe, 'dd/MM/yyyy'); $dataA = new Zend_Date($dataA, 'dd/MM/yyyy'); $sql = $dbtable->getAdapter()->select() ->from(array( 'contratos' => 'tb_contratos' ), array( 'total' => 'SUM(valor_liquido)', 'mes_ano' => "DATE_FORMAT(data_liberacao, '%m/%Y')", )) ->where('contratos.data_liberacao >= ?', $dataDe->get('yyyy-MM-dd')) ->where('contratos.data_liberacao <= ?', $dataA->get('yyyy-MM-dd')) ->where('contratos.convenio_id IN (?)', $convenios) ->where('contratos.banco_id = ?', $bancoId) ->where('contratos.excluido <> 1') ->where('contratos.estornado <= 0') ->order('data_liberacao ASC') ->group('mes_ano'); return $dbtable->getAdapter()->fetchAll($sql); } public function excluirProtocoloEnvio($protocoloId) { $dbtable = new Model_DbTable_Contrato(); return $dbtable->excluirEnvioFisico($protocoloId); } /** * Retorna os físicos pendentes * @param array $fields * @param type $page * @param type $limit * @param type $order * @param type $range * @return type */ public function getFisicosPendentes(array $fields, $page = null, $limit = null, $order = null, $range = null) { return null; //trata o status pois, não considera o status para o caso da cobrança refin portabilidade do Itaú $filtroStatus = null; if(isset($fields['status_proposta']) && $fields['status_proposta']){ if(is_array($fields['status_proposta']) ){ $filtroStatus = " AND contratos.status_proposta IN (" . implode(", ", $fields['status_proposta']) . ")"; }else{ $filtroStatus = " AND contratos.status_proposta = {$fields['status_proposta']}"; } unset($fields['status_proposta']); } $dbtable = new Model_DbTable_Contrato(); //consulta principal $select = $this->_getSelectProducaoAnalitico($dbtable, array( "contratos.descricao_pendencia", 'id_contrato' => 'contratos.id', 'numero_contrato', 'numero_contrato2' => "if(bancos.nome IN ('BGN','UNIBANCO'), numero_contrato, SUBSTRING_INDEX(`contratos`.`numero_contrato`, '-', 1))", 'contratos.tipo', 'contratos.cartao', 'contratos.data_recebimento_fisico', 'contratos.data_liberacao', 'contratos.data_emissao', 'contratos.valor_fixo_corretor', 'contratos.valor_liquido', 'contratos.comissao_empresa', 'contratos.previa_recebimento', 'contratos.data_recebimento_previa', 'contratos.numero_ade', 'contratos.comissao_corretor', 'contratos.bonus_corretor', 'contratos.corretor_id', 'contratos.prazo', 'contratos.produto', 'contratos.estornado', 'contratos.cobranca_banco', 'contratos.cobranca_promotora', 'contratos.base_comissao_valor', 'contratos.base_comissao_empresa_valor', 'contratos.digitador', )); $select->where("pendente = 1") ->group(array( 'corretores.id', 'numero_contrato2' )); $this->_prepareFilterSelect($fields, $select); if( $order != null ){ $select->order($order); } else { $select->order(array( 'corretores.nome', 'contratos.data_liberacao' )); } if( $page ){ $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($page); if( $limit && is_numeric($limit) ){ $paginator->setItemCountPerPage($limit); } if( $range && is_numeric($range) ){ $paginator->setPageRange($range); } return $paginator; } return $dbtable->getAdapter()->fetchAll($select); } public function getFisicosPendentesCount(array $fields) { unset($fields['data_emissao_de']); unset($fields['data_emissao_a']); $dbtable = new Model_DbTable_Contrato(); $selectProtocoloPagamento = $dbtable->getAdapter()->select()->from('tb_protocolo_pagamento', array( 'data_pagamento', 'id' )) ->joinInner(array( 'tb_protocolo_contrato' ), 'tb_protocolo_pagamento.id = tb_protocolo_contrato.protocolo_id', array( 'contrato_id', 'valor' )) ->where('tb_protocolo_pagamento.excluido<>1 AND tb_protocolo_contrato.excluido<>1 AND tb_protocolo_pagamento.liberado_pagamento = 1') ->order("tb_protocolo_pagamento.id DESC"); $select = $this->_getSelectProducaoAnalitico($dbtable, array( 'id_contrato' => 'contratos.id', 'numero_contrato', 'numero_contrato2' => "if(bancos.nome IN ('BGN','UNIBANCO'), numero_contrato, SUBSTRING_INDEX(`contratos`.`numero_contrato`, '-', 1))") ); $select->joinLeft(array( 'rota' => 'tb_rotas' ), 'corretores.rota_id = rota.id', array( )) ->joinLeft(array( 'supervisores' => 'tb_gerente_rota' ), 'rota.gerente_id = supervisores.id', array()) //tem que ter data de liberação ->where("(contratos.data_liberacao <> '0000-00-00' AND contratos.data_liberacao IS NOT NULL)") //não tem recebimento de físico ou o banco está cobrando ->where("(contratos.cobranca_banco = 1 OR contratos.data_recebimento_fisico IS NULL OR contratos.data_recebimento_fisico = '0000-00-00')") ->joinLeft(array( 'protocolos_pagamentos' => $selectProtocoloPagamento ), "protocolos_pagamentos.contrato_id = contratos.id", array( )) ->group(array( 'corretores.id', 'numero_contrato2' )); $this->_prepareFilterSelect($fields, $select); //retira os status de cancelamento $select->where("(status_propostas.descricao NOT IN ('Cancelada', 'Cancelado'))"); $pendenciasCount = count($dbtable->getAdapter()->fetchAll($select)); return $pendenciasCount; } public function getFisicosPendentesTotalizador($contratos) { $total = 0; foreach ($contratos->getIterator() as $contrato){ $total += $contrato['valor_liquido']; } return $total; } public function getQuantidadeVendida(array $fields) { $dbtable = new Model_DbTable_Contrato(); $select = $dbtable->getAdapter()->select()->from(array( "contratos" => "tb_contratos" ), array( 'qtd_vendida' => 'COUNT(contratos.id)' )) ->joinInner(array( "clientes" => "tb_clientes" ), "contratos.cliente_id = clientes.id", array()) ->joinInner(array( "corretores" => "tb_corretores" ), "contratos.corretor_id = corretores.id", array()) ->joinLeft(array( 'rotas' => 'tb_rotas' ), 'corretores.rota_id = rotas.id', array( 'rotas' => 'nome')) ->joinLeft(array( 'gerentes_rotas' => 'tb_gerente_rota' ), 'rotas.gerente_id = gerentes_rotas.id', array( 'valor_comissao_supervisor' => 'valor_comissao' )) ->joinLeft(array( "corretores_prazos" => "tb_corretores_prazos" ), "contratos.corretor_id = corretores_prazos.corretor_id AND contratos.banco_id = corretores_prazos.banco_id AND corretores_prazos.excluido<>1", array()) ->where("contratos.excluido<>1") ->where("contratos.tipo_registro = 1") ->where("clientes.excluido<>1"); $this->_prepareFilterSelect($fields, $select); //tem que ter data de liberação $select->where("(contratos.data_liberacao <> '0000-00-00' AND contratos.data_liberacao IS NOT NULL)"); $result = $dbtable->getAdapter()->fetchCol($select); if( $result != null ){ return $result[0]; } return 0; } public function getContratos(array $fields, $page = null, $limit = null, $order = array( 'data_emissao ASC' ), $range = null) { $dbtable = new Model_DbTable_Contrato(); if( count($fields) <= 0 ){ throw new Core_Exception("Não foi passado parâmetro de busca."); } $columns = array( 'contratos.numero_contrato', 'contratos.comissao_empresa', 'contratos.numero_ade', 'contratos.data_emissao', 'contratos.data_liberacao', 'contratos.data_op_sacada', 'contratos.data_recebimento_previa', 'contratos.prazo', 'contratos.valor_liquido', 'contratos.valor_bruto', 'contratos.base_comissao_valor', 'contratos.base_comissao_empresa_valor', 'contratos.cobranca_banco','contratos.usuario_grupo_previa', 'contratos.usuario_previa', 'contratos.cobranca_promotora', 'contratos.cartao', 'contratos.comissao_corretor', 'contratos.valor_fixo_empresa', 'contratos.valor_fixo_corretor', 'contratos.corretor_id', 'contratos.estornado', 'contratos.protocolo_recebimento_fisico', 'contratos.saldo_banco', 'contratos.protocolo_envio_fisico', 'contratos.produto', 'contratos.tipo', 'contratos.data_recebimento_fisico', 'comissao_prevista' => 'contratos.comissao_empresa', 'id_contrato' => 'contratos.id', 'cpf_cliente' => 'clientes.cpf', 'cliente' => 'clientes.nome', 'cliente_id' => 'contratos.cliente_id', 'corretores.prazo_fisico', 'corretor' => 'corretores.nome', 'empresa' => 'empresas.nome', 'status_proposta_nome' => 'status_propostas.descricao', 'status_proposta_id' => 'status_propostas.id', 'banco_id', 'banco' => 'bancos.nome', 'convenio_id', 'convenio' => 'convenios.nome', 'corretores.corretor_desativado', 'contratos.descricao_pendencia', 'contratos.data_recebimento_previa', 'contratos.previa_recebimento', 'contratos.valor_prestacao', 'contratos.status', 'contratos.motivo_fraude', 'contratos.data_validacao_fraude', 'contratos.url_formalizacao', ); $select = $this->_getSelectContratos($dbtable, $columns); $select->joinLeft(array( 'rotas' => 'tb_rotas' ), 'corretores.rota_id = rotas.id', array( 'rota' => 'nome' )) ->joinLeft(array( 'gerentes_rotas' => 'tb_gerente_rota' ), 'rotas.gerente_id = gerentes_rotas.id', array( 'valor_comissao_supervisor' => 'valor_comissao', 'supervisor' => 'gerentes_rotas.nome')) ->joinLeft(array( 'gerentes' => 'tb_gerentes' ), 'gerentes_rotas.gerente_id = gerentes.id', array( 'valor_comissao_gerente' => 'valor_comissao' )) ->joinLeft(array( 'empresas' => 'tb_empresas' ), 'contratos.empresa_id = empresas.id', array()) ->joinLeft(array( 'tabela' => 'tb_tabelas' ), 'contratos.tabela_id = tabela.id', array( 'tabela' => 'nome' )) ->joinLeft(array( 'protocolo_contrato' => 'tb_protocolo_contrato' ), 'contratos.id = protocolo_contrato.contrato_id AND protocolo_contrato.excluido<>1', array()) ->joinLeft(array( 'protocolos_pagamentos' => 'tb_protocolo_pagamento' ), 'protocolo_contrato.protocolo_id = protocolos_pagamentos.id AND protocolos_pagamentos.excluido<>1' . ' AND protocolos_pagamentos.liberado_pagamento = 1', array( 'data_pagamento', 'protocolo_pagamento_gerado' => 'MAX(protocolos_pagamentos.id)' )) ->group(array( 'contratos.id' )); $this->_prepareFilterSelect($fields, $select); if (count($select->getPart('where')) < 4) { throw new Core_Exception("Filtros insuficientes! Por favor, informe mais opções de filtragem."); } if( $order != null ){ $select->order($order); } else { $select->order(array( 'corretores.nome', 'contratos.data_liberacao' )); } if( $page ){ $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($page); if( $limit && is_numeric($limit) ){ $paginator->setItemCountPerPage($limit); } if( $range && is_numeric($range) ){ $paginator->setPageRange($range); } return $paginator; } return $dbtable->getAdapter()->fetchAll($select); } public function getContratosPortabilidade(array $fields, $page = null, $limit = null, $order = array( 'data_emissao ASC' ), $range = null) { $dbtable = new Model_DbTable_Contrato(); if( count($fields) <= 0 ){ throw new Core_Exception("Não foi passado parâmetro de busca."); } $selectPortabilidade = "SELECT * FROM tb_contratos_portabilidade WHERE excluido <> 1 ORDER BY id DESC"; $columns = array( 'contratos.numero_contrato', 'contratos.comissao_empresa', 'contratos.numero_ade', 'contratos.data_emissao', 'contratos.data_liberacao', 'contratos.data_op_sacada', 'contratos.data_recebimento_previa', 'contratos.prazo', 'contratos.valor_liquido', 'contratos.valor_bruto', 'contratos.base_comissao_valor', 'contratos.base_comissao_empresa_valor', 'contratos.cobranca_banco','contratos.usuario_grupo_previa', 'contratos.usuario_previa', 'contratos.cobranca_promotora', 'contratos.cartao', 'contratos.comissao_corretor', 'contratos.valor_fixo_empresa', 'contratos.valor_fixo_corretor', 'contratos.corretor_id', 'contratos.estornado', 'contratos.protocolo_recebimento_fisico', 'contratos.saldo_banco', 'contrato_portabilidade_id' => 'portabilidade.id', 'portabilidade.comentario_corretor', 'portabilidade.resposta_corretor', 'portabilidade_obs' => 'portabilidade.obs', 'portabilidade.data_hora_envio', 'portabilidade_prazo' => 'portabilidade.prazo', 'portabilidade_saldo_banco' => 'portabilidade.saldo_banco', 'portabilidade_valor_liberado' => 'portabilidade.valor_liberado', 'portabilidade_valor_parcela' => 'portabilidade.valor_parcela', 'portabilidade_tabela_id' => 'portabilidade.tabela_id', 'contratos.protocolo_envio_fisico', 'contratos.produto', 'contratos.tipo', 'contratos.data_recebimento_fisico', 'comissao_prevista' => 'contratos.comissao_empresa', 'id_contrato' => 'contratos.id', 'cpf_cliente' => 'clientes.cpf', 'cliente' => 'clientes.nome', 'cliente_id' => 'contratos.cliente_id', 'corretores.prazo_fisico', 'corretor' => 'corretores.nome', 'empresa' => 'empresas.nome', 'status_proposta_nome' => 'status_propostas.descricao', 'status_proposta_id' => 'status_propostas.id', 'banco_id', 'banco' => 'bancos.nome', 'convenio_id', 'convenio' => 'convenios.nome', 'corretores.corretor_desativado', 'contratos.descricao_pendencia', 'contratos.data_recebimento_previa', 'contratos.previa_recebimento', 'contratos.valor_prestacao', 'contratos.status', 'contratos.motivo_fraude', 'contratos.data_validacao_fraude', ); $select = $this->_getSelectContratos($dbtable, $columns); $select->joinLeft(array( 'rotas' => 'tb_rotas' ), 'corretores.rota_id = rotas.id', array( 'rota' => 'nome' )) ->joinLeft(array( 'gerentes_rotas' => 'tb_gerente_rota' ), 'rotas.gerente_id = gerentes_rotas.id', array( 'valor_comissao_supervisor' => 'valor_comissao' )) ->joinLeft(array( 'gerentes' => 'tb_gerentes' ), 'gerentes_rotas.gerente_id = gerentes.id', array( 'valor_comissao_gerente' => 'valor_comissao' )) ->joinLeft(array( 'empresas' => 'tb_empresas' ), 'contratos.empresa_id = empresas.id', array()) ->joinLeft(array( 'tabela' => 'tb_tabelas' ), 'contratos.tabela_id = tabela.id', array( 'tabela' => 'nome' )) ->joinLeft(array( 'portabilidade' => new Zend_Db_Expr("(" . $selectPortabilidade . ")") ), 'contratos.id = portabilidade.contrato_id', array()) ->joinLeft(array( 'portabilidade_tabela' => 'tb_tabelas' ), 'portabilidade.tabela_id = portabilidade_tabela.id', array( 'portabilidade_tabela' => 'nome' )) ->joinLeft(array( 'protocolo_contrato' => 'tb_protocolo_contrato' ), 'contratos.id = protocolo_contrato.contrato_id AND protocolo_contrato.excluido<>1', array()) ->joinLeft(array( 'protocolos_pagamentos' => 'tb_protocolo_pagamento' ), 'protocolo_contrato.protocolo_id = protocolos_pagamentos.id AND protocolos_pagamentos.excluido<>1' . ' AND protocolos_pagamentos.liberado_pagamento = 1', array( 'data_pagamento', 'protocolo_pagamento_gerado' => 'MAX(protocolos_pagamentos.id)' )) ->group(array( 'contratos.id' )); $this->_prepareFilterSelect($fields, $select); if( $order != null ){ $select->order($order); } else { $select->order(array( 'corretores.nome', 'contratos.data_liberacao' )); } if( $page ){ $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($page); if( $limit && is_numeric($limit) ){ $paginator->setItemCountPerPage($limit); } if( $range && is_numeric($range) ){ $paginator->setPageRange($range); } return $paginator; } return $dbtable->getAdapter()->fetchAll($select); } public function getContratoTotalizador(array $fields) { $dbtable = new Model_DbTable_Contrato(); $select = $this->_getSelectProducaoAnalitico($dbtable, array( 'total_valor_liquido' => 'SUM(valor_liquido)' )); $this->_prepareFilterSelect($fields, $select); return $dbtable->getAdapter()->fetchRow($select); } public function getGraficoTetoProducao(array $fields) { $dbtable = new Model_DbTable_Contrato(); $select = $this->_getSelectProducaoAnalitico($dbtable, array()); $select->reset(Zend_Db_Select::COLUMNS) ->columns(array('total_valor_liquido' => 'SUM(base_comissao_empresa_valor)', 'banco' => 'bancos.nome')); $this->_prepareFilterSelect($fields, $select); return $dbtable->getAdapter()->fetchRow($select); } public function getGraficoTetoProducaoProduto(array $fields) { $dbtable = new Model_DbTable_Contrato(); $select = $dbtable->select()->setIntegrityCheck(false) ->from(['contratos' => 'tb_contratos'], ['total_valor_liquido' => 'SUM(base_comissao_empresa_valor)']) ->joinLeft([ 'corretores' => 'tb_corretores' ], 'contratos.corretor_id = corretores.id', []) ->joinLeft([ 'produtos' => 'tb_tipos_produtos' ], 'produtos.descricao = contratos.tipo', ['produto' => 'produtos.descricao']) ->where('contratos.excluido <> 1 AND contratos.tipo_registro = 1'); $this->_prepareFilterSelect($fields, $select); return $dbtable->getAdapter()->fetchRow($select); } public function getFisicosRecepcionados(array $fields, $page = null, $limit = null, $order = "prazo DESC", $range = null) { $dbtable = new Model_DbTable_Contrato(); $columns = array( 'contratos.numero_contrato', 'contratos.data_emissao', 'contratos.data_liberacao', 'contratos.data_recebimento_fisico', 'contratos.corretor_id', 'contratos.prazo', 'contratos.valor_liquido', 'contratos.data_recebimento_previa', 'supervisor' => 'gerentes_rotas.nome', 'rotas' => 'rotas.nome', 'prazo_supervisor' => 'gerentes_rotas.prazo' ); $select = $this->_getSelectProducaoAnalitico($dbtable, $columns); $select->joinLeft(array( 'rotas' => 'tb_rotas' ), 'corretores.rota_id = rotas.id', array()) ->joinLeft(array( 'gerentes_rotas' => 'tb_gerente_rota' ), 'rotas.gerente_id = gerentes_rotas.id', array()) ->joinLeft(array( 'gerentes' => 'tb_gerentes' ), 'gerentes_rotas.gerente_id = gerentes.id', array()) ->where("(contratos.data_recebimento_fisico IS NULL OR contratos.data_recebimento_fisico = '0000-00-00')") ->where("previa_recebimento = 1") ->where("TIMESTAMPDIFF(DAY, contratos.data_recebimento_previa, CURDATE()) > gerentes_rotas.prazo") ->group(array( 'contratos.id', 'gerentes_rotas.id' )); $this->_prepareFilterSelect($fields, $select); if( $order != null ){ $select->order($order); } if( $page ){ $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($page); if( $limit && is_numeric($limit) ){ $paginator->setItemCountPerPage($limit); } if( $range && is_numeric($range) ){ $paginator->setPageRange($range); } return $paginator; } return $dbtable->getAdapter()->fetchAll($select); } public function getContratosVerificar($fields = null, $page = null, $limit = null, $range = null) { $codigoUsuario = 0; $dbtable = new Model_DbTable_Contrato(); $columns = array( 'contratos.numero_contrato', 'contratos.convenio_id', 'contratos.data_liberacao', 'contratos.tipo', 'contratos.digitador', 'contratos.captador_id', 'contratos.prazo', 'id_contrato' => 'contratos.id', 'cpf_cliente' => 'clientes.cpf', 'cliente' => 'clientes.nome', 'corretor' => 'corretores.nome', 'id_corretor' => 'corretores.id', 'corretores.obedecer_id', 'convenio' => 'convenios.nome', 'status_proposta_nome' => 'status_propostas.descricao', 'banco' => 'bancos.nome', 'contratos.numero_ade', 'contratos.data_emissao' ); /* * Fazer a pesquisa baseada nos códigos apenas quando a consulta possuir o corretor. */ if( isset($fields['corretor_digitador']) && $fields['corretor_digitador'] > 0 ){ $selectCodigoUsuario = $dbtable->getAdapter()->select()->from(array( 'usuario_senha' => 'tb_corretores_senhas' ), array( 'senha' )) ->joinLeft(array( "corretores" => "tb_corretores" ), "usuario_senha.corretor_id = corretores.id", array()) ->where("usuario_senha.senha <> '' AND usuario_senha.excluido <> 1"); $selectCodigoUsuario->where('corretor_id = ' . $fields['corretor_digitador']); if( isset($fields['uf']) && !empty($fields['uf']) ){ $selectCodigoUsuario->where("corretores.uf = '{$fields['uf']}'"); } $codigoUsuario = $dbtable->getAdapter()->fetchCol($selectCodigoUsuario); if( count($codigoUsuario) <= 0 ){ throw new Core_Exception('Atenção! Você não possui código de usuário cadastrado.'); } } $select = $this->_getSelectContratos($dbtable, $columns); if( isset($fields['banco_id']) && !empty($fields['banco_id']) ){ $select->where("contratos.banco_id = '{$fields['banco_id']}'"); } $select->group(array( 'contratos.id' ))->order('contratos.id ASC'); if( isset($fields['corretor_digitador']) && $fields['corretor_digitador'] > 0 ){ $select->where("contratos.digitador IN ('" . implode("','", $codigoUsuario) . "')"); } if( !empty($fields['cpf']) ){ $select->where("clientes.cpf = ?", String_Refatorar::formatarCpf($fields['cpf'])); } if( isset($fields['corretor_id']) && $fields['corretor_id'] > 0 ){ $select->where("contratos.corretor_id = " . $fields['corretor_id']); } if( isset($fields['tipo_contrato']) && !empty($fields['tipo_contrato']) ){ $select->where("contratos.tipo IN ('" . implode("','", $fields['tipo_contrato']) . "')"); } if( isset($fields['convenio_id']) && !empty($fields['convenio_id']) ){ $select->where("contratos.convenio_id = " . $fields['convenio_id']); } if( isset($fields['digitador']) && !empty($fields['digitador']) ){ $dbtable->getAdapter()->getProfiler()->setEnabled(true); $select->where("contratos.digitador LIKE '{$fields['digitador']}'"); } if( isset($fields['obedecer_id']) && !empty($fields['obedecer_id']) ){ $dbtable->getAdapter()->getProfiler()->setEnabled(true); $select->where("corretores.obedecer_id = '{$fields['obedecer_id']}'"); } if( isset($fields['existecorretor']) && $fields['existecorretor'] > 0 ){ /* * 1 - Contratos com corretor atribuído * 2 - Contratos sem corretor atribuído */ $condicaoCorretor = $fields['existecorretor']; if( $condicaoCorretor == 1 ){ $select->where('(contratos.corretor_id IS NOT NULL OR contratos.corretor_id > 0)'); } elseif( $condicaoCorretor == 2 ){ $select->where('(contratos.corretor_id IS NULL OR contratos.corretor_id = 0)'); } } if( isset($fields['status_proposta']) && !empty($fields['status_proposta']) ){ if( is_array($fields['status_proposta']) ){ $fields['status_proposta'] = array_filter($fields['status_proposta']); $param = "contratos.status_proposta IN ('" . implode("','", $fields['status_proposta']) . "')"; } else { $param = "contratos.status_proposta = " . $fields['status_proposta']; } $select->where($param); } if( isset($fields['numero_contrato']) && !empty($fields['numero_contrato']) ){ $select->where("contratos.numero_contrato LIKE '{$fields['numero_contrato']}'"); } if (!empty($fields['numero_ade'])) { $select->where("contratos.numero_ade LIKE '{$fields['numero_ade']}'"); } if( isset($fields['rota_id']) && !empty($fields['rota_id']) ){ if( !array_key_exists('rotas', $select->getPart(Zend_Db_Select::FROM)) ){ $select->joinLeft(array( 'rotas' => 'tb_rotas' ), 'corretores.rota_id = rotas.id', array('rota_nome' => 'rotas.nome')); } $param = "rotas.id = " . $fields['rota_id']; $select->where($param); } if( !empty($fields['data_emissao_de']) ){ $select->where("contratos.data_emissao >= STR_TO_DATE(?, '%d/%m/%Y')", $fields['data_emissao_de']); } if( !empty($fields['data_emissao_a']) ){ $select->where("contratos.data_emissao <= STR_TO_DATE(?, '%d/%m/%Y')", $fields['data_emissao_a']); } if( !empty($fields['data_liberacao_de']) ){ $select->where("contratos.data_liberacao >= STR_TO_DATE(?, '%d/%m/%Y')", $fields['data_liberacao_de']); } if( !empty($fields['data_liberacao_a']) ){ $select->where("contratos.data_liberacao <= STR_TO_DATE(?, '%d/%m/%Y')", $fields['data_liberacao_a']); } if (!empty($fields['subestabelecido_id'])) { $select->where("contratos.subestabelecido_id = " . $fields['subestabelecido_id']); } if( $page ){ $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($page); if( $limit && is_numeric($limit) ){ $paginator->setItemCountPerPage($limit); } if( $range && is_numeric($range) ){ $paginator->setPageRange($range); } return $paginator; } } public function getContratosRecuperar($fields, $group = false) { $dbtable = new Model_DbTable_Contrato(); $columns = array( 'contratos.numero_contrato', 'id_contrato' => 'contratos.id', 'tipo_contrato' => 'tipo', 'contratos.obs', 'cliente_id' => 'clientes.id', 'cpf_cliente' => 'clientes.cpf', 'cliente' => 'clientes.nome', 'corretor' => 'corretores.nome', 'id_corretor' => 'corretores.id', 'status_proposta' => 'status_propostas.descricao', 'banco' => 'bancos.nome', 'convenio' => 'convenios.nome' ); $select = $dbtable->getAdapter()->select()->from(array( 'contratos' => 'tb_contratos' ), array()) ->columns($columns) ->joinInner(array( "clientes" => "tb_clientes" ), "contratos.cliente_id = clientes.id", array()) ->joinLeft(array( "corretores" => "tb_corretores" ), "contratos.corretor_id = corretores.id", array()) ->joinLeft(array( 'bancos' => 'tb_bancos' ), "bancos.id = contratos.banco_id", array()) ->joinLeft(array( 'convenios' => 'tb_convenios' ), "convenios.id = contratos.convenio_id", array()) ->joinLeft(array( 'status_propostas' => 'tb_tipos' ), 'contratos.status_proposta = status_propostas.id', array()) ->joinLeft(array("contratos_pendencias" => "tb_contratos_pendencias"), "contratos.id = contratos_pendencias.contrato_id AND contratos_pendencias.excluido <> 1", array("*")) ->where("clientes.excluido<>1") ->where("contratos.excluido<>1") ->where("contratos.tipo_registro = 1") ->order("corretores.nome ASC"); if($group){ $select->group("contratos.id"); } Core_Filters::_prepareFilterContrato($fields, $select); return $dbtable->getAdapter()->fetchAll($select); } public function getRelatorioExtratoBancario($fields = array(), $order = "data_pagamento ASC") { if( count($fields) <= 0 ){ throw new Core_Exception('Atenção! Você deve informar pelo menos uma opção de busca.'); } $dbtable = new Model_DbTable_Lancamento(); $mProtocolo = new Model_ProtocoloPagamento(); $where = "data_pagamento IS NOT NULL AND data_pagamento <> '0000-00-00' AND excluido <> 1"; $whereGeral = "data_pagamento IS NOT NULL AND data_pagamento <> '0000-00-00' AND excluido <> 1" . " AND tipo IN ('DESPESA', 'RECEITA')"; $paramsProtocoloSaldo = array(); try { $dtInicial = new Zend_Date($fields['data_inicial_de'], Zend_Date::DATES, 'pt'); $dtInicial = $dtInicial->toString('yyyy-MM-dd'); } catch ( Zend_Date_Exception $e ) { throw $e; } try { $dtFinal = new Zend_Date($fields['data_final_a'], Zend_Date::DATES, 'pt'); $dtFinal = $dtFinal->toString('yyyy-MM-dd'); } catch ( Zend_Date_Exception $e ) { throw $e; } if( isset($fields['empresa_id']) && !empty($fields['empresa_id']) ){ $where .= " AND empresa_id = {$fields['empresa_id']}"; $whereGeral .= " AND empresa_id = {$fields['empresa_id']}"; $paramsProtocoloSaldo[] = "corretores.empresa_id = {$fields['empresa_id']}"; } if( isset($fields['conta_id']) && !empty($fields['conta_id']) ){ $where .= " AND conta_id = {$fields['conta_id']}"; $whereGeral .= " AND conta_id = {$fields['conta_id']}"; $paramsProtocoloSaldo[] = "protocolos.conta_id = {$fields['conta_id']}"; } if( !empty($dtInicial) && !empty($dtFinal) ){ $whereGeral .= " AND (data_pagamento >= '{$dtInicial}'" . " AND data_pagamento <= '{$dtFinal}')"; $paramsProtocoloSaldo[] = "protocolos.data_quitacao <= '{$dtFinal}'"; } $paramsProtocoloSaldo[] = "protocolos.excluido<>1"; $selectReceitaAnterior = $dbtable->select()->from( 'tb_lancamentos', array( 'total' => 'SUM(valor_pago)', )) ->where("{$where} AND data_pagamento < '{$dtInicial}' " . "AND tipo = 'RECEITA'"); $selectDespesaAnterior = $dbtable->select()->from( 'tb_lancamentos', array( 'total' => 'SUM(valor_pago)', )) ->where($where . " AND data_pagamento < '{$dtInicial}' " . "AND tipo = 'DESPESA'"); $totalSaldoAnterior = 0; $fetchReceitaAnterior = $dbtable->getAdapter()->fetchCol($selectReceitaAnterior); $fetchDespesaAnterior = $dbtable->getAdapter()->fetchCol($selectDespesaAnterior); $totalSaldoAnterior += isset($fetchReceitaAnterior[0]) ? $fetchReceitaAnterior[0] : 0; $totalSaldoAnterior -= isset($fetchDespesaAnterior[0]) ? $fetchDespesaAnterior[0] : 0; $extrato = array(); //contabiliza os protocolos no saldo anterior $whereProtocolo = implode(" AND ", $paramsProtocoloSaldo); $protocolos = $mProtocolo->listarProtocolos($whereProtocolo); if( count($protocolos) ){ foreach ( $protocolos as $protocolo ) { $taxaTransf = isset($protocolo['taxa_transferencia_banco']) && $protocolo['descontar_taxa_transf'] == 1 ? $protocolo['taxa_transferencia_banco'] : 0; if( isset($protocolo['forma_pagamento_id']) && ($protocolo['forma_pagamento_id'] != 7) || $protocolo['total_comissao'] == 0 ){ $taxaTransf = 0; } if( $protocolo['data_quitacao'] < $dtInicial ){ $totalSaldoAnterior -= ($protocolo['total_comissao'] + $protocolo['acrescimo'] - $protocolo['desconto'] - $taxaTransf); }else{ $extrato[] = array( 'id_lancamento' => NULL, 'conciliacao_nome' => 0, 'data_pagamento' => $protocolo['data_quitacao'], 'descricao' => "Protocolo {$protocolo['id']} => {$protocolo['nome']}", 'valor_pago' => $protocolo['total_comissao'] + $protocolo['acrescimo'] - $protocolo['desconto'] - $taxaTransf, 'tipo' => 'PROTOCOLO', 'conta_id' => $fields['conta_id'] ); } } } $selectExtrato = $dbtable->select()->from($dbtable, array( 'id', 'conciliacao', 'data_pagamento', 'descricao', 'valor_pago', 'tipo', 'conta_id' )) ->where($whereGeral); $selectSaldoAnterior = $dbtable->getAdapter()->select()->from( 'tb_lancamentos', array( 'id_lancamento' => 'id', 'conciliacao_nome' => 'conciliacao', 'data_pagamento' => "($dtInicial)", 'descricao' => "SUM(1)", 'valor_pago' => "($totalSaldoAnterior)", 'tipo' => "SUBSTR('SALDO_ANTERIOR', 1, 14)", 'conta_id' => 'conta_id' )); $select = $dbtable->select()->union(array( $selectSaldoAnterior, $selectExtrato, ), Zend_Db_Select::SQL_UNION_ALL); $lancamentos = $dbtable->getAdapter()->fetchAll($select); $result = $lancamentos ? array_merge($extrato, $lancamentos) : $extrato; usort($result, array( "String_Refatorar", 'ordenarExtrato' )); return $result; } public function exportarFisicosPendentesCabecalho() { $ns = new Zend_Session_Namespace("exportar_excel"); $ns->exportar_excel = [ implode(';', [ 'A' => 'Corretor', 'B' => 'Emissão', 'C' => 'Liberação', 'D' => 'Cliente', 'E' => 'CPF', 'F' => 'Banco', 'G' => 'Convênio', 'H' => 'Tabela', 'I' => 'Nº Contrato', 'J' => 'Status', 'K' => 'Valor', 'L' => 'Comissão', 'M' => 'Atraso', 'N' => 'Data Prévia', 'O' => 'Pendência', 'P' => 'Situação Físico', 'Q' => 'Digitador' ]) ]; } public function exportarFisicosPendentes($contratos = null) { $ns = new Zend_Session_Namespace("exportar_excel"); $nsp = new Zend_Session_Namespace(); $verComissao = $nsp->acl->isAllowed(Yuppie_Auth::getIdentity()->grupo, 'visualizar-comissao-contrato'); foreach ( $contratos as $contrato ) { $diasAtraso = $this->getDiasAtraso($contrato['data_liberacao'], $contrato['data_recebimento_fisico'], $contrato['data_recebimento_previa']); $comissaoCorretor = $verComissao ? $contrato['valor_fixo_corretor'] + $contrato['base_comissao_valor'] * $contrato['comissao_corretor'] / 100 : ''; $ns->exportar_excel[] = implode(';', array( $this->getCellContent($contrato['corretor']), $this->getCellContent($contrato['data_emissao']), $this->getCellContent($contrato['data_liberacao']), $this->getCellContent($contrato['cliente']), $this->getCellContent($contrato['cpf_cliente']), $this->getCellContent($contrato['banco']), $this->getCellContent($contrato['convenio']), $this->getCellContent($contrato['tabela']), $this->getCellContent($contrato['numero_contrato']), $this->getCellContent($contrato['status_proposta_nome']), $this->getCellContent($contrato['valor_liquido'], true), $this->getCellContent(is_numeric($comissaoCorretor) ? $comissaoCorretor : '', is_numeric($comissaoCorretor) ? true : false), $this->getCellContent($diasAtraso), $this->getCellContent($contrato['data_recebimento_previa']), $this->getCellContent( preg_replace( "/\r|\n/", "", $contrato['descricao_pendencia'])), $this->getCellContent($contrato['previa_recebimento'] == 1 ? 'RECEPCIONADO' : 'PENDENTE'), $this->getCellContent($contrato['digitador']) )); } $ns->exportar_excel['relatorio_excel'] = 'fisicos-pendentes'; return $ns->exportar_excel; } public function getCellContent($content, $money = false){ if($money) $content = number_format($content, 2, ',', '.'); return trim($content) ? $content : " "; } public static function getDiasAtraso($dataLiberacao, $dataRecebimento, $dataPreviaRecebimento, $limiteCorretor = 0) { $diasAtraso = 0; if( (empty($dataRecebimento) || $dataRecebimento == '0000-00-00') && !empty($dataLiberacao) && $dataLiberacao != '0000-00-00' ){ $dataLiberacao = new Zend_Date($dataLiberacao); $diasAtraso = floor((((time() - $dataLiberacao->get()) / 60) / 60) / 24); //se o contrato está pendente a mais que a quantidade limite para o corretor if( $diasAtraso > $limiteCorretor ){ //verifica se tem prazo para o supervisor if( (!empty($dataPreviaRecebimento) && $dataPreviaRecebimento != '0000-00-00' ) ){ $dataPreviaRecebimento = new Zend_Date($dataPreviaRecebimento); $diasAtraso = floor((((time() - $dataPreviaRecebimento->get()) / 60) / 60) / 24); } } } return $diasAtraso; } public function exportarRecebimentoFisicos($dados = null) { $objPhpExcel = new PHPExcel(); $objPhpExcel->getProperties()->setDescription('Recebimento de Fisicos'); $objPhpExcel->getProperties()->setCreator('Yuppie Tech'); $objPhpExcel->getProperties()->setTitle('Recebimento de Fisicos'); $objPhpExcel->setActiveSheetIndex(0); $objPhpExcel->getActiveSheet()->setTitle('Recebimento de Fisicos'); //cabeçalho do arquivo $objPhpExcel->getActiveSheet()->SetCellValue('A' . 1, "Nº Contrato"); $totalRecebimentoFisicos = count($dados); //linhas do arquivo for ( $i = 0; $i < $totalRecebimentoFisicos; $i++ ) { $objRecebimento = new Model_Contrato(); $dadosRecebimentos = $objRecebimento->exibir($dados[$i]['id']); $objPhpExcel->getActiveSheet()->setCellValueByColumnAndRow(0, $i + 2, $dadosRecebimentos['numero_contrato']); } $objWriter = PHPExcel_IOFactory::createWriter($objPhpExcel, 'Excel5'); header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="recebimento_fisicos.xls"'); header('Cache-Control: max-age=0'); $objWriter->save('php://output'); $this->_helper->getHelper('viewRenderer')->setNoRender(); $this->_helper->redirector('exportar-fisico-recebido'); } public function getFisicosBaixados($fields, $order = array( 'id DESC', 'corretor_id ASC' ), $limit = 1000) { $params = array( "contratos.tipo_registro = 1 AND contratos.protocolo_recebimento_fisico IS NOT NULL AND contratos.excluido<>1 AND (data_recebimento_fisico IS NOT NULL AND data_recebimento_fisico <> '0000-00-00')" ); if( Yuppie_Auth::getIdentity()->grupo == "Supervisor" ){ $params[] = "rotas.gerente_id = " . Yuppie_Auth::getIdentity()->id; } elseif( Yuppie_Auth::getIdentity()->grupo == "Gerente Regional" ){ $params[] = "supervisores.gerente_id = " . Yuppie_Auth::getIdentity()->id; } elseif( Yuppie_Auth::getIdentity()->grupo == "Corretor" ){ $params[] = "corretores.id = " . Yuppie_Auth::getIdentity()->id; } if( isset($fields['data_emissao_de']) && !empty($fields['data_emissao_de']) && isset($fields['data_emissao_a']) && !empty($fields['data_emissao_a']) ){ $params[] = "(data_emissao >= STR_TO_DATE('" . $fields['data_emissao_de'] . "', '%d/%m/%Y') AND " . " data_emissao <= STR_TO_DATE('" . $fields['data_emissao_a'] . "', '%d/%m/%Y'))"; } if( isset($fields['data_liberacao_de']) && !empty($fields['data_liberacao_de']) && isset($fields['data_liberacao_a']) && !empty($fields['data_liberacao_a']) ){ $params[] = "(data_liberacao >= STR_TO_DATE('" . $fields['data_liberacao_de'] . "', '%d/%m/%Y') AND " . " data_liberacao <= STR_TO_DATE('" . $fields['data_liberacao_a'] . "', '%d/%m/%Y'))"; } if( isset($fields['data_pagamento_de']) && !empty($fields['data_pagamento_de']) && isset($fields['data_pagamento_a']) && !empty($fields['data_pagamento_a']) ){ $params[] = "(data_pagamento >= STR_TO_DATE('" . $fields['data_pagamento_de'] . "', '%d/%m/%Y') AND " . " data_pagamento <= STR_TO_DATE('" . $fields['data_pagamento_a'] . "', '%d/%m/%Y'))"; } if( isset($fields['numero_contrato']) && !empty($fields['numero_contrato']) ){ $params[] = "numero_contrato = '" . $fields['numero_contrato'] . "'"; } if( isset($fields['numero_ade']) && !empty($fields['numero_ade']) ){ $params[] = "numero_ade = '" . $fields['numero_ade'] . "'"; } if( isset($fields['cpf_cliente']) && !empty($fields['cpf_cliente']) ){ $params[] = "clientes.cpf = '" . String_Refatorar::formatarCpf($fields['cpf_cliente']) . "'"; } if( isset($fields['empresa_id']) && !empty($fields['empresa_id']) ){ $params[] = "contratos.empresa_id = " . $fields['empresa_id']; } if( isset($fields['corretor_id']) && !empty($fields['corretor_id']) ){ $params[] = "corretor_id = " . $fields['corretor_id']; } if( isset($fields['status_proposta']) && !empty($fields['status_proposta']) ){ if( is_array($fields['status_proposta']) ){ $fields['status_proposta'] = array_filter($fields['status_proposta']); $params[] = "contratos.status_proposta IN ('" . implode("','", $fields['status_proposta']) . "')"; } else { $params[] = "contratos.status_proposta = " . $fields['status_proposta']; } } if( isset($fields['banco_id']) && !empty($fields['banco_id']) ){ $params[] = "contratos.banco_id = " . $fields['banco_id']; } if( isset($fields['convenio_id']) && !empty($fields['convenio_id']) ){ $params[] = "convenio_id = " . $fields['convenio_id']; } if( isset($fields['supervisor_id']) && !empty($fields['supervisor_id']) ){ $params[] = "rotas.gerente_id = " . $fields['supervisor_id']; } if( isset($fields['rota_id']) && !empty($fields['rota_id']) ){ $params[] = "rotas.id = " . $fields['rota_id']; } if( isset($fields['uf_corretor']) && !empty($fields['uf_corretor']) ){ $params[] = "corretores.uf = '" . $fields['uf_corretor'] . "'"; } if( isset($fields['data_recebimento_previa_de']) && !empty($fields['data_recebimento_previa_de']) ){ $params[] = "(data_recebimento_previa >= STR_TO_DATE('" . $fields['data_recebimento_previa_de'] . "', '%d/%m/%Y'))"; } if( isset($fields['data_recebimento_previa_a']) && !empty($fields['data_recebimento_previa_a']) ){ $params[] = "(data_recebimento_previa <= STR_TO_DATE('" . $fields['data_recebimento_previa_a'] . "', '%d/%m/%Y'))"; } $where = implode(" AND ", $params); $dbtable = new Model_DbTable_Contrato(); $select = $dbtable->getAdapter()->select()->from(array( 'contratos' => 'tb_contratos' ), array( 'contratos.*' )) ->joinInner(array( 'clientes' => 'tb_clientes' ), "contratos.cliente_id = clientes.id", array( 'cliente' => 'nome', 'cpf' )) ->joinLeft(array( 'corretores' => 'tb_corretores' ), "contratos.corretor_id = corretores.id", array( 'corretor' => 'nome' )) ->joinLeft(array( 'convenios' => 'tb_convenios' ), "contratos.convenio_id = convenios.id", array( 'convenio' => 'nome' )) ->joinLeft(array( 'tabelas' => 'tb_tabelas' ), "contratos.tabela_id = tabelas.id", array( 'tabela' => 'nome' )) ->joinLeft(array( 'bancos' => 'tb_bancos' ), "contratos.banco_id = bancos.id", array( 'banco' => 'nome' )) ->joinLeft(array( 'rotas' => 'tb_rotas' ), "corretores.rota_id = rotas.id", array( 'rota' => 'nome' )) ->joinLeft(array( 'supervisores' => 'tb_gerente_rota' ), "rotas.gerente_id = supervisores.id", array( 'supervisor' => 'nome' )) ->joinLeft(array( 'tb_status_proposta' => 'tb_tipos' ), "contratos.status_proposta = tb_status_proposta.id", array( 'status_proposta_nome' => 'descricao' )) ->where($where) ->order($order) ->limit($limit); $data = array( 'table' => $dbtable, 'rowClass' => $dbtable->getRowClass(), 'stored' => true, 'data' => $dbtable->getAdapter()->fetchAll($select) ); $rowsetClass = $dbtable->getRowsetClass(); return new $rowsetClass($data); } public function exportarProducaoAnaliticaCabecalho() { $ns = new Zend_Session_Namespace("exportar_excel"); $ns->exportar_excel = array( implode(';', array( 'A' => 'ID contrato', 'B' => 'Nº contrato', 'C' => 'Nº ADE', 'D' => 'Data Emissão', 'E' => 'Data Liberação', 'F' => 'Taxa (%)', 'G' => 'Cpf', 'H' => 'Cliente', 'I' => 'Banco', 'J' => 'Convênio', 'K' => 'Tipo', 'L' => 'Prazo', 'M' => 'Tabela', 'N' => 'Tipo de Formalização', 'O' => 'Status', 'P' => 'Vl. Bruto', 'Q' => 'Vl. Líquido', 'R' => 'Vl. Base Com. Emp.', 'S' => 'Vl. Prestação', 'T' => 'Com. Emp. (%)', 'U' => 'Adiantamento (%)', 'V' => 'Vl. Emp.', 'W' => 'Bônus Previsto (%)', 'X' => 'Bônus Previsto (R$)', 'Y' => 'Bônus Recebido (%)', 'Z' => 'Bônus Recebido (R$)', 'AA' => 'Base Com. Corretor', 'AB' => 'Com. Cor. (%)', 'AC' => 'Vl. Cor.', 'AD' => 'Bônus Cor. (%)', 'AE' => 'Bõnus Cor. ($)', 'AF' => 'Corretor', 'AG' => 'Captador', 'AH' => 'ID', 'AI' => 'Rota', 'AJ' => 'Supervisor', 'AK' => 'Digitador', 'AL' => '<>', 'AM' => 'Total', 'AN' => 'Comissão Paga', 'AO' => 'Grupo Comissão', 'AP' => 'Banco Origem', 'AQ' => 'UF Cliente', 'AR' => 'Cidade Cliente', 'AS' => 'Valor Seguro', 'AT' => 'Banco', 'AU' => 'Agência', 'AV' => 'Conta', 'AX' => 'SRCC', 'AY' => 'UF Parceiro', 'AZ' => 'Indicador', 'BA' => 'Mídia de Origem', 'BB' => 'Subestabelecido' )) ); } public function exportarProducaoAnalitica($paginatorContrato = null) { $ns = new Zend_Session_Namespace("exportar_excel"); foreach ( $paginatorContrato as $contrato ) { $vlComissaoCorretor = $contrato['valor_fixo_corretor'] + ($contrato['base_comissao_valor'] * $contrato['comissao_corretor'] / 100); $vlComissaoEmpresa = $contrato['valor_fixo_empresa'] + ($contrato['base_comissao_empresa_valor'] * $contrato['comissao_empresa'] / 100) + ($contrato['base_comissao_empresa_adiantamento'] * $contrato['adiantamento_comissao_empresa'] / 100); $vlBonusCorretor = ($contrato['base_comissao_bonus'] * $contrato['bonus_corretor'] / 100); $vlBonusPrevistoEmpresa = ($contrato['base_comissao_empresa_bonus'] * $contrato['bonus_empresa'] / 100); $vlBonusEmpresa = 0; $vlDiferenca = ($vlComissaoEmpresa + $vlBonusEmpresa - $vlComissaoCorretor - $vlBonusCorretor); $grupoComissao = !empty($contrato['grupo_comissao']) ? (new Model_GrupoComissao())->exibir($contrato['grupo_comissao']) : null; $ns->exportar_excel[] = implode(';', array( $contrato['contrato_id'], $contrato['numero_contrato'], $contrato['numero_ade'], $contrato['data_emissao'], $contrato['data_liberacao'], number_format($contrato['taxa_contrato'], 2, ',', '.'), $contrato['cpf_cliente'], $contrato['cliente'], $contrato['banco'], $contrato['convenio'], $contrato['tipo'], $contrato['prazo'], $contrato['tabela'], $contrato['tipo_formalizacao'] ? 'Digital' : 'Física', $contrato['status_proposta_nome'], number_format($contrato['valor_bruto'], 2, ',', '.'), number_format($contrato['valor_liquido'], 2, ',', '.'), number_format($contrato['base_comissao_empresa_valor'], 2, ',', '.'), number_format($contrato['valor_prestacao'], 2, ',', '.'), number_format($contrato['comissao_empresa'], 2, ',', '.'), number_format($contrato['adiantamento_comissao_empresa'], 2, ',', '.'), number_format($vlComissaoEmpresa, 2, ',', '.'), number_format($contrato['bonus_empresa'], 2, ',', '.'), number_format($vlBonusPrevistoEmpresa, 2, ',', '.'), number_format($contrato['bonus_recebido'], 2, ',', '.'), number_format($vlBonusEmpresa, 2, ',', '.'), number_format($contrato['base_comissao_valor'], 2, ',', '.'), number_format($contrato['comissao_corretor'], 2, ',', '.'), number_format($vlComissaoCorretor, 2, ',', '.'), number_format($contrato['bonus_corretor'], 2, ',', '.'), number_format($vlBonusCorretor, 2, ',', '.'), $contrato['corretor'], $contrato['captador'], $contrato['corretor_id'], $contrato['rota'], $contrato['supervisor'], $contrato['digitador'], number_format($vlDiferenca, 2, ',', '.'), number_format($vlComissaoEmpresa + $vlBonusEmpresa, 2, ',', '.'), !empty($contrato['data_recebimento_comissao']) ? 'PAGA' : 'NÃO PAGA', !empty($grupoComissao) ? $grupoComissao->descricao : "", Model_DbTable_BancoFebraban::getByCodigo($contrato['anterior_banco']), $contrato['uf_cliente'], $contrato['cidade_cliente'], number_format($contrato['valor_seguro'], 2, ',', '.'), $contrato['banco_beneficiado'], $contrato['agencia_beneficiado'], $contrato['conta_beneficiado'], !empty($contrato['srcc']) ? "SIM" : "NÃO", $contrato['corretor_uf'], $contrato['indicador'], $contrato['midia_origem'], $contrato['subestabelecido_nome'] )); } $ns->exportar_excel['relatorio_excel'] = 'producao-analitico'; return $ns->exportar_excel; } public function exportarProducaoGerenteCabecalho() { $ns = new Zend_Session_Namespace("exportar_excel"); $ns->exportar_excel = array( implode(';', array( 'A' => 'Corretor', 'B' => 'Nº Contrato', 'C' => 'CPF', 'D' => 'Cliente', 'E' => 'Banco', 'F' => 'Tipo', 'G' => 'Prazo', 'H' => 'Status', 'J' => 'Vl. Líquido' )) ); } public function exportarProducaoGerente($paginatorContrato = null) { $ns = new Zend_Session_Namespace("exportar_excel"); foreach ( $paginatorContrato as $contrato ) { $ns->exportar_excel[] = implode(';', array( $contrato['corretor'], $contrato['numero_contrato'], $contrato['cpf_cliente'], $contrato['cliente'], $contrato['banco'], $contrato['tipo'], $contrato['prazo'], $contrato['status_proposta_nome'], number_format($contrato['valor_liquido'], 2, ',', '.'), )); } $ns->exportar_excel['relatorio_excel'] = 'producao-gerente'; return $ns->exportar_excel; } public function getRelatorioDigitacaoSintetica(array $fields, $order = 'digitador', $page = null, $limit = null, $range = null) { $dbtable = new Model_DbTable_Contrato(); $select = $this->_getSelectProducaoAnalitico($dbtable, array( 'contratos.digitador', 'total_contratos' => 'COUNT(contratos.id)', 'contratos.usuario_efetivacao' )); $select->where("(contratos.usuario_efetivacao IS NOT NULL)"); $select->group(array( 'contratos.usuario_efetivacao' )); $this->_prepareFilterSelect($fields, $select); if( $order != null ){ $select->order($order); } if( $page ){ $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($page); if( $limit && is_numeric($limit) ){ $paginator->setItemCountPerPage($limit); } if( $range && is_numeric($range) ){ $paginator->setPageRange($range); } return $paginator; } } public function getRelatorioDigitacaoSinteticaTotalizador(array $fields) { $dbtable = new Model_DbTable_Contrato(); $select = $this->_getSelectProducaoAnalitico($dbtable, array( 'total_contratos' => 'COUNT(contratos.id)', )); $select->where("(contratos.usuario_efetivacao IS NOT NULL)"); $this->_prepareFilterSelect($fields, $select); return $dbtable->getAdapter()->fetchRow($select); } public function getUsuariosPreviaSupervisor($order = null) { $dbtable = new Model_DbTable_Contrato(); $select = $dbtable->getAdapter()->select()->from(array( 'contratos' => "tb_contratos" ), array()) ->joinInner(array( 'supervisores' => 'tb_gerente_rota' ), 'supervisores.id = contratos.usuario_previa', array( 'nome', 'supervisores.id' )) ->where('usuario_previa is not null') ->where('contratos.excluido <> 1') ->where('contratos.tipo_registro = 1') ->group('contratos.usuario_previa'); if( $order != null ){ $select->order($order); } return $dbtable->getAdapter()->fetchAll($select); } public function getUsuariosPreviaGerente($order = null) { $dbtable = new Model_DbTable_Contrato(); $select = $dbtable->getAdapter()->select()->from(array( 'contratos' => "tb_contratos" ), array()) ->joinInner(array( 'gerentes' => 'tb_gerentes' ), 'gerentes.id = contratos.usuario_previa', array( 'nome', 'gerentes.id' )) ->where('usuario_previa is not null') ->where('contratos.excluido <> 1') ->where('contratos.tipo_registro = 1') ->group('contratos.usuario_previa'); if( $order != null ){ $select->order($order); } return $dbtable->getAdapter()->fetchAll($select); } public function cadastrarAcaoJudicial(array $dados) { if( !isset($dados['numero_contrato']) ){ throw new Core_Exception('Dados não contém número do contrato'); } $mContrato = new Model_DbTable_Contrato(); $contrato = $mContrato->fetchRow( "numero_contrato = '{$dados['numero_contrato']}'"); if( !$contrato ){ throw new Core_Exception('Contrato de número não cadastrado.'); } $dados['contrato_id'] = $contrato->id; $numeroContrato = $dados['numero_contrato']; unset($dados['numero_contrato']); $dbtable = new Model_DbTable_ContratoAcao(); if( isset($dados['cpf']) && $dados['cpf'] ){ $dados['cpf'] = String_Refatorar::formatarCpf($dados['cpf']); } if( isset($dados['data_audiencia']) && $dados['data_audiencia'] ){ $dataAudiencia = $dados['data_audiencia']; if( $dataAudiencia->get('yyyy') < 1000 ){ throw new Exception("Padrão de data inválida, favor conferir no arquivo ({$numeroContrato} - {$dados['data_audiencia']})"); } $dados['data_audiencia'] = $dataAudiencia->get('yyyy-MM-dd'); } if( isset($dados['data_recebimento']) && $dados['data_recebimento'] ){ $dataRecebimento = $dados['data_recebimento']; if( $dataRecebimento->get('yyyy') < 1000 ){ throw new Exception("Padrão de data inválida, favor conferir no arquivo ({$numeroContrato} - {$dados['data_recebimento']})"); } $dados['data_recebimento'] = $dataRecebimento->get('yyyy-MM-dd'); } $where = array(); foreach ( $dados as $campo => $valor ) { if( $valor ){ $where[] = "({$campo} = '$valor')"; } else { $where[] = "({$campo} = '' OR {$campo} IS NULL)"; } } $where = implode(' AND ', $where); if( count($dbtable->fetchRow($where)) > 0 ){ throw new Core_Exception('Ação judicial já cadastrada anteriormente.'); } $dados['usuario_id'] = Yuppie_Auth::getIdentity()->id; return $dbtable->insert($dados); } public function fetchAcoesJudiciais($fields = null, $order = null) { $dbtable = new Model_DbTable_ContratoAcao(); $select = $dbtable->select()->setIntegrityCheck(false) ->from(array( 'acao' => 'tb_contratos_acoes' )) ->joinLeft(array( 'contrato' => 'tb_contratos' ), 'contrato.id = acao.contrato_id', array( 'numero_contrato', 'data_envio_fisico' )) ->joinLeft(array( 'empresa' => 'tb_empresas' ), 'empresa.id = contrato.empresa_id', array( 'empresa' => 'nome' )) ->joinLeft(array( 'cliente' => 'tb_clientes' ), 'cliente.id = contrato.cliente_id', array( 'cliente_id' => 'id', 'cliente' => 'nome', 'cliente_cpf' => 'cpf', 'cpf_cliente' => 'cliente.cpf' )) ->joinLeft(array( 'corretor' => 'tb_corretores' ), 'corretor.id = contrato.corretor_id', array( 'corretor' => 'nome' )); if( isset($fields['cliente']) && $fields['cliente'] ){ $select->where('(acao.nome LIKE ? OR cliente.nome LIKE ?', "%{$fields['cliente']}%"); $select->orWhere('acao.cpf = ? OR cliente.cpf = ?)', String_Refatorar::formatarCpf($fields['cliente'])); } if( isset($fields['contrato_id']) && $fields['contrato_id'] ){ $select->where('contrato_id = ?', $fields['contrato_id']); } if( isset($fields['corretor_id']) && $fields['corretor_id'] ){ $select->where('contrato.corretor_id = ?', $fields['corretor_id']); } if( isset($fields['empresa_id']) && $fields['empresa_id'] ){ $select->where('contrato.empresa_id = ?', $fields['empresa_id']); } if( isset($fields['data_audiencia_de']) && $fields['data_audiencia_de'] ){ $dataDe = new Zend_Date($fields['data_audiencia_de'], 'dd/MM/yyyy'); $select->where('acao.data_audiencia >= ?', $dataDe->get('yyyy-MM-dd')); } if( isset($fields['data_audiencia_a']) && $fields['data_audiencia_a'] ){ $dataA = new Zend_Date($fields['data_audiencia_a'], 'dd/MM/yyyy'); $select->where('acao.data_audiencia <= ?', $dataA->get('yyyy-MM-dd')); } if( isset($fields['numero_contrato']) && $fields['numero_contrato'] ){ $select->where('numero_contrato = ?', $fields['numero_contrato']); } return $dbtable->getAdapter()->fetchAll($select, null, Zend_Db::FETCH_OBJ); } public function salvarAnexoJudicial(array $anexos, $contratoId) { $dbContrato = new Model_DbTable_ContratoAcao(); $i = 0; if( count($anexos) > 0 ){ foreach ( $anexos as $anexo ) { if( !empty($anexo) ){ try { $dbContrato->update(array( 'anexo' => $anexo ), 'contrato_id = ' . $contratoId); $i++; } catch ( Zend_Exception $e ) { print_r($e->getMessage()); } } } } if( $i > 0 ) return true; return false; } public function getRelatorioPropostaUsuarioDigitado(array $fields, $order = 'total_contratos', $page = null, $limit = null, $range = null) { $dbtable = new Model_DbTable_Contrato(); $select = $dbtable->getAdapter()->select()->from(['contratos' => 'tb_contratos'], [ 'total_contratos' => 'COUNT(contratos.id)', 'contratos.usuario_efetivacao', 'contratos.data_efetivacao', 'total_bruto' => 'sum(valor_bruto)', 'total_liquido' => 'sum(valor_liquido)' ]); $select->where("(contratos.excluido <> 1 AND contratos.usuario_efetivacao IS NOT NULL)"); $select->group(array( 'contratos.usuario_efetivacao', "(DATE_FORMAT(contratos.data_efetivacao, '%Y-%m-%d'))" )); $this->_prepareFilterSelect($fields, $select); if( $order != null ){ $select->order($order); } if( $page ){ $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($page); if( $limit && is_numeric($limit) ){ $paginator->setItemCountPerPage($limit); } if( $range && is_numeric($range) ){ $paginator->setPageRange($range); } return $paginator; } } public function getRelatorioPropostaUsuarioDigitadoTotalizador(array $fields) { $dbtable = new Model_DbTable_Contrato(); $select = $dbtable->getAdapter()->select()->from(['contratos' => 'tb_contratos'], [ 'total_contratos' => 'COUNT(contratos.id)', 'total_bruto' => 'sum(valor_bruto)', 'total_liquido' => 'sum(valor_liquido)' ]); $select->where("(contratos.excluido <> 1 AND contratos.usuario_efetivacao IS NOT NULL)"); $this->_prepareFilterSelect($fields, $select); return $dbtable->getAdapter()->fetchRow($select); } public function exportarProducaoFormalizacaoCabecalho() { $ns = new Zend_Session_Namespace("exportar_excel"); $ns->exportar_excel = array( implode(';', array( 'A' => 'Corretor', 'B' => 'Nº contrato', 'C' => 'Usuário Recebimento', 'D' => 'Usuário Envio', 'E' => 'Usuário Prévia', 'F' => 'Tipo Usuário Prévia', 'G' => 'CPF', 'H' => 'Cliente', 'I' => 'Bordero', 'J' => 'Envelope', 'K' => 'Data Recebimento Físico', 'L' => 'Data Envio Físico', 'M' => 'Banco', 'N' => 'Tipo', 'O' => 'Prazo', 'P' => 'Status', 'Q' => 'Vl. Líquido' )) ); } public function exportarProducaoFormalizacao($contrato = null) { $ns = new Zend_Session_Namespace("exportar_excel"); foreach ( $contrato as $contrato ) { $dtEnvioFisico = Core_Util::convertDate($contrato['data_envio_fisico']); $dtRecebimentoFisico = Core_Util::convertDate($contrato['data_recebimento_fisico']); $ns->exportar_excel[] = implode(';', [ $contrato['corretor'], $contrato['numero_contrato'], $contrato['usuario_recebimento'], $contrato['formalizacao'], $contrato['usuario_previa_nome'], $contrato['grupo_usuario'], $contrato['cpf_cliente'], $contrato['cliente'], $contrato['bordero_newspace'] ? "'" . $contrato['bordero_newspace'] . "" : "", $contrato['numero_envelope'], $dtRecebimentoFisico, $dtEnvioFisico, $contrato['banco'], $contrato['tipo'], $contrato['prazo'], $contrato['status_proposta_nome'], number_format($contrato['valor_liquido'], 2, ',', '.'), ]); } $ns->exportar_excel['relatorio_excel'] = 'producao-formalizacao'; return $ns->exportar_excel; } public static function findByNameStatus($optionsName = array()) { $dbtable = new Model_DbTable_Tipos(); $dados = null; if( is_array($optionsName) ){ $convert = implode("','", $optionsName); $select = $dbtable->getAdapter()->select()->from(array( 'status' => 'tb_tipos' ), array( 'id' )) ->where("descricao IN ('" . $convert . "')") ->where("tipo = 'STATUS_PROPOSTA'") ->where("status.excluido <> 1"); return $dbtable->getAdapter()->fetchCol($select); } else { $dados = $dbtable->fetchRow("tipo = 'STATUS_PROPOSTA' AND descricao = '" . $optionsName . "'"); } if( $dados != null ){ return $dados['id']; } } public function getFluxoDre($fields = array()) { $dbtable = new Model_DbTable_Contrato(); if( count($fields) <= 0 ){ throw new Core_Exception('Atenção! Você deve informar pelo menos uma opção de busca.'); } $date = new Zend_Date($fields['data_competencia']); //filtros $dtInicial = $date->setDay(1)->get('yyyy-MM-dd'); $dtFinal = $date->addMonth(1)->subDay(1)->get('yyyy-MM-dd'); //total da receita bruta - tb_recebimento_contratos $selectReceitaBruta = $dbtable->getAdapter()->select()->from(['contratos_recebidos' => 'tb_recebimento_contratos'], ['total_valor' => 'SUM(valor_lancamento)', new Zend_Db_Expr("'Receita Bruta' as fluxo_dre"), new Zend_Db_Expr("'RECEITA_BRUTA' as tipo_lancamento")]) ->where('contratos_recebidos.excluido <> 1') ->where("contratos_recebidos.data_saldo >= '{$dtInicial}' AND contratos_recebidos.data_saldo <= '{$dtFinal}'") ->joinInner(['contratos' => 'tb_contratos'], 'contratos_recebidos.contrato_id = contratos.id', ['']) ->where('contratos.excluido <> 1'); //total de impostos $selectReceitaAvulsa = $dbtable->getAdapter()->select() ->from( [ 'lancamentos' => 'tb_lancamentos' ], [ 'total_valor' => 'SUM(lancamentos.valor)', new Zend_Db_Expr("'Receita Avulsa' as fluxo_dre"), new Zend_Db_Expr("'RECEITA' as tipo_lancamento") ] ) ->joinInner(array( 'categorias' => 'tb_categorias' ), 'categorias.id = lancamentos.categoria_id', array()) ->where('lancamentos.excluido <> 1 AND categorias.excluido <> 1') ->where("lancamentos.data_pagamento >= '{$dtInicial}' AND lancamentos.data_pagamento <= '{$dtFinal}'") ->where("lancamentos.tipo = 'RECEITA'"); //total de impostos $whereImpostos = $this->getWhereCategorias('IMPOSTOS'); $selectImpostos = $dbtable->getAdapter()->select()->from(array( 'lancamentos' => 'tb_lancamentos' ), array( 'total_valor_imposto' => 'SUM(lancamentos.valor)', new Zend_Db_Expr("'Impostos' as fluxo_dre"), new Zend_Db_Expr("'IMPOSTOS' as tipo_lancamento") )) ->joinInner(array( 'categorias' => 'tb_categorias' ), 'categorias.id = lancamentos.categoria_id', array()) ->where('lancamentos.excluido <> 1 AND categorias.excluido <> 1') ->where("lancamentos.data_pagamento >= '{$dtInicial}' AND lancamentos.data_pagamento <= '{$dtFinal}'") ->where($whereImpostos); $protocolo = new Model_ProtocoloPagamento(); $newDateInit = new Zend_Date($dtInicial); $newDateFinally = new Zend_Date($dtFinal); $fields['data_quitacao_de'] = $newDateInit->get('dd/MM/yyyy'); $fields['data_quitacao_a'] = $newDateFinally->get('dd/MM/yyyy'); $protocolos = $protocolo->listarProtocolosQuitados($fields); $protocolosQuitados = array(); $protocolosQuitados['total_valor'] = 0; if( $protocolos ){ $valorTotal = 0; $pago = 0; foreach ( $protocolos as $protocoloDados ) { $valorTotal += $protocoloDados['total_comissao']; $taxaTransf = isset($protocoloDados['taxa_transf']) && $protocoloDados['descontar_taxa_transf'] == 1 ? $protocoloDados['taxa_transf'] : 0; if( isset($protocoloDados['forma_pagamento_id']) && ($protocoloDados['forma_pagamento_id'] != 7) || $valorTotal == 0 ){ $taxaTransf = 0; } $totalComissao = number_format($protocoloDados['total_comissao'], 2, ".", ""); $desconto = number_format($protocoloDados['desconto'], 2, ".", ""); $acrescimo = number_format($protocoloDados['acrescimo'], 2, ".", ""); $pago += ($totalComissao + $acrescimo - $desconto - $taxaTransf); $protocolosQuitados = array( 'total_valor' => $pago, 'fluxo_dre' => "Despesas", 'tipo_lancamento' => "PROT_PAGAMENTO_CORRETOR_QUITADO" ); } } //total despesas (Prot.Supervisor) $selectDespesaProtSupervisor = $dbtable->getAdapter()->select()->from(array( 'protocolo_pagamento_supervisor' => 'tb_protocolo_pagamento_supervisor' ), array()) ->joinInner(array( 'protocolo_pagamento_supervisor_itens' => 'tb_protocolo_pagamento_supervisor_itens' ), 'protocolo_pagamento_supervisor_itens.protocolo_id = protocolo_pagamento_supervisor.id', array( 'total_despesa_prot_supervisor' => 'SUM((valor_comissao+acrescimo-desconto))', new Zend_Db_Expr("'Despesas' as fluxo_dre"), new Zend_Db_Expr("'PROT_PAGAMENTO_SUPERVISOR' as tipo_lancamento") )) ->joinInner(array( 'contratos' => 'tb_contratos' ), 'contratos.id = protocolo_pagamento_supervisor_itens.contrato_id', array()) ->where('protocolo_pagamento_supervisor.excluido <> 1 AND contratos.excluido <> 1') ->where("protocolo_pagamento_supervisor.data_pagamento >= '{$dtInicial}' AND protocolo_pagamento_supervisor.data_pagamento <= '{$dtFinal}'"); //total despesas (Prot.Gerente) $selectDespesaProtGerente = $dbtable->getAdapter()->select()->from(array( 'protocolo_pagamento_gerente' => 'tb_protocolo_pagamento_gerente' ), array( 'total_despesa_prot_gerente' => 'SUM((contratos.valor_liquido*gerentes.valor_comissao/100)+acrescimo-desconto)', new Zend_Db_Expr("'Despesas' as fluxo_dre"), new Zend_Db_Expr("'PROT_PAGAMENTO_GERENTE' as tipo_lancamento") )) ->joinInner(array( 'gerentes' => 'tb_gerentes' ), 'gerentes.id = protocolo_pagamento_gerente.gerente_id', array( '' )) ->joinInner(array( 'protocolo_pagamento_gerente_itens' => 'tb_protocolo_pagamento_gerente_itens' ), 'protocolo_pagamento_gerente_itens.protocolo_id = protocolo_pagamento_gerente.id', array()) ->joinInner(array( 'contratos' => 'tb_contratos' ), 'contratos.id = protocolo_pagamento_gerente_itens.contrato_id', array()) ->where('protocolo_pagamento_gerente.excluido <> 1 AND gerentes.excluido <> 1 AND contratos.excluido <> 1') ->where("protocolo_pagamento_gerente.data_pagamento >= '{$dtInicial}' AND protocolo_pagamento_gerente.data_pagamento <= '{$dtFinal}'"); $whereCategoriasPessoal = $this->getWhereCategorias('DESPESAS COM PESSOAL'); $selectGastosComPessoal = $dbtable->getAdapter()->select()->from(array( 'lancamentos' => 'tb_lancamentos' ), array( 'total_valor_imposto' => "SUM(lancamentos.valor_pago)", new Zend_Db_Expr("'Despesas com Pessoal' as fluxo_dre"), new Zend_Db_Expr("'DESPESAS_COM_PESSOAL' as tipo_lancamento") )) ->joinInner(array( 'categorias' => 'tb_categorias' ), 'categorias.id = lancamentos.categoria_id', array()) ->where('lancamentos.excluido <> 1 AND categorias.excluido <> 1') ->where("lancamentos.data_pagamento >= '{$dtInicial}' AND lancamentos.data_pagamento <= '{$dtFinal}'") ->where($whereCategoriasPessoal); //total de depesas (Despesas ADM) $whereDespesas = $this->getWhereCategorias('DESPESAS'); $selectDespesaBruta = $dbtable->getAdapter()->select()->from(['lancamentos' => 'tb_lancamentos'], [ 'total_depesa_adm' => "SUM(valor_pago)", new Zend_Db_Expr("'Despesas' as fluxo_dre"), new Zend_Db_Expr("'DESPESA_BRUTA_ADM' as tipo_lancamento") ] ) ->joinInner(['categorias' => 'tb_categorias'], 'categorias.id = lancamentos.categoria_id', []) ->where("lancamentos.excluido <> 1 AND tipo LIKE 'DESPESA'") ->where("lancamentos.data_pagamento >= '{$dtInicial}' AND lancamentos.data_pagamento <= '{$dtFinal}'") ->where($whereDespesas); if (!empty($fields['empresa_id'])) { $empresaId = $fields['empresa_id']; $selectReceitaBruta->where('contratos.empresa_id = ' . $empresaId); $selectImpostos->where('lancamentos.empresa_id = ' . $empresaId); $selectDespesaBruta->where('lancamentos.empresa_id = ' . $empresaId); $selectDespesaProtSupervisor->where('contratos.empresa_id = ' . $empresaId); $selectDespesaProtGerente->where('contratos.empresa_id = ' . $empresaId); $selectGastosComPessoal->where('lancamentos.empresa_id = ' . $empresaId); $selectReceitaAvulsa->where('lancamentos.empresa_id = ' . $empresaId); } $selectTotal = $dbtable->getAdapter()->select()->union(array( $selectReceitaBruta, $selectReceitaAvulsa, $selectImpostos, $selectDespesaBruta, $selectDespesaProtSupervisor, $selectDespesaProtGerente, $selectGastosComPessoal ), Zend_Db_Select::SQL_UNION_ALL); $result = $dbtable->getAdapter()->fetchAll($selectTotal, '', Zend_Db::FETCH_OBJ); $newArray = array(); $lucroBruto = array(); $lucroOperacional = array(); $totalDespesas = array(); $despesasComPessoal = array(); $despesasBrutas = array(); $lucroLiquidoDoExercicio = array(); if( $result ){ foreach ( $result as $values ) { if( !isset($newArray[$values->fluxo_dre]) ){ $newArray[$values->fluxo_dre] = array( 'valor_total' => 0, 'fluxo_dre' => null ); } $newArray[$values->fluxo_dre]['valor_total'] += $values->total_valor; $newArray[$values->fluxo_dre]['fluxo_dre'] = $values->fluxo_dre; } $reBruto = $newArray["Receita Bruta"]; $reAvulso = $newArray["Receita Avulsa"]; $impostos = $newArray["Impostos"]; $despesas = $newArray["Despesas"]; $lucroBruto["Lucro Bruto"] = array( "valor_total" => $reBruto['valor_total'] + $reAvulso['valor_total'] - $impostos['valor_total'], "fluxo_dre" => "Lucro Bruto" ); //pega só valor absoluto $despesas['valor_total'] = abs($despesas['valor_total'] + $protocolosQuitados['total_valor']); $despesasBrutas = array( "valor_total" => abs($newArray['Despesas']['valor_total'] + $protocolosQuitados['total_valor']), "fluxo_dre" => "Despesas" ); $totalDespesas['Despesas'] = $despesasBrutas; $lucroOperacional["Lucro Operacional"] = array( "valor_total" => $lucroBruto["Lucro Bruto"]['valor_total'] - $despesas['valor_total'], "fluxo_dre" => "Lucro Operacional" ); $despesasComPessoal["Despesas com Pessoal"] = $newArray["Despesas com Pessoal"]; $lucroLiquidoDoExercicio["Lucro liquido do exercicio"] = array( "valor_total" => $lucroOperacional["Lucro Operacional"]['valor_total'] - $despesasComPessoal["Despesas com Pessoal"]['valor_total'], "fluxo_dre" => "Lucro liquido do exercicio" ); unset($newArray['Despesas']); unset($newArray['Despesas com Pessoal']); $resultadoFinal = array_merge_recursive($newArray, $lucroBruto, $totalDespesas, $lucroOperacional, $despesasComPessoal, $lucroLiquidoDoExercicio); } return $resultadoFinal; } public function exportarProducaoCartaoCabecalho() { $ns = new Zend_Session_Namespace("exportar_excel"); $ns->exportar_excel = array( implode(';', array( 'A' => 'Nº contrato', 'B' => 'Cpf', 'C' => 'Cliente', 'D' => 'Banco', 'E' => 'Convênio', 'F' => 'Tipo', 'G' => 'Prazo', 'H' => 'Status', 'I' => 'Vl. Bruto', 'J' => 'Vl. Líquido', 'K' => 'Com. Emp. (%)', 'L' => 'Vl. Emp.', 'M' => 'Bônus Previsto (%)', 'N' => 'Bônus Previsto (R$)', 'O' => 'Bônus Recebido (%)', 'P' => 'Bônus Recebido (R$)', 'Q' => 'Com. Cor. (%)', 'R' => 'Vl. Cor.', 'S' => 'Corretor', 'T' => '≠', 'U' => 'Total' )) ); } public function exportarProducaoCartao($paginatorContrato = null) { $ns = new Zend_Session_Namespace("exportar_excel"); foreach ( $paginatorContrato as $contrato ) { $vlComissaoCorretor = $contrato['valor_fixo_corretor'] + ($contrato['base_comissao_valor'] * $contrato['comissao_corretor'] / 100); $vlComissaoEmpresa = $contrato['valor_fixo_empresa'] + $contrato['base_comissao_empresa_valor'] * $contrato['comissao_empresa'] / 100; $vlBonusCorretor = ($contrato['base_comissao_bonus'] * $contrato['bonus_corretor'] / 100); $vlBonusPrevistoEmpresa = ($contrato['base_comissao_empresa_bonus'] * $contrato['bonus_empresa'] / 100); $vlBonusEmpresa = 0; $vlDiferenca = ($vlComissaoEmpresa + $vlBonusEmpresa - $vlComissaoCorretor - $vlBonusCorretor); $ns->exportar_excel[] = implode(';', array( $contrato['numero_contrato'], $contrato['cpf_cliente'], $contrato['cliente'], $contrato['banco'], $contrato['convenio'], $contrato['tipo'], $contrato['prazo'], $contrato['status_proposta_nome'], number_format($contrato['valor_bruto'], 2, ',', '.'), number_format($contrato['valor_liquido'], 2, ',', '.'), number_format($contrato['comissao_empresa'], 2, ',', '.'), number_format($vlComissaoEmpresa, 2, ',', '.'), number_format($contrato['bonus_empresa'], 2, ',', '.'), number_format($contrato['comissao_adiantamento_empresa'], 2, ',', '.'), number_format($vlBonusPrevistoEmpresa, 2, ',', '.'), number_format($contrato['bonus_recebido'], 2, ',', '.'), number_format($vlBonusEmpresa, 2, ',', '.'), number_format($contrato['comissao_corretor'], 2, ',', '.'), number_format($vlComissaoCorretor, 2, ',', '.'), $contrato['corretor'], number_format($vlDiferenca, 2, ',', '.'), number_format($vlComissaoEmpresa + $vlBonusEmpresa, 2, ',', '.'), )); } $ns->exportar_excel['relatorio_excel'] = 'producao-cartao'; return $ns->exportar_excel; } public function _geraArrayHorizontalRankingVendas($relatorio1, $relatorio2) { $corretores = array_flip(array_merge(array_keys($relatorio1), array_keys($relatorio2))); $meses = array_flip(array_merge(array_keys((array) current($relatorio1)), array_keys((array) current($relatorio2)))); foreach ( $meses as $m => $v ) { $meses[$m] = ''; } if(count($meses) == 1){ return null; } unset($meses[0]); $corretores = array_merge_recursive($relatorio1, $relatorio2); $totais = array(); foreach ( $corretores as $nome => $meses ) { foreach ( $meses as $mes => $valor ) { if( empty($valor) ){ continue; } if( !isset($totais[$mes]) ){ $totais[$mes] = 0; } $totais[$mes] += (float)$valor; } } uasort($corretores, function($a, $b){ return array_sum($b) - array_sum($a); }); $dados = new stdClass(); $dados->totais = $totais; $dados->corretores = $corretores; return $dados; } public function getDadosRelatorioRankingVendas($periodo, $dados) { $data1 = new Zend_Date($dados['data_de']); $data2 = new Zend_Date($dados['data_a']); $arr = array(); $meses = array(); $dadosCorretor = array(); while ( $data1->getTimestamp() < $data2->getTimestamp() ) { $meses[$data1->get('M/yyyy')] = ''; $data1->addMonth(1); } foreach ( $periodo as $r ) { $corretor = $r['corretor']; if( !isset($arr[$corretor]) ){ $arr[$corretor] = $meses; } $arr[$corretor][$r['mes'] . '/' . $r['ano']] = $r['base_comissao']; $dadosCorretor[$r['corretor']] = $r; } return ['corretores_meses' => $arr, 'dados_corretores' => $dadosCorretor]; } public function exportarComissaoPendenteCabecalho() { $ns = new Zend_Session_Namespace("exportar_excel"); $ns->exportar_excel = array( implode(';', array( 'A' => 'Empresa', 'B' => 'Sub', 'C' => 'Corretor', 'D' => 'Nº Contrato', 'E' => 'Emissão', 'F' => 'Liberação', 'G' => 'CPF Cliente', 'H' => 'Convênio', 'I' => 'Tabela', 'J' => 'Produto', 'K' => 'Prazo', 'L' => 'Vl. Líquido', 'M' => 'Comissão Prevista (%)', 'M' => 'Comissão Prevista (R$)', 'N' => 'Comissão Recebida (%)', 'N' => 'Comissão Recebida (R$)', 'O' => 'Diferença', )) ); } public function exportarComissaoPendente($paginatorContrato = null) { $ns = new Zend_Session_Namespace("exportar_excel"); foreach ( $paginatorContrato as $contrato ) { $comissaoPrevista = $contrato['valor_fixo_empresa'] + ($contrato['comissao_prevista'] * $contrato['base_comissao_empresa_valor'] / 100); $comissaoRecebida = $contrato['valor_fixo_empresa'] + ($contrato['comissao_recebida'] * $contrato['base_comissao_empresa_valor'] / 100); $dtEmissao = null; $dtLiberacao = null; if( isset($contrato['data_emissao']) && !empty($contrato['data_emissao']) ){ $dataEmissao = new Zend_Date($contrato['data_emissao']); $dtEmissao = $dataEmissao->get('dd/MM/yyyy'); } if( isset($contrato['data_liberacao']) && !empty($contrato['data_liberacao']) ){ $dataLiberacao = new Zend_Date($contrato['data_liberacao']); $dtLiberacao = $dataLiberacao->get('dd/MM/yyyy'); } $ns->exportar_excel[] = implode(';', array( $contrato['empresa'], $contrato['subestabelecido_id'] > 0 ? "SIM" : "NÃO", $contrato['corretor'], $contrato['numero_contrato'], $dtEmissao, $dtLiberacao, $contrato['cpf_cliente'], $contrato['convenio'], $contrato['tabela'], $contrato['produto'], $contrato['prazo'], number_format($contrato['valor_liquido'], 2, ',', '.'), number_format($contrato['comissao_prevista'], 2, ',', '.'), number_format($comissaoPrevista, 2, ',', '.'), number_format($contrato['comissao_recebida'], 2, ',', '.'), number_format($comissaoRecebida, 2, ',', '.'), number_format($comissaoPrevista - $comissaoRecebida, 2, ',', '.'), )); } $ns->exportar_excel['relatorio_excel'] = 'comissao-pendente'; return $ns->exportar_excel; } protected function getDadosContratoEnvioFisico($codigoDeBarrasAde, $bancoId) { $where = "contratos.codigo_barras_ade LIKE '" . $codigoDeBarrasAde . "'"; $db = new Model_DbTable_Contrato(); $select = $db->getAdapter()->select() ->from(array( 'contratos' => 'tb_contratos' )) ->joinInner(array( 'empresas' => 'tb_empresas' ), 'empresas.id = contratos.empresa_id', array( 'empresa' => 'nome' )) ->joinInner(array( 'clientes' => 'tb_clientes' ), 'clientes.id = contratos.cliente_id', array()) ->joinInner(array( 'corretores' => 'tb_corretores' ), 'corretores.id = contratos.corretor_id', array( 'corretor' => 'nome' )) ->joinLeft(array( 'convenios' => 'tb_convenios' ), 'convenios.id = contratos.convenio_id', array( 'convenio' => 'convenios.nome' )) ->where($where) ->where('contratos.banco_id = ' . $bancoId); return $db->getAdapter()->fetchRow($select); } public function baixarEnvioFisicoItau($codigoDeBarrasAde, $bancoId, $dataEnvio, $bordero, $protocolo, $obs = '', $usuarioFormalizacao = null) { $result = null; if( ( ($contratos = $this->getDadosContratoEnvioFisico($codigoDeBarrasAde, $bancoId)) != null ) ){ $dbtable = new Model_DbTable_Contrato(); $result = $dbtable->baixarEnvioFisicoItau($contratos['id'], $contratos['protocolo_recebimento_fisico'], $dataEnvio, $bordero, $protocolo, $obs, $usuarioFormalizacao); } return $result; //contrato não encontrado } public function getContratosJuridicos(array $fields, $order = '', $page = null, $limit = null, $range = null) { $dbtable = new Model_DbTable_Contrato(); $select = $dbtable->getAdapter()->select()->from(['contratos' => 'tb_contratos'], ['data_envio_fisico', 'id_contrato' => 'contratos.id', 'cliente_id', 'numero_contrato', 'numero_ade']) ->joinInner(array( "clientes" => "tb_clientes" ), "contratos.cliente_id = clientes.id", array( 'cliente' => 'nome', 'cpf_cliente' => 'cpf' )) ->joinInner(['bancos' => 'tb_bancos'], 'bancos.id = contratos.banco_id', ['banco' => 'nome']) ->joinLeft(array( "corretores" => "tb_corretores" ), "contratos.corretor_id = corretores.id", array( 'corretor' => 'nome' )) ->joinLeft(array( 'subestabelecidos' => 'tb_empresas' ), 'contratos.subestabelecido_id = subestabelecidos.id', array( 'subestabelecido_codigo' => 'codigo_promotora', 'substabelecido' => 'subestabelecidos.nome' )) ->joinLeft(array( 'contratos_judiciais' => 'tb_contratos_acoes' ), 'contratos_judiciais.contrato_id = contratos.id', array( 'contratos_judiciais.*', 'id_acao' => 'contratos_judiciais.id' )) ->where("contratos.excluido<>1") ->where("contratos.tipo_registro = 1") ->where("clientes.excluido<>1"); $select->group(array( 'contratos.id' )); $this->_prepareFilterSelect($fields, $select); if( $order != null ){ $select->order($order); } else { $select->order(array( 'corretores.nome' )); } if( $page ){ $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($page); if( $limit && is_numeric($limit) ){ $paginator->setItemCountPerPage($limit); } if( $range && is_numeric($range) ){ $paginator->setPageRange($range); } return $paginator; } return $dbtable->getAdapter()->fetchAll($select); } public function getAcoesJudiciais($contratoId = null) { $dbtable = new Model_DbTable_Contrato(); $selectProtocoloPagamento = $dbtable->getAdapter()->select()->from('tb_protocolo_pagamento', array( 'data_pagamento', 'id' )) ->joinInner(array( 'tb_protocolo_contrato' ), 'tb_protocolo_pagamento.id = tb_protocolo_contrato.protocolo_id', array( 'contrato_id', 'valor' )) ->where('tb_protocolo_pagamento.excluido<>1 AND tb_protocolo_contrato.excluido<>1 AND tb_protocolo_pagamento.liberado_pagamento = 1') ->order("tb_protocolo_pagamento.id DESC"); $select = $dbtable->getAdapter()->select()->from(array( 'contratos' => 'tb_contratos' ), array( '*' )) ->joinInner(array( "clientes" => "tb_clientes" ), "contratos.cliente_id = clientes.id", array( 'cliente' => 'nome', 'cpf_cliente' => 'cpf', 'nome_cliente' => 'clientes.nome' )) ->joinLeft(array( "corretores" => "tb_corretores" ), "contratos.corretor_id = corretores.id", array( 'corretor' => 'nome' )) ->joinLeft(array( 'subestabelecidos' => 'tb_empresas' ), 'contratos.subestabelecido_id = subestabelecidos.id', array( 'subestabelecido_codigo' => 'codigo_promotora', 'substabelecido' => 'subestabelecidos.nome' )) ->joinLeft(array( 'contratos_judiciais' => 'tb_contratos_acoes' ), 'contratos_judiciais.contrato_id = contratos.id', array( 'contratos_judiciais.*', 'id_acao' => 'contratos_judiciais.id' )) ->joinLeft(array( 'convenios' => 'tb_convenios' ), 'convenios.id = contratos.convenio_id', array( 'convenio' => 'convenios.nome' )) ->joinLeft(array( 'bancos' => 'tb_bancos' ), 'bancos.id = contratos.banco_id', array( 'banco' => 'bancos.nome' )) ->joinLeft(array( 'status_propostas' => "tb_tipos" ), "contratos.status_proposta = status_propostas.id", array( 'status_proposta_nome' => 'descricao' )) ->joinLeft(array( 'protocolos_pagamentos' => $selectProtocoloPagamento ), "protocolos_pagamentos.contrato_id = contratos.id", array( 'data_pagamento_protocolo' => 'MAX(protocolos_pagamentos.data_pagamento)', 'valor_comissao_paga' => 'valor' )) ->where("contratos.id = " . $contratoId) ->where("contratos.excluido<>1") ->where("contratos.tipo_registro = 1") ->where("clientes.excluido<>1"); $select->group(array( 'contratos.id' )); return $dbtable->getAdapter()->fetchRow($select); } /** * Verifica se o cliente possui alguma ação judicial. * @param type $clienteId * @return type */ public function findAcaoJudicialProposta($clienteId = null) { $dbtable = new Model_DbTable_Contrato(); $select = $dbtable->getAdapter()->select()->from(array( 'contratos' => 'tb_contratos' ), array( 'id' )) ->joinInner(array( "clientes" => "tb_clientes" ), "contratos.cliente_id = clientes.id", array()) ->joinInner(array( 'contratos_judiciais' => 'tb_contratos_acoes' ), 'contratos_judiciais.contrato_id = contratos.id', array()) ->where("clientes.id = " . $clienteId) ->where("contratos.excluido<>1") ->where("contratos.tipo_registro = 1") ->where("clientes.excluido<>1"); $select->group(array( 'contratos.id' )); return $dbtable->getAdapter()->fetchCol($select); } /** * * @param array $contratosCorretor * @param array $params * @return type * @throws Core_Exception */ public function gerarProtocoloPagamento(array $contratosCorretor, array $params) { if( !$contratosCorretor || !$params ){ throw new Core_Exception('Parâmetros do protocolo não foram passados corretamente.'); } $protocolos = $contratosNaoGerados = array(); foreach ( $contratosCorretor as $corretorId => $contratos ) { $contrato = new Model_Contrato(); if( $contrato->validarProtocoloNegativo($contratos) ){ $contratosNaoGerados[] = array( 'status' => 0, 'motivo' => "Corretor com comissão negativa (ID: $corretorId)", 'numero_contrato' => "" ); continue; } $modelCorretor = new Model_Corretor(); $dadosCorretor = $modelCorretor->exibir($corretorId); $taxaTransferenciaBanco = 0; $bancoCorretor = $dadosCorretor['banco'] ? Model_Banco::bancoPorCodigo($dadosCorretor['banco']) : null; if ($bancoCorretor && $dadosCorretor['descontar_taxa_transf'] > 0 && !empty($bancoCorretor['taxa_transf'])) { $taxaTransferenciaBanco = $bancoCorretor['taxa_transf']; } $descontarTaxaTransf = 0; if (!empty($params['forma_pagamento_id'])) { $model = new Model_FormaPagamento(); $formaPagamento = $model->exibir($params['forma_pagamento_id']); $descontarTaxaTransf = ($formaPagamento->descricao == 'PIX' || $params['forma_pagamento_id'] == 7) && $dadosCorretor['descontar_taxa_transf'] == 1 ? 1 : 0; } $protocolo = new Model_ProtocoloPagamento(); $protocolo->setCorretorId($corretorId); $protocolo->setComentario(isset($params['obs']) ? $params['obs'] : ''); $protocolo->setDataPagamento($params['data_pagamento']); $protocolo->setFormaPagamentoId($params['forma_pagamento_id']); $protocolo->setContaId($params['conta_id']); $protocolo->setDescontarTaxaTransf($descontarTaxaTransf); $protocolo->setTaxaTransferenciaBanco($taxaTransferenciaBanco); $protocolo->setBanco($dadosCorretor['banco']); $protocolo->setAgencia($dadosCorretor['agencia']); $protocolo->setConta($dadosCorretor['conta']); $protocolo->setTipoConta($dadosCorretor['tipo_conta']); $protocolo->setChavePix($dadosCorretor['chave_pix']); $protocoloId = $protocolo->salvar($protocolo); $protocolos[] = $protocoloId; foreach ( $contratos as $contratoId => $situacao ) { try { $result = $contrato->pagarComissao($contratoId, $protocoloId, $situacao); if( $result['status'] == 0 ){ $contratosNaoGerados[] = $result; } } catch ( Zend_Exception $e ) { $contratosNaoGerados[] = array( 'status' => 0, 'numero_contrato' => $contratoId, 'motivo' => $e->getMessage(), ); } } } $result = array( 'protocolos' => $protocolos, 'contratos_nao_gerados' => $contratosNaoGerados ); return $result; } /** * * @param type $contratoId * @param type $anexo */ public function regularizarPendencia($contratoId, $anexo, $tipoDocumento) { if( !$contratoId || !$anexo ){ throw new Core_Exception('Contrato ou anexo não identificados.'); } $dbRegularizaPendencia = new Model_DbTable_PendenciaRegularizar(); return $dbRegularizaPendencia->insert(array( 'contrato_id' => $contratoId, 'tipo_documento' => $tipoDocumento, 'anexo' => $anexo, 'validado' => 0, 'usuario_abertura' => Yuppie_Auth::getIdentity()->login, )); } public function validarRegularizacaoPendencia($id, $aceito, $motivo = null) { $dbRegularizaPendencia = new Model_DbTable_PendenciaRegularizar(); $row = $dbRegularizaPendencia->fetchRow("id = {$id}"); if( !$row ){ throw new Core_Exception('Item não localizado no sistema.'); } $row->validado = 1; $row->aceito = $aceito; $row->motivo = $motivo; $row->usuario_validacao = Yuppie_Auth::getIdentity()->login; $result = $row->save(); if( $result && $aceito == 1 ){ $data = array( "id" => $row->contrato_id, "cobranca_banco" => 0 ); $dbtableContrato = new Model_DbTable_Contrato(); $dbtableContrato->update($data, "id = {$row->contrato_id}"); $this->sobreporAnexoPendencia($row->contrato_id, $row->tipo_documento, $row->anexo); } return $result; } public function notificarRegularizacaoPendencia($regularizacaoId, $tipoNotificacao = 1) { $regularizacao = new Model_DbTable_PendenciaRegularizar(); $dadosRegularizacao = $regularizacao->fetchRow("id = " . $regularizacaoId); $dadosContrato = $dadosRegularizacao->findParentRow('Model_DbTable_Contrato'); $dadosCorretor = $dadosContrato->findParentRow('Model_DbTable_Corretor'); if( !$dadosRegularizacao || !$dadosContrato || !$dadosCorretor ){ throw new Core_Exception("Item não encontrado."); } if( $tipoNotificacao == 1 ){ $mensagem = "Prezado Parceiro, <br />" . "Sua pendencia foi retirada com sucesso conforme documentação anexada na proposta. <br /><br />" . "<strong>Nº do Contrato: " . $dadosContrato->numero_contrato . "</strong> <br /><br />" . "Obs.: A pendencia poderá ser reativada se a mesma for rejeitada pelo Banco do Contrato.<br /><br /><br />" . "Boas Vendas."; } else { $mensagem = "Prezado Parceiro, </ br>" . "Sua Pendencia não foi aceita pela empresa/banco conforme motivo abaixo: <br />" . "<strong>Nº do Contrato: " . $dadosContrato->numero_contrato . "</strong> <br /><br />" . "<strong>Motivo: " . $dadosRegularizacao->motivo . "</strong> <br /><br />" . "Aguardamos novo envio para regularização da proposta.<br /><br /><br />" . "Boas Vendas."; } //faz o envio da mensagem try { $mail = new Core_Mail(); $assunto = 'Regularização de Pendência - ' . $dadosContrato->numero_contrato; return $mail->enviarMensagemHtml($dadosCorretor['nome'], $dadosCorretor['email'], utf8_decode($assunto), $mensagem); } catch ( Zend_Mail_Exception $e ) { } } public function getAcompanhamentoDiferido($fields = array(), $page = null, $limit = null, $order = null, $range = null) { $dbtable = new Model_DbTable_Contrato(); $select = $this->_getSelectProducaoAnalitico($dbtable, array( 'contratos.numero_contrato', 'contratos.numero_ade', 'contratos.tipo', 'contratos.prazo', 'contratos.valor_bruto', 'contratos.valor_liquido', 'contratos.comissao_empresa', 'contratos.digitador', 'contratos.cartao', 'contratos.bonus_empresa', 'contratos.adiantamento_comissao_empresa', 'contratos.comissao_corretor', 'contratos.bonus_corretor', 'contratos.corretor_id', 'contratos.data_liberacao', 'contratos.data_emissao', 'contratos.produto', 'contratos.bonus_recebido', 'contratos.empresa_id', 'contratos.banco_id', 'contratos.convenio_id', 'contratos.tabela_id' ) ); $select->joinLeft(array( 'recebimento_contrato' => 'tb_recebimento_contratos' ), 'recebimento_contrato.contrato_id = contratos.id', array( "parcelas_recebidas" => "MONTH(recebimento_contrato.data_recebimento_comissao) - MONTH(data_liberacao)", 'data_recebimento_comissao' )); $select->where("contratos.diferimento_corretor > 0 AND contratos.status_proposta = 43 AND recebimento_contrato.excluido <> 1"); $select->where("(contratos.cartao <> 1 OR contratos.cartao IS NULL)"); /** Tipo Remuneração/Diferimento * Bradesco = 2 * Pan = C * MERCANTIL = A PRAZO */ $select->where("recebimento_contrato.tipo_remuneracao IN ('2', 'C', 'A PRAZO')"); $select->where("IF(recebimento_contrato.natureza IS NULL, recebimento_contrato.natureza IS NULL, recebimento_contrato.natureza NOT IN ('5', '6'))"); $select->group(array( 'recebimento_contrato.id' )); $this->_prepareFilterSelect($fields, $select); if( $page ){ $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($page); if( $limit && is_numeric($limit) ){ $paginator->setItemCountPerPage($limit); } if( $range && is_numeric($range) ){ $paginator->setPageRange($range); } return $paginator; } } protected function _getBaseComissaoValor(array $dados, $valorBruto = 0, $valorLiquido = 0) { $dados['base_comissao_empresa_valor'] = $valorLiquido; $dados['base_comissao_valor'] = $valorLiquido; if( isset($dados['base_comissao_empresa']) && !empty($dados['base_comissao_empresa']) ){ switch ( $dados['base_comissao_empresa'] ) { case "VALOR BRUTO": $dados['base_comissao_empresa_valor'] = $valorBruto; break; } } if( isset($dados['base_comissao']) && !empty($dados['base_comissao']) ){ switch ( $dados['base_comissao'] ) { case "VALOR BRUTO": $dados['base_comissao_valor'] = $valorBruto; break; } } return $dados; } public function getHistoricoFinanceiro($contratoId) { if( $contratoId ){ $dbtable = new Model_DbTable_RecebimentoContrato(); return $dbtable->fetchAllDependents("contrato_id = " . $contratoId); } return null; } public function getProducaoCorretor($params) { $dbtable = new Model_DbTable_Contrato(); $select = $dbtable->getAdapter()->select() ->from(array( 'contratos' => 'tb_contratos' ), array( 'base_comissao_valor' => 'SUM(base_comissao_valor)', 'contratos.banco_id', 'contratos.corretor_id', 'protocolo_fisico' => 'IF(protocolo_recebimento_fisico IS NULL,0,1)', 'status_proposta', 'valor_comissao_empresa' => 'SUM((base_comissao_empresa_valor*comissao_empresa/100)+(base_comissao_empresa_bonus*bonus_empresa/100))')) ->joinLeft(array( 'bancos' => 'tb_bancos' ), 'bancos.id = contratos.banco_id', array( 'banco_nome' => 'bancos.nome', 'imposto')) ->joinLeft(array( 'corretores' => 'tb_corretores' ), 'corretores.id = contratos.corretor_id', array( 'corretor' => 'corretores.nome', 'corretor_id' => 'corretores.id' )) ->joinLeft(array( 'rotas' => 'tb_rotas' ), 'rotas.id = corretores.rota_id', array( 'rota_id' => 'id' )) ->where('contratos.excluido <> 1 and contratos.tipo_registro = 1 and contratos.status_proposta IS NOT NULL') ->where('contratos.corretor_id is not null') ->where("contratos.tipo not in ('PLASTICO', 'ATIVACAO')") ->group('contratos.banco_id') ->group('rotas.id') ->group('rotas.gerente_id') ->group('corretores.id'); $this->_prepareFilterSelect($params, $select); return $dbtable->getAdapter()->fetchAll($select); } public function listarProtocolosRecebimento(array $fields) { $dbtable = new Model_DbTable_Contrato(); $select = $dbtable->getAdapter()->select()->from(array( 'contratos' => 'tb_contratos' ), array( 'id', 'numero_contrato', 'numero_ade', 'corretor_id', 'data_liberacao', 'data_emissao', 'comissao_corretor', 'valor_liquido', 'base_comissao_valor', 'protocolo_recebimento_fisico', 'data_recebimento_fisico', 'obs_recebimento_fisico', 'prazo', 'tipo' )) ->joinInner(array( "clientes" => "tb_clientes" ), "contratos.cliente_id = clientes.id", array( 'cpf_cliente' => 'clientes.cpf', 'cliente' => 'clientes.nome' )) ->joinLeft(array( "corretores" => "tb_corretores" ), "contratos.corretor_id = corretores.id", array( 'corretor' => 'corretores.nome' )) ->joinLeft(array( 'bancos' => 'tb_bancos' ), "bancos.id = contratos.banco_id", array( 'banco' => 'bancos.nome' )) ->joinLeft(array( 'convenios' => 'tb_convenios' ), "convenios.id = contratos.convenio_id", array( 'convenio' => 'convenios.nome' )) ->joinLeft(array( 'tabelas' => 'tb_tabelas' ), "tabelas.id = contratos.tabela_id", array( 'tabela' => 'tabelas.nome' )) ->joinLeft(array( 'status_propostas' => 'tb_tipos' ), 'contratos.status_proposta = status_propostas.id', array( 'status_proposta_descricao' => 'status_propostas.descricao' )) ->joinLeft(array( 'usuario_recebimento' => 'tb_usuarios' ), 'contratos.usuario_recebimento = usuario_recebimento.id', array( 'usuario' => 'usuario_recebimento.login' )) ->where("contratos.excluido<>1") ->where("contratos.protocolo_recebimento_fisico = '{$fields['protocolo_recebimento_fisico']}'") ->where("contratos.tipo_registro = 1") ->where("clientes.excluido<>1"); return $dbtable->getAdapter()->fetchAll($select); } public function selectContratos($contratosId) { $dbtable = new Model_DbTable_Contrato(); $select = $dbtable->getAdapter()->select()->from(array( 'contratos' => 'tb_contratos' ), array( '*', 'contrato_id' => 'id' )) ->joinInner(array( "clientes" => "tb_clientes" ), "contratos.cliente_id = clientes.id", array( 'cpf_cliente' => 'clientes.cpf', 'cliente' => 'clientes.nome' )) ->joinInner(array( "corretores" => "tb_corretores" ), "contratos.corretor_id = corretores.id", array( 'corretor' => 'corretores.nome')) ->joinLeft(array( 'bancos' => 'tb_bancos' ), "bancos.id = contratos.banco_id", array( 'banco' => 'bancos.nome' )) ->joinLeft(array( 'convenios' => 'tb_convenios' ), "convenios.id = contratos.convenio_id", array( 'convenio' => 'convenios.nome' )) ->where("contratos.id IN ('" . implode("','", $contratosId) . "')") ->where('contratos.excluido = 0') ->order('corretor ASC'); return $dbtable->getAdapter()->fetchAll($select); } public function getProducaoSinteticoAgrupado(array $fields, $order = null, $page = null, $limit = null, $group = null, $clausula = null, $range = null) { $dbtable = new Model_DbTable_Contrato(); $select = $this->_getSelectProducaoAnalitico($dbtable, [ 'contratos.numero_contrato', 'contratos.tipo', 'contratos.prazo', 'contratos.valor_bruto', 'contratos.valor_liquido', 'contratos.comissao_empresa', 'contratos.bonus_empresa', 'contratos.adiantamento_comissao_empresa', 'contratos.comissao_corretor', 'contratos.bonus_corretor', 'contratos.corretor_id', 'rota' => 'rotas.nome', 'corretores.rota_id', 'empresa' => 'empresas.nome', 'rotas.gerente_id', 'total_contratos' => 'COUNT(contratos.id)', 'total_tabelas' => 'COUNT(contratos.tabela_id)', 'total_liquido' => 'SUM(contratos.valor_liquido)', 'total_bruto' => 'SUM(contratos.valor_bruto)', 'total_comissao' => 'SUM(contratos.valor_fixo_corretor+contratos.base_comissao_valor*contratos.comissao_corretor/100)', 'total_comissao_empresa' => 'SUM(contratos.base_comissao_empresa_valor*contratos.comissao_empresa/100)', 'total_base_comissao' => 'SUM(contratos.base_comissao_valor)', 'total_base_comissao_empresa' => 'SUM(contratos.base_comissao_empresa_valor)' ]); $select->joinLeft(array( 'empresas' => 'tb_empresas' ), 'empresas.id = contratos.empresa_id', array()) ->joinLeft(array( 'rotas' => 'tb_rotas' ), 'corretores.rota_id = rotas.id', array()) ->joinLeft(array( 'supervisores' => 'tb_gerente_rota' ), 'supervisores.id = rotas.gerente_id', array('supervisor' => 'nome')) ->group(array( $group )); $this->_prepareFilterSelect($fields, $select); if( $order != null ){ $select->order($order); } if( $clausula ){ $select->where($clausula); } if( $page ){ $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($page); if( $limit && is_numeric($limit) ){ $paginator->setItemCountPerPage($limit); } if( $range && is_numeric($range) ){ $paginator->setPageRange($range); } return $paginator; } return $dbtable->getAdapter()->fetchAll($select); } public function getProducaoSinteticoAgrupadoTotalizador(array $fields, $where = null) { $dbtable = new Model_DbTable_Contrato(); $select = $this->_getSelectProducaoAnalitico($dbtable, array( 'total_contratos' => 'count(distinct contratos.id)', 'total_liquido' => 'SUM(valor_liquido)', 'total_bruto' => 'SUM(valor_bruto)', 'total_comissao_corretor' => 'SUM(IF(comissao_corretor IS NULL, 0, (contratos.valor_fixo_corretor+base_comissao_valor*comissao_corretor/100)))', 'total_comissao_empresa' => 'SUM(IF(comissao_empresa IS NULL, 0, (contratos.base_comissao_empresa_valor*contratos.comissao_empresa/100)))', 'total_base_comissao' => 'SUM(contratos.base_comissao_valor)', 'total_base_comissao_empresa' => 'SUM(contratos.base_comissao_empresa_valor)' )); $select->joinLeft(array( 'empresas' => 'tb_empresas' ), 'empresas.id = contratos.empresa_id', array()) ->joinLeft(array( 'rotas' => 'tb_rotas' ), 'corretores.rota_id = rotas.id', array()); if( $where ){ $select->where($where); } $this->_prepareFilterSelect($fields, $select); return $dbtable->getAdapter()->fetchRow($select); } public function atualizarComissaoContrato($contratos = [], $fields = [], &$resultErros = [], &$resultSuccess = [] ){ $data = []; $contErrors = $cont = $contNotAtt = 0; $dbtable = new Model_DbTable_Contrato(); $condicao = $fields['condicao_recalculo_comissao']; foreach ($contratos as $registro){ $dadosAtualizacao = []; if(!empty($fields['forcar_base'])){ $registro['forcar_base_comissao'] = true; } switch ($condicao) { case 'CDC': case 'CZC': case 'CDGC': $dbtable->getComissaoCorretorAndEmpresa($registro, 1); $dadosAtualizacao = [ 'comissao_corretor' => $registro['comissao_corretor'], 'bonus_corretor' => $registro['bonus_corretor'], 'diferimento_corretor' => $registro['diferimento_corretor'] ]; $this->_forcarAtualizacaoCamposBase($registro, $dadosAtualizacao); break; case 'CDE': case 'CZE': $dbtable->getComissaoCorretorAndEmpresa($registro, 2); $comissao = $registro['comissao'] ?? $registro['comissao_empresa']; $dadosAtualizacao = ['comissao_empresa' => $comissao]; $this->_forcarAtualizacaoCamposBase($registro, $dadosAtualizacao); break; case 'FABC': $registro['forcar_base_comissao'] = true; $dbtable->getComissaoCorretorAndEmpresa($registro); $this->_forcarAtualizacaoCamposBase($registro, $dadosAtualizacao); break; case 'FACG': $registro['forcar_base_comissao'] = true; $dbtable->getComissaoCorretorAndEmpresa($registro); if (isset($registro['comissao_corretor'])){ $dadosAtualizacao['comissao_corretor'] = $registro['comissao_corretor']; } if (isset($registro['bonus_corretor'])){ $dadosAtualizacao['bonus_corretor'] = $registro['bonus_corretor']; } if (isset($registro['diferimento_corretor'])){ $dadosAtualizacao['diferimento_corretor'] = $registro['diferimento_corretor']; } if (isset($registro['valor_fixo_corretor'])){ $dadosAtualizacao['valor_fixo_corretor'] = $registro['valor_fixo_corretor']; } if (isset($registro['bonus_empresa'])){ $dadosAtualizacao['bonus_empresa'] = $registro['bonus_empresa']; } if (isset($registro['adiantamento_comissao_empresa'])){ $dadosAtualizacao['adiantamento_comissao_empresa'] = $registro['adiantamento_comissao_empresa']; } if (isset($registro['comissao_empresa'])){ $dadosAtualizacao['comissao_empresa'] = $registro['comissao_empresa']; } if (isset($registro['valor_fixo_empresa'])){ $dadosAtualizacao['valor_fixo_empresa'] = $registro['valor_fixo_empresa']; } break; case 'FAGC': $registro['grupo_comissao'] = $fields['grupo']; $dbtable->getComissaoCorretorAndEmpresa($registro); if (isset($registro['comissao_corretor'])){ $dadosAtualizacao['comissao_corretor'] = $registro['comissao_corretor']; } break; } if ($this->_checkRecalculationErrors($resultErros, $registro, $data, $condicao) ){ $contErrors++; continue; } //se o contrato estiver pago, só deixa alterar a comissão da empresa if ($dbtable->isPaid($registro['id'])) { $dadosAtualizacao = $dbtable->getCamposAtualizarContratoPago($dadosAtualizacao); } if (empty($dadosAtualizacao)) { $msgNoAtt = "Nenhuma informação para ser atualizada."; $this->_recalculoComissaoErrors($resultErros, $registro, $msgNoAtt); continue; } $result = $dbtable->update($dadosAtualizacao, "id = {$registro['id']}"); if ($result) { $msgAtt = "Atualizado com sucesso"; $this->_recalculoComissaoSuccess($resultSuccess, $registro, $msgAtt); $cont++; } else { $contNotAtt++; } } return [ 'cont_success' => $cont, 'cont_errors' => $contErrors, 'cont_not_att' => $contNotAtt ]; } private function _forcarAtualizacaoCamposBase(&$registro, &$dadosAtualizacao) { if( isset($registro['base_comissao_empresa_valor']) ){ $dadosAtualizacao['base_comissao_empresa_valor'] = $registro['base_comissao_empresa_valor']; } if( isset($registro['base_comissao_empresa_adiantamento']) ){ $dadosAtualizacao['base_comissao_empresa_adiantamento'] = $registro['base_comissao_empresa_adiantamento']; } if( isset($registro['base_comissao_empresa_bonus']) ){ $dadosAtualizacao['base_comissao_empresa_bonus'] = $registro['base_comissao_empresa_bonus']; } if( isset($registro['base_comissao_adiantamento']) ){ $dadosAtualizacao['base_comissao_adiantamento'] = $registro['base_comissao_adiantamento']; } if( isset($registro['base_comissao_diferimento']) ){ $dadosAtualizacao['base_comissao_diferimento'] = $registro['base_comissao_diferimento']; } if( isset($registro['base_comissao_bonus']) ){ $dadosAtualizacao['base_comissao_bonus'] = $registro['base_comissao_bonus']; } $dadosAtualizacao['base_comissao_valor'] = $registro['base_comissao_valor']; } public function getContratosRecalculoComissao(array $fields) { $dbtable = new Model_DbTable_Contrato(); $columns = array( 'contratos.id', 'contratos.numero_contrato', 'contratos.comissao_empresa', 'contratos.banco_id', 'contratos.bonus_corretor', 'contratos.diferimento_corretor', 'contratos.comissao_corretor', 'contratos.data_emissao', 'contratos.data_liberacao', 'contratos.produto', 'contratos.empresa_id', 'contratos.cliente_id', 'contratos.corretor_id', 'contratos.tabela_id', 'contratos.convenio_id', 'contratos.prazo', 'contratos.valor_liquido', 'contratos.produto', 'contratos.tipo', 'contratos.base_comissao_valor', 'contratos.base_comissao_empresa_valor', 'contratos.valor_bruto', 'contratos.valor_fixo_empresa', 'contratos.valor_fixo_corretor', 'contratos.taxa_contrato', 'contratos.idade_cliente', 'contratos.especie', 'contratos.subestabelecido_id' ); $select = $dbtable->getAdapter()->select()->from(array( 'contratos' => 'tb_contratos' ), array()) ->columns($columns) ->joinInner(array( "clientes" => "tb_clientes" ), "contratos.cliente_id = clientes.id", array()) ->joinLeft(array( "corretores" => "tb_corretores" ), "contratos.corretor_id = corretores.id", array()) ->where("contratos.excluido<>1 AND contratos.tipo_registro = 1 AND clientes.excluido <> 1") ->where("contratos.srcc <> 1 OR contratos.srcc IS NULL") ->group(array( 'contratos.id' )); $this->_prepareFilterSelect($fields, $select); switch ( $fields['condicao_recalculo_comissao'] ) { case "CDE"://CDE - Comissão Diferente da pré-cadastrada (Empresa) $selectComissaoPrevistaEmpresa = $dbtable->getAdapter()->select()->from(array( 'c' => 'tb_comissionamento' ), array( 'banco_id', 'empresa_id', 'tabela_id', 'convenio_id', 'produto', 'prazo', 'prazo_de', 'prazo_a', 'id', 'tipo_produto' )) ->joinInner(array( 'p' => 'tb_comissionamento_percentual' ), 'c.id = p.comissionamento_id', array( 'comissao', 'bonus', 'diferimento', 'adiantamento', 'data_inicial', 'data_final' )) ->where('c.excluido<>1') ->where('p.excluido<>1'); $select->joinLeft(array( 'comissoes' => $selectComissaoPrevistaEmpresa ), "comissoes.tipo_produto = contratos.tipo AND comissoes.convenio_id = contratos.convenio_id AND comissoes.tabela_id = contratos.tabela_id AND " . "comissoes.prazo_de <= contratos.prazo AND comissoes.prazo_a >= contratos.prazo AND " . "((contratos.data_emissao >= comissoes.data_inicial AND comissoes.data_final IS NULL) OR (contratos.data_emissao >= comissoes.data_inicial AND contratos.data_emissao <= comissoes.data_final))", array( 'comissao', 'comissao_id' => 'comissoes.id' )) ->where("(contratos.comissao_empresa <> comissoes.comissao) AND (contratos.comissao_empresa IS NOT NULL AND comissoes.comissao IS NOT NULL)"); break; case "CDC"://CDC - Comissão Diferente da pré-cadastrada (Corretor) $selectComissaoPrevistaCorretor = $dbtable->getAdapter()->select()->from(array( 'c' => 'tb_comissionamento_corretor' ), array( 'banco_id', 'corretor_id', 'tabela_id', 'convenio_id', 'produto', 'prazo_de', 'prazo_a', 'tipo_produto' )) ->joinInner(array( 'p' => 'tb_comissionamento_corretor_percentual' ), 'c.id = p.comissionamento_id', array( 'comissao', 'bonus', 'diferimento', 'data_inicial', 'data_final', 'p.comissionamento_id' )) ->where('c.excluido<>1') ->where('p.excluido<>1'); $select->joinInner(array( 'comissoes' => $selectComissaoPrevistaCorretor ), "comissoes.banco_id = contratos.banco_id AND comissoes.tipo_produto = contratos.tipo AND comissoes.corretor_id = contratos.corretor_id AND comissoes.convenio_id = contratos.convenio_id AND comissoes.tabela_id = contratos.tabela_id AND " . "comissoes.prazo_de <= contratos.prazo AND comissoes.prazo_a >= contratos.prazo AND " . "((contratos.data_emissao >= comissoes.data_inicial AND " . "contratos.data_emissao <= comissoes.data_final AND comissoes.data_final IS NOT NULL) " . "OR (contratos.data_emissao >= comissoes.data_inicial AND comissoes.data_final IS NULL))", array( 'comissao', 'comissionamento_id' )) ->where("(contratos.comissao_corretor <> comissoes.comissao) AND (contratos.comissao_corretor IS NOT NULL AND comissoes.comissao IS NOT NULL)"); break; case "CDGC"://CDGC - Comissão Diferente da pré-cadastrada (Grupo Corretor) $selectComissaoPrevistaCorretor = $dbtable->getAdapter()->select()->from(array( 'c' => 'tb_comissionamento_grupo' ), array( 'banco_id', 'grupo_id', 'tabela_id', 'convenio_id', 'produto', 'prazo_de', 'prazo_a', 'tipo_produto' )) ->joinInner(array( 'p' => 'tb_comissionamento_grupo_percentual' ), 'c.id = p.comissionamento_id', array( 'comissao', 'bonus', 'diferimento', 'data_inicial', 'data_final', 'p.comissionamento_id' )) ->where('c.excluido<>1') ->where('p.excluido<>1'); $select->joinInner(array( 'comissoes' => $selectComissaoPrevistaCorretor ), "comissoes.banco_id = contratos.banco_id AND comissoes.tipo_produto = contratos.tipo AND comissoes.grupo_id = corretores.grupo_comissao AND comissoes.convenio_id = contratos.convenio_id AND comissoes.tabela_id = contratos.tabela_id AND " . "comissoes.prazo_de <= contratos.prazo AND comissoes.prazo_a >= contratos.prazo AND " . "((contratos.data_emissao >= comissoes.data_inicial AND (comissoes.data_final IS NULL OR comissoes.data_final = '0000-00-00')))", array( 'comissao', 'comissionamento_id' )) ->where("(contratos.comissao_corretor <> comissoes.comissao) AND (contratos.comissao_corretor IS NOT NULL AND comissoes.comissao IS NOT NULL)") ->where("corretores.grupo_comissao IS NOT NULL AND (corretores.corretor_desativado = 0 OR corretores.corretor_desativado IS NULL)"); break; } return $dbtable->getAdapter()->fetchAll($select); } public function _checkRecalculationErrors(&$resultErros, array $registro, array $data, $condicao = null) { $msg = null; if( ($condicao == 'CZC' || $condicao == 'CDC') && !$registro['corretor_id'] ){ $msg = "Corretor não encontrado"; } if( !$registro['tipo'] ){ $msg = $msg ? "{$msg} | Tipo de Produto não encontrado" : "Tipo de Produto não encontrado"; } if( isset($registro['comissao_corretor']) && $registro['comissao_corretor'] <= "0,00" && isset($registro['valor_fixo_corretor']) && $registro['valor_fixo_corretor'] <= "0,00"){ $msg = $msg ? "{$msg} | Comissão corretor não encontrada" : "Comissão corretor não encontrada"; } if( isset($registro['comissao_empresa']) && $registro['comissao_empresa'] <= "0,00" && isset($registro['valor_fixo_empresa']) && $registro['valor_fixo_empresa'] <= "0,00"){ $msg = $msg ? "{$msg} | Comissão empresa não encontrada" : "Comissão empresa não encontrada"; } if( $msg ){ return $this->_recalculoComissaoErrors($resultErros, $registro, $msg); } return false; } public function _recalculoComissaoErrors(array &$resultErrors, $registro, $msg = null) { array_push($resultErrors, array( 'id' => $registro['id'], 'numero_contrato' => $registro['numero_contrato'], 'cliente_id' => $registro['cliente_id'], 'motivo' => $msg )); return true; } public function _recalculoComissaoSuccess(array &$resultSuccess, $registro, $msg = null) { array_push($resultSuccess, array( 'id' => $registro['id'], 'numero_contrato' => $registro['numero_contrato'], 'cliente_id' => $registro['cliente_id'], 'motivo' => $msg )); return true; } public function aplicarBonificacao($params) { $date = new Zend_Date(); $dataInicial = $date->setDate($params['data_inicial'])->toString('yyy-MM-dd'); $dataFinal = $date->setDate($params['data_final'])->toString('yyy-MM-dd'); $bonus = STR_REPLACE(',', '.', $params['bonificacao']); $where = "corretor_id in (" . $params['corretores'][0] . ")"; $where .= " AND data_emissao >= '" . $dataInicial . "'"; $where .= " AND data_emissao <= '" . $dataFinal . "'"; if( isset($params['tipo_contrato']) && $params['tipo_contrato'] ){ if( is_array($params['tipo_contrato']) ){ $params['tipo_contrato'] = array_filter($params['tipo_contrato']); $where .= "AND tipo IN ('" . implode("','", $params['tipo_contrato']) . "')"; } else { $where .= ("contratos.tipo = '" . $params['tipo_contrato'] . "'"); } } $dbtable = new Model_DbTable_Contrato(); $contratos = current($dbtable->fetchAll($where)); foreach ( $contratos as $contrato ) { $contrato['bonus_corretor'] = number_format($contrato['bonus_corretor'] + $bonus, 2, ',', '.'); $dbtable->update(array( 'bonus_corretor' => $contrato['bonus_corretor'] ), 'id = ' . $contrato['id']); } } public function getDesempenhoComercial(array $fields) { $dbtable = new Model_DbTable_Contrato(); $statusIn = Model_Contrato::findByNameStatus(array('Operação Finalizada', 'Pagamento Enviado', 'REALIZADA', 'REALIZADO')); $where = "contratos.tipo_registro = 1 AND contratos.excluido <> 1 AND clientes.excluido <> 1"; $columns = array( 'base_comissao_empresa_total' => 'SUM(base_comissao_empresa_valor)', ); $selectLiberadosSupervisor = $dbtable->getAdapter()->select()->from(array('contratos' => "tb_contratos"), array("liberado_atual_supervisor" => "SUM(base_comissao_empresa_valor)")) ->joinInner(array( "corretores" => "tb_corretores" ), "contratos.corretor_id = corretores.id", array()) ->joinInner(array( 'rota' => 'tb_rotas' ), 'corretores.rota_id = rota.id', array('gerente_id')) ->where("contratos.excluido<>1 AND status_proposta IN(" . implode(',', $statusIn) . ")") ->group(array( 'gerente_id' )); $this->_prepareFilterSelect($fields, $selectLiberadosSupervisor); $selectLiberadosGerente = $dbtable->getAdapter()->select()->from(array('contratos' => "tb_contratos"), array("liberado_atual_gerente" => "SUM(base_comissao_empresa_valor)")) ->joinInner(array( "corretores" => "tb_corretores" ), "contratos.corretor_id = corretores.id", array()) ->joinInner(array( 'rota' => 'tb_rotas' ), 'corretores.rota_id = rota.id', array()) ->joinInner(array( 'gerentes_rotas' => 'tb_gerente_rota' ), 'rota.gerente_id = gerentes_rotas.id', array('gerente_id')) ->where("contratos.excluido<>1 AND status_proposta IN(" . implode(',', $statusIn) . ")") ->group(array( 'gerentes_rotas.gerente_id' )); $this->_prepareFilterSelect($fields, $selectLiberadosGerente); $select = $dbtable->getAdapter()->select()->from(array( 'contratos' => 'tb_contratos' ), array()) ->columns($columns) ->joinInner(array( "clientes" => "tb_clientes" ), "contratos.cliente_id = clientes.id", array()) ->joinInner(array( "corretores" => "tb_corretores" ), "contratos.corretor_id = corretores.id", array()) ->joinLeft(array( 'rota' => 'tb_rotas' ), 'corretores.rota_id = rota.id', array()) ->joinLeft(array( 'gerentes_rotas' => 'tb_gerente_rota' ), 'rota.gerente_id = gerentes_rotas.id', array( 'supervisor' => 'gerentes_rotas.nome', 'supervisor_id' => 'gerentes_rotas.id' )) ->joinLeft(array( 'gerentes' => 'tb_gerentes' ), 'gerentes_rotas.gerente_id = gerentes.id', array( 'gerente' => 'gerentes.nome', 'gerente_id' => 'gerentes.id' )) ->joinLeft(array( 'liberados_supervisor' => $selectLiberadosSupervisor ), 'gerentes_rotas.id = liberados_supervisor.gerente_id', array('liberado_atual_supervisor')) ->joinLeft(array( 'liberados_gerente' => $selectLiberadosGerente), 'gerentes.id = liberados_gerente.gerente_id', array( 'liberado_atual_gerente')) ->where($where) ->where('rota.excluido = 0') ->group(array( 'gerentes.id', 'gerentes_rotas.id' )); $this->_prepareFilterSelect($fields, $select); return $dbtable->getAdapter()->fetchAll($select); } public function getDesempenhoComercialCorretor(array $fields) { $dbtable = new Model_DbTable_Contrato(); $where = "contratos.tipo_registro = 1 AND contratos.excluido <> 1 AND clientes.excluido <> 1"; $columns = array( 'total_liquido' => 'SUM(base_comissao_valor)', ); $select = $dbtable->getAdapter()->select()->from(array( 'contratos' => 'tb_contratos' ), array()) ->columns($columns) ->joinInner(array( "clientes" => "tb_clientes" ), "contratos.cliente_id = clientes.id", array()) ->joinInner(array( "corretores" => "tb_corretores" ), "contratos.corretor_id = corretores.id", array( 'corretor_id' => 'corretores.id')) ->where($where) ->group(array( 'corretores.id')); $this->_prepareFilterSelect($fields, $select); return $dbtable->getAdapter()->fetchAll($select); } public function getProducaoProduto($params) { $dbtable = new Model_DbTable_Contrato(); $select = $dbtable->getAdapter() ->select()->from(['contratos' => 'tb_contratos'], ['tipo', 'total_producao' => 'SUM(base_comissao_valor)']) ->group('tipo') ->order('base_comissao_valor DESC'); if (!empty($params['corretor_id'])) { $select->where('corretor_id = ?', $params['corretor_id']); } if (!empty($params['data_liberacao_de']) && !empty($params['data_liberacao_a']) ){ $select->where("data_liberacao >= STR_TO_DATE('" . $params['data_liberacao_de'] . "', '%d/%m/%Y')"); $select->where("data_liberacao <= STR_TO_DATE('" . $params['data_liberacao_a'] . "', '%d/%m/%Y')"); } $select->where("status_proposta = ?", 43); return $dbtable->getAdapter()->fetchAll($select); } public function getProducaoCorretorMensal($params) { $dbtable = new Model_DbTable_Contrato(); $dataInicio = date('Y-m-01', strtotime("-12 month")); $dataFim = date("Y-m-t"); $select = $dbtable->getAdapter()->select()->from(array( 'contratos' => 'tb_contratos' ), array( 'data_emissao' => "DATE_FORMAT(data_emissao,'%m-%Y')", 'total_producao' => 'SUM(base_comissao_valor)', 'qtd_contratos' => 'COUNT(data_emissao)', 'pendencia' => "SUM(IF(pendente,1,0))")) ->joinInner(array( "clientes" => "tb_clientes" ), "contratos.cliente_id = clientes.id", array()) ->joinInner(array( "corretores" => "tb_corretores" ), "contratos.corretor_id = corretores.id", array()) ->where("data_emissao >='" . $dataInicio . "'") ->where("data_emissao <= '" . $dataFim . "'") ->where("status_proposta = ? ", 43) ->where("contratos.excluido<>1") ->where("clientes.excluido<>1") ->where("contratos.tipo_registro = 1") ->group("DATE_FORMAT(data_emissao,'%m-%Y')") ->order('data_emissao'); if (!empty($params['corretor_id'])) { $select->where('corretor_id = ?', $params['corretor_id']); } return $dbtable->getAdapter()->fetchAll($select); } public function getProducaoCorretorMensalConvenios($params) { $dbtable = new Model_DbTable_Contrato(); $dataInicio = date('Y-m-01', strtotime("-12 month")); $dataFim = date("Y-m-t"); $select = $dbtable->getAdapter() ->select()->from(array( 'contratos' => 'tb_contratos' ), array( 'qtd_contratos' => 'COUNT(data_emissao)')) ->joinInner(array( "clientes" => "tb_clientes" ), "contratos.cliente_id = clientes.id", array()) ->joinInner(array( "corretores" => "tb_corretores" ), "contratos.corretor_id = corretores.id", array()) ->joinInner(array( "convenios" => "tb_convenios" ), "contratos.convenio_id = convenios.id", array('nome_convenio' => 'nome')) ->where("data_emissao >='" . $dataInicio . "'") ->where("data_emissao <= '" . $dataFim . "'") ->where("status_proposta = ?", 43) ->where("contratos.excluido<>1") ->where("clientes.excluido<>1") ->where("contratos.tipo_registro = 1") ->group("nome_convenio") ->order('nome_convenio'); if (!empty($params['corretor_id'])) { $select->where('corretor_id = ?', $params['corretor_id']); } return $dbtable->getAdapter()->fetchAll($select); } public function getProducaoCorretorDiaria($params) { $dbtable = new Model_DbTable_Contrato(); $tiposDbtable = new Model_DbTable_Tipos(); $operacao = $tiposDbtable->fetchRow(utf8_encode("descricao = 'Operacao Finalizada'"))->toArray(); $select = $dbtable->getAdapter()->select()->from(array( 'contratos' => 'tb_contratos' ), array( 'valor_liquido' => 'SUM(valor_liquido)', 'data_liberacao' )) ->joinInner(array( "clientes" => "tb_clientes" ), "contratos.cliente_id = clientes.id", array()) ->joinInner(array( "corretores" => "tb_corretores" ), "contratos.corretor_id = corretores.id", array()) ->where("contratos.excluido<>1") ->where("status_proposta = ?", $operacao['id']) ->where("clientes.excluido<>1") ->where("contratos.tipo_registro = 1") ->group('data_liberacao') ->order('data_liberacao'); if( isset($params['corretor_id']) && $params['corretor_id'] ){ $select->where('corretor_id = ?', $params['corretor_id']); } if( isset($params['data_liberacao_de']) && !empty($params['data_liberacao_de']) && isset($params['data_liberacao_a']) && !empty($params['data_liberacao_a']) ){ $select->where("(data_liberacao >= STR_TO_DATE('" . $params['data_liberacao_de'] . "', '%d/%m/%Y')" . " AND data_liberacao <= STR_TO_DATE('" . $params['data_liberacao_a'] . "', '%d/%m/%Y'))"); } return $dbtable->getAdapter()->fetchAll($select); } public function getAtendimentoCorretor(array $fields, $order = '', $page = null, $limit = null, $range = null) { $dbtable = new Model_DbTable_Contrato(); // ultimo atendimento $sqlAtendimento = $dbtable->getAdapter()->select() ->from(array( 'atendimentos' => 'tb_atendimento_corretor' )) ->where('atendimentos.excluido <> 1') ->where('status_resolucao_id IS NOT NULL') ->order('atendimentos.id DESC'); $select = $dbtable->getAdapter()->select()->from(array( 'corretores' => 'tb_corretores' ), array( 'id', 'corretor' => 'corretores.nome' )) ->joinLeft(array( "atendimento_corretor" => $sqlAtendimento ), "corretores.id = atendimento_corretor.corretor_id", array( 'usuario_atendimento', 'data_ligacao', 'sinalizar_supervisor', 'data_proximo_contato', 'hora_proximo_contato' )) ->joinLeft(array( 'status_resolucoes' => 'tb_tipos' ), 'atendimento_corretor.status_resolucao_id = status_resolucoes.id', array( 'status' => 'status_resolucoes.descricao' )) ->joinLeft(array( 'rede_atendimento' => 'tb_usuarios_rede_atendimento' ), 'rede_atendimento.corretor_id = atendimento_corretor.corretor_id', array("assistente_id" => "usuario_id")) ->joinLeft(array( "usuarios" => "tb_usuarios" ), "usuarios.id = atendimento_corretor.usuario_atendimento", array( 'usuario' => 'usuarios.nome' )) ->where("corretores.excluido<>1 AND (corretores.corretor_desativado IS NULL OR corretores.corretor_desativado = 0)"); if( !empty($fields['gerente_id']) ){ $select->joinLeft(array( 'rotas' => 'tb_rotas' ), 'corretores.rota_id = rotas.id', array()); $select->where("rotas.gerente_id = {$fields['gerente_id']}"); } if( !empty($fields['rota_id']) ){ $select->where("corretores.rota_id = {$fields['rota_id']}"); } Core_Filters::_prepareFilterAtendimentoCorretor($fields, $select); $select->group("corretores.id"); if( $order != null ){ $select->order($order); } else { $select->order(array( 'corretores.nome' )); } if( $page ){ $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($page); if( $limit && is_numeric($limit) ){ $paginator->setItemCountPerPage($limit); } if( $range && is_numeric($range) ){ $paginator->setPageRange($range); } return $paginator; } return $dbtable->getAdapter()->fetchAll($select); } public function getAtendimentoCorretorAgendados(array $fields) { $dbtable = new Model_DbTable_Contrato(); // atendimentos agendados $select = $dbtable->getAdapter()->select()->from(array( 'atendimento_corretor' => 'tb_atendimento_corretor' ), array( "total" => "COUNT(*)" )) ->joinInner(array( "corretores" => "tb_corretores" ), "corretores.id = atendimento_corretor.corretor_id", array()) ->where("corretores.excluido<>1 AND (corretores.corretor_desativado IS NULL OR corretores.corretor_desativado = 0)") ->where("data_proximo_contato IS NOT NULL AND data_proximo_contato != '0000-00-00'") ->where("atendimento_corretor.status_resolucao_id IS NULL") ->where("atendimento_corretor.excluido <> 1"); $this->_prepareFilterSelect($fields, $select); Core_Filters::_prepareFilterAtendimentoCorretor($fields, $select); return $dbtable->getAdapter()->fetchAll($select); } public function getRecebimentoBanrisul(array $fields, $page = null, $limit = null, $order = array( 'data_recebimento_comissao' ), $range = null) { $dbtable = new Model_DbTable_Contrato(); $columns = array( 'contratos.numero_contrato', 'contratos.data_emissao', 'contratos.data_liberacao', 'contratos.valor_liquido', 'comissao_prevista' => 'contratos.comissao_empresa', 'contratos.corretor_id', 'contratos.valor_fixo_empresa', 'recebimento_contrato' => 'recebimento_contratos.data_recebimento_comissao', 'recebimento_contratos.parcelas', 'recebimento_contratos.data_saldo', 'recebimento_contratos.data_recebimento_comissao', 'recebimento_contratos.valor_lancamento', 'comissao_recebida' => 'recebimento_contratos.comissao_empresa', 'produto' => 'produtos.tipo', 'contratos.base_comissao_empresa_valor', 'tipo_remuneracao' => 'tipos_remuneracao.descricao', 'natureza' => 'naturezas.descricao' ); $select = $this->_getSelectProducaoAnalitico($dbtable, $columns); $select->joinLeft(array( 'recebimento_contratos' => "tb_recebimento_contratos" ), "recebimento_contratos.contrato_id = contratos.id AND recebimento_contratos.excluido <> 1", array()) ->joinLeft(array( 'produtos' => 'tb_produtos' ), 'produtos.id = contratos.produto', array()) ->joinLeft(array( 'tipos_remuneracao' => 'tb_tipos' ), "tipos_remuneracao.codigo = recebimento_contratos.tipo_remuneracao AND tipos_remuneracao.tipo = 'TIPO_REMUNERACAO'", array()) ->joinLeft(array( 'naturezas' => 'tb_tipos' ), "naturezas.id = recebimento_contratos.natureza AND naturezas.tipo = 'NATUREZA_COMISSAO'", array()) ->group(array( 'recebimento_contratos.id', 'contratos.id' )); $this->_prepareFilterSelect($fields, $select); if( $order != null ){ $select->order($order); } else { $select->order(array( 'corretores.nome', 'contratos.data_liberacao' )); } if( $page ){ $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($page); if( $limit && is_numeric($limit) ){ $paginator->setItemCountPerPage($limit); } if( $range && is_numeric($range) ){ $paginator->setPageRange($range); } return $paginator; } return $dbtable->getAdapter()->fetchAll($select); } public function getRecebimentoBanrisulTotalizador(array $fields) { $dbtable = new Model_DbTable_Contrato(); $columns = array( 'total_valor_liquido' => 'SUM(valor_liquido)', 'comissao_recebida' => 'recebimento_contratos.comissao_empresa', 'total_comissao_recebida' => 'SUM(IF(recebimento_contratos.comissao_empresa IS NULL, 0, (contratos.valor_fixo_empresa+recebimento_contratos.comissao_empresa*base_comissao_empresa_valor/100)))', 'total_comissao_prevista' => 'SUM(IF(contratos.comissao_empresa IS NULL, 0, (contratos.valor_fixo_empresa+contratos.comissao_empresa*base_comissao_empresa_valor/100)))' ); $selectComissaoPrevista = $dbtable->getAdapter()->select()->from(array( 'c' => 'tb_comissionamento' ), array( 'banco_id', 'empresa_id', 'tabela_id', 'convenio_id', 'produto', 'prazo' )) ->joinInner(array( 'p' => 'tb_comissionamento_percentual' ), 'c.id = p.comissionamento_id', array( 'comissao', 'bonus', 'diferimento', 'adiantamento', 'data_inicial', 'data_final' )) ->where('c.excluido<>1') ->where('p.excluido<>1'); $select = $this->_getSelectProducaoAnalitico($dbtable, $columns); $selectRecebimento = $dbtable->getAdapter()->select()->from(array( 'recebimento_contratos' => "tb_recebimento_contratos" ), array( 'recebimento_contratos.*' )) ->joinLeft(array( 'naturezas' => 'tb_tipos' ), "naturezas.id = recebimento_contratos.natureza AND naturezas.tipo = 'NATUREZA_BMG'", array( 'natureza_descricao' => 'descricao' )) ->joinLeft(array( 'tipos_remuneracao' => 'tb_tipos' ), "tipos_remuneracao.id = recebimento_contratos.tipo_remuneracao AND tipos_remuneracao.tipo = 'TIPO_REMUNERACAO_BMG'", array( 'tipo_remuneracao_descricao' => 'descricao' )) ->where('recebimento_contratos.excluido <> 1'); $select->joinLeft(array( 'recebimento_contratos' => $selectRecebimento ), "recebimento_contratos.contrato_id = contratos.id AND recebimento_contratos.excluido <> 1", array()) ->joinLeft(array( 'empresas' => 'tb_empresas' ), 'empresas.id = contratos.empresa_id', array()) ->joinLeft(array( 'comissoes' => $selectComissaoPrevista ), "comissoes.convenio_id = contratos.convenio_id AND comissoes.tabela_id = contratos.tabela_id AND " . "contratos.produto = comissoes.produto AND contratos.prazo = comissoes.prazo AND " . "contratos.data_emissao >= comissoes.data_inicial AND (contratos.data_emissao <= comissoes.data_final OR comissoes.data_final IS NULL)", array( 'comissao_prevista' => 'comissao', 'bonus_previsto' => 'bonus', 'diferimento_previsto' => 'diferimento', 'adiantamento_previsto' => 'adiantamento' )) ->group(array( 'recebimento_contratos.id', 'contratos.id' )); $this->_prepareFilterSelect($fields, $select); return $dbtable->getAdapter()->fetchRow($select); } public function getSelectRecebimentoGenerico(array $fields, $columns, $order = array( 'corretores.nome', 'contratos.data_liberacao' )){ $dbtable = new Model_DbTable_Contrato(); $selectRecebimento = $dbtable->getAdapter()->select()->from(array( 'recebimento_contratos' => "tb_recebimento_contratos" ), array( 'recebimento_contratos.*' )) ->joinInner(array( 'contratos' => 'tb_contratos' ), "contratos.id = recebimento_contratos.contrato_id", array( 'numero_contrato', 'banco_id' )) ->joinInner(array( 'corretores' => 'tb_corretores' ), "contratos.corretor_id = corretores.id", []) ->joinLeft(array( 'naturezas' => 'tb_tipos' ), "naturezas.codigo = recebimento_contratos.natureza AND naturezas.tipo = 'NATUREZA_COMISSAO'", array( 'natureza_descricao' => 'descricao' )) ->joinLeft(array( 'tipos_remuneracao' => 'tb_tipos' ), "tipos_remuneracao.codigo = recebimento_contratos.tipo_remuneracao AND tipos_remuneracao.tipo = 'TIPO_REMUNERACAO'", array( 'tipo_remuneracao_descricao' => 'descricao' )) ->where('recebimento_contratos.excluido <> 1'); $selectPagamentoComissao = $dbtable->getAdapter()->select()->from(['protocolo_contrato' => 'tb_protocolo_contrato'], ['contrato_id', 'percentual', 'valor', 'base_comissao']) ->joinInner(['protocolos' => 'tb_protocolo_pagamento'], 'protocolo_contrato.protocolo_id = protocolos.id', ['data_quitacao']) ->where('situacao = ?', "Pagamento Comissão") ->where("data_quitacao is not null") ->where("protocolos.excluido<>1") ->where("protocolo_contrato.excluido<>1"); Core_Filters::_getWhereRecebimentoGenerico($fields, $selectRecebimento); if (!empty($fields['natureza'])) { $selectRecebimento->where("naturezas.codigo = {$fields['natureza']}"); } if (!empty($fields['tipo_remuneracao'])) { $selectRecebimento->where("tipos_remuneracao.codigo = {$fields['tipo_remuneracao']}"); } //-1: comissão, 1: remuneracao adicional, 2:diferimento, 3: bônus if( isset($fields['tipo_relatorio']) && in_array($fields['tipo_relatorio'], array(-1, 1, 2, 3)) ){ $remuneracao = in_array($fields['tipo_relatorio'], array(-1, 3, 1)) ? 1 : 2; $natureza = in_array($fields['tipo_relatorio'], array(-1, 2)) ? 1 : 2; $selectRecebimento->where("recebimento_contratos.tipo_remuneracao = '$remuneracao' AND natureza = '$natureza'"); } // $selectComissaoPrevista = $dbtable->getAdapter()->select()->from(array( 'c' => 'tb_comissionamento' ), array('banco_id', 'empresa_id', 'tabela_id', 'convenio_id', 'tipo_produto', 'prazo_de', 'prazo_a', 'validar_faixa', 'valor_de', 'valor_a', 'base_comissao_empresa', 'taxa_contrato_de', 'taxa_contrato_a', 'idade_inicial', 'idade_final', 'especie')) // ->joinInner(array( 'p' => 'tb_comissionamento_percentual' ), 'c.id = p.comissionamento_id', array('comissionamento_id', 'comissao_prevista' => 'comissao', 'bonus_previsto' => 'bonus', 'diferimento_previsto' => 'diferimento', 'adiantamento_previsto' => 'adiantamento', 'data_inicial', 'data_final', 'comissao' )) // ->where('c.excluido<>1') // ->where('c.desativado<>1') // ->where('p.excluido<>1'); $select = $this->_getSelectRecebimentoComissao($dbtable, $columns); $select->joinLeft(array( 'empresas' => 'tb_empresas' ), 'empresas.id = contratos.empresa_id', array()) ->joinLeft(array( 'recebimento_contratos' => $selectRecebimento ), "recebimento_contratos.contrato_id = contratos.id", array('natureza_descricao', 'recebimento_comissao_id' => 'recebimento_contratos.id')) ->joinLeft(array( 'subestabelecidos' => 'tb_empresas' ), 'contratos.subestabelecido_id = subestabelecidos.id', array()) ->joinLeft(['pagamentos_corretor' => $selectPagamentoComissao], 'contratos.id = pagamentos_corretor.contrato_id', ['percentual_pago_corretor' => 'pagamentos_corretor.percentual', 'valor_pago_corretor' => 'pagamentos_corretor.valor', 'base_comissao_pago_corretor' => 'pagamentos_corretor.base_comissao', 'data_quitacao_corretor' => 'pagamentos_corretor.data_quitacao']) // ->joinLeft(array( 'comissoes' => $selectComissaoPrevista ), "comissoes.convenio_id = contratos.convenio_id" // . " AND comissoes.tabela_id = contratos.tabela_id" // . " AND contratos.banco_id = comissoes.banco_id" // . " AND contratos.tipo = comissoes.tipo_produto" // . " AND IF(bancos.comissao_por_especie = 1 AND contratos.especie > 0, contratos.especie = comissoes.especie OR comissoes.especie = 0, comissoes.especie = 0 OR comissoes.especie IS NULL)" // . " AND IF(bancos.comissao_por_sub = 1 AND contratos.subestabelecido_id > 0, contratos.subestabelecido_id = comissoes.empresa_id, (comissoes.empresa_id = 0 OR comissoes.empresa_id IS NULL))" // . " AND contratos.prazo >= comissoes.prazo_de" // . " AND contratos.prazo <= comissoes.prazo_a" // . " AND contratos.data_emissao >= comissoes.data_inicial AND (contratos.data_emissao <= comissoes.data_final OR comissoes.data_final IS NULL)" // . " AND ( ( (valor_de = 0 AND valor_a = 0) OR (valor_de IS NULL AND valor_a IS NULL) )" // . " OR (CASE WHEN comissoes.validar_faixa = 1 THEN contratos.valor_liquido WHEN comissoes.validar_faixa = 2 THEN contratos.valor_bruto END >= comissoes.valor_de" // . " AND CASE WHEN comissoes.validar_faixa = 1 THEN contratos.valor_liquido WHEN comissoes.validar_faixa = 2 THEN contratos.valor_bruto END <= comissoes.valor_a ))" // . " AND IF(bancos.comissao_por_taxa = 1, contratos.taxa_contrato >= comissoes.taxa_contrato_de AND contratos.taxa_contrato <= comissoes.taxa_contrato_a, comissoes.taxa_contrato_de = 0 AND comissoes.taxa_contrato_a = 0)" // . " AND IF(bancos.comissao_por_idade = 1, (contratos.idade_cliente >= comissoes.idade_inicial AND contratos.idade_cliente <= comissoes.idade_final) OR (idade_inicial = 0 AND idade_final = 0) OR (idade_inicial IS NULL AND idade_final IS NULL), comissoes.idade_inicial IS NULL AND comissoes.idade_final IS NULL)", // array()) ->group(array( 'contratos.id', 'recebimento_contratos.id')); $this->_prepareFilterSelect($fields, $select); if (!empty($fields['data_quitacao_de'])) { $select->where("pagamentos_corretor.data_quitacao >= STR_TO_DATE('{$fields['data_quitacao_de']}', '%d/%m/%Y')"); } if (!empty($fields['data_quitacao_a'])) { $select->where("pagamentos_corretor.data_quitacao <= STR_TO_DATE('{$fields['data_quitacao_a']}', '%d/%m/%Y')"); } if( $order != null ){ $select->order($order); } else { $select->order(array( 'corretores.nome', 'contratos.data_liberacao' )); } return $select; } public function getRecebimentoGenerico(array $fields, $page = null, $limit = null, $order = ['corretores.nome', 'contratos.data_liberacao', 'contratos.id', 'recebimento_contratos.id'], $range = null) { $columns = array( 'contratos.numero_contrato', 'contratos.prazo', 'contratos.valor_liquido', 'contratos.valor_bruto', 'contratos.data_emissao', 'contratos.data_liberacao', 'contratos.corretor_id', 'contratos.base_comissao_empresa_valor', 'contratos.tipo', 'contratos.valor_fixo_empresa', 'contratos.base_comissao_empresa_bonus', 'contratos.base_comissao_empresa_adiantamento', 'recebimento_contratos.data_recebimento_comissao','recebimento_contratos.valor_lancamento', 'recebimento_contratos.parcelas', 'recebimento_contratos.rco', 'recebimento_contratos.data_saldo', 'comissao_recebida' => 'recebimento_contratos.comissao_empresa', 'natureza' => 'recebimento_contratos.natureza_descricao', 'tipo_natureza' => 'recebimento_contratos.natureza', 'recebimento_contratos.tipo_remuneracao','recebimento_contratos.tipo_remuneracao_descricao', 'base_recebida' => 'recebimento_contratos.base_comissao', 'contratos.idade_cliente', 'contratos.convenio_id', 'contratos.tabela_id', 'contratos.banco_id', 'contratos.especie', 'contratos.subestabelecido_id', 'contratos.taxa_contrato', 'id_contrato' => 'contratos.id' ); $select = $this->getSelectRecebimentoGenerico($fields, $columns, $order); if( $page ){ $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($page); if( $limit && is_numeric($limit) ){ $paginator->setItemCountPerPage($limit); } if( $range && is_numeric($range) ){ $paginator->setPageRange($range); } return $paginator; } $dbtable = new Model_DbTable_Contrato(); return $dbtable->getAdapter()->fetchAll($select); } public function getTabelaGeralCorretor(array $fields) { $dbtable = new Model_DbTable_Contrato(); $columns = array( 'total_valor_liquido' => 'SUM(base_comissao_valor)', 'contratos_rentabilidade' => 'SUM(base_comissao_empresa_valor*comissao_empresa/100)', 'contratos_comissao_corretor' => 'SUM(base_comissao_valor*comissao_corretor/100)', 'contratos_produzidos' => 'COUNT(contratos.id)', 'data_liberacao' => 'DATE_FORMAT(data_liberacao, "%m/%Y")', 'numero_contrato', 'corretor_id' ); $fields['srcc'] = 2;//considerar tudo menos SRCC if( isset($fields['action']) && $fields['action'] == 'ficha-corretor' ){ $statusId = Model_Contrato::findByNameStatus(array( "Operação Finalizada", "Pagamento Enviado" )); $fields['status_proposta'] = $statusId; } if( empty($fields['mes_ano']) ){ $dt = new Zend_Date(); $fields['mes_ano'] = $dt->get('MM/yyyy'); } $dataLiberacao = $fields['mes_ano']; $select = $this->_getSelectProducaoAnalitico($dbtable, $columns) ->where("DATE_FORMAT(data_liberacao, '%m/%Y') = '{$dataLiberacao}'") ->group(array( "DATE_FORMAT(data_liberacao, '%m/%Y')", "corretor_id" )); $this->_prepareFilterSelect($fields, $select); $result = $dbtable->getAdapter()->fetchAll($select); $producao = array(); if( $result ){ foreach ( $result as $registro ) { if( !isset($producao[$registro['corretor_id']]) ){ $producao[$registro['corretor_id']] = array( 'nome' => null, 'producao_mes_anterior' => 0, 'percentual_representativo' => 0, 'total_producao' => 0, 'total_contratos_rentabilidade' => 0, 'total_contratos_produzidos' => 0, ); $producaoMesAnterior = $this->_producaoMesAnterior($registro['corretor_id'], $fields); $percentualRepresentativo = $this->_percentualRepresentativo($fields); $producao[$registro['corretor_id']]['nome'] = $registro['corretor']; $producao[$registro['corretor_id']]['total_producao'] += $registro['total_valor_liquido']; $producao[$registro['corretor_id']]['total_contratos_rentabilidade'] += $registro['contratos_rentabilidade']; $producao[$registro['corretor_id']]['total_contratos_comissao_corretor'] += $registro['contratos_comissao_corretor']; $producao[$registro['corretor_id']]['producao_mes_anterior'] += $producaoMesAnterior; $producao[$registro['corretor_id']]['percentual_representativo'] = $registro['total_valor_liquido'] * 100 / $percentualRepresentativo; $producao[$registro['corretor_id']]['total_contratos_produzidos'] += $registro['contratos_produzidos']; } } } return $producao; } public function _producaoMesAnterior($corretorId, $fields) { $dbtable = new Model_DbTable_Contrato(); $producaoMesAnterior = 0; $columns = array( 'total_producao_mes_anterior' => 'SUM(base_comissao_valor)', ); $mesAno = "01/" . $fields['mes_ano']; $dt = new Zend_Date($mesAno); $dataLiberacao = $dt->subMonth(1)->get('MM/yyyy'); $select = $this->_getSelectProducaoAnalitico($dbtable, $columns) ->where("contratos.corretor_id = {$corretorId}") ->where("DATE_FORMAT(data_liberacao, '%m/%Y') = '{$dataLiberacao}'"); $this->_prepareFilterSelect($fields, $select); $result = $dbtable->getAdapter()->fetchRow($select); if ($result) { $producaoMesAnterior = $result['total_producao_mes_anterior']; } return $producaoMesAnterior; } public function _percentualRepresentativo(array $fields) { $dbtable = new Model_DbTable_Contrato(); $totalProducao = 0; $columns = array( 'total_producao_geral' => 'SUM(base_comissao_valor)', ); $dataLiberacao = $fields['mes_ano']; $select = $this->_getSelectProducaoAnalitico($dbtable, $columns) ->where("DATE_FORMAT(data_liberacao, '%m/%Y') = '$dataLiberacao'"); unset($fields['corretor_id']); $this->_prepareFilterSelect($fields, $select); $result = $dbtable->getAdapter()->fetchRow($select); if( $result ){ $totalProducao = $result['total_producao_geral']; } return $totalProducao; } public function acoesJudiciaisFraude($corretorId = null) { $dbtable = new Model_DbTable_Contrato(); $select = $dbtable->getAdapter()->select()->from(array( 'contratos' => 'tb_contratos' ), array( 'id', 'numero_contrato' )) ->joinInner(array( "clientes" => "tb_clientes" ), "contratos.cliente_id = clientes.id", array( 'cliente' => 'clientes.nome', 'cpf_cliente' => 'clientes.cpf' )) ->joinInner(array( 'contratos_judiciais' => 'tb_contratos_acoes' ), 'contratos_judiciais.contrato_id = contratos.id', array( 'impedimento_cobranca', 'resposta_analise', 'qtd' => 'COUNT(contratos_judiciais.id)' )) ->where("contratos.corretor_id = " . $corretorId) ->where("contratos.excluido<>1") ->where("contratos.tipo_registro = 1") ->where("clientes.excluido<>1 AND contratos_judiciais.resposta_analise LIKE 'FRAUDE'") ->order('contratos_judiciais.id DESC'); $select->group(array( 'contratos.id' )); return $dbtable->getAdapter()->fetchAll($select); } public function pmt($params, $page = null, $limit = null, $range = null) { $dt = new Zend_Date("01/" . $params['data_liberacao']); $liberacao = $dt->addMonth(1)->subDay(1)->get('yyyy-MM-dd'); //ultimo dia do mês $dbtable = new Model_DbTable_Contrato(); $status = $this->findByNameStatus("Operação Finalizada", "Pagamento Enviado"); $selectComissaoPrevista = $dbtable->getAdapter()->select()->from(array( 'c' => 'tb_comissionamento' ), array( 'banco_id', 'empresa_id', 'tabela_id', 'convenio_id', 'tipo_produto', 'prazo_a', 'prazo_de' )) ->joinInner(array( 'p' => 'tb_comissionamento_percentual' ), 'c.id = p.comissionamento_id', array( 'comissao', 'bonus', 'diferimento', 'adiantamento', 'data_inicial', 'data_final', 'base_comissao_diferimento' )) ->where('c.excluido<>1') ->where('p.excluido<>1') ->where("p.diferimento > 0") ->order("p.data_inicial ASC"); $columns = array("numero_contrato", "parcela_referente" => "TIMESTAMPDIFF(MONTH, data_liberacao,'" . $liberacao . "')", 'data_emissao', "data_liberacao", 'cliente_cpf' => 'clientes.cpf', 'cliente' => 'clientes.nome', 'convenio' => 'convenios.nome', 'tabela' => 'tabelas.nome', 'contratos.tipo', 'contratos.prazo', 'base_comissao_empresa_diferimento' => 'FORMAT(IF(comissoes.base_comissao_diferimento = "VALOR BRUTO", contratos.valor_bruto, contratos.valor_liquido), 2, "pt_BR")', 'diferido' => 'FORMAT(comissoes.diferimento, 2, "pt_BR")', 'diferimento_previsto' => 'FORMAT((comissoes.diferimento*(IF(comissoes.base_comissao_diferimento = "VALOR BRUTO", contratos.valor_bruto, contratos.valor_liquido))/100/contratos.prazo), 2, "pt_BR")', 'comissao_empresa' => 'FORMAT(recebimentos.comissao_empresa, 2, "pt_BR")', 'comissao_recebida' => 'FORMAT(recebimentos.valor_lancamento, 2, "pt_BR")', 'recebimentos.data_saldo', 'recebimento_data' => 'recebimentos.data_recebimento_comissao' ); $select = $dbtable->getAdapter()->select()->from(array( 'contratos' => 'tb_contratos' ), $columns) ->joinInner(array( 'clientes' => 'tb_clientes' ), 'clientes.id = contratos.cliente_id', array()) ->joinLeft(array( 'convenios' => 'tb_convenios' ), 'convenios.id = contratos.convenio_id', array()) ->joinLeft(array( 'tabelas' => 'tb_tabelas' ), 'tabelas.id = contratos.tabela_id', array( )) ->joinInner(array( 'comissoes' => $selectComissaoPrevista ), "comissoes.convenio_id = contratos.convenio_id AND " . "comissoes.banco_id = contratos.banco_id AND " . "comissoes.tabela_id = contratos.tabela_id AND " . "contratos.tipo = comissoes.tipo_produto AND comissoes.prazo_de <= contratos.prazo AND comissoes.prazo_a >= contratos.prazo AND " . "contratos.data_emissao >= comissoes.data_inicial AND (contratos.data_emissao <= comissoes.data_final" . " OR comissoes.data_final IS NULL)", array()) ->joinLeft(array( 'recebimentos' => "tb_recebimento_contratos" ), "recebimentos.contrato_id = contratos.id " . "AND ((recebimentos.parcelas = TIMESTAMPDIFF(MONTH, data_liberacao,'" . $liberacao . "') AND natureza = 1 AND tipo_remuneracao = 2)" . "OR (recebimentos.parcelas = 1 AND recebimentos.natureza = 5 and recebimentos.tipo_remuneracao = 2))", array()) ->having("contratos.prazo >= parcela_referente AND parcela_referente > 0") ->where("data_emissao >= '2015-01-01'") //o diferimento iniciou em janeiro de 2015 ->where("contratos.excluido <> 1") ->where("contratos.status_proposta IN (" . $status . ")") ->order("contratos.data_emissao ASC") ->group(array( "contratos.id" )); if( isset($params['recebido']) ){ if( $params['recebido'] == 1 ){ //recebido independente de ser igual, maior ou menor $select->where('recebimentos.id is not null') ->where('recebimentos.valor_lancamento is not null and recebimentos.valor_lancamento > 0'); } elseif( $params['recebido'] == -1 ){ //não recebido $select->where('recebimentos.id is null'); } elseif( $params['recebido'] == 2 ){ //recebido maior que o previsto $select->where("diferimento < recebimentos.comissao_empresa"); } elseif( $params['recebido'] == 3 ){ //recebido menor que o previsto $select->where("diferimento > recebimentos.comissao_empresa"); } elseif( $params['recebido'] == 4 ){ //recebido igual ao previsto $select->where("diferimento = recebimentos.comissao_empresa"); } else { $select->where('comissoes.diferimento <> 0 '); } } else { $select->where('comissoes.diferimento <> 0 '); } if( isset($params['banco_id']) && $params['banco_id'] ){ $select->where('contratos.banco_id = ' . $params['banco_id']); } if( $page ){ $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($page); if( $limit && is_numeric($limit) ){ $paginator->setItemCountPerPage($limit); } if( $range && is_numeric($range) ){ $paginator->setPageRange($range); } return $paginator; } return $dbtable->getAdapter()->fetchAll($select); } public function importarConsistencias(array $values) { $result = null; if (count($values) > 0) { $model = new Core_Banco_Planilha_Consistencia(); $result = $model->importar($values); } return $result; } /** * * @param type $contratoId * @param type $anexo */ public function regularizarConsistencia($consistenciaId, $contratoId, $anexo, $tipoDocumento, $descricao = null) { if( !$contratoId || !$anexo ){ throw new Core_Exception('Contrato ou anexo não identificados.'); } $dbRegularizaPendencia = new Model_DbTable_PendenciaRegularizar(); return $dbRegularizaPendencia->insert(array( 'contrato_pendencia_id' => $consistenciaId, 'contrato_id' => $contratoId, 'tipo_documento' => $tipoDocumento, 'anexo' => $anexo, 'validado' => 0, 'tipo' => 2, // Para identificar como consistencia. 'descricao' => $descricao, 'usuario_abertura' => Yuppie_Auth::getIdentity()->login, )); } public function sobreporAnexoPendencia($contratoId, $tipoDocumento, $novoAnexo) { if( !$contratoId || !$tipoDocumento || !$novoAnexo ){ return null; } $modelAnexo = new Model_ContratoAnexo(); $anexos = $modelAnexo->listar("contrato_id = $contratoId AND tipo_id = $tipoDocumento"); foreach($anexos as $anexo){ $arquivo = $anexo['arquivo']; $filename = UPLOAD_PATH . "/$arquivo"; if (file_exists($filename)) { unlink($filename); } $modelAnexo->excluir($anexo['id']); } $modelAnexo->setOptions(array( 'contrato_id' => $contratoId, 'tipo_id' => $tipoDocumento, 'arquivo' => $novoAnexo, )); return $modelAnexo->salvar(); } public function getFormalizacaoFisicosPendentes(array $fields, $page = null, $limit = null, $order = null, $range = null) { $dbtable = new Model_DbTable_Contrato; $select = $this->_getSelectProducaoAnalitico(new Model_DbTable_Contrato(), Model_Contrato::getColunasFisicosPendentes()); //consulta principal $select->joinLeft(array( 'rotas' => 'tb_rotas' ), 'corretores.rota_id = rotas.id', array( 'rotas' => 'nome' )) ->joinLeft(array( 'usuarios' => "tb_usuarios" ), "usuarios.id = contratos.usuario_pendencia", array( 'usuario_pendencia' => 'nome' )) ->where('(contratos.pendente > 0 AND contratos.tipo_formalizacao <> 1) OR (contratos.tipo_formalizacao = 1 AND contratos.motivo_pendencia = 2)') ->group(array( 'corretores.id', 'numero_contrato2' )); if( empty($fields['status_proposta']) ){ //força o status operação finalizada E físico pendentes OU cobrança banco OU pendência dos cancelados Itaú $select->where("(contratos.status_proposta = 43 AND contratos.motivo_pendencia = 1) OR contratos.motivo_pendencia = 2 OR contratos.motivo_pendencia = 3"); } $this->_prepareFilterSelect($fields, $select); if( $order != null ){ $select->order($order); } else { $select->order(array( 'corretores.nome', 'contratos.data_liberacao', 'clientes.nome ASC' )); } if( $page ){ $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($page); if( $limit && is_numeric($limit) ){ $paginator->setItemCountPerPage($limit); } if( $range && is_numeric($range) ){ $paginator->setPageRange($range); } return $paginator; } return $dbtable->getAdapter()->fetchAll($select); } public static function getColunasFisicosPendentes() { return [ "contratos.descricao_pendencia", 'id_contrato' => 'contratos.id', 'numero_contrato', 'numero_contrato2' => "if(bancos.nome IN ('BGN','UNIBANCO'), numero_contrato, SUBSTRING_INDEX(`contratos`.`numero_contrato`, '-', 1))", 'contratos.tipo', 'contratos.cartao', 'contratos.data_recebimento_fisico', 'contratos.data_liberacao', 'contratos.data_emissao', 'contratos.valor_fixo_corretor', 'contratos.valor_liquido', 'contratos.comissao_empresa', 'contratos.previa_recebimento', 'contratos.data_recebimento_previa', 'contratos.numero_ade', 'contratos.comissao_corretor', 'contratos.bonus_corretor', 'contratos.corretor_id', 'contratos.prazo', 'contratos.produto', 'contratos.estornado', 'contratos.cobranca_banco', 'contratos.cobranca_promotora', 'contratos.base_comissao_valor', 'contratos.base_comissao_empresa_valor', 'contratos.digitador', 'data_base' => new Zend_Db_Expr('IF(contratos.motivo_pendencia = 3, `contratos`.`data_emissao`, IF(contratos.previa_recebimento > 0, contratos.data_recebimento_previa, `contratos`.`data_liberacao`))') ]; } public function getProducaoCorretorNotificacao() { $semanaUm = "SUM( IF ( c.data_emissao BETWEEN (date(now()) - INTERVAL 15 DAY) AND (date(now()) - INTERVAL 9 DAY), c.base_comissao_valor, 0 ) )"; $semanaDois = "SUM( IF ( c.data_emissao BETWEEN (date(now()) - INTERVAL 8 DAY) AND (date(now()) - INTERVAL 2 DAY), c.base_comissao_valor, 0 ) )"; $dbtable = new Model_DbTable_Contrato(); $select = $dbtable->getAdapter()->select()->from(['c' => 'tb_contratos'], [ new Zend_Db_Expr("{$semanaUm} as total_semana1"), new Zend_Db_Expr("{$semanaDois} as total_semana2"), new Zend_Db_Expr("(100-({$semanaDois}*100/{$semanaUm}))*-1 as percentual_queda"), new Zend_Db_Expr("(100-({$semanaDois}/cor.potencial_venda*100))*-1 as producao_x_potencial"), 'cor.potencial_venda', 'cor.percentual_corte' ]) ->joinInner(['cli' => 'tb_clientes'], 'cli.id = c.cliente_id', []) ->joinInner(['cor' => 'tb_corretores'], 'cor.id = c.corretor_id AND cor.excluido <> 1', [ 'data_cadastro' => 'data_cadastro', 'corretor_id' => 'id', 'corretor' => 'nome', 'percentual_corte' ]) ->joinInner(['r' => 'tb_rotas'], 'r.id = cor.rota_id', []) ->joinInner(['s' => 'tb_gerente_rota'], 's.id = r.gerente_id', [ 'email', 'supervisor' => 'nome', 'supervisor_id' => 'id' ]) ->where('c.tipo_registro = 1') ->where('c.excluido <> 1') ->where('cor.corretor_desativado <> 1') ->where("s.email IS NOT NULL AND s.email <> ''") ->where('c.data_emissao >= (date(now()) - 15)') ->group('cor.id') ->having("total_semana2 < cor.potencial_venda") ->having("(100-(total_semana2/cor.potencial_venda*100)) >= cor.percentual_corte") ->order(['s.id', 'percentual_queda ASC', 'cor.nome']); return $dbtable->getAdapter()->fetchAll($select); } public static function getExibirLayoutBancoComissao($bancoId, $layoutBanco = null) { if ($bancoId != 0) { if ($layoutBanco) { $core = new Core_Banco_Planilha_MeuLayoutComissao($bancoId); $core->setMeuLayout($layoutBanco); $core->getPopulateColunas(); } else { switch ($bancoId) { case 1: //Bradesco Recebimento $core = new Core_Banco_Planilha_Bradesco_Recebimento($bancoId); break; case 2: //Bv Recebimento $core = new Core_Banco_Planilha_Bv_Recebimento($bancoId); break; case 3: //Mercantil Recebimento $core = new Core_Banco_Planilha_Mercantil_Recebimento($bancoId); break; case 4: //Pan Recebimento $core = new Core_Banco_Planilha_Pan_Recebimento($bancoId); break; case 5: //BBS $core = new Core_Banco_Planilha_Bonsucesso_Comissionamento($bancoId); break; case 6: //ITAU $core = new Core_Banco_Planilha_Itau_Comissionamento($bancoId); break; case 7: //BONSUCESSO DIÁRIO $core = new Core_Banco_Planilha_Bonsucesso_ComissionamentoDiario($bancoId); break; case 8: //ITAU KGIRO $core = new Core_Banco_Planilha_Itau_Kgiro($bancoId); break; case 9: //CETELEM $core = new Core_Banco_Planilha_Cetelem_Comissao($bancoId); break; case 10: //SAFRA $core = new Core_Banco_Planilha_Safra_Comissao($bancoId); break; case 11: throw new Core_Exception("Por favor, selecione um layout para o banco genérico. Caso não tenha cadastrado <a href='../layout-banco-comissao/save' target='_blank'>clique aqui</a>."); break; case 12: //C6 Bank $core = new Core_Banco_Planilha_C6_Comissao($bancoId); break; case 13: //BMG $core = new Core_Banco_Planilha_Bmg_ComissaoDiferida($bancoId); break; case 14: //BMG $core = new Core_Banco_Planilha_Bmg_AcertoCard($bancoId); break; case 15: //FACTA $core = new Core_Banco_Planilha_Facta_Comissionamento($bancoId); break; case 16: //C6 BANK $core = new Core_Banco_Planilha_C6_NaoComissionados($bancoId); break; case 17: //ITAU IC 360 $core = new Core_Banco_Planilha_Itau_ComissaoIc360($bancoId); break; case 18: //FACTA NOVO $core = new Core_Banco_Planilha_Facta_Comissionamento2($bancoId); break; case 51: //Banco do Brasil (Abertura de Conta diário) $core = new Core_Banco_Planilha_BB_ComissaoAberturaConta($bancoId); break; case -1: //ICRED $core = new Core_Banco_Planilha_Icred_Comissao($bancoId); break; case -2: //NBC $core = new Core_Banco_Planilha_NBC_Comissao($bancoId); break; case -3: //C6 Bank Débito SRCC $core = new Core_Banco_Planilha_C6_DebitoSrcc($bancoId); break; case -4: //Banco do Brasil (Á Vista) $core = new Core_Banco_Planilha_BB_ComissaoAVista($bancoId); break; case -5: //Banco do Brasil (PRT) $core = new Core_Banco_Planilha_BB_ComissaoPrt($bancoId); break; case -6: //Banco do Brasil (SEGURO) $core = new Core_Banco_Planilha_BB_ComissaoSeguro($bancoId); break; case -7: //BMG Comissao Ato & Diferido Consolidado $core = new Core_Banco_Planilha_Bmg_Cartao_ComissaoAtoConsolidado($bancoId); break; case -8: //BMG Comissao Ato & Diferido Consolidado $core = new Core_Banco_Planilha_Bmg_Cartao_ComissaoAtoConsolidado($bancoId); break; } } } else { return false; } if (empty($core)) { throw new Core_Exception('Layout não identificado! Favor informe um layout válido.'); } $layout = array_filter($core->getColunas()); return $layout; } public static function getExibirLayoutBanco($bancoId, $layoutBanco = null) { if ($bancoId != 0) { if ($layoutBanco) { $core = new Core_Banco_Planilha_MeuLayout($bancoId); $core->setMeuLayout($layoutBanco); $core->getPopulateColunas(); } else { switch ($bancoId) { case 1: //BMG $core = new Core_Banco_Planilha_Bmg_ComissaoSaldoPago($bancoId); break; case 13: //BMG $core = new Core_Banco_Planilha_Bmg_ComissaoConsignado($bancoId); break; case 7: //BMG $core = new Core_Banco_Planilha_Bmg_Cartao_Comissao($bancoId); break; case 74: //BMG $core = new Core_Banco_Planilha_Bmg_Cartao_ComissaoSub($bancoId); break; case 99: //BMG $core = new Core_Banco_Planilha_Bmg_Cartao_ComissaoSaque($bancoId); break; case 45: $core = new Core_Banco_Planilha_Bmg_Cartao_ComissaoSaldoPago($bancoId); break; case 9: //ITAÚ case 11: //CIFRA case 12: //BCV $core = new Core_Banco_Planilha_Itau_Comissao($bancoId); break; case 2: $core = new Core_Banco_Planilha_Bradesco_Producao($bancoId); break; case 3: $core = new Core_Banco_Planilha_Bv_Pagos($bancoId); break; case 4: $core = new Core_Banco_Planilha_Daycoval_Producao($bancoId); break; case 5: // IMPORTAÇÃO MERCATIL (PAGOS) $core = new Core_Banco_Planilha_Mercantil_Pagos($bancoId); break; case 6: //BMG $core = new Core_Banco_Planilha_Bmg_Cartao_Extrator($bancoId); break; case 10: //ITAÚ case 18: //BCV case 20: //CIFRA $core = new Core_Banco_Planilha_Itau_Extrator($bancoId); break; case 14: // IMPORTAÇÃO MERCANTIL (GERAL) $core = new Core_Banco_Planilha_Mercantil_Producao($bancoId); break; case 15: //BMG $core = new Core_Banco_Planilha_Bmg_ComissaoAberturaConta($bancoId); break; case 17: //BCV case 19: //CIFRA case 21: //ITAÚ $core = new Core_Banco_Planilha_Bmg_Bonus($bancoId); break; case 16: $core = new Core_Banco_Planilha_Pan_PanXLS($bancoId); break; case 8: $core = new Core_Banco_Planilha_Banrisul_Producao($bancoId); break; case 22: //DAYCOVAL $core = new Core_Banco_Planilha_Daycoval_Cartao($bancoId); break; case 24: //Planilha Pan Novo Formato $core = new Core_Banco_Planilha_Pan_ExtratorCsv($bancoId); break; case 47: //Planilha Pan Cartão novo Layout $core = new Core_Banco_Planilha_Pan_Cartao_ExtratorCartao($bancoId); break; case 25: //Bv $core = new Core_Banco_Planilha_Bv_Producao($bancoId); break; case 28: //Cartao PAN (Comissao) $core = new Core_Banco_Planilha_Pan_Cartao_Comissao($bancoId); break; case 29: //Bradesco promotora (BP NET) $core = new Core_Banco_Planilha_Bradesco_ProducaoBpNet($bancoId); break; case 30: //Bonsucesso Cliente $core = new Core_Banco_Planilha_Bonsucesso_Cliente(); break; case 31: //Bonsucesso DadosProposta $core = new Core_Banco_Planilha_Bonsucesso_DadosProposta($bancoId); break; case 32: //Bonsucesso Status $core = new Core_Banco_Planilha_Bonsucesso_Status($bancoId); break; case 34: //Cetelem $core = new Core_Banco_Planilha_Cetelem_Producao($bancoId); break; case 39://Ted (Cancelada) $core = new Core_Banco_Planilha_Mercantil_TedCancelada($bancoId); break; case 40://Op (Cancelada) $core = new Core_Banco_Planilha_Mercantil_OpCancelada($bancoId); break; case 41: //BGN (Comissionamento) $core = new Core_Banco_Planilha_Bgn_Comissao($bancoId); break; case 42: //BGN (Produção) $core = new Core_Banco_Planilha_Bgn_Producao($bancoId); break; case 43: //ITAÚ (Atualização de Status) $core = new Core_Banco_Planilha_Itau_AtualizarStatus($bancoId); break; case 44: //Bonsucesso (Atualização de Status) $core = new Core_Banco_Planilha_Bonsucesso_AtualizarStatus($bancoId); break; case 46: //Bradesco promotora (FTP) $core = new Core_Banco_Planilha_Bradesco_ProducaoFtp($bancoId); break; case 48: //ITAU QLIKVIEW $core = new Core_Banco_Planilha_Itau_ExtratorQlikView($bancoId); break; case 49: //C6 $core = new Core_Banco_Planilha_C6_Producao($bancoId); break; case 50: // Banco do Brasil (Planilha diaria emprestimo) $core = new Core_Banco_Planilha_BB_Emprestimo($bancoId); break; case 51: // Banco do Brasil (Planilha diaria emprestimo) $core = new Core_Banco_Planilha_BB_AberturaConta($bancoId); break; case 52: // Banco BMG (SEGURO) $core = new Core_Banco_Planilha_Bmg_Seguro($bancoId); break; case 53: // Banco BMG (FGTS) $core = new Core_Banco_Planilha_Bmg_ComissaoFgts($bancoId); break; // case 53: // Banco BMG (FGTS) // $core = new Core_Banco_Planilha_Bmg_ComissaoSaqueFgts($bancoId); // break; case 54: // ITAÚ IC360 $core = new Core_Banco_Planilha_Itau_Ic360($bancoId); break; case 55: // DIGIO $core = new Core_Banco_Planilha_Digio_Producao($bancoId); break; case -1: //ICRED $core = new Core_Banco_Planilha_Icred_Producao($bancoId); break; case -2: //NBC $core = new Core_Banco_Planilha_NBC_Producao($bancoId); break; case -3: //AMIGOZ $core = new Core_Banco_Planilha_Amigoz_Producao($bancoId); break; } } } else { return false; } if (empty($core)) { throw new Core_Exception('Layout não identificado! Favor informe um layout válido.'); } $layout = array_filter($core->getColunas()); return $layout; } public static function enviarProtocolosWhatsapp($corretorId, $numerosProtocolos) { $corretor = (new Model_DbTable_Corretor())->fetchRow(['id = ?' => $corretorId]); $numeroCorretor = String_Refatorar::formatarTelefone($corretor['celular']); $protocolos = implode(', ', $numerosProtocolos); $textoMensagem = "Prezado(a) parceiro(a), informamos que o protocolo *{$protocolos}* foi quitado."; if (count($numerosProtocolos) > 1) $textoMensagem = "Prezado(a) parceiro(a), informamos que os seguintes protocolos foram quitados: *{$protocolos}*."; $textoMensagem . "\n\n\n _Esta é uma mensagem enviada, automaticamente, pelo Sistema Yuppie_"; if ($whatsapp = Core_Whatsapp_Factory::load()) return $whatsapp->sendMessage($numeroCorretor, $textoMensagem); } public static function gravarEspelhoImportacao($contratoId, $linha, $arquivo) { if (empty($contratoId)) return; $linha = array_filter($linha); if (empty($linha)) return; $table = new Model_DbTable_EspelhoImportacao(); $table->insert([ 'contrato_id' => $contratoId, 'usuario' => service('auth_service')->getUsuarioLogadoResolve(), 'arquivo' => $arquivo->arquivo, 'linha' => json_encode($linha) ]); } public function getHistoricoImportacao($contratoId) { $ns = new Zend_Session_Namespace(); if ($ns->acl->isAllowed(Yuppie_Auth::getIdentity()->grupo, 'contrato', 'exibir-espelho-importacao')) { return (new Model_DbTable_EspelhoImportacao())->fetchAll(["contrato_id = ?" => $contratoId]); } return false; } public static function getDetalheHistoricoImportacao($id) { $espelho = (new Model_DbTable_EspelhoImportacao())->fetchRow(["id = ?" => $id]); return json_decode($espelho->linha); } /** * @param array $fields */ public function validFieldsFilter(array $fields): void { unset($fields['action']); if (empty($fields)) { throw new DomainException(self::EMPTY_FILTER); } } /** * @param int $value */ public function setSrcc(int $value): void { $this->_srcc = (int)$value; } /** * @return int|null */ public function getSrcc(): ?int { return (int)$this->_srcc; } /** * @param array $filtros * @return array */ public function getResumoComissaoPagar(array $filtros) { if (!$filtros['corretores']) { return []; } $corretorList = array_filter($filtros['corretores'], function ($c) { return strpos($c, 'block_') === false; }); $filtros['corretores'] = implode(',', $corretorList); $filtros['status_proposta'] = implode(',', $filtros['status_proposta']); $contratos = $this->getComissaoPagar($filtros); $corretores = []; array_map(function ($contrato) use (&$corretores) { $diasAtraso = Model_Contrato::getDiasAtraso( $contrato['data_liberacao'], $contrato['data_recebimento_fisico'], $contrato['data_recebimento_previa'], $contrato['prazo_fisico'] ); if ($diasAtraso <= $contrato['prazo_fisico'] || $contrato['estornado'] || $contrato['tipo_formalizacao'] == 1) { $comissao = $contrato['base_comissao_valor'] * $contrato['comissao_corretor'] / 100; $bonus = $contrato['base_comissao_bonus'] * $contrato['bonus_corretor'] / 100; $valorComissao = $comissao + $bonus + $contrato['valor_fixo_corretor'] - $contrato['taxa_portabilidade']; $operacao = $contrato['estornado'] ? -1 : 1; $corretores[$contrato['corretor_id']]['nome'] = $contrato['corretor']; $corretores[$contrato['corretor_id']]['quantidade'] += 1; $corretores[$contrato['corretor_id']]['valor_comissao'] += ($valorComissao * $operacao); } }, $contratos); return $corretores; } /** * @param $dadosContrato * @return float */ protected function getValorComissaoPagar($dadosContrato): float { if (!empty($dadosContrato['srcc'])) { return 0; } return ($dadosContrato['base_comissao_valor'] * $dadosContrato['comissao_corretor'] / 100) + ($dadosContrato['base_comissao_bonus'] * $dadosContrato['bonus_corretor'] / 100) + $dadosContrato['valor_fixo_corretor']; } /** * @param $dadosContrato * @param $valorComissao * @param $percentual * @param $percentualBonus * @param $baseComissao * @param $baseBonus * @return array */ protected function getDataBaixaPagamento( $dadosContrato, $valorComissao, $percentual, $percentualBonus, $baseComissao, $baseBonus ): array { return [ 'status' => 1, 'numero_contrato' => $dadosContrato['numero_contrato'], 'motivo' => NULL, 'valor_comissao' => $valorComissao, 'percentual' => empty($dadosContrato['srcc']) ? $percentual : 0, 'valor_fixo_corretor' => $dadosContrato['valor_fixo_corretor'], 'percentual_bonus' => $percentualBonus, 'base_comissao' => $baseComissao, 'base_bonus' => $baseBonus, ]; } /** * @param $dados * @return mixed|null * @throws Zend_Log_Exception */ public function inserindoContrato($dados) { $result = null; try { $newContrato = new Model_DbTable_Contrato(); $result = $newContrato->insert($dados); } catch (Exception $e) { throw new ImportacaoContratoException($dados, $e->getMessage()); } if ($result <= 0) { throw new ImportacaoContratoException($dados, 'Contrato não inserido.'); } return $result; } /** * @param $dados * @param Zend_Db_Table_Row_Abstract $dadosContrato * @throws Zend_Log_Exception */ public function atualizandoContrato($dados, Zend_Db_Table_Row_Abstract $dadosContrato): void { $protocoloContrato = new Model_DbTable_ProtocoloContrato(); $protocolos = $protocoloContrato->fetchRow(["contrato_id = ?" => $dadosContrato['id']]); $newContrato = new Model_DbTable_Contrato(); if ($protocolos != null) { throw new ImportacaoContratoException($dados, 'Contrato está pago e não pode ser alterado.'); } $dados['id'] = $dadosContrato['id']; if (!empty($dadosContrato['corretor_id']) && $dados['corretor_id'] > 0 && $dados['corretor_id'] != $dadosContrato['corretor_id'] ) { unset($dados['corretor_id']); } try { $newContrato->update($dados, "id = {$dadosContrato['id']}"); } catch (Exception $e) { throw new ImportacaoContratoException($dados, $e->getMessage()); } } /** * @return mixed * @throws Exception */ public function getByNumeroContrato() { $dadosContrato = $this->existe($this->getNumeroContrato(), $this->getBancoId()); if (!$dadosContrato || $dadosContrato['corretor_id'] !== $this->getCorretorId()) { throw new Exception("Contrato inexistente."); } $contrato = new Model_Contrato(array_merge($dadosContrato->toArray(), array_filter($this->_toArray()))); $contratoId = $contrato->salvar($contrato); return $contratoId ? $contratoId : $dadosContrato['id']; } public function countContratosSemCorretor() { $tbContratos = new Model_DbTable_Contrato(); return current($tbContratos->contratosSemCorretor()); } public function getContratosCorretores(array $contratos) { $modelContratos = new Model_Contrato(); $contratosCorretor = []; foreach ($contratos as $contratoId) { $c = $modelContratos->exibir($contratoId); if ($c) { if (!empty($contratosCorretor[$c['corretor_id']])) { array_push($contratosCorretor[$c['corretor_id']], $contratoId); } else { if (!empty($c['corretor_id'])) { $contratosCorretor[$c['corretor_id']] = [$contratoId]; } } } } return $contratosCorretor; } public function getEmailsEnvio($contratosCorretores) { $emailsEnvio = []; foreach ($contratosCorretores as $corretorId => $contratos) { $modelCorretor = new Model_Corretor(); $dadosCorretor = $modelCorretor->exibir($corretorId); $emailsEnvio[$corretorId]['nome'] = $dadosCorretor['nome']; $emailsEnvio[$corretorId]['email'] = $dadosCorretor['email']; $emailsEnvio[$corretorId]['contratos'] = $contratos; $modelEmail = new Model_CorretorEmail(); $dadosEmailAdicional = $modelEmail->listar(['corretor_id' => $dadosCorretor['id']]); foreach ($dadosEmailAdicional as $adicional) { if ($adicional->pendencia == 1) { $emailsEnvio[$corretorId]['emailsAdicionais'][] = [ 'email' => $adicional->email_adicional, 'nome' => $dadosCorretor['nome'], 'receber_email' => $adicional->receber_email ]; } } $dadosReceberEmailsComCopia = $modelCorretor->getReceberEmailsComCopia($dadosCorretor['id']); foreach ($dadosReceberEmailsComCopia as $receberEmail) { if ($receberEmail['receber_email_supervisor'] == 1) { $emailsEnvio[$corretorId]['receberEmailsComCopia'][] = [ 'email' => $receberEmail['email_supervisor'], 'nome' => $receberEmail['supervisor'] ]; } if ($receberEmail['receber_email_gerente'] == 1) { $emailsEnvio[$corretorId]['receberEmailsComCopia'][] = [ 'email' => $receberEmail['email_gerente'], 'nome' => $receberEmail['gerente'] ]; } } } return $emailsEnvio; } public function getContratosDigitacaoAutomatica($fields) { if( count($fields) <= 0 ){ throw new Core_Exception("Não foi passado parâmetro de busca."); } $columns = [ 'id_contrato' => 'contratos.id', 'cpf_cliente' => 'clientes.cpf', 'cliente' => 'clientes.nome', 'cliente_id' => 'clientes.id', 'qtd_contratos' => 'count(distinct contratos.id)' ]; $dbtable = new Model_DbTable_Contrato(); $select = $dbtable->getAdapter()->select()->from(['clientes' => 'tb_clientes'], $columns) ->joinLeft(['contratos' => 'tb_contratos'], 'clientes.id = contratos.cliente_id AND contratos.excluido<>1', []) ->where("clientes.excluido <> 1") ->order(['cliente']) ->limit(5000) ->group(['clientes.id']); if (!empty($fields['convenio_id'])) { $select->where("contratos.convenio_id = ?", $fields['convenio_id']); } if (!empty($fields['banco_id'])) { $select->where("contratos.banco_id = ?", $fields['banco_id']); } if (!empty($fields['tipo_formalizacao'])) { $select->where("contratos.tipo_formalizacao = ?", $fields['tipo_formalizacao']); } if (!empty($fields['status_proposta'])) { $select->where("contratos.status_proposta in (?)", implode(", ", $fields['status_proposta'])); } if (!empty($fields['tipo_contrato'])) { $select->where("contratos.tipo in (?)", implode(", ", $fields['tipo_contrato'])); } if (!empty($fields['corretor_id'])) { $select->where("contratos.corretor_id in (?)", implode(", ", $fields['corretor_id'])); } if (!empty($fields['data_emissao_de'])) { $select->where("contratos.data_emissao >= STR_TO_DATE(?, '%d/%m/%Y')", $fields['data_emissao_de']); } if (!empty($fields['data_emissao_a'])) { $select->where("contratos.data_emissao <= STR_TO_DATE(?, '%d/%m/%Y')", $fields['data_emissao_a']); } if (!empty($fields['data_liberacao_de'])) { $select->where("contratos.data_liberacao >= STR_TO_DATE(?, '%d/%m/%Y')", $fields['data_liberacao_de']); } if (!empty($fields['data_liberacao_a'])) { $select->where("contratos.data_liberacao <= STR_TO_DATE(?, '%d/%m/%Y')", $fields['data_liberacao_a']); } return $dbtable->getAdapter()->fetchAll($select); } public function relatorioConferenciaPagamento($fields) { $colsContrato = [ "subestabelecido_id", "corretor_id", "numero_contrato", "data_liberacao", "data_emissao", "banco_id", "tabela_id", "convenio_id", "prazo", "especie", "idade_cliente", "taxa_contrato", "tipo", "valor_bruto", "valor_liquido", "comissao_empresa", "bonus_empresa", "base_comissao_valor", "base_comissao_adiantamento", "base_comissao_diferimento", "base_comissao_bonus", "valor_fixo_corretor", "saldo_banco", "comissao_corretor", "bonus_corretor", "data_recebimento_comissao", ]; $dbtable = new Model_DbTable_Contrato(); $select = $dbtable->getAdapter()->select()->from(['contratos' => 'tb_contratos'], $colsContrato) ->joinLeft(['protocolo_contrato' => 'tb_protocolo_contrato'], 'protocolo_contrato.contrato_id = contratos.id AND protocolo_contrato.excluido<>1', ['comissao' => 'percentual', 'base_comissao', 'bonus' => 'percentual_bonus', 'base_bonus', 'situacao_protocolo' => 'situacao', 'valor']) ->joinLeft(['protocolos' => 'tb_protocolo_pagamento'], 'protocolos.id = protocolo_contrato.protocolo_id AND protocolos.excluido<>1', ['numero_protocolo' => 'id', 'data_protocolo' => 'data_pagamento', 'data_quitacao', 'liberado_pagamento']) ->joinInner(['corretores' => 'tb_corretores'], 'corretores.id = contratos.corretor_id', ['corretor' => 'nome']) ->joinInner(['tabelas' => 'tb_tabelas'], 'tabelas.id = contratos.tabela_id', ['tabela' => 'nome']) ->joinInner(['convenios' => 'tb_convenios'], 'convenios.id = contratos.convenio_id', ['convenio' => 'nome']) ->joinInner(['bancos' => 'tb_bancos'], 'bancos.id = contratos.banco_id', ['banco' => 'nome']) ->where("contratos.excluido<>1") ->where("contratos.status_proposta = 43") //apenas operação finalizada ->order(['bancos.nome ASC', 'contratos.data_emissao ASC', 'protocolos.data_pagamento ASC', 'protocolos.data_quitacao ASC']); if (!empty($fields['banco_id'])) { $select->where("contratos.banco_id = ?", $fields['banco_id']); } if (!empty($fields['corretores'])) { $select->where("contratos.corretor_id in(?)", $fields['corretores']); } if (!empty($fields['data_emissao_de'])) { $select->where("contratos.data_emissao >= STR_TO_DATE(?, '%d/%m/%Y')", $fields['data_emissao_de']); } if (!empty($fields['data_emissao_a'])) { $select->where("contratos.data_emissao <= STR_TO_DATE(?, '%d/%m/%Y')", $fields['data_emissao_a']); } if (!empty($fields['data_liberacao_de'])) { $select->where("contratos.data_liberacao >= STR_TO_DATE(?, '%d/%m/%Y')", $fields['data_liberacao_de']); } if (!empty($fields['data_liberacao_a'])) { $select->where("contratos.data_liberacao <= STR_TO_DATE(?, '%d/%m/%Y')", $fields['data_liberacao_a']); } if (!empty($fields['data_protocolo_de'])) { $select->where("protocolos.data_pagamento >= STR_TO_DATE(?, '%d/%m/%Y')", $fields['data_protocolo_de']); } if (!empty($fields['data_protocolo_a'])) { $select->where("protocolos.data_pagamento <= STR_TO_DATE(?, '%d/%m/%Y')", $fields['data_protocolo_a']); } if (!empty($fields['data_quitacao_de'])) { $select->where("protocolos.data_quitacao >= STR_TO_DATE(?, '%d/%m/%Y')", $fields['data_quitacao_de']); } if (!empty($fields['data_quitacao_a'])) { $select->where("protocolos.data_quitacao <= STR_TO_DATE(?, '%d/%m/%Y')", $fields['data_quitacao_a']); } if (!empty($fields['comissao_recebida'])) { if ($fields['comissao_recebida'] == -1) { $select->where("contratos.data_recebimento_comissao IS NULL OR contratos.data_recebimento_comissao = '0000-00-00'"); } elseif ($fields['comissao_recebida'] == 1) { $select->where("contratos.data_recebimento_comissao IS NOT NULL AND contratos.data_recebimento_comissao <> '0000-00-00'"); } } if (!empty($fields['protocolo_pagamento_gerado'])) { switch ($fields['protocolo_pagamento_gerado']) { case 1: //GERADO $select->where("protocolos.id IS NOT NULL"); break; case -1: //NÃO GERADO $select->where("protocolos.id IS NULL"); break; case 2: //A LIBERAR $select->where("protocolos.id IS NOT NULL AND protocolos.liberado_pagamento <> 1"); break; case 3: //A QUITAR $select->where("protocolos.id IS NOT NULL AND protocolos.liberado_pagamento = 1 AND protocolos.data_quitacao IS NULL"); break; case 4: //QUITADO $select->where("protocolos.id IS NOT NULL AND protocolos.liberado_pagamento = 1 AND protocolos.data_quitacao IS NOT NULL"); break; } } return $dbtable->getAdapter()->fetchAll($select); } public function exportarRecebimentoGenericoCabecalho() { $ns = new Zend_Session_Namespace("exportar_excel"); $ns->exportar_excel = array( implode(';', array( 'A' => 'ID Corretor', 'B' => 'Corretor', 'C' => 'ID Contrato', 'D' => 'Supervisor', 'E' => 'Rota', 'F' => 'Banco', 'G' => 'Nº Contrato', 'H' => 'Data Emissão', 'I' => 'Data Liberação', 'J' => 'CPF', 'K' => 'Cliente', 'L' => 'Convênio', 'M' => 'Tabela', 'N' => 'Tipo', 'O' => 'Prazo', 'P' => 'Status', 'Q' => 'Valor Bruto', 'R' => 'Valor Líquido', 'S' => 'Data Comissão', 'T' => 'Parcela', 'U' => 'RCO', 'V' => 'Data Saldo', 'W' => 'Valor Lançamento', 'X' => 'Tipo Remuneração', 'Y' => 'Natureza', 'Z' => 'Base comissão prevista', 'AA' => 'Comissão Prevista', 'AB' => 'Vlr. Comissão Prevista', 'AC' => 'Base Comissão Recebida', 'AD' => 'Vlr. Comissão Recebida', 'AE' => 'Diferença', 'AF' => 'Base Comissão Paga', 'AG' => 'Comissão Paga', 'AH' => 'Vlr. Comissão Paga', 'AI' => 'Spread', 'AJ' => 'Data Pagamento Corretor', 'AK' => 'Indicador', )) ); } public function exportarRecebimentoGenerico($paginatorContrato = null) { $ns = new Zend_Session_Namespace("exportar_excel"); foreach ( $paginatorContrato as $contrato ) { $contratoTmp = $contrato; //forçar para buscar a comissão prevista (new Model_DbTable_Contrato())->getComissaoCorretorAndEmpresa($contratoTmp, 2); $contrato['comissao_prevista'] = String_Refatorar::parseStringToFloat($contratoTmp['comissao_empresa']); $contrato['bonus_previsto'] = String_Refatorar::parseStringToFloat($contratoTmp['bonus_empresa']); $contrato['adiantamento_previsto'] = String_Refatorar::parseStringToFloat($contratoTmp['adiantamento_comissao_empresa']); unset($contratoTmp); switch ($contrato['tipo_remuneracao']) { case 2: //Diferimento $percentual = $contrato['diferimento_previsto'] / $contrato['prazo']; $base = $contrato['base_comissao_empresa_valor']; break; case 3: //Adiantamento $percentual = $contrato['adiantamento_previsto']; $base = $contrato['base_comissao_empresa_adiantamento']; break; case 4: //Bônus $percentual = $contrato['bonus_previsto']; $base = $contrato['base_comissao_empresa_bonus']; break; default : //À vista $percentual = $contrato['tipo_natureza'] == 1 || empty($contrato['tipo_natureza']) ? $contrato['comissao_prevista'] : 0; $base = $contrato['base_comissao_empresa_valor']; } $valorFixo = $contrato['tipo_remuneracao'] == 1 ? $contrato['valor_fixo_empresa'] : 0; $comissaoPrevista = $valorFixo + ($percentual * $base/100); $baseRecebida = $contrato['base_recebida'] ?: $base; //se for Diferimento tem que dividir pelo prazo do contrato $calculoComissao = ($contrato['tipo_remuneracao'] == 2) ? ($contrato['comissao_recebida'] * $baseRecebida / 100 / $contrato['prazo']) : ($contrato['comissao_recebida'] * $baseRecebida / 100); $comissaoRecebida = $valorFixo + $calculoComissao; $ns->exportar_excel[] = implode(';', array( $contrato['corretor_id'], $contrato['corretor'], $contrato['id_contrato'], $contrato['supervisor'], $contrato['rota'], $contrato['banco'], $contrato['numero_contrato'], $contrato['data_emissao'], $contrato['data_liberacao'], $contrato['cpf_cliente'], $contrato['cliente'], $contrato['convenio'], $contrato['tabela'], $contrato['tipo'], $contrato['prazo'], $contrato['status_proposta_nome'], number_format($contrato['valor_bruto'], 2, ',', '.'), number_format($contrato['valor_liquido'], 2, ',', '.'), $contrato['data_recebimento_comissao'], $contrato['parcelas'], number_format($contrato['rco'], 2, ',', '.'), $contrato['data_saldo'], number_format($contrato['valor_lancamento'], 2, ',', '.'), $contrato['tipo_remuneracao_descricao'], $contrato['natureza_descricao'], number_format($base, 2, ',', '.'), number_format($percentual, 2, ',', '.'), number_format($comissaoPrevista, 2, ',', '.'), number_format($baseRecebida, 2, ',', '.'), number_format($comissaoRecebida, 2, ',', '.'), number_format($comissaoRecebida-$comissaoPrevista, 2, ',', '.'), number_format($contrato['base_comissao_pago_corretor'], 2, ',', '.'), number_format($contrato['percentual_pago_corretor'], 2, ',', '.'), number_format($contrato['valor_pago_corretor'], 2, ',', '.'), number_format($comissaoRecebida-$contrato['valor_pago_corretor'], 2, ',', '.'), $contrato['data_quitacao_corretor'], $contrato['indicador'], )); } $ns->exportar_excel['relatorio_excel'] = 'recebimento-generico'; return $ns->exportar_excel; } /** * Retorna uma lista de contratos que ainda não tiveram a comissão paga ao indicador * @param array $fields * @param string $order */ public function getComissaoPagarIndicador(array $fields, $page = null) { $grupoIndicador = Model_GrupoComissao::getGrupoByCorretor($fields['indicador_id']); if (empty($grupoIndicador) || empty($grupoIndicador->comissao_indicador)) { throw new Exception('Indicador não possui comissionamento informado.'); } $dbtable = new Model_DbTable_Contrato(); //SITUACAO INDICADOR $selectProtocolosCorretor = $dbtable->getAdapter()->select()->from('tb_protocolo_contrato', [ 'contrato_id', 'percentual', 'base_comissao', 'situacao' ]) ->where('excluido <> 1') ->group('contrato_id'); //SITUACAO INDICADOR $selectProtocolosIndicador = $dbtable->getAdapter()->select()->from('tb_protocolo_pagamento_indicador_itens', [ 'contrato_id', 'protocolo_id', 'valor_total' => 'SUM(valor_comissao)', 'negativos' => 'SUM(if(valor_comissao < 0, 1, 0))', 'positivos' => 'SUM(if(valor_comissao >= 0, 1, 0))' ]) ->where('excluido <> 1') ->group('contrato_id'); //Contratos estornados para o corretor e pagos ao indicador - Exibir para estornar $estorno = "protocolos_indicador_itens.valor_total > 0 AND protocolos_corretor.situacao IN ('Pendência de físico', 'TED devolvida', 'Estorno')"; //Contratos devolvidos para o corretor e estornados para o indicador - Exibir para devolver $devolucao = "protocolos_indicador_itens.valor_total <= 0 AND protocolos_indicador_itens.valor_total IS NOT NULL" . " AND protocolos_indicador_itens.negativos > 0 AND protocolos_corretor.situacao IN ('Pendência de físico', 'TED devolvida', 'Estorno', 'Devolução')"; //Contratos estornados para o corretor que ainda não foram pagos para o indicador - Não exibir $naoPagoEstonado = "protocolos_indicador_itens.contrato_id IS NULL AND protocolos_corretor.situacao IN ('Pendência de físico', 'TED devolvida', 'Estorno')"; //Contratos devolvidos para o corretor que ainda não foram pagos para o indicador - Exibir para pagamento $naoPagoDevolvido = "protocolos_indicador_itens.contrato_id IS NULL AND protocolos_corretor.situacao = 'Devolução'"; //Contratos pagos que possuem qtd de protocolos de pagamento positivos maiores que negativos ou pendencias - Não exibir $pagamentoComissao = "(protocolos_indicador_itens.contrato_id IS NOT NULL AND (protocolos_indicador_itens.valor_total > 0" . " OR protocolos_indicador_itens.positivos > protocolos_indicador_itens.negativos))" . " OR (contratos.cobranca_banco = 1)" . " OR (contratos.cobranca_promotora = 1)" . " OR (contratos.estornado = 1)" . " OR (contratos.data_ted_devolvida <> '0000-00-00' and contratos.data_ted_devolvida IS NOT NULL)"; $columns = [ 'empresa' => 'empresas.nome', 'contratos.numero_contrato', 'corretor' => 'CONVERT(corretores.nome USING utf8)', 'grupo_corretor' => 'grupos_comissao.descricao', 'banco_id' => 'bancos.id', 'banco' => 'bancos.nome', 'imposto' => 'bancos.imposto', 'cpf' => 'clientes.cpf', 'convenio' => 'CONVERT(convenios.nome USING utf8)', 'produto' => 'produtos.tipo', 'tabela' => 'CONVERT(tabelas.nome USING utf8)', 'contratos.prazo', 'comissao_corretor' => 'protocolos_corretor.percentual', 'comissao_grupo_indicador' => 'grupos_comissao_indicador.comissao_indicador', 'incidencia_comissao_indicador' => 'grupos_comissao_indicador.incidencia_comissao_indicador', 'comissao_empresa' => 'contratos.comissao_empresa', 'valor_base_comissao' => 'protocolos_corretor.base_comissao', 'id_contrato' => 'contratos.id', 'contratos.tipo', 'cliente_id' => 'contratos.cliente_id', 'indicador_id' => 'indicadores.id', new Zend_Db_Expr("CASE WHEN ($estorno) THEN 'Estorno' WHEN ($devolucao) THEN 'Devolução' WHEN ($naoPagoEstonado) " . "THEN 'Não pago estornado' WHEN ($naoPagoDevolvido) THEN 'Não pago devolvido' WHEN ($pagamentoComissao) " . "THEN 'Pagamento comissão' ELSE '' END as situacao_pagamento"), ]; $select = $this->_getSelectContratos($dbtable, $columns); $select ->joinInner(['indicadores' => 'tb_corretores'], 'corretores.indicador_id = indicadores.id', []) ->joinInner(['protocolos_corretor' => $selectProtocolosCorretor], 'contratos.id = protocolos_corretor.contrato_id', []) ->joinLeft(['grupos_comissao_indicador' => 'tb_grupos_comissao'], 'grupos_comissao_indicador.id = indicadores.grupo_comissao', []) ->joinLeft(['rotas' => 'tb_rotas'], 'corretores.rota_id = rotas.id', []) ->joinLeft(['gerentes_rotas' => 'tb_gerente_rota'], 'rotas.gerente_id = gerentes_rotas.id', []) ->joinLeft(['grupos_comissao' => 'tb_grupos_comissao'], 'grupos_comissao.id = corretores.grupo_comissao', []) ->joinLeft(['gerentes' => 'tb_gerentes'], 'gerentes_rotas.gerente_id = gerentes.id', []) ->joinLeft(['empresas' => 'tb_empresas'], 'contratos.empresa_id = empresas.id', []) ->joinLeft(['produtos' => 'tb_produtos'], 'produtos.id = contratos.produto', []) ->joinLeft(['protocolos_indicador_itens' => $selectProtocolosIndicador], 'contratos.id = protocolos_indicador_itens.contrato_id', ['contrato_id']) ->joinLeft(['protocolos_indicador' => 'tb_protocolo_pagamento_indicador'], 'protocolos_indicador.id = protocolos_indicador_itens.protocolo_id', ['data_pagamento']) ->where('contratos.srcc <> 1') ->group('contratos.id') ->order(['corretores.nome ASC', 'contratos.data_liberacao', 'contratos.id']); $this->_prepareFilterSelect($fields, $select); if ($page) { $paginator = Zend_Paginator::factory($select); $paginator->setCurrentPageNumber($page); $paginator->setItemCountPerPage(100); return $paginator; } return $dbtable->getAdapter()->fetchAll($select); } public function contarContratosAtualizarTabela($fields) { if ((!empty($fields['data_emissao_de']) && empty($fields['data_emissao_a'])) || (empty($fields['data_emissao_de']) && !empty($fields['data_emissao_a']))) { throw new Exception('Você precisa informar um período corretamente.'); } if ((!empty($fields['data_liberacao_de']) && empty($fields['data_liberacao_a'])) || (empty($fields['data_liberacao_de']) && !empty($fields['data_liberacao_a']))) { throw new Exception('Você precisa informar um período corretamente.'); } if (empty($fields['tabela_id'])) { throw new Exception('Por favor informe uma tabela para atualização.'); } $bancoId = Model_Banco::bancoPorNome('BANCO DO BRASIL'); $where = null; $params[] = "banco_id = " . $bancoId; if (!empty($fields['status_proposta'])) { $params[] = "status_proposta IN(" . implode(',', $fields['status_proposta']) . ")"; } if (!empty($fields['data_emissao_de'])) { $data = new Zend_Date($fields['data_emissao_de'], 'dd/MM/yyyy'); $params[] = "data_emissao >= '" . $data->get('yyyy-MM-dd') . "'"; } if (!empty($fields['data_emissao_a'])) { $data = new Zend_Date($fields['data_emissao_a'], 'dd/MM/yyyy'); $params[] = "data_emissao <= '" . $data->get('yyyy-MM-dd') . "'"; } if (!empty($fields['data_liberacao_de'])) { $data = new Zend_Date($fields['data_liberacao_de'], 'dd/MM/yyyy'); $params[] = "data_liberacao >= '" . $data->get('yyyy-MM-dd') . "'"; } if (!empty($fields['data_liberacao_a'])) { $data = new Zend_Date($fields['data_liberacao_a'], 'dd/MM/yyyy'); $params[] = "data_liberacao <= '" . $data->get('yyyy-MM-dd') . "'"; } if (count($params) > 0) $where = implode( " AND ", $params); return $this->listar($where); } public function atualizarTabelaContrato(array $contrato, int $tabelaId) { if (empty($contrato) || empty($tabelaId)) { return; } $dadosTabela = (new Model_Tabela())->exibir($tabelaId); if (empty($dadosTabela)) { return; } if ($contrato['convenio_id'] != $dadosTabela->convenio_id) { return; } $contrato['tabela_id'] = $tabelaId; return $this->salvar((new Model_Contrato($contrato))); } }
💾 保存文件
← 返回文件管理器