예제 #1
0
        public int CreateClientAccount(int[] orderPositionIds)
        {
            using (var сontextTransaction = _context.Database.BeginTransaction())
            {
                var dbTran = сontextTransaction.GetDbTransaction();

                // Создаём заказ
                var orderPositions = _orderPositionProcessor.GetInnerOperationsOrderPositionsByIds(orderPositionIds);
                var basketOrder    = _orderProcessor.GetOrderById(orderPositions.First().OrderId);
                var clientOrder    = CreateClientOrder(basketOrder, orderPositions, dbTran);

                // Создаём счёт
                var account = _clientAccountProcessor.CreateClientAccount(
                    clientOrder.SupplierLegalPersonId, clientOrder.Sum, basketOrder, dbTran);

                // Создаём позиции счёта
                foreach (var orderPosition in orderPositions)
                {
                    // Позиция счёта создаётся только на позицию заказа, не входящую в пакет
                    if (orderPosition.ParentOrderPositionId == null)
                    {
                        var packagePositions = orderPosition.ChildOrderPositions.ToList();
                        _clientAccountProcessor.CreateAccountPosition(account.Id, orderPosition, packagePositions, dbTran);
                    }
                }

                // Создаём настройки счёта
                _accountSettingsProcessor.CreateAccountSettings(account.Id, basketOrder.ClientLegalPerson.AccountSettings, dbTran);

                // Создаём связку счёт-заказ
                _clientAccountProcessor.CreateAccountOrder(account.Id, clientOrder.Id, dbTran);

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

                return(account.Id);
            }
        }
예제 #2
0
 /// <summary>
 /// Get the order by its id
 /// </summary>
 /// <param name="orderId">Order id to fetch</param>
 /// <returns>The order with the specified id, or null if no match is found</returns>
 public Order GetOrderById(int orderId)
 {
     return(_orderProcessor.GetOrderById(orderId));
 }