/// <summary> /// Retrieves all system departments. /// </summary> /// <param name="flattenHierarchy">True ~ Return departments in a flattened list. False ~ Return departments in parent/child hierarchy.</param> /// <param name="includeDeletedItems">True ~ Include system departments that have been 'deleted'. False ~ Only include 'non-deleted' system departments.</param> /// <returns></returns> public async Task <IEnumerable <SystemDepartmentModel> > GetItems(bool flattenHierarchy = false, bool includeDeletedItems = false) { var systemDepartments = await _systemDepartmentsManager.GetItemsAsync(); if (systemDepartments == null || !systemDepartments.Any()) { throw new DepartmentsNotFoundException(); } var systemDepartmentsModel = SystemDepartmentModel.Construct(systemDepartments); // Utilize flattened list of system departments to search (only hit DB once). if (!flattenHierarchy) { systemDepartments = systemDepartments.Where(x => x.ParentId == null); // Start with parent level items. } var model = new List <SystemDepartmentModel>(); foreach (SystemDepartment systemDepartment in systemDepartments) { var systemDepartmentModel = new SystemDepartmentModel(systemDepartment); if (!flattenHierarchy) { systemDepartmentModel.SubDepartments = await GetSubDepartments(systemDepartmentsModel, systemDepartmentModel, systemDepartment.Id); } model.Add(systemDepartmentModel); } return(model); }
/// <summary> /// Retrieves ONLY the specified system department. /// </summary> /// <param name="id">System department unique identifier (GUID).</param> /// <param name="flattenHierarchy">True ~ Return departments in a flattened list. False ~ Return departments in parent/child hierarchy.</param> /// <param name="includeSubDepartments">True ~ include associated sub-departments. False ~ do NOT include associated sub-deparments.</param> /// <param name="includeDeletedItems">True ~ Include system departments that have been 'deleted'. False ~ Only include 'non-deleted' system departments.</param> /// <returns></returns> public async Task <SystemDepartmentModel> GetItem(string id, bool includeSubDepartments = true, bool includeDeletedItems = false) { var systemDepartments = await _systemDepartmentsManager.GetItemsAsync(); if (systemDepartments == null || !systemDepartments.Any()) { throw new DepartmentsNotFoundException(); } var systemDepartmentsModel = SystemDepartmentModel.Construct(systemDepartments); var systemDepartment = systemDepartments.SingleOrDefault(x => x.Id == id); if (systemDepartment == null || systemDepartment.IsDeleted) { throw new DepartmentNotFoundException(id); } var systemDepartmentModel = new SystemDepartmentModel(systemDepartment); if (includeSubDepartments) { systemDepartmentModel.SubDepartments = await GetSubDepartments(systemDepartmentsModel, systemDepartmentModel, id); } return(systemDepartmentModel); }
public async Task <SystemDepartmentModel> UpdateItem(SystemDepartmentModel model) { var department = new SystemDepartment(model); department = await _systemDepartmentsManager.UpdateItemAsync(department); var departmentModel = new SystemDepartmentModel(department); return(departmentModel); }
public SystemDepartment(SystemDepartmentModel model) { Id = string.IsNullOrWhiteSpace(model.Id) ? Guid.NewGuid().ToString() : model.Id; ParentId = model.ParentId; CanonicalName = model.CanonicalName; DisplayName = model.DisplayName; Abbreviation = model.Abbreviation; SubDepartments = Construct(model.SubDepartments); IsDeleted = model.IsDeleted; }
public async Task <IActionResult> Put(SystemDepartmentModel model) { try { model = await _systemDepartmentService.UpdateItem(model); responseModels.Add("systemDepartment", model); response = new ApiResponse(HttpStatusCode.OK, string.Format("System department '{0}' updated successfully.", model.CanonicalName), responseModels); return(Ok(new { response })); } catch (Exception exception) { response = new ApiResponse(HttpStatusCode.BadRequest, string.Format("Error updating system department '{0}'.", model.CanonicalName), exception); return(BadRequest(new { response })); } }
public async Task CreateItem(SystemDepartmentModel model) { SystemDepartment entity = new SystemDepartment(model); await _systemDepartmentsManager.CreateItemAsync(entity); }
private async Task <IEnumerable <SystemDepartmentModel> > GetSubDepartments(IEnumerable <SystemDepartmentModel> systemDepartmentsModel, SystemDepartmentModel systemDepartmentModel, string id) { var subDepartments = systemDepartmentsModel.Where(x => string.Compare(x.ParentId, id, true) == 0); subDepartments = subDepartments.ToList(); if (subDepartments.Any()) { foreach (SystemDepartmentModel subDepartmentModel in subDepartments) { subDepartmentModel.SubDepartments = await GetSubDepartments(systemDepartmentsModel, systemDepartmentModel, subDepartmentModel.Id); } } return(subDepartments); }