✏️ 正在编辑: Sincronizacao.php
路径:
/srv/systems_dir/yuppiecred-lidernegocios/library/Core/Contrato/Sincronizacao.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php class Core_Contrato_Sincronizacao { protected $importados = array(); protected $naoImportados = array(); protected $novasTabelas = false; protected $sincId; protected $token; protected $sistemaOrigem; protected $subestabelecidoId = null; protected $empresaId = null; public function __construct($id, $token, $sistema, $subestabelecidoId = null, $empresaId = null) { $this->sincId = $id; $this->token = $token; $this->sistemaOrigem = $sistema; $this->subestabelecidoId = $subestabelecidoId; $this->empresaId = $empresaId; } public function importar($dados, $automatico = false) { if (is_array($dados)) { foreach ($dados as $dadosContrato) { if (is_array($dadosContrato)) { try { $this->_getBancoId($dadosContrato); $this->_getProduto($dadosContrato); $this->_getValor("valor_bruto", $dadosContrato); $this->_getValor("valor_liquido", $dadosContrato); $this->_getValor("valor_prestacao", $dadosContrato); $this->_getFormaLiberacao($dadosContrato); $this->_getConvenioId($dadosContrato); $this->_getTabelaId($dadosContrato, $this->novasTabelas); $this->_getCorretorId($dadosContrato); $this->_getEmpresaId($dadosContrato); $this->_getClienteId($dadosContrato); $this->_getValorFixoEmpresaCorretor($dadosContrato); $this->_getComissaoCorretorAndEmpresa($dadosContrato, $dadosContrato); $this->_getStatusProposta($dadosContrato); $this->salvarLinha($dadosContrato); } catch ( Exception $e ) { Yuppie_Log::write("Erro ao inserir contrato => " . $e->getMessage() . " - Dados: " . print_r($dadosContrato, true), $this); $this->_addNaoImportado($dadosContrato, $this->naoImportados, $e->getMessage()); } } } } $dbt = new Model_DbTable_SincYuppies(); $ultimaSinc = date("Y-m-d H:i:s"); $dbt->update(["ultima_sincronizacao" => $ultimaSinc], "id = '$this->sincId'"); if ($automatico) { Yuppie_Log::write("Dados da sincronização automática: " . " - importados => " . print_r($this->importados, true) . " - naoImportados => " . print_r($this->naoImportados, true) . " - novasTabelas => " . print_r($this->novasTabelas, true), $this); return; } echo json_encode(["importados" => $this->importados, "naoImportados" => $this->naoImportados, "novasTabelas" => $this->novasTabelas]); } protected function salvarLinha(&$dados) { unset($dados['base_comissao']); unset($dados['base_comissao_empresa']); $dataLiberacao = null; if ( isset($dados['contrato_data_liberacao']) && $dados['contrato_data_liberacao']) { $dataLiberacao = $dados['contrato_data_liberacao']; } /* Apenas para LOG */ $urlSistema = Yuppie_Auth::getSiteKey(); $writer = new Zend_Log_Writer_Stream("/var/log/sistemayuppie/zf_log_planilha_{$urlSistema}_" . Zend_Date::now()->get("ddMMyyyy") . ".txt"); $classeChamada = get_class($this); $log = new Zend_Log($writer); $log->log('#######################', Zend_Log::INFO); $log->log("IMPORTAÇÃO: " . $classeChamada, Zend_Log::INFO); $log->log('TOKEN IMPORTADO: ' . print_r($this->token, true), Zend_Log::INFO); $log->log('SISTEMA DE ORIGEM DOS CONTRATOS: ' . print_r($this->sistemaOrigem, true), Zend_Log::INFO); $log->log("Usuário logado: " . Yuppie_Auth::getIdentity()->login, Zend_Log::INFO); $log->log('Formatação (Dt Liberacao): ' . $dataLiberacao, Zend_Log::INFO); $log->log('Formatação (Dt Emissao): ' . $dados['contrato_data_emissao'], Zend_Log::INFO); $dbtContrato = new Model_DbTable_Contrato(); //verifica se o contrato existe if (isset($dados['contrato_numero_contrato'])) { $dadosContrato = $dbtContrato->fetchRow( "numero_contrato = '{$dados['contrato_numero_contrato']}' AND banco_id = {$dados['banco_id']}" ); } if (!empty($dadosContrato)) { try { $log->log("Tentativa de atualização do contrato: {$dados['contrato_numero_contrato']}", Zend_Log::INFO); $dadosAtualizacao = array( "subestabelecido_id" => $this->subestabelecidoId, "tabela_id" => $dados['tabela_id'], "convenio_id" => $dados['convenio_id'], "banco_id" => $dados['banco_id'], "cliente_id" => $dados['cliente_id'], "produto" => $dados['produto'], "tipo" => $dados['tipo'], "comissao_empresa" => $dados['comissao_empresa'], "comissao_corretor" => $dados['comissao_corretor'] ); $this->_setDados($dadosAtualizacao, $dados, "contrato"); foreach ($dados as $key => $value) { $log->log("[$key] => $value", Zend_Log::INFO); } $arrDiff = array_diff_assoc($dadosAtualizacao, $dadosContrato->toArray()); $protocoloContrato = new Model_DbTable_ProtocoloContrato(); $protocolos = $protocoloContrato->fetchRow("contrato_id = " . $dadosContrato['id'], 'id DESC'); if (!empty($arrDiff) && empty($protocolos)) { $arrDiff['id'] = $dadosContrato->id; $contrato = $dbtContrato->update(array_filter($arrDiff), "id = {$dadosContrato->id}"); if ($contrato > 0) { $this->importados['update'][] = isset($dadosContrato['numero_contrato']) ? $dadosContrato['numero_contrato'] : $contrato ; $log->log("Contrato atualizado.", Zend_Log::INFO); } else { $log->log("Contrato não foi atualizado.", Zend_Log::INFO); $this->_addNaoImportado( $dadosContrato->toArray(), $this->naoImportados, 'Contrato não atualizado.' ); } } else { $log->log("Contrato não possui dados para atualizar ou está pago.", Zend_Log::INFO); $this->_addNaoImportado( $dadosContrato->toArray(), $this->naoImportados, 'Não há dados a atualizar .' ); } } catch ( Exception $e ) { $log->log("[Exception] Erro ao atualizar contrato. " . $e->getTraceAsString(), Zend_Log::INFO); $this->_addNaoImportado($dadosContrato->toArray(), $this->naoImportados, $e->getMessage()); } } else { try { $log->log("Tentativa de inserção do contrato: {$dados['contrato_numero_contrato']}", Zend_Log::INFO); $dadosContrato = array( "subestabelecido_id" => $this->subestabelecidoId, "empresa_id" => $dados['empresa_id'], "tabela_id" => $dados['tabela_id'], "convenio_id" => $dados['convenio_id'], "banco_id" => $dados['banco_id'], "cliente_id" => $dados['cliente_id'], "produto" => $dados['produto'], "corretor_id" => $dados['corretor_id'], "tipo" => $dados['tipo'], "comissao_empresa" => $dados['comissao_empresa'], "comissao_corretor" => $dados['comissao_corretor'] ); $this->_setDados($dadosContrato, $dados, "contrato"); foreach ($dados as $key => $value) { $log->log("[$key] => $value", Zend_Log::INFO); } $contrato = $dbtContrato->insert($dadosContrato); if ($contrato > 0) { $this->importados['insert'][] = isset($dadosContrato['numero_contrato']) ? $dadosContrato['numero_contrato'] : $contrato; $log->log("Contrato adicionado.", Zend_Log::INFO); } else { $log->log("Contrato não foi adicionado.", Zend_Log::INFO); $this->_addNaoImportado( $dadosContrato, $this->naoImportados, 'Contrato não inserido.' ); } } catch (Exception $e) { $log->log("[Exception] Erro ao adicionar contrato. " . $e->getTraceAsString(), Zend_Log::INFO); $this->_addNaoImportado($dadosContrato, $this->naoImportados, $e->getMessage()); } } } protected function _addNaoImportado(array $dados, array &$naoImportados, $motivo = '') { array_push($naoImportados, array( 'numero_contrato' => $dados['numero_contrato'] ?? $dados['contrato_numero_contrato'], 'tabela' => $dados['tabela'] ?? null, 'cpf' => $dados['cpf_cliente'] ?? null, 'cliente' => $dados['nome_cliente'] ?? null, 'valor' => $dados['valor_bruto'] ?? null, 'valor_liquido' => $dados['valor_liquido'] ?? null, 'prazo' => $dados['prazo'] ?? null, 'codigo_atendente' => $dados['codigo_agente'] ?? null, 'codigo_vendedor' => $dados['corretor_id'] ?? null, 'motivo' => $motivo )); } protected function _getValor($key, array &$dados){ $valor = isset($dados["contrato_$key"]) ? trim($dados["contrato_$key"]) : null; $dados[$key] = @number_format($valor, 2, ',', '.') ; } protected function _setDados(&$dadosSave, $dadosGet, $pattern){ $keys = array_keys($dadosGet); $matches = preg_grep("/{$pattern}_/", $keys); foreach ($matches as $key){ $newKey = preg_replace("/({$pattern}_)/", "", $key); $dadosSave[$newKey] = $dadosGet[$key]; } } protected function _getBancoId(array &$dados) { $banco = isset($dados['banco_nome']) ? $dados['banco_nome'] : null; $dbtBancos = new Model_Banco(); $bancoId = $dbtBancos->bancoPorNome($banco); if(is_null($bancoId)){ throw new Core_Exception("O banco do contrato não foi identificado."); } $dados['banco_id'] = $bancoId; } protected function _getProduto(array &$dados) { $codigoProduto = isset($dados['contrato_produto']) ? $dados['contrato_produto'] : null; $descricaoProduto = isset($dados['produto_descricao']) ? $dados['produto_descricao'] : null; if ($codigoProduto) { $produto = new Model_Produto(); $dadosProduto = $produto->existe($codigoProduto, $dados['banco_id']); if ($dadosProduto) { $codigoProduto = $dadosProduto['codigo']; } else { $produto->setCodigo($codigoProduto); $produto->setDescricao($descricaoProduto); $produto->setBancoId($dados['banco_id']); $produto->setTipo($dados['contrato_tipo']); $produto->salvar($produto); } $dados['produto'] = $codigoProduto; } } protected function _getFormaLiberacao(array &$dados) { $dados['forma_liberacao'] = isset($dados['contrato_forma_liberacao']) ? ($dados['contrato_forma_liberacao'] == 'Ordem de Pagamento' ? 'O/P' : 'C/C') : null; } protected function _getConvenioId(array &$dados) { $convenio = isset($dados['convenio_nome']) ? $dados['convenio_nome'] : null; $convenioId = null; if( !empty($convenio) ){ $modelConvenio = new Model_Convenio(); $dadosConvenio = $modelConvenio->existe($convenio); //verifica se o convenio existe if( isset($dadosConvenio['id']) ){ $convenioId = $dadosConvenio['parent_id'] ? $dadosConvenio['parent_id'] : $dadosConvenio['id']; } else { // se não existir cadastra $dbtConvenio = new Model_DbTable_Convenio(); $convenioId = $dbtConvenio->insert(array( 'nome' => $convenio )); } } $dados['convenio_id'] = $convenioId; } protected function _getTabelaId(array &$dados, $novasTabelas) { $tabela = isset($dados['tabela_nome']) ? $dados['tabela_nome'] : null; $tabelaCodigo = isset($dados['tabela_codigo']) ? $dados['tabela_codigo'] : null; $convenioId = isset($dados['convenio_id']) ? $dados['convenio_id'] : null; $tipoFormalizacao = isset($dados['tipo_formalizacao']) ? $dados['tipo_formalizacao'] : 0; $dados['tabela_id'] = (new Model_Tabela)->getOrCreateTabelaByNome($tabelaCodigo, $tabela, $convenioId, $dados['banco_id'], $tipoFormalizacao); } protected function _getCorretorId(array &$dados) { $corretorSenha = new Model_CorretorSenha(); $dados['digitador'] = Yuppie_Auth::getIdentity()->login; $corretorId = null; $dadosCorretor = null; if( empty($dados['banco_id']) ){ return; } //pesquisa pelo codigo do usuario em digitador if( !empty($dados['contrato_digitador']) ){ $dados['digitador'] = $dados['contrato_digitador']; $corretorId = $corretorSenha->getCorretorIdBySenha($dados['contrato_digitador'], $dados['banco_id']); $dadosCorretor = (new Model_Corretor())->exibir($corretorId); $dados['empresa_id'] = $dadosCorretor->empresa_id ?? Yuppie_Auth::getIdentity()->empresa_id; } if( !empty($dadosCorretor) && $dadosCorretor->obedecer_id && !empty($dados['cliente_complemento']) ){ //pesquisa pelo ID do corretor em complemento do endereço $dadosCorretor = (new Model_Corretor())->exibir($dados['cliente_complemento']); if( $dadosCorretor != null ){ $corretorId = $dadosCorretor->id; $dados['empresa_id'] = $dadosCorretor->empresa_id; } } $dados['corretor_id'] = $corretorId; } protected function _getEmpresaId(array &$dados) { $corretorId = isset($dados['corretor_id']) && $dados['corretor_id'] > 0 ? $dados['corretor_id'] : 0; if( $corretorId > 0 ){ $corretor = new Model_Corretor(); $dadosCorretor = $corretor->exibir($corretorId); $empresaId = $dadosCorretor['empresa_id']; } $dados['empresa_id'] = isset($empresaId) ? $empresaId : $this->empresaId; } protected function _getClienteId(array &$dados) { $cpfCliente = isset($dados['cliente_cpf']) ? $dados['cliente_cpf'] : null; $dbtCliente = new Model_DbTable_Cliente(); $cliente = $dbtCliente->fetchRow("cpf = '" . $cpfCliente . "'"); if( $cliente ){ $clienteId = $cliente->id; } else { $dadosCliente = array( 'empresa_id' => $dados['empresa_id'], 'cpf' => $cpfCliente ); $this->_setDados($dadosCliente, $dados, "cliente"); $clienteId = $dbtCliente->insert($dadosCliente); } $dados['cliente_id'] = $clienteId ? $clienteId : null; } protected function _getValorFixoEmpresaCorretor(array &$dados) { if( isset($dados['corretor_id']) && $dados['corretor_id'] > 0 ){ $corretor = new Model_Corretor(); $valorFixoCorretor = $corretor->getValorFixo( $dados['corretor_id'], $dados['banco_id'], $dados['tabela_id'], $dados['convenio_id'], $dados['produto'], $dados['contrato_prazo'], $dados['contrato_data_emissao'], $dados['contrato_tipo'] ); $dados['contrato_valor_fixo_corretor'] = $valorFixoCorretor; } if( $dados['empresa_id'] > 0 ){ $empresa = new Model_Empresa(); $valorFixoEmpresa = $empresa->getValorFixo( $dados['empresa_id'], $dados['banco_id'], $dados['tabela_id'], $dados['convenio_id'], $dados['produto'], $dados['contrato_prazo'], $dados['contrato_data_emissao'], $dados['contrato_valor_liquido'] ); $dados['contrato_valor_fixo_empresa'] = $valorFixoEmpresa; } } protected function _getComissaoCorretorAndEmpresa(array $sheetData, array &$dados) { $comissaoCorretor = isset($sheetData['contrato_comissao_corretor']) ? $sheetData['contrato_comissao_corretor'] : null; $comissaoEmpresa = isset($sheetData['contrato_comissao_empresa']) ? $sheetData['contrato_comissao_empresa'] : null; if ($comissaoCorretor) { $dados['comissao_corretor'] = Core_FilterValor::filter($comissaoCorretor); } if ($comissaoEmpresa) { $dados['comissao_empresa'] = Core_FilterValor::filter($comissaoEmpresa); } $dbtable = new Model_DbTable_Contrato(); $tipoComissao = is_null($dados['corretor_id']) ? 2 : 0; $this->_setDados($dados, $sheetData, "contrato"); $dbtable->getComissaoCorretorAndEmpresa($dados, $tipoComissao); } /** * * @param array $dados * @param array $dados * @return void */ protected function _getStatusProposta(array &$dados) { if(isset($dados['status_proposta_nome'])){ $status = new Model_StatusProposta(); $dadosStatus = $status->existe($dados['status_proposta_nome']); if( !$dadosStatus ){ // se não existir, cadastra $status->setDescricao($dados['status_proposta_nome']); $statusId = $status->salvar($status); } else if( !empty($dadosStatus['parent_id']) ){ $statusId = $dadosStatus['parent_id']; } else { $statusId = $dadosStatus['id']; } } unset($dados['status_proposta_nome']); $dados['contrato_status_proposta'] = isset($statusId) ? $statusId : null; } /** * @param $comissoes */ public function setarComissoes($comissoes, $automatico = false) { $dbtRecebimento = new Model_DbTable_RecebimentoContrato(); $dbtContrato = new Model_DbTable_Contrato(); if (empty($comissoes)) { return; } $dbtBancos = new Model_Banco(); foreach ($comissoes as $comissao) { $bancoId = $dbtBancos->bancoPorNome($comissao['banco_nome']); if (empty($comissao['numero_contrato']) || empty($bancoId)) { continue; } $contrato = $dbtContrato->findByNumeroContrato($comissao['numero_contrato'], $bancoId); if (empty($contrato)) { continue; } try { $dbtRecebimento->receberComissao([ 'contrato_id' => $contrato['id'], 'data_recebimento_comissao' => $comissao['data_recebimento'], 'data_saldo' => $comissao['data_recebimento'], 'valor_lancamento' => $comissao['valor'], 'base_comissao' => $comissao['base_comissao'], 'descricao' => $comissao['situacao'], 'natureza' => 1, 'tipo_remuneracao' => 1, 'comissao_empresa' => $comissao['percentual'], ]); switch ($comissao['situacao']) { case 'Pagamento comissão': $dbtContrato->updateComissao( [ 'data_recebimento_comissao' => $comissao['data_recebimento'], 'status_proposta' => Model_Tipo::getStatusPropostaOrCreate('Operação Finalizada') ], "id = {$contrato['id']}" ); break; case 'Estorno': $dbtContrato->update( [ 'estornado' => 1, 'status_proposta' => Model_Tipo::getStatusPropostaOrCreate('ESTORNADO') ], "id = {$contrato['id']}" ); break; case 'Devolução': $dbtContrato->update( [ 'estornado' => 0, 'status_proposta' => Model_Tipo::getStatusPropostaOrCreate('Operação Finalizada') ], "id = {$contrato['id']}" ); break; } } catch (Exception $exception) { $this->_addNaoImportadoComissao($contrato['numero_contrato'], $comissao, $this->naoImportados, $exception->getMessage()); } } $dbt = new Model_DbTable_SincYuppies(); $ultimaSinc = date("Y-m-d H:i:s"); $dbt->update(["ultima_sincronizacao" => $ultimaSinc], "id = '$this->sincId'"); if ($automatico) { Yuppie_Log::write("Dados da sincronização automática: " . " - importados => " . print_r($this->importados, true) . " - naoImportados => " . print_r($this->naoImportados, true) . " - novasTabelas => " . print_r($this->novasTabelas, true), $this); return; } echo json_encode(["importados" => $this->importados, "naoImportados" => $this->naoImportados, "novasTabelas" => $this->novasTabelas]); } /** * @param $numeroContrato * @param array $dados * @param array $naoImportados * @param string $motivo */ protected function _addNaoImportadoComissao($numeroContrato, array $dados, array &$naoImportados, $motivo = '') { array_push($naoImportados, [ 'numero_contrato' => $numeroContrato, 'data_recebimento_comissao' => $dados['data_recebimento'], 'data_saldo' => $dados['data_recebimento'], 'valor_lancamento' => $dados['valor'], 'base_comissao' => $dados['base_comissao'], 'descricao' => $dados['situacao'], 'natureza' => 1, 'tipo_remuneracao' => 1, 'motivo' => $motivo ]); } }
💾 保存文件
← 返回文件管理器