/// <summary> /// Obtém as políticas de aceitação de todas as propostas de um determinado CNPJ /// </summary> /// <param name="cnpj">CNPJ do parceiro</param> /// <param name="canalVenda">Canal de venda</param> /// <returns></returns> public IQueryable <PoliticaAceitacao> ObterTodos(long cnpj, short canalVenda) { var pesquisa = new PesquisaModelosDeProposta(); pesquisa.Cnpj = cnpj; pesquisa.CanalDeVenda = canalVenda; /*verificar*/ var resultadoPesquisarModelos = ServiceWcf <INegociacaoService> .UseSync(n => n.PesquisarModelosDeProposta(pesquisa)); if (resultadoPesquisarModelos.HouveErrosDuranteProcessamento) { throw new Exception(string.Join(", ", resultadoPesquisarModelos.Mensagens)); } var listaModeloProposta = resultadoPesquisarModelos.Valor; var politicas = new List <PoliticaAceitacao>(); foreach (var modeloPropostaEsb in listaModeloProposta) { PoliticaAceitacao politicaAceitacao = ObterLimitesOperacionais(modeloPropostaEsb.Codigo); if (politicaAceitacao == null) { continue; } politicas.Add(politicaAceitacao); } return(politicas.AsQueryable()); }
/// <summary> /// Constrói um objeto de produto para retorno com o resultado do serviço de produtos e limites /// </summary> /// <param name="codigoModeloProposta">Código do modelo de proposta</param> /// <param name="politicasIds"></param> /// <returns></returns> public PoliticaAceitacao ObterLimitesOperacionais(string codigoModeloProposta, PoliticaDeAceitacao politicaAceitacao = null) { if (politicaAceitacao == null) { var parametroPoliticaAceitacao = ObterParametroLimitesOperacionais(codigoModeloProposta); var resultadoPoliticaAceitacao = ServiceWcf <INegociacaoService> .UseSync(n => n.ObterLimitesOperacionais(parametroPoliticaAceitacao)); politicaAceitacao = resultadoPoliticaAceitacao.Valor; } var limites = politicaAceitacao.LimitesOperacionais; var politica = new PoliticaAceitacao(); politica.DataUltimaAlteracao = politicaAceitacao.DataInicioVigencia; politica.CigarrosExame = politicaAceitacao.QtdeMaximaCigarrosExame; politica.CigarrosRecusa = politicaAceitacao.QtdeMaximaCigarrosRecusa; politica.ImcMaximoExame = (int)politicaAceitacao.IMCMaximoExame; /*verificar*/ politica.ImcMaximoRecusa = (int)politicaAceitacao.IMCMaximoRecusa; /*verificar*/ politica.ImcMinimoExame = (int)politicaAceitacao.IMCMinimoExame; /*verificar*/ politica.ImcMinimoRecusa = (int)politicaAceitacao.IMCMinimoRecusa; /*verificar*/ politica.LimitesOperacionaisPorFaixaEtaria = new List <LimiteOperacionalFaixaEtaria>(); politica.LimitesOperacionaisPorProfissao = new List <LimiteOperacionalProfissao>(); politica.LimitesOperacionaisPorRenda = new List <LimiteOperacionalRenda>(); foreach (var limite in limites) { IncluirLimites(limite, politica); } return(politica); }
private void IncluirLimites(LimiteOperacionalPorFaixa limite, PoliticaAceitacao politica) { foreach (var limitePorIdade in limite.LimitesPorIdade) { var politicaFaixaEtaria = new LimiteOperacionalFaixaEtaria(); politicaFaixaEtaria.Causa = limite.TipoGrupoCobertura; politicaFaixaEtaria.Coberturas = limite.CoberturasIds; politicaFaixaEtaria.ValorMaximoCapitalSegurado = (int)limitePorIdade.Limite; politicaFaixaEtaria.IdadeInicial = limitePorIdade.IdadeInicial; politicaFaixaEtaria.IdadeFinal = limitePorIdade.IdadeFinal; politica.LimitesOperacionaisPorFaixaEtaria.Add(politicaFaixaEtaria); } foreach (var limitePorProfissao in limite.LimitesPorProfissoes) { var politicaProfissao = new LimiteOperacionalProfissao(); politicaProfissao.Causa = limite.TipoGrupoCobertura; politicaProfissao.Coberturas = limite.CoberturasIds; politicaProfissao.ValorMaximoCapitalSegurado = (int)limitePorProfissao.Limite; politicaProfissao.ProfissoesId = limitePorProfissao.ProfissoesEsimId; politica.LimitesOperacionaisPorProfissao.Add(politicaProfissao); } foreach (var limitePorRenda in limite.LimitesPorRenda) { var politicaRenda = new LimiteOperacionalRenda(); politicaRenda.Coberturas = limite.CoberturasIds; politicaRenda.Causa = limite.TipoGrupoCobertura; politicaRenda.IdadeInicial = limitePorRenda.IdadeInicial; politicaRenda.IdadeFinal = limitePorRenda.IdadeFinal; politicaRenda.MultiploRenda = (int)limitePorRenda.MultiploRenda; politica.LimitesOperacionaisPorRenda.Add(politicaRenda); } }
private List <LimiteDisponivel> ObterLimitesDisponiveis(PoliticaAceitacao politicaAceitacao, long cpf, DateTime dataNascimento, string uf, Produto.Profissao profissao, decimal renda, List <Model.Produto> produtos) { if (politicaAceitacao == null) { throw new ArgumentNullException(nameof(politicaAceitacao)); } var limites = new ConcurrentBag <LimiteDisponivel>(); var capitaisAcumuladosCliente = ObterCapitalSegurado(new PesquisaCapitalSegurado() { Cpf = cpf, DataNascimento = dataNascimento }); var taskFaixaEtaria = Task.Run(() => { politicaAceitacao.LimitesOperacionaisPorFaixaEtaria .Where(l => l.IdadeInicial <= dataNascimento.Idade() && l.IdadeFinal >= dataNascimento.Idade()) .ToList() .ForEach(l => { limites.Add(CalcularLimiteDisponivel(l, capitaisAcumuladosCliente, Convert.ToDecimal(l.ValorMaximoCapitalSegurado), "Faixa Etária", produtos)); }); }); var taskProfissao = Task.Run(() => { politicaAceitacao.LimitesOperacionaisPorProfissao .Where(l => l.ProfissoesId.Contains(profissao.Id)) .ToList() .ForEach(l => { limites.Add(CalcularLimiteDisponivel(l, capitaisAcumuladosCliente, Convert.ToDecimal(l.ValorMaximoCapitalSegurado), "Profissão", produtos)); }); }); var taskRenda = Task.Run(() => { politicaAceitacao.LimitesOperacionaisPorRenda .Where(l => l.IdadeInicial <= dataNascimento.Idade() && l.IdadeFinal >= dataNascimento.Idade()) .ToList() .ForEach(l => { var valorMaximo = ObterCapitalAcumuladoPorCobertura(l, capitaisAcumuladosCliente); limites.Add(CalcularLimiteDisponivel(l, capitaisAcumuladosCliente, Convert.ToDecimal(renda * l.MultiploRenda), "Renda", produtos)); }); }); taskFaixaEtaria.Wait(); taskProfissao.Wait(); taskRenda.Wait(); var menoresLimites = from lim in (from l in limites group l by l.Causa) select new LimiteDisponivel() { Causa = lim.First().Causa, Produtos = lim.First().Produtos, ValorMaximo = lim.Min(l => l.ValorMaximo) }; return(menoresLimites.ToList()); }