IDK
Some checks failed
Playwright Tests / test (pull_request) Failing after 3m29s

This commit is contained in:
Dorian Nemec 2025-01-22 11:41:43 +01:00
parent 2a337f3586
commit d94d6cd1bc
8 changed files with 79 additions and 31 deletions

View file

@ -40,8 +40,9 @@ export const routes: Routes = [
canActivate: [AuthGuard],
},
{
path: "mitarbeiterdetails",
path: "mitarbeiterdetails/:id",
component: EmployeeDetailComponent,
canActivate: [AuthGuard],
},
{
path: "qualifikationbearbeiten/:id",

View file

@ -1,25 +1,25 @@
<div class="d-flex flex-col" style="height: 100%;">
<app-navigation-bar></app-navigation-bar>
<div class="p-3" style="width: 100%;">
<a href="" class="btn btn-primary">Zurück</a>
<button class="btn btn-primary" (click)="goToEmployeePage()">Zurück</button>
<div class="row align-items-start pt-3">
<div class="col">
<h1>Name des Mitarbeiters</h1>
<p><strong>Straße: </strong>Straße des Benutzers</p>
<p><strong>Postleitzahl: </strong>Postleitzahl des Benutzers</p>
<p><strong>Stadt: </strong>Stadt des Benutzers</p>
<p><strong>Telefonnummer: </strong>Telefonnummer des Benutzers</p>
<button class="btn btn-danger">Löschen</button>
<button class="ms-3 btn btn-primary">Bearbeiten</button>
<h1>{{ employee.firstName }} {{ employee.lastName }} </h1>
<p><strong>Straße: </strong>{{ employee.street }}</p>
<p><strong>Postleitzahl: </strong>{{ employee.postcode }}</p>
<p><strong>Stadt: </strong>{{ employee.city }}</p>
<p><strong>Telefonnummer: </strong>{{ employee.phone }}s</p>
<button class="btn btn-danger" (click)="deleteEmployee(currentId)">Löschen</button>
<button class="ms-3 btn btn-primary" (click)="editEmployee(currentId)">Bearbeiten</button>
</div>
<div class="col">
<h2>Qualifikationen</h2>
<ul class="list-group" style="width: fit-content;">
<li class="list-group-item">Qualifikation 1</li>
<li class="list-group-item">Qualifikation 2</li>
<li class="list-group-item">Qualifikation 3</li>
<li class="list-group-item">Qualifikation 4</li>
<li class="list-group-item">Qualifikation 5</li>
@for(skill of skillSet; track skill) {
<li class="list-group-item">{{ skill }}</li>
}
</ul>
</div>
</div>

View file

@ -1,5 +1,11 @@
import { Component } from '@angular/core';
import { NavigationBarComponent } from '../navigation-bar/navigation-bar.component';
import {Component} from '@angular/core';
import {NavigationBarComponent} from '../navigation-bar/navigation-bar.component';
import {EmployeeNameAndSkillDataDTO, EmployeeResponseDTO} from "../../models/mitarbeiter";
import {EmployeeService} from "../../service/employee.service";
import {ActivatedRoute, Router} from "@angular/router";
import {Observable} from "rxjs";
import {QualificationGetDTO} from "../../models/skill";
import {SkillService} from "../../service/skill.service";
@Component({
selector: 'app-employee-detail',
@ -9,5 +15,31 @@ import { NavigationBarComponent } from '../navigation-bar/navigation-bar.compone
styleUrl: './employee-detail.component.css'
})
export class EmployeeDetailComponent {
employee!: EmployeeResponseDTO;
skillSet: string[] = [];
currentId: number = 0;
constructor(private employeeService: EmployeeService, private router: Router, private route: ActivatedRoute, private skillService: SkillService) {
this.currentId = this.route.snapshot.params['id'];
this.employeeService.getEmployeeById(this.route.snapshot.params['id']).subscribe(employee => {
this.employee = employee;
this.skillSet = this.employee.skillSet?.map(skill => skill.skill) || [];
});
}
editEmployee(id: number) {
this.router.navigate([`/mitarbeiterbearbeiten/${id}`]);
}
goToEmployeePage(){
this.router.navigate(['mitarbeiter']);
}
deleteEmployee(id: number) {
this.employeeService.deleteEmployee(id);
this.router.navigate([`mitarbeiter`]);
}
protected readonly EmployeeService = EmployeeService;
}

View file

@ -17,6 +17,7 @@ export class MitarbeiterErstellenComponent {
constructor(private employeeService: EmployeeService, private route: ActivatedRoute, private router: Router) { }
submitted(mitarbeiter: EmployeeResponseDTO) {
console.log(mitarbeiter)
this.employeeService.createEmployee(mitarbeiter);
this.returnToEmployeeOverview();
}

View file

@ -11,7 +11,7 @@ import { Observable, of } from 'rxjs';
@Component({
selector: 'app-mitarbeiter-form',
standalone: true,
imports: [MitarbeiterFormComponent, ReactiveFormsModule, NgFor, AsyncPipe],
imports: [ReactiveFormsModule, NgFor, AsyncPipe],
templateUrl: './mitarbeiter-form.component.html',
styleUrl: './mitarbeiter-form.component.css'
})
@ -24,9 +24,7 @@ export class MitarbeiterFormComponent {
public hasAllSkills: boolean = false;
errorMessages: Record<string, string> = {};
constructor(public http: HttpClient, public router: Router, private skillService: SkillService) {
}
constructor(public http: HttpClient, public router: Router, private skillService: SkillService) {}
returnToEmployeeOverview() {
this.router.navigate(["mitarbeiter"]);
@ -40,7 +38,7 @@ export class MitarbeiterFormComponent {
postcode: new FormControl(this.mitarbeiter.postcode, [Validators.required, Validators.minLength(5), Validators.maxLength(5)]),
city: new FormControl(this.mitarbeiter.city, Validators.required),
phone: new FormControl(this.mitarbeiter.phone, [Validators.required, Validators.pattern('^[- +()0-9]+$')]),
newSkill: new FormControl(),
newSkill: new FormControl(null, Validators.required) // Added
});
}
@ -88,6 +86,7 @@ export class MitarbeiterFormComponent {
const newSkill = skills.filter(skill => skill.id == id)[0];
this.mitarbeiter.skillSet?.push(newSkill);
this.skillsChanged();
this.mitarbeiterForm.get("newSkill")?.reset(null); // Added
});
}

