コード例 #1
0
        public GroupItem Edit(long installationID, int groupID, GroupClientData clientData)
        {
            Try.Argument(clientData, nameof(clientData));

            using (var transaction = Context.Data.Database.BeginTransaction())
            {
                var groups    = Context.Data.GetGroups(installationID);
                var powerBars = Context.Data.GetPowerBars(installationID, true);

                var editedGroup = groups.FirstOrDefault(x => x.GroupID == groupID);
                Try.NotNull(editedGroup, $"Cant find group with ID: {groupID};");

                SetGroupProperties(groups, powerBars, editedGroup, clientData);

                var editedHierarchy = new TopGroup(groups);
                editedHierarchy.CheckCycles();
                editedHierarchy.AddPowerBars(powerBars);

                var editedGroupItem = editedHierarchy.GetGroupById(editedGroup.GroupID);
                Try.NotNull(editedGroupItem, $"Cant find group with ID: {editedGroup.GroupID} in hierarchy;", false);

                editedHierarchy.UpdateStatuses();

                Context.Data.SaveChanges();
                transaction.Commit();

                Context.Events.GroupChange(installationID, editedGroupItem.GroupID, EventActionType.Edit);

                return(editedGroupItem);
            }
        }
コード例 #2
0
        void SetPowerBars(List <PowerBar> allPowerBars, Group editedGroup, decimal[] newPowerBarSNs)
        {
            Try.Argument(newPowerBarSNs, nameof(newPowerBarSNs));

            var powerBarSNs = allPowerBars.Where(x => x.Groups
                                                 .Any(y => y.GroupID == editedGroup.GroupID))
                              .Select(x => x.PowerBarSN)
                              .ToList();

            var newPowerBarSNsSet = new HashSet <decimal>(newPowerBarSNs);

            var toDeletePowerBarSNsSet = new HashSet <decimal>(powerBarSNs);

            toDeletePowerBarSNsSet.ExceptWith(newPowerBarSNsSet);
            if (toDeletePowerBarSNsSet.Any())
            {
                foreach (var powerBar in allPowerBars.Where(x => toDeletePowerBarSNsSet.Contains(x.PowerBarSN)))
                {
                    powerBar.Groups.RemoveAll(x => x.GroupID == editedGroup.GroupID);
                }
            }

            newPowerBarSNsSet.ExceptWith(powerBarSNs);
            if (newPowerBarSNsSet.Any())
            {
                foreach (var powerBar in allPowerBars.Where(x => newPowerBarSNsSet.Contains(x.PowerBarSN)))
                {
                    powerBar.Groups.Add(editedGroup);
                }
            }
        }
コード例 #3
0
        public GroupItem Create(long installationID, GroupClientData clientData)
        {
            Try.Argument(clientData, nameof(clientData));

            using (var transaction = Context.Data.Database.BeginTransaction())
            {
                var groups    = Context.Data.GetGroups(installationID);
                var powerBars = Context.Data.GetPowerBars(installationID, true);

                var installatioin = Context.Data.Installations.Find(installationID);
                var newGroup      = new Group(installatioin);

                SetGroupProperties(groups, powerBars, newGroup, clientData);

                Context.Data.Groups.Add(newGroup);
                groups.Add(newGroup);
                var newGroupId = newGroup.GroupID;

                var hierarchy = new TopGroup(groups);
                hierarchy.CheckCycles();
                hierarchy.AddPowerBars(powerBars);

                var newGroupItem = hierarchy.GetGroupById(newGroupId);
                Try.NotNull(newGroupItem, "Cant find new group in hierarchy;", false);

                hierarchy.UpdateStatuses();

                Context.Data.SaveChanges();
                transaction.Commit();

                Context.Events.GroupChange(installationID, newGroupItem.GroupID, EventActionType.Create);

                return(newGroupItem);
            }
        }
コード例 #4
0
        public AccountAccess SetAccountAccess(AccountAccessClientData accessData)
        {
            Try.Argument(accessData, nameof(accessData));

            var slaveAccount  = UserContext.Accounts.GetOrFail(accessData.SlaveLogin);
            var masterAccount = UserContext.Accounts.GetOrFail(accessData.MasterLogin);

            if (accessData.Role != AccountAccessRoles.None)
            {
                CheckForAccessOverSlave(slaveAccount, AccountAccessRoles.Admin);
            }

            return(SetAccountAccess_Checked(slaveAccount, masterAccount, accessData.Role));
        }
コード例 #5
0
        void SetGroups(List <Group> allGroups, Group editedGroup, int[] newGroupIDs)
        {
            Try.Argument(newGroupIDs, nameof(newGroupIDs));

            var newGroupIDsSet = new HashSet <int>(newGroupIDs);

            foreach (var group in allGroups)
            {
                if (newGroupIDsSet.Contains(group.GroupID))
                {
                    if (group.ParentGroupID != editedGroup.GroupID)
                    {
                        group.ParentGroupID = editedGroup.GroupID;
                    }
                }
                else if (group.ParentGroupID == editedGroup.GroupID)
                {
                    group.ParentGroupID = null;
                }
            }
        }
コード例 #6
0
        public static void SetMany <ChildType, ChildIDType>(
            IEnumerable <ChildType> all, List <ChildType> childs, IEnumerable <ChildIDType> newChildsIDs,
            Func <ChildType, ChildIDType> childIDSelector)
        {
            Try.Argument(newChildsIDs, nameof(newChildsIDs));

            var newChildsIDsSet = new HashSet <ChildIDType>(newChildsIDs);
            var childsIDsSet    = new HashSet <ChildIDType>(childs.Select(x => childIDSelector(x)));

            childsIDsSet.IntersectWith(newChildsIDsSet);
            if (childs.Count != childsIDsSet.Count)
            {
                childs.RemoveAll(x => !childsIDsSet.Contains(childIDSelector(x)));
            }

            newChildsIDsSet.ExceptWith(childsIDsSet);
            if (newChildsIDsSet.Any())
            {
                childs.AddRange(all.Where(x => newChildsIDsSet.Contains(childIDSelector(x))));
            }
        }
コード例 #7
0
 public static IdentityResult NewPassword(this UserManager manager, string login, string newPassword)
 {
     Try.Argument(manager, nameof(manager));
     return(AsyncHelper.RunSync(() => manager.NewPasswordAsync(login, newPassword)));
 }