Пример #1
0
        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);
        }
Пример #2
0
        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"));
        }