public Transaction Create(List <PurchaseOrderItemDTO> items, int userId) { double total = 0; var details = new List <TransactionDetail>(); foreach (var itemDTO in items) { var item = _itemRepository.Get(itemDTO.ItemId); var detail = new TransactionDetail { ItemId = itemDTO.ItemId, Quantity = itemDTO.Quantity, Price = item.Price, SubTotal = item.Price * itemDTO.Quantity }; total += detail.SubTotal; _transactionDetailRepository.Add(detail); _transactionDetailRepository.Commit(); details.Add(detail); //Update Item Quantity item.Quantity = item.Quantity - itemDTO.Quantity; _itemRepository.Edit(item); _itemRepository.Commit(); } var transaction = new Transaction { Details = details, OrderDate = DateTime.Now, Total = total, UserId = userId }; _transactionRepository.Add(transaction); _transactionRepository.Commit(); return(transaction); }
protected void ChangeState(TTransaction transaction, int state) { if (transaction.State == state) { return; } var oldState = transaction.State; lock (Lockers[typeof(TTransaction)]) { RollbackTransactionState(transaction, oldState); ValidateTransactionParticipant(transaction.SenderType, transaction.SenderId); ValidateTransactionParticipant(transaction.ReceiverType, transaction.ReceiverId); ValidateAmount(transaction.Amount); ValidateTransactionSubject(transaction.SubjectType, transaction.Subject); try { RollforwardTransactionState(transaction, state); } catch (Exception) { if (transaction.State == state) { RollbackTransactionState(transaction, state); } RollforwardTransactionState(transaction, oldState); throw; } _transactionRepository.Commit(transaction); } }
public virtual void SaveChanges() { _repository.Commit(); }