public virtual List <Message> UpdateOrderLine(Address address, Settings settings, Func <string, bool> confirm = null, string comment = null, bool edit = true) { var result = new List <Message>(); if (address == null) { OrderCount = null; return(result); } var order = Price.Order; if (OrderCount.GetValueOrDefault() > 0) { if (OrderLine == null) { if (order == null) { order = new Order(Price, address); Price.Order = order; address.Orders.Add(order); } OrderLine = new OrderLine(order, this, orderCount.Value); orderLine.Comment = comment; order.AddLine(OrderLine); } else { OrderLine.Count = OrderCount.Value; OrderLine.Comment = comment; order.UpdateStat(); } if (edit) { result.AddRange(OrderLine.EditValidate()); result.AddRange(EditValidate(address, settings)); } else { result = OrderLine.SaveValidate(confirmCallback: confirm); } OrderCount = OrderLine.Count; } if (OrderCount.GetValueOrDefault(0) == 0 && OrderLine != null) { if (address.RemoveLine(orderLine)) { Price.Order = null; } OrderLine = null; } return(result); }
private List <Message> EditValidate(Address address, Settings settings) { var result = new List <Message>(); if (OrderCount.GetValueOrDefault(0) == 0 || OrderLine == null) { return(result); } if (Junk) { result.Add( Message.Warning("Вы заказали препарат с ограниченным сроком годности\r\nили с повреждением вторичной упаковки.")); } if (address.Orders.Where(o => o.Frozen).SelectMany(o => o.Lines).Any(l => l.ProductId == ProductId)) { result.Add(Message.Warning("Товар присутствует в замороженных заказах.")); } if (settings.WarnIfOrderedYesterday && address.YesterdayOrderedProductIds != null && address.YesterdayOrderedProductIds.Contains(ProductId)) { result.Add(Message.Warning(Util.HumanizeDaysAgo(settings.CountDayForWarnOrdered))); } if (PrevOrderAvgCount != null && OrderCount > PrevOrderAvgCount * settings.OverCountWarningFactor) { result.Add(Message.Warning("Превышение среднего заказа!")); } if (PrevOrderAvgCost != null && Cost > PrevOrderAvgCost * (1 + settings.OverCostWarningPercent / 100)) { result.Add(Message.Warning("Превышение средней цены!")); } if (BuyingMatrixType == BuyingMatrixStatus.Denied) { result.Clear(); OrderLine.Count = 0; result.Add(Message.Warning("Препарат запрещен к заказу.")); } return(result); }