public decimal LineQuantity() { decimal total = 0m; System.Data.DataRow[] rows = SoldItem.Instance().Select("CategoryId = '" + this.Id + "'"); if (rows.Length > 0) { total = Convert.ToDecimal(SoldItem.Instance().Compute("Sum(Quantity)", "CategoryId = '" + this.Id + "'")); } return(total); }
internal decimal LineTotal(int plu) { decimal total = 0m; System.Data.DataRow[] rows = SoldItem.Instance().Select("Plu = '" + plu + "'"); if (rows.Length > 0) { total = Convert.ToDecimal(SoldItem.Instance().Compute("Sum(Quantity)", "Plu = '" + plu + "'")); } return(total); }
public decimal TotalAmount() { decimal total = 0m; System.Data.DataRow[] rows = SoldItem.Instance().Select("Plu = '" + this.Id + "'"); if (rows.Length > 0) { total = Convert.ToDecimal(SoldItem.Instance().Compute("Sum(Amount)", "Plu = '" + this.Id + "'")); } return(total); }
public decimal TotalAmount() { decimal subtotal = (decimal)SoldItem.Instance().Compute("Sum(Amount) - Sum(DiscountAmount)", ""); if (base.GiftProductQuantity > 0) { IProduct p = Promotion.FindProductByLabel(base.GiftProductLabelNo); int giftRatio = (int)(subtotal / base.requiredAmount); subtotal = p.UnitPrice * Math.Min(SoldItem.Instance().LineTotal(base.GiftProductLabelNo), giftRatio); } return(subtotal); }
internal List <int> GetSalesID(BasePromotion basePRM) { List <int> salesIDList = new List <int>(); string query = String.Format("Plu ={0} And Quantity > 0", basePRM.GiftProductLabelNo); DataRow[] rows = SoldItem.Instance().Select(query); foreach (DataRow row in rows) { salesIDList.Add((int)row["LineNo"]); } return(salesIDList); }
private bool CheckLimit(BasePromotion basePRM) { switch (basePRM.LimitType) { case LimitType.NoLimit: return(SoldItem.Instance().TotalAmount(basePRM) > 0m); case LimitType.Amount: return(soldItems.TotalAmount(basePRM) >= basePRM.RequiredAmount); case LimitType.Quantity: return(soldItems.LineTotal(basePRM) >= basePRM.RequiredQuantity); default: return(false); } }
internal void GiveAsPromotion(BasePromotion basePRM) { decimal giftQuantity = basePRM.GiftProductQuantity; decimal appliedQuantity = 0m; string query = String.Format("Plu ={0} And Quantity > 0", basePRM.GiftProductLabelNo); DataRow[] rows = SoldItem.Instance().Select(query); if (rows.Length > 0) { foreach (DataRow row in rows) { appliedQuantity = Math.Min(giftQuantity, (decimal)row["Quantity"]); giftQuantity -= appliedQuantity; row["DiscountAmount"] = (decimal)row["DiscountAmount"] + Math.Round(appliedQuantity * ((decimal)row["Amount"] - (decimal)row["DiscountAmount"]) / (decimal)row["Quantity"], 2); row["Quantity"] = (decimal)row["Quantity"] - appliedQuantity; if (giftQuantity <= 0) { break; } } } SetPromotion(basePRM, appliedQuantity > 0); }
public void ApplyPromotion() { decimal ratio = 0m; decimal lineDiscount = 0m, percDiscount = 0m; switch (base.LimitType) { case LimitType.Quantity: ratio = (int)(LineQuantity() / base.RequiredQuantity); lineDiscount = ratio * base.Discount; percDiscount = Rounder.RoundDecimal((TotalPercantageDiscount() / LineQuantity()) * (ratio * base.RequiredQuantity), 2, true); break; case LimitType.Amount: ratio = (TotalAmount() / base.RequiredAmount); lineDiscount = LineQuantity() * base.Discount; percDiscount = Rounder.RoundDecimal(TotalPercantageDiscount(), 2, true); break; default: ratio = LineQuantity(); lineDiscount = ratio * base.Discount; percDiscount = Rounder.RoundDecimal(TotalPercantageDiscount(), 2, true); break; } bool isPercentage = false; if (percDiscount > lineDiscount) { lineDiscount = percDiscount; isPercentage = true; } DataRow[] items = SoldItem.Instance().Select(String.Format("Plu = '{0}'", base.Id)); if (base.limitType != LimitType.Quantity && isPercentage) { foreach (DataRow rowItems in items) { rowItems["DiscountAmount"] = Rounder.RoundDecimal(((decimal)rowItems["Amount"] * base.PercentDiscount) / 100, 2, true); rowItems["PercentDiscount"] = base.PercentDiscount; } } else { decimal discItemQuantity = base.RequiredQuantity * ratio; decimal unitDisc = Rounder.RoundDecimal(lineDiscount / discItemQuantity, 2, true); decimal diff = lineDiscount - Rounder.RoundDecimal(unitDisc * discItemQuantity, 2, true); decimal amount = 0m; foreach (DataRow rowItems in items) { decimal lineDiscQuantity = (decimal)rowItems["Quantity"]; if (lineDiscQuantity <= 0) { continue; } int percRate = base.PercentDiscount; if ((decimal)rowItems["Quantity"] > discItemQuantity) { lineDiscQuantity = discItemQuantity; amount = (unitDisc * lineDiscQuantity) + diff; percRate = 0; } else { amount = (unitDisc * lineDiscQuantity) + diff; } diff = 0; discItemQuantity -= lineDiscQuantity; rowItems["DiscountAmount"] = (decimal)rowItems["DiscountAmount"] + amount; if (isPercentage) { rowItems["PercentDiscount"] = percRate; } if (discItemQuantity == 0) { break; } } } decimal appliedDisc = (decimal)SoldItem.Instance().Compute("Sum(DiscountAmount)", String.Format("Plu = '{0}'", base.Id)); pointEarned = (long)ratio * (base.Points + base.ExtraPoints); SoldItem.Instance().SetPromotion(this, appliedDisc + pointEarned > 0); }