public ActionResult AddToCart(string id)
        {
            DAL.RestaurantMenu    restaurantMenu = menuModel.find(int.Parse(DataSecurityTripleDES.GetPlainText(id)));
            RestaurantMenuCartDTO thisMenuDTO    = EntityDTOHelper.GetEntityDTO <RestaurantMenu, RestaurantMenuCartDTO>(restaurantMenu);

            DAL.Restaurant restaurant = db.Restaurant.Find(restaurantMenu.OwnerId);

            thisMenuDTO.ServiceOwnerName = restaurant.Name;
            thisMenuDTO.ServiceOwnerId   = DataSecurityTripleDES.GetEncryptedText(restaurant.Id);
            thisMenuDTO.ServiceOwnerType = DataSecurityTripleDES.GetEncryptedText((int)OwnerTypeEnum.ServiceProvider);

            DAL.Address address = db.Address.Find(restaurant.AddressId);
            if (address != null)
            {
                AddressDTO addressDTO = EntityDTOHelper.GetEntityDTO <DAL.Address, AddressDTO>(address);
                thisMenuDTO.ServiceOwnerAddressDetail = addressDTO.GetAddressString(true);
            }

            if (thisMenuDTO != null)
            {
                thisMenuDTO.Quantity = 1;

                CraveatsCart craveatsCart = (Session["cart"] == null) ? new CraveatsCart(SessionManager.GetContextSessionLoggedUserID()) : (Session["cart"] as CraveatsCart);
                craveatsCart.AddToCart(thisMenuDTO);

                Session["cart"] = craveatsCart;
            }

            return(RedirectToAction("Index"));
        }
        public ActionResult Create([Bind(Include = "Name, Detail, ContactNumber, EmailAddress")] Restaurant restaurant)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    db.Restaurant.Add(restaurant);
                    db.SaveChanges();

                    restaurant.DateAdded = DateTime.Now;
                    db.SaveChanges();

                    restaurant.ServiceProviderStatus = (int?)Common.ServiceProviderStatusEnum.Inactive;
                    restaurant.PartnerUserId         = int.Parse(DataSecurityTripleDES.GetPlainText(SessionManager.GetContextSessionLoggedUserID()));
                    restaurant.LastUpdated           = DateTime.Now;
                    db.SaveChanges();

                    return(RedirectToAction("AddAddress", "Profile", new
                    {
                        ownerType = DataSecurityTripleDES.GetEncryptedText((int)Common.OwnerTypeEnum.ServiceProvider),
                        ownerId = DataSecurityTripleDES.GetEncryptedText(restaurant.Id)
                    }));
                }
            }
            catch (RetryLimitExceededException /* dex */)
            {
                //Log the error (uncomment dex variable name and add a line here to write a log.
                ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists see your system administrator.");
            }
            return(View(restaurant));
        }
