public async Task <IActionResult> Add(EmployeeAddInputModel employeeCreate) { var result = await this.garageService.SetVehicleToEmployeeAsync(employeeCreate, this.ModelState); if (!this.ModelState.IsValid) { return(this.View(result)); } return(this.Redirect($"/{GlobalConstants.AreaAdministrationName}/{GlobalConstants.ContollerEmployeesName}")); }
public async Task <EmployeeAddViewModel> SetVehicleToEmployeeAsync(EmployeeAddInputModel employeeFromView, ModelStateDictionary modelState) { var vehicles = await this.vehiclesService.GetVehicleNames(); if (!modelState.IsValid) { var errorModel = employeeFromView.To <Employee>().To <EmployeeAddViewModel>(); errorModel.VehicleList = vehicles; return(errorModel); } var employee = await this.employeesService.GetByIdAsync <Employee>(employeeFromView.Id); if (employee == null) { Exception innerException = new Exception(nameof(employeeFromView.Id)); throw new NullReferenceException(string.Format(GarageConstants.NullReferenceId, employeeFromView.Id), innerException); } var vehicleEmployee = await this.garageRepository.All().FirstOrDefaultAsync(x => x.EmployeeId == employeeFromView.Id); if (vehicleEmployee != null) { modelState.AddModelError(nameof(vehicleEmployee.Vehicle.RegistrationNumber), string.Format(GarageConstants.ArgumentExceptionVehicleEmployeeExist, vehicleEmployee.Vehicle.RegistrationNumber)); var errorModel = employeeFromView.To <Employee>().To <EmployeeAddViewModel>(); errorModel.VehicleList = vehicles; return(errorModel); } var vehicle = await this.vehiclesService.GetAllAsync <Vehicle>().FirstOrDefaultAsync(x => x.RegistrationNumber == employeeFromView.RegistrationNumber); if (vehicle == null) { Exception innerException = new Exception(nameof(employeeFromView.RegistrationNumber)); throw new ArgumentNullException(string.Format(GarageConstants.ArgumentExceptionVehicleNotExist, employeeFromView.RegistrationNumber), innerException); } employee.VehicleEmployees.Add(new VehicleEmployee { EmployeeId = employee.Id, VehicleId = vehicle.Id }); this.employeeRepository.Update(employee); await this.employeeRepository.SaveChangesAsync(); return(employee.To <EmployeeAddViewModel>()); }