private async Task <bool> ConditionMet(FlightPurchaseDto flightPurchase, Domain.Entities.PriceDiscount discount) { var purchases = new List <FlightPurchaseDto>(); purchases.Add(flightPurchase); var query = purchases.AsQueryable(); var queryString = string.Empty; queryString = await BuildQueryString(discount, queryString); if (string.IsNullOrEmpty(queryString) || query.Where(queryString).Any()) { return(true); } return(false); }
private async Task CheckConditionsAndApply(Domain.Entities.PriceDiscount discount, FlightPurchaseDto purchaseDto, Domain.Entities.FlightPurchase purchase) { // minimalna cena 20 if (purchase.Price - 5 < 20) { return; } if (await ConditionMet(purchaseDto, discount)) { purchase.Price -= 5; // zapis zniżek dla danej grupy if (purchaseDto.TenantGroup == Domain.Enums.TenantGroup.A) { purchase.Discounts.Add(discount); } } }
private Task <string> BuildQueryString(Domain.Entities.PriceDiscount discount, string queryString) { foreach (var r in discount.Rules) { if (discount.Rules.IndexOf(r) == 0) { queryString += "("; } queryString += $"{r.FieldName} = \"{r.Value}\""; if (discount.Rules.IndexOf(r) == discount.Rules.Count - 1) { queryString += ")"; break; } queryString += " and "; } return(Task.FromResult(queryString)); }