Exemple #3
0
        public ActionResult PartnerRestaurant(PartnerRestaurantViewModel model)
        {
            if (Session != null && Session.Contents != null)
            {
                AuthenticatedUserInfo authenticatedUserInfo = Session["loggeduser"] as AuthenticatedUserInfo;

                if (authenticatedUserInfo != null)
                {
                    UserDTO userDTO = EntityDTOHelper.GetEntityDTO <DAL.User, UserDTO>(new CEUserManager().FindById(
                                                                                           int.Parse(DataSecurityTripleDES.GetPlainText(authenticatedUserInfo.UserId))));

                    PartnerRestaurantViewModel partnerRestaurantViewModel = null;

                    if (((Common.UserTypeEnum)userDTO.UserTypeFlag).HasFlag(Common.UserTypeEnum.PartnerRestaurant))
                    {
                        partnerRestaurantViewModel = new PartnerRestaurantViewModel()
                        {
                            Id            = userDTO.Id,
                            ContactNumber = userDTO.ContactNumber,
                            Email         = userDTO.EmailAddress,
                            FirstName     = userDTO.FirstName,
                            Surname       = userDTO.Surname,
                            Role          = Common.UserTypeEnum.PartnerRestaurant.GetDescription()
                        };
                    }

                    if ((userDTO.AddressId ?? "").Length > 0)
                    {
                        DataProvider dataProvider = new DataProvider();

                        DAL.Address anAddress = dataProvider.FindAddressById(
                            int.Parse(DataSecurityTripleDES.GetPlainText(userDTO.AddressId)));

                        AddressViewModel addressViewModel = EntityDTOHelper.GetEntityDTO <DAL.Address, AddressViewModel>(anAddress);

                        if (anAddress != null)
                        {
                            DAL.Region region = dataProvider.FindRegionById(anAddress.RegionId ?? 0);

                            if (region != null)
                            {
                                addressViewModel.RegionAlias = region.RegionAlias;
                                addressViewModel.RegionId    = DataSecurityTripleDES.GetEncryptedText(region.Id);
                            }

                            partnerRestaurantViewModel.Addresses = new List <AddressViewModel>()
                            {
                                addressViewModel
                            };
                        }
                    }

                    return(View("PartnerRestaurant", partnerRestaurantViewModel));
                }
            }

            return(View("Error"));
        }
        public ActionResult ForgotPassword(ForgotPasswordViewModel model)
        {
            SessionManager.RegisterSessionActivity();

            if (ModelState.IsValid)
            {
                User          anActiveOrBlockedUser = null;
                CEUserManager ceUserManager         = new CEUserManager();
                anActiveOrBlockedUser = ceUserManager.GetSigningUserByEmail(model.Email);

                if (anActiveOrBlockedUser == null)
                {
                    // Don't reveal that the user does not exist or is not confirmed
                    return(View("ForgotPasswordConfirmation"));
                }

                // For more information on how to enable account confirmation and password reset please visit https://go.microsoft.com/fwlink/?LinkID=320771
                // Send an email with this link
                string longTicks = DateTime.Now.Ticks.ToString(),
                       code      = DataSecurityTripleDES.GetEncryptedText(longTicks);

                using (CraveatsDbContext craveatsDbContext = new CraveatsDbContext())
                {
                    User anUser = craveatsDbContext.User.First(u => u.Id == anActiveOrBlockedUser.Id);

                    anUser.ResetCode       = longTicks;
                    anUser.ResetCodeExpiry = DateTime.Now.AddDays(1);
                    anUser.ResetCodeSentAt = DateTime.Now;

                    anUser.LastUpdated = DateTime.Now;

                    craveatsDbContext.SaveChanges();
                }

                var callbackUrl = Url.Action("ResetPassword", "Login", new { userId = DataSecurityTripleDES.GetEncryptedText(anActiveOrBlockedUser.Id), code = code }, protocol: Request.Url.Scheme);

                StringBuilder sbSubject   = new StringBuilder("Craveats reset password request"),
                              sbEmailBody = new StringBuilder("<p>Dear [FullName],</p><p>We have received a request that you would like to reset your account password with us." +
                                                              "Please reset your password by clicking <a href=\"" + callbackUrl + "\">here</a></p><p>Thank you.</p><p>Craveats</p>");

                CommunicationServiceProvider.SendOutgoingNotification(
                    new MailAddress(
                        anActiveOrBlockedUser.EmailAddress,
                        string.Format("{0}{1}{2}", anActiveOrBlockedUser?.FirstName, " ", anActiveOrBlockedUser?.Surname).Trim()),
                    sbSubject.ToString(),
                    sbEmailBody.Replace("[FullName]",
                                        string.Format("{0}{1}{2}", anActiveOrBlockedUser?.FirstName, " ", anActiveOrBlockedUser?.Surname).Trim()).ToString());

                return(RedirectToAction("ForgotPasswordConfirmation", "Login"));
            }

            // If we got this far, something failed, redisplay form
            return(View(model));
        }
