Exemplo n.º 1
0
        public virtual async Task DeleteDiscountRequirement(DiscountRule discountRequirement, Discount discount)
        {
            await _discountService.DeleteDiscountRequirement(discountRequirement);

            discount.DiscountRules.Remove(discountRequirement);
            await _discountService.UpdateDiscount(discount);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Delete discount requirement
        /// </summary>
        /// <param name="discountRequirement">Discount requirement</param>
        public virtual async Task DeleteDiscountRequirement(DiscountRule discountRequirement)
        {
            if (discountRequirement == null)
            {
                throw new ArgumentNullException(nameof(discountRequirement));
            }

            var discount = await _discountRepository.GetByIdAsync(discountRequirement.DiscountId);

            if (discount == null)
            {
                throw new ArgumentNullException(nameof(discount));
            }
            var req = discount.DiscountRules.FirstOrDefault(x => x.Id == discountRequirement.Id);

            if (req == null)
            {
                throw new ArgumentNullException(nameof(req));
            }

            discount.DiscountRules.Remove(req);
            await UpdateDiscount(discount);

            await _cacheBase.RemoveByPrefix(CacheKey.DISCOUNTS_PATTERN_KEY);

            //event notification
            await _mediator.EntityDeleted(discountRequirement);
        }
    private DiscountRule GetNewDiscontRuleFromGrid(DiscountRule discountRule, GridViewRow row)
    {
        string minitemText = ((TextBox)row.FindControl("uxToItemsText")).Text;

        discountRule.ToItems = (String.IsNullOrEmpty(minitemText)) ? 0 : int.Parse(minitemText);

        string amountText     = ((TextBox)row.FindControl("uxAmountText")).Text;
        string discountResult = (String.IsNullOrEmpty(amountText) ? "0" : amountText);

        switch (CurrentDiscountType)
        {
        case "Percentage":
            discountRule.Percentage = ConvertUtilities.ToDouble(discountResult);
            discountRule.Amount     = 0;
            break;

        case "Price":
            discountRule.Amount     = decimal.Parse(discountResult);
            discountRule.Percentage = 0;
            break;

        default:
            discountRule.Percentage = 0;
            discountRule.Amount     = 0;
            break;
        }

        return(discountRule);
    }
Exemplo n.º 4
0
        /// <summary>
        /// 获取满减规则
        /// </summary>
        /// <param name="appId"></param>
        /// <returns></returns>
        public ActionResult GetDiscountRule(int discountRuleId)
        {
            Return_Msg handingResult = new Return_Msg();

            handingResult.isok = true;
            handingResult.code = "0";
            handingResult.Msg  = "成功查询";

            DiscountRule discountRules = DiscountRuleBLL.SingleModel.GetModel(discountRuleId);

            //找不到记录时
            if (discountRules == null)
            {
                handingResult.isok = false;
                handingResult.code = "1";
                handingResult.Msg  = "找不到指定满减规则";

                return(Json(handingResult, JsonRequestBehavior.AllowGet));
            }
            else
            {
                handingResult.dataObj = new
                {
                    discountRules = discountRules
                };
                return(Json(handingResult, JsonRequestBehavior.AllowGet));
            }
        }
Exemplo n.º 5
0
 public Booking(Customer customer, Room room, BookingPeriod bookingPeriod, DiscountRule discountRule) : base()
 {
     Customer      = customer;
     Room          = room;
     BookingPeriod = bookingPeriod;
     DiscountRule  = discountRule;
 }
Exemplo n.º 6
0
        private void HandleDiscount(CartItem item, DiscountRule discountRule)
        {
            //Getting the correct handler for this discount rule
            var handler = _ruleFactory.GetDiscountHandler(discountRule);

            //Handling the discount rule
            handler.HandleDiscount(item, discountRule.Config);
        }
 public override void CompanyLine(IList <Line> line, DiscountRule dRule)
 {
     foreach (var _line in line)
     {
         receipt.AppendLine();
         receipt.Append("\t");
         base.CompanyLine(_line, dRule);
     }
 }
Exemplo n.º 8
0
        public void CountDiscount()
        {
            DiscountList ds = new DiscountList();

            DRule = new DiscountRule {
                Line = _lines, Discountlist = ds.AllDiscount.ToList()
            };
            DRule.ApplyDiscountRule();
        }
Exemplo n.º 9
0
        public DiscountRule Build()
        {
            DiscountRule result = new DiscountRule
            {
                Piles = _itemPiles,
                Price = _discountPrice
            };

            return(result);
        }
 //Returns the correct handler for specific rule
 public IDiscountRuleHandler GetDiscountHandler(DiscountRule rule)
 {
     switch (rule.RuleType)
     {
         case DiscountRuleType.Bundle:
             return new BundleDiscountHandler();
         default:
             throw new Exception("No Found");
     }
 }
    private DiscountGroup AddUnlimitedDiscountRule(DiscountGroup discountGroup)
    {
        DiscountRule discountRule = new DiscountRule();

        discountRule.ToItems    = SystemConst.UnlimitedNumber;
        discountRule.Percentage = 0;
        discountRule.Amount     = 0;
        discountGroup.DiscountRules.Add(discountRule);
        return(discountGroup);
    }
Exemplo n.º 12
0
        public override void CompanyLine(IList <Line> line, DiscountRule dRule)
        {
            receipt.Append("<ul>");

            foreach (var _line in line)
            {
                receipt.Append("<li>");
                base.CompanyLine(_line, dRule);
                receipt.Append("</li>");
            }

            receipt.Append("</ul>");
        }
Exemplo n.º 13
0
        public async Task <IActionResult> Configure(string discountId, string discountRequirementId)
        {
            if (!await _permissionService.Authorize(StandardPermission.ManageDiscounts))
            {
                return(Content("Access denied"));
            }

            var discount = await _discountService.GetDiscountById(discountId);

            if (discount == null)
            {
                throw new ArgumentException("Discount could not be loaded");
            }

            DiscountRule discountRequirement = null;

            if (!String.IsNullOrEmpty(discountRequirementId))
            {
                discountRequirement = discount.DiscountRules.FirstOrDefault(dr => dr.Id == discountRequirementId);
                if (discountRequirement == null)
                {
                    return(Content("Failed to load requirement."));
                }
            }

            var restrictedToCustomerGroupId = _settingService.GetSettingByKey <RequirementCustomerGroup>(string.Format("DiscountRules.Standard.MustBeAssignedToCustomerGroup-{0}-{1}", discount.Id, !String.IsNullOrEmpty(discountRequirementId) ? discountRequirementId : ""));

            var model = new RequirementModel();

            model.RequirementId   = !String.IsNullOrEmpty(discountRequirementId) ? discountRequirementId : "";
            model.DiscountId      = discountId;
            model.CustomerGroupId = restrictedToCustomerGroupId?.CustomerGroupId;
            //customer groups
            model.AvailableCustomerGroups.Add(new SelectListItem {
                Text = "Select customer group", Value = ""
            });
            foreach (var cr in await _groupService.GetAllCustomerGroups(showHidden: true))
            {
                model.AvailableCustomerGroups.Add(new SelectListItem {
                    Text = cr.Name, Value = cr.Id.ToString(), Selected = discountRequirement != null && cr.Id == restrictedToCustomerGroupId?.CustomerGroupId
                });
            }

            //add a prefix
            ViewData.TemplateInfo.HtmlFieldPrefix = string.Format("DiscountRulesCustomerGroups{0}", !String.IsNullOrEmpty(discountRequirementId) ? discountRequirementId : "");

            return(View("~/Plugins/DiscountRules.Standard/Views/CustomerGroups/Configure.cshtml", model));
        }
        public bool IsValid(Basket basket, DiscountRule discountRule)
        {
            if (basket.Items.All(x => x.ProductId != Guid.Parse(discountRule.RuleValue)))
            {
                return(false);
            }

            var product = basket.Items.Find(x => x.ProductId == Guid.Parse(discountRule.RuleValue));

            if (product.Quantity < Convert.ToInt32(discountRule.RuleValue2))
            {
                return(false);
            }

            return(true);
        }
Exemplo n.º 15
0
        public async Task <IActionResult> Configure(string discountId, string discountRequirementId, string productIds)
        {
            if (!await _permissionService.Authorize(StandardPermission.ManageDiscounts))
            {
                return(Content("Access denied"));
            }

            var discount = await _discountService.GetDiscountById(discountId);

            if (discount == null)
            {
                throw new ArgumentException("Discount could not be loaded");
            }

            DiscountRule discountRequirement = null;

            if (!String.IsNullOrEmpty(discountRequirementId))
            {
                discountRequirement = discount.DiscountRules.FirstOrDefault(dr => dr.Id == discountRequirementId);
            }

            if (discountRequirement != null)
            {
                //update existing rule
                await _settingService.SetSetting(string.Format("DiscountRules.Standard.RestrictedProductIds-{0}-{1}", discount.Id, discountRequirement.Id), new RequirementProducts()
                {
                    Products = productIds.Split(',')
                });
            }
            else
            {
                //save new rule
                discountRequirement = new DiscountRule
                {
                    DiscountRequirementRuleSystemName = "DiscountRules.HasOneProduct"
                };
                discount.DiscountRules.Add(discountRequirement);
                await _discountService.UpdateDiscount(discount);

                await _settingService.SetSetting(string.Format("DiscountRules.Standard.RestrictedProductIds-{0}-{1}", discount.Id, discountRequirement.Id), new RequirementProducts()
                {
                    Products = productIds.Split(',')
                });
            }
            return(new JsonResult(new { Result = true, NewRequirementId = discountRequirement.Id }));
        }
Exemplo n.º 16
0
        private void CreateDiscounts()
        {
            Product apples = Store.GetProductByName("apples");

            if (apples != null)
            {
                IDiscount applesDiscount = new PercentageDiscount(apples.Id, 10);
                Store.AddDiscount(applesDiscount);
            }

            Product      beans             = Store.GetProductByName("beans");
            Product      bread             = Store.GetProductByName("bread");
            DiscountRule breadDiscountRule = new DiscountRule(beans.Id, 2);

            if (beans != null && bread != null)
            {
                IDiscount breadDiscount = new MixtPercentageDiscount(bread.Id, 50, breadDiscountRule);
                Store.AddDiscount(breadDiscount);
            }
        }
Exemplo n.º 17
0
        public ActionResult DeleteDiscountRules(int id, int appId, int storeId = 0)
        {
            Return_Msg handingResult = new Return_Msg();

            handingResult.isok = true;
            handingResult.code = "0";
            handingResult.Msg  = "删除成功";

            DiscountRule discountRule = DiscountRuleBLL.SingleModel.GetModel(id);

            discountRule.state      = -1;
            discountRule.updateDate = DateTime.Now;

            bool isUpdateSuccess = DiscountRuleBLL.SingleModel.Update(discountRule, "state,updateDate");

            if (!isUpdateSuccess)
            {
                handingResult.isok = false;
                handingResult.code = "-1";
                handingResult.Msg  = "修改失败,请重试!";
            }
            return(Json(handingResult, JsonRequestBehavior.AllowGet));
        }
    protected void uxDiscountGrid_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Add")
        {
            GridViewRow rowAdd = uxDiscountGrid.FooterRow;

            DiscountGroup discountGroup = DataAccessContext.DiscountGroupRepository.GetOne(CurrentDiscountGroupID);
            DiscountRule  discountRule  = new DiscountRule();
            discountRule = GetNewDiscontRuleFromGrid(discountRule, rowAdd);

            if (!IsExisted(discountRule.ToItems))
            {
                if (discountRule.ToItems <= UnlimitedNumber)
                {
                    discountGroup.DiscountRules.Add(discountRule);

                    DataAccessContext.DiscountGroupRepository.Save(discountGroup);
                    ClearData(rowAdd);

                    RefreshGrid();

                    uxMessage.DisplayMessage(Resources.DiscountMessage.ItemAddSuccess);

                    uxStatusHidden.Value = "Added";
                }
                else
                {
                    uxMessage.DisplayError(Resources.DiscountMessage.TomuchItemError);
                }
            }
            else
            {
                uxStatusHidden.Value = "Error";
                uxMessage.DisplayError(Resources.DiscountMessage.MinItemError);
            }
        }
    }
