コード例 #1
0
        /// <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;
                }
            }
        }