/// <summary> /// This function is asynchronous, since the retrieval takes some time. /// This function retrievs /// </summary> /// <param name="filterValue">Filter can be Employee Id or Name. /// In case th</param> /// <returns>List of Employee records</returns> public async Task GetEmployeesAsync(string filterValue = "") { Task <List <Employee> > retrievalTask; List <Employee> _retrievedEmployees = new List <Employee>(); try { switch (_searchFilter) { case SearchFilter.NoFilter: //implement only page wise retrieval of employess and show the first page retrievalTask = Task.Run(() => _employeeQueryHandler.GetEmployeesAsync()); await retrievalTask; _retrievedEmployees = retrievalTask.Result; break; case SearchFilter.ByEmployeeId: int.TryParse(filterValue, out int employeeId); Employee rerievedEmployee = _employeeQueryHandler.GetEmployeeById(employeeId); if (rerievedEmployee != null) { _retrievedEmployees.Add(rerievedEmployee); } break; case SearchFilter.ByEmployeeName: retrievalTask = Task.Run(() => _employeeQueryHandler.GetEmployeesByNameAsync(filterValue)); await retrievalTask; _retrievedEmployees = retrievalTask.Result; break; case SearchFilter.ByPageNumber: int.TryParse(filterValue, out int pageToRetrieve); retrievalTask = Task.Run(() => _employeeQueryHandler.GetEmployeesByPageAsync(pageToRetrieve)); await retrievalTask; _retrievedEmployees = retrievalTask.Result; TotalNoOfPages = _employeeQueryHandler.ToTalNoOfPages; break; default: break; } } catch (Exception ec) { _messageToUserEventArgs.IsOperationSucceeded = false; _messageToUserEventArgs.MessageToShow = ec.Message; ShowMessageToUserEvent?.Invoke(this, _messageToUserEventArgs); } RetrievedEmployees = _retrievedEmployees; return; }
/// <summary> /// This function takes care of adding, modifying and making inactive the employ record /// </summary> /// <returns></returns> public bool UpdateEmployee() { Mouse.OverrideCursor = Cursors.Wait; bool isEmployeeUpdated = false; string msgToShow = string.Empty; try { string updatedTime = DateTimeOffset.Now.ToString("yyyy-MM-dd'T'HH:mm:ssK"); _employeeToProcess.UpdatedAt = updatedTime; switch (_updateType) { case UpdateType.AddEmployee: _employeeToProcess.Status = "Active"; _employeeToProcess.CreatedAt = updatedTime; _employeeToProcess = _employeeUpdateHandler.AddEmployee(_employeeToProcess); isEmployeeUpdated = (_employeeToProcess.Id > 0); break; case UpdateType.EditEmployee: isEmployeeUpdated = _employeeUpdateHandler.EditEmployee(_employeeToProcess); break; case UpdateType.RemoveEmployee: _employeeToProcess.Status = "Inactive"; isEmployeeUpdated = _employeeUpdateHandler.RemoveEmployee(_employeeToProcess.Id); break; } _messageToUserEventArgs.IsOperationSucceeded = isEmployeeUpdated; ShowMessageToUserEvent?.Invoke(this, _messageToUserEventArgs); if (isEmployeeUpdated) { //create a new employee object _employeeToProcess = new Employee(); ClearView(); } } catch (Exception ec) { _messageToUserEventArgs.IsOperationSucceeded = false; _messageToUserEventArgs.MessageToShow = ec.Message; ShowMessageToUserEvent?.Invoke(this, _messageToUserEventArgs); } Mouse.OverrideCursor = null; return(isEmployeeUpdated); }