Exemplo n.º 19
0
        //private void CopyDiscountRule( DataRow[] discountrule )
        //{
        //    int firstToItems = ConvertUtilities.ToInt32( discountrule[0]["ToItems"] ) - 1;
        //    int toItems;
        //    DiscountRuleAccess.Create( discountrule[0]["DiscountGroupID"].ToString(), firstToItems.ToString(), 0, 0 );
        //    for (int j = 0; j < discountrule.Length - 1; j++)
        //    {
        //        toItems = ConvertUtilities.ToInt32( discountrule[j + 1]["ToItems"] ) - 1;
        //        DiscountRuleAccess.Update(
        //            discountrule[j]["DiscountRuleID"].ToString(),
        //            discountrule[j]["DiscountGroupID"].ToString(),
        //            toItems.ToString(),
        //            float.Parse( discountrule[j]["Percentage"].ToString() ),
        //            ConvertUtilities.ToDecimal( discountrule[j]["Amount"] )
        //        );
        //    }
        //    int Last = discountrule.Length - 1;
        //    DiscountRuleAccess.Update(
        //        discountrule[Last]["DiscountRuleID"].ToString(),
        //        discountrule[Last]["DiscountGroupID"].ToString(),
        //        SystemConst.UnlimitedNumber.ToString(),
        //        float.Parse( discountrule[Last]["Percentage"].ToString() ),
        //        ConvertUtilities.ToDecimal( discountrule[Last]["Amount"] )
        //    );
        //}

        private DiscountGroup CopyDiscountRule(DiscountGroup discountGroup)
        {
            int          firstToItems = discountGroup.DiscountRules[0].ToItems - 1;
            int          toItems;
            DiscountRule discountRule = new DiscountRule();

            discountRule.DiscountGroupID = discountGroup.DiscountGroupID;
            discountRule.ToItems         = firstToItems;
            discountRule.Amount          = 0;
            discountRule.Percentage      = 0;
            discountGroup.DiscountRules.Add(discountRule);

            for (int j = 0; j < discountGroup.DiscountRules.Count - 1; j++)
            {
                toItems = discountGroup.DiscountRules[j + 1].ToItems - 1;
                discountGroup.DiscountRules[j].ToItems = toItems;
            }

            int Last = discountGroup.DiscountRules.Count - 1;

            discountGroup.DiscountRules[Last].ToItems = SystemConst.UnlimitedNumber;

            return(discountGroup);
        }
        public DiscountRule GetDiscountByID(int DiscountID)
        {
            DiscountRule discount = new DiscountRule();

            using (BusinessRulesDBEntities db = new BusinessRulesDBEntities())
            {
                SalesDiscount salesDiscount = db.SalesDiscounts.Where(a => a.ID == DiscountID).FirstOrDefault();
                if (salesDiscount != null)
                {
                    discount.ID              = salesDiscount.ID;
                    discount.Name            = salesDiscount.DiscountName;
                    discount.Base            = salesDiscount.DiscountBase;
                    discount.commAmount      = salesDiscount.CommAmt.Value;
                    discount.commRelatedUnit = salesDiscount.CommRelatedUnit;
                    discount.commRound       = salesDiscount.CommRound;
                    discount.commType        = salesDiscount.CommType;
                    discount.EndDate         = salesDiscount.DiscountEndDate.Value;
                    discount.Priority        = salesDiscount.DiscountPriority.Value;
                    discount.StartDate       = salesDiscount.DiscountStartDate.Value;
                    List <SalesDiscountCriteria> discountCriteria = db.SalesDiscountCriterias.Where(a => a.DiscountID == discount.Name).ToList();
                    if (discountCriteria.Count > 0)
                    {
                        discount.CriteriaList = (from dc in discountCriteria
                                                 join c in db.Criterias_Difinition on dc.DiscountCriteria equals c.ID.ToString()
                                                 select new SalesRulesCriteria
                        {
                            criteriaName = c.criteriaName,
                            operation = dc.operation,
                            textValue = dc.CriteriaValueText,
                            value = dc.CriteriaValue
                        }).ToList();
                    }
                }
            }
            return(discount);
        }