Exemple #5
0
        public ActionResult EditAddress(AddressViewModel model, string returnUrl)
        {
            SessionManager.RegisterSessionActivity();

            IEnumerable <string> regionAliases = GetAllRegionAliases();

            model.RegionAliases = GenUtil.GetSelectListItems(regionAliases);

            if (ModelState.IsValid)
            {
                DataProvider dataProvider = new DataProvider();

                DAL.Address address = dataProvider.FindAddressById(
                    int.Parse(DataSecurityTripleDES.GetPlainText(model.Id)));

                if (address != null)
                {
                    AddressDTO addressDTO = new AddressDTO()
                    {
                        Id          = model.Id,
                        City        = model.City,
                        Line1       = model.Line1,
                        Line2       = model.Line2,
                        Postcode    = model.Postcode,
                        RegionAlias = model.RegionAlias
                    };

                    using (DAL.CraveatsDbContext c = new DAL.CraveatsDbContext())
                    {
                        addressDTO.RegionId = DataSecurityTripleDES.GetEncryptedText(
                            c.Region.FirstOrDefault(r => r.CountryISO2 == "CA" &&
                                                    r.RegionAlias == addressDTO.RegionAlias).Id);

                        addressDTO.CountryId = DataSecurityTripleDES.GetEncryptedText(
                            c.Country.FirstOrDefault(s => s.ISO2 == "CA").Id);

                        address = c.Address.FirstOrDefault(u => u.Id == address.Id);
                        address = EntityDTOHelper.MapToEntity <AddressDTO, DAL.Address>(addressDTO, address);

                        c.SaveChanges();

                        return(RedirectToAction("ProfileView"));
                    }
                }
            }

            // Something is not right - so render the registration page again,
            // keeping the data user has entered by supplying the model.
            return(View("EditAddress", model));
        }
        // GET: RestaurantMenu/Create
        public ActionResult Create(string ownerType = null, string ownerId = null)
        {
            if (ownerType != null && ownerId != null)
            {
                ViewBag.ownerType = ownerType;
                ViewBag.ownerId   = ownerId;
            }
            else
            {
                ownerType = DataSecurityTripleDES.GetEncryptedText((int)SessionManager.GetContextSessionOwnerType());
                ownerId   = SessionManager.GetContextSessionLoggedUserID();

                ViewBag.ownerType = ownerType;
                ViewBag.ownerId   = ownerId;
            }
            return(View());
        }
 public ActionResult Delete(string id, string ownerType = null, string ownerId = null)
 {
     try
     {
         RestaurantMenu restaurantMenu = db.RestaurantMenu.Find(int.Parse(DataSecurityTripleDES.GetPlainText(id)));
         db.RestaurantMenu.Remove(restaurantMenu);
         db.SaveChanges();
     }
     catch (RetryLimitExceededException /* dex */)
     {
         //Log the error (uncomment dex variable name and add a line here to write a log.
         return(RedirectToAction("Delete", new {
             id = DataSecurityTripleDES.GetEncryptedText(id),
             saveChangesError = true,
             ownerType = ownerType,
             ownerId = ownerId
         }));
     }
     return(RedirectToAction("Index", new { ownerType = ownerType, ownerId = ownerId }));
 }
        public void Index()
        {
            string org1 = "1", org2 = "one", org3 = "this is some data";

            byte[] key = null, iv = null;

            Assert.AreEqual(org1, DataSecurityTripleDES.GetPlainText(
                                DataSecurityTripleDES.GetEncryptedText(org1 /*, out key, out iv*/) /*, key, iv*/));
            Assert.AreEqual(org2, DataSecurityTripleDES.GetPlainText(
                                DataSecurityTripleDES.GetEncryptedText(org2 /*, out key, out iv*/) /*, key, iv*/));
            Assert.AreEqual(org3, DataSecurityTripleDES.GetPlainText(
                                DataSecurityTripleDES.GetEncryptedText(org3 /*, out key, out iv*/) /*, key, iv*/));

            // Arrange
            HomeController controller = new HomeController();

            // Act
            ViewResult result = controller.Index() as ViewResult;

            // Assert
            Assert.IsNotNull(result);
        }
