/// <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;
 }
Exemple #5
0
        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);
        }