Exemplo n.º 21
0
        public ActionResult EditDiscountRules(DiscountRule curDiscountRule)
        {
            Return_Msg handingResult = new Return_Msg();

            handingResult.isok = true;
            handingResult.code = "0";
            handingResult.Msg  = "保存成功";

            if (curDiscountRule.meetMoney <= 0 || curDiscountRule.meetMoney > 99999.99f)
            {
                handingResult.isok = false;
                handingResult.code = "300";
                handingResult.Msg  = "满足金额请设定 0.01 ~ 99999.99 区间的值";
            }
            if (curDiscountRule.discountMoney <= 0 || curDiscountRule.discountMoney > 99999.99f)
            {
                handingResult.isok = false;
                handingResult.code = "301";
                handingResult.Msg  = "优惠额请设定 0.01 ~ 99999.99 区间的值";
            }
            if (curDiscountRule.meetMoney < curDiscountRule.discountMoney)
            {
                handingResult.isok = false;
                handingResult.code = "302";
                handingResult.Msg  = "优惠金额不可设定大于满足金额.";
            }

            //数据库的满减规则
            List <DiscountRule> dbDiscountRules = DiscountRuleBLL.SingleModel.GetListByAId(curDiscountRule.aId);
            //是否有重复的规则
            bool havRepe = dbDiscountRules.Any(d =>
                                               d.id != curDiscountRule.id &&
                                               d.meetMoney == curDiscountRule.meetMoney &&
                                               d.discountMoney == curDiscountRule.discountMoney
                                               );

            if (havRepe)
            {
                handingResult.isok = false;
                handingResult.code = "303";
                handingResult.Msg  = "已有重复的规则.";
            }

            //总数不可超过 N 条
            int ruleCount = dbDiscountRules.Count(d =>
                                                  d.id != curDiscountRule.id
                                                  );

            if (ruleCount >= maxRulesCount)
            {
                handingResult.isok = false;
                handingResult.code = "304";
                handingResult.Msg  = $"规则数量已达到上限{maxRulesCount}条.";
            }

            //编辑
            if (curDiscountRule.id > 0)
            {
                DiscountRule dbDiscountRule = DiscountRuleBLL.SingleModel.GetModel(curDiscountRule.id);
                if (dbDiscountRule == null)
                {
                    handingResult.isok = false;
                    handingResult.code = "1";
                    handingResult.Msg  = "找不到指定的规则记录";

                    return(Json(handingResult, JsonRequestBehavior.AllowGet));
                }

                dbDiscountRule.meetMoney     = curDiscountRule.meetMoney;
                dbDiscountRule.discountMoney = curDiscountRule.discountMoney;
                dbDiscountRule.updateDate    = DateTime.Now;

                bool isUpdateSuccess = DiscountRuleBLL.SingleModel.Update(dbDiscountRule, "meetMoney,discountMoney,updateDate");
                if (!isUpdateSuccess)
                {
                    handingResult.isok = false;
                    handingResult.code = "2";
                    handingResult.Msg  = "修改失败";

                    return(Json(handingResult, JsonRequestBehavior.AllowGet));
                }
            }
            //添加
            else
            {
                curDiscountRule.state      = 0;
                curDiscountRule.createDate = curDiscountRule.updateDate = DateTime.Now;

                int id = Convert.ToInt32(DiscountRuleBLL.SingleModel.Add(curDiscountRule));
                if (id <= 0)
                {
                    handingResult.isok = false;
                    handingResult.code = "3";
                    handingResult.Msg  = "保存失败";

                    return(Json(handingResult, JsonRequestBehavior.AllowGet));
                }
            }
            return(Json(handingResult, JsonRequestBehavior.AllowGet));
        }
