✏️ 正在编辑: RecebimentoComissao.php
路径:
/srv/systems_dir/yuppiecred-lidernegocios/library/Core/Banco/Planilha/RecebimentoComissao.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php use Modules\Contrato\Service\SRCCService; class Core_Banco_Planilha_RecebimentoComissao { protected $_inicioLaco = 0; protected $_bancoId = 0; protected $_dateFormat = 'd/m/Y'; protected $colunasOpcionais = array(); protected $naoImportados = array(); protected $contratosImportados = array(); private $_bancoGenerico = null; private $_arquivoOrigem = null; protected $colunas = array( 'numero_contrato' => 'G', 'parcelas' => 'AD', 'comissao_empresa' => 'X', 'rco' => 'AR', 'data_saldo' => 'AT', 'valor_liquido' => 'AB', 'valor_lancamento' => 'AA', 'tipo_pagamento' => 'AN', 'natureza' => 'Y', 'tipo_remuneracao' => 'Z', 'prazo' => 'V' ); function getInicioLaco() { return $this->_inicioLaco; } function setInicioLaco($inicioLaco) { if( !is_null($inicioLaco) ){ $this->_inicioLaco = $inicioLaco; } } public function __construct($bancoId) { $this->setBancoId($bancoId); } public function setBancoId($bancoId) { $this->_bancoId = $bancoId; return $this; } public function getBancoId() { return $this->_bancoId; } public function getBancoGenerico() { return $this->_bancoGenerico; } public function setBancoGenerico($bancoGenerico) { $this->_bancoGenerico = $bancoGenerico; } public function getColuna($coluna) { return isset($this->colunas[$coluna]) ? trim($this->colunas[$coluna]) : null; } public function getColunas() { return $this->colunas; } public function setArquivoOrigem($arquivoOrigem) { $this->_arquivoOrigem = $arquivoOrigem; } public function getArquivoOrigem() { return $this->_arquivoOrigem; } public function validarColunas(array $sheetData) { $colunas = array_flip($this->getColunas()); $colunas = array_diff($colunas, $this->colunasOpcionais); unset($colunas['']); $colunas = array_keys($colunas); $sheetDataColunas = array_keys(current($sheetData)); $colunasFaltando = array_diff($colunas, $sheetDataColunas); if( $colunasFaltando ){ asort($colunasFaltando); $msg = count($colunasFaltando) == 1 ? "A coluna '" . current($colunasFaltando) . "' não existe na planilha enviada. " : 'As seguintes colunas não existem na planilha enviada:<br />' . implode(', ', $colunasFaltando) . '. '; $msg .= '<br />Confira na planilha padrão deste banco o que está diferente.'; throw new Core_Exception($msg); } } public function excluirLinhasVazias(array $sheetData) { $newSheetData = array(); $cont = $this->_inicioLaco; foreach ( $sheetData as $linha ) { if( $linha[$this->getColuna('numero_contrato')] ){ $newSheetData[$cont++] = $linha; } } return $newSheetData; } public function importar(array $sheetData) { $this->validarColunas($sheetData); $sheetData = $this->excluirLinhasVazias($sheetData); end($sheetData); reset($sheetData); if( count($sheetData) > 0 ){ for ( $i = $this->_inicioLaco; $i < count($sheetData); $i++ ) { try { $dados = array( 'banco_id' => $this->getBancoId(), 'numero_contrato' => null, 'comissao_empresa' => null, 'data_recebimento_comissao' => null, 'parcelas' => null, 'rco' => null, 'data_saldo' => null, 'valor_liquido' => null, 'valor_lancamento' => null, 'natureza' => null, 'tipo_pagamento' => null, 'tipo_remuneracao' => null, 'base_comissao' => null ); $this->_getBancoId($sheetData[$i], $dados); $this->_getNumeroContrato($sheetData[$i], $dados); $this->_getNumeroAde($sheetData[$i], $dados); $this->_getTipoPagamento($sheetData[$i], $dados); $this->_getNatureza($sheetData[$i], $dados); $this->_getTipoRemuneracao($sheetData[$i], $dados); $this->_getComissaoEmpresa($sheetData[$i], $dados); $this->_getDataRecebimentoComissao($sheetData[$i], $dados); $this->_getNumeroParcelas($sheetData[$i], $dados); $this->_getRco($sheetData[$i], $dados); $this->_getDataSaldo($sheetData[$i], $dados); $this->_getValorBrutoLiquido($sheetData[$i], $dados); $this->_getValorLancamento($sheetData[$i], $dados); $this->_getValorBonus($sheetData[$i], $dados); $this->_getDataRecebimentoBonus($sheetData[$i], $dados); $this->_getDescricao($sheetData[$i], $dados); $this->_getEstornado($sheetData[$i], $dados); $this->_getStatusProposta($sheetData[$i], $dados); $this->_getTaxaContrato($sheetData[$i], $dados); $this->_getDataRecebimentoDiferido($sheetData[$i], $dados); $this->_getDataRecebimentoAdiantamento($sheetData[$i], $dados); $this->_getConvenioIdTabelaId($sheetData[$i], $dados); $this->_getPrazo($sheetData[$i], $dados); $this->_getSRCC($sheetData[$i], $dados); $this->contratosImportados[] = $dados['numero_contrato']; $this->salvarLinha($sheetData[$i], $dados); } catch ( Exception $e ) { $this->_addNaoImportado( $dados, $sheetData[$i], $this->naoImportados, $e->getMessage() ); } } } return $this->naoImportados; } public function salvarLinha($sheetData, &$dados) { $dadosContrato = null; $contrato = new Model_DbTable_Contrato(); $result = 0; //verifica se o contrato existe if( !empty($dados['numero_contrato']) && $dados['banco_id'] > 0 ){ $dadosContrato = $contrato->fetchRow("numero_contrato = '" . $dados['numero_contrato'] . "' AND banco_id = {$dados['banco_id']}"); } if( $dadosContrato == null ){ $this->_addNaoImportado($dados, $sheetData, $this->naoImportados, 'Contrato não cadastrado ou banco não localizado.'); } else { $this->_getCamposAtualizacao($sheetData, $dados, $dadosContrato); $result = $this->recebimentoComissao($dados, $dadosContrato->id); if ($result <= 0) { $this->_addNaoImportado($dados, $sheetData, $this->naoImportados, 'Uma falha pode ter ocorrido na inserção do recebimento do contrato'); return; } Model_Contrato::gravarEspelhoImportacao($dadosContrato->id, $sheetData, $this->getArquivoOrigem()); } } protected function _getCamposAtualizacao(array $sheetData, array $dados, Zend_Db_Table_Row_Abstract $dadosContrato) { $dbtableContrato = new Model_DbTable_Contrato(); $contratoPago = $dbtableContrato->isPaid($dadosContrato->id); //update na coluna data recebimento comissao na tabela de contratos if (!empty($dados['data_recebimento_comissao']) && $dados['data_recebimento_comissao'] != '0000-00-00' && (empty($dadosContrato->data_recebimento_comissao) || $dadosContrato->data_recebimento_comissao == '0000-00-00')) { $dadosContrato->data_recebimento_comissao = $dados['data_recebimento_comissao']; $dadosContrato->comissao_empresa = $dadosContrato->comissao_empresa > 0 ? $dadosContrato->comissao_empresa : $dados['comissao_empresa']; } //update na coluna valor_liquido na tabela tb_contratos if (!$contratoPago) { if (array_key_exists('valor_liquido', $dados) && $dados['valor_liquido']) { $dados['valor_liquido'] = String_Refatorar::parseStringToFloat($dados['valor_liquido']); $dadosContrato->valor_liquido = number_format($dados['valor_liquido'], 2, ',', '.'); } $this->_getValorBaseComissao($sheetData, $dadosContrato, $dados); if (!empty($dados['tabela_id'])) { $dadosContrato->tabela_id = $dados['tabela_id']; } if (!empty($dados['prazo'])) { $dadosContrato->prazo = $dados['prazo']; } if (array_key_exists('taxa_contrato', $dados) && $dados['taxa_contrato'] > 0) { $dadosContrato->taxa_contrato = $dados['taxa_contrato']; } } //update na coluna data_recebimento_bonus na tabela de contratos if (!empty($dados['data_recebimento_bonus'])) { $dadosContrato->data_recebimento_bonus = $dados['data_recebimento_bonus']; } //update na coluna bonus_recebido na tabela tb_contratos if (!empty($dados['bonus_recebido']) && $dados['bonus_recebido'] > 0 && !$contratoPago) { $dados['bonus_recebido'] = $dados['bonus_recebido'] ? String_Refatorar::parseStringToFloat($dados['bonus_recebido']) : 0.00; $dadosContrato->bonus_recebido = number_format($dados['bonus_recebido'], 2, ',', '.'); } if (!empty($dados['status_proposta'])) { $dadosContrato->status_proposta = $dados['status_proposta']; } if (array_key_exists('srcc', $dados)) { $dadosContrato->srcc = $dados['srcc']; } //coloca ou tira o estorno if (array_key_exists('estornado', $dados)) { $dadosContrato->estornado = $dados['estornado'] == 1 ? 1 : 0; } $dbtableContrato->update($dadosContrato->toArray(), "id = $dadosContrato->id"); } protected function recebimentoComissao($dados, $contratoId) { $dbtable = new Model_DbTable_RecebimentoContrato(); $dataRecebimento = null; $comissao = null; switch ($dados['tipo_remuneracao']) { case 2: //Diferimento $dataRecebimento = $dados['data_recebimento_diferido'] ?? null; $comissao = $dados['comissao_recebimento'] ?? null; break; case 3: //Adiantamento $dataRecebimento = $dados['data_recebimento_adiantamento'] ?? null; $comissao = $dados['comissao_recebimento'] ?? null; break; case 4: //Bônus $dataRecebimento = $dados['data_recebimento_bonus'] ?? null; $comissao = $dados['comissao_recebimento'] ?? null; break; default : //À vista $dataRecebimento = $dados['data_recebimento_comissao'] ?? null; $comissao = $dados['comissao_empresa'] ?? null; } return $dbtable->receberComissao([ 'contrato_id' => $contratoId, 'data_recebimento_comissao' => $dataRecebimento, 'parcelas' => $dados['parcelas'], 'comissao_empresa' => $comissao, 'rco' => !empty($dados['rco']) ? $dados['rco'] : null, 'data_saldo' => $dados['data_saldo'], 'tipo_remuneracao' => !empty($dados['tipo_remuneracao']) ? $dados['tipo_remuneracao'] : null, 'valor_lancamento' => !empty($dados['valor_lancamento']) ? $dados['valor_lancamento'] : null, 'natureza' => !empty($dados['natureza']) ? $dados['natureza'] : null, 'base_comissao' => !empty($dados['base_comissao']) ? $dados['base_comissao'] : null, 'descricao' => !empty($dados['descricao']) ? $dados['descricao'] : null ]); } /** * * @param array $dados * @return string */ protected function _getColunaBase($dados) { switch ( $dados['tipo_remuneracao'] ) { case 3: //Adiantamento $base = 'base_comissao_empresa_adiantamento'; break; case 4: //Bônus $base = 'base_comissao_empresa_bonus'; break; default : //À vista $base = 'base_comissao_empresa_valor'; } return $base; } /** * * @param Zend_DbTable_Row_Abstract $dadosContrato * @param array $dados */ protected function _getValorBaseComissao($sheetData, &$dadosContrato, &$dados = null) { $base = $this->_getColunaBase($dados); if (!empty($sheetData[$this->getColuna('valor_base_comissao')])) { $valor = $sheetData[$this->getColuna('valor_base_comissao')]; } else { $empresa = new Model_Empresa(); $tipoComissaoValor = $empresa->getBaseComissao( $dadosContrato->empresa_id, $dadosContrato->banco_id, $dadosContrato->tabela_id, $dadosContrato->convenio_id, $dadosContrato->produto, $dadosContrato->prazo, $dadosContrato->data_emissao, $dadosContrato->valor_liquido); $valor = $tipoComissaoValor == 'VALOR BRUTO' ? $dadosContrato->valor_bruto : $dadosContrato->valor_liquido; } $dados['base_comissao'] = $valor ? String_Refatorar::parseStringToFloat($valor) : 0.00; $dadosContrato->$base = $dados['base_comissao']; } /** * * @param array $sheetData * @param array $dados * @return void */ protected function _getNumeroContrato(array $sheetData, array &$dados) { if( !empty($sheetData[$this->getColuna('numero_contrato')]) ){ $dados['numero_contrato'] = $sheetData[$this->getColuna('numero_contrato')]; }else{ throw new Core_Exception('O número do contrato não foi informado'); } } protected function _getNumeroAde(array $sheetData, array &$dados) { if (!empty($sheetData[$this->getColuna('numero_ade')])) { $dados['numero_ade'] = $sheetData[$this->getColuna('numero_ade')]; } } protected function _getDataRecebimentoComissao(array $sheetData, array &$dados) { $colunaTipoRemuneracao = $dados['tipo_remuneracao']; if ($colunaTipoRemuneracao != 1) { $dados['data_recebimento_comissao'] = null; return; } $colunaDtRecebimentoComissao = $sheetData[$this->getColuna('data_saldo')]; $dataRecebimentoComissao = null; if( !empty($colunaDtRecebimentoComissao) ){ $dataRecebimentoComissao = Core_Util::convertDate($colunaDtRecebimentoComissao); if( is_array($dataRecebimentoComissao) ){ throw new Core_Exception("Não foi possível converter a data de recebimento para o banco de dados. ({$colunaDtRecebimentoComissao})"); } } $dados['data_recebimento_comissao'] = $dataRecebimentoComissao; } protected function _getValorBrutoLiquido(array $sheetData, array &$dados) { $valorLiquido = $this->getColuna('valor_liquido') ? String_Refatorar::parseStringToFloat($sheetData[$this->getColuna('valor_liquido')]) : null; $dados['valor_liquido'] = $valorLiquido; } protected function _getValorLancamento(array $sheetData, array &$dados) { $valorLancamento = $this->getColuna('valor_lancamento') ? String_Refatorar::parseStringToFloat($sheetData[$this->getColuna('valor_lancamento')]) : null; $dados['valor_lancamento'] = $valorLancamento; } protected function _getComissaoEmpresa(array $sheetData, array &$dados) { $colunaTipoRemuneracao = $dados['tipo_remuneracao']; if ($colunaTipoRemuneracao != 1) { $dados['comissao_empresa'] = 0; return; } $dados['comissao_empresa'] = String_Refatorar::parseStringToFloat($sheetData[$this->getColuna('comissao_empresa')]); } protected function _getRco(array $sheetData, array &$dados) { $dados['rco'] = $sheetData[$this->getColuna('rco')] ?? null; } protected function _getNumeroParcelas(array $sheetData, array &$dados) { $dados['parcelas'] = (int)$sheetData[$this->getColuna('parcelas')]; } protected function _getDataSaldo(array $sheetData, array &$dados) { $colunaDtSaldo = $sheetData[$this->getColuna('data_saldo')] ?? null; if( empty($colunaDtSaldo) ){ throw new Core_Exception("A data do saldo não foi informada"); } $dataSaldo = Core_Util::convertDate($colunaDtSaldo); if( is_array($dataSaldo) ){ throw new Core_Exception("Não foi possível converter a data saldo para o banco de dados. ({$colunaDtSaldo})"); } $dados['data_saldo'] = $dataSaldo; } protected function _getEstornado(array $sheetData, array &$dados) { $colunaEstornado = $dados['tipo_pagamento']; //tipo_pagamento = Débito e natureza = Comissão if ($colunaEstornado == 'D' && in_array($dados['natureza'], [1,4])) { $dados['estornado'] = 1; $dados['valor_lancamento'] = abs($dados['valor_lancamento']) * (-1); } elseif ($colunaEstornado == 'C') { $dados['estornado'] = 0; } } protected function _getTipoPagamento(array $sheetData, array &$dados) { $colunaTipoPagamento = $sheetData[$this->getColuna('tipo_pagamento')] ?? "C"; $dados['tipo_pagamento'] = $colunaTipoPagamento; } protected function _getNatureza(array $sheetData, &$dados) { $colNatureza = $sheetData[$this->getColuna('natureza')] ?? 1; $dados['natureza'] = $colNatureza; } protected function _getTipoRemuneracao(array $sheetData, array &$dados) { $colunaTipoRemuneracao = $sheetData[$this->getColuna('tipo_remuneracao')] ?? 1; $dados['tipo_remuneracao'] = $colunaTipoRemuneracao; } protected function _getDescricao(array $sheetData, array &$dados) { $colunaDescricao = $sheetData[$this->getColuna('descricao')] ?? null; $dados['descricao'] = $colunaDescricao; } /** * * @param array $naoImportados * @param string $motivo * @return void */ protected function _addNaoImportado(array $dados, array $sheetData, array &$naoImportados, $motivo = '') { $result = array_push($naoImportados, [ 'numero_contrato' => isset($dados['numero_contrato']) ? $dados['numero_contrato'] : '00000', 'tabela' => $this->getColuna('tabela') ? $sheetData[$this->getColuna('tabela')] : null, 'valor' => $this->getColuna('valor_bruto') ? $sheetData[$this->getColuna('valor_bruto')] : null, 'valor_liquido' => $this->getColuna('valor_liquido') ? $sheetData[$this->getColuna('valor_liquido')] : null, 'prazo' => $this->getColuna('prazo') ? $sheetData[$this->getColuna('prazo')] : null, 'parcelas' => $this->getColuna('parcelas') ? $sheetData[$this->getColuna('parcelas')] : null, 'data_efetiva_contrato' => $this->getColuna('data_saldo') ? $sheetData[$this->getColuna('data_saldo')] : null, 'comissao_empresa' => $this->getColuna('comissao_empresa') ? $sheetData[$this->getColuna('comissao_empresa')] : null, 'rco' => $this->getColuna('rco') ? $sheetData[$this->getColuna('rco')] : null, 'descricao' => $this->getColuna('descricao') ? $sheetData[$this->getColuna('descricao')] : null, 'motivo' => $motivo ]); return $result; } protected function _getDataRecebimentoBonus(array $sheetData, array &$dados) { $colunaTipoRemuneracao = $dados['tipo_remuneracao']; if ($colunaTipoRemuneracao != 4) { $dados['data_recebimento_bonus'] = null; return; } $colunaDtRecebimentoBonus = $sheetData[$this->getColuna('data_recebimento_bonus')] ?? null; $dataRecebimentoBonus = null; if (!empty($colunaDtRecebimentoBonus)) { $dataRecebimentoBonus = Core_Util::convertDate($colunaDtRecebimentoBonus); if (is_array($dataRecebimentoBonus)) { throw new Core_Exception("Padrão de data recebimento do bonus está errado. ({$colunaDtRecebimentoBonus})"); } } $percentualComissao = $sheetData[$this->getColuna('bonus_recebido')] ?? $sheetData[$this->getColuna('comissao_empresa')]; $dados['comissao_recebimento'] = String_Refatorar::parseStringToFloat($percentualComissao); $dados['data_recebimento_bonus'] = $dataRecebimentoBonus; } protected function _getDataRecebimentoDiferido(array $sheetData, array &$dados) { if ($dados['tipo_remuneracao'] != 2) { return; } $colunaDtRecebimentoDiferido = $sheetData[$this->getColuna('data_saldo')] ?? null; $dataRecebimentoDiferido = null; if (!empty($colunaDtRecebimentoDiferido)) { $dataRecebimentoDiferido = Core_Util::convertDate($colunaDtRecebimentoDiferido); if (is_array($dataRecebimentoDiferido)) { throw new Core_Exception("Padrão de data recebimento do diferido está errado. ({$colunaDtRecebimentoDiferido})"); } } $dados['comissao_recebimento'] = String_Refatorar::parseStringToFloat($sheetData[$this->getColuna('comissao_empresa')]); $dados['data_recebimento_diferido'] = $dataRecebimentoDiferido; } protected function _getDataRecebimentoAdiantamento(array $sheetData, array &$dados) { if ($dados['tipo_remuneracao'] != 3) { return; } $colunaDtRecebimentoAdiantamento = $sheetData[$this->getColuna('data_saldo')] ?? null; $dataRecebimentoAdiantamento = null; if (!empty($colunaDtRecebimentoAdiantamento)) { $dataRecebimentoAdiantamento = Core_Util::convertDate($colunaDtRecebimentoAdiantamento); if (is_array($dataRecebimentoAdiantamento)) { throw new Core_Exception("Padrão de data recebimento do bonus está errado. ({$colunaDtRecebimentoAdiantamento})"); } } $dados['comissao_recebimento'] = String_Refatorar::parseStringToFloat($sheetData[$this->getColuna('comissao_empresa')]); $dados['data_recebimento_adiantamento'] = $dataRecebimentoAdiantamento; } protected function _getValorBonus(array $sheetData, array &$dados) { $colunaTipoRemuneracao = $dados['tipo_remuneracao']; if ($colunaTipoRemuneracao != 4) { $dados['bonus_recebido'] = 0; return; } $valorBonus = $this->getColuna('bonus_recebido') ? trim($sheetData[$this->getColuna('bonus_recebido')]) : null; if (empty($valorBonus) && !empty($sheetData[$this->getColuna('valor_base_comissao')]) && !empty($dados['valor_lancamento'])) { $bonus = $dados['valor_lancamento']; $baseComissao = String_Refatorar::parseStringToFloat($sheetData[$this->getColuna('valor_base_comissao')]); $valorBonus = number_format(($bonus / $baseComissao) * 100, 2, '.', ''); } $dados['bonus_recebido'] = $valorBonus; } protected function _getStatusProposta(array $sheetData, array &$dados) { $colunaStatusProposta = !empty($sheetData[$this->getColuna('status_proposta')]) ? trim($sheetData[$this->getColuna('status_proposta')]) : null; if( !empty($dados['estornado']) ){ $colunaStatusProposta = 'Estornado'; } if( empty($colunaStatusProposta) ){ return; } $status = new Model_StatusProposta(); $dadosStatus = $status->existe($colunaStatusProposta); // verifica se o status existe if ($dadosStatus == null) { // se não existir, cadastra $status->setDescricao($colunaStatusProposta); $statusId = $status->salvar($status); } else if ($dadosStatus['parent_id']) { $statusId = $dadosStatus['parent_id']; } else { $statusId = $dadosStatus['id']; } $dados['status_proposta'] = $statusId; } protected function _getBancoId(array $sheetData, array &$dados) { $bancoId = null; if ($this->getBancoGenerico() == 'BANCO GENERICO') { $banco = isset($sheetData[$this->getColuna('banco')]) && !empty($sheetData[$this->getColuna('banco')]) ? $sheetData[$this->getColuna('banco')] : null; if (!$banco) { throw new Exception("Campo 'Banco' do layout banco está vazio, favor inserir."); } $existBanco = Model_Banco::bancoPorNome($banco); if (!$existBanco) { throw new Exception("Banco: '{$banco}' não encontrado no sistema."); } $bancoId = $existBanco; } else { $bancoId = $this->getBancoId(); } if (!$bancoId) { throw new Exception("Banco não identificado."); } $dados['banco_id'] = $bancoId; } protected function _getTaxaContrato(array $sheetData, array &$dados) { $colunaTaxa = $sheetData[$this->getColuna('taxa_contrato')] ?? null; $dados['taxa_contrato'] = String_Refatorar::parseStringToFloat($colunaTaxa); } protected function _getConvenioIdTabelaId(array $sheetData, array &$dados) { $colunaConvenio = $sheetData[$this->getColuna('convenio')] ?? null; $colunaTabela = $sheetData[$this->getColuna('tabela')] ?? null; if (!empty($colunaConvenio)) { $dados['convenio_id'] = (new Model_Convenio())->getOrCreateConvenio($colunaConvenio); } if (!empty($colunaTabela) && !empty($dados['convenio_id'])) { $dados['tabela_id'] = (new Model_Tabela())->getOrCreateTabelaByNome(null, $colunaTabela, $dados['convenio_id'], $this->getBancoId()); } } protected function _getPrazo(array $sheetData, array &$dados) { $dados['prazo'] = $sheetData[$this->getColuna('prazo')] ?? null; } protected function _getSRCC(array $sheetData, array &$dados): void { $flagSRCC = $sheetData[$this->getColuna('srcc')] ?? 0; $dados['srcc'] = (int) (new SRCCService())->isFlagSRCC($flagSRCC); } }
💾 保存文件
← 返回文件管理器