From 5c12b2b7f467ca57e44f295ce40ccd07e2d20197 Mon Sep 17 00:00:00 2001 From: Erik Tiekstra Date: Thu, 4 Nov 2021 08:34:59 +0100 Subject: [PATCH] feat(avrop): Updated Avrop response model and fixed mappings. (TV-873) Squashed commit of the following: commit a03d179cd05a2266b11ac01acb2f2e07f9bb943d Author: Erik Tiekstra Date: Thu Nov 4 08:31:59 2021 +0100 Updated name of AvropData model to AvropAndMeta commit d5e40567c991c15b23ac5b0978b3cc9c7084d697 Author: Erik Tiekstra Date: Thu Nov 4 08:26:42 2021 +0100 Updated Avrop response model and mapping function --- .../src/app/pages/avrop/avrop.component.ts | 8 +- .../avrop-list/avrop-list.component.ts | 10 +- .../avrop-row/avrop-row.component.ts | 4 +- .../shared/models/api/avrop.response.model.ts | 44 +++----- .../src/app/shared/models/avrop.model.ts | 102 +++++++++--------- .../shared/services/api/avrop-api.service.ts | 14 +-- .../src/app/shared/services/avrop.service.ts | 12 +-- 7 files changed, 93 insertions(+), 101 deletions(-) diff --git a/apps/mina-sidor-fa/src/app/pages/avrop/avrop.component.ts b/apps/mina-sidor-fa/src/app/pages/avrop/avrop.component.ts index 4b79b08..11c2571 100644 --- a/apps/mina-sidor-fa/src/app/pages/avrop/avrop.component.ts +++ b/apps/mina-sidor-fa/src/app/pages/avrop/avrop.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, Component, OnDestroy } from '@angular/core'; -import { AvropCompact, AvropCompactData } from '@msfa-models/avrop.model'; +import { Avrop, AvropAndMeta } from '@msfa-models/avrop.model'; import { Handledare } from '@msfa-models/handledare.model'; import { AvropService } from '@msfa-services/avrop.service'; import { Observable } from 'rxjs'; @@ -14,8 +14,8 @@ export class AvropComponent implements OnDestroy { readonly totalAmountOfSteps = 3; currentStep$: Observable = this.avropService.currentStep$; error$: Observable = this.avropService.error$; - avropData$: Observable = this.avropService.avropData$; - selectedAvrop$: Observable = this.avropService.selectedAvrop$; + avropData$: Observable = this.avropService.avropData$; + selectedAvrop$: Observable = this.avropService.selectedAvrop$; availableHandledare$: Observable = this.avropService.availableHandledare$; selectedHandledare$: Observable = this.avropService.selectedHandledare$; avropIsLocked$: Observable = this.avropService.avropIsLocked$; @@ -30,7 +30,7 @@ export class AvropComponent implements OnDestroy { this.returnToStep1(); } - updateSelectedAvrop(deltagareList: AvropCompact[], currentStep: number): void { + updateSelectedAvrop(deltagareList: Avrop[], currentStep: number): void { if (currentStep !== 1 && !deltagareList.length) { this.avropService.goToStep1(); } else { diff --git a/apps/mina-sidor-fa/src/app/pages/avrop/components/avrop-list/avrop-list.component.ts b/apps/mina-sidor-fa/src/app/pages/avrop/components/avrop-list/avrop-list.component.ts index 878b18c..877b281 100644 --- a/apps/mina-sidor-fa/src/app/pages/avrop/components/avrop-list/avrop-list.component.ts +++ b/apps/mina-sidor-fa/src/app/pages/avrop/components/avrop-list/avrop-list.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; -import { Avrop, AvropCompact } from '@msfa-models/avrop.model'; +import { Avrop } from '@msfa-models/avrop.model'; import { Handledare } from '@msfa-models/handledare.model'; import { PaginationMeta } from '@msfa-models/pagination-meta.model'; @@ -10,18 +10,18 @@ import { PaginationMeta } from '@msfa-models/pagination-meta.model'; changeDetection: ChangeDetectionStrategy.OnPush, }) export class AvropListComponent { - @Input() availableAvrop: AvropCompact[]; + @Input() availableAvrop: Avrop[]; @Input() paginationMeta: PaginationMeta; - @Input() selectedAvrop: AvropCompact[]; + @Input() selectedAvrop: Avrop[]; @Input() handledare: Handledare; @Input() isLocked: boolean; @Input() isSubmitted: boolean; @Input() handledareConfirmed: boolean; @Input() avropLoading: boolean; - @Output() selectionChanged = new EventEmitter(); + @Output() selectionChanged = new EventEmitter(); @Output() paginated = new EventEmitter(); - get avropRows(): AvropCompact[] { + get avropRows(): Avrop[] { return this.isLocked ? this.selectedAvrop : this.availableAvrop; } get currentPage(): number { diff --git a/apps/mina-sidor-fa/src/app/pages/avrop/components/avrop-row/avrop-row.component.ts b/apps/mina-sidor-fa/src/app/pages/avrop/components/avrop-row/avrop-row.component.ts index 7be26d6..6989407 100644 --- a/apps/mina-sidor-fa/src/app/pages/avrop/components/avrop-row/avrop-row.component.ts +++ b/apps/mina-sidor-fa/src/app/pages/avrop/components/avrop-row/avrop-row.component.ts @@ -1,6 +1,6 @@ import { ButtonVariation } from '@af/digi-ng/_button/button'; import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; -import { AvropCompact } from '@msfa-models/avrop.model'; +import { Avrop } from '@msfa-models/avrop.model'; import { Handledare } from '@msfa-models/handledare.model'; @Component({ @@ -10,7 +10,7 @@ import { Handledare } from '@msfa-models/handledare.model'; changeDetection: ChangeDetectionStrategy.OnPush, }) export class AvropRowComponent { - @Input() avrop: AvropCompact; + @Input() avrop: Avrop; @Input() isSelected: boolean; @Input() isLocked: boolean; @Input() isSubmitted: boolean; diff --git a/apps/mina-sidor-fa/src/app/shared/models/api/avrop.response.model.ts b/apps/mina-sidor-fa/src/app/shared/models/api/avrop.response.model.ts index 3e6dd2b..80fe551 100644 --- a/apps/mina-sidor-fa/src/app/shared/models/api/avrop.response.model.ts +++ b/apps/mina-sidor-fa/src/app/shared/models/api/avrop.response.model.ts @@ -2,38 +2,28 @@ import { PaginationMeta } from '@msfa-models/pagination-meta.model'; export interface AvropResponse { id: string; - deltagare: string; - genomforandeReferens: number; - orgId: string; - leverantorId: number; - organisationsnummer: string; - utforandeVerksamhetId: number; - utforandeverksamhet: string; - kommunKod: string; - kommun: string; - utforandeAdressId: number; - adress: string; - ordernummer: string; - bokningsId: number; - personnummer: string; - sokandeId: number; - tjanstekod: string; - tjansteNamn: string; - deltagandeGrad: number; - startdatumAvrop: string; - slutdatumAvrop: string; - aktnummerDiariet: string; - tolkbehov: string; - sprakstod: string; + fullName: string; + tjanst: string; + startDate: Date; + endDate: Date; + originalEndDate: string | null; + sprakstod: string | null; + tolkbehov: string | null; + utforandeVerksamhet: string; + utforandeAdress: string; sparkod: string; - sparNamn: string; - handledareCiamUserId: string; + genomforandeReferens: number; + participationFrequency: number; + receivedTimestamp: Date; + handledareCiamUserId: string | null; handledare: string; - recievedTimestamp: Date; + hasAvbrott: boolean; hasGemensamPlanering: boolean; + + //personnummer: string; } -export interface AvropApiResponse { +export interface AvropAndMetaResponse { data: AvropResponse[]; meta: PaginationMeta; } diff --git a/apps/mina-sidor-fa/src/app/shared/models/avrop.model.ts b/apps/mina-sidor-fa/src/app/shared/models/avrop.model.ts index 5b3ed9c..4575cea 100644 --- a/apps/mina-sidor-fa/src/app/shared/models/avrop.model.ts +++ b/apps/mina-sidor-fa/src/app/shared/models/avrop.model.ts @@ -1,83 +1,85 @@ import { TrackName } from '@msfa-enums/track-name.enum'; -import { mapStringToSsn } from '@msfa-utils/map-string-to-ssn.util'; import { AvropResponse } from './api/avrop.response.model'; import { PaginationMeta } from './pagination-meta.model'; -export interface AvropCompact { - id: string; // id - sokandeId: number; // sokandeId - fullName: string; // deltagare - tjanst: string; // tjansteNamn - startDate: Date; // startdatumAvrop - endDate: Date; // slutdatumAvrop - tolkbehov: string; // tolkbehov - sprakstod: string; // sprakstod - kommun: string; // kommun - utforandeAdress: string; // adress - trackCode: string; // sparkod - trackName: TrackName; // sparNamn - genomforandeReferens: number; // genomforandeReferens -} - -export interface Avrop extends AvropCompact { - ssn: string; // personnummer - genomforandeReferens: number; // genomforandeReferens - participationFrequency: number; // deltagandeGrad - utforandeVerksamhet: string; // utforandeverksamhet +export interface Avrop { + id: string; + fullName: string; + tjanst: string; + startDate: Date; + endDate: Date; + originalEndDate: Date; + sprakstod: string; + tolkbehov: string; + utforandeVerksamhet: string; + utforandeAdress: string; + trackCode: string; + trackName: TrackName; + genomforandeReferens: number; + participationFrequency: number; handledareCiamUserId: string; handledare: string; receivedTimestamp: Date; hasGemensamPlanering: boolean; + hasAvbrott: boolean; + + ssn: string; // personnummer + kommun: string; } -export interface AvropCompactData { - data: AvropCompact[]; +export interface AvropAndMeta { + data: Avrop[]; meta: PaginationMeta; } export function mapAvropResponseToAvrop(data: AvropResponse): Avrop { const { id, - sokandeId, - deltagare, - tjansteNamn, - startdatumAvrop, - slutdatumAvrop, - tolkbehov, + fullName, + tjanst, + startDate, + endDate, + originalEndDate, sprakstod, - kommun, - adress, + tolkbehov, + utforandeAdress, + utforandeVerksamhet, sparkod, - personnummer, genomforandeReferens, - deltagandeGrad, - utforandeverksamhet, + participationFrequency, + receivedTimestamp, handledareCiamUserId, handledare, - recievedTimestamp, + hasAvbrott, hasGemensamPlanering, + + // kommun + // personnummer, } = data; return { id, - sokandeId, - fullName: deltagare, - tjanst: tjansteNamn, - startDate: new Date(startdatumAvrop), - endDate: new Date(slutdatumAvrop), - tolkbehov: tolkbehov, - sprakstod: sprakstod, - kommun, - utforandeAdress: adress, + fullName, + tjanst, + startDate: new Date(startDate), + endDate: new Date(endDate), + originalEndDate: new Date(originalEndDate), + tolkbehov, + sprakstod, + utforandeVerksamhet, + utforandeAdress, + // kommun, + kommun: '', trackCode: sparkod, trackName: (TrackName[sparkod] || TrackName.UNKNOWN) as TrackName, - ssn: mapStringToSsn(personnummer), + // ssn: mapStringToSsn(personnummer), + ssn: '', genomforandeReferens, - participationFrequency: deltagandeGrad, - utforandeVerksamhet: utforandeverksamhet, - handledareCiamUserId: handledareCiamUserId, + participationFrequency, + handledareCiamUserId, handledare, - receivedTimestamp: new Date(recievedTimestamp), + receivedTimestamp: new Date(receivedTimestamp), + hasAvbrott, hasGemensamPlanering, }; } diff --git a/apps/mina-sidor-fa/src/app/shared/services/api/avrop-api.service.ts b/apps/mina-sidor-fa/src/app/shared/services/api/avrop-api.service.ts index 17d08d3..29937d5 100644 --- a/apps/mina-sidor-fa/src/app/shared/services/api/avrop-api.service.ts +++ b/apps/mina-sidor-fa/src/app/shared/services/api/avrop-api.service.ts @@ -2,10 +2,10 @@ import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { environment } from '@msfa-environment'; import { AvropFilterResponse } from '@msfa-models/api/avrop-filter.response.model'; -import { AvropApiResponse } from '@msfa-models/api/avrop.response.model'; +import { AvropAndMetaResponse } from '@msfa-models/api/avrop.response.model'; import { Params } from '@msfa-models/api/params.model'; import { AvropFilter, mapResponseToAvropFilter } from '@msfa-models/avrop-filter.model'; -import { AvropCompact, AvropCompactData, mapAvropResponseToAvrop } from '@msfa-models/avrop.model'; +import { Avrop, AvropAndMeta, mapAvropResponseToAvrop } from '@msfa-models/avrop.model'; import { CustomError, errorToCustomError } from '@msfa-models/error/custom-error'; import { Handledare } from '@msfa-models/handledare.model'; import { BehaviorSubject, Observable, of } from 'rxjs'; @@ -16,20 +16,20 @@ import { catchError, filter, map } from 'rxjs/operators'; }) export class AvropApiService { private _apiBaseUrl = `${environment.api.url}/avrop`; - private _lockedAvropSnapshot$ = new BehaviorSubject(null); + private _lockedAvropSnapshot$ = new BehaviorSubject(null); private _availableHandledareSnapshot$ = new BehaviorSubject(null); private _showUnauthorizedError$ = new BehaviorSubject(false); public showUnauthorizedError$: Observable = this._showUnauthorizedError$.asObservable(); constructor(private httpClient: HttpClient) {} - get lockedAvropValue(): AvropCompact[] { + get lockedAvropValue(): Avrop[] { return this._lockedAvropSnapshot$.getValue(); } - fetchAvrop$(params: Params): Observable { + fetchAvrop$(params: Params): Observable { return this.httpClient - .get(`${this._apiBaseUrl}`, { params }) + .get(`${this._apiBaseUrl}`, { params }) .pipe( map(({ data, meta }) => ({ data: data.map(avrop => mapAvropResponseToAvrop(avrop)), meta })), catchError((error: Error & { status: number }) => { @@ -72,7 +72,7 @@ export class AvropApiService { ); } - async assignHandledare(avrop: AvropCompact[], handledareId: string): Promise { + async assignHandledare(avrop: Avrop[], handledareId: string): Promise { const params: Params = { avropIds: avrop.map(deltagare => deltagare.id), ciamUserId: handledareId, diff --git a/apps/mina-sidor-fa/src/app/shared/services/avrop.service.ts b/apps/mina-sidor-fa/src/app/shared/services/avrop.service.ts index b85c1d9..f96b29c 100644 --- a/apps/mina-sidor-fa/src/app/shared/services/avrop.service.ts +++ b/apps/mina-sidor-fa/src/app/shared/services/avrop.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@angular/core'; import { AvropParams, Params } from '@msfa-models/api/params.model'; -import { AvropCompact, AvropCompactData } from '@msfa-models/avrop.model'; +import { Avrop, AvropAndMeta } from '@msfa-models/avrop.model'; import { Handledare } from '@msfa-models/handledare.model'; import { AvropApiService } from '@msfa-services/api/avrop-api.service'; import { MultiselectFilterOption } from '@msfa-shared/components/multiselect/multiselect-filter-option'; @@ -22,7 +22,7 @@ const DEFAULT_PARAMS: AvropParams = { }) export class AvropService { private _params$ = new BehaviorSubject(DEFAULT_PARAMS); - private _selectedAvrop$ = new BehaviorSubject([]); + private _selectedAvrop$ = new BehaviorSubject([]); private _avropIsLocked$ = new BehaviorSubject(null); private _selectedHandledareId$ = new BehaviorSubject(null); private _handledareIsConfirmed$ = new BehaviorSubject(false); @@ -47,7 +47,7 @@ export class AvropService { map(({ filteredKommuner }) => filteredKommuner), distinctUntilChanged() ); - public selectedAvrop$: Observable = this._selectedAvrop$.asObservable(); + public selectedAvrop$: Observable = this._selectedAvrop$.asObservable(); public avropIsLocked$: Observable = this._avropIsLocked$.asObservable(); public selectedHandledare$: Observable = this._selectedHandledareId$.pipe( switchMap(handledareId => @@ -58,7 +58,7 @@ export class AvropService { : of(null as null) ) ); - public avropData$: Observable = combineLatest([this._avropIsSubmitted$, this._params$]).pipe( + public avropData$: Observable = combineLatest([this._avropIsSubmitted$, this._params$]).pipe( switchMap(() => { this._avropLoading$.next(true); return this.avropApiService.fetchAvrop$(this._filtersForAvrop).pipe( @@ -99,7 +99,7 @@ export class AvropService { shareReplay(1) ); - private _lockedAvrop$: Observable = combineLatest([this.selectedAvrop$, this.avropIsLocked$]).pipe( + private _lockedAvrop$: Observable = combineLatest([this.selectedAvrop$, this.avropIsLocked$]).pipe( map(([selectedAvrop, isLocked]) => (isLocked ? selectedAvrop : null)) ); @@ -200,7 +200,7 @@ export class AvropService { constructor(private avropApiService: AvropApiService, private handledareApiService: HandledareApiService) {} - public setSelectedAvrop(deltagare: AvropCompact[]): void { + public setSelectedAvrop(deltagare: Avrop[]): void { this._selectedAvrop$.next(deltagare); }