public virtual async Task MoveAsync(long id, long?parentId) { var organizationUnit = await OrganizationUnitRepository.GetAsync(id); if (organizationUnit.ParentId == parentId) { return; } //Should find children before Code change var children = await FindChildrenAsync(id, true); //Store old code of OU var oldCode = organizationUnit.Code; //Move OU organizationUnit.Code = await GetNextChildCodeAsync(parentId); organizationUnit.ParentId = parentId; await ValidateOrganizationUnitAsync(organizationUnit); //Update Children Codes foreach (var child in children) { child.Code = OrganizationUnit.AppendCode(organizationUnit.Code, OrganizationUnit.GetRelativeCode(child.Code, oldCode)); } }
public virtual void Move(long id, long?parentId) { var organizationUnit = OrganizationUnitRepository.Get(id); if (organizationUnit.ParentId == parentId) { return; } //Should find children before Code change var children = FindChildren(id, true); //Store old code of OU var oldCode = organizationUnit.Code; //Move OU organizationUnit.Code = GetNextChildCode(parentId); organizationUnit.ParentId = parentId; ValidateOrganizationUnit(organizationUnit); //Update Children Codes foreach (var child in children) { child.Code = OrganizationUnit.AppendCode(organizationUnit.Code, OrganizationUnit.GetRelativeCode(child.Code, oldCode)); } }
public virtual async Task <string> GetNextChildCodeAsync(long?parentId) { var lastChild = await GetLastChildOrNullAsync(parentId); if (lastChild == null) { var parentCode = parentId != null ? await GetCodeAsync(parentId.Value) : null; return(OrganizationUnit.AppendCode(parentCode, OrganizationUnit.CreateCode(1))); } return(OrganizationUnit.CalculateNextCode(lastChild.Code)); }