public ITransaction CreateTransaction(DateTime date, int transactionCategory, Guid buyerId, Guid sellerId, IOffer offer, double transactionPrice, ITransactionType transactionType, byte evaluation, IEmailSender emailSender) { ITransaction transaction = new Transaction(date, transactionCategory, null, null, transactionPrice, null, evaluation, 0); transaction.Buyer = ClientManager.GetClientById(buyerId); transaction.Seller = ClientManager.GetClientById(sellerId); transaction.TransactionPrice = offer.OfferPrice + offer.TransportPrice; double discount = offer.CheckDiscount(DateTime.Now); transaction.Discount = discount; IAccount accountWithEnoughMoney = null; foreach (IAccount account in transaction.Buyer.Accounts) { if (account.Amount > transaction.TransactionPrice) { accountWithEnoughMoney = account; break; } } transaction.TransactionEvaluation = evaluation; if (accountWithEnoughMoney != null) { if (transactionType is WithoutInstalmentsTransactionType) { accountWithEnoughMoney.Amount -= transaction.TransactionPrice * (1 - transaction.Discount); transaction.TransactionCategory = 0; transaction.Buyer.Transactions.Add(transaction); transaction.TransactionCategory = 1; transaction.Seller.Transactions.Add(transaction); TransactionList.AddTransaction(transaction); emailSender.SendEmail("Transaction was sucessfull", transaction.Buyer.Email); } else if (transactionType is InstalmentsTransactionType) { accountWithEnoughMoney.Amount -= ((InstalmentsTransactionType)transactionType).InstalmentPrice * transaction.Discount; transaction.TransactionCategory = 0; transaction.Buyer.Transactions.Add(transaction); transaction.TransactionCategory = 1; transaction.Seller.Transactions.Add(transaction); TransactionList.AddTransaction(transaction); emailSender.SendEmail("Transaction was sucessfull", transaction.Buyer.Email); } } else { emailSender.SendEmail("On your accounts there is not enough money", transaction.Buyer.Email); return(null); } return(transaction); }