예제 #1
0
        public void CreateOrderPosition(OrderPositionData opd)
        {
            using (var сontextTransaction = _context.Database.BeginTransaction())
            {
                var dbTran = сontextTransaction.GetDbTransaction();

                // Получаем заказ-корзину
                var basketOrder = _orderProcessor.GetBasketOrder(opd.ClientLegalPersonId, opd.PriceId);

                // Если заказа-корзины не существует - создаём её
                if (basketOrder == null)
                {
                    basketOrder = _orderProcessor.CreateBasketOrder(opd, dbTran);
                }

                // Получааем скидку клиента
                var clientDiscount = _clientProcessor.GetDiscount(
                    opd.ClientLegalPersonId,
                    basketOrder.BusinessUnitId,
                    opd.SupplierId,
                    opd.FormatData.FormatTypeId);

                // Сохраняем позицию заказа
                int orderPositionId = _orderPositionProcessor.CreateFullOrderPosition(
                    basketOrder.BusinessUnitId, basketOrder.Id, null, clientDiscount, opd, dbTran);

                // Сохраняем пакетные позиции заказа
                foreach (var child in opd.Childs)
                {
                    _orderPositionProcessor.CreateFullOrderPosition(
                        basketOrder.BusinessUnitId, basketOrder.Id, orderPositionId, clientDiscount, child, dbTran);
                }

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

                _context.SaveChanges();
                dbTran.Commit();
            }
        }