internal static async Task <EncaminharOut> Encaminhar(string ConfiguracaoURL, string AdministrativoURL, string tokenURL, int idUsuario, int idEmpresa, AtividadeItem atividadeToOrigemEncaminhar, List <TipoAtividade> LstTipoAtividadeToSave, int idTipoAcomodacao, int idAcomodacao) { List <IntegrationEvent> lstEvt = new List <IntegrationEvent>(); List <AtividadeItem> lstItem = new List <AtividadeItem>(); foreach (TipoAtividade idTipoAtividade in LstTipoAtividadeToSave) { AtividadeItem AtividadeToSave = new AtividadeItem(); AtividadeToSave.Id_SituacaoAcomodacao = atividadeToOrigemEncaminhar.Id_SituacaoAcomodacao; AtividadeToSave.Id_TipoSituacaoAcomodacao = atividadeToOrigemEncaminhar.Id_TipoSituacaoAcomodacao; AtividadeToSave.Id_TipoAtividadeAcomodacao = (int)idTipoAtividade; AtividadeToSave.dt_InicioAtividadeAcomodacao = DateTime.Now; AtividadeToSave.dt_FimAtividadeAcomodacao = null; AtividadeToSave.Id_UsuarioSolicitante = idUsuario; AtividadeToSave.Cod_Plus = "N"; AtividadeToSave.Cod_Prioritario = "N"; List <AcaoItem> lstAcaoSave = new List <AcaoItem>(); AcaoItem AcaoToSave = await IncluiAcao(ConfiguracaoURL, tokenURL, idEmpresa, atividadeToOrigemEncaminhar.Id_TipoSituacaoAcomodacao, (int)idTipoAtividade, 0, (int)TipoAcao.SOLICITAR, DateTime.Now, null, idUsuario.ToString(), idTipoAcomodacao); lstAcaoSave.Add(AcaoToSave); AtividadeToSave.AcaoItems = lstAcaoSave; lstItem.Add(AtividadeToSave); List <ConsultarAcessoAtividadeEmpresaPerfilTO> Perfis = await ConsultaAcessoPerfilPorTipoSituacaoTipoAtividadeAsync(AdministrativoURL, tokenURL, idEmpresa, AtividadeToSave.Id_TipoSituacaoAcomodacao, AtividadeToSave.Id_TipoAtividadeAcomodacao); //Create Integration Event to be published through the Event Bus var atividadeSaveEvent = new AtividadeSaveIE(AtividadeToSave.Id_AtividadeAcomodacao, AtividadeToSave.Id_SituacaoAcomodacao, AtividadeToSave.Id_TipoSituacaoAcomodacao, AtividadeToSave.Id_TipoAtividadeAcomodacao, AtividadeToSave.dt_InicioAtividadeAcomodacao, AtividadeToSave.dt_FimAtividadeAcomodacao, AtividadeToSave.Id_UsuarioSolicitante, lstAcaoSave, AtividadeToSave.Cod_Prioritario, AtividadeToSave.Cod_Plus, Perfis, idAcomodacao); lstEvt.Add(atividadeSaveEvent); } EncaminharOut objReturn = new EncaminharOut(); objReturn.lstItem = lstItem; objReturn.lstEvt = lstEvt; return(objReturn); }
internal static AtividadeSaveIE CriaEventoAtividade(AtividadeItem atividadeToSave, List <ConsultarAcessoAtividadeEmpresaPerfilTO> perfis, int idAcomodacao) { //Create Integration Event to be published through the Event Bus var atividadeSaveEvent = new AtividadeSaveIE(atividadeToSave.Id_AtividadeAcomodacao, atividadeToSave.Id_SituacaoAcomodacao, atividadeToSave.Id_TipoSituacaoAcomodacao, atividadeToSave.Id_TipoAtividadeAcomodacao, atividadeToSave.dt_InicioAtividadeAcomodacao, atividadeToSave.dt_FimAtividadeAcomodacao, atividadeToSave.Id_UsuarioSolicitante, atividadeToSave.AcaoItems, atividadeToSave.Cod_Prioritario, atividadeToSave.Cod_Plus, perfis, idAcomodacao); return(atividadeSaveEvent); }
public async Task SaveEventAndAtividadeContextChangesAsync(List <IntegrationEvent> lstEvt, List <AtividadeItem> lst) { var strategy = _operacionalContext.Database.CreateExecutionStrategy(); await strategy.ExecuteAsync(async() => { using (var transaction = _operacionalContext.Database.BeginTransaction()) { try { await _operacionalContext.SaveChangesAsync(); int cont = 0; foreach (AtividadeItem Atividade in lst) { AtividadeSaveIE evt = (Events.AtividadeSaveIE)lstEvt[cont]; //Tratamento de Identity evt.AtividadeAcomodacaoId = Atividade.Id_AtividadeAcomodacao; if (Atividade.AcaoItems != null) { evt.AcaoItems[0].Id_AcaoAtividadeAcomodacao = Atividade.AcaoItems[0].Id_AcaoAtividadeAcomodacao; } cont = cont + 1; } await _eventLogService.SaveEventAsync(lstEvt, _operacionalContext.Database.CurrentTransaction.GetDbTransaction()); transaction.Commit(); } catch (Exception ex) { transaction.Rollback(); var sqlException = ex.InnerException as System.Data.SqlClient.SqlException; throw new Exception(sqlException.Number + "::" + sqlException.Message); } } }); }
public async Task <IActionResult> PlusAtividade(int idAtividade, Priorizar plus) { string msgRule = ""; var atividadeToSave = _operacionalContext.AtividadeItems .OfType <AtividadeItem>() .SingleOrDefault(e => e.Id_AtividadeAcomodacao == idAtividade); if (atividadeToSave == null) { string msgStatus = _localizer["VALIDA_EXISTENCIAATIVIDADE"]; return(BadRequest(msgStatus)); } if (atividadeToSave.Id_TipoAtividadeAcomodacao != (int)TipoAtividade.HIGIENIZAÇÃO) { string msgStatus = _localizer["VALIDA_ATIVIDADEHIGIENIZACAO"]; return(BadRequest(msgStatus)); } var situacaoToExit = _operacionalContext.SituacaoItems .OfType <SituacaoItem>() .SingleOrDefault(e => e.Id_SituacaoAcomodacao == atividadeToSave.Id_SituacaoAcomodacao); if (situacaoToExit == null) { string msgStatus = _localizer["VALIDA_EXISTENCIAATIVIDADE"]; return(BadRequest(msgStatus)); } atividadeToSave.Cod_Plus = plus.ToString(); _operacionalContext.AtividadeItems.Update(atividadeToSave); string AdministrativoURL = _settings.AdministrativoURL; string tokenURL = _settings.TokenURL; List <Administrativo.API.TO.ConsultarAcomodacaoDetalhePorIdAcomodacaoTO> AcomodacaoItem = await ConsultaAcomodacaoDetalhePorIdAcomodacaoAsync(AdministrativoURL, tokenURL, situacaoToExit.Id_Acomodacao); List <ConsultarAcessoAtividadeEmpresaPerfilTO> Perfis = await ConsultaAcessoPerfilPorTipoSituacaoTipoAtividadeAsync(AdministrativoURL, tokenURL, AcomodacaoItem[0].Id_Empresa, atividadeToSave.Id_TipoSituacaoAcomodacao, atividadeToSave.Id_TipoAtividadeAcomodacao); //Create Integration Event to be published through the Event Bus var atividadeSaveEvent = new AtividadeSaveIE(atividadeToSave.Id_AtividadeAcomodacao, atividadeToSave.Id_SituacaoAcomodacao, atividadeToSave.Id_TipoSituacaoAcomodacao, atividadeToSave.Id_TipoAtividadeAcomodacao, atividadeToSave.dt_InicioAtividadeAcomodacao, atividadeToSave.dt_FimAtividadeAcomodacao, atividadeToSave.Id_UsuarioSolicitante, atividadeToSave.AcaoItems, atividadeToSave.Cod_Prioritario, atividadeToSave.Cod_Plus, Perfis, situacaoToExit.Id_Acomodacao); try { // Achieving atomicity between original Catalog database operation and the IntegrationEventLog thanks to a local transaction await _operacionalIntegrationEventService.SaveEventAndAtividadeContextChangesAsync(atividadeSaveEvent, atividadeToSave); } catch (Exception e) { return(BadRequest(e.Message)); } // Publish through the Event Bus and mark the saved event as published await _operacionalIntegrationEventService.PublishThroughEventBusAsync(atividadeSaveEvent); return(CreatedAtAction(nameof(PriorizarAtividade), "OK")); }
public async Task <IActionResult> IncluirAtividade(int idEmpresa, [FromBody] AtividadeItem atividadeToSave) { string msgRule = ""; if ((idEmpresa < 1)) { return(BadRequest()); } var atividadeToValidate = _operacionalContext.AtividadeItems .OfType <AtividadeItem>() .SingleOrDefault(e => e.Id_SituacaoAcomodacao == atividadeToSave.Id_SituacaoAcomodacao && e.Id_TipoAtividadeAcomodacao == atividadeToSave.Id_TipoAtividadeAcomodacao && e.dt_FimAtividadeAcomodacao == null); if (atividadeToValidate != null) { string msgStatus = _localizer["VALIDA_SITUACAOATIVA"]; return(BadRequest(msgStatus)); } if (atividadeToSave.Cod_Plus == "S" && atividadeToSave.Id_TipoAtividadeAcomodacao != (int)TipoAtividade.HIGIENIZAÇÃO) { string msgStatus = _localizer["VALIDA_ATIVIDADEHIGIENIZACAO"]; return(BadRequest(msgStatus)); } string AdministrativoURL = this._settings.AdministrativoURL; string tokenURL = this._settings.TokenURL; var situacaoAcomodacaoToConsultar = _operacionalContext.SituacaoItems .OfType <SituacaoItem>() .SingleOrDefault(c => c.Id_SituacaoAcomodacao == atividadeToSave.Id_SituacaoAcomodacao); int idAcomodacao = situacaoAcomodacaoToConsultar.Id_Acomodacao; List <ConsultarTipoAcomodacaoPorIdAcomodacaoTO> tipoAcomodacaoToView = await ConsultaTipoAcomodacaoPorIdAcomodacaoAsync(AdministrativoURL, tokenURL, idEmpresa, idAcomodacao); int idTipoAcomodacao = tipoAcomodacaoToView[0].Id_TipoAcomodacao; string ConfiguracaoURL = this._settings.ConfiguracaoURL; List <Configuracao.API.TO.ConsultarSLATO> SLAItem = await ConsultaSLAAsync(ConfiguracaoURL, tokenURL, idEmpresa, atividadeToSave.Id_TipoSituacaoAcomodacao, atividadeToSave.Id_TipoAtividadeAcomodacao, (int)TipoAcao.SOLICITAR, idTipoAcomodacao); AcaoItem acaoToSave = new AcaoItem(); acaoToSave.Id_TipoAcaoAcomodacao = (int)TipoAcao.SOLICITAR; acaoToSave.dt_InicioAcaoAtividade = DateTime.Now; acaoToSave.Id_UsuarioExecutor = atividadeToSave.Id_UsuarioSolicitante.ToString(); if ((SLAItem != null) && (SLAItem.Count > 0)) { acaoToSave.Id_SLA = SLAItem[0].Id_SLA; } List <AcaoItem> lst = new List <AcaoItem>(); atividadeToSave.AcaoItems = lst; atividadeToSave.AcaoItems.Add(acaoToSave); _operacionalContext.AtividadeItems.Add(atividadeToSave); List <ConsultarAcessoAtividadeEmpresaPerfilTO> Perfis = await ConsultaAcessoPerfilPorTipoSituacaoTipoAtividadeAsync(AdministrativoURL, tokenURL, idEmpresa, atividadeToSave.Id_TipoSituacaoAcomodacao, atividadeToSave.Id_TipoAtividadeAcomodacao); //Create Integration Event to be published through the Event Bus var atividadeSaveEvent = new AtividadeSaveIE(atividadeToSave.Id_AtividadeAcomodacao, atividadeToSave.Id_SituacaoAcomodacao, atividadeToSave.Id_TipoSituacaoAcomodacao, atividadeToSave.Id_TipoAtividadeAcomodacao, atividadeToSave.dt_InicioAtividadeAcomodacao, atividadeToSave.dt_FimAtividadeAcomodacao, atividadeToSave.Id_UsuarioSolicitante, atividadeToSave.AcaoItems, atividadeToSave.Cod_Prioritario, atividadeToSave.Cod_Plus, Perfis, idAcomodacao); try { // Achieving atomicity between original Catalog database operation and the IntegrationEventLog thanks to a local transaction await _operacionalIntegrationEventService.SaveEventAndAtividadeContextChangesAsync(atividadeSaveEvent, atividadeToSave); } catch (Exception e) { return(BadRequest(e.Message)); } // Publish through the Event Bus and mark the saved event as published await _operacionalIntegrationEventService.PublishThroughEventBusAsync(atividadeSaveEvent); return(CreatedAtAction(nameof(IncluirAtividade), atividadeToSave.Id_AtividadeAcomodacao)); }
public async Task SaveEventAndGeraAcaoFinalizarAsync(IntegrationEvent evtINI, IntegrationEvent evtFIM, IntegrationEvent evtFIMATIVIDADE, AcaoItem acaoToSave, List <IntegrationEvent> lstEvt, List <AtividadeItem> lst, List <IntegrationEvent> lstRespEvt, List <RespostasChecklistItem> lstResposta) { var strategy = _operacionalContext.Database.CreateExecutionStrategy(); await strategy.ExecuteAsync(async() => { using (var transaction = _operacionalContext.Database.BeginTransaction()) { try { await _operacionalContext.SaveChangesAsync(); int cont = 0; if (lst != null) { foreach (AtividadeItem Atividade in lst) { AtividadeSaveIE evt = (Events.AtividadeSaveIE)lstEvt[cont]; //Tratamento de Identity evt.AtividadeAcomodacaoId = Atividade.Id_AtividadeAcomodacao; if (Atividade.AcaoItems != null) { evt.AcaoItems[0].Id_AcaoAtividadeAcomodacao = Atividade.AcaoItems[0].Id_AcaoAtividadeAcomodacao; } cont = cont + 1; } } //Tratamento de Identity ((Events.GeraAcaoAcomodacaoIE)evtINI).AcaoAtividadeAcomodacaoId = acaoToSave.Id_AcaoAtividadeAcomodacao; cont = 0; if (lstResposta != null) { foreach (RespostasChecklistItem Resposta in lstResposta) { RespostaChecklistSaveIE evt = (Events.RespostaChecklistSaveIE)lstRespEvt[cont]; //Tratamento de Identity evt.RespostasChecklistId = Resposta.Id_RespostasChecklist; cont = cont + 1; lstEvt.Add(evt); } } lstEvt.Add(evtFIM); lstEvt.Add(evtINI); lstEvt.Add(evtFIMATIVIDADE); await _eventLogService.SaveEventAsync(lstEvt, _operacionalContext.Database.CurrentTransaction.GetDbTransaction()); transaction.Commit(); } catch (Exception ex) { transaction.Rollback(); var sqlException = ex.InnerException as System.Data.SqlClient.SqlException; throw new Exception(sqlException.Number + "::" + sqlException.Message); } } }); }