public SkuEntity Find(string id) { // Parse forward to the sku element for that id XElement skuElement = FindSkuElement(id); if (skuElement == null) { return(null); } SkuEntity skuEntity = new SkuEntity(); // Set id skuEntity.Id = id; // Load properties skuEntity.Label = skuElement.Element("label").Value; skuEntity.Price = skuElement.Element("price").Value.SafeParse <decimal>(0); skuEntity.DiscountType = skuElement.Element("discounts").Attribute("selection").Value.SafeParse <DiscountTypes>(DiscountTypes.noDiscount); // Load the right discount entity LoadDiscountEntity(ref skuEntity, skuElement.Element("discounts")); return(skuEntity); }
public async Task <TData <string> > SaveForm(SkuEntity entity) { TData <string> obj = new TData <string>(); await skuService.SaveForm(entity); obj.Data = entity.Id.ParseToString(); obj.Tag = 1; return(obj); }
private void LoadDiscountEntity(ref SkuEntity skuEntity, XElement discountsElement) { // Make sure we start with a clean slate skuEntity.SimpleDiscountEntity = null; skuEntity.GroupDiscountEntity = null; skuEntity.AddonDiscountEntity = null; string discountTypeStr = skuEntity.DiscountType.ToString(); switch (skuEntity.DiscountType) { case DiscountTypes.noDiscount: return; case DiscountTypes.simpleDiscount: skuEntity.SimpleDiscountEntity = new Entities.Discounts.SimpleDiscountEntity { EffectiveFromDate = discountsElement.Element(discountTypeStr).Attribute("effectiveFromDate").Value.SafeParse <DateTime>(default(DateTime)), EffectiveToDate = discountsElement.Element(discountTypeStr).Attribute("effectiveToDate").Value.SafeParse <DateTime>(default(DateTime)), Label = discountsElement.Element(discountTypeStr).Element("label").Value, DiscountedPrice = discountsElement.Element(discountTypeStr).Element("discountedPrice").Value.SafeParse <decimal>(0), }; return; case DiscountTypes.groupDiscount: skuEntity.GroupDiscountEntity = new Entities.Discounts.GroupDiscountEntity { EffectiveFromDate = discountsElement.Element(discountTypeStr).Attribute("effectiveFromDate").Value.SafeParse <DateTime>(default(DateTime)), EffectiveToDate = discountsElement.Element(discountTypeStr).Attribute("effectiveToDate").Value.SafeParse <DateTime>(default(DateTime)), Label = discountsElement.Element(discountTypeStr).Element("label").Value, GroupCount = discountsElement.Element(discountTypeStr).Element("groupCount").Value.SafeParse <decimal>(0), GroupPrice = discountsElement.Element(discountTypeStr).Element("groupPrice").Value.SafeParse <decimal>(0), }; return; case DiscountTypes.addonDiscount: skuEntity.AddonDiscountEntity = new Entities.Discounts.AddonDiscountEntity { EffectiveFromDate = discountsElement.Element(discountTypeStr).Attribute("effectiveFromDate").Value.SafeParse <DateTime>(default(DateTime)), EffectiveToDate = discountsElement.Element(discountTypeStr).Attribute("effectiveToDate").Value.SafeParse <DateTime>(default(DateTime)), Label = discountsElement.Element(discountTypeStr).Element("label").Value, BaseCount = discountsElement.Element(discountTypeStr).Element("baseCount").Value.SafeParse <decimal>(0), AddonCount = discountsElement.Element(discountTypeStr).Element("addonCount").Value.SafeParse <decimal>(0), AddonDiscountPercent = discountsElement.Element(discountTypeStr).Element("addonDiscountPercent").Value.SafeParse <decimal>(0), }; return; default: return; } }
public async Task SaveForm(SkuEntity entity) { if (entity.Id.IsNullOrZero()) { await entity.Create(); await this.BaseRepository().Insert(entity); } else { await this.BaseRepository().Update(entity); } }
public static SkuModel Mapper(SkuEntity sEntity) { SkuModel sModel = new SkuModel { Barcode = sEntity.Barcode, Color = sEntity.Color, Id = sEntity.Id, Name = sEntity.Name, Price = sEntity.Price, ProductId = sEntity.ProductEntityId, ImageUrl = sEntity.ImageUrl }; return(sModel); }
public static SkuEntity Mapper(SkuModel sModel) { SkuEntity sEntity = new SkuEntity { Id = sModel.Id, Name = sModel.Name, Price = sModel.Price, Color = sModel.Color, Barcode = sModel.Barcode, ProductEntityId = sModel.ProductId, ImageUrl = sModel.ImageUrl }; return(sEntity); }
public LineItem GenerateDiscountLineItem(SkuEntity skuEntity, BasketItemEntity basketItem) { if (Utils.IsCurrentDateTimeWithinRange(skuEntity.SimpleDiscountEntity.EffectiveFromDate, skuEntity.SimpleDiscountEntity.EffectiveToDate)) { return(new LineItem { LineItemType = DiscountTypes.simpleDiscount, Label = skuEntity.SimpleDiscountEntity.Label, Sku = skuEntity.Id, Total = (skuEntity.SimpleDiscountEntity.DiscountedPrice - skuEntity.Price) * basketItem.Qty }); } return(null); }
public IActionResult DeleteSkuById(Guid Id) { try { DBContext _context = new DBContext(); LogController log = new LogController(); SkuEntity skuEntity = _context.Skus.Where(x => x.Id == Id).FirstOrDefault(); log.LogRegister(skuEntity, "Deleted", Models.Enums.LogTypeEnum.Skus); _context.Remove(skuEntity); _context.SaveChanges(); return(RedirectToAction("SucessMessage", "Home", new { message = "Sku have been deleted.|Index" })); } catch (Exception) { return(RedirectToAction("ErrorMessage", "Home", new { message = "Sku have not been deleted.|Index" })); } }
public LineItem GenerateDiscountLineItem(SkuEntity skuEntity, BasketItemEntity basketItem) { if (Utils.IsCurrentDateTimeWithinRange(skuEntity.GroupDiscountEntity.EffectiveFromDate, skuEntity.GroupDiscountEntity.EffectiveToDate)) { // We already gave the discount as customer already bought more than the group count. // This could change based on future requirements and business rules if (skuCounter.ContainsKey(skuEntity.Id)) { // First check if the group discount was already given for this item if (skuCounter[skuEntity.Id] == discountAlreadyGivenFlag) { return(null); } // Keep a count of items skuCounter[skuEntity.Id] = skuCounter[skuEntity.Id] + basketItem.Qty; } else { // Add the item for the first time to start tracking it its count skuCounter.Add(skuEntity.Id, basketItem.Qty); } // Now check if we've reached the group count required to give a discount. This should happen only once once. We don't want to keep giving discounts after it goes over 3 for example if (skuCounter[skuEntity.Id] >= skuEntity.GroupDiscountEntity.GroupCount) { skuCounter[skuEntity.Id] = discountAlreadyGivenFlag; return(new LineItem { LineItemType = DiscountTypes.groupDiscount, Label = skuEntity.GroupDiscountEntity.Label, Sku = skuEntity.Id, Total = (skuEntity.GroupDiscountEntity.GroupPrice - (skuEntity.GroupDiscountEntity.GroupCount * skuEntity.Price)) }); } } return(null); }
public static List <SkuEntity> Mapper(List <SkuModel> smList) { List <SkuEntity> seList = new List <SkuEntity>(); foreach (var sm in smList) { SkuEntity sEntity = new SkuEntity { Id = sm.Id, Name = sm.Name, Price = sm.Price, Color = sm.Color, Barcode = sm.Barcode, ProductEntityId = sm.ProductId, ImageUrl = sm.ImageUrl }; seList.Add(sEntity); } return(seList); }
public async Task <ActionResult> SaveFormJson(SkuEntity entity) { TData <string> obj = await skuBLL.SaveForm(entity); return(Json(obj)); }
public LineItem GenerateDiscountLineItem(SkuEntity skuEntity, BasketItemEntity basketItem) { return(null); }
public LineItem GenerateDiscountLineItem(SkuEntity skuEntity, BasketItemEntity basketItem) { if (Utils.IsCurrentDateTimeWithinRange(skuEntity.AddonDiscountEntity.EffectiveFromDate, skuEntity.AddonDiscountEntity.EffectiveToDate)) { decimal lastRemainderQtyNotGivenDiscount = 0; // Keep a tally on the remainder qty that a discount wasn't applied to because it wasn't sufficient if (skuCounter.ContainsKey(skuEntity.Id)) { lastRemainderQtyNotGivenDiscount = skuCounter[skuEntity.Id]; } else { skuCounter.Add(skuEntity.Id, 0); } // Add the total qty of the minimum to defined to qualify for a discount decimal totalAddonAndBase = skuEntity.AddonDiscountEntity.AddonCount + skuEntity.AddonDiscountEntity.BaseCount; // Calculate the ratio to apply the discount to decimal discountQtyApplyRatio = (skuEntity.AddonDiscountEntity.AddonCount / totalAddonAndBase); // Calculate the qty to apply the addon discount to decimal qualifyingQtyForDiscount = basketItem.Qty + lastRemainderQtyNotGivenDiscount; // Now apply the discount ratio to the qualified quantity decimal addonQtyToBeDiscounted = 0; decimal regularPrice = 0; decimal discountAmount = 0; decimal remainderNonQualified = 0; if (qualifyingQtyForDiscount >= totalAddonAndBase) { // Calculate the discount amount regularPrice = qualifyingQtyForDiscount * skuEntity.Price; addonQtyToBeDiscounted = discountQtyApplyRatio * qualifyingQtyForDiscount; discountAmount = -(addonQtyToBeDiscounted * skuEntity.Price * skuEntity.AddonDiscountEntity.AddonDiscountPercent / 100); // Remainder quantity not given discount so far so we count it on the next call remainderNonQualified = qualifyingQtyForDiscount - addonQtyToBeDiscounted; return(new LineItem { LineItemType = DiscountTypes.addonDiscount, Label = skuEntity.AddonDiscountEntity.Label, Sku = skuEntity.Id, Total = discountAmount }); } else { remainderNonQualified = qualifyingQtyForDiscount; } // Store the remainder that could not qualify for next time to accumulate and hopefully qualify again skuCounter[skuEntity.Id] = remainderNonQualified; } return(null); }