feat(gemensam-planering): Implemented gemensam-planering form. (TV-700)

Squashed commit of the following:

commit 2d07f37e30009c7f701af35aed65839535044bb3
Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se>
Date:   Wed Oct 6 09:33:21 2021 +0200

    Updated error handling

commit 12290b9436a06ecf0b2b8509016b14748ca17a18
Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se>
Date:   Wed Oct 6 09:10:48 2021 +0200

    Updated after PR

commit cc2fb38528069819acbc39c7b1f6d71ecae666a1
Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se>
Date:   Wed Oct 6 08:46:33 2021 +0200

    Updated proxy.conf

commit ee919de929d7b7316cd7050015fbad9c662b8718
Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se>
Date:   Wed Oct 6 08:44:00 2021 +0200

    Updated api-endpoint

commit 249ef70e14fa8db0c388ffb27f5173815a07c768
Merge: c8296cbf cc0a9aae
Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se>
Date:   Wed Oct 6 08:39:43 2021 +0200

    Merge branch 'develop' into feature/TV-700-erik

commit c8296cbff42d747df8c17cf3858f22956fd1e910
Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se>
Date:   Wed Oct 6 07:44:41 2021 +0200

    Fixed some linting and tests

commit ec0bf7cd3616859742e461ffd65a2289f5c50cd6
Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se>
Date:   Wed Oct 6 07:37:28 2021 +0200

    Changes after PR

commit aa6cee5248299056e043170b8803335529277062
Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se>
Date:   Tue Oct 5 14:56:45 2021 +0200

    Fixed some styling

commit 86de8306679fcff5ed8595f97f696cb43f38f4ac
Merge: 3b1822d8 5cee9695
Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se>
Date:   Tue Oct 5 14:46:52 2021 +0200

    Merged develop and resolved conflicts

commit 3b1822d8c8f197b789d1db5832b8e99351e8afa3
Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se>
Date:   Tue Oct 5 14:22:06 2021 +0200

    Updated GP

commit a63dfb716a3888f3e5830fe224de4cd16b1922c2
Merge: e2a8cb1c 07ec3c4a
Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se>
Date:   Tue Oct 5 07:29:23 2021 +0200

    Merge branch 'develop' into feature/TV-700

commit e2a8cb1cef2ada931f8a82ae0e9849aabb77ac4d
Author: Chingiz <chingiz.esenbaev@arbetsformedlingen.se>
Date:   Mon Oct 4 20:16:42 2021 +0200

    lamnas over till team 1
This commit is contained in:
Erik Tiekstra
2021-10-06 09:41:34 +02:00
parent cc0a9aae7f
commit 3d941fddfa
24 changed files with 522 additions and 250 deletions

View File

@@ -5,7 +5,7 @@ import { ConfirmDialog } from '@msfa-enums/confirm-dialog.enum';
selector: 'msfa-confirm-dialog',
templateUrl: './confirm-dialog.component.html',
styleUrls: ['./confirm-dialog.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class ConfirmDialogComponent {
@Input() openConfirmDialog: boolean;
@@ -21,5 +21,4 @@ export class ConfirmDialogComponent {
this.openConfirmDialog = false;
this.confirmDialogChanged.emit(ConfirmDialog.DISMISSED);
}
}

View File

