Merged PR 1325: #3272 Prozess Tab Bugfixes

#3272 Prozess Tab Bugfixes
This commit is contained in:
Nino Righi
2022-07-14 15:59:36 +00:00
committed by Andreas Schickinger
parent 9ed58b685b
commit bb7626609e
6 changed files with 91 additions and 14 deletions

View File

@@ -1,11 +1,12 @@
import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot } from '@angular/router';
import { ApplicationProcess, ApplicationService } from '@core/application';
import { BreadcrumbService } from '@core/breadcrumb';
import { first } from 'rxjs/operators';
@Injectable({ providedIn: 'root' })
export class CanActivateCustomerWithProcessIdGuard implements CanActivate {
constructor(private readonly _applicationService: ApplicationService) {}
constructor(private readonly _applicationService: ApplicationService, private readonly _breadcrumbService: BreadcrumbService) {}
async canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
const process = await this._applicationService
@@ -29,10 +30,25 @@ export class CanActivateCustomerWithProcessIdGuard implements CanActivate {
});
}
await this.removeBreadcrumbWithSameProcessId(route);
this._applicationService.activateProcess(+route.params.processId);
return true;
}
// Quick Fix #3272: Beim auslösen eines Navigationspunktes unten im Footer wird immer die Breadcrumb geupdated
// Da wir nun immer im selben Prozess bleiben, kann es vorkommen das es mehrere Breadcrumbs mit gleichem Key gibt
// Diese jedoch unterschiedliche Daten wie z.b. Path haben. Um das zu verhindern, muss der vorherige Breadcrumb immer
// gelöscht werden!
async removeBreadcrumbWithSameProcessId(route: ActivatedRouteSnapshot) {
const crumbs = await this._breadcrumbService
.getBreadcrumbByKey$(+route.params.processId)
.pipe(first())
.toPromise();
if (!!crumbs[0] && crumbs.length > 1) {
await this._breadcrumbService.removeBreadcrumb(crumbs[0].id);
}
}
processNumber(processes: ApplicationProcess[]) {
const processNumbers = processes?.map((process) => Number(process?.name?.replace(/\D/g, '')));
return !!processNumbers && processNumbers.length > 0 ? this.findMissingNumber(processNumbers) : 1;

View File

@@ -53,7 +53,7 @@ export class CanActivateCustomerGuard implements CanActivate {
id: newProcessId,
type: 'cart',
section: 'customer',
name: `Vorgang ${processes.filter((process) => process.type === 'cart').length + 1}`,
name: `Vorgang ${this.processNumber(processes.filter((process) => process.type === 'cart'))}`,
});
await this._router.navigate(['/kunde', String(newProcessId), 'customer']);
@@ -69,8 +69,8 @@ export class CanActivateCustomerGuard implements CanActivate {
id: processId,
type: 'cart',
section: 'customer',
name: `Vorgang ${processes.filter((process) => process.type === 'cart').length + 1}`,
data: undefined,
name: `Vorgang ${this.processNumber(processes.filter((process) => process.type === 'cart'))}`,
data: {},
});
// Navigation
@@ -84,11 +84,25 @@ export class CanActivateCustomerGuard implements CanActivate {
id: processId,
type: 'cart',
section: 'customer',
name: `Vorgang ${processes.filter((process) => process.type === 'cart').length + 1}`,
data: undefined,
name: `Vorgang ${this.processNumber(processes.filter((process) => process.type === 'cart'))}`,
data: {},
});
// Navigation
await this._router.navigate(['/kunde', String(processId), 'customer']);
}
processNumber(processes: ApplicationProcess[]) {
const processNumbers = processes?.map((process) => Number(process?.name?.replace(/\D/g, '')));
return !!processNumbers && processNumbers.length > 0 ? this.findMissingNumber(processNumbers) : 1;
}
findMissingNumber(processNumbers: number[]) {
for (let missingNumber = 1; missingNumber < Math.max(...processNumbers); missingNumber++) {
if (!processNumbers.find((number) => number === missingNumber)) {
return missingNumber;
}
}
return Math.max(...processNumbers) + 1;
}
}

View File

@@ -1,11 +1,12 @@
import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot } from '@angular/router';
import { ApplicationProcess, ApplicationService } from '@core/application';
import { BreadcrumbService } from '@core/breadcrumb';
import { first } from 'rxjs/operators';
@Injectable({ providedIn: 'root' })
export class CanActivateGoodsOutWithProcessIdGuard implements CanActivate {
constructor(private readonly _applicationService: ApplicationService) {}
constructor(private readonly _applicationService: ApplicationService, private readonly _breadcrumbService: BreadcrumbService) {}
async canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
const process = await this._applicationService
@@ -23,10 +24,25 @@ export class CanActivateGoodsOutWithProcessIdGuard implements CanActivate {
});
}
await this.removeBreadcrumbWithSameProcessId(route);
this._applicationService.activateProcess(+route.params.processId);
return true;
}
// Quick Fix #3272: Beim auslösen eines Navigationspunktes unten im Footer wird immer die Breadcrumb geupdated
// Da wir nun immer im selben Prozess bleiben, kann es vorkommen das es mehrere Breadcrumbs mit gleichem Key gibt
// Diese jedoch unterschiedliche Daten wie z.b. Path haben. Um das zu verhindern, muss der vorherige Breadcrumb immer
// gelöscht werden!
async removeBreadcrumbWithSameProcessId(route: ActivatedRouteSnapshot) {
const crumbs = await this._breadcrumbService
.getBreadcrumbByKey$(+route.params.processId)
.pipe(first())
.toPromise();
if (!!crumbs[0] && crumbs.length > 1) {
await this._breadcrumbService.removeBreadcrumb(crumbs[0].id);
}
}
processNumber(processes: ApplicationProcess[]) {
const processNumbers = processes?.map((process) => Number(process?.name?.replace(/\D/g, '')));
return !!processNumbers && processNumbers?.length > 0 ? Math.max(...processNumbers) + 1 : 1;

View File

@@ -72,7 +72,7 @@ export class CanActivateGoodsOutGuard implements CanActivate {
type: 'goods-out',
section: 'customer',
name: `Warenausgabe ${this.processNumber(processes.filter((process) => process.type === 'goods-out'))}`,
data: undefined,
data: {},
});
// Navigation

