Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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);
            }
        }
Пример #7
0
        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);
        }
Пример #8
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);
        }