Exemple #9
0
        public static string GetContextSessionID()
        {
            object xLock  = new object();
            int?   UserId = (int?)int.Parse(DataSecurityTripleDES.GetPlainText(GetContextSessionLoggedUserID()));

            lock (xLock)
            {
                string SessionID = HttpContext.Current.Session.SessionID,
                       IPAddress = (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] ?? string.Empty).Trim() == string.Empty
                ? HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]?.Trim()
                : HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]?.Trim();

                SessionTracking result = null;


                using (CraveatsDbContext craveatsDbContext = new CraveatsDbContext())
                {
                    result = craveatsDbContext.SessionTracking.FirstOrDefault(u => u.IPAddress == IPAddress && u.SessionID == SessionID && u.UserId == UserId);
                }

                return(DataSecurityTripleDES.GetEncryptedText(result?.Id ?? 0));
            }
        }
        // GET: RestaurantMenu
        public ViewResult Index(

            string ownerType, string ownerId,
            string sortOrder, string currentFilter, string searchString, int?page)
        {
            if (ownerType != null && ownerId != null)
            {
                ViewBag.ownerType = ownerType;
                ViewBag.ownerId   = ownerId;
            }
            else
            {
                ownerType = DataSecurityTripleDES.GetEncryptedText((int)SessionManager.GetContextSessionOwnerType());
                ownerId   = SessionManager.GetContextSessionLoggedUserID();

                ViewBag.ownerType = ownerType;
                ViewBag.ownerId   = ownerId;
            }


            ViewBag.CurrentSort = sortOrder;

            ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";
            ViewBag.DateSortParm = sortOrder == "Date" ? "date_desc" : "Date";

            if (searchString != null)
            {
                page = 1;
            }
            else
            {
                searchString = currentFilter;
            }

            ViewBag.CurrentFilter = searchString;

            int?filterId        = int.Parse(DataSecurityTripleDES.GetPlainText(ownerId));
            var RestaurantMenus = SessionManager.GetContextSessionOwnerType() == UserTypeEnum.PartnerRestaurant
                ? from s in db.RestaurantMenu
                                  where s.OwnerId == filterId && s.OwnerType == 2 && s.ServiceStatus == 1
                                  select s
                : from s in db.RestaurantMenu
                                  select s;

            if (!String.IsNullOrEmpty(searchString))
            {
                RestaurantMenus = RestaurantMenus.Where(s => s.Name.Contains(searchString) ||
                                                        s.Detail.Contains(searchString));
            }
            switch (sortOrder)
            {
            case "name_desc":
                RestaurantMenus = RestaurantMenus.OrderByDescending(s => s.Name);
                break;

            case "Date":
                RestaurantMenus = RestaurantMenus.OrderBy(s => s.LastUpdated);
                break;

            case "date_desc":
                RestaurantMenus = RestaurantMenus.OrderByDescending(s => s.LastUpdated);
                break;

            default:      // Name ascending
                RestaurantMenus = RestaurantMenus.OrderBy(s => s.Name);
                break;
            }

            int pageSize   = 25;
            int pageNumber = (page ?? 1);

            return(View(RestaurantMenus.ToPagedList(pageNumber, pageSize)));
        }
