public ActionResult GetAddressPartial(int id)
        {
            string          userId      = User.Identity.GetUserId();
            ShoppingCart    sessionCart = GetCartFromSession(userId);
            CustomerAddress address     = new CustomerAddress();

            if (id == 0)
            {
                address = new CustomerAddress
                {
                    AddressCity       = sessionCart.Order.DeliveryAddressCity,
                    AddressLine1      = sessionCart.Order.DeliveryAddressLine1,
                    AddressLine2      = sessionCart.Order.DeliveryAddressLine2,
                    AddressLine3      = sessionCart.Order.DeliveryAddressLine3,
                    AddressLine4      = sessionCart.Order.DeliveryAddressLine3,
                    AddressName       = "Current",
                    AddressNumber     = 0,
                    AddressPostalCode = sessionCart.Order.DeliveryAddressPostalCode,
                    AddressSuburb     = sessionCart.Order.DeliveryAddressSuburb,
                    CustomerNumber    = userId
                };
            }
            using (FreeMarketEntities db = new FreeMarketEntities())
            {
                address = db.CustomerAddresses
                          .Where(c => c.CustomerNumber == userId && c.AddressNumber == id)
                          .FirstOrDefault();
            }

            SaveCartViewModel model = new SaveCartViewModel {
                Address = address, AddressName = address.AddressName
            };

            return(PartialView("_CartModifyDeliveryDetails", model));
        }
        public ActionResult SecureDeliveryDetails()
        {
            string       userId      = User.Identity.GetUserId();
            ShoppingCart sessionCart = GetCartFromSession(userId);

            sessionCart.Save();

            if (sessionCart.IsAllVirtualOrder())
            {
                using (FreeMarketEntities db = new FreeMarketEntities())
                {
                    OrderHeader order = db.OrderHeaders.Find(sessionCart.Order.OrderNumber);
                    if (order != null)
                    {
                        sessionCart.Order.DeliveryType = "Virtual";
                        sessionCart.Save();

                        return(RedirectToAction("ConfirmInvoice", "ShoppingCart"));
                    }
                }
            }

            //decimal localCourierCost = sessionCart.CalculateLocalCourierFee();
            decimal courierCost    = sessionCart.CalculateCourierFee();
            decimal postOfficeCost = sessionCart.CalculatePostalFee();

            SaveCartViewModel model = new SaveCartViewModel(userId, sessionCart.Order, courierCost, postOfficeCost);

            if (model == null)
            {
                return(RedirectToAction("Departments", "Product"));
            }

            return(View("CheckoutDeliveryDetails", model));
        }
        public ActionResult GetDeliveryOptions(string id, string selectedDeliveryType)
        {
            SaveCartViewModel model   = new SaveCartViewModel();
            DeliveryType      options = new DeliveryType();

            //postalcode
            if (!string.IsNullOrEmpty(id) && id.Length == 4)
            {
                try
                {
                    int.Parse(id);
                }
                catch (Exception e)
                {
                    return(null);
                }

                string       userId      = User.Identity.GetUserId();
                ShoppingCart sessionCart = GetCartFromSession(userId);

                decimal localCourierCost = sessionCart.CalculateLocalCourierFeeAdhoc(int.Parse(id));
                decimal courierCost      = sessionCart.CalculateCourierFeeAdhoc(int.Parse(id));
                decimal postOfficeCost   = sessionCart.CalculatePostalFee();

                options = new DeliveryType()
                {
                    SelectedDeliveryType = selectedDeliveryType,
                    //LocalCourierCost = localCourierCost,
                    CourierCost    = courierCost,
                    PostOfficeCost = postOfficeCost
                };

                model.DeliveryOptions = options;

                return(PartialView("_CartModifyDeliveryTypeDetails", model));
            }

            return(null);
        }
        public ActionResult UpdateDeliveryDetails(SaveCartViewModel model)
        {
            string           userId      = User.Identity.GetUserId();
            ShoppingCart     sessionCart = GetCartFromSession(userId);
            FreeMarketObject result;

            TimeSpan startTime = new TimeSpan(8, 0, 0);
            TimeSpan endTime   = new TimeSpan(17, 0, 0);

            if (model.DeliveryOptions == null || model.DeliveryOptions.SelectedDeliveryType == null)
            {
                ModelState.AddModelError("", "Please select a delivery option");
            }

            if (ModelState.IsValid)
            {
                if (!(model.prefDeliveryDateTime.Value.TimeOfDay > startTime &&
                      model.prefDeliveryDateTime.Value.TimeOfDay < endTime &&
                      model.prefDeliveryDateTime.Value > DateTime.Today &&
                      (model.prefDeliveryDateTime.Value.DayOfWeek == DayOfWeek.Monday ||
                       model.prefDeliveryDateTime.Value.DayOfWeek == DayOfWeek.Tuesday ||
                       model.prefDeliveryDateTime.Value.DayOfWeek == DayOfWeek.Wednesday ||
                       model.prefDeliveryDateTime.Value.DayOfWeek == DayOfWeek.Thursday ||
                       model.prefDeliveryDateTime.Value.DayOfWeek == DayOfWeek.Friday)))
                {
                    model.SetAddressNameOptions(userId, model.SelectedAddress);

                    return(View("CheckoutDeliveryDetails", model));
                }

                sessionCart.UpdateDeliveryDetails(model);
                result = new FreeMarketObject {
                    Result = FreeMarketResult.NoResult
                };
                if (model.AddressName != "Current")
                {
                    result = CustomerAddress.AddOrUpdateAddress(model, userId);
                }

                AuditUser.LogAudit(27, string.Format("Order Number: {0}", sessionCart.Order.OrderNumber), User.Identity.GetUserId());

                if (result.Result == FreeMarketResult.Success)
                {
                    TempData["message"] = result.Message;
                }
                else
                {
                    TempData["errorMessage"] = result.Message;
                }

                if (Request.IsAjaxRequest())
                {
                    return(JavaScript("window.location.reload();"));
                }
                else
                {
                    return(RedirectToAction("ChoosePaymentOption", "ShoppingCart"));
                }
            }

            model.SetAddressNameOptions(userId, model.SelectedAddress);

            decimal localCourierCost = sessionCart.CalculateLocalCourierFeeAdhoc(int.Parse(model.Address.AddressPostalCode));
            decimal courierCost      = sessionCart.CalculateCourierFeeAdhoc(int.Parse(model.Address.AddressPostalCode));
            decimal postOfficeCost   = sessionCart.CalculatePostalFee();

            model.SetDeliveryOptions(sessionCart.Order, /*localCourierCost,*/ courierCost, postOfficeCost);
            model.SetTextBlocks();

            if (Request.IsAjaxRequest())
            {
                return(PartialView("_SaveCartModal", model));
            }
            else
            {
                return(View("CheckoutDeliveryDetails", model));
            }
        }