/// <summary> /// Устанавливает основание скидки с введенными значениями в рублях или процентах для всего заказа /// </summary> /// <param name="reason">Основание скидки</param> /// <param name="discount">Скидки</param> /// <param name="unit">Скидка в процентах или рублях</param> /// <param name="orderItems">Список строк заказа</param> public void SetCustomDiscountForOrder(DiscountReason reason, decimal discount, DiscountUnits unit, IList <OrderItem> orderItems) { foreach (var item in orderItems) { SetCustomDiscountForOrderItem(reason, discount, unit, item); } }
public bool Edit(DiscountReason obj) { Connect(); SqlCommand cmd = new SqlCommand("IUDiscountReason", con); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@HospitalID", HospitalID); cmd.Parameters.AddWithValue("@LocationID", LocationID); cmd.Parameters.AddWithValue("@DiscountReasonID", obj.DiscountReasonID); cmd.Parameters.AddWithValue("@DiscountReason", obj.DiscountReasonName.ToUpper()); cmd.Parameters.AddWithValue("@CreationID", UserID); cmd.Parameters.AddWithValue("@Mode", "Edit"); con.Open(); int i = cmd.ExecuteNonQuery(); con.Close(); if (i > 0) { return(true); } else { return(false); } }
public string save(DiscountReason obj) { Connect(); try { SqlCommand cmd = new SqlCommand("IUDiscountReason", con); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@HospitalID", HospitalID); cmd.Parameters.AddWithValue("@LocationID", LocationID); if (obj.DiscountReasonID == 0) { cmd.Parameters.AddWithValue("@Mode", "Add"); } else { cmd.Parameters.AddWithValue("@Mode", "Edit"); } cmd.Parameters.AddWithValue("@DiscountReasonID", obj.DiscountReasonID); cmd.Parameters.AddWithValue("@DiscountReason", obj.DiscountReasonName); cmd.Parameters.AddWithValue("@CreationID", UserID); con.Open(); int i = cmd.ExecuteNonQuery(); con.Close(); if (i > 0) { obj.Message = "Save Successfully"; } } catch (Exception ex) { obj.Message = ex.Message; } return(obj.Message); }
/// <summary> /// Установка определенной скидки на строку заказа с прикреплением указанного основания скидки, /// после проверки возможности этого действия /// </summary> /// <param name="reason">Основание скидки</param> /// <param name="discount">Скидка</param> /// <param name="unit">Скидка в процентах или рублях</param> /// <param name="orderItem">Строка заказа</param> private void SetCustomDiscountForOrderItem(DiscountReason reason, decimal discount, DiscountUnits unit, OrderItem orderItem) { if (!CanSetDiscount(reason, orderItem)) { return; } SetCustomDiscount(reason, discount, unit, orderItem); }
/// <summary> /// Установка скидки исходя из выбранного основания скидки для строки счета без отгрузки на предоплату /// </summary> /// <param name="reason">Основание скидки</param> /// <param name="orderItem">Строка счета без отгрузки на предоплату</param> public void SetDiscountFromDiscountReasonForOrderItemWithoutShipment( DiscountReason reason, OrderWithoutShipmentForAdvancePaymentItem orderItem) { if (!CanSetDiscountForOrderWithoutShipment(reason, orderItem)) { return; } SetDiscount(reason, orderItem); }
public bool ExistsActiveDiscountReasonWithName( IUnitOfWork uow, int discountReasonId, string name, out DiscountReason discountReason) { discountReason = uow.Session.QueryOver <DiscountReason>() .Where(dr => !dr.IsArchive) .And(dr => dr.Id != discountReasonId) .And(dr => dr.Name == name) .SingleOrDefault(); return(discountReason != null); }
/// <summary> /// Проверка применимости скидки к номенклатуре, т.е. если выбранное основание скидки содержит номенклатуру, /// которая указана в основании скидки, либо основание содержит категорию номенклатуры, либо основание содержит товарную группу /// с такой номенклатурой, то возвращаем true /// </summary> /// <param name="reason">Основание скидки</param> /// <param name="nomenclature">Номенклатура</param> /// <returns>true/false</returns> /// <exception cref="ArgumentNullException">Кидаем ошибку, если основание скидки null</exception> public bool IsApplicableDiscount(DiscountReason reason, Nomenclature nomenclature) { if (reason == null) { throw new ArgumentNullException(nameof(reason)); } return(ContainsNomenclature(nomenclature.Id, reason.Nomenclatures) || ContainsNomenclatureCategory(nomenclature.Category, reason.NomenclatureCategories) || ContainsProductGroup(nomenclature.ProductGroup, reason.ProductGroups)); }
public void Check_Perscnt_Discount_For_OrderItems() { // arrange Order testOrder = CreateTestOrderWithOrderItems(); testOrder.ObservableOrderItems.ListContentChanged -= testOrder.ObservableOrderItems_ListContentChanged; DiscountReason discountReason = Substitute.For <DiscountReason>(); // act testOrder.SetDiscount(discountReason, 20m, DiscountUnits.percent); // assert Assert.AreEqual(400m, testOrder.OrderItems[0].DiscountMoney); Assert.AreEqual(100m, testOrder.OrderItems[1].DiscountMoney); }
/// <summary> /// Установка скидки исходя из выбранного основания скидки для всего заказа /// </summary> /// <param name="reason">Основание скидки</param> /// <param name="orderItems">Список строк заказа</param> /// <param name="canChangeDiscountValue">Может ли пользователь менять скидку</param> /// <param name="messages">Описание позиций на которые не применилась скидка</param> public void SetDiscountFromDiscountReasonForOrder( DiscountReason reason, IList <OrderItem> orderItems, bool canChangeDiscountValue, out string messages) { messages = null; for (var i = 0; i < orderItems.Count; i++) { SetDiscountFromDiscountReasonForOrderItem(reason, orderItems[i], canChangeDiscountValue, out string message); if (message != null) { messages += $"№{i + 1} {message}"; } } }
public void Check_Money_Discount_For_OrderItems() { // arrange Order testOrder = CreateTestOrderWithOrderItems(); testOrder.ObservableOrderItems.ListContentChanged -= testOrder.ObservableOrderItems_ListContentChanged; testOrder.OrderItems.ToList().ForEach(x => x.IsDiscountInMoney = true); //FIXME : костыль из-за метода Order.CalculateAndSetDiscount() DiscountReason discountReason = Substitute.For <DiscountReason>(); // act testOrder.SetDiscount(discountReason, 500m, DiscountUnits.money); // assert Assert.AreEqual(400m, testOrder.OrderItems[0].DiscountMoney); Assert.AreEqual(100m, testOrder.OrderItems[1].DiscountMoney); }
public void SetDiscountByStockTest_Where_DiscountInMoney_is_false(decimal discountMoney, decimal discountPercent, decimal existingDiscountByStock, decimal discountForAdd, decimal result) { // arrange DiscountReason discountReason = Substitute.For <DiscountReason>(); OrderItem testedOrderItem = new OrderItem(); testedOrderItem.Price = 50; testedOrderItem.Count = 20; testedOrderItem.DiscountByStock = existingDiscountByStock; testedOrderItem.Discount = discountPercent; testedOrderItem.DiscountMoney = discountMoney; testedOrderItem.IsDiscountInMoney = false; // act testedOrderItem.SetDiscountByStock(discountReason, discountForAdd); // assert Assert.That(decimal.Round(testedOrderItem.Discount, 2), Is.EqualTo(result)); }
/// <summary> /// Установка скидки исходя из выбранного основания скидки для строки заказа /// </summary> /// <param name="reason">Основание скидки</param> /// <param name="orderItem">Строка заказа</param> /// <param name="canChangeDiscountValue">Может ли пользователь менять скидку</param> /// <param name="message">Описание позици на которую не применилась скидка</param> /// <returns>true/false - установилась скидка или нет</returns> public bool SetDiscountFromDiscountReasonForOrderItem( DiscountReason reason, OrderItem orderItem, bool canChangeDiscountValue, out string message) { message = null; if (!CanSetDiscount(reason, orderItem)) { return(false); } if (!canChangeDiscountValue && OrderItemContainsPromoSetOrFixedPrice(orderItem)) { message = $"{orderItem.Nomenclature.Name}\n"; return(false); } SetDiscount(reason, orderItem); return(true); }
public ActionResult DiscountReason(DiscountReason obj) { KeystoneProject.Buisness_Logic.Master.BL_DiscountReason objBlDiscount = new Buisness_Logic.Master.BL_DiscountReason(); if (objBlDiscount.CheckDiscountReason(obj.DiscountReasonID, obj.DiscountReasonName)) { if (obj.DiscountReasonID > 0) { objBlDiscount.save(obj); ViewData["msg"] = obj.Message; ModelState.Clear(); TempData["Msg"] = " Discount Reason Updated Successfully"; return(RedirectToAction("DiscountReason", "DiscountReason")); } else { objBlDiscount.save(obj); ViewData["msg"] = obj.Message; ModelState.Clear(); TempData["Msg"] = " Discount Reason Saved Successfully"; return(RedirectToAction("DiscountReason", "DiscountReason")); } //return RedirectToAction("ShowDiscountReason", "DiscountReason"); } else { TempData["Msg"] = " Discount Reason Already Exist's"; return(RedirectToAction("DiscountReason", "DiscountReason")); } obj.storeAllDiscount = objBlDiscount.SelectAllData(); // return RedirectToAction("DiscountReason", "DiscountReason"); return(View(obj)); }
/// <summary> /// Установка определенной скидки на строку заказа с прикреплением указанного основания скидки /// </summary> /// <param name="reason">Основание скидки</param> /// <param name="discount">Скидка</param> /// <param name="unit">Скидка в процентах или рублях</param> /// <param name="orderItem">Строка заказа</param> private void SetCustomDiscount(DiscountReason reason, decimal discount, DiscountUnits unit, OrderItem orderItem) { orderItem.IsDiscountInMoney = unit == DiscountUnits.money; orderItem.DiscountSetter = discount; orderItem.DiscountReason = reason; }
/// <summary> /// Установка скидки из основания скидки на конкретную позицию /// </summary> /// <param name="reason">Основание скидки</param> /// <param name="item">Элемент, к которому применяется скидка</param> private void SetDiscount(DiscountReason reason, IDiscount item) { item.IsDiscountInMoney = reason.ValueType == DiscountUnits.money; item.DiscountSetter = reason.Value; item.DiscountReason = reason; }
/// <summary> /// Возможность установки скидки на строку счета без отгрузки на предоплату /// </summary> /// <param name="reason">Основание скидки</param> /// <param name="orderItem">Строка счета без отгрузки на предоплату</param> /// <returns>true/false</returns> private bool CanSetDiscountForOrderWithoutShipment(DiscountReason reason, OrderWithoutShipmentForAdvancePaymentItem orderItem) => IsApplicableDiscount(reason, orderItem.Nomenclature) && orderItem.Price * orderItem.Count != default(decimal);
/// <summary> /// Возможность установки скидки на строку заказа /// </summary> /// <param name="reason">Основание скидки</param> /// <param name="orderItem">Строка заказа</param> /// <returns>true/false</returns> private bool CanSetDiscount(DiscountReason reason, OrderItem orderItem) => IsApplicableDiscount(reason, orderItem.Nomenclature) && orderItem.Price * orderItem.CurrentCount != default(decimal);