/// <summary> /// Adds an Order /// Level: Logic /// </summary> /// <param name="SupplierFK">Supplier ID</param> /// <param name="UserFK">User ID</param> /// <param name="myOrderItems">Collection of Order Items</param> /// <returns>True if successful false if not successful</returns> public bool AddOrder(int?SupplierFK, Guid?UserFK, string CreditCard, List <OrderItem> myOrderItems) { DbTransaction myTransaction = null; OrdersRepository myRepository = new OrdersRepository(); myRepository.Entities.Connection.Open(); using (myTransaction = myRepository.Entities.Connection.BeginTransaction()) { try { Order myOrder = new Order(); myOrder.Id = Guid.NewGuid(); myOrder.OrderDate = DateTime.Now; myOrder.OrderStatusFK = myRepository.RetrieveStatusByName("Ordered").Id; myOrder.UserFK = UserFK; myOrder.SupplierFK = SupplierFK; myRepository.AddOrder(myOrder); if (SupplierFK != null) { myRepository.AddOrderItems(myOrder.Id, myOrderItems); myTransaction.Commit(); myRepository.Entities.Connection.Close(); return(true); } else { if (myRepository.AddUserOrderItems(myOrder.Id, myOrderItems)) // if mismatch occurs for quantity rollback { myTransaction.Rollback(); myRepository.Entities.Connection.Close(); return(false); } else //else commit changes { myTransaction.Commit(); new UsersLogic().InsertCreditCardNumber(CreditCard, Guid.Parse(UserFK.ToString())); new ShoppingCartLogic().EmptyCart(Guid.Parse(UserFK.ToString())); User myUser = new UsersRepository().RetrieveUserById(Guid.Parse(UserFK.ToString())); new Mailing().PurchaseMail(myUser.UserDetail.Username, myUser.Email, myOrder.Id.ToString(), "*****@*****.**"); myRepository.Entities.Connection.Close(); return(true); } } } catch (Exception Exception) { if (myTransaction != null) { myTransaction.Rollback(); } if (myRepository != null) { myRepository.Entities.Connection.Close(); } throw Exception; } } }