コード例 #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
        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);
        }
コード例 #3
0
        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);
                    }
                }
            });
        }
コード例 #4
0
        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"));
        }
コード例 #5
0
        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));
        }
コード例 #6
0
        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);
                    }
                }
            });
        }