|
|
|
@ -1,4 +1,7 @@
|
|
|
|
|
import { Component, OnInit } from '@angular/core';
|
|
|
|
|
import { FormBuilder, FormControl, FormGroup, ValidationErrors, ValidatorFn, Validators } from '@angular/forms';
|
|
|
|
|
import { ActivatedRoute, Router } from '@angular/router';
|
|
|
|
|
import { AuthService } from 'src/app/services/auth.service';
|
|
|
|
|
import { BikesService } from '../../services/bikes.service';
|
|
|
|
|
|
|
|
|
|
@Component({
|
|
|
|
@ -7,149 +10,63 @@ import { BikesService } from '../../services/bikes.service';
|
|
|
|
|
styleUrls: ['./profile.component.scss'],
|
|
|
|
|
})
|
|
|
|
|
export class ProfileComponent implements OnInit {
|
|
|
|
|
columnInfo = [
|
|
|
|
|
{
|
|
|
|
|
dataPath: 'name',
|
|
|
|
|
translation: 'Name',
|
|
|
|
|
sticky: true,
|
|
|
|
|
link: (row: any) => {
|
|
|
|
|
return '/bike/' + row.id;
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{ dataPath: 'id', translation: 'ID', readonly: true },
|
|
|
|
|
{ dataPath: 'group', translation: 'Gruppe' },
|
|
|
|
|
{ dataPath: 'modelName', translation: 'Modell' },
|
|
|
|
|
{
|
|
|
|
|
dataPath: 'insuranceData.billing',
|
|
|
|
|
translation: 'Versicherung Abrechnung',
|
|
|
|
|
},
|
|
|
|
|
{ dataPath: 'insuranceData.hasFixedRate', translation: 'Pauschale j/n' },
|
|
|
|
|
{ dataPath: 'insuranceData.fixedRate', translation: 'Pauschale Betrag' },
|
|
|
|
|
{ dataPath: 'insuranceData.name', translation: 'Versicherer' },
|
|
|
|
|
{ dataPath: 'insuranceData.benefactor', translation: 'Kostenträger' },
|
|
|
|
|
{ dataPath: 'insuranceData.noPnP', translation: 'Nr. P&P' },
|
|
|
|
|
{
|
|
|
|
|
dataPath: 'insuranceData.maintenanceResponsible',
|
|
|
|
|
translation: 'Wartung zuständig',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
dataPath: 'insuranceData.maintenanceBenefactor',
|
|
|
|
|
translation: 'Wartung Kostenträger',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
dataPath: 'insuranceData.maintenanceAgreement',
|
|
|
|
|
translation: 'Wartungsvereinbarung',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
dataPath: 'insuranceData.projectAllowance',
|
|
|
|
|
translation: 'Projektzuschuss',
|
|
|
|
|
},
|
|
|
|
|
{ dataPath: 'insuranceData.notes', translation: 'Sonstiges' },
|
|
|
|
|
{ dataPath: 'dimensionsAndLoad.bikeLength', translation: 'Länge' },
|
|
|
|
|
{ dataPath: 'dimensionsAndLoad.bikeWeight', translation: 'Gewicht' },
|
|
|
|
|
{ dataPath: 'dimensionsAndLoad.bikeHeight', translation: 'Höhe' },
|
|
|
|
|
{ dataPath: 'dimensionsAndLoad.bikeWidth', translation: 'Breite' },
|
|
|
|
|
{ dataPath: 'dimensionsAndLoad.boxHeightRange', translation: 'Boxhöhe' },
|
|
|
|
|
{ dataPath: 'dimensionsAndLoad.boxLengthRange', translation: 'Boxlänge' },
|
|
|
|
|
{ dataPath: 'dimensionsAndLoad.boxWidthRange', translation: 'Boxbreite' },
|
|
|
|
|
{
|
|
|
|
|
dataPath: 'dimensionsAndLoad.hasCoverBox',
|
|
|
|
|
translation: 'Boxabdeckung j/n',
|
|
|
|
|
},
|
|
|
|
|
{ dataPath: 'dimensionsAndLoad.lockable', translation: 'Box abschließbar' },
|
|
|
|
|
{
|
|
|
|
|
dataPath: 'dimensionsAndLoad.maxWeightBox',
|
|
|
|
|
translation: 'max Zuladung Box',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
dataPath: 'dimensionsAndLoad.maxWeightLuggageRack',
|
|
|
|
|
translation: 'max Zuladung Gepäckträger',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
dataPath: 'dimensionsAndLoad.maxWeightTotal',
|
|
|
|
|
translation: 'max Gesamtgewicht',
|
|
|
|
|
},
|
|
|
|
|
{ dataPath: 'numberOfChildren', translation: 'Anzahl Kinder' },
|
|
|
|
|
{ dataPath: 'numberOfWheels', translation: 'Anzahl Räder' },
|
|
|
|
|
{ dataPath: 'forCargo', translation: 'für Lasten j/n' },
|
|
|
|
|
{ dataPath: 'forChildren', translation: 'für Kinder j/n' },
|
|
|
|
|
{ dataPath: 'security.frameNumber', translation: 'Rahmennummer' },
|
|
|
|
|
{ dataPath: 'security.adfcCoding', translation: 'ADFC Codierung' },
|
|
|
|
|
{
|
|
|
|
|
dataPath: 'security.keyNumberAXAChain',
|
|
|
|
|
translation: 'Schlüsselnrummer Rahmenschloss',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
dataPath: 'security.keyNumberFrameLock',
|
|
|
|
|
translation: 'Schlüsselnrummer AXA-Kette',
|
|
|
|
|
},
|
|
|
|
|
{ dataPath: 'security.policeCoding', translation: 'Polizei Codierung' },
|
|
|
|
|
{ dataPath: 'technicalEquipment.bicycleShift', translation: 'Schaltung' },
|
|
|
|
|
{ dataPath: 'technicalEquipment.isEBike', translation: 'E-Bike j/n' },
|
|
|
|
|
{
|
|
|
|
|
dataPath: 'technicalEquipment.hasLightSystem',
|
|
|
|
|
translation: 'Lichtanlage j/n',
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
dataPath: 'technicalEquipment.specialFeatures',
|
|
|
|
|
translation: 'Besonderheiten',
|
|
|
|
|
},
|
|
|
|
|
{ dataPath: 'stickerBikeNameState', translation: 'Aufkleber Status' },
|
|
|
|
|
{ dataPath: 'note', translation: 'Aufkleber Kommentar' },
|
|
|
|
|
{ dataPath: 'taxes.costCenter', translation: 'Steuern Kostenstelle' },
|
|
|
|
|
{
|
|
|
|
|
dataPath: 'taxes.organisationArea',
|
|
|
|
|
translation: 'Steuern Vereinsbereich',
|
|
|
|
|
},
|
|
|
|
|
{ dataPath: 'provider.id', translation: '' },
|
|
|
|
|
{ dataPath: 'provider.formName', translation: '' },
|
|
|
|
|
{ dataPath: 'provider.privatePerson.id', translation: '' },
|
|
|
|
|
{ dataPath: 'provider.privatePerson.person.id', translation: '' },
|
|
|
|
|
{ dataPath: 'provider.privatePerson.person.name', translation: '' },
|
|
|
|
|
{ dataPath: 'provider.privatePerson.person.firstName', translation: '' },
|
|
|
|
|
{
|
|
|
|
|
dataPath: 'provider.privatePerson.person.contactInformation.email',
|
|
|
|
|
translation: '',
|
|
|
|
|
},
|
|
|
|
|
{ dataPath: 'lendingStation.id', translation: '' },
|
|
|
|
|
{ dataPath: 'lendingStation.name', translation: '' },
|
|
|
|
|
{ dataPath: 'lendingStation.address.number', translation: '' },
|
|
|
|
|
{ dataPath: 'lendingStation.address.street', translation: '' },
|
|
|
|
|
{ dataPath: 'lendingStation.address.zip', translation: '' },
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
dataService: any;
|
|
|
|
|
minPw: number = 8;
|
|
|
|
|
email = new FormControl('', [Validators.required, Validators.email]);
|
|
|
|
|
password = new FormControl('', [Validators.required]);
|
|
|
|
|
passwordNew = new FormControl('', [Validators.required,Validators.minLength(this.minPw)]);
|
|
|
|
|
passwordNew2 = new FormControl('', [Validators.required]);
|
|
|
|
|
pwGroup: FormGroup;
|
|
|
|
|
hide = true;
|
|
|
|
|
loading = false;
|
|
|
|
|
errorOccurred = false;
|
|
|
|
|
errorMessage = '';
|
|
|
|
|
|
|
|
|
|
tableDataGQLType: string = 'CargoBike';
|
|
|
|
|
tableDataGQLCreateInputType: string = 'CargoBikeCreateInput';
|
|
|
|
|
tableDataGQLUpdateInputType: string = 'CargoBikeUpdateInput';
|
|
|
|
|
returnUrl : string;
|
|
|
|
|
|
|
|
|
|
headline = 'Lastenräder';
|
|
|
|
|
constructor(private authService: AuthService, private router: Router, private route: ActivatedRoute, private formBuilder : FormBuilder) {}
|
|
|
|
|
|
|
|
|
|
loadingRowIds: string[] = [];
|
|
|
|
|
constructor(private bikesService: BikesService) {}
|
|
|
|
|
|
|
|
|
|
ngOnInit() {
|
|
|
|
|
this.dataService = this.bikesService;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
create(object: { currentId: string; row: any }) {
|
|
|
|
|
this.bikesService.createBike(object.currentId, { bike: object.row });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
lock(row: any) {
|
|
|
|
|
this.bikesService.lockBike({ id: row.id });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
save(row: any) {
|
|
|
|
|
this.bikesService.updateBike({ bike: row });
|
|
|
|
|
ngOnInit(): void {
|
|
|
|
|
this.pwGroup = this.formBuilder.group({
|
|
|
|
|
passwordNew: this.passwordNew,
|
|
|
|
|
passwordNew2: this.passwordNew2
|
|
|
|
|
}, {validator: passwordMatchValidator});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
cancel(row: any) {
|
|
|
|
|
this.bikesService.unlockBike({ id: row.id });
|
|
|
|
|
onPasswordInput() {
|
|
|
|
|
if (this.pwGroup.hasError('passwordMismatch'))
|
|
|
|
|
this.passwordNew2.setErrors([{'passwordMismatch': true}]);
|
|
|
|
|
else
|
|
|
|
|
this.passwordNew2.setErrors(null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
delete(row: any) {
|
|
|
|
|
this.bikesService.deleteBike({ id: row.id });
|
|
|
|
|
login() {
|
|
|
|
|
this.errorMessage = '';
|
|
|
|
|
this.errorOccurred = false;
|
|
|
|
|
if (this.email.invalid || this.password.invalid) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
this.loading = true;
|
|
|
|
|
this.authService
|
|
|
|
|
.login(this.email.value, this.password.value)
|
|
|
|
|
.subscribe(
|
|
|
|
|
() => this.router.navigateByUrl(this.returnUrl),
|
|
|
|
|
(error) => {
|
|
|
|
|
this.errorOccurred = true;
|
|
|
|
|
this.errorMessage =
|
|
|
|
|
error.error.message ||
|
|
|
|
|
'Ein Fehler bei Einloggen ist aufgetreten. Überprüfen Sie Ihre Internetverbindung oder versuchen Sie es später erneut.';
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
.add(() => {
|
|
|
|
|
this.loading = false;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export const passwordMatchValidator: ValidatorFn = (formGroup: FormGroup): ValidationErrors | null => {
|
|
|
|
|
if (formGroup.get('passwordNew').value === formGroup.get('passwordNew2').value)
|
|
|
|
|
return null;
|
|
|
|
|
else
|
|
|
|
|
return {passwordMismatch: true};
|
|
|
|
|
};
|
|
|
|
|