diff --git a/src/app/Pruefungsergebnis.ts b/src/app/Pruefungsergebnis.ts new file mode 100644 index 0000000..5e46005 --- /dev/null +++ b/src/app/Pruefungsergebnis.ts @@ -0,0 +1,9 @@ +export class Pruefungsergebnis{ + apprenticeid?: number; + examid?: number; + firstname?: string; + lastname?: string; + date_of_exam?: Date; + acquired?: number; +} + diff --git a/src/app/Userlogin.ts b/src/app/Userlogin.ts new file mode 100644 index 0000000..c149982 --- /dev/null +++ b/src/app/Userlogin.ts @@ -0,0 +1,6 @@ +export class Userlogin { + id?: number; + login?: string; + name?: string; + email?: string; +} \ No newline at end of file diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 7a425bd..151150e 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -39,7 +39,12 @@ import { AngularMaterialModule } from '../app/angular-material/angular-material. import { DashComponent } from './dash/dash.component'; import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; import { LoginComponent } from './login/login.component' -import {MatCardModule} from '@angular/material/card'; +import {MatCardModule} from '@angular/material/card'; +import { PrergebnisComponent } from './prergebnis/prergebnis.component'; +import { MatOption } from '@angular/material/core'; +import { MatSelectModule } from '@angular/material/select'; +import { PruefungsergebnisComponent } from './pruefungsergebnis/pruefungsergebnis.component'; +import { MatDatepickerModule } from '@angular/material/datepicker'; @NgModule({ imports: [ @@ -61,7 +66,9 @@ import {MatCardModule} from '@angular/material/card'; MatTableModule, DragDropModule, NgbModule, - MatCardModule + MatCardModule, + MatSelectModule, + MatDatepickerModule ], declarations: [ AppComponent, @@ -83,7 +90,9 @@ import {MatCardModule} from '@angular/material/card'; Lehrling2berufComponent, AusbildungComponent, DashComponent, - LoginComponent + LoginComponent, + PrergebnisComponent, + PruefungsergebnisComponent ], providers: [], bootstrap: [ diff --git a/src/app/app.routes.ts b/src/app/app.routes.ts index 1b5367c..8ff40f5 100644 --- a/src/app/app.routes.ts +++ b/src/app/app.routes.ts @@ -13,6 +13,7 @@ import { EditLehrlingeComponent } from "./edit-lehrlinge/edit-lehrlinge.componen import { Lehrling2berufComponent } from "./lehrling2beruf/lehrling2beruf.component"; import { DashComponent } from "./dash/dash.component"; import { LoginComponent } from "./login/login.component"; +import { PrergebnisComponent } from "./prergebnis/prergebnis.component"; export const APP_ROUTES: Routes = [ { @@ -53,6 +54,10 @@ export const APP_ROUTES: Routes = [ path: 'pruefung', component: PruefungComponent }, + { + path: 'pruefungergebnis', + component: PrergebnisComponent + }, { path: 'modul', component: ModulComponent diff --git a/src/app/login/login.component.html b/src/app/login/login.component.html index 6b48292..b2643fa 100644 --- a/src/app/login/login.component.html +++ b/src/app/login/login.component.html @@ -1,24 +1,31 @@ - + Anmelden - -
-
- - E-Mail - - + + +
+ + Login + +
Bitte eine gültige E-Mail Adresse eingeben!
+
-
- - Passwort - - -
- -
+
+ + Passwort + +
Bitte ein Passwort eingeben!
+
+
- - +
+
Ungültige E-Mail oder falsches Passwort eingegeben! Bitte noch einmal.
+
+ + + + diff --git a/src/app/login/login.component.ts b/src/app/login/login.component.ts index 366726c..c529365 100644 --- a/src/app/login/login.component.ts +++ b/src/app/login/login.component.ts @@ -1,5 +1,9 @@ import { Component, OnInit } from '@angular/core'; +import { FormGroup, FormBuilder, Validators } from '@angular/forms'; import { MatCardModule } from '@angular/material/card'; +import { Router } from '@angular/router'; +import { LoginService } from '../services/login.service'; +import { Userlogin } from '../Userlogin'; @Component({ selector: 'app-login', @@ -8,12 +12,47 @@ import { MatCardModule } from '@angular/material/card'; }) export class LoginComponent implements OnInit { - constructor() { } + loginForm: any; + invalidLogin: boolean = false; + message: any; + + constructor(private formBuilder: FormBuilder, private router: Router, private loginService: LoginService) { } ngOnInit(): void { + this.loginForm = this.formBuilder.group({ + login: ['', Validators.compose([Validators.required])], + password: ['', Validators.required] + }) } - login() { + onSubmit() { + + console.log(this.loginForm.value); - } + + if(this.loginForm.invalid) + { + return; + } + + const logindata = { + login: this.loginForm.controls.login.value, + password: this.loginForm.controls.password.value + }; + + this.loginService.login(logindata).subscribe((data: any) => { + console.log(data); + this.message = data.message; + + if(data.token) { + window.localStorage.setItem('token', data.token); + this.router.navigate(['dash']); + } + else + { + this.invalidLogin = true; + alert(data.message); + } + }); +} } diff --git a/src/app/prergebnis/prergebnis.component.css b/src/app/prergebnis/prergebnis.component.css new file mode 100644 index 0000000..cdc60a0 --- /dev/null +++ b/src/app/prergebnis/prergebnis.component.css @@ -0,0 +1,17 @@ +.demo-table { + width: 100%; + } + + .row-is-clicked { + color: red; + background-color: #fdf9e9; + font-weight: bold; + } + + .mat-row.hovered { + background: #eee; +} + +.mat-row.highlighted { + background: #fdf9e9; +} diff --git a/src/app/prergebnis/prergebnis.component.html b/src/app/prergebnis/prergebnis.component.html new file mode 100644 index 0000000..971486a --- /dev/null +++ b/src/app/prergebnis/prergebnis.component.html @@ -0,0 +1,114 @@ +
+
+
+ + Ergebnis zuordnen + + + {{type.text}} + + + +
+
+
+ + Filter + + +
+
+ + Filter + + +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + +
ID {{prue.examid}} Prüfung {{prue.examshort}} Name {{prue.examname}} Beschreibung {{prue.examdescription}}
+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
Vorname {{pers.firstname}} Nachname {{pers.lastname}} Datum {{pers.date_of_exam}} Bestanden {{pers.acquired}} + +
+ +
+
+
+

+ Ausgewählt: +

+ {{selection.selected | json}} +
+
diff --git a/src/app/prergebnis/prergebnis.component.spec.ts b/src/app/prergebnis/prergebnis.component.spec.ts new file mode 100644 index 0000000..b831042 --- /dev/null +++ b/src/app/prergebnis/prergebnis.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PrergebnisComponent } from './prergebnis.component'; + +describe('PrergebnisComponent', () => { + let component: PrergebnisComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ PrergebnisComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(PrergebnisComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/prergebnis/prergebnis.component.ts b/src/app/prergebnis/prergebnis.component.ts new file mode 100644 index 0000000..11bf8a9 --- /dev/null +++ b/src/app/prergebnis/prergebnis.component.ts @@ -0,0 +1,152 @@ +import { LiveAnnouncer } from '@angular/cdk/a11y'; +import { SelectionModel } from '@angular/cdk/collections'; +import { Component, OnInit, ViewChild } from '@angular/core'; +import { MatPaginator } from '@angular/material/paginator'; +import { MatSort, Sort } from '@angular/material/sort'; +import { MatTableDataSource } from '@angular/material/table'; +import { Pruefung } from '../Pruefung'; +import { PruefungService } from '../services/pruefung.service'; +import {MatSelectModule} from '@angular/material/select'; +import { PruefungsergebnisService } from '../services/pruefungsergebnis.service'; +import { Pruefungsergebnis } from '../Pruefungsergebnis'; + +export enum SelectType { + single, + multiple +} + +@Component({ + selector: 'app-prergebnis', + templateUrl: './prergebnis.component.html', + styleUrls: ['./prergebnis.component.css'] +}) + +export class PrergebnisComponent implements OnInit { + + constructor(private Pruefung: PruefungService, + private pruefungsergebnis: PruefungsergebnisService, + private _liveAnnouncer: LiveAnnouncer, + private _ergliveAnnouncer: LiveAnnouncer) { } + + + public dataSource: any; + public ergdataSource: any; + public pruefungen: any; + public pruefergebnisse: any; + public angewaehlt: any; + public ergangewaehlt: any; + public abgewählt: any; + + displayedColumns: any = [ "examid", "examshort", "examname", "examdescription"]; + ergdisplayedColumns: any = [ "firstname", "lastname", "date_of_exam", "acquired"]; + selection = new SelectionModel(true, []); + ergselection = new SelectionModel(true, []); + displayType = SelectType.single; + + //clickedRows = new Set(); + + ngOnInit(): void { + + this.Pruefung.getPruefungen().subscribe( + ( + data: any) => { + // console.log(data); + this.pruefungen = data.exam; + this.dataSource = new MatTableDataSource(this.pruefungen); + this.dataSource.paginator = this.paginator; + this.dataSource.sort = this.sort; + }) + this.pruefungsergebnis.getPruefergebnisse().subscribe( + ( + data: any) => { + // console.log(data); + this.pruefergebnisse = data; + this.ergdataSource = new MatTableDataSource(this.pruefergebnisse); + this.ergdataSource.ergpaginator = this.ergpaginator; + this.ergdataSource.sort = this.sort; + }) + } + + selectHandler(row: Pruefung) { + if (this.displayType == SelectType.single) { + if (!this.selection.isSelected(row)) { + this.selection.clear(); + } + } + this.selection.toggle(row); + } + + ergselectHandler(row: Pruefungsergebnis) { + if (this.displayType == SelectType.single) { + if (!this.ergselection.isSelected(row)) { + this.ergselection.clear(); + } + } + this.ergselection.toggle(row); + } + + onChange(typeValue: number) { + this.displayType = typeValue; + this.selection.clear(); + } + + selectType = [ + { text: "Einfachauswahl", value: SelectType.single }, + { text: "Mehrfachauswahl", value: SelectType.multiple } + ]; + + @ViewChild('paginator') paginator: MatPaginator; + @ViewChild('ergpaginator') ergpaginator: MatPaginator; + @ViewChild(MatSort) sort: MatSort; + @ViewChild(MatSort) ergsort: MatSort; + + ngAfterViewInit() { + if(this.ergdataSource != undefined) { + this.ergdataSource.ergpaginator = this.ergpaginator; + this.ergdataSource.ergsort = this.ergsort; + console.log(this.ergdataSource); + } + else + console.log("Erg Datasource ist undefined in AfterViewInit"); + + if(this.dataSource != undefined) { + this.dataSource.paginator = this.paginator; + this.dataSource.sort = this.sort; + console.log(this.dataSource); + } + else + console.log("DataSource undefined in AfterViewInit"); + } + onclick(pruerow: any) { + this.angewaehlt = pruerow; + console.log(this.angewaehlt); + } + + applypruefFilter(event: Event) { + const filterValue = (event.target as HTMLInputElement).value; + this.dataSource.filter = filterValue.trim().toLowerCase(); + console.log("Filter: " + this.dataSource.filter); + } + + applypersonFilter(event: Event) { + const filterValue = (event.target as HTMLInputElement).value; + this.ergdataSource.filter = filterValue.trim().toLowerCase(); + console.log("Filter: " + this.ergdataSource.filter); + } + + /** Announce the change in sort state for assistive technology. */ + announceSortChange(sortState: Sort) { + if (sortState.direction) { + this._liveAnnouncer.announce(`Sorted ${sortState.direction}ending`); + } else { + this._liveAnnouncer.announce('Sorting cleared'); + } + } + ergannounceSortChange(ergsortState: Sort) { + if (ergsortState.direction) { + this._ergliveAnnouncer.announce(`Sorted ${ergsortState.direction}ending`); + } else { + this._ergliveAnnouncer.announce('Sorting cleared'); + } + } +} diff --git a/src/app/pruefungsergebnis/pruefungsergebnis.component.css b/src/app/pruefungsergebnis/pruefungsergebnis.component.css new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pruefungsergebnis/pruefungsergebnis.component.html b/src/app/pruefungsergebnis/pruefungsergebnis.component.html new file mode 100644 index 0000000..c28ff63 --- /dev/null +++ b/src/app/pruefungsergebnis/pruefungsergebnis.component.html @@ -0,0 +1 @@ +

pruefungsergebnis works!

diff --git a/src/app/pruefungsergebnis/pruefungsergebnis.component.spec.ts b/src/app/pruefungsergebnis/pruefungsergebnis.component.spec.ts new file mode 100644 index 0000000..d399961 --- /dev/null +++ b/src/app/pruefungsergebnis/pruefungsergebnis.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PruefungsergebnisComponent } from './pruefungsergebnis.component'; + +describe('PruefungsergebnisComponent', () => { + let component: PruefungsergebnisComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ PruefungsergebnisComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(PruefungsergebnisComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pruefungsergebnis/pruefungsergebnis.component.ts b/src/app/pruefungsergebnis/pruefungsergebnis.component.ts new file mode 100644 index 0000000..9bcb441 --- /dev/null +++ b/src/app/pruefungsergebnis/pruefungsergebnis.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-pruefungsergebnis', + templateUrl: './pruefungsergebnis.component.html', + styleUrls: ['./pruefungsergebnis.component.css'] +}) +export class PruefungsergebnisComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/src/app/services/login.service.spec.ts b/src/app/services/login.service.spec.ts new file mode 100644 index 0000000..299b0d5 --- /dev/null +++ b/src/app/services/login.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { LoginService } from './login.service'; + +describe('LoginService', () => { + let service: LoginService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(LoginService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/services/login.service.ts b/src/app/services/login.service.ts new file mode 100644 index 0000000..9c07e4c --- /dev/null +++ b/src/app/services/login.service.ts @@ -0,0 +1,20 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { HttpSentEvent } from '@angular/common/http'; +import { Userlogin } from '../Userlogin'; + +@Injectable({ + providedIn: 'root' +}) +export class LoginService { + + constructor(private http: HttpClient) { } + baseUrl = "http://localhost/bildungdb/api"; + + login(logindata): any { + const strloginapi = this.baseUrl + '/login.php'; + console.log(strloginapi); + return this.http.get(this.baseUrl + '/login.php', logindata); + } +} diff --git a/src/app/services/pruefungsergebnis.service.spec.ts b/src/app/services/pruefungsergebnis.service.spec.ts new file mode 100644 index 0000000..86966c9 --- /dev/null +++ b/src/app/services/pruefungsergebnis.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { PruefungsergebnisService } from './pruefungsergebnis.service'; + +describe('PruefungsergebnisService', () => { + let service: PruefungsergebnisService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(PruefungsergebnisService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/services/pruefungsergebnis.service.ts b/src/app/services/pruefungsergebnis.service.ts new file mode 100644 index 0000000..4d3c2bf --- /dev/null +++ b/src/app/services/pruefungsergebnis.service.ts @@ -0,0 +1,18 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Pruefungsergebnis } from '../Pruefungsergebnis'; + +@Injectable({ + providedIn: 'root' +}) +export class PruefungsergebnisService { + + public $url = "http://localhost/bildungdb/api/pruefungsergebnis.php"; + + constructor(private http: HttpClient) { } + + getPruefergebnisse() { + return this.http.get(this.$url); + } + +} diff --git a/src/app/sidebar/sidebar.component.html b/src/app/sidebar/sidebar.component.html index 29c3206..b52d650 100644 --- a/src/app/sidebar/sidebar.component.html +++ b/src/app/sidebar/sidebar.component.html @@ -42,6 +42,13 @@

Prüfung

+ +
  • + +

    Prüfungsergebnis

    +
    +
  • +
  • Lehrling zu Beruf

    diff --git a/src/assets/icons/fehler.png b/src/assets/icons/fehler.png new file mode 100644 index 0000000..5766fc5 Binary files /dev/null and b/src/assets/icons/fehler.png differ diff --git a/src/assets/icons/ok.png b/src/assets/icons/ok.png new file mode 100644 index 0000000..22a2c97 Binary files /dev/null and b/src/assets/icons/ok.png differ