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); }
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)) ); }