Merge pull request #195 in TEA/mina-sidor-fa-web from feature/refactor-report-models to develop

Squashed commit of the following:

commit c99074b30eb9792ba9a67d4257c45621381da068
Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se>
Date:   Tue Oct 12 16:29:11 2021 +0200

    Removed unused model

commit d122a7f61f52e8c6c5a48a7b7700b333c388e83e
Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se>
Date:   Tue Oct 12 16:24:50 2021 +0200

    Updated models

commit 27de0084ba5f0dc5e3300ce7dbff0d27ab240941
Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se>
Date:   Tue Oct 12 16:24:33 2021 +0200

    git st
This commit is contained in:
Erik Tiekstra
2021-10-13 10:20:43 +02:00
parent bada8a5e72
commit ce87ef5aac
29 changed files with 179 additions and 248 deletions

View File

@@ -1,8 +0,0 @@
export enum FranvaroOrsaksKodEnum {
Sjuk = 15,
Arbete = 16,
OkandOrsak = 17,
AnnanKandOrsak = 18,
VAB = 26,
Utbildning = 27,
}

View File

@@ -0,0 +1,5 @@
export interface AvvikelseQuestionsResponse {
id: string;
name: string;
required: boolean;
}

View File

@@ -0,0 +1,4 @@
export interface AvvikelseReasonResponse {
id: number;
name: string;
}

View File

@@ -0,0 +1,15 @@
export interface AvvikelseQuestionRequest {
fraga: string;
svar: string;
}
export interface AvvikelseRequest {
avvikelseOrsakskod: string;
frageformular: AvvikelseQuestionRequest[];
rapporteringsdatum: string;
}
export interface AvvikelseReportRequest {
genomforandeReferens: number;
avvikelseAlternativ: AvvikelseRequest;
}

View File

@@ -1,11 +1,9 @@
export interface AvvikelseQuestionResponse {
fraga: string;
svar: string;
}
export interface AvvikelseResponse {
avvikelseOrsakskod: string;
frageformular: AvvikelseQuestionResponse[];
frageformular: {
fraga: string;
svar: string;
}[];
rapporteringsdatum: string;
}

View File

@@ -1,4 +0,0 @@
export interface FragorForAvvikelserResponse {
id: string;
name: string;
}

View File

@@ -0,0 +1,4 @@
export interface FranvaroReasonResponse {
id: number;
name: string;
}

View File

@@ -0,0 +1,20 @@
export interface FranvaroRequest {
avvikelseOrsaksKod: string;
datum: string;
heldag: boolean;
startTid: string;
slutTid: string;
alternativForKandaOrsaker: {
typ: string;
motivering: string;
} | null;
forvantadNarvaro: {
startTid: string;
slutTid: string;
};
}
export interface FranvaroReportRequest {
genomforandeReferens: number;
franvaro: FranvaroRequest;
}

View File

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

View File

@@ -1,4 +0,0 @@
export interface KandaAvvikelseKoderResponse {
id: number;
name: string;
}

View File

@@ -1,5 +0,0 @@
export interface OrsaksKoderAvvikelseResponse {
id: number;
name: string;
state: number
}

View File

@@ -1,4 +0,0 @@
export interface OrsaksKoderFranvaroResponse {
id: number;
name: string;
}

View File

@@ -0,0 +1,17 @@
import { AvvikelseQuestionsResponse } from './api/avvikelse-question.response.model';
export interface AvvikelseQuestion {
name: string;
id: string;
required: boolean;
}
export function mapResponseToAvvikelseQuestion(data: AvvikelseQuestionsResponse): AvvikelseQuestion {
const { name, id, required } = data;
return {
name: name,
id: id,
required,
};
}

View File

@@ -0,0 +1,15 @@
import { AvvikelseReasonResponse } from './api/avvikelse-reason.response.model';
export interface AvvikelseReason {
name: string;
id: number;
}
export function mapResponseToAvvikelseReason(data: AvvikelseReasonResponse): AvvikelseReason {
const { name, id } = data;
return {
name,
id,
};
}

View File

