public virtual async Task DeleteDiscountRequirement(DiscountRule discountRequirement, Discount discount) { await _discountService.DeleteDiscountRequirement(discountRequirement); discount.DiscountRules.Remove(discountRequirement); await _discountService.UpdateDiscount(discount); }
/// <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); }
/// <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)); } }
public Booking(Customer customer, Room room, BookingPeriod bookingPeriod, DiscountRule discountRule) : base() { Customer = customer; Room = room; BookingPeriod = bookingPeriod; DiscountRule = discountRule; }
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); } }
public void CountDiscount() { DiscountList ds = new DiscountList(); DRule = new DiscountRule { Line = _lines, Discountlist = ds.AllDiscount.ToList() }; DRule.ApplyDiscountRule(); }
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); }
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>"); }
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); }
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 })); }
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); } }
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); } } }
//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); }
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)); }
public Discount(decimal value, DiscountRule rule) { Value = value; Rule = rule; }
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()); }
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 }
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); }
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; }