diff --git a/src/app/components/mitarbeiter-form/mitarbeiter-form.component.ts b/src/app/components/mitarbeiter-form/mitarbeiter-form.component.ts index 0e73354..f9ed6af 100644 --- a/src/app/components/mitarbeiter-form/mitarbeiter-form.component.ts +++ b/src/app/components/mitarbeiter-form/mitarbeiter-form.component.ts @@ -104,7 +104,7 @@ export class MitarbeiterFormComponent { Object.keys(this.mitarbeiterForm.controls).forEach(field => { const control = this.mitarbeiterForm.get(field); - if (control && control.errors && control.touched) { + if (control && control.errors) { this.errorMessages[field] = Object.keys(control.errors) .map(errorKey => this.validationErrorMessages[errorKey] || `Unknown error: ${errorKey}`) .join(' '); diff --git a/src/app/components/qualifikation-form/qualifikation-form.component.html b/src/app/components/qualifikation-form/qualifikation-form.component.html index d00be94..a881a16 100644 --- a/src/app/components/qualifikation-form/qualifikation-form.component.html +++ b/src/app/components/qualifikation-form/qualifikation-form.component.html @@ -3,6 +3,9 @@
+ @if (errorMessages['name']) { +
{{errorMessages['name']}}
+ }
@@ -11,17 +14,7 @@

Employees possessing the qualification

- + @if (addableEmployees.length > 0) {
- +
- - - + } - - + diff --git a/src/app/components/qualifikation-form/qualifikation-form.component.ts b/src/app/components/qualifikation-form/qualifikation-form.component.ts index a6f1e82..608ac05 100644 --- a/src/app/components/qualifikation-form/qualifikation-form.component.ts +++ b/src/app/components/qualifikation-form/qualifikation-form.component.ts @@ -6,6 +6,7 @@ import { EmployeeService } from '../../service/employee.service'; import { concatMap, every, from, lastValueFrom, Observable, of, switchMap, take, tap } from 'rxjs'; import { EmployeeNameDataDTO, EmployeeResponseDTO } from '../../models/mitarbeiter'; import { AsyncPipe } from '@angular/common'; +import { Router } from '@angular/router'; @Component({ selector: 'app-qualifikation-form', @@ -19,55 +20,28 @@ export class QualifikationFormComponent { @Output() skillChange = new EventEmitter(); public skillForm!: FormGroup; - public employees: Observable = of(); - public allEmployees: Observable> = of([]); - public hiddenEmployees: Array = []; - public addedEmployees: Observable> = of([]); - public addedEmployeesIds: Array = []; + public addableEmployees: Array = []; + public addedEmployees: Array = []; errorMessages: Record = {}; - constructor(private skillService: SkillService, private employeeService: EmployeeService) { } - removeEmployee(id: number) { - this.hiddenEmployees.push(id); - } + constructor(private skillService: SkillService, private employeeService: EmployeeService, private router: Router) { } - isEmployeeHidden(id: number) { - for (const employeeId of this.hiddenEmployees) { - if (id == employeeId) { - return true + private validationErrorMessages: Record = { + required: "This field is required", + }; + + updateErrorMessages(): void { + this.errorMessages = {}; + + Object.keys(this.skillForm.controls).forEach(field => { + const control = this.skillForm.get(field); + + if (control && control.errors) { + this.errorMessages[field] = Object.keys(control.errors) + .map(errorKey => this.validationErrorMessages[errorKey] || `Unknown error: ${errorKey}`) + .join(' '); } - } - - return false; - } - - employeeHasSkill(employee: EmployeeResponseDTO) { - - for (const id of this.addedEmployeesIds) { - console.log(id, employee.id); - if (id == employee.id) { - return true; - } - } - - for (const employeeSkill of employee.skillSet || []) { - if (employeeSkill.id == this.skill.id) { - return true; - } - } - - return false; - } - - addEmployee() { - console.log("a"); - const employeeId = this.skillForm.get("newEmployee")?.value; - this.employeeService.getEmployeeById(employeeId).subscribe(employee => { - this.addedEmployees.pipe(tap(employeeList => { - employeeList.push(employee); - this.addedEmployeesIds.push(employee.id); - })).subscribe(); }); } @@ -78,13 +52,75 @@ export class QualifikationFormComponent { }); } + + addEmployee() { + const employeeId = Number(this.skillForm.get("newEmployee")?.value); + const employee = this.addableEmployees.find(emp => emp.id === employeeId); + + if (employee) { + this.addableEmployees = this.addableEmployees.filter(emp => emp.id !== employeeId); + + this.addedEmployees.push(employee); + } + } + + removeEmployee(employeeId: number) { + const employee = this.addedEmployees.find(emp => emp.id === employeeId); + + if (employee) { + this.addedEmployees = this.addedEmployees.filter(emp => emp.id !== employeeId); + + this.employeeService.getEmployeeById(employee.id).subscribe(employeeDto => { + this.addableEmployees.push(employeeDto); + }); + } + } + + updateEmployeeLists() { + if (this.skill.id != -1) { + this.employeeService.getAllEmployees().subscribe(employees => { + this.addableEmployees = employees; + + this.skillService.getEmployeesBySkill(this.skill.id).subscribe(addedEmployeesResponse => { + this.addedEmployees = addedEmployeesResponse.employees; + + this.addableEmployees = this.addableEmployees.filter(employee => { + return !this.addedEmployees.some(added => added.id === employee.id); + }); + }); + }); + } + } + + submit() { + this.updateErrorMessages(); + if (!this.skillForm.valid) { + return; + } + + for (const employee of this.addedEmployees) { + this.employeeService.getEmployeeById(employee.id).subscribe(employeeResponse => { + this.employeeService.addSkillToEmployee(this.skill.id, employeeResponse); + }); + } + + for (const employee of this.addableEmployees) { + this.employeeService.removeSkillFromEmployee(this.skill.id, employee); + } + + this.skill.skill = this.skillForm.get("name")?.value; + this.skillChange.emit(this.skill); + + this.router.navigate(["/qualifikationen"]); + } + ngOnChanges(): void { this.setUpForm(); - this.employees = this.skillService.getEmployeesBySkill(this.skill.id); + this.updateEmployeeLists(); } ngOnInit() { this.setUpForm(); - this.allEmployees = this.employeeService.getAllEmployees(); + this.updateEmployeeLists(); } } diff --git a/src/app/components/qualifikaton-bearbeiten-view/qualifikaton-bearbeiten-view.component.ts b/src/app/components/qualifikaton-bearbeiten-view/qualifikaton-bearbeiten-view.component.ts index ed279c8..791b8ec 100644 --- a/src/app/components/qualifikaton-bearbeiten-view/qualifikaton-bearbeiten-view.component.ts +++ b/src/app/components/qualifikaton-bearbeiten-view/qualifikaton-bearbeiten-view.component.ts @@ -18,12 +18,12 @@ export class QualifikatonBearbeitenViewComponent { constructor(private skillService: SkillService, private route: ActivatedRoute) {} submitted(skill: QualificationGetDTO) { - + this.skillService.updateSkill(skill); } ngOnInit(): void { this.skill = { - id: 0, + id: -1, skill: '', }; diff --git a/src/app/service/employee.service.ts b/src/app/service/employee.service.ts index 17062f7..caaf5e1 100644 --- a/src/app/service/employee.service.ts +++ b/src/app/service/employee.service.ts @@ -54,10 +54,20 @@ export class EmployeeService { return this.http.get(`${SkillService.BASE_URL}/employees/${id}`); } + removeSkillFromEmployee(skillId: number, employee: EmployeeResponseDTO) { + let employeePut = this.responseDtoToPutDto(employee); + if (employeePut.skillSet.indexOf(skillId) != 1) { + employeePut.skillSet = employeePut.skillSet.filter(skill => skill != skillId); + } + + this.http.put(`${SkillService.BASE_URL}/employees/${employee.id}`, employeePut).subscribe(); + } addSkillToEmployee(skillId: number, employee: EmployeeResponseDTO) { let employeePut = this.responseDtoToPutDto(employee); - employeePut.skillSet.push(skillId); + if (employeePut.skillSet.indexOf(skillId) == -1) { + employeePut.skillSet.push(skillId); + } this.http.put(`${SkillService.BASE_URL}/employees/${employee.id}`, employeePut).subscribe(); } diff --git a/src/app/service/skill.service.ts b/src/app/service/skill.service.ts index 8b044ef..9e0beb1 100644 --- a/src/app/service/skill.service.ts +++ b/src/app/service/skill.service.ts @@ -1,6 +1,6 @@ import { HttpClient } from "@angular/common/http"; import { Injectable } from "@angular/core"; -import { EmployeesForAQualificationDTO, QualificationGetDTO } from "../models/skill"; +import { EmployeesForAQualificationDTO, QualificationGetDTO, QualificationPostDTO } from "../models/skill"; import { Observable } from "rxjs"; import { EmployeeNameDataDTO } from "../models/mitarbeiter"; @@ -11,10 +11,20 @@ export class SkillService { public static readonly BASE_URL = "http://localhost:8089"; + getToPutDto(skill: QualificationGetDTO): QualificationPostDTO { + return { + skill: skill.skill, + } + } + constructor(private http: HttpClient) { } + updateSkill(skill: QualificationGetDTO) { + this.http.put(`${SkillService.BASE_URL}/qualifications/${skill.id}`, this.getToPutDto(skill)).subscribe(); + } + getAllSkills(): Observable> { return this.http.get>(`${SkillService.BASE_URL}/qualifications`); }