@@ -1,17 +1,13 @@
import { Fraga } from '@msfa-models/fraga.model';
import { AvvikelseResponse } from './api/avvikelse-response.model';
import { FragorForAvvikelser } from './fragor-for-avvikelser.model';
import { FranvaroAlternativ } from './franvaro-alternativ.model';
import { OrsaksKoderAvvikelse } from './orsaks-koder-avvikelse.model';
export interface AvvikelseQuestion {
question: string;
answer: string;
}
import { AvvikelseQuestion } from './avvikelse-question.model';
import { AvvikelseReason } from './avvikelse-reason.model';
export interface Avvikelse {
reason: string;
questions: AvvikelseQuestion[];
questions: {
question: string;
answer: string;
}[];
date: Date;
}
@@ -20,36 +16,15 @@ export interface AvvikelseReport {
avvikelse: Avvikelse;
}
export interface AvvikelseAlternativ_OLD {
avvikelseorsakskod: string;
frageformular: Fraga[];
rapporteringsdatum: string;
}
export interface Avvikelse_OLD {
genomforandeReferens: number;
avvikelseAlternativ?: AvvikelseAlternativ_OLD;
}
export interface AvvikelseRequestData_OLD {
genomforandeReferens: number;
avvikelseAlternativ: AvvikelseAlternativ_OLD;
}
export interface FranvaroRequestData_OLD {
genomforandeReferens: number;
franvaro: FranvaroAlternativ;
}
export function mapResponseToAvvikelse(
data: AvvikelseResponse,
reasons: OrsaksKoderAvvikelse[],
questions: FragorForAvvikelser[]
reasons: AvvikelseReason[],
questions: AvvikelseQuestion[]
): Avvikelse {
const { avvikelseOrsakskod, rapporteringsdatum, frageformular } = data;
return {
reason: reasons.find(reason => reason.id === avvikelseOrsakskod).name,
reason: reasons.find(reason => reason.id.toString() === avvikelseOrsakskod).name,
questions: frageformular.map(fraga => ({
question: questions.find(question => question.id === fraga.fraga).name,
answer: fraga.svar,
@@ -57,13 +32,3 @@ export function mapResponseToAvvikelse(
date: new Date(rapporteringsdatum),
};
}
export function mapAvvikelseRequestDataToAvvikelse_OLD(data: AvvikelseRequestData_OLD): Avvikelse_OLD {
return data;
// const { genomforandeReferens, avvikelseAlternativ } = data;
//
// return {
// genomforandeReferens,
// avvikelseAlternativ,
// };
}

View File

@@ -1,16 +0,0 @@
import { FragorForAvvikelserResponse } from './api/fragor-for-avvikelser.response';
export interface FragorForAvvikelser {
name: string;
id: string;
descriptionIsRequired?: boolean
}
export function mapResponseToFragorForAvvikelser(data: FragorForAvvikelserResponse): FragorForAvvikelser {
const { name, id } = data;
return {
name: name,
id: id
}
}

View File

@@ -0,0 +1,15 @@
import { FranvaroReasonResponse } from './api/franvaro-reason.response.model';
export interface FranvaroReason {
name: string;
value: number;
}
export function mapResponseToFranvaroReason(data: FranvaroReasonResponse): FranvaroReason {
const { name, id } = data;
return {
name,
value: id,
};
}

View File

@@ -1,5 +1,5 @@
import { FranvaroResponse } from './api/franvaro-response.model';
import { OrsaksKoderFranvaro } from './orsaks-koder-franvaro.model';
import { FranvaroReason } from './franvaro-reason.model';
export interface Franvaro {
reason: string;
@@ -20,8 +20,8 @@ export interface FranvaroReport {
export function mapResponseToFranvaro(
data: FranvaroResponse,
reasons: OrsaksKoderFranvaro[],
otherKnownReasons: OrsaksKoderFranvaro[]
reasons: FranvaroReason[],
otherKnownReasons: FranvaroReason[]
): Franvaro {
const { avvikelseOrsaksKod, datum, heldag, startTid, slutTid, alternativForKandaOrsaker, forvantadNarvaro } = data;

View File

@@ -20,7 +20,7 @@ export function mapGemensamPlaneringToGemensamPlaneringPostRequest(
const { genomforandeReferens, distance, activityIds } = gemensamPlanering;
return {
genomforandeReferens: genomforandeReferens.toString(),
genomforandeReferens,
distans: distance,
aktivitetsIds: activityIds,
};

View File

@@ -1,18 +0,0 @@
import { OrsaksKoderAvvikelseResponse } from './api/orsaks-koder-avvikelse.response.model';
// TODO rename to AvvikelseOrsaker
export interface OrsaksKoderAvvikelse {
name: string;
id: string; //AvvikelseOrsaksKodEnum
state: number;
}
export function mapResponseToOrsaksKoderAvvikelse(data: OrsaksKoderAvvikelseResponse): OrsaksKoderAvvikelse {
const { name, id, state } = data;
return {
name,
id: id.toString(),
state,
};
}

View File

@@ -1,32 +0,0 @@
import { FranvaroOrsaksKodEnum } from '@msfa-enums/franvaro-orsak-kod.enum';
import { KandaAvvikelseKoderResponse } from './api/kanda-avvikelse-koder.response.model';
import { OrsaksKoderFranvaroResponse } from './api/orsaks-koder-franvaro.response.model';
export interface OrsaksKoderFranvaro {
name: string;
value: FranvaroOrsaksKodEnum;
index?: number;
}
export interface KandaAvvikelseKoder {
name: string;
value: number;
}
export function mapResponseToOrsaksKoderFranvaro(data: OrsaksKoderFranvaroResponse): OrsaksKoderFranvaro {
const { name, id } = data;
return {
name,
value: id,
};
}
export function mapResponseToAndraKandaOrsaker(data: KandaAvvikelseKoderResponse): KandaAvvikelseKoder {
const { name, id } = data;
return {
name,
value: id,
};
}

View File

@@ -1,5 +0,0 @@
export interface OutOfOfficeDate {
id: number;
start: Date;
end: Date;
}

View File

@@ -2,19 +2,12 @@ import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { ErrorType } from '@msfa-enums/error-type.enum';
import { environment } from '@msfa-environment';
import { FragorForAvvikelserResponse } from '@msfa-models/api/fragor-for-avvikelser.response';
import { KandaAvvikelseKoderResponse } from '@msfa-models/api/kanda-avvikelse-koder.response.model';
import { OrsaksKoderAvvikelseResponse } from '@msfa-models/api/orsaks-koder-avvikelse.response.model';
import { Avvikelse_OLD } from '@msfa-models/avvikelse.model';
import { AvvikelseQuestionsResponse } from '@msfa-models/api/avvikelse-question.response.model';
import { AvvikelseReasonResponse } from '@msfa-models/api/avvikelse-reason.response.model';
import { AvvikelseReportRequest } from '@msfa-models/api/avvikelse-request.model';
import { AvvikelseQuestion, mapResponseToAvvikelseQuestion } from '@msfa-models/avvikelse-question.model';
import { AvvikelseReason, mapResponseToAvvikelseReason } from '@msfa-models/avvikelse-reason.model';
import { CustomError } from '@msfa-models/error/custom-error';
import { FragorForAvvikelser, mapResponseToFragorForAvvikelser } from '@msfa-models/fragor-for-avvikelser.model';
import { mapResponseToOrsaksKoderAvvikelse, OrsaksKoderAvvikelse } from '@msfa-models/orsaks-koder-avvikelse.model';
import {
KandaAvvikelseKoder,
mapResponseToAndraKandaOrsaker,
mapResponseToOrsaksKoderFranvaro,
OrsaksKoderFranvaro,
} from '@msfa-models/orsaks-koder-franvaro.model';
import { Observable } from 'rxjs';
import { catchError, filter, map } from 'rxjs/operators';
@@ -26,39 +19,21 @@ export class AvvikelseApiService {
constructor(private httpClient: HttpClient) {}
public getOrsaksKoderFranvaro$(): Observable<OrsaksKoderFranvaro[]> {
return this.httpClient
.get<{ data: OrsaksKoderAvvikelseResponse[] }>(`${this._apiBaseUrl}/orsakskoderfranvaro`)
.pipe(
filter(response => !!response?.data),
map(({ data }) => data.map(orsak => mapResponseToOrsaksKoderFranvaro(orsak)))
);
}
public getOrsaksKoderAvvikelse$(): Observable<OrsaksKoderAvvikelse[]> {
return this.httpClient
.get<{ data: OrsaksKoderAvvikelseResponse[] }>(`${this._apiBaseUrl}/orsakskoderavvikelse`)
.pipe(
filter(response => !!response?.data),
map(({ data }) => data.map(avvikelse => mapResponseToOrsaksKoderAvvikelse(avvikelse)))
);
}
public getAndraKandaOrsaker$(): Observable<KandaAvvikelseKoder[]> {
return this.httpClient.get<{ data: KandaAvvikelseKoderResponse[] }>(`${this._apiBaseUrl}/kandaavvikelsekoder`).pipe(
public fetchAvvikelseReasons$(): Observable<AvvikelseReason[]> {
return this.httpClient.get<{ data: AvvikelseReasonResponse[] }>(`${this._apiBaseUrl}/orsakskoderavvikelse`).pipe(
filter(response => !!response?.data),
map(({ data }) => data.map(annanKandOrsak => mapResponseToAndraKandaOrsaker(annanKandOrsak)))
map(({ data }) => data.map(avvikelse => mapResponseToAvvikelseReason(avvikelse)))
);
}
public getFragorForAvvikelser$(): Observable<FragorForAvvikelser[]> {
return this.httpClient.get<{ data: FragorForAvvikelserResponse[] }>(`${this._apiBaseUrl}/fragorforavvikelser`).pipe(
public fetchAvvikelseQuestions$(): Observable<AvvikelseQuestion[]> {
return this.httpClient.get<{ data: AvvikelseQuestionsResponse[] }>(`${this._apiBaseUrl}/fragorforavvikelser`).pipe(
filter(response => !!response?.data),
map(({ data }) => data.map(fraga => mapResponseToFragorForAvvikelser(fraga)))
map(({ data }) => data.map(fraga => mapResponseToAvvikelseQuestion(fraga)))
);
}
public createAvvikelse$(avvikelse: Avvikelse_OLD): Observable<unknown> {
public createAvvikelse$(avvikelse: AvvikelseReportRequest): Observable<unknown> {
return this.httpClient.post<void>(`${this._apiBaseUrl}/avvikelse`, avvikelse).pipe(
catchError((error: Error) => {
throw new CustomError({
@@ -69,8 +44,4 @@ export class AvvikelseApiService {
})
);
}
public createFranvaro$(avvikelse: Avvikelse_OLD): Promise<void> {
return this.httpClient.post<void>(`${this._apiBaseUrl}/franvaro`, avvikelse).toPromise();
}
}

View File

@@ -1,11 +1,11 @@
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { environment } from '@msfa-environment';
import { OrsaksKoderFranvaroResponse } from '@msfa-models/api/orsaks-koder-franvaro.response.model';
import { FranvaroReasonResponse } from '@msfa-models/api/franvaro-reason.response.model';
import { FranvaroReportRequest } from '@msfa-models/api/franvaro-request.model';
import { Avrop } from '@msfa-models/avrop.model';
import { FranvaroRequestData_OLD } from '@msfa-models/avvikelse.model';
import { CustomError, errorToCustomError } from '@msfa-models/error/custom-error';
import { mapResponseToOrsaksKoderFranvaro, OrsaksKoderFranvaro } from '@msfa-models/orsaks-koder-franvaro.model';
import { FranvaroReason, mapResponseToFranvaroReason } from '@msfa-models/franvaro-reason.model';
import { DeltagareApiService } from '@msfa-services/api/deltagare.api.service';
import { Observable } from 'rxjs';
import { catchError, filter, map, shareReplay } from 'rxjs/operators';
@@ -18,10 +18,10 @@ export class FranvaroReportApiService {
constructor(private httpClient: HttpClient, private deltagareApiService: DeltagareApiService) {}
public fetchReasons$(): Observable<OrsaksKoderFranvaro[]> {
return this.httpClient.get<{ data: OrsaksKoderFranvaroResponse[] }>(`${this._apiBaseUrl}/orsakskoderfranvaro`).pipe(
public fetchReasons$(): Observable<FranvaroReason[]> {
return this.httpClient.get<{ data: FranvaroReasonResponse[] }>(`${this._apiBaseUrl}/orsakskoderfranvaro`).pipe(
filter(response => !!response?.data),
map(({ data }) => data.map(reason => mapResponseToOrsaksKoderFranvaro(reason))),
map(({ data }) => data.map(reason => mapResponseToFranvaroReason(reason))),
catchError((error: Error & { status: number }) => {
throw new CustomError(
errorToCustomError({ ...error, message: `Kunde inte hämta orsaker till frånvaro.\n\n${error.message}` })
@@ -30,10 +30,10 @@ export class FranvaroReportApiService {
shareReplay(1)
);
}
public fetchOtherKnownReasons$(): Observable<OrsaksKoderFranvaro[]> {
return this.httpClient.get<{ data: OrsaksKoderFranvaroResponse[] }>(`${this._apiBaseUrl}/kandaavvikelsekoder`).pipe(
public fetchOtherKnownReasons$(): Observable<FranvaroReason[]> {
return this.httpClient.get<{ data: FranvaroReasonResponse[] }>(`${this._apiBaseUrl}/kandaavvikelsekoder`).pipe(
filter(response => !!response?.data),
map(({ data }) => data.map(reason => mapResponseToOrsaksKoderFranvaro(reason))),
map(({ data }) => data.map(reason => mapResponseToFranvaroReason(reason))),
catchError((error: Error & { status: number }) => {
throw new CustomError(
errorToCustomError({ ...error, message: `Kunde inte hämta kända orsaker till frånvaro.\n\n${error.message}` })
@@ -47,7 +47,7 @@ export class FranvaroReportApiService {
return this.deltagareApiService.fetchAvropInformation$(genomforandeReferens);
}
public async postFranvaroReport$(requestData: FranvaroRequestData_OLD): Promise<void> {
public async postFranvaroReport$(requestData: FranvaroReportRequest): Promise<void> {
return this.httpClient.post<void>(`${this._apiBaseUrl}/franvaro`, requestData).toPromise();
}
}

View File

@@ -7,15 +7,15 @@ import { FranvaroReportResponse } from '@msfa-models/api/franvaro-response.model
import { GemensamPlaneringResponse } from '@msfa-models/api/gemensam-planering.response.model';
import { Params } from '@msfa-models/api/params.model';
import { Avrop } from '@msfa-models/avrop.model';
import { AvvikelseQuestion } from '@msfa-models/avvikelse-question.model';
import { AvvikelseReason } from '@msfa-models/avvikelse-reason.model';
import { AvvikelseReport, mapResponseToAvvikelse } from '@msfa-models/avvikelse.model';
import { FragorForAvvikelser } from '@msfa-models/fragor-for-avvikelser.model';
import { FranvaroReason } from '@msfa-models/franvaro-reason.model';
import { FranvaroReport, mapResponseToFranvaro } from '@msfa-models/franvaro.model';
import {
GemensamPlaneringDetailed,
mapResponseToGemensamPlaneringDetailed,
} from '@msfa-models/gemensam-planering.model';
import { OrsaksKoderAvvikelse } from '@msfa-models/orsaks-koder-avvikelse.model';
import { OrsaksKoderFranvaro } from '@msfa-models/orsaks-koder-franvaro.model';
import { DeltagareApiService } from '@msfa-services/api/deltagare.api.service';
import { combineLatest, Observable } from 'rxjs';
import { filter, map, switchMap } from 'rxjs/operators';
@@ -29,12 +29,12 @@ import { GemensamPlaneringApiService } from './gemensam-planering-api.service';
export class ReportApiService {
private _apiBaseUrl = `${environment.api.url}/handlingar`;
private _avvikelseReasons$: Observable<OrsaksKoderAvvikelse[]> = this.avvikelseApiService.getOrsaksKoderAvvikelse$();
private _avvikelseQuestions$: Observable<FragorForAvvikelser[]> = this.avvikelseApiService.getFragorForAvvikelser$();
private _avvikelseReasons$: Observable<AvvikelseReason[]> = this.avvikelseApiService.fetchAvvikelseReasons$();
private _avvikelseQuestions$: Observable<AvvikelseQuestion[]> = this.avvikelseApiService.fetchAvvikelseQuestions$();
private _activities$: Observable<Activity[]> = this.gemensamPlaneringApiService.fetchActivities$();
private _franvaroReasons$: Observable<OrsaksKoderFranvaro[]> = this.franvaroReportApiService.fetchReasons$();
private _franvaroReasons$: Observable<FranvaroReason[]> = this.franvaroReportApiService.fetchReasons$();
private _otherFranvaroReasons$: Observable<
OrsaksKoderFranvaro[]
FranvaroReason[]
> = this.franvaroReportApiService.fetchOtherKnownReasons$();
constructor(