From 8abc5855ddb9cef37defb5f77059213af4b1579f Mon Sep 17 00:00:00 2001 From: Jan Klattenhoff Date: Wed, 15 Jan 2025 11:30:39 +0100 Subject: [PATCH] feat(mitarbeiter-bearbeiten): add employee update functionality --- ...mitarbeiter-bearbeiten-view.component.html | 2 +- .../mitarbeiter-bearbeiten-view.component.ts | 4 +++ .../mitarbeiter-form.component.html | 4 +++ .../mitarbeiter-form.component.ts | 34 +++++++++++++++++-- src/app/models/skill.ts | 3 ++ src/app/service/employee.service.ts | 5 ++- 6 files changed, 47 insertions(+), 5 deletions(-) diff --git a/src/app/components/mitarbeiter-bearbeiten-view/mitarbeiter-bearbeiten-view.component.html b/src/app/components/mitarbeiter-bearbeiten-view/mitarbeiter-bearbeiten-view.component.html index 0d53245..682a986 100644 --- a/src/app/components/mitarbeiter-bearbeiten-view/mitarbeiter-bearbeiten-view.component.html +++ b/src/app/components/mitarbeiter-bearbeiten-view/mitarbeiter-bearbeiten-view.component.html @@ -1 +1 @@ - + diff --git a/src/app/components/mitarbeiter-bearbeiten-view/mitarbeiter-bearbeiten-view.component.ts b/src/app/components/mitarbeiter-bearbeiten-view/mitarbeiter-bearbeiten-view.component.ts index a07c020..40a8719 100644 --- a/src/app/components/mitarbeiter-bearbeiten-view/mitarbeiter-bearbeiten-view.component.ts +++ b/src/app/components/mitarbeiter-bearbeiten-view/mitarbeiter-bearbeiten-view.component.ts @@ -16,6 +16,10 @@ export class MitarbeiterBearbeitenViewComponent { constructor(private employeeService: EmployeeService, private route: ActivatedRoute) { } + submitted(mitarbeiter: EmployeeResponseDTO) { + this.employeeService.updateEmployee(mitarbeiter); + } + ngOnInit(): void { this.mitarbeiter = { id: 0, diff --git a/src/app/components/mitarbeiter-form/mitarbeiter-form.component.html b/src/app/components/mitarbeiter-form/mitarbeiter-form.component.html index 2dae44f..7406844 100644 --- a/src/app/components/mitarbeiter-form/mitarbeiter-form.component.html +++ b/src/app/components/mitarbeiter-form/mitarbeiter-form.component.html @@ -41,14 +41,18 @@ } + @if (!hasAllSkills) {
+ } diff --git a/src/app/components/mitarbeiter-form/mitarbeiter-form.component.ts b/src/app/components/mitarbeiter-form/mitarbeiter-form.component.ts index c242ba6..95014cb 100644 --- a/src/app/components/mitarbeiter-form/mitarbeiter-form.component.ts +++ b/src/app/components/mitarbeiter-form/mitarbeiter-form.component.ts @@ -22,6 +22,7 @@ export class MitarbeiterFormComponent { public mitarbeiterForm!: FormGroup; public allSkills: Observable> = of([]); + public hasAllSkills: boolean = false; constructor(public http: HttpClient, public router: Router, private employeeService: EmployeeService, private skillService: SkillService) { @@ -43,18 +44,47 @@ export class MitarbeiterFormComponent { this.setupForm(); } + skillsChanged() { + this.allSkills.subscribe(skills => { + this.hasAllSkills = this.checkAllSkills(skills); + }); + } + ngOnInit(): void { this.allSkills = this.skillService.getAllSkills(); + this.skillsChanged(); this.setupForm(); } removeSkill(id?: number) { this.mitarbeiter.skillSet = this.mitarbeiter.skillSet?.filter(skill => skill.id !== id); + this.skillsChanged(); + } + + checkAllSkills(skills: Array): boolean { + const skillSet = this.mitarbeiter.skillSet || []; + + return skills.every(skill => + skillSet.some(givenSkill => skill.id === givenSkill.id) + ); + } + + hasSkill(id: number): boolean { + for (const skill of this.mitarbeiter.skillSet || []) { + if (skill.id == id) { + return true; + } + } + return false; } addSkill() { const id = Number(this.mitarbeiterForm.get("newSkill")?.value); - this.employeeService.addSkillToEmployee(id, this.mitarbeiter); + this.allSkills.subscribe(skills => { + const newSkill = skills.filter(skill => skill.id == id)[0]; + this.mitarbeiter.skillSet?.push(newSkill); + this.skillsChanged(); + }); } submit() { @@ -65,8 +95,6 @@ export class MitarbeiterFormComponent { this.mitarbeiter.city = this.mitarbeiterForm.get("city")?.value; this.mitarbeiter.phone = this.mitarbeiterForm.get("phone")?.value; - console.log(this.mitarbeiterForm); - console.log(this.mitarbeiter); this.mitarbeiterChange.emit(this.mitarbeiter); } } diff --git a/src/app/models/skill.ts b/src/app/models/skill.ts index b3db681..43b4411 100644 --- a/src/app/models/skill.ts +++ b/src/app/models/skill.ts @@ -1,3 +1,5 @@ +import { EmployeeNameDataDTO } from "./mitarbeiter"; + export interface QualificationGetDTO { id: number, skill: string, @@ -9,4 +11,5 @@ export interface QualificationPostDTO { export interface EmployeesForAQualificationDTO { qualification: QualificationGetDTO, + employees: Array, } diff --git a/src/app/service/employee.service.ts b/src/app/service/employee.service.ts index 3afb443..a8a4d38 100644 --- a/src/app/service/employee.service.ts +++ b/src/app/service/employee.service.ts @@ -8,7 +8,7 @@ import { SkillService } from "./skill.service"; providedIn: 'root' }) export class EmployeeService { - constructor(private http: HttpClient) {} + constructor(private http: HttpClient) { } responseDtoToPutDto(employee: EmployeeResponseDTO): EmployeeRequestPutDTO { @@ -23,6 +23,9 @@ export class EmployeeService { } } + updateEmployee(employee: EmployeeResponseDTO) { + this.http.put(`${SkillService.BASE_URL}/employees/${employee.id}`, this.responseDtoToPutDto(employee)).subscribe(); + } getAllEmployees(): Observable> { return this.http.get>(`${SkillService.BASE_URL}/employees`);