✏️ 正在编辑: Empresa.php
路径:
/srv/systems_dir/yuppiecred-lidernegocios/application/models/Empresa.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php class Model_Empresa extends Model_PessoaJuridica { private $_obs; private $_performance; private $_autentiqueToken; private $_a2f; public function getObs() { return $this->_obs; } public function setObs($obs) { $this->_obs = $obs; } public function getPerformance() { return $this->_performance; } public function setPerformance($performance) { $this->_performance = $performance; } public function getAutentiqueToken() { return $this->_autentiqueToken; } public function setAutentiqueToken($autentiqueToken) { $this->_autentiqueToken = $autentiqueToken; } public function getA2f() { return $this->_a2f; } public function setA2f($a2f) { $this->_a2f = $a2f; } public function __construct($options = null) { if( is_array($options) ){ $this->setOptions($options); } } public function setOptions(array $options) { $methods = get_class_methods($this); foreach ( $options 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_Empresa(); $info = $dbtable->info(); $methods = get_class_methods($this); $data = array(); foreach ( $info['cols'] as $key ) { $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(); } } $data['tipo'] = "EMPRESA"; return $data; } /** * Insere ou altera a empresa passada por parâmetro * @param Model_Empresa $empresa */ public function salvar(Model_Empresa $empresa) { $dbtable = new Model_DbTable_Empresa(); if( $empresa->getId() > 0 ){ $result = $dbtable->update($empresa->_toArray(), 'id = ' . $empresa->getId()); if( $result > 0 ){ return $empresa->getId(); } else { return null; } } else { return $dbtable->insert($empresa->_toArray()); } } /** * Exclui a empresa passada por parâmetro * @param int $id * @return int The number of rows deleted */ public function excluir($id) { if( $id > 0 ){ $dbtable = new Model_DbTable_Empresa(); return $dbtable->delete("id = " . $id); } return null; } /** * Retorna uma lista de empresas * @param string $where * @param string $order * @param int $count * @param int $offset * @return array */ public function listar($fields = null, $order = "nome ASC") { $params = array(); $where = null; if (!empty($fields['nome'])) { $params[] = "nome LIKE '%" . $fields['nome'] . "%'"; } if (!empty($fields['sincronizacao'])) { $params[] = "codigo_promotora IS NOT NULL AND codigo_promotora <> ''"; } if (!empty($fields['empresa'])) { $params[] = "id = {$fields['empresa']}"; } if (!empty($fields['cnpj'])){ $params[] = "cnpj = '" . String_Refatorar::soNumeros($fields['cnpj']) . "'"; } if (!empty($fields['autentique_token'])){ $params[] = "autentique_token = '" . $fields['autentique_token'] . "'"; } if( count($params) > 0 ) $where = implode(" AND ", $params); $dbtable = new Model_DbTable_Empresa(); return $dbtable->fetchAll($where, $order); } /** * 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_Empresa(); return $dbtable->fetchRow("id = " . $id); } /** * Exibe as comissões recebidas e a receber agrupadas por banco * @return Zend_Db_Table_Rowset_Abstract | array | null */ public function getMovimentacaoComissoes() { $contrato = new Model_DbTable_Contrato(); $columnsComissao = array( "contratos.banco_id", "total_comissao" => "((base_comissao_empresa_valor*comissao_empresa/100) " . "+ (base_comissao_empresa_bonus*bonus_empresa/100) " . "+ (base_comissao_empresa_adiantamento*adiantamento_comissao_empresa/100))" ); $selectContrato = $contrato->getAdapter()->select()->from(array("contratos" => "tb_contratos"), $columnsComissao) ->joinInner(array("clientes" => "tb_clientes"), "contratos.cliente_id = clientes.id", array()) ->where("contratos.excluido<>1") ->group("contratos.banco_id"); $selectComissaoReceber = clone $selectContrato; $selectComissaoReceber->where("contratos.data_recebimento_comissao IS NULL OR contratos.data_recebimento_comissao = '0000-00-00'") ->where("data_liberacao IS NOT NULL AND data_liberacao <> '0000-00-00'") ->having("total_comissao > 0"); $dataInicialMes = Zend_Date::now()->setDay(1)->get('yyyy-MM-dd'); $selectComissaoRecebida = clone $selectContrato; $selectComissaoRecebida->where("contratos.data_recebimento_comissao IS NOT NULL AND data_recebimento_comissao <> '0000-00-00'") ->where("contratos.data_liberacao >= '{$dataInicialMes}'") ->having("total_comissao > 0"); $select = $contrato->getAdapter()->select()->from(array( 'bancos' => "tb_bancos" ), array( 'banco' => 'nome' )) ->joinLeft(array( "comissoes_recebidas" => $selectComissaoRecebida ), "bancos.id = comissoes_recebidas.banco_id", array( 'total_comissao_recebida' => 'total_comissao' )) ->joinLeft(array( "comissoes_receber" => $selectComissaoReceber ), "bancos.id = comissoes_receber.banco_id", array( 'total_comissao_receber' => 'total_comissao' )) ->having("total_comissao_recebida > 0 OR total_comissao_receber > 0"); return $contrato->getAdapter()->fetchAll($select); } protected function _getComissoesRecebidas($mes) { $contrato = new Model_DbTable_Contrato(); //comissoes recebidas no mes $select = $contrato->getAdapter()->select() ->from(array( 'contratos' => 'tb_contratos' ), array( 'total_comissao' => 'SUM(base_comissao_empresa_valor*comissao_empresa/100)' )) ->joinInner(array( 'clientes' => 'tb_clientes' ), 'clientes.id = contratos.cliente_id', array()) ->where('contratos.excluido <> 1') ->where('clientes.excluido <> 1') ->where("DATE_FORMAT(data_recebimento_comissao, '%Y-%m') = ?", $mes); $dados = $contrato->getAdapter()->fetchRow($select); if( isset($dados['total_comissao']) ){ return $dados['total_comissao']; } return 0; } protected function _getReceitasAvulsas($mes) { $contrato = new Model_DbTable_Contrato(); //receita avulso do mês $select = $contrato->getAdapter()->select() ->from('tb_lancamentos', array( 'total_receitas' => 'SUM(valor_pago)' )) ->where('excluido <> 1') ->where('tipo = ?', 'RECEITA') ->where("DATE_FORMAT(data_pagamento, '%Y-%m') = ?", $mes); $dados = $contrato->getAdapter()->fetchRow($select); if( isset($dados['total_receitas']) ){ return $dados['total_receitas']; } return 0; } protected function _getBonusRecebidos($mes) { $contrato = new Model_DbTable_Contrato(); //bônus do mês $select = $contrato->getAdapter()->select() ->from(array( 'contratos' => 'tb_contratos' ), array( 'total_bonus' => 'SUM(base_comissao_empresa_bonus*bonus_empresa/100)' )) ->joinInner(array( 'clientes' => 'tb_clientes' ), 'clientes.id = contratos.cliente_id', array()) ->where('contratos.excluido <> 1') ->where('clientes.excluido <> 1') ->where("DATE_FORMAT(data_recebimento_bonus, '%Y-%m') = ?", $mes); $dados = $contrato->getAdapter()->fetchRow($select); if( isset($dados['total_bonus']) ){ return $dados['total_bonus']; } return 0; } protected function _getComissoesPagasCorretores($mes) { //comissões pagas no mês $dateMes = new Zend_Date($mes, 'yyyy-MM'); $dataQuitacaoA = clone $dateMes; $dataQuitacaoA->addMonth(1)->setDay(1)->subDay(1); $protocoloPagamento = new Model_ProtocoloPagamento(); $protocolosQuitados = $protocoloPagamento->listarProtocolosQuitados(array( 'data_quitacao_de' => '01/' . $dateMes->get('MM/yyyy'), 'data_quitacao_a' => $dataQuitacaoA->get('dd/MM/yyyy'), )); $comissoesPagas = 0; foreach ( $protocolosQuitados as $protocoloQuitado ) { $comissoesPagas += $protocoloQuitado['total_comissao'] - $protocoloQuitado['desconto'] + $protocoloQuitado['acrescimo']; } return $comissoesPagas; } protected function _getComissoesPagasSupervisores($mes) { //comissões pagas no mês $dateMes = new Zend_Date($mes, 'yyyy-MM'); $dataPagamento = clone $dateMes; $dataPagamento->addMonth(1)->setDay(1)->subDay(1); $protocoloPagamento = new Model_ProtocoloPagamentoSupervisor(); $protocolos = $protocoloPagamento->listarProtocolos(array( 'data_pagamento_de' => '01/' . $dateMes->get('MM/yyyy'), 'data_pagamento_a' => $dataPagamento->get('dd/MM/yyyy'), )); $comissoesPagas = 0; foreach ( $protocolos as $p ) { $baseComissao = $p['total_base_comissao'] - $p['desconto'] + $p['acrescimo']; $comissoesPagas += $p['vl_comissao']; } return $comissoesPagas; } protected function _getComissoesPagasGerentes($mes) { //comissões pagas no mês $dateMes = new Zend_Date($mes, 'yyyy-MM'); $dataPagamento = clone $dateMes; $dataPagamento->addMonth(1)->setDay(1)->subDay(1); $protocoloPagamento = new Model_ProtocoloPagamentoGerente(); $protocolos = $protocoloPagamento->listarProtocolos(array( 'data_pagamento_de' => '01/' . $dateMes->get('MM/yyyy'), 'data_pagamento_a' => $dataPagamento->get('dd/MM/yyyy'), )); $comissoesPagas = 0; foreach ( $protocolos as $p ) { $baseComissao = $p['total_base_comissao'] - $p['desconto'] + $p['acrescimo']; $comissoesPagas += ($baseComissao * $p['valor_comissao'] / 100); } return $comissoesPagas; } protected function _getDespesasAdministrativasPagas($mes) { $lancamento = new Model_DbTable_Lancamento(); //despesas administrativas do mês $select = $lancamento->getAdapter()->select() ->from('tb_lancamentos', array( 'total_despesas' => 'SUM(valor_pago)' )) ->where('excluido <> 1') ->where('tipo = ?', 'DESPESA') ->where("DATE_FORMAT(data_pagamento, '%Y-%m') = ?", $mes); $dados = $lancamento->getAdapter()->fetchRow($select); if( isset($dados['total_despesas']) ){ return $dados['total_despesas']; } return 0; } protected function _getBonificacoes($mes) { $dbtable = new Model_DbTable_Bonificacao(); //despesas administrativas do mês $select = $dbtable->getAdapter()->select() ->from(array( 'tb_bonificacao' )) ->where("DATE_FORMAT(data_inicial, '%Y-%m') <= ?", $mes) ->where("DATE_FORMAT(data_final, '%Y-%m') >= ?", $mes) ->where('excluido <> 1'); $bonificacoes = $dbtable->getAdapter()->fetchAll($select, null, Zend_Db::FETCH_OBJ); $contratos = array(); foreach ( $bonificacoes as $bonificacao ) { $selectConvenios = $dbtable->getAdapter()->select() ->from('tb_bonificacao_convenio', array( 'convenio_id' )) ->where('bonificacao_id = ?', $bonificacao->id) ->where('excluido <> 1'); $selectContratos = $dbtable->getAdapter()->select() ->from('tb_contratos', 'SUM(valor_liquido)') ->where('banco_id = ?', $bonificacao->banco_id) ->where('convenio_id IN (?)', $selectConvenios) ->where('data_emissao >= ?', $bonificacao->data_inicial) ->where('data_emissao <= ?', $bonificacao->data_final) ->where('excluido <> 1'); $valor = $dbtable->getAdapter()->fetchOne($selectContratos); $contratos[$bonificacao->descricao] = $valor * $bonificacao->percentual; } return $contratos; } public function getComposicaoSaldo($mes) { $contrato = new Model_DbTable_Contrato(); //receitas $comissoesRecebidas = $this->_getComissoesRecebidas($mes); $bonusRecebidos = $this->_getBonusRecebidos($mes); $receitasAvulsas = $this->_getReceitasAvulsas($mes); $bonificacoes = $this->_getBonificacoes($mes); //despesas $comissoesCorretores = $this->_getComissoesPagasCorretores($mes); $despesasAdministrativas = $this->_getDespesasAdministrativasPagas($mes); $comissoesSupervisores = $this->_getComissoesPagasSupervisores($mes); $comissoesGerentes = $this->_getComissoesPagasGerentes($mes); $saldo = (object) array( 'receitas' => (object) array( 'comissoes_recebidas' => $comissoesRecebidas, 'bonus_recebido' => $bonusRecebidos, 'receitas_avulsas' => $receitasAvulsas, 'bonificacoes' => $bonificacoes ), 'despesas' => (object) array( 'comissoes_corretores' => $comissoesCorretores, 'comissoes_supervisores' => $comissoesSupervisores, 'comissoes_gerentes' => $comissoesGerentes, 'despesas_administrativas' => $despesasAdministrativas, ), ); $saldo->receitas->total = $saldo->receitas->receitas_avulsas + $saldo->receitas->bonus_recebido + $saldo->receitas->comissoes_recebidas + array_sum($saldo->receitas->bonificacoes); $saldo->despesas->total = array_sum((array) $saldo->despesas); $saldo->saldo = $saldo->receitas->total - $saldo->despesas->total; return $saldo; } public function getByCodigoPromotora($codigoPromotora) { $dbtable = new Model_DbTable_Empresa(); return $dbtable->fetchRow("codigo_promotora = '" . $codigoPromotora . "'"); } public function getComissao($empresaId, $bancoId, $tabelaId, $convenioId, $codigoProduto, $prazo, $dataEmissao, $valorLiquido = 0, $baseComissao = "VALOR LIQUIDO", $campo = 'comissao', $tipoContrato = null) { $valorComissao = 0; if( $codigoProduto == null ){ return null; } else { if( $empresaId > 0 && $bancoId > 0 && $tabelaId > 0 && $convenioId > 0 && $prazo >= 0 && $dataEmissao != null ){ $comissionamento = new Model_DbTable_Comissionamento(); $banco = new Model_Banco(); $dadosBanco = $banco->exibir($bancoId); $selectProduto = $comissionamento->getAdapter()->select()->from(array( 'produtos' => 'tb_produtos' ), array( 'tipo' )) ->where("codigo = '" . $codigoProduto . "'") ->where('banco_id = ' . $bancoId) ->where("produtos.excluido <> 1"); if( $tipoContrato ){ $selectProduto->where("tipo = '" . $tipoContrato . "'"); } $tipoProduto = $comissionamento->getAdapter()->fetchCol($selectProduto); if( !is_array($tipoProduto) || (is_array($tipoProduto) && !isset($tipoProduto[0])) ){ return 0; } //retirado where de empresa_id $where = "banco_id = " . $bancoId . " AND tabela_id = '" . $tabelaId . "'" . " AND convenio_id = '" . $convenioId . "'" . " AND (prazo_de <= '" . $prazo . "' AND prazo_a >= '" . $prazo . "')" . " AND tipo_produto = '" . $tipoProduto[0] . "'" . " AND base_comissao_empresa = '" . $baseComissao . "'"; if( $dadosBanco->importacao_valor_contrato > 0 && $valorLiquido > 0 ){ $where .= " AND (((valor_de = 0 AND valor_a = 0 OR valor_de IS NULL AND valor_a IS NULL)) OR (valor_de <= " . str_replace(array( '.', ',' ), array( '', '.' ), $valorLiquido) . " AND valor_a >= " . str_replace(array( '.', ',' ), array( '', '.' ), $valorLiquido) . "))"; } $dadosComissao = $comissionamento->fetchRow($where, 'id DESC'); if( $dadosComissao != null ){ $comissaoPercentual = $dadosComissao->findDependentRowset('Model_DbTable_ComissionamentoPercentual'); if( count($comissaoPercentual) > 0 ){ foreach ( $comissaoPercentual as $comissao ) { if( ($dataEmissao >= $comissao['data_inicial'] && $comissao['data_final'] == null) || ($dataEmissao >= $comissao['data_inicial'] && $dataEmissao <= $comissao['data_final']) ){ $valorComissao = number_format($comissao['comissao'], 2, ',', '.'); break; } } } } } } if( $campo == 'comissao' ){ return $valorComissao; } if( $campo == 'diferido' ){ return $comissao['diferido']; } } public function getBaseComissao($empresaId, $bancoId, $tabelaId, $convenioId, $codigoProduto, $prazo, $dataEmissao, $valorLiquido = 0) { $tipoComissaoValor = null; if( $codigoProduto == null ){ return null; } else { if( $empresaId > 0 && $bancoId > 0 && $tabelaId > 0 && $convenioId > 0 && $prazo != null && $dataEmissao != null ){ $comissionamento = new Model_DbTable_Comissionamento(); $selectProduto = $comissionamento->getAdapter()->select()->from(array( 'produtos' => 'tb_produtos' ), array( 'tipo' )) ->where("codigo = '" . $codigoProduto . "'") ->where('banco_id = ' . $bancoId) ->where("produtos.excluido <> 1"); $tipoProduto = $comissionamento->getAdapter()->fetchCol($selectProduto); if( !is_array($tipoProduto) || (is_array($tipoProduto) && !isset($tipoProduto[0])) ){ return 0; } //retirado where de empresa_id $where = "banco_id = " . $bancoId . " AND tabela_id = '" . $tabelaId . "'" . " AND convenio_id = " . $convenioId . " AND (prazo_de <= '" . $prazo . "' AND prazo_a >= '" . $prazo . "')" . " AND tipo_produto = '" . $tipoProduto[0] . "'"; $dadosComissao = $comissionamento->fetchRow($where, "id DESC"); if( $dadosComissao != null ){ $tipoComissaoValor = $dadosComissao->base_comissao_empresa; } } } return $tipoComissaoValor; } public static function empresaPorNome($nome) { $dbtable = new Model_DbTable_Empresa(); $dados = $dbtable->fetchRow("nome = '$nome'"); return $dados ? $dados['id'] : null; } public function getValorFixo($empresaId, $bancoId, $tabelaId, $convenioId, $codigoProduto, $prazo, $dataEmissao, $valorLiquido = 0) { $valorFixo = 0; if( $codigoProduto == null ){ return null; } else { if( $empresaId > 0 && $bancoId > 0 && $tabelaId > 0 && $convenioId > 0 && $prazo != null && $dataEmissao != null ){ $comissionamento = new Model_DbTable_Comissionamento(); $selectProduto = $comissionamento->getAdapter()->select()->from(array( 'produtos' => 'tb_produtos' ), array( 'tipo' )) ->where("codigo = '" . $codigoProduto . "'") ->where('banco_id = ' . $bancoId) ->where("produtos.excluido <> 1"); $tipoProduto = $comissionamento->getAdapter()->fetchCol($selectProduto); if( !is_array($tipoProduto) || (is_array($tipoProduto) && !isset($tipoProduto[0])) ){ return 0; } //retirado where de empresa_id $where = "banco_id = " . $bancoId . " AND tabela_id = '" . $tabelaId . "'" . " AND convenio_id = " . $convenioId . " AND (prazo_de <= '" . $prazo . "' AND prazo_a >= '" . $prazo . "')" . " AND tipo_produto = '" . $tipoProduto[0] . "'"; $dadosComissao = $comissionamento->fetchRow($where, "id DESC"); if( $dadosComissao != null ){ $valor = $dadosComissao->valor_fixo ?? 0; $valorFixo = Core_Util::filterValor($valor); } } } return $valorFixo; } public static function getMetaEmpresa() { $dbtable = new Model_DbTable_Empresa(); $result = $dbtable->fetchRow(); return $result ? $result->meta : 0; } /** * @return array */ public function getPrimeiraEmpresaAtiva(): array { return (table('empresa'))->findPrimeiraEmpresaAtiva(); } /** * @param int|null $promotora * @return array|null */ public function getEmpresaByCodigoPromotora(?int $promotora): ?array { if (!$promotora) { return null; } return table('empresa')->findByCodigoPromotora($promotora); } }
💾 保存文件
← 返回文件管理器