//TODO implementar limites compostos para outros tipos de contexto (além de regra e funcionario public IEnumerable <ILimiteDeRemuneracao> ConstruirLimites() { IEnumerable <ILimiteConstruivel> limitesAVerificar = _limites.Where(lim => LimitePodeterInterseccao(lim)).Select(lim => lim as ILimiteConstruivel).ToArray(); IEnumerable <ILimiteDeRemuneracao> outrosLimites = _limites.Where(lim => !LimitePodeterInterseccao(lim)).ToArray(); var idsRegrasDistintas = limitesAVerificar.SelectMany(lim => lim.DefinidorDeContexto.Aplicacao.ContextosPermitidos).Distinct(); foreach (var id in idsRegrasDistintas) { var limitesDaRegra = limitesAVerificar.Where(lim => lim.DefinidorDeContexto.Aplicacao.ContextosPermitidos.Contains(id)); ILimiteConstruivel limiteComposto = ConstruirLimiteComposto(limitesDaRegra); IDefinidorDeContextoDeAcumulacaoDeLimite acumulacao = limitesDaRegra.First().DefinidorDeContexto.Acumulacao.Tipo.ConstruirDefinidorDeAcumulacao(); IDefinidorDeContextoDeAplicacaoDeLimite aplicacao = limitesDaRegra.First().DefinidorDeContexto.Aplicacao.Tipo.ConstruirDefinidorDeAplicacao(new[] { id }); limiteComposto.DefinidorDeContexto = new DefinidorDeContextoDeLimitePorDelegacao(aplicacao, acumulacao); yield return(limiteComposto); } //TODO implementar outros tipos de limite com intersecção foreach (var limite in outrosLimites) { yield return(limite); } }
private void CriarLimite() { decimal valorLimite = _parametros.ValorLimite; ModelosBaseDeDominio.IUnidadeDeEntrega entregaLimite = _parametros.UnidadeDoLimite.CriarEntregas(valorLimite); _limiteEmConstrucao = (ILimiteConstruivel)_parametros.Tipo.Construir(entregaLimite); _limiteEmConstrucao.Id = _parametros.Id; }