✏️ 正在编辑: ImportarComissionamento.php
路径:
/srv/systems_dir/yuppiecred-lidernegocios/library/Core/ImportarComissionamento.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php class Core_ImportarComissionamento { protected $_sheetData; protected $_naoImportados; private $_meuLayout = NULL; protected $_bancoId = 0; protected $_models = [ 'empresa' => 'Model_Comissionamento', 'corretor' => 'Model_ComissionamentoCorretor', 'corretor_grupo' => 'Model_ComissionamentoGrupo', ]; protected $_colunas = [ 'convenio' => 'A', 'tabela' => 'B', 'codigo_tabela' => 'C', 'codigo_produto' => 'D', 'produto' => 'E', 'tipo' => 'F', 'base_comissao' => 'G', 'base_bonus' => 'H', 'base_adiantamento' => 'I', 'base_diferimento' => 'J', 'prazo_de' => 'K', 'prazo_a' => 'L', 'valor_fixo' => 'M', 'valor_de' => 'N', 'valor_a' => 'O', 'validar_faixa_por' => 'P', 'comissao' => 'Q', 'bonus' => 'R', 'adiantamento' => 'S', 'diferimento' => 'T', 'data_inicial' => 'U', 'data_base' => 'V', 'banco' => 'W', 'corretor' => 'X', 'grupo_comissao' => 'Y', 'taxa_contrato_de' => 'Z', 'taxa_contrato_a' => 'AA', 'idade_inicial' => 'AB', 'idade_final' => 'AC', 'incidir_sobre' => 'AD', 'especie' => 'AE', 'tipo_formalizacao' => 'AF', ]; public function __construct($upload = null) { if (!empty($upload)) { $this->_sheetData = $this->loadData($upload); } } public function getMeuLayout() { return $this->_meuLayout; } public function setMeuLayout($meuLayout) { $this->_meuLayout = $meuLayout; } public function getSheetData() { return $this->_sheetData; } public function setSheetData($sheetData) { $this->_sheetData = $sheetData; } public function getNaoImportados() { return $this->_naoImportados; } protected function addNaoImportados(array $linha, $motivo) { $this->_naoImportados[] = array( "dados" => $linha, "motivo" => $motivo ); } /** * Lê e carrega os dados do arquivo utilizando o PHPExcel * @param Zend_File_Transfer_Adapter_Http $upload * @return array $sheetData */ public function loadData(Zend_File_Transfer_Adapter_Http $upload) { $extension = strtolower(pathinfo($upload->getFileName(), PATHINFO_EXTENSION)); if (in_array($extension, array( 'csv'))) { $encode = Core_Util::detectFileEncoding($upload->getFileName()); $objReader = PHPExcel_IOFactory::createReader('CSV'); $objReader->setDelimiter($extension == 'csv' ? ';' : '#'); $objReader->setInputEncoding($encode); } else { $objReader = PHPExcel_IOFactory::createReaderForFile($upload->getFileName()); $fileinfo = $objReader->listWorksheetInfo($upload->getFileName()); if (is_array($fileinfo) && ($arrayFilter = array_filter($fileinfo) != null)) { $firstSheetName = $fileinfo[0]['worksheetName']; $objReader->setLoadSheetsOnly($firstSheetName); } } $objPHPExcel = $objReader->load($upload->getFileName()); if (isset($objPHPExcel) && is_object($objPHPExcel)) { $sheetData = $objPHPExcel->getActiveSheet()->toArray(null, true, true, true); $objPHPExcel->disconnectWorksheets(); unset($objPHPExcel); unset($objReader); unset($sheetData[1]); unlink($upload->getFileName()); } return $sheetData; } protected function adicionaChaveFaltante($chave, array $dados) { end($dados); $ultimaLetra = key($dados); $this->_colunas[$chave] = ++$ultimaLetra; } /** * Valida os intervalos de prazo e valores informados * @param array $dados dados informados no arquivo * @throws Exception * @return boolean */ protected function validaDados(&$dados) { // Verifica se existe a coluna de convênio if (empty($dados[$this->_colunas['convenio']])) { throw new Core_Exception("O campo convênio não foi informado"); } // Verifica se existe a coluna de tabela if (empty($dados[$this->_colunas['tabela']])) { throw new Core_Exception("O campo tabela não foi informado"); } // Verifica se existe a coluna de comissão valor if (!array_key_exists($this->_colunas['comissao'], $dados)) { $this->adicionaChaveFaltante("comissao", $dados); $dados[$this->_colunas['comissao']] = 0; } // Verifica se existe a coluna data inicial do percentual de comissão if (!array_key_exists($this->_colunas['data_inicial'], $dados)) { $this->adicionaChaveFaltante("data_inicial", $dados); } if (empty($dados[$this->_colunas['data_inicial']])) { $dados[$this->_colunas['data_inicial']] = Zend_Date::now()->get('dd/MM/yyyy'); } if (!array_key_exists($this->_colunas['data_base'], $dados)) { $this->adicionaChaveFaltante("data_base", $dados); } if (empty($dados[$this->_colunas['data_base']]) || !in_array($dados[$this->_colunas['data_base']], ['E', 'L'])) { $dados[$this->_colunas['data_base']] = 'E'; } if (!array_key_exists($this->_colunas['tipo_formalizacao'], $dados)) { $this->adicionaChaveFaltante("tipo_formalizacao", $dados); } if (empty($dados[$this->_colunas['tipo_formalizacao']])) { $dados[$this->_colunas['tipo_formalizacao']] = 0; } elseif(stristr($dados[$this->_colunas['tipo_formalizacao']], "Digital") || $dados[$this->_colunas['tipo_formalizacao']] == 1) { $dados[$this->_colunas['tipo_formalizacao']] = 1; } // Verifica se existe a coluna de produto $produtoOptions = Core_Combos::getTiposProdutosOptions(); if (empty($dados[$this->_colunas['codigo_produto']]) && !array_key_exists($dados[$this->_colunas['tipo']], $produtoOptions)) { throw new Core_Exception("Informe um produto válido"); } if (!array_key_exists($this->_colunas['base_comissao'], $dados)) { $this->adicionaChaveFaltante("base_comissao", $dados); } if (empty($dados[$this->_colunas['base_comissao']])) { $dados[$this->_colunas['base_comissao']] = 'VALOR LIQUIDO'; } elseif (in_array($dados[$this->_colunas['base_comissao']], ['B', 'BRUTO', 'VALOR BRUTO'])) { $dados[$this->_colunas['base_comissao']] = 'VALOR BRUTO'; } else { $dados[$this->_colunas['base_comissao']] = 'VALOR LIQUIDO'; } if (!array_key_exists($this->_colunas['base_bonus'], $dados)) { $this->adicionaChaveFaltante("base_bonus", $dados); } if (empty($dados[$this->_colunas['base_bonus']])) { $dados[$this->_colunas['base_bonus']] = 'VALOR LIQUIDO'; } elseif (in_array($dados[$this->_colunas['base_bonus']], ['B', 'BRUTO', 'VALOR BRUTO'])) { $dados[$this->_colunas['base_bonus']] = 'VALOR BRUTO'; } else { $dados[$this->_colunas['base_bonus']] = 'VALOR LIQUIDO'; } if (!array_key_exists($this->_colunas['base_adiantamento'], $dados)) { $this->adicionaChaveFaltante("base_adiantamento", $dados); } if (empty($dados[$this->_colunas['base_adiantamento']])) { $dados[$this->_colunas['base_adiantamento']] = 'VALOR LIQUIDO'; } elseif (in_array($dados[$this->_colunas['base_adiantamento']], ['B', 'BRUTO', 'VALOR BRUTO'])) { $dados[$this->_colunas['base_adiantamento']] = 'VALOR BRUTO'; } else { $dados[$this->_colunas['base_adiantamento']] = 'VALOR LIQUIDO'; } if (!array_key_exists($this->_colunas['base_diferimento'], $dados)) { $this->adicionaChaveFaltante("base_diferimento", $dados); } if (empty($dados[$this->_colunas['base_diferimento']])) { $dados[$this->_colunas['base_diferimento']] = 'VALOR LIQUIDO'; } elseif (in_array($dados[$this->_colunas['base_diferimento']], ['B', 'BRUTO', 'VALOR BRUTO'])) { $dados[$this->_colunas['base_diferimento']] = 'VALOR BRUTO'; } else { $dados[$this->_colunas['base_diferimento']] = 'VALOR LIQUIDO'; } if (!array_key_exists($this->_colunas['incidir_sobre'], $dados)) { $this->adicionaChaveFaltante("incidir_sobre", $dados); } if (stristr($dados[$this->_colunas['incidir_sobre']], "empresa")) { $dados[$this->_colunas['incidir_sobre']] = 1; } else { $dados[$this->_colunas['incidir_sobre']] = 0; } if (!$this->validateDate($dados[$this->_colunas['data_inicial']], 'd/m/Y')) { throw new Core_Exception("Formato de data inicial do percentual de comissão inválida"); } elseif ($dados[$this->_colunas['prazo_de']] > $dados[$this->_colunas['prazo_a']]) { throw new Core_Exception("Intervalo de prazo inválido"); } elseif ($this->getFloat($dados[$this->_colunas['valor_de']]) > $this->getFloat($dados[$this->_colunas['valor_a']])) { throw new Core_Exception("Intervalo de valores inválido"); } elseif ($dados[$this->_colunas['idade_inicial']] > $dados[$this->_colunas['idade_final']]) { throw new Core_Exception("Intervalo de idades inválido"); } elseif ($dados[$this->_colunas['taxa_contrato_de']] > $dados[$this->_colunas['taxa_contrato_a']]) { throw new Core_Exception("Intervalo de taxas inválido"); } return true; } /** * Valida a formatação da data * @param string $date data informada pelo usuário * @param string $format formato de data desejado * @return boolean */ protected function validateDate($date, $format = 'Y-m-d H:i:s') { $d = DateTime::createFromFormat($format, $date); return $d && $d->format($format) == $date; } /** * Transforma para double o falor passado como parametro * @param string $value valor formatado informado no arquivo * @return double */ protected function getFloat($value) { return String_Refatorar::parseStringToFloat($value); } protected function getLayout() { if (!$this->getMeuLayout()) { return; } $layout = new Model_Layouts(); $layoutLetras = $layout->getLayoutLetras($this->getMeuLayout()); $mountColumns = []; foreach ( $layoutLetras as $values ) { $mountColumns[$values->campo] = $values->letra; if (empty($this->_bancoId) && !empty($values->banco_id)) { $this->_bancoId = $values->banco_id; } } $this->_colunas = $mountColumns; } /** * Realiza a importação de comissionamentos * @param array $params dados adicionais do request * @param string $className classe referente ao tipo de importação * @return int $qtdBaixado quantidade de itens importados do arquivo */ public function importar() { $qtdBaixado = 0; $this->_naoImportados = []; $tabelaAtivada = false; $this->getLayout(); if (count($this->_sheetData) > 0) { foreach ($this->_sheetData as $dados) { $modelComissionamento = $this->_getTipoImportacaoLinha($dados); if (!is_object($modelComissionamento)) { $this->addNaoImportados($dados, $modelComissionamento); continue; } try { if (!empty($dados[$this->_colunas['banco']])) { $this->_bancoId = Model_Banco::bancoPorNome($dados[$this->_colunas['banco']]); } elseif (empty($this->_bancoId)) { throw new Core_Exception("Banco não localizado"); } $this->validaDados($dados); $convenioId = (new Model_Convenio())->getOrCreateConvenio($dados[$this->_colunas['convenio']], $dados[$this->_colunas['codigo_convenio']]); $modelTabela = new Model_Tabela(); $tabelaId = $modelTabela->getOrCreateTabelaByNome($dados[$this->_colunas['codigo_tabela']], $dados[$this->_colunas['tabela']], $convenioId, $this->_bancoId, (int)$dados[$this->_colunas['tipo_formalizacao']]); $tabela = $modelTabela->exibir($tabelaId); $tipoProduto = $dados[$this->_colunas['tipo']]; try { $codigoProduto = (new Model_Produto()) ->getOrCreateProdutoCodigo($dados[$this->_colunas['codigo_produto']], $dados[$this->_colunas['produto']], $this->_bancoId, $dados[$this->_colunas['tipo']]); $produto = $codigoProduto ? (new Model_Produto())->existe($codigoProduto, $this->_bancoId) : null; $tipoProduto = $produto['tipo'] ?? null; } catch (Core_Exception $e) { if (!empty($dados[$this->_colunas['codigo_produto']])) { $produto = (new Model_Produto())->existe($dados[$this->_colunas['codigo_produto']], $this->_bancoId); $tipoProduto = $produto['tipo'] ?? null; } } if (empty($tipoProduto)) { throw new Core_Exception('Não foi possível localizar o produto.'); } if ($tabela['tabela_desativada']) { $modelTabela->ativar($tabela['id']); } if (isset($dados[$this->_colunas['validar_faixa_por']])) { $validarFaixa = strtoupper($dados[$this->_colunas['validar_faixa_por']]); if (strpos($validarFaixa, 'LIQUIDO') !== false) { $modelComissionamento->setValidarFaixa(1); } elseif (strpos($validarFaixa, 'BRUTO') !== false) { $modelComissionamento->setValidarFaixa(2); } } $modelComissionamento->setConvenioId($convenioId); $modelComissionamento->setTabelaId($tabela['id']); $modelComissionamento->setTipoProduto($tipoProduto); $modelComissionamento->setPrazoDe($dados[$this->_colunas['prazo_de']]); $modelComissionamento->setPrazoA($dados[$this->_colunas['prazo_a']]); $modelComissionamento->setValorFixo($dados[$this->_colunas['valor_fixo']]); $modelComissionamento->setValorDe($dados[$this->_colunas['valor_de']]); $modelComissionamento->setValorA($dados[$this->_colunas['valor_a']]); $modelComissionamento->setBancoId($this->_bancoId); $modelComissionamento->setTaxaContratoDe($dados[$this->_colunas['taxa_contrato_de']]); $modelComissionamento->setTaxaContratoA($dados[$this->_colunas['taxa_contrato_a']]); $modelComissionamento->setIdadeInicial($dados[$this->_colunas['idade_inicial']]); $modelComissionamento->setIdadeFinal($dados[$this->_colunas['idade_final']]); $modelComissionamento->setIncidirSobre($dados[$this->_colunas['incidir_sobre']]); $modelComissionamento->setEspecie($dados[$this->_colunas['especie']]); if (method_exists($modelComissionamento, 'setEmpresaId')) { $modelComissionamento->setEmpresaId($dados['empresa_id']); } if (method_exists($modelComissionamento, 'setBaseComissaoEmpresa')) { $modelComissionamento->setBaseComissaoEmpresa(strtoupper($dados[$this->_colunas['base_comissao']])); } else { $modelComissionamento->setBaseComissao(strtoupper($dados[$this->_colunas['base_comissao']])); } $result = $modelComissionamento->salvar($modelComissionamento); if ($result > 0) { $classComissionamentoPercentual = get_class($modelComissionamento) . "Percentual"; $modelComissionamentoPercentual = new $classComissionamentoPercentual(); $modelComissionamentoPercentual->setComissionamentoId($result); $modelComissionamentoPercentual->setBaseComissaoValor(strtoupper($dados[$this->_colunas['base_comissao']])); $modelComissionamentoPercentual->setBaseComissaoBonus(strtoupper($dados[$this->_colunas['base_bonus']])); $modelComissionamentoPercentual->setBaseComissaoAdiantamento(strtoupper($dados[$this->_colunas['base_adiantamento']])); $modelComissionamentoPercentual->setBaseComissaoDiferimento(strtoupper($dados[$this->_colunas['base_diferimento']])); $modelComissionamentoPercentual->setComissao($dados[$this->_colunas['comissao']]); $modelComissionamentoPercentual->setBonus($dados[$this->_colunas['bonus']]); $modelComissionamentoPercentual->setDiferimento($dados[$this->_colunas['diferimento']]); $modelComissionamentoPercentual->setDataInicial($dados[$this->_colunas['data_inicial']]); if (method_exists($modelComissionamentoPercentual, 'setTabelaAtivada')) { $modelComissionamentoPercentual->setTabelaAtivada($tabelaAtivada); } if (method_exists($modelComissionamentoPercentual, 'setAdiantamento')) { $modelComissionamentoPercentual->setAdiantamento($dados[$this->_colunas['adiantamento']]); } $modelComissionamentoPercentual->salvar($modelComissionamentoPercentual); $qtdBaixado++; } } catch (Core_Exception $ex) { Yuppie_Log::write("Erro => " . $ex->getMessage(), $this); $this->addNaoImportados($dados, $ex->getMessage()); } } } return $qtdBaixado; } private function _getTipoImportacaoLinha($linha) { $className = $this->_models['empresa']; $params = array(); if (!empty($linha[$this->_colunas['corretor']])) { $corretor = new Model_Corretor(); $dadosCorretor = $corretor->exibir($linha[$this->_colunas['corretor']]); if (!$dadosCorretor > 0) { return 'Corretor não encontrado, verifique os dados.'; } $params['corretor_id'] = $dadosCorretor->id; $className = $this->_models['corretor']; } if (!empty($linha[$this->_colunas['grupo_comissao']])) { $grupoComissaoId = Model_GrupoComissao::grupoComissaoPorNome($linha[$this->_colunas['grupo_comissao']]); if (!$grupoComissaoId > 0) { return 'Grupo de comissão não encontrado, verifique os dados.'; } $params['grupo_id'] = $grupoComissaoId; $className = $this->_models['corretor_grupo']; } return new $className($params); } }
💾 保存文件
← 返回文件管理器