Esempio n. 1
0
        private Order CreateClientOrder(Order basketOrder, IEnumerable <OrderPosition> orderPositions, DbTransaction dbTran)
        {
            // Создаём клиентский заказ
            var order = _orderProcessor.CreateClientOrder(basketOrder, orderPositions, dbTran);

            // Привязываем к новому заказу позиции из корзины
            var orderPositionsWithChildren = orderPositions
                                             .Union(
                orderPositions.SelectMany(op => op.ChildOrderPositions));

            foreach (var orderPosition in orderPositionsWithChildren)
            {
                _orderPositionProcessor.UpdateOrderPosition(orderPosition, order.Id, dbTran);
            }

            // Привязываем к новому заказу позиции ИМ-ов
            var positionIms = orderPositionsWithChildren
                              .Where(op => op.PositionIm != null)
                              .Select(op => op.PositionIm);

            foreach (var positionIm in positionIms)
            {
                // Меняем заказ и статус позиции ИМ-а на "Вёрстка"
                _positionImProcessor.UpdatePositionIm(positionIm, order.Id, maketStatusId: 3, dbTran);
            }

            var orderImTypeIds = positionIms
                                 .GroupBy(pims => pims.PositionImType.OrderImType.Id)
                                 .Select(g => g.Key)
                                 .ToList();

            foreach (var orderImTypeId in orderImTypeIds)
            {
                // Создаём ИМ нового заказа
                var orderIm = _orderImProcessor.CreateOrderIm(order.Id, orderImTypeId,
                                                              _orderImProcessor.ProcessOrderImStatus, dbTran);

                // Если ИМ заказа корзины больше не нужен - удаляем его
                var basketOrderIm = _orderImProcessor.GetOrderIm(basketOrder.Id, orderImTypeId);
                if (_orderImProcessor.NeedDeleteOrderIm(basketOrderIm))
                {
                    _orderImProcessor.DeleteOrderIm(basketOrderIm, dbTran);
                }
            }

            // Обновляем заказ-корзину
            _orderProcessor.UpdateOrder(basketOrder.Id, dbTran);

            return(order);
        }
Esempio n. 2
0
        public void UpdateFullOrderPosition(OrderPosition orderPosition, OrderPositionData opd, DbTransaction dbTran)
        {
            UpdateOrderPosition(orderPosition, opd, dbTran);

            // Если рубрика не задана - удаляем все позиции рубрик
            if (opd.RubricData == null || opd.RubricData.Id == 0)
            {
                _rubricProcessor.DeleteRubricPositions(orderPosition.RubricPositions, dbTran);
            }
            else
            {
                _rubricProcessor.UpdateRubricPosition(orderPosition.Id, orderPosition.RubricPositions, opd.RubricData, dbTran);
            }

            // Если переданы есть пакетные позиции - вычисляем график на их основе
            if (opd.Childs.Any())
            {
                opd.GraphicsData = _graphicProcessor.GetPackageGraphicsData(opd);
            }

            _graphicProcessor.UpdateGraphicPositions(orderPosition.Id, orderPosition.GraphicPositions, opd.GraphicsData, dbTran);

            _positionImProcessor.UpdatePositionIm(orderPosition.PositionIm, opd, dbTran);
        }