Exemplo n.º 22
0
 public Discount(decimal value, DiscountRule rule)
 {
     Value = value;
     Rule  = rule;
 }
Exemplo n.º 23
0
        public virtual string FinalReceipt(string company, IList <Line> lines, double taxrate, DiscountRule dRule)
        {
            CompanyOrder(company);
            CompanyLine(lines, dRule);
            SubTotal();
            TaxInfo(taxrate);
            Total();

            return(receipt.ToString());
        }
Exemplo n.º 24
0
 public DiscountOffer(DateTime dateTime, Condition condition, DiscountRule discountRule)
 {
     this.dateTime     = dateTime;
     this.condition    = condition;
     this.discountRule = discountRule;
 }
        public void AddItemToCheckout(int sku, decimal quantity, MeasurmentUnits buyUnit, DiscountRule discountRule)
        {
            // First get the product with the corresponding SKU from repository
            var product = _productsRepo.GetProduct(sku);

            if (product == null)
            {
                throw new ArgumentException($"Cannot find product with SKU : {sku}");
            }

            if (product.UnitPrice <= 0)
            {
                throw new ArgumentOutOfRangeException("Cannot add a product with invalid price");
            }

            if (quantity <= 0)
            {
                throw new ArgumentOutOfRangeException("Cannot add a product with negative or zero quantity");
            }

            if (product.MeasurmentUnit == MeasurmentUnits.PIECE && quantity != Math.Round(quantity))
            {
                throw new ArgumentException("Cannot add product sold by number with a floating decimal quantity");
            }

            if (product.MeasurmentUnit != buyUnit)
            {
                try
                {
                    // get the quantity corresponding to the sell unit, rounded to 3 decimals
                    quantity = Math.Round(GetQuantityFromUnit(quantity, product.MeasurmentUnit, buyUnit), 3);
                }
                catch (Exception e)
                {
                    throw new ArgumentException(e.Message + $": Sell Unit {product.MeasurmentUnit}, Buy Unit {buyUnit}");
                }
            }

            if (discountRule != null)
            {
                discountRule = ConfigureDiscountRuleParams(discountRule.Id, product.UnitPrice);
            }

            // Finally add a "quantity" of this product to the list of
            // checkout items if all the checking conditions are met
            _checkoutRepo.AddItem(product, quantity, buyUnit, discountRule);
        }
 public void ComputeDiscountOnCart(DiscountRule rule, DiscountRequest discountRequest, DiscountResponse discountResponse)
 {
     // Do Nothing
 }
