✏️ 正在编辑: ComissionamentoGrupoPercentual.php
路径:
/srv/systems_dir/yuppiecred-bkp/application/models/ComissionamentoGrupoPercentual.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php class Model_ComissionamentoGrupoPercentual { private $_id; private $_comissionamentoId; private $_dataInicial; private $_dataFinal; private $_dataBase; private $_comissao; private $_bonus; private $_diferimento; private $_adiantamento; private $_baseComissaoValor; private $_baseComissaoBonus; private $_baseComissaoDiferimento; private $_baseComissaoAdiantamento; private $_tabelaAtivada; public function getId() { return $this->_id; } public function setId($id) { $this->_id = $id; return $this; } public function getComissionamentoId() { return $this->_comissionamentoId; } public function setComissionamentoId($comissionamentoId) { $this->_comissionamentoId = $comissionamentoId; return $this; } public function getDataInicial() { return $this->_dataInicial; } public function setDataInicial($dataInicial) { if( !empty($dataInicial) ){ try { $data = new Zend_Date($dataInicial, Zend_Date::DATES, 'pt'); $dataInicial = $data->toString('yyyy-MM-dd'); } catch ( Zend_Date_Exception $e ) { echo $e->getMessage(); $dataInicial = null; } } else { $dataInicial = null; } $this->_dataInicial = $dataInicial; return $this; } public function getDataFinal() { return $this->_dataFinal; } public function setDataFinal($dataFinal) { if( !empty($dataFinal) ){ try { $data = new Zend_Date($dataFinal, Zend_Date::DATES, 'pt'); $dataFinal = $data->toString('yyyy-MM-dd'); } catch ( Zend_Date_Exception $e ) { echo $e->getMessage(); $dataFinal = null; } } else { $dataFinal = null; } $this->_dataFinal = $dataFinal; return $this; } public function getDataBase() { return $this->_dataBase; } public function setDataBase($dataBase) { $this->_dataBase = $dataBase == "L" ? "L" : "E"; } public function getComissao() { return $this->_comissao; } public function setComissao($comissao) { $this->_comissao = String_Refatorar::parseStringToFloat($comissao); } public function getBonus() { return $this->_bonus; } public function setBonus($bonus) { $this->_bonus = String_Refatorar::parseStringToFloat($bonus); } public function getDiferimento() { return $this->_diferimento; } public function setDiferimento($diferimento) { $this->_diferimento = String_Refatorar::parseStringToFloat($diferimento); } public function getAdiantamento() { return $this->_adiantamento; } public function setAdiantamento($adiantamento) { $this->_adiantamento = String_Refatorar::parseStringToFloat($adiantamento); } 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 getBaseComissaoDiferimento() { return $this->_baseComissaoDiferimento; } public function setBaseComissaoDiferimento($baseComissaoDiferimento) { $this->_baseComissaoDiferimento = $baseComissaoDiferimento; } public function getBaseComissaoAdiantamento() { return $this->_baseComissaoAdiantamento; } public function setBaseComissaoAdiantamento($baseComissaoAdiantamento) { $this->_baseComissaoAdiantamento = $baseComissaoAdiantamento; } public function getTabelaAtivada() { return $this->_tabelaAtivada; } public function setTabelaAtivada($tabelaAtivada) { $this->_tabelaAtivada = $tabelaAtivada; } 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_ComissionamentoGrupoPercentual(); $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(); } } return $data; } /** * Insere ou altera o registro passado por parâmetro * @param Model_ComissionamentoGrupoPercentual $comissao */ public function salvar(Model_ComissionamentoGrupoPercentual $comissao) { $dbtable = new Model_DbTable_ComissionamentoGrupoPercentual(); if( $comissao->getId() > 0 ){ $dbtable->update($comissao->_toArray(), "id = " . $comissao->getId()); return $comissao->getId(); } else { return $dbtable->insert($comissao->_toArray()); } } /** * 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_ComissionamentoGrupoPercentual(); return $dbtable->delete("id = " . $id); } return null; } /** * Retorna uma lista * @param string $where * @param string $order * @param int $count * @param int $offset * @return array */ public function listar(array $fields, $page = null, $limit = null, $order = ['banco', 'convenio', 'tipo_produto', 'comissao DESC'], $range = null) { $dbtable = new Model_DbTable_ComissionamentoGrupoPercentual(); $colunas = array( 'percentuais' => array( 'comissao', 'percentuais.id', 'data_cadastro', 'data_inicial', 'comissionamento_id', 'data_final', 'data_base', 'bonus', 'diferimento', 'adiantamento', 'base_comissao_valor', 'base_comissao_bonus', 'base_comissao_diferimento', 'base_comissao_adiantamento', ), 'comissionamento' => array( 'produto', 'prazo', 'tipo_produto', 'valor_de', 'valor_a', 'prazo_de', 'prazo_a', 'taxa_contrato_de', 'taxa_contrato_a', 'base_comissao', 'valor_fixo', 'idade_inicial', 'idade_final', 'incidir_sobre' ), 'tabelas' => array( 'tabela' => 'nome', 'tabela_codigo' => 'codigo', 'tabela_info_adicional' => 'informacao_adicional', 'tabela_id' => 'id' ), 'convenios' => array( 'convenio' => 'nome', 'convenio_id' => 'id' ), 'bancos' => array( 'banco' => 'nome', 'banco_id' => 'id' ), 'grupos' => array( 'grupo' => 'descricao' ) ); $select = $dbtable->getAdapter()->select() ->from(array( 'percentuais' => 'tb_comissionamento_grupo_percentual' ), $colunas['percentuais']) ->joinInner(array( 'comissionamentos' => 'tb_comissionamento_grupo' ), 'percentuais.comissionamento_id = comissionamentos.id', $colunas['comissionamento']) ->joinInner(array( 'tabelas' => 'tb_tabelas' ), 'comissionamentos.tabela_id = tabelas.id', $colunas['tabelas']) ->joinInner(array( 'convenios' => 'tb_convenios' ), 'comissionamentos.convenio_id = convenios.id', $colunas['convenios']) ->joinInner(array( 'bancos' => 'tb_bancos' ), 'comissionamentos.banco_id = bancos.id', $colunas['bancos']) ->joinInner(array( 'grupos' => 'tb_tipos' ), 'grupos.id = comissionamentos.grupo_id', $colunas['grupos']) ->joinLeft(['comissionamento_empresa' => 'tb_comissionamento'], 'comissionamento_empresa.banco_id = comissionamentos.banco_id AND comissionamento_empresa.convenio_id = comissionamentos.convenio_id AND comissionamento_empresa.tabela_id = comissionamentos.tabela_id AND comissionamento_empresa.tipo_produto = comissionamentos.tipo_produto AND comissionamento_empresa.prazo_de = comissionamentos.prazo_de AND comissionamento_empresa.prazo_a = comissionamentos.prazo_a AND comissionamento_empresa.taxa_contrato_de = comissionamentos.taxa_contrato_de AND comissionamento_empresa.taxa_contrato_a = comissionamentos.taxa_contrato_a AND comissionamento_empresa.valor_de = comissionamentos.valor_de AND comissionamento_empresa.valor_a = comissionamentos.valor_a AND comissionamento_empresa.excluido <> 1 ', []) ->joinLeft(['comissionamento_empresa_percentual' => 'tb_comissionamento_percentual'], 'comissionamento_empresa_percentual.comissionamento_id = comissionamento_empresa.id AND comissionamento_empresa_percentual.excluido <> 1 AND (comissionamento_empresa_percentual.data_final is null OR comissionamento_empresa_percentual.data_final = 0000-00-00)', ['comissao_empresa' => 'comissionamento_empresa_percentual.comissao', 'bonus_empresa' => 'comissionamento_empresa_percentual.bonus', 'diferimento_empresa' => 'comissionamento_empresa_percentual.diferimento', 'adiantamento_empresa' => 'comissionamento_empresa_percentual.adiantamento']) ->where('comissionamentos.excluido <> 1') ->where('percentuais.excluido <> 1') ->where('tabelas.excluido<>1 AND (tabelas.tabela_desativada IS NULL OR tabelas.tabela_desativada <> 1)') ->where("percentuais.data_final IS NULL OR percentuais.data_final = '0000-00-00'") ->where('bancos.desativar_comissoes <> 1') ->group(array( 'percentuais.id' )) ->order($order); if( Yuppie_Auth::getIdentity()->grupo == 'Corretor' ){ $select->where('comissionamentos.grupo_id = ' . Yuppie_Auth::getIdentity()->grupo_comissao); $select->where("comissionamentos.tipo_produto not in ('PLASTICO', 'ATIVACAO')"); $fields['corretor_id'] = Yuppie_Auth::getIdentity()->id; $dbCorretor = new Model_DbTable_CorretorBancosAtribuidos(); $id = Yuppie_Auth::getIdentity()->id; $bancosAtribuidos = $dbCorretor->fetchPairs('banco_id', "corretor_id = $id"); if( count($bancosAtribuidos) > 0 ) { $select->where('comissionamentos.banco_id IN (' . implode(", ", $bancosAtribuidos) . ')'); } } elseif( Yuppie_Auth::getIdentity()->grupo == 'Callcenter Gerente' ){ $model = new Model_GrupoComissao(); $grupoCallcenter = $model->getIdGrupo("Callcenter"); if( $grupoCallcenter ){ $select->where('comissionamentos.grupo_id = ' . $grupoCallcenter); } else { $select->where('comissionamentos.id IS NULL'); } } elseif( isset(Yuppie_Auth::getIdentity()->corretor_id) && Yuppie_Auth::getIdentity()->corretor_id > 0 ){ $corretor = new Model_Corretor(); $dadosCorretor = $corretor->exibir(Yuppie_Auth::getIdentity()->corretor_id); if( $dadosCorretor ){ $select->where('comissionamentos.grupo_id = ' . $dadosCorretor['grupo_comissao']); } }elseif( Yuppie_Auth::getIdentity()->grupo == 'Supervisor' ){ $select->joinInner(array('corretores' => 'tb_corretores'), "grupos.id = corretores.grupo_comissao", array()) ->joinInner(array("rotas" => "tb_rotas"), "corretores.rota_id = rotas.id", array()); $select->where("rotas.gerente_id = " . Yuppie_Auth::getIdentity()->id); } if( isset($fields['banco_id']) && !empty($fields['banco_id']) ){ $select->where('comissionamentos.banco_id = ?', $fields['banco_id']); } if( isset($fields['convenio_id']) && !empty($fields['convenio_id']) ){ $select->where('comissionamentos.convenio_id = ?', $fields['convenio_id']); } if( isset($fields['tabela_id']) && !empty($fields['tabela_id']) ){ $select->where('comissionamentos.tabela_id = ?', $fields['tabela_id']); } if( isset($fields['grupo_id']) && !empty($fields['grupo_id']) ){ $select->where('comissionamentos.grupo_id = ?', $fields['grupo_id']); } if( isset($fields['produto']) && !empty($fields['produto']) ){ $select->where('comissionamentos.produto = ?', $fields['produto']); } if( isset($fields['prazo']) && !empty($fields['prazo']) ){ $select->where("comissionamentos.prazo_de <= '{$fields['prazo']}'"); $select->where("comissionamentos.prazo_a >= '{$fields['prazo']}'"); } if( isset($fields['prazo_de']) && is_numeric($fields['prazo_de']) && $fields['prazo_de'] >= 0 ){ $select->where('comissionamentos.prazo_de >= ?', $fields['prazo_de']); } if( isset($fields['prazo_a']) && is_numeric($fields['prazo_a']) && $fields['prazo_a'] >= 0 ){ $select->where('comissionamentos.prazo_a <= ?', $fields['prazo_a']); } if( isset($fields['data_de']) && !empty($fields['data_de']) ){ $select->where("percentuais.data_inicial >= STR_TO_DATE('" . $fields['data_de'] . "', '%d/%m/%Y')"); } if( isset($fields['data_a']) && !empty($fields['data_a']) ){ $select->where("percentuais.data_final <= STR_TO_DATE('" . $fields['data_a'] . "', '%d/%m/%Y')"); } if( isset($fields['data_de']) && !empty($fields['data_de']) && isset($fields['data_a']) && !empty($fields['data_a']) ){ $select->where("(percentuais.data_inicial >= STR_TO_DATE(?, '%d/%m/%Y')", $fields['data_de']) ->where("percentuais.data_final <= STR_TO_DATE(?, '%d/%m/%Y'))", $fields['data_a']); } if( isset($fields['comissionamento_id']) && !empty($fields['comissionamento_id']) ){ $select->where('comissionamento_id = ?', $fields['comissionamento_id']); } if( isset($fields['base_comissao']) && !empty($fields['base_comissao']) ){ $select->where('comissionamentos.base_comissao = ?', $fields['base_comissao']); } if( isset($fields['data_final']) && $fields['data_final'] === 'null' ){ $select->where("percentuais.data_final IS NULL OR percentuais.data_final = ?", '0000-00-00'); } if (!empty($fields['corretor_id'])) { $corretorId = $fields['corretor_id']; $modelCorretor = new Model_DbTable_Corretor(); $corretorSelecionado = $modelCorretor->fetchRow("id = " . $corretorId); //busca a comissão individual $comissaoIndividual = new Model_ComissionamentoCorretorPercentual(); $comissoesIndividuais = $comissaoIndividual->listar($fields); if( $comissoesIndividuais ){ foreach( $comissoesIndividuais as $comissaoIndividual ){ $whereIndividual[] = "banco_id = {$comissaoIndividual['banco_id']}"; $whereIndividual[] = "convenio_id = {$comissaoIndividual['convenio_id']}"; $whereIndividual[] = "tabela_id = {$comissaoIndividual['tabela_id']}"; $whereIndividual[] = "tipo_produto = '{$comissaoIndividual['tipo_produto']}'"; $whereIndividual[] = "prazo_de = {$comissaoIndividual['prazo_de']}"; $whereIndividual[] = "prazo_a = {$comissaoIndividual['prazo_a']}"; $whereIndividual[] = "taxa_contrato_de = {$comissaoIndividual['taxa_contrato_de']}"; $whereIndividual[] = "taxa_contrato_a = {$comissaoIndividual['taxa_contrato_a']}"; $whereIndividual[] = "valor_de = {$comissaoIndividual['valor_de']}"; $whereIndividual[] = "valor_a = {$comissaoIndividual['valor_a']}"; $whereIndividual[] = "excluido<>1"; $selectNotIn = $dbtable->getAdapter()->select(); $selectNotIn->from("tb_comissionamento_grupo", array('id')) ->where(implode(" AND ", $whereIndividual)); $select->where("comissionamentos.id NOT IN ({$selectNotIn})"); $whereIndividual = array(); } } if( isset($corretorSelecionado['grupo_comissao']) && !empty($corretorSelecionado['grupo_comissao']) ){ $select->where("comissionamentos.grupo_id = " . $corretorSelecionado['grupo_comissao']); } else { throw new Core_Exception('O corretor informado não possui grupo cadastrado.'); } } if( isset($fields['grupo_comissao']) && !empty($fields['grupo_comissao']) ){ $select->where('comissionamentos.grupo_id = ?', $fields['grupo_comissao']); } if( isset($fields['tipo_contrato']) && !empty($fields['tipo_contrato']) ){ if( is_array($fields['tipo_contrato']) ){ $select->where('comissionamentos.tipo_produto IN (?)', $fields['tipo_contrato']); } else { $select->where('comissionamentos.tipo_produto = ?', $fields['tipo_contrato']); } } if( isset($fields['tipo_produto']) && !empty($fields['tipo_produto']) ){ $select->where('comissionamentos.tipo_produto = ?', $fields['tipo_produto']); } 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); } /** * 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_ComissionamentoGrupoPercentual(); return $dbtable->fetchRow("id = " . $id); } public function atualizarDataFinal($id, $dataFinal) { if( $id > 0 && $dataFinal != '' ){ try { $data = new Zend_Date($dataFinal, Zend_Date::DATES, 'pt'); $dataFinal = $data->toString('yyyy-MM-dd'); } catch ( Zend_Date_Exception $e ) { echo $e->getMessage(); $dataFinal = null; } $dbtable = new Model_DbTable_ComissionamentoGrupoPercentual(); $dados = $dbtable->fetchRow("id = " . $id); if( $dados['data_inicial'] > $dataFinal ){ throw new Exception("A data final não pode ser menor que a data inicial."); } $result = $dbtable->update(array( 'data_final' => $dataFinal ), "id = " . $id); return $result; } return null; } public function listarPorComissionamento($comissionamentoId) { $dbtable = new Model_DbTable_ComissionamentoGrupoPercentual(); return $dbtable->fetchAll("comissionamento_id = " . $comissionamentoId); } //valida a comissão, caso a comissão do grupo seja maior que o da empresa = bloqueia. public function validarComissao($dados = null) { $dbtable = new Model_DbTable_Comissionamento(); $model = new Model_DbTable_ComissionamentoPercentual(); $percentuais = null; $where = "tipo_produto = '" . $dados['tipo'] . "'" . " AND banco_id = '" . $dados['banco_id'] . "'" . " AND convenio_id = '" . $dados['convenio_id'] . "'" . " AND tabela_id = '" . $dados['tabela_id'] . "'" . " AND ((prazo_a >= '{$dados['prazo_de']}' AND prazo_de <= '{$dados['prazo_de']}') OR " . "(prazo_a >= '{$dados['prazo_a']}' AND prazo_de <= '{$dados['prazo_a']}'))"; $dadosComissionamento = $dbtable->fetchRow($where); if( $dadosComissionamento ){ $percentuais = $model->fetchRow("(data_final IS NULL OR data_final = '0000-00-00') AND comissionamento_id = " . $dadosComissionamento['id']); } else { throw new Exception("Comissão da empresa não cadastrada, favor cadastrar."); } return false; } public function findComissionamento($comissionamentoId) { $dbtable = new Model_DbTable_ComissionamentoGrupoPercentual(); return $dbtable->fetchRow("(data_final IS NULL OR data_final = '0000-00-00') AND comissionamento_id = " . $comissionamentoId); } public function atualizarComissao($currentComissao = null, $dados = null, $comissionamentoId = null) { $dbtable = new Model_DbTable_ComissionamentoGrupoPercentual(); if( $currentComissao ){ $dataFinal = new Zend_Date($dados['data_inicial']); $dataFinal->subDay(1); $data = array( 'data_final' => $dataFinal->get('yyyy-MM-dd') ); $dbtable->update($data, "id = " . $currentComissao['id']); } $dataInicial = new Zend_Date($dados['data_inicial']); $percentual = array( 'comissao' => isset($dados['comissao_avista']) ? str_replace(array( '.', ',' ), array( '', '.' ), $dados['comissao_avista']) : 0.00, 'adiantamento' => isset($dados['comissao_antecipada']) ? str_replace(array( '.', ',' ), array( '', '.' ), $dados['comissao_antecipada']) : 0.00, 'diferimento' => isset($dados['comissao_diferida']) ? str_replace(array( '.', ',' ), array( '', '.' ), $dados['comissao_diferida']) : 0.00, 'data_inicial' => $dataInicial->get('yyyy-MM-dd'), 'comissionamento_id' => $comissionamentoId, ); $result = $dbtable->insert($percentual); return $result; } }
💾 保存文件
← 返回文件管理器