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); } }
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); } }
void SetGroupProperties(List <Group> allGroups, List <PowerBar> allPowerBars, Group editedGroup, GroupClientData clientData) { if (clientData.Name != null) { editedGroup.Name = clientData.Name; } if (clientData.ShortName != null) { editedGroup.ShortName = clientData.ShortName; } if (editedGroup.IsMainGroupInInstallation) { Try.Condition(!clientData.ParentGroupID.HasValue, $"Cant set {nameof(clientData.ParentGroupID)} for main group;"); Try.Condition(clientData.GroupIDs == null, $"Cant set {nameof(clientData.GroupIDs)} for main group;"); Try.Condition(clientData.PowerBarSNs == null, $"Cant set {nameof(clientData.PowerBarSNs)} for main group;"); } else { if (clientData.ParentGroupID.HasValue) { var mainGroup = allGroups.FirstOrDefault(x => x.IsMainGroupInInstallation); Try.NotNull(mainGroup, "Main group not found;", false); editedGroup.ParentGroupID = (clientData.ParentGroupID.Value == 0 || clientData.ParentGroupID.Value == mainGroup.GroupID) ? null : clientData.ParentGroupID; } if (clientData.GroupIDs != null) { SetGroups(allGroups, editedGroup, clientData.GroupIDs); } if (clientData.PowerBarSNs != null) { SetPowerBars(allPowerBars, editedGroup, clientData.PowerBarSNs); } } }