コード例 #1
0
        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);
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
 public virtual void SaveChanges()
 {
     _repository.Commit();
 }