Exemple #11
0
        public static U GetEntityDTO <T, U>(T t)
        {
            string sPropName = string.Empty, tPropName = string.Empty;

            try
            {
                if (t != null)
                {
                    U uDTO = Activator.CreateInstance <U>();

                    PropertyInfo[] uProps = uDTO.GetType().GetProperties(),
                    tProps = t.GetType().GetProperties();

                    foreach (PropertyInfo propertyInfo in tProps)
                    {
                        if (propertyInfo.CanRead)
                        {
                            PropertyInfo uProp = uProps.FirstOrDefault(u => u.Name == propertyInfo.Name && u.CanWrite);

                            if (uProp != null)
                            {
                                sPropName = $"T.{propertyInfo.Name}:{propertyInfo.PropertyType.Name}";
                                tPropName = $"U.{uProp.Name}:{uProp.PropertyType.Name}";

                                if (!(propertyInfo.Name.ToLower().EndsWith("id") &&
                                      ((propertyInfo.PropertyType == typeof(System.Int32)) ||
                                       ((propertyInfo.PropertyType.IsGenericType && propertyInfo.PropertyType.GetGenericTypeDefinition() == typeof(Nullable <>)) &&
                                        Nullable.GetUnderlyingType(propertyInfo.PropertyType) == typeof(System.Int32)))))
                                {
                                    if (uProp.Name == "OwnerType" && (uProp.ReflectedType.FullName == "WebApplication.Models.AddressViewModelDTO" ||
                                                                      uProp.ReflectedType.FullName == "WebApplication.Models.AddressViewModel"))
                                    {
                                        int?tPropVal = (int?)propertyInfo.GetValue(t, null);

                                        uProp.SetValue(
                                            uDTO,
                                            tPropVal == null
                                                ? null
                                                : DataSecurityTripleDES.GetEncryptedText(tPropVal.Value));
                                    }
                                    else
                                    {
                                        uProp.SetValue(uDTO, propertyInfo.GetValue(t, null));
                                    }
                                }
                                else
                                {
                                    int?tPropVal = (int?)propertyInfo.GetValue(t, null);

                                    uProp.SetValue(
                                        uDTO,
                                        tPropVal == null
                                            ? null
                                            : DataSecurityTripleDES.GetEncryptedText(tPropVal.Value));
                                }
                            }
                        }
                    }

                    return(uDTO);
                }

                return(default(U));
            }
            catch (Exception e)
            {
                string issueWith = $"{sPropName} -> {tPropName}";
                throw e;
            }
        }
        public ActionResult Register(RegisterViewModel model)
        {
            SessionManager.RegisterSessionActivity();

            // Get all states again
            var roles = GetAllRoles();

            // Set these states on the model. We need to do this because
            // only the selected value from the DropDownList is posted back, not the whole
            // list of states.
            model.Roles = GenUtil.GetSelectListItems(roles);

            // In case everything is fine - i.e. both "Name" and "State" are entered/selected,
            // redirect user to the "Done" page, and pass the user object along via Session
            if (ModelState.IsValid)
            {
                SHA1HashProvider sHA1HashProvider = new SHA1HashProvider();
                if (!ceUserManager.IsRegistered(model.Email))
                {
                    string sha1HashText = sHA1HashProvider.SecureSHA1(model.Password.Trim());
                    int?   newUserID    = ceUserManager.RegisterNew(model.Email, sha1HashText, model.Role);
                    if (newUserID.HasValue)
                    {
                        UserDTO userDTO = new UserDTO()
                        {
                            Id         = DataSecurityTripleDES.GetEncryptedText(newUserID),
                            FirstName  = model.FirstName,
                            Surname    = model.Surname,
                            UserStatus = (int?)UserStatusEnum.Active
                        };

                        ceUserManager.SaveUserDetail(userDTO);

                        StringBuilder sbSubject   = new StringBuilder("Craveats new registrant notification"),
                                      sbEmailBody = new StringBuilder("<p>A new user with the following detail has been registered in the system. " +
                                                                      $"<br/><em>FirstName            </em>: {model.FirstName}" +
                                                                      $"<br/><em>Surname              </em>: {model.Surname}" +
                                                                      $"<br/><em>Email                </em>: {model.Email}" +
                                                                      $"<br/><em>Registration Type    </em>: {model.Role}" +
                                                                      "</p><p>Thank you.</p><p>Craveats</p>");

                        CommunicationServiceProvider.SendOutgoingNotification(
                            new MailAddress(
                                model.Email,
                                string.Format("{0}{1}{2}", model.FirstName, " ", model?.Surname).Trim()),
                            sbSubject.ToString(),
                            sbEmailBody.ToString());

                        User result = ceUserManager.FindByCriteria(email: model.Email, userStatusEnums: new List <int> {
                            (int)UserStatusEnum.Active, (int)UserStatusEnum.Blocked
                        });
                        if (result != null)
                        {
                            userDTO = EntityDTOHelper.GetEntityDTO <User, UserDTO>(result);

                            AuthenticatedUserInfo authenticatedUserInfo = new AuthenticatedUserInfo(userDTO);
                            Session["loggeduser"] = authenticatedUserInfo;

                            SessionManager.RegisterSessionActivity(userID: result.Id, loggedInAt: DateTime.Now);

                            ceUserManager.SignInUser(HttpContext, string.Format("{0}", authenticatedUserInfo.FullName), false);

                            return(RedirectToAction("Index", "Home"));
                        }
                        else
                        {
                            ModelState.AddModelError(string.Empty, "An error occurred in reading user data. Please review input and re-try.");
                        }
                    }
                    else
                    {
                        ModelState.AddModelError(string.Empty, "An error occurred in registering new user. Please review input and re-try.");
                    }
                }
                else
                {
                    ModelState.AddModelError(string.Empty, "Email is registered and cannot be used to create another account.");
                }
            }

            // Something is not right - so render the registration page again,
            // keeping the data user has entered by supplying the model.
            return(View("Register", model));
        }
        public ActionResult FinalisePayment(string stripeToken)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    var cart = Session["cart"] as CraveatsCart;



                    //long? total = (long)order.OrderTotal;
                    // Set your secret key: remember to change this to your live secret key in production
                    // See your keys here: https://dashboard.stripe.com/account/apikeys
                    StripeConfiguration.SetApiKey("sk_test_Rg2BSmdAQkVhLwSdOZyTqHGZ");

                    // Token is created using Checkout or Elements!
                    // Get the payment token submitted by the form:
                    //var token = CraveatsCart.Token; // Using ASP.NET MVC

                    long chargeAmount = (long)(decimal.Parse(CommonUtility.DoFormat((cart.CartTotalBeforeTax + cart.CartTotalTax))) * 100);
                    var  options      = new ChargeCreateOptions
                    {
                        Amount      = chargeAmount,
                        Currency    = "cad",
                        Description = "Order Payment 20181129",
                        SourceId    = stripeToken
                    };
                    var    service = new ChargeService();
                    Charge charge  = service.Create(options);

                    if (charge.Status == "succeeded")
                    {
                        DAL.Order newOrder = new DAL.Order()
                        {
                            DateCreated   = DateTime.Now,
                            DiscountTotal = 0.0m,
                            OrderStatus   = (int)OrderStatusEnum.Paid,
                            OrderTotal    = cart.CartTotalBeforeTax,
                            SessionId     = int.Parse(DataSecurityTripleDES.GetPlainText(SessionManager.GetContextSessionID())),
                            TaxTotal      = cart.CartTotalTax,
                            UserId        = int.Parse(DataSecurityTripleDES.GetPlainText(cart.OwnerId))
                        };
                        db.Order.Add(newOrder);
                        db.SaveChanges();

                        foreach (RestaurantMenuCartDTO restaurantMenuCartDTO in cart.Items)
                        {
                            db.OrderDetail.Add(new OrderDetail()
                            {
                                IsTaxable        = restaurantMenuCartDTO.IsTaxable,
                                OrderId          = newOrder.Id,
                                ServiceId        = int.Parse(DataSecurityTripleDES.GetPlainText(restaurantMenuCartDTO.Id)),
                                ServiceOwnerId   = int.Parse(DataSecurityTripleDES.GetPlainText(restaurantMenuCartDTO.ServiceOwnerId)),
                                ServiceOwnerType = int.Parse(DataSecurityTripleDES.GetPlainText(restaurantMenuCartDTO.ServiceOwnerType)),
                                TaxRate          = restaurantMenuCartDTO.TaxRate,
                                UnitPrice        = restaurantMenuCartDTO.UnitPrice,
                                Quantity         = restaurantMenuCartDTO.Quantity,
                                Name             = restaurantMenuCartDTO.Name,
                                Detail           = restaurantMenuCartDTO.Detail
                            });
                            db.SaveChanges();
                        }

                        db.OrderPayment.Add(new OrderPayment()
                        {
                            DateProcessed          = DateTime.Now,
                            GatewayResponseCode    = charge.Id,
                            GatewayResponseVerbose = charge.Status,
                            TotalAmount            = (decimal)(charge.Amount / 100.00)
                        });
                        db.SaveChanges();

                        cart            = null;
                        Session["cart"] = null;

                        return(View("Success", new WebApplication.Models.ViewModel.OrderConfirmationDTO()
                        {
                            Id = DataSecurityTripleDES.GetEncryptedText(newOrder.Id),
                            StatusMessage = "success"
                        }));
                    }
                    else
                    {
                        ModelState.AddModelError("", "Unable to accept charges. Try again, and if the problem persists please review your card detail with your bank.");
                    }
                }
            }
            catch (RetryLimitExceededException /* dex */)
            {
                //Log the error (uncomment dex variable name and add a line here to write a log.
                ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists see your system administrator.");
            }
            return(View());
        }
