コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }