/// <summary> /// Resolves all the information for a published org unit entity. /// </summary> /// <param name="orgUnit">The org unit.</param> /// <param name="orgUnitPub">The published org unit.</param> /// <param name="orgUnits">Collection of all org units.</param> /// <param name="orgUnitAssocs">Collection of all org unit associations.</param> /// <param name="disabledOrgUnits">A list of org units determined to be disabled.</param> /// <returns></returns> private static OrgUnitPublished ResolvePublishedOrgUnit(OrgUnit orgUnit, OrgUnitPublished orgUnitPub, OrgUnit[] orgUnits, IEnumerable<OrgUnitAssociation> orgUnitAssocs, Collection<int> disabledOrgUnits) { // Fill in information from org unit (self) ApplyOrgUnitInfo(orgUnit, orgUnitPub, disabledOrgUnits); // Fill in information from linked org unit if (orgUnit.LinkedOrgUnitId != null) { OrgUnit linkedOrgUnit = orgUnits.SingleOrDefault(o => o.Id == orgUnit.LinkedOrgUnitId); ApplyOrgUnitInfo(linkedOrgUnit, orgUnitPub, disabledOrgUnits); } // Repeat process for any ascendants OrgUnitAssociation orgUnitAssoc = orgUnitAssocs.SingleOrDefault(a => a.SecondaryId == orgUnit.Id); int? ascendantId = orgUnitAssoc != null ? orgUnitAssoc.PrimaryId : null; if (ascendantId.HasValue) { OrgUnit ascendantOrgUnit = orgUnits.SingleOrDefault(o => o.Id == ascendantId); ResolvePublishedOrgUnit(ascendantOrgUnit, orgUnitPub, orgUnits, orgUnitAssocs, disabledOrgUnits); } // Ensure schedules/insurances/types/services org unit IDs were set before exiting if (orgUnitPub.SchedulesOrgUnitId == null) orgUnitPub.SchedulesOrgUnitId = orgUnitPub.Id; if (orgUnitPub.InsurancesOrgUnitId == null) orgUnitPub.InsurancesOrgUnitId = orgUnitPub.Id; if (orgUnitPub.TypesOrgUnitId == null) orgUnitPub.TypesOrgUnitId = orgUnitPub.Id; if (orgUnitPub.ServicesOrgUnitId == null) orgUnitPub.ServicesOrgUnitId = orgUnitPub.Id; return orgUnitPub; }