Esempio n. 1
0
        public IActionResult Persistir([FromBody] PrestadorVM prestadorVM)
        {
            SqlConnection eacessoConnection = new SqlConnection(_connectionStrings.Value.EacessoConnection);

            eacessoConnection.Open();
            SqlTransaction eacessoTran  = eacessoConnection.BeginTransaction();
            var            rmConnection = new SqlConnection(_connectionStrings.Value.RMIntegracaoConnection);

            rmConnection.Open();
            var rmTran = rmConnection.BeginTransaction();

            using (IDbContextTransaction tran = _unitOfWork.BeginTran())
            {
                try
                {
                    if (prestadorVM.Id == 0)
                    {
                        foreach (var contrato in prestadorVM.ContratosPrestador)
                        {
                            if (!string.IsNullOrEmpty(contrato.ArquivoBase64))
                            {
                                var tipoArquivo = contrato.NomeAnexo.Split('.')[contrato.NomeAnexo.Split('.').Length - 1];
                                contrato.CaminhoContrato = $"{Guid.NewGuid().ToString()}.{tipoArquivo}";
                                _prestadorService.FazerUploadContratoPrestadorParaOMinIO(contrato.NomeAnexo, contrato.CaminhoContrato, contrato.ArquivoBase64);

                                foreach (ExtensaoContratoPrestadorVM extensao in contrato.ExtensoesContratoPrestador)
                                {
                                    if (!string.IsNullOrEmpty(extensao.ArquivoBase64))
                                    {
                                        var extensaoTipoArquivo = extensao.NomeAnexo.Split('.')[extensao.NomeAnexo.Split('.').Length - 1];
                                        extensao.CaminhoContrato = $"{Guid.NewGuid().ToString()}.{extensaoTipoArquivo}";
                                        _prestadorService.FazerUploadExtensaoContratoPrestadorParaOMinIO(extensao.NomeAnexo, extensao.CaminhoContrato, extensao.ArquivoBase64);
                                    }
                                }
                            }
                        }

                        foreach (var documento in prestadorVM.DocumentosPrestador)
                        {
                            if (!string.IsNullOrEmpty(documento.ArquivoBase64))
                            {
                                var tipoArquivo = documento.NomeAnexo.Split('.')[documento.NomeAnexo.Split('.').Length - 1];
                                documento.CaminhoDocumento = $"{Guid.NewGuid().ToString()}.{tipoArquivo}";
                                _prestadorService.FazerUploadDocumentoPrestadorParaOMinIO(documento.NomeAnexo, documento.CaminhoDocumento, documento.ArquivoBase64);
                            }
                        }

                        var prestador = Mapper.Map <Prestador>(prestadorVM);
                        prestador.Pessoa.Usuario    = _variablesToken.UserName ?? "STFCORP";
                        prestador.EmpresasPrestador = Mapper.Map <ICollection <EmpresaPrestador> >(prestadorVM.Empresas);
                        prestador.EmpresasPrestador.ToList().ForEach(x => x.Empresa.Usuario = _variablesToken.UsuarioToken);
                        prestador.Pessoa.Endereco = Mapper.Map <Endereco>(prestadorVM.Endereco);
                        prestador.Pessoa.Telefone = Mapper.Map <Telefone>(prestadorVM.Telefone);
                        prestador.ValoresPrestador.ToList().ForEach(x => x.Usuario = _variablesToken.UsuarioToken);


                        var valorPrestadoMaisRecente = prestador.ValoresPrestador
                                                       .ToList()
                                                       .OrderByDescending(x => x.DataAlteracao)
                                                       .FirstOrDefault();

                        if (valorPrestadoMaisRecente != null)
                        {
                            prestador.IdTipoRemuneracao = valorPrestadoMaisRecente.IdTipoRemuneracao;
                        }

                        var id = _prestadorService.Adicionar(prestador);
                        _pluginRMService.EnviarPrestadorRM(id, "I", true);
                        _prestadorService.AdicionarEAcesso(id, eacessoConnection, eacessoTran);
                    }
                    else
                    {
                        var prestador = Mapper.Map <Prestador>(prestadorVM);
                        prestador.Pessoa.Usuario    = _variablesToken.UserName ?? "STFCORP";
                        prestador.EmpresasPrestador = Mapper.Map <ICollection <EmpresaPrestador> >(prestadorVM.Empresas);
                        prestador.EmpresasPrestador.ToList().ForEach(x => x.Empresa.Usuario = _variablesToken.UsuarioToken);
                        prestador.ValoresPrestador = Mapper.Map <ICollection <ValorPrestador> >(prestadorVM.ValoresPrestador);
                        prestador.ValoresPrestador.ToList().ForEach(x => x.Usuario = _variablesToken.UsuarioToken);
                        prestador.IdTipoRemuneracao = prestadorVM.ValoresPrestador?.ToList()?.OrderByDescending(x => x.DataReferencia)?.FirstOrDefault()?.IdTipoRemuneracao;
                        _prestadorService.AtualizarPrestador(prestador);

                        if (prestador.CodEacessoLegado != null)
                        {
                            _prestadorService.AtualizarEAcesso(prestador.Id, eacessoConnection, eacessoTran);
                        }

                        _pluginRMService.EnviarPrestadorRM(prestadorVM.Id, "A", false);
                    }
                    tran.Commit();
                    eacessoTran.Commit();
                    rmTran.Commit();
                }
                catch (Exception ex)
                {
                    tran.Rollback();
                    eacessoTran.Rollback();
                    rmTran.Rollback();
                    throw ex;
                }
                return(Ok(true));
            }
        }