/// <summary> /// 移除商品Sku /// </summary> /// <param name="skuId">商品Sku id</param> internal void RemoveSku(int skuId) { if (Skus.ContainsKey(skuId)) { Skus.Remove(skuId); } }
async Task ExecuteLoadItemsCommand() { if (IsBusy) { return; } IsBusy = true; try { Skus.Clear(); var result = await PosSDK.CallAPI <ListResult <Sku> >("/catalog/search-skus"); Skus.ReplaceRange(result.Result.Items); } catch (Exception ex) { Debug.WriteLine(ex); MessagingCenter.Send(new MessagingCenterAlert { Title = "Error", Message = "Unable to load items.", Cancel = "OK" }, "message"); } finally { IsBusy = false; } }
public void ShouldCheckoutNothing() { var a = new Sku { ItemName = "A", Price = 5 }; var b = new Sku { ItemName = "B", Price = 3 }; var offers = new List <Pricing> { new Pricing { Condition = new List <SkuUnits> { new SkuUnits { Sku = a, Units = 2 }, new SkuUnits { Sku = b, Units = 1 } } } }; var skus = new Skus(); skus.AddOrUpdate(a); skus.AddOrUpdate(b); var emptyBasket = new List <(Sku sku, int items)>(); var kart = new Kart(); var sut = new Checkout(skus, offers); foreach (var i in emptyBasket) { kart = sut.Scan(kart, i.sku, i.items); } kart.Total.ShouldBe(0m); }
//Método responsável por Atualizar quantidade em estoque por produto public async Task <HttpResponseMessage> AtualizarQuantidadeEstoque(string _skuId, int _onHand) { Log log = new Log(); try { log.WriteLogEstoque("Atualizando quantidade em estoque para o Item " + _skuId); UpdateInventory updateInventory = new UpdateInventory(); List <Skus> listSku = new List <Skus>(); Skus sku = new Skus(); sku.IdSku = _skuId; sku.Quantity = _onHand; listSku.Add(sku); //updateInventory.SkuList = listSku; string jsonUpdateInventory = JsonUtil.ConvertToJsonString(listSku); string uri = "api/Stock"; HttpResponseMessage response = await BuildClient().PutAsync(uri, new StringContent(jsonUpdateInventory, UnicodeEncoding.UTF8, "application/json")); return(response); } catch (HttpRequestException e) { log.WriteLogEstoque("Exception AtualizarQuantidadeEstoque " + e.InnerException.Message); throw; } }
public void ShouldCheckout1A() { var a = new Sku { ItemName = "A", Price = 5 }; var b = new Sku { ItemName = "B", Price = 3 }; var offers = new List <Pricing> { new Pricing { Condition = new List <SkuUnits> { new SkuUnits { Sku = a, Units = 2 }, new SkuUnits { Sku = b, Units = 1 } } } }; var skus = new Skus(); skus.AddOrUpdate(a); skus.AddOrUpdate(b); var basket = new List <(Sku sku, int items)>(); basket.AddRange(new[]
protected double GetUnitPrice(string sku) { var price = Skus.GetPrice(sku); var markdown = Skus.GetMarkdown(sku); return(price - markdown); }
/// <summary> /// 获取商品零售价格 有多个sku时 返回价格区间 /// </summary> /// <returns></returns> public string GetRetailPriceText() { if (Skus != null && Skus.Any()) { var min = Skus.Min(x => x.RetailPrice); var max = Skus.Max(x => x.RetailPrice); return(min.ToString("F2") + "-" + max.ToString("F2")); } return(RetailPrice.ToString("F2")); }
public int ApplyDiscount(ref IList <Item> itemsLeft) { var itemDiscounted = itemsLeft.Where(item => Skus.Contains(item.Sku)).OrderByDescending(item => item.Price).Take(MatchingQuantity).ToList(); foreach (var item in itemDiscounted) { itemsLeft.Remove(item); } return(itemDiscounted.Sum(item => item.Price) - ForfaitPrice); }
public void Check() { (PaymentCompanyId <= 0).TrueThrow("下单输入参数发薪公司不能为空"); (Remark.Length > 100).TrueThrow("备注不能大于100字"); (OrderPriceSnap == null || !OrderPriceSnap.Any()).TrueThrow("价格快照不能为空"); (Skus == null || !Skus.Any()).TrueThrow("订单商品不能为空"); Skus.Any(p => p.Num <= 0 || p.JDSkuId <= 0).TrueThrow("订单商品或数量异常"); Address.IsNullOrEmpty().TrueThrow("详细地址不能为空"); Mobile.IsNullOrEmpty().TrueThrow("收货人手机号不能为空"); Email.IsNullOrEmpty().TrueThrow("收货人EMail不能为空"); NopOrderId.IsNullOrEmpty().TrueThrow("商城订单编号不能为空"); }
/// <summary> /// 添加商品Sku /// </summary> /// <param name="skuId">商品Sku id</param> /// <param name="itemId">商品 id</param> /// <param name="quantity">添加数量</param> internal void AddSku(int skuId, int itemId, int quantity = 1) { if (Skus.ContainsKey(skuId)) { Skus[skuId].Quantity += quantity; } else { Skus[skuId] = new Sku { Quantity = quantity, ItemId = itemId }; } }
/// <summary> /// 通过商品ID来获取SKU(可传多项ID,不能超过40!) /// </summary> /// <param name="sessionKey"></param> /// <param name="ItemNumId"></param> /// <returns></returns> internal IList <Skus> GetItemSkus(string sessionKey, string ItemNumId) { IList <Skus> list = new List <Skus>(); Skus sku; ITopClient client = new DefaultTopClient(StaticSystemConfig.soft.ApiURL, StaticSystemConfig.soft.AppKey, StaticSystemConfig.soft.AppSecret, "json"); ItemSkusGetRequest req = new ItemSkusGetRequest(); req.Fields = "properties_name,sku_spec_id,with_hold_quantity,sku_delivery_time,change_prop,outer_id,barcode,sku_id,iid,num_iid,properties,quantity,price,created,modified,status"; if (string.IsNullOrEmpty(ItemNumId)) { return(null); } req.NumIids = ItemNumId; ItemSkusGetResponse response = client.Execute(req, sessionKey); if (response.IsError) { return(null); } else { if (response.Skus != null) { foreach (Top.Api.Domain.Sku item in response.Skus) { sku = new Skus(); sku.Barcode = item.Barcode; sku.ChangeProp = item.ChangeProp; sku.Created = item.Created; sku.Iid = item.Iid; sku.Modified = item.Modified; sku.NumIid = item.NumIid; sku.OuterId = item.OuterId; sku.Price = item.Price; sku.Properties = item.Properties; sku.PropertiesName = item.PropertiesName; sku.Quantity = item.Quantity; sku.SkuDeliveryTime = item.SkuDeliveryTime; sku.SkuId = item.SkuId; sku.SkuSpecId = item.SkuSpecId; sku.Status = item.Status; sku.WithHoldQuantity = item.WithHoldQuantity; list.Add(sku); } } } return(list); }
/// <summary> /// 设置商品Sku数量 /// </summary> /// <param name="skuId">商品Sku id</param> /// <param name="itemId">商品 id</param> /// <param name="quantity">设置数量</param> internal void SetSkuQuantity(int skuId, int itemId, int quantity = 1) { if (quantity <= 1) { RemoveSku(skuId); return; } if (Skus.ContainsKey(skuId)) { Skus[skuId].Quantity = quantity; } else { Skus[skuId] = new Sku { Quantity = quantity, ItemId = itemId }; } }
/// <summary> /// 减少商品Sku /// </summary> /// <param name="skuId">商品Sku id</param> /// <param name="quantity">减少数量</param> internal void SubtractSku(int skuId, int quantity = 1) { if (!Skus.ContainsKey(skuId)) { return; } var q = Skus[skuId].Quantity; var v = q - quantity; if (v > 0) { Skus[skuId].Quantity = v; } else { Skus.Remove(skuId); } }
public JsonResult SveGoodsSetting(Skus skuitems) { tbClientUser clientuser = GetUser("UserInfo"); IList <Item> listitem = new List <Item>(); IList <Skus> listsku = new List <Skus>(); try { listitem = goodsinfo.Getitem(clientuser.UserShops[0].SessionKey, skuitems.NumIid.ToString()); listsku = goodsinfo.GetItemSkus(clientuser.UserShops[0].SessionKey, skuitems.SkuId.ToString()); BItems bi = new BItems(); BSkus bs = new BSkus(); if (listitem != null) { if (bi.GetItems(skuitems.NumIid.ToString()).Count() <= 0) { bi.AddItems(listitem[0]); } } if (listsku != null) { foreach (Skus item in listsku) { if (item.SkuId.Equals(skuitems.SkuId)) { if (bs.GetSkus(skuitems.SkuId.ToString()).Count() <= 0) { bs.AddSkus(skuitems); } else { bs.UpdateSkus(skuitems); } } } } } catch (Exception) { throw; } return(Json(new { Result = true })); }
protected double GetSalePriceForItem(string sku, double qty) { var price = GetUnitPrice(sku) * qty; var skuSpecial = Skus.GetSpecial(sku); if (skuSpecial != null && skuSpecial.Amount != -.01) { if (skuSpecial.NeedsEqualOrLesserPurchase) { price = ProcessEqualOrLesserSpecial(price, qty, sku, skuSpecial); } else { price = ProcessForEachSpecial(price, sku, skuSpecial); } } return(price); }
/// <summary> /// 获取商品价格 有多个sku时 返回价格区间 /// </summary> /// <param name="platform">平台</param> /// <returns></returns> public string GetPriceText(Platform platform) { if (platform == Platform.Pc || platform == Platform.Wap) { if (Skus != null && Skus.Any()) { var min = Skus.Min(x => x.Price); var max = Skus.Max(x => x.Price); return(min.ToString("F2") + "-" + max.ToString("F2")); } return(Price.ToString("F2")); } else if (platform == Platform.App) { if (Skus != null && Skus.Any()) { var min = Skus.Min(x => x.AppPrice); var max = Skus.Max(x => x.AppPrice); return(min.ToString("F2") + "-" + max.ToString("F2")); } return(AppPrice.ToString("F2")); } return(string.Empty); }
public bool CanApply(IEnumerable <IItem> items, ICustomer customer) { return(Skus.All(s => items.Any(i => i.Sku == s))); }
public Shop GetShops() { var listVendor = new Vendor().GetListVendor(); var baseUrl = Settings.PriceSettings.BaseURL; var list = new List <Shop>(); var listCategory = new CategoryB().GetListCategory().Select(x => x.Id).ToList <int>(); var shop = new Shop() { Name = Settings.PriceSettings.Name, Company = Settings.PriceSettings.CopanyName, Url = Settings.PriceSettings.URL, Currencies = new Currencies() { Currency = new Currency() { Id = "UAH", Rate = "1" } }, }; var listAddParams = new AddParam().GetListAddParam(); var listAdd = new Product().GetNameReplace(); var listPictureAdd = new Picture().GetListPicture(); foreach (var categoryId in listCategory) { var ListCat = new CategoryB().GetListcategoryToPrice(categoryId); var categories = new List <Category>(); foreach (var cat in ListCat) { if (!listPictureAdd.Select(x => x.category).Contains(cat.Id)) { continue; } if (cat.Parent_Id == 0) { categories.Add(new Category() { Id = cat.Id.ToString(), Text = cat.Name.ToString() }); } else { categories.Add(new Category() { Id = cat.Id.ToString(), Text = cat.Name.ToString(), ParentId = cat.Parent_Id.ToString() }); var parent = new CategoryB().GetListcategoryToPrice(cat.Parent_Id); categories.Add(new Category() { Id = parent.FirstOrDefault().Id.ToString(), Text = parent.FirstOrDefault().Name.ToString() }); } } var listOffes = new List <Offer>(); var products = new Product().GetListProduct(categoryId); if (products.Count() == 0) { continue; } foreach (var product in products) { if (!listPictureAdd.Where(x => x.link.Contains(product.Url)).Any()) { continue; } var skuses = new Skus().GetListSkus(product.Id); if (product.Images.Count() == 0) { continue; } foreach (var skus in skuses) { var parames = new List <Param>(); var listParames = new Paramses().GetListParams(product.Id, skus.Id); foreach (var item in listParames.Where(x => x.Status == true)) { parames.Add( new Param() { Name = item.Name.ToString(), Text = item.Text.ToString() }); } foreach (var item in listAddParams.Where(z => z.GroupId == categoryId)) { parames.Add( new Param() { Name = item.ParamName.ToString(), Text = item.ParamValue.ToString() }); } var additname = string.Empty; if (product.addparam > 0) { var addName = listAdd[product.addparam]; var add = parames.Where(x => x.Name == addName).FirstOrDefault(); if (add != null) { additname = " " + add.Text.ToString(); } } if (skus.Price == 0) { skus.Price = product.Price; } if (skus.Price == 0) { continue; } var markup = listParames.Where(x => x.Status == false).FirstOrDefault()?.Text; double markupValue = 0; var resM = double.TryParse(markup, out markupValue); if (resM && markupValue > 0) { markupValue = markupValue / 100; skus.Price = Math.Round(skus.Price + skus.Price * markupValue, 0); } listOffes.Add(new Offer() { Id = skus.Id.ToString(), Available = "true", Url = baseUrl + product.Url.ToString(), Price = skus.Price.ToString(), Price_old = (skus.OldPrice == 0) ? null : skus.OldPrice.ToString(), CurrencyId = "UAH", CategoryId = categoryId.ToString(), Picture = product.Images, Vendor = listVendor.Where(x => x.Product_id == skus.Product_id)?.FirstOrDefault()?.Name ?? string.Empty, Stock_quantity = product.Count.ToString(), Name = product.Name.ToString() + additname.ToString(), Description = product.Description.ToString(), Param = parames }); } } if (listOffes.Count() == 0) { continue; } if (shop.Categories == null) { shop.Categories = new Categories() { Category = categories } } ; else { shop.Categories.Category.AddRange(categories); } if (shop.Offers == null) { shop.Offers = new Offers() { Offer = listOffes } } ; else { shop.Offers.Offer.AddRange(listOffes); } shop.Offers.Offer = shop.Offers.Offer.GroupBy(x => x.Id).Select(x => new Offer { Id = x.Key, Available = x.Select(z => z.Available).FirstOrDefault().ToString(), CategoryId = x.Select(z => z.CategoryId).FirstOrDefault().ToString(), CurrencyId = x.Select(z => z.CurrencyId).FirstOrDefault().ToString(), Description = x.Select(z => z.Description).FirstOrDefault().ToString(), Name = x.Select(z => z.Name).FirstOrDefault().ToString(), Param = x.Select(z => z.Param).FirstOrDefault(), Picture = x.Select(z => z.Picture).FirstOrDefault(), Price = x.Select(z => z.Price).FirstOrDefault(), Price_old = x.Select(z => z.Price_old).FirstOrDefault(), Stock_quantity = x.Select(z => z.Stock_quantity).FirstOrDefault(), Url = x.Select(z => z.Url).FirstOrDefault(), Vendor = x.Select(z => z.Vendor).FirstOrDefault().ToString() }).ToList(); var listName = shop.Offers.Offer.GroupBy(x => x.Name); foreach (var item in listName) { if (item.Count() > 1) { Settings.Dublicates.Add(string.Concat(item.Select(x => x.CategoryId).FirstOrDefault(), item.Select(x => x.Url).FirstOrDefault())); } } foreach (var item in shop.Offers.Offer) { if (item.Description.Contains(" href")) { Settings.Urls.Add(item.Url); } if (item.Vendor == string.Empty) { Settings.Errores.Add(string.Format("Не указана торговая марка {0}, {1}", item.Id, string.Empty)); } } } if (shop.Categories == null) { return(shop); } shop.Categories.Category = shop.Categories.Category.GroupBy(x => x.Id).Select(x => new Category { Id = x.Key, ParentId = x.Select(z => z.ParentId).FirstOrDefault(), Text = x.Select(z => z.Text).FirstOrDefault() }).ToList(); return(shop); }
public bool CanApplyTo(IList <Item> itemsLeft) { return(itemsLeft.Count(item => Skus.Contains(item.Sku)) >= MatchingQuantity); }
public bool AppliesTo(char x) { return(Skus.Contains(x)); }
/// <summary> /// 添加一行数据 /// </summary> /// <param name="model"></param> /// <returns></returns> public bool AddSkus(Skus model) { return(SetSkus.AddSkus(model)); }
/// <summary> /// 更新一行数据 /// </summary> /// <param name="model"></param> /// <returns></returns> public bool UpdateSkus(Skus model) { return(SetSkus.UpdateSkus(model)); }
/// <summary>Returns an enumerator that iterates through the resources in this response.</summary> public scg::IEnumerator <Sku> GetEnumerator() => Skus.GetEnumerator();
internal int CalculateQualifyingQuota(Dictionary <char, int> skuCounts) { int qualifyingItemCount = Skus.Sum(sku => skuCounts[sku]); return(qualifyingItemCount / QualifyingCount); }