✏️ 正在编辑: ImportarComissionamento.php
路径:
/srv/systems_dir/yuppiecred-bkp/library/Core/ImportarComissionamento.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php class Core_ImportarComissionamento { protected $_sheetData; protected $_naoImportados; protected $_models = array( 'empresa' => 'Model_Comissionamento', 'corretor' => 'Model_ComissionamentoCorretor', 'corretor_grupo' => 'Model_ComissionamentoGrupo', ); public function __construct($upload = null) { if (!empty($upload)) { $this->_sheetData = $this->loadData($upload); } } 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; } /** * Verifica se todos o campos necessários para importação estão preenchidos * @param array $dados dados informados no arquivo * @return boolean */ protected function importacaoValida(array $dados) { // Verifica se existe a coluna de convênio if (empty($dados['A'])) { throw new Core_Exception("O campo convênio não foi informado"); } // Verifica se existe a coluna de tabela if (empty($dados['B'])) { throw new Core_Exception("O campo tabela não foi informado"); } // Verifica se existe a coluna de base comissão valor if (empty($dados['G'])) { throw new Core_Exception("O campo base comissão valor não foi informado"); } // Verifica se existe a coluna data inicial do percentual de comissão if (empty($dados['U'])) { throw new Core_Exception("A data inicial do percentual de comissão não foi informada"); } if (empty($dados['V'])) { throw new Core_Exception("A data base da comissão não foi informada"); } if ( !in_array($dados['V'], ['E', 'L']) ) { $dados['V'] = 'E'; } // Verifica se existe a coluna banco if (empty($dados['W'])) { throw new Core_Exception("A coluna Banco não foi informada"); } // Verifica se existe a coluna de produto $produtoOptions = Core_Combos::getTiposProdutosOptions(); if (empty($dados['D']) && !array_key_exists($dados['F'], $produtoOptions)) { throw new Core_Exception("Informe um produto válido"); } return true; } /** * Valida os intervalos de prazo e valores informados * @param array $dados dados informados no arquivo * @throws Exception * @return boolean */ protected function validaDados($dados) { if (!$this->validateDate($dados['U'], 'd/m/Y')) { throw new Core_Exception("Formato de data inicial do percentual de comissão inválida"); } elseif ($dados['K'] > $dados['L']) { throw new Core_Exception("Intervalo de prazo inválido"); } elseif ($this->getFloat($dados['N']) > $this->getFloat($dados['O'])) { throw new Core_Exception("Intervalo de valores inválido"); } elseif ($dados['AB'] > $dados['AC']) { throw new Core_Exception("Intervalo de idades 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); } /** * 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($params, $className) { $qtdBaixado = 0; $this->_naoImportados = array(); $tabelaAtivada = false; if (count($this->_sheetData) > 0) { $modelTabela = new Model_Tabela(); $modelConvenio = new Model_Convenio(); foreach ( $this->_sheetData as $dados ) { $modelComissionamento = $this->_getTipoImportacaoLinha($dados); if (!is_object($modelComissionamento)) { $this->addNaoImportados($dados, $modelComissionamento); continue; } if (empty($dados['G'])) { $dados['G'] = 'VALOR LIQUIDO'; } if (empty($dados['H'])) { $dados['H'] = 'VALOR LIQUIDO'; } if (empty($dados['I'])) { $dados['I'] = 'VALOR LIQUIDO'; } if (empty($dados['J'])) { $dados['J'] = 'VALOR LIQUIDO'; } if (!empty($dados['AD']) && stristr($dados['AD'], 'empresa')) { $dados['AD'] = 1; } else { $dados['AD'] = 0; } try { if ($this->importacaoValida($dados) && $this->validaDados($dados)) { $bancoId = Model_Banco::bancoPorNome($dados['W']); if (empty($bancoId)) { throw new Core_Exception("Banco não localizado. ({$dados['W']})"); } $convenioId = $modelConvenio->getOrCreateConvenio($dados['A']); $tabelaId = $modelTabela->getOrCreateTabelaByNome($dados['C'], $dados['B'], $convenioId, $bancoId); $tabela = $modelTabela->exibir($tabelaId); $tipoProduto = $dados['F']; try { $codigoProduto = (new Model_Produto()) ->getOrCreateProdutoCodigo($dados['D'], $dados['E'], $bancoId, $dados['F']); $produto = $codigoProduto ? (new Model_Produto())->existe($codigoProduto, $bancoId) : null; $tipoProduto = $produto['tipo'] ?? null; } catch (Core_Exception $e) { if (!empty($dados['D'])) { $produto = (new Model_Produto())->existe($dados['D'], $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['P'])) { $validarFaixa = strtoupper($dados['P']); 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['K']); $modelComissionamento->setPrazoA($dados['L']); $modelComissionamento->setValorFixo($dados['M']); $modelComissionamento->setValorDe($dados['N']); $modelComissionamento->setValorA($dados['O']); $modelComissionamento->setBancoId($bancoId); $modelComissionamento->setTaxaContratoDe($dados['Z']); $modelComissionamento->setTaxaContratoA($dados['AA']); $modelComissionamento->setIdadeInicial($dados['AB']); $modelComissionamento->setIdadeFinal($dados['AC']); $modelComissionamento->setIncidirSobre($dados['AD']); if (method_exists($modelComissionamento, 'setBaseComissaoEmpresa')) { $modelComissionamento->setBaseComissaoEmpresa(strtoupper($dados['G'])); } else { $modelComissionamento->setBaseComissao(strtoupper($dados['G'])); } $result = $modelComissionamento->salvar($modelComissionamento); if ($result > 0) { $classComissionamentoPercentual = get_class($modelComissionamento) . "Percentual"; $modelComissionamentoPercentual = new $classComissionamentoPercentual(); $modelComissionamentoPercentual->setComissionamentoId($result); $modelComissionamentoPercentual->setBaseComissaoValor(strtoupper($dados['G'])); $modelComissionamentoPercentual->setBaseComissaoBonus(strtoupper($dados['H'])); $modelComissionamentoPercentual->setBaseComissaoAdiantamento(strtoupper($dados['I'])); $modelComissionamentoPercentual->setBaseComissaoDiferimento(strtoupper($dados['J'])); $modelComissionamentoPercentual->setComissao($dados['Q']); $modelComissionamentoPercentual->setBonus($dados['R']); $modelComissionamentoPercentual->setDiferimento($dados['T']); $modelComissionamentoPercentual->setDataInicial($dados['U']); if (method_exists($modelComissionamentoPercentual, 'setTabelaAtivada')) { $modelComissionamentoPercentual->setTabelaAtivada($tabelaAtivada); } if (method_exists($modelComissionamentoPercentual, 'setAdiantamento')) { $modelComissionamentoPercentual->setAdiantamento($dados['S']); } $modelComissionamentoPercentual->salvar($modelComissionamentoPercentual); $qtdBaixado++; } } } catch (Core_Exception $ex) { $this->addNaoImportados($dados, $ex->getMessage()); } } } return $qtdBaixado; } private function _getTipoImportacaoLinha($linha) { $className = $this->_models['empresa']; $params = array(); if (array_key_exists('X', $linha) && $linha['X'] != '') { $corretor = new Model_Corretor(); $dadosCorretor = $corretor->exibir($linha['X']); if (!$dadosCorretor > 0) { return 'Corretor não encontrado, verifique os dados.'; } $params['corretor_id'] = $dadosCorretor->id; $className = $this->_models['corretor']; } if (array_key_exists('Y', $linha) && $linha['Y'] != '') { $grupoComissaoId = Model_GrupoComissao::grupoComissaoPorNome($linha['Y']); 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); } }
💾 保存文件
← 返回文件管理器