예제 #1
0
        public async Task Executar(EventoOperacional eventoOperacional)
        {
            var evento = (EventoInclusaoVg)eventoOperacional;

            foreach (var cobertura in evento.Coberturas)
            {
                var produto = _container.GetValue(new ChaveProduto(cobertura.ItemProdutoId, cobertura.TipoFormaContratacaoId, cobertura.TipoRendaId, cobertura.DataAssinatura));
                cobertura.ComDadosProduto(produto);

                await _validador.Validar(cobertura);
            }
            await _eventos.Salvar(evento);
        }
        public async Task <EventoImplantacao> Processar(EventoImplantacao evento)
        {
            if (await _eventos.Contem(evento.Identificador))
            {
                return(evento);
            }

            foreach (var cob in evento.Coberturas)
            {
                var dadosProduto = _produtoContainer.GetValue(new ChaveProduto(cob.ItemProdutoId, cob.TipoFormaContratacaoId, cob.TipoRendaId, cob.DataAssinatura));
                cob.ComDadosProduto(dadosProduto);

                await _validador.Validar(cob);
            }

            await _eventos.Adicionar(evento);

            return(evento);
        }
예제 #3
0
        public CoberturaStateMachine(
            IndexedCachedContainer <ChaveProduto, DadosProduto> produtoContainer,
            ICalculadorProvisaoPremio calculadorProvisao)
        {
            InstanceState(x => x.Status, Ativa, Cancelada, Beneficio, Saldada, Remida);

            Event(() => Implantar);
            Event(() => Alterar);
            Event(() => EmitirPremio);
            Event(() => ApropriarPremio);
            Event(() => DesapropriarPremio);
            Event(() => AjustePremio);
            Event(() => PortabilidadePremio);
            Event(() => AportePremio);
            Event(() => InclusaoVG);

            Initially(
                When(Implantar)
                .TransitionTo(Ativa)
                .Then(x => x.Instance.ComDadosProduto(produtoContainer.GetValue(x.Instance.ChaveProduto())))
                .Then(x => x.Data.EventoOperacional.Adicionar(x.Instance))
                );

            During(Ativa,
                   When(Alterar)
                   .Then(x =>
            {
                x.Data.Mensagem.Cobertura.Id = x.Instance.Id;
                x.Data.EventoOperacional.AdicionaHistorico(x.Data.Mensagem);
            }),
                   When(EmitirPremio)
                   .Then(x =>
            {
                x.Data.Mensagem.AdicionarCobertura(x.Instance);
                x.Data.Mensagem.AdicionarMovimentoProvisao(
                    calculadorProvisao.CriarProvisao(x.Data.Mensagem, TipoEventoEnum.EmissaoPremio, x.Data.EventoOperacional.DataExecucaoEvento));
                x.Data.EventoOperacional.AdicionarPremiosEmitidos(x.Data.Mensagem);
            }),
                   When(ApropriarPremio)
                   .Then(x =>
            {
                x.Data.Mensagem.AdicionarCobertura(x.Instance);
                x.Data.Mensagem.AdicionarMovimentoProvisao(
                    calculadorProvisao.CriarProvisao(x.Data.Mensagem, TipoEventoEnum.ApropriacaoPremio, x.Data.EventoOperacional.DataExecucaoEvento));
                x.Data.EventoOperacional.AdicionarPremiosApropriados(x.Data.Mensagem);
            }),
                   When(DesapropriarPremio)
                   .Then(x =>
            {
                x.Data.Mensagem.AdicionarCobertura(x.Instance);
                x.Data.Mensagem.AdicionarMovimentoProvisao(
                    calculadorProvisao.CriarProvisao(x.Data.Mensagem, TipoEventoEnum.DesapropriacaoPremio, x.Data.EventoOperacional.DataExecucaoEvento));
                x.Data.EventoOperacional.AdicionarPremio(x.Data.Mensagem);
            }),
                   When(AjustePremio)
                   .Then(x =>
            {
                x.Data.Mensagem.AdicionarCobertura(x.Instance);
                x.Data.Mensagem.AdicionarMovimentoProvisao(
                    calculadorProvisao.CriarProvisao(x.Data.Mensagem, TipoEventoEnum.AjustePremio, x.Data.EventoOperacional.DataExecucaoEvento));
                x.Data.EventoOperacional.AdicionarPremio(x.Data.Mensagem);
            }),
                   When(PortabilidadePremio)
                   .Then(x =>
            {
                x.Data.Mensagem.AdicionarCobertura(x.Instance);
                x.Data.Mensagem.AdicionarMovimentoProvisao(
                    calculadorProvisao.CriarProvisao(x.Data.Mensagem, TipoEventoEnum.PortabilidadePremio, x.Data.EventoOperacional.DataExecucaoEvento));
                x.Data.EventoOperacional.AdicionarPremio(x.Data.Mensagem);
            }),
                   When(AportePremio)
                   .Then(x =>
            {
                x.Data.Mensagem.AdicionarCobertura(x.Instance);
                x.Data.Mensagem.AdicionarMovimentoProvisao(
                    calculadorProvisao.CriarProvisao(x.Data.Mensagem, TipoEventoEnum.AportePremio, x.Data.EventoOperacional.DataExecucaoEvento));
                x.Data.EventoOperacional.AdicionarPremio(x.Data.Mensagem);
            })
                   );

            Initially(
                When(InclusaoVG)
                .TransitionTo(Ativa)
                .Then(x => x.Instance.ComDadosProduto(produtoContainer.GetValue(x.Instance.ChaveProduto())))
                .Then(x => x.Data.EventoOperacional.Adicionar(x.Instance))
                );
        }