Exemplo n.º 27
0
 public virtual void CompanyLine(Line line, DiscountRule DRule)
 {
     totalAmount += DRule.DiscountAmount;
     receipt.Append($"{line.Quantity} x {line.Bike.Brand} {line.Bike.Model} = {DRule.DiscountAmount.ToString("C")}");
 }
        public void AddItem(Product product, decimal quantity, MeasurmentUnits buyUnit, DiscountRule discountRule)
        {
            product.DiscountRule = discountRule;

            // create a CheckoutItem object from the provided parameters
            var checkoutItem = new CheckoutItem
            {
                Product  = product,
                Quantity = quantity,
                BuyUnit  = buyUnit,
                Price    = product.UnitPrice * quantity
            };

            // Set a unique ID and increment the static counter
            checkoutItem.Id = _id;
            Interlocked.Increment(ref _id);

            // add the item to the checkout list
            _checkoutItems.Add(checkoutItem);
        }
Exemplo n.º 29
0
 public override string FinalReceipt(string company, IList <Line> lines, double taxrate, DiscountRule dRule)
 {
     return(base.FinalReceipt(company, lines, taxrate, dRule));
 }
 public void ComputeDiscountOnItem(DiscountRule rule, DiscountRequest discountRequest, DiscountResponse discountResponse, DiscountRequestItem item)
 {
     item.TotalDiscount += rule.Value;
 }