public Task <IEnumerable <Product> > GetProductAsync(SuggestProductModel m, IValueAddedServicesRules rules) { var products = new[] { new Product { Code = "PLD100", Name = "Pos Laju Domestic", Parent = "", ValidFrom = DateTime.Today.AddYears(-1), ValidTo = DateTime.Today.AddYears(1) }, new Product { Code = "PLD1001", Name = "Next Day Delivery", Parent = "PLD100", ValidFrom = DateTime.Today.AddYears(-1), ValidTo = DateTime.Today.AddYears(1) }, new Product { Code = "PLD1002", Name = "Same Day Delivery", Parent = "PLD100", ValidFrom = DateTime.Today.AddYears(-1), ValidTo = DateTime.Today.AddYears(1) }, new Product { Code = "PLD1004", Name = "Borneo Economy Express", Parent = "", ValidFrom = DateTime.Today.AddYears(-1), ValidTo = DateTime.Today.AddYears(1) }, new Product { Code = "PLD1005", Name = "Putrajaya Express", Parent = "PLD100", ValidFrom = DateTime.Today.AddYears(-1), ValidTo = DateTime.Today.AddYears(1) }, new Product { Code = "PLD1006", Name = "Parcel Domestic Surface", Parent = "PLD100", ValidFrom = DateTime.Today.AddYears(-1), ValidTo = DateTime.Today.AddYears(1) }, new Product { Code = "PLD1007", Name = "Parcel Domestic Air", Parent = "PLD100", ValidFrom = DateTime.Today.AddYears(-1), ValidTo = DateTime.Today.AddYears(1) }, new Product { Code = "PLD1008", Name = "Courier Charges - TNT", Parent = "PLD100", ValidFrom = DateTime.Today.AddYears(-1), ValidTo = DateTime.Today.AddYears(1) }, new Product { Code = "PLD1009", Name = "PosLaju Economy Package", Parent = "PLD100", ValidFrom = DateTime.Today.AddYears(-1), ValidTo = DateTime.Today.AddYears(1) }, new Product { Code = "PLD1012", Name = "COURIER CHARGES - LPM SPM", Parent = "PLD100", ValidFrom = DateTime.Today.AddYears(-1), ValidTo = DateTime.Today.AddYears(1) }, }; return(Task.FromResult(products.AsEnumerable())); }
// ReSharper restore UnusedAutoPropertyAccessor.Local // ReSharper restore UnusedMember.Local public async Task<IEnumerable<Product>> GetProductAsync(SuggestProductModel model, IValueAddedServicesRules rules) { var international = (model.Country == "MY" || model.Country == "Malaysia") ? "0" : "1"; string sql = $@" SELECT * FROM [dbo].[Product] WHERE [Ost] = 1 AND [Status] <> 2 AND [ValidFrom] <= GETDATE() AND [ValidTo] >= GETDATE() AND [IsInternational] = {international} AND [MinWeight] <= {model.Weight} AND [MaxWeight] >= {model.Weight}"; using (var conn = new SqlConnection(ConnectionString)) { await conn.OpenAsync(); var list = await conn.QueryAsync<Product>(sql); // TODO : read the value add services var vas = (await conn.QueryAsync<SnbValuedAddedService>("SELECT * FROM [dbo].[ValueAddedService] WHERE [Ost] = 1 AND [ValidFrom] <= GETDATE() AND [ValidTo] >= GETDATE()")).ToList(); var surcharges = (await conn.QueryAsync<SnbSurcharge>("SELECT * FROM [dbo].[Surcharge] WHERE [SbuName] = 'PosLaju' AND [ValidFrom] <= GETDATE() AND [ValidTo] >= GETDATE()")).ToList(); var products = new List<Product>(); foreach (var product in list) { product.Initialize(); var validServices = new List<ValueAddedService>(); foreach (var v in product.ValueAddedServices) { var db = vas.SingleOrDefault(x => x.Code == v.Code); if (null == db) continue; //v.Value = db.Value; v.Name = db.Name; v.IsGst = db.IsGst; v.Formula = db.Formula; v.FormulaPosition = db.FormulaPosition; //[{__type:"SalesBilling.Domain.Entities.Pricing.UserInput, SalesBilling.Domain",Name:DECLARED_VALUE,Value:0.0}] var text = db.SerializedUserInputs.Replace("SalesBilling.Domain.Entities.Pricing.UserInput, SalesBilling.Domain", "Bespoke.PostEntt.Ost.Services.UserInput, snb.services"); var userInputs = ServiceStack.Text.TypeSerializer.DeserializeFromString<List<UserInput>>(text); v.UserInputs.AddRange(userInputs); var valid = await rules.Validate(model, product, v); if (valid) validServices.Add(v); } product.ValueAddedServices.Clear(); product.ValueAddedServices.AddRange(validServices); var validSurcharges = new List<Surcharge>(); foreach (var sc in product.Surcharges) { var db = surcharges.SingleOrDefault(x => x.Code == sc.Code); if (null == db) continue; //v.Value = db.Value; sc.Name = db.Name; sc.IsGst = db.IsGst; sc.Formula = db.Formula; sc.FormulaPosition = db.FormulaPosition; validSurcharges.Add(sc); } product.Surcharges.Clear(); product.Surcharges.AddRange(validSurcharges); products.Add(product); } return products; } }