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); } }
/// <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)); }