public OrdersController(CategoryRepository categoryRepository,
     UserRepository userRepository, SubcategoryRepository subcategoryRepository,
     OrdersRepository ordersRepository, AssetRepository assetRepository, TaskRepository taskRepository,
     ReviewRepository reviewRepository, UserService userService,
     UserResponseHistoryRepository userResponseHistoryRepository,
     ViewCounterService viewCounterService,
     BillingService billingService, GigbucketDbContext dbContext)
 {
     _categoryRepository = categoryRepository;
     _userRepository = userRepository;
     _subcategoryRepository = subcategoryRepository;
     _ordersRepository = ordersRepository;
     _assetRepository = assetRepository;
     _taskRepository = taskRepository;
     _reviewRepository = reviewRepository;
     _userService = userService;
     _userResponseHistoryRepository = userResponseHistoryRepository;
     _viewCounterService = viewCounterService;
     _billingService = billingService;
     _dbContext = dbContext;
 }
        /// <summary>
        /// Updates A User Order Item
        /// Level: Logic
        /// </summary>
        /// <param name="OrderID">The order id</param>
        /// <param name="ProductID">The product id</param>
        /// <param name="NewQuantity">The new quantity</param>
        /// <returns>True if successful false if not</returns>
        public bool UpdateUserOrderItem(Guid OrderID, Guid ProductID, int NewQuantity)
        {
            DbTransaction myTransaction = null;
            OrdersRepository myRepository = new OrdersRepository();

            myRepository.Entities.Connection.Open();

            using (myTransaction = myRepository.Entities.Connection.BeginTransaction())
            {
                try
                {
                    bool Result = myRepository.UpdateUserOrderItem(OrderID, ProductID, NewQuantity);

                    if (Result == true)
                    {
                        myTransaction.Commit();

                        myRepository.Entities.Connection.Close();

                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                catch (Exception Exception)
                {
                    if (myTransaction != null)
                    {
                        myTransaction.Rollback();
                    }

                    if (myRepository != null)
                    {
                        myRepository.Entities.Connection.Close();
                    }

                    throw Exception;
                }
            }

            //return new OrdersRepository().UpdateUserOrderItem(OrderID, ProductID, NewQuantity);
        }
        /// <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;
                }
            }
        }
        /// <summary>
        /// Removes a user order item
        /// Level: Logic
        /// </summary>
        /// <param name="OrderID">The Order ID</param>
        /// <param name="ProductID">The Product ID</param>
        public void RemoveUserOrderItem(Guid OrderID, Guid ProductID)
        {
            DbTransaction myTransaction = null;
            OrdersRepository myRepository = new OrdersRepository();

            myRepository.Entities.Connection.Open();

            using (myTransaction = myRepository.Entities.Connection.BeginTransaction())
            {
                try
                {
                    myRepository.RemoveUserOrderItem(OrderID, ProductID);

                    myTransaction.Commit();

                    myRepository.Entities.Connection.Close();
                }
                catch (Exception Exception)
                {
                    if (myTransaction != null)
                    {
                        myTransaction.Rollback();
                    }

                    if (myRepository != null)
                    {
                        myRepository.Entities.Connection.Close();
                    }

                    throw Exception;
                }
            }

            //new OrdersRepository().RemoveUserOrderItem(OrderID, ProductID);
        }