public static List <Contrato> ValidarReglasContrato(List <Contrato> contratos, ReglaEntradaContrato reglaEntradaContrato) { if (reglaEntradaContrato.CodigoEstado.IsNotNullOrEmpty()) { contratos.Where(x => reglaEntradaContrato.CodigoEstado.Contains(x.CodigoEstado)); } return(null); }
private static ExprContrato GeneraPredicadoContrato(ReglaEntradaContrato regla, out List <MensajeConfiguracionRegla> listaMensajes) { listaMensajes = new List <MensajeConfiguracionRegla>(); ExprContrato predicado = ConstructorPredicado.True <Contrato>(); if (regla.IsNull()) { return(predicado); } if (regla.Region.IsNotNullOrEmpty()) { ExprContrato criterio = contrato => regla.Region.Contains(contrato.Region, StringComparison.InvariantCultureIgnoreCase); predicado = predicado.And(criterio); } if (regla.Producto.IsNotNullOrEmpty()) { ExprContrato criterio = contrato => regla.Producto.Contains(contrato.Producto, StringComparison.InvariantCultureIgnoreCase); predicado = predicado.And(criterio); } if (regla.CodigoEstado.IsNotNullOrEmpty()) { ExprContrato criterio = contrato => regla.CodigoEstado.Contains(contrato.CodigoEstado); predicado = predicado.And(criterio); } if (regla.CodigoPlan.IsNotNullOrEmpty()) { var nombrePropiedad = "CodigoPlan"; var filtros = new List <FiltroExpresion>(); foreach (var codigo in regla.CodigoPlan) { var valor = ExpresionRegular.EliminarComodin(codigo); if (valor.IsNullOrEmpty()) { continue; } var filtro = new FiltroExpresion { NombrePropiedad = nombrePropiedad, Valor = valor }; if (codigo.StartsWith("*") && codigo.EndsWith("*")) { filtro.Operador = Operador.Contiene; } else if (codigo.StartsWith("*")) { filtro.Operador = Operador.TerminaCon; } else if (codigo.EndsWith("*")) { filtro.Operador = Operador.IniciaCon; } else if (codigo.Trim().IsNotNullOrEmpty()) { filtro.Operador = Operador.IgualQue; } filtros.Add(filtro); } ExprContrato exprOr = ConstruirArbolExpresionOr <Contrato>(filtros); if (exprOr.IsNull()) { listaMensajes.Add(CrearMensajeConfiguracionRegla.ObtenerMensajeErrorParametro(nombrePropiedad)); return(null); } predicado = predicado.And(exprOr); } if (regla.Version.IsNotNullOrEmpty()) { ExprContrato criterio = contrato => regla.Version.Contains(contrato.Version); predicado = predicado.And(criterio); } if (regla.CoberturaMaxima.IsNotNullOrEmpty()) { var nombrePropiedad = "CoberturaMaxima"; var expresionLogica = new ExpresionLogica(regla.CoberturaMaxima); if (!expresionLogica.EsExpresionLogica) { listaMensajes.Add(CrearMensajeConfiguracionRegla.ObtenerMensajeErrorExpresionLogica(nombrePropiedad, regla.CoberturaMaxima)); return(null); } expresionLogica.Proposiciones.Select(x => { x.NombrePropiedad = nombrePropiedad; return(x); }).ToList(); ExprContrato exprAnd = ConstruirArbolExpresionAnd <Contrato>(expresionLogica.Proposiciones); if (exprAnd.IsNull()) { listaMensajes.Add(CrearMensajeConfiguracionRegla.ObtenerMensajeErrorParametro(nombrePropiedad)); return(null); } predicado = predicado.And(exprAnd); } if (regla.Nivel.IsNotNullOrEmpty()) { ExprContrato criterio = contrato => regla.Nivel.Contains(contrato.Nivel); predicado = predicado.And(criterio); } if (regla.DeducibleTotal.IsNotNullOrEmpty()) { var nombrePropiedad = "DeducibleTotal"; var expresionLogica = new ExpresionLogica(regla.DeducibleTotal); if (!expresionLogica.EsExpresionLogica) { listaMensajes.Add(CrearMensajeConfiguracionRegla.ObtenerMensajeErrorExpresionLogica(nombrePropiedad, regla.DeducibleTotal)); return(null); } expresionLogica.Proposiciones.Select(x => { x.NombrePropiedad = nombrePropiedad; return(x); }).ToList(); ExprContrato exprAnd = ConstruirArbolExpresionAnd <Contrato>(expresionLogica.Proposiciones); if (exprAnd.IsNull()) { listaMensajes.Add(CrearMensajeConfiguracionRegla.ObtenerMensajeErrorParametro(nombrePropiedad)); return(null); } predicado = predicado.And(exprAnd); } if (regla.TieneImpedimento.IsNotNull()) { ExprContrato criterio = contrato => contrato.TieneImpedimento == regla.TieneImpedimento; predicado = predicado.And(criterio); } if (regla.EsMoroso.IsNotNull()) { ExprContrato criterio = contrato => contrato.EsMoroso == regla.EsMoroso; predicado = predicado.And(criterio); } if (regla.NumeroEmpresa.IsNotNullOrEmpty()) { ExprContrato criterio = contrato => regla.NumeroEmpresa.Contains(contrato.NumeroEmpresa); predicado = predicado.And(criterio); } if (regla.CodigoSucursal.IsNotNullOrEmpty()) { ExprContrato criterio = contrato => regla.CodigoSucursal.Contains(contrato.CodigoSucursal); predicado = predicado.And(criterio); } if (regla.NumeroLista.IsNotNullOrEmpty()) { ExprContrato criterio = contrato => regla.NumeroLista.Contains(contrato.NumeroLista); predicado = predicado.And(criterio); } if (regla.EsDeducibleAnual.IsNotNull()) { ExprContrato criterio = contrato => contrato.EsDeducibleAnual == regla.EsDeducibleAnual; predicado = predicado.And(criterio); } if (regla.EsVigente.IsNotNull()) { if (regla.EsVigente.Value) { ExprContrato criterio = contrato => contrato.FechaVigencia > DateTime.Now.Date; predicado = predicado.And(criterio); } else { ExprContrato criterio = contrato => contrato.FechaVigencia <= DateTime.Now.Date; predicado = predicado.And(criterio); } } return(predicado); }