private questStatus delete(FMSEntities dbContext, GroupUserId groupUserId)
        {
            // Initialize
            questStatus status = null;


            try
            {
                // Read the record.
                Quest.Services.Dbio.FMS.GroupUsers _groupUser = null;
                status = read(dbContext, groupUserId, out _groupUser);
                if (!questStatusDef.IsSuccess(status))
                {
                    return(status);
                }

                // Delete the record.
                dbContext.GroupUsers.Remove(_groupUser);
                dbContext.SaveChanges();
            }
            catch (System.Exception ex)
            {
                return(new questStatus(Severity.Fatal, String.Format("EXCEPTION: {0}.{1}: {2}",
                                                                     this.GetType().Name, MethodBase.GetCurrentMethod().Name,
                                                                     ex.InnerException != null ? ex.InnerException.Message : ex.Message)));
            }
            return(new questStatus(Severity.Success));
        }
        /*----------------------------------------------------------------------------------------------------------------------------------
        * GroupUsers
        *---------------------------------------------------------------------------------------------------------------------------------*/
        private questStatus create(FMSEntities dbContext, GroupUser groupUser, out GroupUserId groupUserId)
        {
            // Initialize
            groupUserId = null;


            // Perform create
            try
            {
                Quest.Services.Dbio.FMS.GroupUsers _groupUser = new Quest.Services.Dbio.FMS.GroupUsers();
                _groupUser.GroupId = groupUser.Group.Id;
                _groupUser.UserId  = groupUser.User.Id;
                _groupUser.Created = DateTime.Now;
                dbContext.GroupUsers.Add(_groupUser);
                dbContext.SaveChanges();
                if (_groupUser.Id == 0)
                {
                    return(new questStatus(Severity.Error, "GroupUser not created"));
                }
                groupUserId = new GroupUserId(_groupUser.Id);
            }
            catch (System.Exception ex)
            {
                return(new questStatus(Severity.Fatal, String.Format("EXCEPTION: {0}.{1}: {2}",
                                                                     this.GetType().Name, MethodBase.GetCurrentMethod().Name,
                                                                     ex.InnerException != null ? ex.InnerException.Message : ex.Message)));
            }
            return(new questStatus(Severity.Success));
        }
        public questStatus Delete(DbMgrTransaction trans, GroupUserId groupUserId)
        {
            // Initialize
            questStatus status = null;


            // Delete groupUser
            status = _dbGroupUsersMgr.Delete(trans, groupUserId);
            if (!questStatusDef.IsSuccess(status))
            {
                return(status);
            }
            return(new questStatus(Severity.Success));
        }
        public questStatus Delete(DbMgrTransaction trans, GroupUserId groupUserId)
        {
            // Initialize
            questStatus status = null;


            // Perform delete in this transaction.
            status = delete((FMSEntities)trans.DbContext, groupUserId);
            if (!questStatusDef.IsSuccess(status))
            {
                RollbackTransaction(trans);
                return(status);
            }
            return(new questStatus(Severity.Success));
        }
        public questStatus Read(GroupUserId groupUserId, out GroupUser groupUser)
        {
            // Initialize
            groupUser = null;
            questStatus status = null;


            // Read groupUser
            status = _dbGroupUsersMgr.Read(groupUserId, out groupUser);
            if (!questStatusDef.IsSuccess(status))
            {
                return(status);
            }
            return(new questStatus(Severity.Success));
        }
        public questStatus Read(DbMgrTransaction trans, GroupUserId groupUserId, out GroupUser groupUser)
        {
            // Initialize
            questStatus status = null;

            groupUser = null;


            // Read groupUser
            status = _dbGroupUsersMgr.Read(trans, groupUserId, out groupUser);
            if (!questStatusDef.IsSuccess(status))
            {
                return(status);
            }
            return(new questStatus(Severity.Success));
        }
        public questStatus Delete(GroupUserId groupUserId)
        {
            // Initialize
            questStatus status = null;


            // Perform delete.
            using (FMSEntities dbContext = new FMSEntities())
            {
                status = delete(dbContext, groupUserId);
                if (!questStatusDef.IsSuccess(status))
                {
                    return(status);
                }
            }
            return(new questStatus(Severity.Success));
        }
        /*==================================================================================================================================
        * Properties
        *=================================================================================================================================*/
        #endregion


        #region Public Methods

        /*==================================================================================================================================
        * Public Methods
        *=================================================================================================================================*/
        public questStatus Create(GroupUser groupUser, out GroupUserId groupUserId)
        {
            // Initialize
            questStatus status = null;

            groupUserId = null;



            // Create groupUser
            status = _dbGroupUsersMgr.Create(groupUser, out groupUserId);
            if (!questStatusDef.IsSuccess(status))
            {
                return(status);
            }
            return(new questStatus(Severity.Success));
        }
        public questStatus Create(DbMgrTransaction trans, GroupUser groupUser, out GroupUserId groupUserId)
        {
            // Initialize
            questStatus status = null;

            groupUserId = null;


            // Data rules.
            groupUser.Created = DateTime.Now;


            // Create the groupUser in this transaction.
            status = create((FMSEntities)trans.DbContext, groupUser, out groupUserId);
            if (!questStatusDef.IsSuccess(status))
            {
                return(status);
            }
            return(new questStatus(Severity.Success));
        }
        public questStatus Read(DbMgrTransaction trans, GroupUserId groupUserId, out GroupUser groupUser)
        {
            // Initialize
            questStatus status = null;

            groupUser = null;


            // Perform read
            Quest.Services.Dbio.FMS.GroupUsers _groupUser = null;
            status = read((FMSEntities)trans.DbContext, groupUserId, out _groupUser);
            if (!questStatusDef.IsSuccess(status))
            {
                return(status);
            }
            groupUser = new GroupUser();
            BufferMgr.TransferBuffer(_groupUser, groupUser);

            return(new questStatus(Severity.Success));
        }
        /*==================================================================================================================================
        * Properties
        *=================================================================================================================================*/
        #endregion


        #region Public Methods

        /*==================================================================================================================================
        * Public Methods
        *=================================================================================================================================*/
        public questStatus Create(GroupUser groupUser, out GroupUserId groupUserId)
        {
            // Initialize
            questStatus status = null;

            groupUserId = null;


            // Data rules.
            groupUser.Created = DateTime.Now;


            // Create the groupUser
            using (FMSEntities dbContext = new FMSEntities())
            {
                status = create(dbContext, groupUser, out groupUserId);
                if (!questStatusDef.IsSuccess(status))
                {
                    return(status);
                }
            }
            return(new questStatus(Severity.Success));
        }
        private questStatus read(FMSEntities dbContext, GroupUserId groupUserId, out Quest.Services.Dbio.FMS.GroupUsers groupUser)
        {
            // Initialize
            groupUser = null;


            try
            {
                groupUser = dbContext.GroupUsers.Where(r => r.Id == groupUserId.Id).SingleOrDefault();
                if (groupUser == null)
                {
                    return(new questStatus(Severity.Warning, String.Format("WARNING: {0}.{1}: {2}",
                                                                           this.GetType().Name, MethodBase.GetCurrentMethod().Name,
                                                                           String.Format("Id {0} not found", groupUserId.Id))));
                }
            }
            catch (System.Exception ex)
            {
                return(new questStatus(Severity.Fatal, String.Format("EXCEPTION: {0}.{1}: {2}",
                                                                     this.GetType().Name, MethodBase.GetCurrentMethod().Name,
                                                                     ex.InnerException != null ? ex.InnerException.Message : ex.Message)));
            }
            return(new questStatus(Severity.Success));
        }
        public questStatus Save(UserGroupsViewModel userGroupsViewModel)
        {
            // Initialize
            questStatus      status = null;
            DbMgrTransaction trans  = null;
            Mgr mgr = new Mgr(this.UserSession);

            try
            {
                // BEGIN TRANSACTION
                status = mgr.BeginTransaction("FMS", "SaveUserGroups_" + userGroupsViewModel.Id.ToString() + "_" + Guid.NewGuid().ToString(), out trans);
                if (!questStatusDef.IsSuccess(status))
                {
                    return(status);
                }


                // Remove all the user's groups.
                UserId        userId        = new UserId(userGroupsViewModel.Id);
                GroupUsersMgr groupUsersMgr = new GroupUsersMgr(this.UserSession);
                status = groupUsersMgr.Delete(trans, userId);
                if (!questStatusDef.IsSuccess(status))
                {
                    mgr.RollbackTransaction(trans);
                    return(status);
                }

                // Save all the groups the user is assigned.
                GroupUser groupUser = new GroupUser();
                groupUser.User.Id = userGroupsViewModel.User.Id;
                foreach (BootstrapTreenodeViewModel userGroupNode in userGroupsViewModel.UserGroups)
                {
                    GroupUserId groupUserId = null;
                    groupUser.Group.Id = userGroupNode.Id;
                    status             = groupUsersMgr.Create(trans, groupUser, out groupUserId);
                    if (!questStatusDef.IsSuccess(status))
                    {
                        mgr.RollbackTransaction(trans);
                        return(status);
                    }
                }

                // COMMIT TRANSACTION
                status = mgr.CommitTransaction(trans);
                if (!questStatusDef.IsSuccess(status))
                {
                    return(status);
                }
            }
            catch (System.Exception ex)
            {
                if (trans != null)
                {
                    mgr.RollbackTransaction(trans);
                }
                return(new questStatus(Severity.Fatal, String.Format("EXCEPTION: {0}.{1}: {2}",
                                                                     this.GetType().Name, MethodBase.GetCurrentMethod().Name,
                                                                     ex.InnerException != null ? ex.InnerException.Message : ex.Message)));
            }
            return(new questStatus(Severity.Success));
        }