/// <summary> /// Obtém o tipo de cobertura agrupado de acordo com a classificação da Api /// </summary> /// <param name="cobertura">cobertura</param> /// <returns>true or false</returns> private TipoCoberturaAgrupadoEnum?ObterTipoCobertura(Contrato.CoberturaProdutoNegociado cobertura) { switch ((TipoCoberturaEnum)cobertura.Tipo) { case TipoCoberturaEnum.Vgbl: case TipoCoberturaEnum.Pgbl: return(TipoCoberturaAgrupadoEnum.Acumulacao); case TipoCoberturaEnum.Previdencia: return(TipoCoberturaAgrupadoEnum.Previdencia); case TipoCoberturaEnum.Seguro: case TipoCoberturaEnum.VidaIndividual: return(TipoCoberturaAgrupadoEnum.RiscoIndividual); case TipoCoberturaEnum.Servico: if (CoberturaPossuiPreco(cobertura)) { return(TipoCoberturaAgrupadoEnum.ServicoPrecificado); } return(TipoCoberturaAgrupadoEnum.Servico); case TipoCoberturaEnum.Emprestimo: return(TipoCoberturaAgrupadoEnum.Emprestimo); default: return(null); } }
/// <summary> /// Obtém o valor fixo da cobertura repassado ao cliente, caso exista /// </summary> /// <param name="cobertura"></param> /// <returns>valor fixo ou null, caso não exista</returns> private float?ObterValorFixo(Contrato.CoberturaProdutoNegociado cobertura) { if (cobertura.ValoresRepassadoAoCliente != null && cobertura.ValoresRepassadoAoCliente.Count > 0) { return((float)cobertura.ValoresRepassadoAoCliente.Where(v => v != null && v.TipoRepasseCliente == TipoRepasseClienteEnum.Fixo).Sum(v => v.Valor)); /*rever*/ } return(null); }
/// <summary> /// Verifica se uma cobertura possui valores repassados ao cliente /// </summary> /// <param name="cobertura">cobertura</param> /// <returns>true or false</returns> private bool CoberturaPossuiPreco(Contrato.CoberturaProdutoNegociado cobertura) { if (cobertura.ValoresRepassadoAoCliente != null && cobertura.ValoresRepassadoAoCliente.Count > 0) { return(cobertura.ValoresRepassadoAoCliente.Where(v => v != null && v.TipoRepasseCliente == TipoRepasseClienteEnum.Fixo).Any(v => v.Valor > 0)); } return(false); }
/// <summary> /// Obtém o valor de capital fixo, caso exista /// </summary> /// <param name="cobertura"></param> /// <returns>capital fixo ou null, caso não exista</returns> private float?ObterCapitalFixo(Contrato.CoberturaProdutoNegociado cobertura) { if (cobertura.ValorCapitalFixo != null) { return((float)cobertura.ValorCapitalFixo); } return(null); }
/// <summary> /// Preenche as causas da cobertura /// </summary> /// <param name="produtoCobertura">cobertura (Api)</param> /// <param name="cobertura">cobertura (Esb)</param> /// <param name="limites">limites operacionais</param> private void PreencherCausas(Cobertura produtoCobertura, Contrato.CoberturaProdutoNegociado cobertura, List <Contrato.LimiteOperacionalPorFaixa> limites) { if (cobertura.CoberturaId != null) { produtoCobertura.Causas = limites.Where(l => l.CoberturasIds.Contains(cobertura.CoberturaId.Value)) .GroupBy(l => l.TipoGrupoCobertura).Select(g => new Causa { Descricao = g.Key }).ToList(); } }
/// <summary> /// Preenche o tipo de cobertura agrupado da Api /// </summary> /// <param name="produtoCobertura">cobertura (Api)</param> /// <param name="cobertura">cobertura (Esb)</param> private void PreencherTipoCobertura(Cobertura produtoCobertura, Contrato.CoberturaProdutoNegociado cobertura) { TipoCoberturaAgrupadoEnum?tipoCobertura = ObterTipoCobertura(cobertura); if (tipoCobertura != null) { produtoCobertura.Tipo = new TipoCobertura(); produtoCobertura.Tipo.Id = (int?)tipoCobertura.Value; produtoCobertura.Tipo.Descricao = ((TipoCoberturaAgrupadoEnum)produtoCobertura.Tipo.Id).GetDescription(); } }
/// <summary> /// Preenche as UFs recusadas da cobertura e do produto /// Considera que o conjunto de UFs recusadas do produto é a união das UFs recusadas das coberturas /// </summary> /// <param name="produtoApi">produto (Api)</param> /// <param name="produtoCobertura">cobertura (Api)</param> /// <param name="cobertura">cobertura (Esb)</param> private void PreencherUFsRecusadas(Model.Produto produtoApi, Cobertura produtoCobertura, Contrato.CoberturaProdutoNegociado cobertura) { produtoCobertura.UFsRecusadas = cobertura.UFsRecusadasIds.Select(uf => uf).ToList(); if (produtoCobertura.UFsRecusadas.Count > 0) { if (produtoApi.UFsRecusadas.Count == 0) { produtoApi.UFsRecusadas.AddRange(produtoCobertura.UFsRecusadas); } else { produtoApi.UFsRecusadas = produtoApi.UFsRecusadas.Union(produtoCobertura.UFsRecusadas).ToList(); } } }
/// <summary> /// Preenche os fundos vinculados à cobertura e ao produto /// Considera que o conjunto de fundos do produto é a interseção dos fundos das coberturas /// </summary> /// <param name="produtoApi">produto (Api)</param> /// <param name="produtoCobertura">cobertura (Api)</param> /// <param name="cobertura">cobertura (Esb)</param> private void PreencherFundos(Model.Produto produtoApi, Cobertura produtoCobertura, Contrato.CoberturaProdutoNegociado cobertura) { produtoCobertura.Fundos = new List <Model.Fundo>(); foreach (var fundo in cobertura.Fundos) { var fundoApi = new Model.Fundo(); fundoApi.Id = fundo.Id; //fundoApi.Cnpj = não existe referência ao cnpj no serviço fundoApi.NomeFantasia = fundo.NomeFantasia; fundoApi.PercentualRendaVariavel = (float?)fundo.PercentualRendaVariavel; fundoApi.Sigla = fundo.Codigo; produtoCobertura.Fundos.Add(fundoApi); } if (produtoCobertura.Fundos.Count > 0) { if (produtoApi.Fundos.Count == 0) { produtoApi.Fundos.AddRange(produtoCobertura.Fundos); } else { produtoApi.Fundos = produtoApi.Fundos.Intersect(produtoCobertura.Fundos).ToList(); } } }
/// <summary> /// Preenche os prazos de decréscimo da cobertura e do produto /// Considera que o conjunto de prazos de decréscimo do produto é a interseção dos prazos de decréscimo das coberturas /// </summary> /// <param name="produtoApi">produto (Api)</param> /// <param name="produtoCobertura">cobertura (Api)</param> /// <param name="cobertura">cobertura (Esb)</param> private void PreencherPrazoDecrescimo(Model.Produto produtoApi, Cobertura produtoCobertura, Contrato.CoberturaProdutoNegociado cobertura) { produtoCobertura.PrazoDecrescimo = new List <int>(); if (cobertura.DecrescimoContribuicao != null && cobertura.DecrescimoContribuicao.Count > 0) { produtoCobertura.PrazoDecrescimo = cobertura.DecrescimoContribuicao.GroupBy(d => d.Prazo).Select(g => (int)g.Key).ToList(); if (produtoCobertura.PrazoDecrescimo.Count > 0) { if (produtoApi.PrazoDecrescimo.Count == 0) { produtoApi.PrazoDecrescimo.AddRange(produtoCobertura.PrazoDecrescimo); } else { produtoApi.PrazoDecrescimo = produtoApi.PrazoDecrescimo.Intersect(produtoCobertura.PrazoDecrescimo).ToList(); } } } }
/// <summary> /// Preenche os campos de antecipação (idade e tempo) da cobertura e do produto /// Considera que o conjunto valores de antecipação do produto é a interseção dos valores de antecipação das coberturas /// </summary> /// <param name="produtoApi">produto (Api)</param> /// <param name="produtoCobertura">cobertura (Api)</param> /// <param name="cobertura">cobertura (Esb)</param> private void PreencherAntecipacao(Model.Produto produtoApi, Cobertura produtoCobertura, Contrato.CoberturaProdutoNegociado cobertura) { produtoCobertura.IdadeAntecipacao = new List <int>(); produtoCobertura.TempoAntecipacao = new List <int>(); if (cobertura.AdiantamentoContribuicao != null && cobertura.AdiantamentoContribuicao.Count > 0) { var adiantamento = cobertura.AdiantamentoContribuicao.FirstOrDefault(); produtoCobertura.IdadeAntecipacao = adiantamento?.Idade.Select(i => (int)i).ToList(); produtoCobertura.TempoAntecipacao = adiantamento?.Prazo.Select(p => (int)p).ToList(); if (produtoCobertura.IdadeAntecipacao != null && produtoCobertura.IdadeAntecipacao.Count > 0) { if (produtoApi.IdadeAntecipacao.Count == 0) { produtoApi.IdadeAntecipacao.AddRange(produtoCobertura.IdadeAntecipacao); } else { produtoApi.IdadeAntecipacao = produtoApi.IdadeAntecipacao.Intersect(produtoCobertura.IdadeAntecipacao).ToList(); } } if (produtoCobertura.TempoAntecipacao != null && produtoCobertura.TempoAntecipacao.Count > 0) { if (produtoApi.TempoAntecipacao.Count == 0) { produtoApi.TempoAntecipacao.AddRange(produtoCobertura.TempoAntecipacao); } else { produtoApi.TempoAntecipacao = produtoApi.TempoAntecipacao.Intersect(produtoCobertura.TempoAntecipacao).ToList(); } } } }
/// <summary> /// Preenche o tipo de relação com o segurado da cobertura /// </summary> /// <param name="produtoCobertura">cobertura (Api)</param> /// <param name="cobertura">cobertura (Esb)</param> private void PreencherTipoRelacaoSegurado(Cobertura produtoCobertura, Contrato.CoberturaProdutoNegociado cobertura) { produtoCobertura.TipoRelacaoSegurado = new Model.TipoRelacaoSegurado(); produtoCobertura.TipoRelacaoSegurado.Id = cobertura.TipoRelacaoSegurado; produtoCobertura.TipoRelacaoSegurado.Descricao = ((TipoRelacaoSeguradoEnum)cobertura.TipoRelacaoSegurado).GetDescription(); }
/// <summary> /// Preenche os prazos de cobertura da cobertura e do produto /// Considera que o conjunto de prazos de cobertura do produto é a interseção dos prazos de cobertura das coberturas /// </summary> /// <param name="produtoApi">produto (Api)</param> /// <param name="produtoCobertura">cobertura (Api)</param> /// <param name="cobertura">cobertura (Esb)</param> private void PreencherPrazoCerto(Model.Produto produtoApi, Cobertura produtoCobertura, Contrato.CoberturaProdutoNegociado cobertura) { produtoCobertura.PrazoCerto = new List <int>(); if (cobertura.PrazoDeCobertura != null && cobertura.PrazoDeCobertura.Count > 0) { produtoCobertura.PrazoCerto = cobertura.PrazoDeCobertura.Select(p => (int)p).ToList(); /*verificar*/ if (produtoCobertura.PrazoCerto.Count > 0) { if (produtoApi.PrazoCerto.Count == 0) { produtoApi.PrazoCerto.AddRange(produtoCobertura.PrazoCerto); } else { produtoApi.PrazoCerto = produtoApi.PrazoCerto.Intersect(produtoCobertura.PrazoCerto).ToList(); } } } }
/// <summary> /// Preenche os prazos de renda da cobertura e do produto /// Considera que o conjunto de prazos de renda do produto é a interseção dos prazos de renda das coberturas /// </summary> /// <param name="produtoApi"></param> /// <param name="produtoCobertura"></param> /// <param name="cobertura"></param> private void PreencherPrazoRenda(Model.Produto produtoApi, Cobertura produtoCobertura, Contrato.CoberturaProdutoNegociado cobertura) { produtoCobertura.PrazoRenda = new List <PrazoRenda>(); if (cobertura.Rendas != null && cobertura.Rendas.Count > 0) { produtoCobertura.PrazoRenda = cobertura.Rendas.Where(r => r.PrazoInicial > 0 && r.PrazoFinal > 0).Select(p => new PrazoRenda() { Id = p.Tipo.Id, Descricao = p.Tipo.Descricao, ValorMinimo = p.PrazoInicial, ValorMaximo = p.PrazoFinal }).ToList(); /*verificar*/ if (produtoCobertura.PrazoRenda.Count > 0) { if (produtoApi.PrazoRenda.Count == 0) { produtoApi.PrazoRenda.AddRange(produtoCobertura.PrazoRenda); } else { produtoApi.PrazoRenda = produtoApi.PrazoRenda.Intersect(produtoCobertura.PrazoRenda).ToList(); } } } }