Exemple #14
0
        public ActionResult AddAddress(AddressViewModel model, string returnUrl)
        {
            SessionManager.RegisterSessionActivity();

            IEnumerable <string> regionAliases = GetAllRegionAliases();

            model.RegionAliases = GenUtil.GetSelectListItems(regionAliases);

            if (ModelState.IsValid)
            {
                AuthenticatedUserInfo authenticatedUserInfo = Session["loggeduser"] as AuthenticatedUserInfo;
                if (authenticatedUserInfo != null)
                {
                    int ownerType = model.OwnerType?.Length > 0
                        ? int.Parse(DataSecurityTripleDES.GetPlainText(model.OwnerType))
                        : -1;

                    int ownerId = model.OwnerId?.Length > 0
                        ? int.Parse(DataSecurityTripleDES.GetPlainText(model.OwnerType))
                        : -1;

                    DAL.User addressOwner = null;
                    if (!(ownerType > -1 && ownerId > 0))
                    {
                        addressOwner = new CEUserManager().FindById(
                            int.Parse(DataSecurityTripleDES.GetPlainText(authenticatedUserInfo.UserId)));
                    }

                    DataProvider dataProvider = new DataProvider();
                    AddressDTO   addressDTO   = new AddressDTO()
                    {
                        City        = model.City,
                        Line1       = model.Line1,
                        Line2       = model.Line2,
                        Postcode    = model.Postcode,
                        RegionAlias = model.RegionAlias
                    };

                    if (addressOwner != null && !addressOwner.AddressId.HasValue)
                    {
                        addressDTO.OwnerType = (int)Common.OwnerTypeEnum.User;
                        addressDTO.OwnerId   = authenticatedUserInfo.UserId;

                        using (DAL.CraveatsDbContext c = new DAL.CraveatsDbContext())
                        {
                            addressDTO.RegionId = DataSecurityTripleDES.GetEncryptedText(
                                c.Region.FirstOrDefault(r => r.CountryISO2 == "CA" &&
                                                        r.RegionAlias == addressDTO.RegionAlias).Id);

                            addressDTO.CountryId = DataSecurityTripleDES.GetEncryptedText(
                                c.Country.FirstOrDefault(s => s.ISO2 == "CA").Id);

                            DAL.Address newAddress = EntityDTOHelper.MapToEntity <AddressDTO, DAL.Address>(
                                addressDTO, null, true);
                            newAddress.AddressStatus = (int?)Common.AddressStatusEnum.Active;

                            c.Entry(newAddress).State = System.Data.Entity.EntityState.Added;

                            c.SaveChanges();

                            addressOwner = c.User.FirstOrDefault(u => u.Id == newAddress.OwnerId.Value);

                            addressOwner.AddressId   = newAddress.Id;
                            addressOwner.LastUpdated = DateTime.Now;

                            c.SaveChanges();

                            return(RedirectToAction("ProfileView", "Profile"));
                        }
                    }
                    else if (ownerType > -1 && ownerId > 0)
                    {
                        addressDTO.OwnerType = ownerType;
                        addressDTO.OwnerId   = model.OwnerId;

                        using (DAL.CraveatsDbContext c = new DAL.CraveatsDbContext())
                        {
                            addressDTO.RegionId = DataSecurityTripleDES.GetEncryptedText(
                                c.Region.FirstOrDefault(r => r.CountryISO2 == "CA" &&
                                                        r.RegionAlias == addressDTO.RegionAlias).Id);

                            addressDTO.CountryId = DataSecurityTripleDES.GetEncryptedText(
                                c.Country.FirstOrDefault(s => s.ISO2 == "CA").Id);

                            DAL.Address newAddress = EntityDTOHelper.MapToEntity <AddressDTO, DAL.Address>(
                                addressDTO, null, true);
                            newAddress.AddressStatus = (int?)Common.AddressStatusEnum.Active;

                            c.Entry(newAddress).State = System.Data.Entity.EntityState.Added;

                            c.SaveChanges();

                            DAL.Restaurant restaurant = c.Restaurant.FirstOrDefault(u => u.Id == newAddress.OwnerId.Value);

                            restaurant.AddressId   = newAddress.Id;
                            restaurant.LastUpdated = DateTime.Now;

                            c.SaveChanges();

                            return(RedirectToAction("Index", "RestaurantMenu", new
                            {
                                ownerType = DataSecurityTripleDES.GetEncryptedText((int)Common.OwnerTypeEnum.ServiceProvider),
                                ownerId = DataSecurityTripleDES.GetEncryptedText(restaurant.Id)
                            }));
                        }
                    }
                    ModelState.AddModelError("", "An address exists for this owner.");
                }
            }

            // Something is not right - so render the registration page again,
            // keeping the data user has entered by supplying the model.
            return(View(model));
        }