public ActionResult Submit(RolesViewModel roles)
        {
            if (!caSession.AuthoriseSession())
            {
                return(Redirect((string)Session["ErrorUrl"]));
            }

            // get properties of current tenant
            var tenant = caCurrent.CurrentTenant();

            // get properties of user
            caUser user = caCurrent.CurrentUser();

            try
            {
                if (ModelState.IsValid)
                {
                    if (roles.Id <= 0)
                    {
                        //insert
                        roles.CreatedBy   = user.UserId;
                        roles.UpdatedBy   = user.UserId;
                        roles.DateCreated = DateTime.UtcNow;
                        roles.DateUpdated = DateTime.UtcNow;
                        roles.TenantId    = tenant.TenantId;
                        roles.Id          = _rolesServices.Insert(Mapper.Map <Roles>(roles), CurrentUserId);

                        ViewBag.Message = $"Successfully Added on {DateTime.Now}.";
                    }
                    else
                    {
                        //update
                        Roles newRole = _rolesServices.GetByRolesId(roles.Id);
                        newRole.RoleName    = roles.RoleName;
                        newRole.TenantId    = tenant.TenantId;
                        newRole.UpdatedBy   = user.UserId;
                        newRole.DateUpdated = DateTime.UtcNow;
                        _rolesServices.Update(Mapper.Map <Roles>(newRole), CurrentUserId);
                        ViewBag.Message = $"Successfully Updated on {DateTime.Now}.";
                    }

                    return(RedirectToAction("Index", new { message = ViewBag.Message }));
                }
                else //ModelState.IsValid is not valid
                {
                    return(View("_CreateEdit", Mapper.Map(_rolesServices.GetByRolesId(roles.Id), new RolesViewModel())));
                }
            }
            catch (Exception e)
            {
                //log exception
                var err = e.Message;

                return(View("_ErrorResult"));
            }
        }