Merged PR 314: #929 Stop Amoklauf (UpdateShippingDocuent pipes to process and then take 1 ensures only one update is made)

+ Add ProductGroupName to continued process shipping document products

Related work items: #929
This commit is contained in:
Sebastian Neumair
2020-09-17 15:53:04 +00:00
committed by Lorenz Hilpert
5 changed files with 190 additions and 46 deletions

View File

@@ -317,11 +317,14 @@ export class RestRemissionProductsService {
return productGroupNames$.pipe(
map((groupNames) =>
products.map((product) => {
const proudctGroupNameMatch = groupNames.find(
(name) => name.key === product.productGroup
);
return {
...product,
productGroupName: groupNames.find(
(name) => name.key === product.productGroup
).value,
productGroupName: proudctGroupNameMatch
? proudctGroupNameMatch.value
: '',
} as RemissionProduct;
})
)

View File

@@ -199,6 +199,7 @@ export class RestRemissionService extends RemissionService {
return this.returnApi
.getReturnReceipts({
eagerLoading: 3,
returnId: returnDto.id,
})
.pipe(
@@ -219,6 +220,32 @@ export class RestRemissionService extends RemissionService {
},
},
})),
withLatestFrom(this.stock$),
mergeMap(([remi, stock]) => {
const shippingDocumentsWithProductGroupNames$ = forkJoin(
// tslint:disable-next-line: no-shadowed-variable
remi.shippingDocuments.map((shippingDocument) => {
const productsWithGroupNames$ = this.restRemissionProcessService.addGroupnameToProducts(
shippingDocument.products,
stock.id
);
return productsWithGroupNames$.pipe(
map((products) => ({
...shippingDocument,
products,
}))
);
})
);
return shippingDocumentsWithProductGroupNames$.pipe(
map((shippingDocuments) => ({
...remi,
shippingDocuments,
}))
);
}),
tap((continuedRemission) =>
this.updateRemissionFilter({
remissionProcessId: continuedRemission.id,

View File

@@ -10,7 +10,16 @@ import {
SetRemissionProcess,
SetRemissionShippingDocument,
} from '../actions/remission.actions';
import { flatMap, filter, map, catchError, switchMap, first, withLatestFrom } from 'rxjs/operators';
import {
flatMap,
filter,
map,
catchError,
switchMap,
first,
withLatestFrom,
take,
} from 'rxjs/operators';
import { RemissionService, RemissionProcess } from '@isa/remission';
import { of } from 'rxjs';
import { ResetBreadcrumbsTo } from '../actions/breadcrumb.actions';
@@ -19,7 +28,12 @@ import { Router } from '@angular/router';
@Injectable({ providedIn: 'root' })
export class RemissionStateHandler {
constructor(private actions$: Actions, private store: Store, private remissionService: RemissionService, private router: Router) {
constructor(
private actions$: Actions,
private store: Store,
private remissionService: RemissionService,
private router: Router
) {
this.registerHandlers();
}
@@ -34,16 +48,22 @@ export class RemissionStateHandler {
.pipe(ofActionDispatched(UpdateShippingDocuent))
.pipe(
switchMap((action: UpdateShippingDocuent) =>
this.remissionService.getRemission({
remissionProcessId: action.remissionProcessId,
})
this.remissionService
.getRemission({
remissionProcessId: action.remissionProcessId,
})
.pipe(take(1))
)
)
.subscribe((process) => {
const activeShippingDocument = process.shippingDocuments.find((document) => !document.isCompleted);
const activeShippingDocument = process.shippingDocuments.find(
(document) => !document.isCompleted
);
if (activeShippingDocument) {
this.store.dispatch(new SetRemissionShippingDocument(activeShippingDocument));
this.store.dispatch(
new SetRemissionShippingDocument(activeShippingDocument)
);
}
return this.store.dispatch(new SetRemissionProcess(process));
@@ -75,7 +95,9 @@ export class RemissionStateHandler {
})
)
.subscribe(([result, process]) => {
this.store.dispatch(new SetRemissionFilter(result.remissionProcessId, result.filter));
this.store.dispatch(
new SetRemissionFilter(result.remissionProcessId, result.filter)
);
this.store.dispatch(new SetRemissionProcess(process));
});
}
@@ -85,16 +107,24 @@ export class RemissionStateHandler {
.pipe(ofActionDispatched(RequestDeleteShippingDocument))
.pipe(
map((action: RequestDeleteShippingDocument) => action.remissionProcess),
filter((action) => !!action.shippingDocuments && !!action.shippingDocuments[0]),
filter(
(action) =>
!!action.shippingDocuments && !!action.shippingDocuments[0]
),
flatMap((action: RemissionProcess) =>
this.remissionService
.deleteShippingDocument({
remissionProcessId: action.id,
externalId: action.externalId,
shippingDocumentId: action.shippingDocuments && action.shippingDocuments[0] && action.shippingDocuments[0].id,
shippingDocumentId:
action.shippingDocuments &&
action.shippingDocuments[0] &&
action.shippingDocuments[0].id,
})
.pipe(
filter((response) => !!response.result && response.result.deleted),
filter(
(response) => !!response.result && response.result.deleted
),
map((_) => action.id),
catchError((err) => {
console.error(err);
@@ -105,7 +135,9 @@ export class RemissionStateHandler {
)
)
.subscribe((remissionProcessId) => {
this.store.dispatch(new DeleteRemissionShippingDocument(remissionProcessId));
this.store.dispatch(
new DeleteRemissionShippingDocument(remissionProcessId)
);
this.store.dispatch(new ResetRemissionState());
this.navigateToStartPage();
});
@@ -124,6 +156,10 @@ export class RemissionStateHandler {
)
);
this.router.navigate([path]).then((_) => this.store.dispatch(new SetBranchProcessCurrentPath(path, true)));
this.router
.navigate([path])
.then((_) =>
this.store.dispatch(new SetBranchProcessCurrentPath(path, true))
);
}
}

View File

@@ -34,7 +34,7 @@ import { ReloadRemission } from '../actions/remission.actions';
import { ReloadFormState } from '../actions/forms.actions';
import { FILIALE_LANDING_PAGE } from '../../utils/app.constants';
export const SYNC_DATA_VERSION = 213;
export const SYNC_DATA_VERSION = 219;
export class AppStateModel {
currentProcesssId: number;

View File

@@ -5,7 +5,10 @@ import * as actions from '../actions/remission.actions';
import { UserStateSyncData } from '../../models/user-state-sync.model';
import { AppUserDataSync } from '../actions/app.actions';
import { isNullOrUndefined } from 'util';
import { RemissionResourceType, RemissionTargetType } from '../../../modules/remission/models/remission-resource-type.model';
import {
RemissionResourceType,
RemissionTargetType,
} from '../../../modules/remission/models/remission-resource-type.model';
import { RemissionService, RemissionProcess } from '@isa/remission';
import { RemissionFinishingProcessStatus } from '../../../modules/remission/models/remission-finishing-process-status.enum';
import get from 'lodash/get';
@@ -29,7 +32,10 @@ export class RemissionState {
constructor(private store: Store) {}
@Action(actions.SetRemissionCreated)
setRemissionCreated(ctx: StateContext<RemissionStateModel>, { status }: actions.SetRemissionCreated) {
setRemissionCreated(
ctx: StateContext<RemissionStateModel>,
{ status }: actions.SetRemissionCreated
) {
const state = ctx.getState();
const currentRemission = state.remission;
const remission: Remission = {
@@ -42,7 +48,10 @@ export class RemissionState {
}
@Action(actions.SetRemissionStarted)
setRemissionStarted(ctx: StateContext<RemissionStateModel>, { status }: actions.SetRemissionStarted) {
setRemissionStarted(
ctx: StateContext<RemissionStateModel>,
{ status }: actions.SetRemissionStarted
) {
const state = ctx.getState();
const currentRemission = state.remission;
const remission: Remission = {
@@ -54,7 +63,10 @@ export class RemissionState {
}
@Action(actions.SetRemissionCompleted)
setRemissionCompleted(ctx: StateContext<RemissionStateModel>, { status }: actions.SetRemissionCompleted) {
setRemissionCompleted(
ctx: StateContext<RemissionStateModel>,
{ status }: actions.SetRemissionCompleted
) {
const state = ctx.getState();
const currentRemission = state.remission;
const remission: Remission = {
@@ -66,14 +78,19 @@ export class RemissionState {
}
@Action(actions.SetRemissionProcess)
setRemissionProcess(ctx: StateContext<RemissionStateModel>, { remissionProcess, initialValue }: actions.SetRemissionProcess) {
setRemissionProcess(
ctx: StateContext<RemissionStateModel>,
{ remissionProcess, initialValue }: actions.SetRemissionProcess
) {
const state = ctx.getState();
const currentRemission = state.remission;
const filter = get(remissionProcess, 'filter.filter', null);
const remissionWithEmptyFilters =
filter === null ||
Object.keys(filter).every((sourceKey) =>
Object.keys(filter[sourceKey]).every((targetKey) => Object.keys(filter[sourceKey][targetKey]).length === 0)
Object.keys(filter[sourceKey]).every(
(targetKey) => Object.keys(filter[sourceKey][targetKey]).length === 0
)
);
const remission: Remission = {
...currentRemission,
@@ -101,7 +118,10 @@ export class RemissionState {
}
@Action(actions.SetRemissionFinishedProcessStatus)
setRemissionFinishedProcessStatus(ctx: StateContext<RemissionStateModel>, { status }: actions.SetRemissionFinishedProcessStatus) {
setRemissionFinishedProcessStatus(
ctx: StateContext<RemissionStateModel>,
{ status }: actions.SetRemissionFinishedProcessStatus
) {
const state = ctx.getState();
const currentRemission = state.remission;
const remission: Remission = {
@@ -113,7 +133,10 @@ export class RemissionState {
}
@Action(actions.SetRemissionScannedContainerId)
setRemissionScannedContainerId(ctx: StateContext<RemissionStateModel>, { containerId }: actions.SetRemissionScannedContainerId) {
setRemissionScannedContainerId(
ctx: StateContext<RemissionStateModel>,
{ containerId }: actions.SetRemissionScannedContainerId
) {
const state = ctx.getState();
const currentRemission = state.remission;
const remission: Remission = {
@@ -125,7 +148,10 @@ export class RemissionState {
}
@Action(actions.SetRemissionTarget)
setRemissionTarget(ctx: StateContext<RemissionStateModel>, { target, source }: actions.SetRemissionTarget) {
setRemissionTarget(
ctx: StateContext<RemissionStateModel>,
{ target, source }: actions.SetRemissionTarget
) {
const state = ctx.getState();
const currentRemission = state.remission;
let remission: Remission;
@@ -138,7 +164,10 @@ export class RemissionState {
}
@Action(actions.SetRemissionSource)
setRemissionSource(ctx: StateContext<RemissionStateModel>, { source }: actions.SetRemissionSource) {
setRemissionSource(
ctx: StateContext<RemissionStateModel>,
{ source }: actions.SetRemissionSource
) {
const state = ctx.getState();
const currentRemission = state.remission;
const remission: Remission = {
@@ -157,7 +186,10 @@ export class RemissionState {
}
@Action(actions.SetRemissionProducts)
setRemissionProducts(ctx: StateContext<RemissionStateModel>, { products }: actions.SetRemissionProducts) {
setRemissionProducts(
ctx: StateContext<RemissionStateModel>,
{ products }: actions.SetRemissionProducts
) {
const state = ctx.getState();
const currentRemission = state.remission;
const remission: Remission = {
@@ -169,7 +201,10 @@ export class RemissionState {
}
@Action(actions.SetRemissionSearchedProduct)
setRemissionSearchedProduct(ctx: StateContext<RemissionStateModel>, { product }: actions.SetRemissionSearchedProduct) {
setRemissionSearchedProduct(
ctx: StateContext<RemissionStateModel>,
{ product }: actions.SetRemissionSearchedProduct
) {
const state = ctx.getState();
const currentRemission = state.remission;
const remission: Remission = {
@@ -207,7 +242,10 @@ export class RemissionState {
}
@Action(actions.CompleteRemissionShippingDocument)
completeRemissionShippingDocument(ctx: StateContext<RemissionStateModel>, { shippingDocument }: actions.SetRemissionShippingDocument) {
completeRemissionShippingDocument(
ctx: StateContext<RemissionStateModel>,
{ shippingDocument }: actions.SetRemissionShippingDocument
) {
const state = ctx.getState();
const currentRemission = state.remission;
const currentRemissionProcess = currentRemission.remissionProcess;
@@ -217,7 +255,9 @@ export class RemissionState {
if (currentRemissionProcess.shippingDocuments) {
const shippingDocumentAlreadyExists =
currentRemissionProcess.shippingDocuments.findIndex((sd) => sd.id === shippingDocument.id) !== -1;
currentRemissionProcess.shippingDocuments.findIndex(
(sd) => sd.id === shippingDocument.id
) !== -1;
if (shippingDocumentAlreadyExists) {
updatedRemissionProcess = {
...updatedRemissionProcess,
@@ -237,7 +277,8 @@ export class RemissionState {
}
const remission: Remission = {
...currentRemission,
remissionFinishingProcessStatus: RemissionFinishingProcessStatus.containerScanned,
remissionFinishingProcessStatus:
RemissionFinishingProcessStatus.containerScanned,
remissionProcess: updatedRemissionProcess,
};
ctx.patchState({ remission });
@@ -245,7 +286,10 @@ export class RemissionState {
}
@Action(actions.DeleteRemissionShippingDocument)
deleteShippingDocument(ctx: StateContext<RemissionStateModel>, { remissionProcessId }: actions.DeleteRemissionShippingDocument) {
deleteShippingDocument(
ctx: StateContext<RemissionStateModel>,
{ remissionProcessId }: actions.DeleteRemissionShippingDocument
) {
const state = ctx.getState();
const currentRemission = state.remission;
@@ -261,7 +305,10 @@ export class RemissionState {
}
@Action(actions.SetRemissionShippingDocument)
setRemissionShippingDocument(ctx: StateContext<RemissionStateModel>, { shippingDocument }: actions.SetRemissionShippingDocument) {
setRemissionShippingDocument(
ctx: StateContext<RemissionStateModel>,
{ shippingDocument }: actions.SetRemissionShippingDocument
) {
const state = ctx.getState();
const currentRemission = state.remission;
const currentRemissionProcess = currentRemission.remissionProcess;
@@ -269,7 +316,9 @@ export class RemissionState {
if (currentRemissionProcess.shippingDocuments) {
const shippingDocumentAlreadyExists =
currentRemissionProcess.shippingDocuments.findIndex((sd) => sd.id === shippingDocument.id) !== -1;
currentRemissionProcess.shippingDocuments.findIndex(
(sd) => sd.id === shippingDocument.id
) !== -1;
if (shippingDocumentAlreadyExists) {
updatedRemissionProcess = {
...currentRemission.remissionProcess,
@@ -285,13 +334,19 @@ export class RemissionState {
} else {
updatedRemissionProcess = {
...currentRemission.remissionProcess,
shippingDocuments: [...currentRemission.remissionProcess.shippingDocuments, shippingDocument],
shippingDocuments: [
...(currentRemission.remissionProcess.shippingDocuments || []),
shippingDocument,
],
};
}
} else {
updatedRemissionProcess = {
...currentRemission.remissionProcess,
shippingDocuments: [...currentRemission.remissionProcess.shippingDocuments, shippingDocument],
shippingDocuments: [
...(currentRemission.remissionProcess.shippingDocuments || []),
shippingDocument,
],
};
}
const remission: Remission = {
@@ -364,7 +419,10 @@ export class RemissionState {
}
@Action(actions.ReloadRemission)
reload(ctx: StateContext<RemissionStateModel>, { remission }: actions.ReloadRemission) {
reload(
ctx: StateContext<RemissionStateModel>,
{ remission }: actions.ReloadRemission
) {
ctx.patchState({
remission: {
...remission,
@@ -376,7 +434,10 @@ export class RemissionState {
}
@Action(actions.SetAllOpenExistingRemissions)
setAllOpenExistingRemissions(ctx: StateContext<RemissionStateModel>, { remissionProcesses }: actions.SetAllOpenExistingRemissions) {
setAllOpenExistingRemissions(
ctx: StateContext<RemissionStateModel>,
{ remissionProcesses }: actions.SetAllOpenExistingRemissions
) {
const state = ctx.getState();
const currentExistingRemissions = state.existingRemissions;
const existingRemissions: RemissionExistingOverview = {
@@ -388,7 +449,10 @@ export class RemissionState {
}
@Action(actions.SetAllExistingRemissions)
setAllExistingRemissions(ctx: StateContext<RemissionStateModel>, { remissionProcesses }: actions.SetAllExistingRemissions) {
setAllExistingRemissions(
ctx: StateContext<RemissionStateModel>,
{ remissionProcesses }: actions.SetAllExistingRemissions
) {
const state = ctx.getState();
const currentExistingRemissions = state.existingRemissions;
const existingRemissions: RemissionExistingOverview = {
@@ -408,7 +472,10 @@ export class RemissionState {
}
@Action(actions.SetRemissionFilter)
setRemissionFilter(ctx: StateContext<RemissionStateModel>, { filter }: actions.SetRemissionFilter) {
setRemissionFilter(
ctx: StateContext<RemissionStateModel>,
{ filter }: actions.SetRemissionFilter
) {
const state = ctx.getState();
const remissionState = state.remission;
@@ -429,7 +496,10 @@ export class RemissionState {
}
@Action(actions.RequestUpdateRemissionFilter)
setIsLoadingFilters(ctx: StateContext<RemissionStateModel>, { filter }: actions.RequestUpdateRemissionFilter) {
setIsLoadingFilters(
ctx: StateContext<RemissionStateModel>,
{ filter }: actions.RequestUpdateRemissionFilter
) {
const state = ctx.getState();
const remissionState = state.remission;
@@ -441,8 +511,10 @@ export class RemissionState {
...remissionState.remissionProcess,
filter: {
...remissionState.remissionProcess.filter,
source: filter.source || remissionState.remissionProcess.filter.source,
target: filter.target || remissionState.remissionProcess.filter.target,
source:
filter.source || remissionState.remissionProcess.filter.source,
target:
filter.target || remissionState.remissionProcess.filter.target,
},
},
};
@@ -455,7 +527,10 @@ export class RemissionState {
}
@Action(actions.SetRemissionIsLoading)
setIsLoading(ctx: StateContext<RemissionStateModel>, { isLoading }: actions.SetRemissionIsLoading) {
setIsLoading(
ctx: StateContext<RemissionStateModel>,
{ isLoading }: actions.SetRemissionIsLoading
) {
const state = ctx.getState();
ctx.patchState({
@@ -465,7 +540,10 @@ export class RemissionState {
}
@Action(actions.SetRemissionActiveView)
setActiveView(ctx: StateContext<RemissionStateModel>, { activeView }: actions.SetRemissionActiveView) {
setActiveView(
ctx: StateContext<RemissionStateModel>,
{ activeView }: actions.SetRemissionActiveView
) {
const state = ctx.getState();
const remissionState = state.remission;