View file

@ -46,7 +46,7 @@
<td>{{ employee.city }}</td>
<td>{{ employee.phone }}</td>
<td>
<button class="btn btn-primary me-2" (click)="editEmployee(employee.id)">Edit</button>
<button class="btn btn-primary me-2" (click)="goToEmployeeDetailPage(employee.id)">Details</button>
<button class="btn btn-danger" (click)="deleteEmployee(employee.id)">Delete</button>
</td>
</tr>

View file

@ -17,7 +17,9 @@ export class MitarbeiterverwaltungViewComponent implements OnInit {
employees: Array<EmployeeResponseDTO> = [];
searchForm!: FormGroup;
constructor(private employeeService: EmployeeService, private router: Router) {}
constructor(private employeeService: EmployeeService, private router: Router) {
this.updateEmployees();
}
submit() {
const searchTerm = this.searchForm.get("search")?.value || '';
@ -55,10 +57,18 @@ export class MitarbeiterverwaltungViewComponent implements OnInit {
this.employees = this.employees.filter(employee => employee.id != id);
}
goToEmployeeDetailPage(id: number){
this.router.navigate([`/mitarbeiterdetails/${id}`]);
}
updateEmployees() {
this.employeeService.getAllEmployees().subscribe(employees => this.employees = employees);
}
ngOnInit(): void {
this.searchForm = new FormGroup({
search: new FormControl(''),
});
this.employeeService.getAllEmployees().subscribe(employees => this.employees = employees);
this.updateEmployees();
}
}

View file

@ -1,10 +1,10 @@
import { HttpClient } from "@angular/common/http";
import { Injectable } from "@angular/core";
import { EmployeesForAQualificationDTO, QualificationGetDTO, QualificationPostDTO } from "../models/skill";
import { Observable } from "rxjs";
import { EmployeeNameDataDTO } from "../models/mitarbeiter";
import { EmployeeService } from "./employee.service";
import { Environment } from "../environments/environment";
import {HttpClient} from "@angular/common/http";
import {Injectable} from "@angular/core";
import {EmployeesForAQualificationDTO, QualificationGetDTO, QualificationPostDTO} from "../models/skill";
import {Observable} from "rxjs";
import {EmployeeNameAndSkillDataDTO, EmployeeNameDataDTO} from "../models/mitarbeiter";
import {EmployeeService} from "./employee.service";
import {Environment} from "../environments/environment";
@Injectable({
providedIn: 'root'
@ -47,4 +47,9 @@ export class SkillService {
getEmployeesBySkill(id: number): Observable<EmployeesForAQualificationDTO> {
return this.http.get<EmployeesForAQualificationDTO>(`${SkillService.BASE_URL}/qualifications/${id}/employees`);
}
getSkillsOfEmployee(id: number): Observable<EmployeeNameAndSkillDataDTO> {
return this.http.get<EmployeeNameAndSkillDataDTO>(`${SkillService.BASE_URL}/employees/${id}/qualifications`);
}
}