@@ -1,8 +1,6 @@
export interface Activity {
id: number;
name: string;
description?: string;
subActivities: SubActivity[];
}
export interface SubActivity {
id: number;
@@ -12,15 +10,12 @@ export interface SubActivity {
export interface ActivityResponse {
id: number;
name: string;
description?: string;
subActivities: SubActivity[];
}
export function mapResponseToActivity(data: ActivityResponse): Activity {
const { id, name, description, subActivities } = data;
const { id, name } = data;
return {
id,
name,
description,
subActivities,
};
}

View File

@@ -0,0 +1,5 @@
export interface GemensamPlaneringPostRequest {
genomforandeReferens: string;
distans: boolean;
aktivitetsIds: number[];
}

View File

@@ -1,4 +1,5 @@
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';
@@ -17,6 +18,7 @@ export interface AvropCompact {
}
export interface Avrop extends AvropCompact {
ssn: string; // personnummer
genomforandeReferens: number; // genomforandeReferens
participationFrequency: number; // deltagandeGrad
utforandeVerksamhet: string; // utforandeverksamhet
@@ -41,6 +43,7 @@ export function mapAvropResponseToAvrop(data: AvropResponse): Avrop {
sprakstod,
adress,
sparkod,
personnummer,
genomforandeReferens,
deltagandeGrad,
utforandeverksamhet,
@@ -60,6 +63,7 @@ export function mapAvropResponseToAvrop(data: AvropResponse): Avrop {
utforandeAdress: adress,
trackCode: sparkod,
trackName: (TrackName[sparkod] || TrackName.UNKNOWN) as TrackName,
ssn: mapStringToSsn(personnummer),
genomforandeReferens,
participationFrequency: deltagandeGrad,
utforandeVerksamhet: utforandeverksamhet,

View File

@@ -1,3 +1,11 @@
import { GemensamPlaneringPostRequest } from './api/gemensam-planering.request.model';
export interface GemensamPlanering {
genomforandeReferens: number;
distance: boolean;
activityIds: number[];
}
export interface Activity {
activityId: string;
name: string;
@@ -9,3 +17,15 @@ export interface SubActivity {
name: string;
description: string;
}
export function mapGemensamPlaneringToGemensamPlaneringPostRequest(
gemensamPlanering: GemensamPlanering
): GemensamPlaneringPostRequest {
const { genomforandeReferens, distance, activityIds } = gemensamPlanering;
return {
genomforandeReferens: genomforandeReferens.toString(),
distans: distance,
aktivitetsIds: activityIds,
};
}

View File

@@ -2,21 +2,48 @@ import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { environment } from '@msfa-environment';
import { Activity, ActivityResponse, mapResponseToActivity } from '@msfa-models/activity.model';
import { GemensamPlaneringPostRequest } from '@msfa-models/api/gemensam-planering.request.model';
import { Avrop } from '@msfa-models/avrop.model';
import { CustomError, errorToCustomError } from '@msfa-models/error/custom-error';
import { DeltagareApiService } from '@msfa-services/api/deltagare.api.service';
import { Observable } from 'rxjs';
import { filter, map } from 'rxjs/operators';
import { catchError, filter, map, shareReplay } from 'rxjs/operators';
@Injectable({
providedIn: 'root',
})
export class GemensamPlaneringApiService {
private _apiBaseUrl = `${environment.api.url}`;
private _apiBaseUrl = `${environment.api.url}/rapporter/gemensam-planering`;
constructor(private httpClient: HttpClient) {}
public getActivities$(): Observable<Activity[]> {
return this.httpClient.get<{ data: ActivityResponse[] }>(`${this._apiBaseUrl}/activities`).pipe(
public fetchActivities$(): Observable<Activity[]> {
return this.httpClient.get<{ data: ActivityResponse[] }>(`${this._apiBaseUrl}/aktiviteter`).pipe(
filter(response => !!response?.data),
map(({ data }) => data.map(aktivitet => mapResponseToActivity(aktivitet)))
map(({ data }) => data.map(activity => mapResponseToActivity(activity))),
catchError((error: Error & { status: number }) => {
throw new CustomError(
errorToCustomError({ ...error, message: `Kunde inte hämta aktiviteter.\n\n${error.message}` })
);
}),
shareReplay(1)
);
}
public fetchAvropInformation$(genomforandeReferens: number): Observable<Avrop> {
return this.deltagareApiService.fetchAvropInformation$(genomforandeReferens);
}
public async postGemensamPlanering(requestData: GemensamPlaneringPostRequest): Promise<void> {
return this.httpClient
.post<void>(`${this._apiBaseUrl}`, requestData)
.pipe(
catchError((error: Error & { status: number }) => {
throw new CustomError(
errorToCustomError({ ...error, message: `Kunde inte spara gemensam planering.\n\n${error.message}` })
);
})
)
.toPromise();
}
constructor(private httpClient: HttpClient, private deltagareApiService: DeltagareApiService) {}
}