/// <summary>
        /// Delete selected user group.
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public GXUserGroupDeleteResponse Post(GXUserGroupDeleteRequest request)
        {
            IAuthSession s = this.GetSession(false);

            //Normal user can't remove device.
            if (!GuruxAMI.Server.GXBasicAuthProvider.CanUserEdit(s))
            {
                throw new ArgumentException("Access denied.");
            }
            long id = Convert.ToInt64(s.Id);
            List <GXEventsItem> events = new List <GXEventsItem>();

            lock (Db)
            {
                foreach (int it in request.GroupIDs)
                {
                    if (it == 0)
                    {
                        throw new ArgumentException("ID is required");
                    }
                    if (GetUserGroups(Db, it).Length == 1)
                    {
                        throw new ArgumentException("User must belong atleast one user group.");
                    }
#if !SS4
                    GXAmiUserGroup ug = Db.QueryById <GXAmiUserGroup>(it);
#else
                    GXAmiUserGroup ug = Db.SingleById <GXAmiUserGroup>(it);
#endif
                    if (request.Permanently)
                    {
                        Db.DeleteById <GXAmiUserGroup>(it);
                    }
                    else
                    {
                        ug.Removed = DateTime.Now.ToUniversalTime();
                        Db.UpdateOnly(ug, p => p.Removed, p => p.Id == it);
                    }
                    events.Add(new GXEventsItem(ActionTargets.UserGroup, Actions.Remove, ug));
                }
            }
            AppHost host = this.ResolveService <AppHost>();
            host.SetEvents(Db, this.Request, id, events);
            return(new GXUserGroupDeleteResponse());
        }
        /// <summary>
        /// Delete selected user group.
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public GXUserGroupDeleteResponse Post(GXUserGroupDeleteRequest request)
        {
            IAuthSession s = this.GetSession(false);
            //Normal user can't remove device.
            if (!GuruxAMI.Server.GXBasicAuthProvider.CanUserEdit(s))
            {
                throw new ArgumentException("Access denied.");
            }
            long id = Convert.ToInt64(s.Id);
            List<GXEventsItem> events = new List<GXEventsItem>();
            lock (Db)
            {
                foreach (int it in request.GroupIDs)
                {
                    if (it == 0)
                    {
                        throw new ArgumentException("ID is required");
                    }
                    if (GetUserGroups(Db, it).Length == 1)
                    {
                        throw new ArgumentException("User must belong atleast one user group.");
                    }
#if !SS4
                    GXAmiUserGroup ug = Db.QueryById<GXAmiUserGroup>(it);
#else
                    GXAmiUserGroup ug = Db.SingleById<GXAmiUserGroup>(it);
#endif                                                                                              
                    if (request.Permanently)
                    {
                        Db.DeleteById<GXAmiUserGroup>(it);
                    }
                    else
                    {
                        ug.Removed = DateTime.Now.ToUniversalTime();
                        Db.UpdateOnly(ug, p => p.Removed, p => p.Id == it);
                    }
                    events.Add(new GXEventsItem(ActionTargets.UserGroup, Actions.Remove, ug));
                }
            }
            AppHost host = this.ResolveService<AppHost>();
            host.SetEvents(Db, this.Request, id, events);
            return new GXUserGroupDeleteResponse();
        }