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); }
public async Task <IActionResult> EncaminharAtividade(int idEmpresa, int idUsuario, int IdAtividadeAcomodacao, List <TipoAtividade> LstTipoAtividadeToSave) { if ((idUsuario < 1) || (IdAtividadeAcomodacao < 1)) { return(BadRequest()); } var atividadeToOrigemEncaminhar = _operacionalContext.AtividadeItems .OfType <AtividadeItem>() .SingleOrDefault(c => c.Id_AtividadeAcomodacao == IdAtividadeAcomodacao && c.dt_FimAtividadeAcomodacao == null); if (atividadeToOrigemEncaminhar is null) { return(BadRequest()); } string AdministrativoURL = this._settings.AdministrativoURL; string tokenURL = this._settings.TokenURL; var situacaoAcomodacaoToConsultar = _operacionalContext.SituacaoItems .OfType <SituacaoItem>() .SingleOrDefault(c => c.Id_SituacaoAcomodacao == atividadeToOrigemEncaminhar.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; //ENCAMINHAR EncaminharOut encaminharToSave = await Encaminhar(ConfiguracaoURL, AdministrativoURL, tokenURL, idUsuario, idEmpresa, atividadeToOrigemEncaminhar, LstTipoAtividadeToSave, idTipoAcomodacao, idAcomodacao); List <IntegrationEvent> lstEvt = new List <IntegrationEvent>(); List <AtividadeItem> lstItem = new List <AtividadeItem>(); lstEvt = encaminharToSave.lstEvt; lstItem = encaminharToSave.lstItem; //LISTA DE ATIVIDADES EXISTENTES IEnumerable <AtividadeItem> query = _operacionalContext.AtividadeItems .OfType <AtividadeItem>() .Where(c => c.Id_SituacaoAcomodacao == atividadeToOrigemEncaminhar.Id_SituacaoAcomodacao && c.dt_FimAtividadeAcomodacao == null); List <AtividadeItem> atividadeAcomodacaoExistentes = query.ToList(); List <int> lstInt = new List <int>(); foreach (AtividadeItem Atividade in encaminharToSave.lstItem) { var res = atividadeAcomodacaoExistentes.Find(item => item.Id_TipoAtividadeAcomodacao == Atividade.Id_TipoAtividadeAcomodacao); if (res == null) { _operacionalContext.AtividadeItems.Add(Atividade); } else { int myindex = lstItem.IndexOf(Atividade); lstInt.Add(myindex); } } var sortedList = lstInt.OrderByDescending(x => x).ToList(); foreach (int i in sortedList) { lstItem.RemoveAt(i); lstEvt.RemoveAt(i); } try { // Achieving atomicity between original Catalog database operation and the IntegrationEventLog thanks to a local transaction await _operacionalIntegrationEventService.SaveEventAndAtividadeContextChangesAsync(lstEvt, lstItem); } catch (Exception e) { return(BadRequest(e.Message)); } // Publish through the Event Bus and mark the saved event as published await _operacionalIntegrationEventService.PublishThroughEventBusAsync(lstEvt); return(CreatedAtAction(nameof(EncaminharAtividade), "Ok")); }