/// <summary>
        ///     Created by Michael Takrama
        ///     04/13/17
        ///
        ///     Processes Orders from the MVC Layer
        ///     William Flood
        ///     2017/04/29
        ///     Updated method to use cart from the database
        ///
        /// </summary>
        /// <param name="cart">Cart object containing OrderLine Items</param>
        /// <param name="shippingDetails">Contains shipping Details</param>
        public int ProcessOrder(ShippingDetails shippingDetails)
        {
            var user     = userManager.RetrieveUserByUserName(shippingDetails.IdentityUsername);
            var customer = customerManager.RetrieveCommercialCustomerByUserId(user.UserId);
            int orderId  = 0;

            try
            {
                var p = new ProductOrder
                {
                    CustomerId    = customer.UserId,
                    OrderTypeId   = "Commercial",
                    AddressType   = null,
                    OrderDate     = DateTime.Now,
                    Address1      = shippingDetails.Line1 + "," + shippingDetails.Line2,
                    City          = shippingDetails.City,
                    State         = shippingDetails.State,
                    Zip           = shippingDetails.Zip,
                    OrderStatusId = "Open",
                    HasArrived    = false,
                    Discount      = 0, // defaulted to 0 % until discount functionality added -- temporaire
                };

                orderId = ProductOrderAccessorMvc.CreateProductOrder(p);
            }
            catch (Exception e)
            {
                Debug.WriteLine(e.Message);
                throw new ApplicationException("CustomerOrderManager: " + e.Message);
            }



            return(orderId);
        }
        /// <summary>
        /// Created by Michael Takrama
        /// 04/15/17
        ///
        /// Logic to Apply for Commercial Account - MVC
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        public bool ApplyForCommercialAccount(RegisterCommercialViewModel user)
        {
            // App User Creation
            var userManager = new UserManager();

            try
            {
                var createdUserResult = userManager.CreateNewUser(user, user.Password, user.ConfirmPassword);

                if ("Created" != createdUserResult)
                {
                    throw new ApplicationException(createdUserResult);
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine("CustomerManager-ApplyForCommercialAccount: " + ex.Message);
                throw;
            }

            // Commercial Customer Creation
            User userData = null;

            try
            {
                userData = userManager.RetrieveUserByUserName(user.UserName);

                var cm = new CommercialCustomer
                {
                    UserId       = userData.UserId,
                    FederalTaxId = int.Parse(user.FederalTaxID),
                    ApprovedBy   = 0,
                    Active       = true
                };

                if (CreateCommercialAccount(cm))
                {
                    return(true);
                }

                //Commercial Customer Creation failed - delete created user
                if (1 == UserAccessor.DeleteUser(userData.UserId))
                {
                    throw new ApplicationException("Fatal Error Occured");
                }
            }
            catch (SqlException ex)
            {
                if (userData != null)
                {
                    UserAccessor.DeleteUser(userData.UserId);
                }

                Debug.WriteLine(ex.Message);

                throw new ApplicationException("Fatal Error Occured");
            }
            catch (Exception e)
            {
                Debug.WriteLine(e);
                throw;
            }

            return(false);
        }