public static decimal CalculeProbabilidadeDeComparecimento(IVoo voo) { if (voo.Passageiros.Count == 0) { return(0); } return(voo.Passageiros.Sum(passageiro => CalculeProbabilidadeDeComparecimentoDoPassageiro(voo, passageiro)) / voo.Passageiros.Count); }
private static decimal CalculeProbabilidadeDeComparecimentoDoPassageiro(IVoo voo, IPassageiro passageiro) { const int VALOR_CASAS_DECIMAIS = 2; decimal porcentagemRota = ObtenhaPicRota(voo.Rota) / 100; decimal porcentagemData = ObtenhaPicData(voo.DataDeSaida) / 100; decimal porcentagemIdade = ObtenhaPicIdade(passageiro.IdadePassageiro) / 100; return(Math.Round(100 * (porcentagemRota * porcentagemData * porcentagemIdade), VALOR_CASAS_DECIMAIS)); }
private IVoo CrieVoo(IGrouping <dynamic, IPassageiro> passageirosPorVoo) { IVoo voo = FabricaDeVoo.Crie(FabricaDeRota.Crie(passageirosPorVoo.Key.Origem, passageirosPorVoo.Key.Destino), FabricaDeDataDeSaida.Crie(passageirosPorVoo.Key.Data)); voo.Passageiros = passageirosPorVoo.ToList(); voo.RiscoDeOverbooking = CalculadoraDeRisco.CalculeProbabilidadeDeComparecimento(voo); return(voo); }