✏️ 正在编辑: CorretorExternoService.php
路径:
/srv/systems_dir/yuppiecred/application/Modules/Pessoa/Service/CorretorExternoService.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php namespace Modules\Pessoa\Service; use Model_Rota; use Modules\Core\Enum\TipoAnexosEnum; use Modules\Core\Exception\FormException; use Modules\Core\Service\RecaptchaService; use Modules\Comercial\Enum\NivelEsteiraEnum; use Modules\Pessoa\Enum\StatusCadastroCorretorEnum; use Zend_Controller_Request_Abstract as Request; use Modules\Pessoa\Form\CorretorCadastroSiteForm; use Zend_File_Transfer_Adapter_Http as FileTransfer; use Modules\Comercial\Model\DbTable\RotaTokenTable; class CorretorExternoService { /** @var string */ public const ERRO_ANEXO = 'Necessário realizar o envio do seguinte documento: %s', ERRO_ANEXO_GENERICO = 'Não foi possivel realizar o envio dos documentos verifique o tipo e tamanho.' ; protected $corretorId; protected $rotaId; /** * @param Request $request * @param CorretorCadastroSiteForm $form * @param string $token * * @return int|null */ public function salvar( Request $request, CorretorCadastroSiteForm &$form, string $token ): ?int { if (!$request->isPost()) { return null; } $dados = $request->getPost(); $tipoUpload = $dados['tipo_upload']; $form->populate($dados); $anexos = $this->validarAnexos($dados, $form); $this->validacoes($dados, $form); $this->corretorId = $this->insertCorretor($dados, $token); $this->enviarTermoResponsabilidade($dados['email']); $this->salvarAnexos($anexos, $tipoUpload); $this->enviarEmailBoasVindas(); $this->notificarGerente(); return $this->corretorId; } /** * @param Request $request * @param CorretorCadastroSiteForm $form * @throws \Zend_Form_Exception */ private function validacoes(array $dados, CorretorCadastroSiteForm &$form): void { RecaptchaService::validRecaptcha($dados); if (!$form->isValid($dados)) { throw new FormException(); } } /** * @param array $dados * @param string $token * * @return array */ private function tratarDados(array $dados, string $token): array { $dadosRota = (new RotaTokenTable())->findValidToken($token); $this->rotaId = $dadosRota['rota_id']; $dados['rota_id'] = $dadosRota['rota_id']; $dados['empresa_id'] = $dadosRota['empresa_id']; $dados['cpf'] = \String_Refatorar::formatarCpf($dados['cpf']); $dados['cpf_responsavel'] = !empty($dados['cpf_responsavel']) ? \String_Refatorar::formatarCpf($dados['cpf_responsavel']) : null; $dados['obs'] = ''; $dados['bloquear_pagamento'] = 0; $dados['permitir_sinc_yuppies'] = 0; $dados['nivel_esteira'] = NivelEsteiraEnum::ESTEIRA_PADRAO; $dados['status_cadastro'] = StatusCadastroCorretorEnum::AGUARDANDO_ANALISE; if (!empty($dados['data_nascimento'])) { try { $data = new \Zend_Date($dados['data_nascimento'], \Zend_Date::DATES, 'pt'); $dados['data_nascimento'] = $data->toString('yyyy-MM-dd'); } catch (\Zend_Date_Exception $e) { $dados['data_nascimento'] = null; } } else { $$dados['data_nascimento'] = null; } unset($dados['btn_save']); unset($dados['g-recaptcha-response']); unset($dados['tipo_upload']); unset($dados['MAX_FILE_SIZE']); return $dados; } /** * @param string $email */ private function enviarTermoResponsabilidade(string $email): void { $rota = (new Model_Rota())->exibir($this->rotaId); try { (new \Service_Corretor_TermoResponsabilidade())->sendExterno($this->corretorId, $email, $rota->termo_id); } catch (\Throwable $throwable) { } } /** * @param array $dados * @param CorretorCadastroSiteForm $form * @return \Zend_File_Transfer_Adapter_Http */ private function validarAnexos(array $dados, CorretorCadastroSiteForm &$form): FileTransfer { if (TipoAnexosEnum::CNH === (int) $dados['tipo_upload']) { return $this->validarCNHUpload($form); } return $this->validarRgCpfUpload($form); } /** * @param CorretorCadastroSiteForm $form * @return FileTransfer */ private function validarCnhUpload(CorretorCadastroSiteForm &$form): FileTransfer { $uplaod = new FileTransfer(); $fileinfo = $uplaod->getFileInfo()['CNH'] ?? []; $form->removeAnexos(); if (empty($fileinfo) || empty($fileinfo['size'])) { throw new \DomainException(sprintf(self::ERRO_ANEXO, TipoAnexosEnum::CNH_S)); } return $uplaod; } /** * @param CorretorCadastroSiteForm $form * @return FileTransfer */ private function validarRgCpfUpload(CorretorCadastroSiteForm &$form): FileTransfer { $uplaod = new FileTransfer(); $fileinfo = $uplaod->getFileInfo() ?? []; if (empty($fileinfo['CPF']) || empty($fileinfo['CPF']['size'])) { throw new \DomainException(sprintf(self::ERRO_ANEXO, TipoAnexosEnum::CPF_S)); } if (empty($fileinfo['RG']) || empty($fileinfo['RG']['size'])) { throw new \DomainException(sprintf(self::ERRO_ANEXO, TipoAnexosEnum::RG_S)); } $form->removeAnexos(); return $uplaod; } /** * @param FileTransfer $anexos * @param int $anexosTipo */ private function salvarAnexos(FileTransfer $anexos, int $anexosTipo): void { $fields = []; $fields['corretor_id'] = $this->corretorId; switch ($anexosTipo) { case TipoAnexosEnum::CNH: $descricao = TipoAnexosEnum::CNH_S; break; case TipoAnexosEnum::RGCPF: $descricao = TipoAnexosEnum::RG_E_CPF_S; break; default: $descricao = 'Comprovante de Endereço'; break; } try { \Upload::save($anexos, $fields, 'corretores'); $dataDocumento = []; $dataDocumento['corretor_id'] = $fields['corretor_id']; if (!is_array($fields['anexo'])) { $dataDocumento['descricao'] = $descricao; $dataDocumento['anexo'] = $fields['anexo']; $documento = new \Model_CorretorDocumento($dataDocumento); $documento->salvar($documento); } foreach ($fields['anexo'] as $key => $file) { $dataDocumento['descricao'] = $key; $dataDocumento['anexo'] = $file; $documento = new \Model_CorretorDocumento($dataDocumento); $documento->salvar($documento); } } catch (\Throwable $throwable) { throw new \DomainException(self::ERRO_ANEXO_GENERICO); } } /** * @return void */ public function enviarEmailBoasVindas() { try { \Service_Relatorio_Gerador::emailBoasVindas($this->corretorId); } catch (\Throwable $throwable) { } } /** * @param $dados * @param string $token * @return int */ private function insertCorretor($dados, string $token): int { $dados = $this->tratarDados($dados, $token); $corretor = (new \Model_DbTable_Corretor())->insert($dados); if (!$corretor) { throw new \Exception('Ocorreu um erro durante a solicitação.'); } return $corretor; } public function notificarGerente() { try { \Service_Corretor_Notificacao::notificarGerente($this->corretorId); } catch (\Throwable $e) { \Yuppie_Log::write( "Falha no envio da notificação para o gerente: " . $e->getMessage() . "\n" . $e->getTraceAsString(), $this ); } } }
💾 保存文件
← 返回文件管理器