✏️ 正在编辑: Tabela.php
路径:
/srv/systems_dir/yuppiecred-lidernegocios/application/models/Tabela.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php class Model_Tabela { private $_id; private $_parentId; private $_convenioId; private $_nome; private $_campanha; private $_codigo; private $_produto; private $_bancoId; private $_importacao; private $_tabelaDesativada; private $_dataDesativacao; private $_tipoFormalizacao; private $_informacaoAdicional; private $_habilitarAutocontratacao; private $_taxa; public function getTipoFormalizacao() { return $this->_tipoFormalizacao; } public function setTipoFormalizacao($tipoFormalizacao) { $this->_tipoFormalizacao = $tipoFormalizacao; } public function getTabelaDesativada() { return $this->_tabelaDesativada; } public function getDataDesativacao() { return $this->_dataDesativacao; } public function setTabelaDesativada($tabelaDesativada) { $this->_tabelaDesativada = $tabelaDesativada; } public function setDataDesativacao($dataDesativacao) { if( !empty($dataDesativacao) ){ try { $data = new Zend_Date($dataDesativacao, Zend_Date::DATES, 'pt'); $dataDesativacao = $data->toString('yyyy-MM-dd'); } catch ( Zend_Date_Exception $e ) { echo $e->getMessage(); $dataDesativacao = null; } } else { $dataDesativacao = null; } $this->_dataDesativacao = $dataDesativacao; } public function getId() { return $this->_id; } public function setId($id) { $this->_id = $id; } public function getParentId() { return $this->_parentId; } public function setParentId($parentId) { $this->_parentId = $parentId; } public function getConvenioId() { return $this->_convenioId; } public function setConvenioId($convenioId) { $this->_convenioId = $convenioId; } public function getNome() { return $this->_nome; } public function setNome($nome) { $this->_nome = trim($nome); } public function getCampanha() { return $this->_campanha; } public function setCampanha($campanha) { $this->_campanha = $campanha; } public function getCodigo() { return $this->_codigo; } public function setCodigo($codigo) { $this->_codigo = trim($codigo); } public function getProduto() { return $this->_produto; } public function setProduto($produto) { $this->_produto = $produto; } public function getBancoId() { return $this->_bancoId; } public function setBancoId($bancoId) { $this->_bancoId = $bancoId; } public function getImportacao() { return $this->_importacao; } public function setImportacao($importacao) { $this->_importacao = $importacao; } public function getInformacaoAdicional() { return $this->_informacaoAdicional; } public function setInformacaoAdicional($informacaoAdicional) { $this->_informacaoAdicional = $informacaoAdicional; } public function getHabilitarAutocontratacao() { return $this->_habilitarAutocontratacao; } public function setHabilitarAutocontratacao($habilitarAutocontratacao) { $this->_habilitarAutocontratacao = $habilitarAutocontratacao; } public function getTaxa() { return $this->_taxa; } public function setTaxa($taxa) { $this->_taxa = $taxa; } 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_Tabela(); $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_Tabela $tabela */ public function salvar(Model_Tabela $tabela) { $dbtable = new Model_DbTable_Tabela(); if( $tabela->getId() > 0 ){ $dbtable->update($tabela->_toArray(), "id = " . $tabela->getId()); $dataDesativacao = $tabela->getDataDesativacao(); if( $dataDesativacao ){ // Todos os comissionamentos que possuem a tabela ID. $dbTableComissionamentoCorretor = new Model_DbTable_ComissionamentoCorretor(); $dbTableComissionamentoCorretorPercentual = new Model_DbTable_ComissionamentoCorretorPercentual(); $comissionamentos = $dbTableComissionamentoCorretor->fetchAll("tabela_id = " . $tabela->getId()); $arrayComissionamento = $comissionamentos->toArray(); $data['data_final'] = $tabela->getDataDesativacao(); foreach ( $arrayComissionamento as $value ) { $dbTableComissionamentoCorretorPercentual->update($data, 'data_final IS NULL AND comissionamento_id = ' . $value['id']); } } // Se tiver atualizado parent_id, altera todas as bases que fazem // Referência a esta tabela, para fazerem a tabela pai $parentId = $tabela->getParentId(); if( $parentId > 0 ){ $dbBonus = new Model_DbTable_Bonus(); $dbBonus->update(array( 'tabela_id' => $parentId ), 'id = ' . $tabela->getId()); $dbCallcenterProposta = new Model_DbTable_CallcenterProposta(); $dbCallcenterProposta->update(array( 'tabela_id' => $parentId ), 'tabela_id = ' . $tabela->getId()); $dbComissionamento = new Model_DbTable_Comissionamento(); $dbComissionamento->updateComissionamento(array( 'tabela_id' => $parentId ), 'tabela_id = ' . $tabela->getId()); $dbComissionamentoCorretor = new Model_DbTable_ComissionamentoCorretor(); $dbComissionamentoCorretor->updateComissionamento(array( 'tabela_id' => $parentId ), 'tabela_id = ' . $tabela->getId()); $dbComissionamentoGrupo = new Model_DbTable_ComissionamentoGrupo(); $dbComissionamentoGrupo->updateComissionamento(array( 'tabela_id' => $parentId ), 'tabela_id = ' . $tabela->getId()); $dbContrato = new Model_DbTable_Contrato(); $dbContrato->updateTabela($parentId, $tabela->getId()); $dbTabelaFator = new Model_DbTable_TabelaFator(); $dbTabelaFator->update(array( 'tabela_id' => $parentId ), 'tabela_id = ' . $tabela->getId()); } return $tabela->getId(); } else { return $dbtable->insert($tabela->_toArray()); } } /** * Exclui o registro passado por parâmetro * @param int $id * @return int The number of rows deleted */ public function excluir($id) { $tabela = $this->exibir($id); if (!$tabela) { throw new Core_Exception("Tabela selecionada não pôde ser reconhecida! " . "Verifique se não já foi excluída em outra sessão."); } $dbtable = new Model_DbTable_Contrato(); $contrato = $dbtable->fetchRow([ "tabela_id = ?" => $tabela->id, ]); if( $contrato ){ throw new Core_Exception("Tabela possui contrato vinculado " . "e não pode ser excluída."); } //verificar se tem comissão cadastrada para não permitir excluir $dbtable = new Model_DbTable_Comissionamento(); $comissaoEmpresa = $dbtable->fetchRow([ "banco_id = ?" => $tabela->banco_id, "convenio_id = ?" => $tabela->convenio_id, "tabela_id = ?" => $tabela->id, ]); if( $comissaoEmpresa ){ throw new Core_Exception("Tabela possui comissão cadastrada " . "para a empresa e não pode ser excluída."); } $dbtable = new Model_DbTable_ComissionamentoGrupo(); $comissaoGrupo = $dbtable->fetchRow([ "banco_id = ?" => $tabela->banco_id, "convenio_id = ?" => $tabela->convenio_id, "tabela_id = ?" => $tabela->id, ]); if( $comissaoGrupo ){ throw new Core_Exception("Tabela possui comissão cadastrada " . "para grupo e não pode ser excluída."); } $dbtable = new Model_DbTable_ComissionamentoCorretor(); $comissaoCorretor = $dbtable->fetchRow([ "banco_id = ?" => $tabela->banco_id, "convenio_id = ?" => $tabela->convenio_id, "tabela_id = ?" => $tabela->id, ]); if( $comissaoCorretor ){ throw new Core_Exception("Tabela possui comissão cadastrada " . "para corretor individual e não pode ser excluída."); } if( $id > 0 ){ $dbtable = new Model_DbTable_Tabela(); return $dbtable->delete(["id = ?" => $id]); } return null; } public function desativar($id) { if( $id > 0 ){ $dbtable = new Model_DbTable_Tabela(); return $dbtable->desativar("id = " . $id); } return null; } public function ativar($id) { if( $id > 0 ){ $dbtable = new Model_DbTable_Tabela(); return $dbtable->ativar("id = " . $id); } 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_Tabela(); return $dbtable->fetchAll($where, $order, $count, $offset); } /** * 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_Tabela(); return $dbtable->fetchRow(["id = ?" => $id]); } /** * Verifica se o registro passado por parâmetro existe * @param string $nome * @return array|null */ public function existe($nome) { $dbtable = new Model_DbTable_Tabela(); return $dbtable->fetchRow("nome = '" . trim($nome) . "'"); } public function getTabelas($where = null, $order = "nome ASC") { $dbtable = new Model_DbTable_Tabela(); $values = $dbtable->fetchAll($where, $order); $tabelas = array(); foreach ( $values as $value ) { $tabelas[$value['id']] = $value['nome']; } return $tabelas; } /** * Retorna a tabela de acordo com o produto passado por parâmetro * @param type $produto */ public function buscaTabelaPorProduto($produto) { $dbtable = new Model_DbTable_Tabela(); return $dbtable->fetchRow("produto = '$produto'"); } public function buscaTabelaPorCodigo($codigo) { $dbtable = new Model_DbTable_Tabela(); return $dbtable->fetchRow(["trim(codigo) = ?" => trim($codigo)]); } public function buscaTabelaPorCodigoNome($codigo, $nome, $bancoId) { $dbtable = new Model_DbTable_Tabela(); return $dbtable->fetchRow([ "trim(codigo) = ?" => trim($codigo), "trim(nome) = ?" => trim($nome), "banco_id = ?" => $bancoId ]); } public function getOrCreateTabelaByCodigo($codigoTabela, $descricaoTabela, $convenio, $bancoId, $tipoFormalizacao = 0) { $nome = trim($descricaoTabela); $codigo = trim($codigoTabela); $dbTable = new Model_DbTable_Tabela(); $columnLength = $dbTable->info()['metadata']['nome']['LENGTH']; if (strlen($nome) > $columnLength) { $nome = substr($nome, 0, $columnLength); } if ($tipoFormalizacao == 1) { $nome = substr($nome, 0, $columnLength-3); $nome = $nome . '_VD'; } $tabela = $dbTable->fetchRow("codigo = '{$codigo}' AND tipo_formalizacao = '{$tipoFormalizacao}' AND banco_id = {$bancoId} AND convenio_id = {$convenio}"); if (is_null($tabela)) { $tabela = $dbTable->insert(array( 'codigo' => $codigo, 'nome' => $nome, 'convenio_id' => $convenio, 'banco_id' => $bancoId, 'importacao' => true, 'tipo_formalizacao' => $tipoFormalizacao )); return $tabela; } if (!empty($tabela['parent_id'])) { $parent = $dbTable->fetchRow("id = '{$tabela['parent_id']}'"); return $parent ? $parent->id : $tabela->id; } return $tabela->id; } public function getOrCreateTabelaByNome($codigoTabela, $descricaoTabela, $convenioId, $bancoId, $tipoFormalizacao = 0) { $nome = trim($descricaoTabela); $codigo = trim($codigoTabela); if (strlen($nome) > 200) { $nome = substr($nome, 0, 200); } if ($tipoFormalizacao == 1) { $nome = substr($nome, 0, 197); $nome = $nome . '_VD'; } $dbTable = new Model_DbTable_Tabela(); $tabela = $dbTable->fetchRow("nome = '{$nome}' AND banco_id = {$bancoId} AND convenio_id = {$convenioId}"); if (is_null($tabela)) { $tabela = $dbTable->insert([ 'codigo' => $codigo, 'nome' => $nome, 'convenio_id' => $convenioId, 'banco_id' => $bancoId, 'importacao' => true, 'tipo_formalizacao' => $tipoFormalizacao ]); } elseif (!empty($tabela['parent_id'])) { $parent = $dbTable->fetchRow("id = '{$tabela['parent_id']}'"); $tabela = $parent ? $parent->id : $tabela->id; } else { $tabela = $tabela->id; } return $tabela; } public function getPaginatorAdapter(array $fields, $page = null, $limit = null, $order = null, $range = null) { $hoje = Zend_Date::now(); $dbtable = new Model_DbTable_Tabela(); $select = $dbtable->getAdapter()->select()->from('tb_tabelas', ['*']) ->joinLeft('tb_convenios', "tb_tabelas.convenio_id = tb_convenios.id and tb_convenios.excluido<>1", ['convenio' => 'tb_convenios.nome']) ->joinLeft('tb_bancos', 'tb_tabelas.banco_id = tb_bancos.id and tb_bancos.excluido<>1', ['banco' => 'tb_bancos.nome']) ->joinLeft(['tabelas_pai' => 'tb_tabelas'], 'tb_tabelas.parent_id = tabelas_pai.id and tabelas_pai.excluido<>1', ['tabela_pai' => 'tabelas_pai.nome']) ->where('tb_tabelas.excluido<>1'); if (!empty($order)) { $select->order($order); } if (!empty($fields['nome'])) { $select->where("tb_tabelas.nome LIKE ?", "%" . $fields['nome'] . "%"); } if (!empty($fields['convenio_id'])) { $select->where('tb_tabelas.convenio_id = ?', $fields['convenio_id']); } if (!empty($fields['banco_id'])) { $select->where('tb_tabelas.banco_id = ?', $fields['banco_id']); } if (!empty($fields['data_cadastro_de'])) { $date = new Zend_Date($fields['data_cadastro_de']); $select->where('tb_tabelas.data_cadastro >= ?', $date->get('yyyy-MM-dd')); } if (!empty($fields['data_cadastro_a'])) { $dateA = new Zend_Date($fields['data_cadastro_a']); $select->where('tb_tabelas.data_cadastro <= ?', $dateA->get('yyyy-MM-dd') . ' 23:59:59'); } if (!empty($fields['add'])) { $select->where('tb_tabelas.data_cadastro >= ?', $hoje->get('yyyy-MM-dd')); $select->where('tb_tabelas.importacao = ?', 1); } if (!empty($fields['codigo'])) { $select->where("tb_tabelas.codigo = ?", $fields['codigo']); } if (!empty($fields['tipo_formalizacao'])) { $select->where("tb_tabelas.tipo_formalizacao = ?", $fields['tipo_formalizacao'] == 1 ?? 0); } if (!empty($fields['id_tabela'])) { $select->where("tb_tabelas.id = ?", $fields['id_tabela']); } if (!empty($fields['tabela_desativada'])) { $select->where("tb_tabelas.tabela_desativada = ?", $fields['tabela_desativada'] == 1 ? 1 : 0); } if (!empty($fields['apenas_pai'])) { if ($fields['apenas_pai'] == 1) { $select->where("tb_tabelas.parent_id IS NULL OR tb_tabelas.parent_id = 0"); } else { $select->where("tb_tabelas.parent_id IS NOT NULL AND tb_tabelas.parent_id > 0"); } } $result = $dbtable->getAdapter()->fetchAll($select); if( $page ){ $paginator = Zend_Paginator::factory($result); $paginator->setCurrentPageNumber($page); if( $limit && is_numeric($limit) ){ $paginator->setItemCountPerPage($limit); } if( $range && is_numeric($range) ){ $paginator->setPageRange($range); } return $paginator; } return $result; } /** * Checa se possui novas tabelas na importação * @return boolean */ public function checkNewTables() { $dbtable = new Model_DbTable_Tabela(); $date = Zend_Date::now(); $select = $dbtable->getAdapter()->select()->from(array( 'tabelas' => 'tb_tabelas' )); $select->where("tabelas.data_cadastro >= STR_TO_DATE('" . $date . "', '%d/%m/%Y')"); $select->where("tabelas.excluido <> 1 AND tabelas.importacao = 1"); $result = $dbtable->getAdapter()->fetchRow($select); if ($result) { return true; } return false; } public function searchNewTables() { $dbtable = new Model_DbTable_Tabela(); $date = Zend_Date::now(); $select = $dbtable->getAdapter()->select()->from(array( 'tabelas' => 'tb_tabelas' )); $select->where("tabelas.data_cadastro >= STR_TO_DATE('" . $date . "', '%d/%m/%Y')"); $select->where("tabelas.excluido <> 1 AND tabelas.importacao = 1"); return $dbtable->getAdapter()->fetchAll($select); } public function formalizacao($tipoFormalizacao, $where) { return $this->update(array('tipo_formalizacao' => $tipoFormalizacao), $where); } /** * @param $request * @param string $tabelaComissao * @return array */ public function tabelasSemComissao($fields) { $tabelaComissao = 'tb_comissionamento'; $tabelaComissaoPercentual = 'tb_comissionamento_percentual'; if ($fields['tipo_comissao'] == 2) { $tabelaComissao = 'tb_comissionamento_grupo'; $tabelaComissaoPercentual = 'tb_comissionamento_grupo_percentual'; } $dbtable = new Model_DbTable_Tabela(); $select = $dbtable->getAdapter()->select()->from(['t' => 'tb_tabelas'], ['tabela' => 'nome', 'codigo', 'tipo_formalizacao']) ->joinInner(['b' => 'tb_bancos'], 't.banco_id = b.id AND b.excluido <> 1 AND b.ativo <> 0', ['banco' => 'nome']) ->joinInner(['c' => 'tb_convenios'], 't.convenio_id = c.id AND c.excluido <> 1', ['convenio' => 'nome']) ->joinLeft(['comissao' => $tabelaComissao], 'comissao.banco_id = b.id AND comissao.convenio_id = c.id AND comissao.tabela_id = t.id AND comissao.excluido <> 1', []) ->joinLeft(['p' => $tabelaComissaoPercentual], 'comissao.id = p.comissionamento_id AND p.excluido <> 1 AND p.data_final is null', []) ->joinLeft(['con' => 'tb_contratos'], 'b.id = con.banco_id AND c.id = con.convenio_id AND t.id = con.tabela_id AND con.excluido <> 1', ['qtd_contratos' => 'COUNT(DISTINCT con.id)']) ->where("t.excluido <> 1 AND (t.tabela_desativada = 0 OR t.tabela_desativada is null) AND (t.parent_id = 0 OR t.parent_id is null)") ->where("(comissao.id is null or p.id is null)") ->group('t.id') ->order(['banco', 'convenio', 'tabela']); if (!empty($fields['banco_id'])) { $select = $select->where('b.id = ?', $fields['banco_id']); } if (!empty($fields['convenio_id'])) { $select = $select->where('c.id = ?', $fields['convenio_id']); } if (!empty($fields['tabela_id'])) { $select = $select->where('t.id = ?', $fields['tabela_id']); } if (!empty($fields['descricao'])) { $select = $select->where("t.nome like '%" . $fields['descricao'] . "%'"); } if ($fields['possui_contratos'] !== '') { switch ($fields['possui_contratos']) { case 1: $select = $select->having("qtd_contratos > 0"); break; case 0: $select = $select->having("qtd_contratos = 0"); break; } } return $dbtable->getAdapter()->fetchAll($select); } public function getTipoFormalizacaoById($tabelaId) { $tabela = $this->exibir($tabelaId); if (!$tabela) { return 0; } return $tabela->tipo_formalizacao; } public function getTabelaAutocontratacao($nomeConvenio, $bancoId) { $convenio = (new Model_Convenio())->existe($nomeConvenio); return (new Model_DbTable_Tabela())->fetchAll([ 'habilitar_autocontratacao = ?' => 1, 'banco_id = ?' => $bancoId, 'convenio_id = ?' => $convenio['id'], 'tabela_desativada = ?' => 0 ]); } public function getTabelaAutocontratacaoInss($nomeConvenio, $bancoId, array $where = [], array $whereNot = []) { $convenio = (new Model_Convenio())->existe($nomeConvenio); $likes = count($where) > 1 ? implode("' AND nome LIKE '", $where) : $where[0]; $notLikes = count($whereNot) > 1 ? implode("' AND nome NOT LIKE '", $whereNot) : $whereNot[0]; return (new Model_DbTable_Tabela())->fetchRow([ "habilitar_autocontratacao = ?" => 1, "banco_id = ?" => $bancoId, "convenio_id = ?" => $convenio['id'], 'tabela_desativada = ?' => 0, "nome LIKE '{$likes}'", "nome NOT LIKE '{$notLikes}'" ]); } }
💾 保存文件
← 返回文件管理器