View File

@@ -1,11 +1,12 @@
import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot } from '@angular/router';
import { ApplicationProcess, ApplicationService } from '@core/application';
import { BreadcrumbService } from '@core/breadcrumb';
import { first } from 'rxjs/operators';
@Injectable({ providedIn: 'root' })
export class CanActivateProductWithProcessIdGuard implements CanActivate {
constructor(private readonly _applicationService: ApplicationService) {}
constructor(private readonly _applicationService: ApplicationService, private readonly _breadcrumbService: BreadcrumbService) {}
async canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
const process = await this._applicationService
@@ -29,10 +30,25 @@ export class CanActivateProductWithProcessIdGuard implements CanActivate {
});
}
await this.removeBreadcrumbWithSameProcessId(route);
this._applicationService.activateProcess(+route.params.processId);
return true;
}
// Quick Fix #3272: Beim auslösen eines Navigationspunktes unten im Footer wird immer die Breadcrumb geupdated
// Da wir nun immer im selben Prozess bleiben, kann es vorkommen das es mehrere Breadcrumbs mit gleichem Key gibt
// Diese jedoch unterschiedliche Daten wie z.b. Path haben. Um das zu verhindern, muss der vorherige Breadcrumb immer
// gelöscht werden!
async removeBreadcrumbWithSameProcessId(route: ActivatedRouteSnapshot) {
const crumbs = await this._breadcrumbService
.getBreadcrumbByKey$(+route.params.processId)
.pipe(first())
.toPromise();
if (!!crumbs[0] && crumbs.length > 1) {
await this._breadcrumbService.removeBreadcrumb(crumbs[0].id);
}
}
processNumber(processes: ApplicationProcess[]) {
const processNumbers = processes?.map((process) => Number(process?.name?.replace(/\D/g, '')));
return !!processNumbers && processNumbers.length > 0 ? this.findMissingNumber(processNumbers) : 1;

View File

@@ -55,7 +55,7 @@ export class CanActivateProductGuard implements CanActivate {
id: newProcessId,
type: 'cart',
section: 'customer',
name: `Vorgang ${processes.filter((process) => process.type === 'cart').length + 1}`,
name: `Vorgang ${this.processNumber(processes.filter((process) => process.type === 'cart'))}`,
});
await this._router.navigate(this.getUrlFromSnapshot(route, ['/kunde', String(newProcessId)]));
@@ -63,13 +63,14 @@ export class CanActivateProductGuard implements CanActivate {
// Bei offener Warenausgabe und Klick auf Footer Artikelsuche
async fromGoodsOutProcess(processes: ApplicationProcess[], route: ActivatedRouteSnapshot, processId: number) {
console.log(processes.filter((process) => process.type === 'cart').length + 1);
// Ändere type goods-out zu cart
this._applicationService.patchProcess(processId, {
id: processId,
type: 'cart',
section: 'customer',
name: `Vorgang ${processes.filter((process) => process.type === 'cart').length + 1}`,
data: undefined,
name: `Vorgang ${this.processNumber(processes.filter((process) => process.type === 'cart'))}`,
data: {},
});
// Navigation
@@ -86,8 +87,8 @@ export class CanActivateProductGuard implements CanActivate {
id: processId,
type: 'cart',
section: 'customer',
name: `Vorgang ${processes.filter((process) => process.type === 'cart').length + 1}`,
data: undefined,
name: `Vorgang ${this.processNumber(processes.filter((process) => process.type === 'cart'))}`,
data: {},
});
// Navigation
@@ -101,4 +102,18 @@ export class CanActivateProductGuard implements CanActivate {
}
return url.filter((segment) => !!segment);
}
processNumber(processes: ApplicationProcess[]) {
const processNumbers = processes?.map((process) => Number(process?.name?.replace(/\D/g, '')));
return !!processNumbers && processNumbers.length > 0 ? this.findMissingNumber(processNumbers) : 1;
}
findMissingNumber(processNumbers: number[]) {
for (let missingNumber = 1; missingNumber < Math.max(...processNumbers); missingNumber++) {
if (!processNumbers.find((number) => number === missingNumber)) {
return missingNumber;
}
}
return Math.max(...processNumbers) + 1;
}
}