Merge pull request #200 in TEA/mina-sidor-fa-web from feature/report-changes to develop
Squashed commit of the following:
commit 72a580d3529536bfb118c0a6a45a57ca8f1ef165
Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se>
Date: Thu Oct 14 12:18:29 2021 +0200
Added better error-handling
commit f41eece77e11c325715f93f175e3250630a75382
Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se>
Date: Thu Oct 14 07:08:08 2021 +0200
Updated padding of report-links
commit e37d973707b48d7c351618ba1ec65637ffd3c9cb
Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se>
Date: Thu Oct 14 07:02:43 2021 +0200
Fixed minor issues after PR
commit 6dbf12f71f6ef4ae1dab89c92b2e23725bbce956
Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se>
Date: Wed Oct 13 15:36:41 2021 +0200
Made adjustments to signal to match other reports
commit f2260dd20eb0a7ecf8e42d18db721fe4831ee760
Merge: ec6d6ca9 bdb1d161
Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se>
Date: Wed Oct 13 12:06:02 2021 +0200
Merge branch 'develop' into feature/report-changes
commit ec6d6ca9a177345994f5bab60fe0bbc908634fe3
Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se>
Date: Wed Oct 13 09:00:03 2021 +0200
WIP - signal
This commit is contained in:
@@ -3,6 +3,7 @@ export const DELTAGARE_REPORTING_ROUTES = {
|
||||
'periodisk-redovisning': 'Periodisk redovisning',
|
||||
franvarorapport: 'Avvikelserapport (frånvaro)',
|
||||
avvikelserapport: 'Avvikelserapport (avvikelse)',
|
||||
signal: 'Signal om arbete eller studier',
|
||||
};
|
||||
|
||||
export const NAVIGATION = {
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
export enum ErsattningsGrundTypKod {
|
||||
ARBETE_HELTID = 1,
|
||||
ARBETE_DELTID = 2,
|
||||
UTBILDNING_HELTID = 3,
|
||||
UTBILDNING_DELTID = 4,
|
||||
}
|
||||
|
||||
export function getErsattningsGrundTyp(kod: number): string {
|
||||
switch (kod) {
|
||||
case 1:
|
||||
return 'Arbete heltid';
|
||||
case 2:
|
||||
return 'Arbete deltid';
|
||||
case 3:
|
||||
return 'Utbildning heltid';
|
||||
case 4:
|
||||
return 'Utbildning deltid'
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,7 @@ import { ErrorHandler, Injectable } from '@angular/core';
|
||||
import { ApmErrorHandler } from '@elastic/apm-rum-angular';
|
||||
import { Feature } from '@msfa-enums/feature.enum';
|
||||
import { environment } from '@msfa-environment';
|
||||
import { CustomError, errorToCustomError } from '@msfa-models/error/custom-error';
|
||||
import { CustomError } from '@msfa-models/error/custom-error';
|
||||
import { ErrorService } from '@msfa-services/error.service';
|
||||
|
||||
@Injectable()
|
||||
@@ -11,9 +11,10 @@ export class CustomErrorHandler implements ErrorHandler {
|
||||
private _activeFeatures = environment.activeFeatures;
|
||||
constructor(private errorService: ErrorService, public apmErrorHandler: ApmErrorHandler) {}
|
||||
|
||||
handleError(error: Error & { ngDebugContext: unknown }): void {
|
||||
const customError: CustomError = errorToCustomError(error);
|
||||
this.errorService.add(customError);
|
||||
handleError(customError: CustomError & { ngDebugContext: unknown }): void {
|
||||
if (!customError.avoidToast) {
|
||||
this.errorService.add(customError);
|
||||
}
|
||||
|
||||
if (this._elasticConfig && this._activeFeatures.includes(Feature.LOGGING)) {
|
||||
this.apmErrorHandler.handleError(customError);
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
export interface SignalRequest {
|
||||
genomforandeReferens: number;
|
||||
typ: 'arbete' | 'utbildning';
|
||||
omfattning: 'heltid' | 'deltid';
|
||||
omfattning_procent: number;
|
||||
startdatum: string;
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
export interface SignalResponse {
|
||||
typ: 'arbete' | 'utbildning';
|
||||
omfattning: 'heltid' | 'deltid';
|
||||
omfattning_procent: number;
|
||||
startdatum: string;
|
||||
}
|
||||
@@ -11,15 +11,24 @@ export class CustomError implements Error {
|
||||
timestamp: Date;
|
||||
error: Error;
|
||||
removeAfter: number;
|
||||
avoidToast?: boolean;
|
||||
|
||||
constructor(args: { error: Error; type?: ErrorType; message?: string; severity?: ErrorSeverity; stack?: string }) {
|
||||
constructor(args: {
|
||||
error: Error;
|
||||
type?: ErrorType;
|
||||
message?: string;
|
||||
severity?: ErrorSeverity;
|
||||
stack?: string;
|
||||
avoidToast?: boolean;
|
||||
}) {
|
||||
this.timestamp = new Date();
|
||||
this.id = this.timestamp.getTime().toString();
|
||||
this.type = this.name = args.type || ErrorType.UNKNOWN;
|
||||
this.type = this.name = args.type || CustomError.getErrorType(args.error);
|
||||
this.message = args.message || args.error.message;
|
||||
this.severity = args.severity || ErrorSeverity.HIGH;
|
||||
this.stack = args.stack || CustomError.getStack(args.error);
|
||||
this.error = args.error;
|
||||
this.avoidToast = args.avoidToast || false;
|
||||
this.removeAfter =
|
||||
this.severity === ErrorSeverity.LOW ? 5000 : this.severity === ErrorSeverity.MEDIUM ? 10000 : 20000;
|
||||
}
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
import { ErsattningsGrundTypKod } from '../enums/ersattning-grund-typ-kod.enum';
|
||||
|
||||
export interface SignalArbeteStudier {
|
||||
sokandeId: number;
|
||||
ersattningsgrund: ErsattningsGrundTypKod;
|
||||
antalProcent?: number;
|
||||
startDatum: Date;
|
||||
}
|
||||
|
||||
export interface SignalArbeteStudierRequestData {
|
||||
sokandeId: number;
|
||||
ersattningsgrund: ErsattningsGrundTypKod;
|
||||
antalProcent?: number;
|
||||
startDatum: Date;
|
||||
}
|
||||
|
||||
export function mapSignalArbeteStudierRequestDataToReport(data: SignalArbeteStudierRequestData): SignalArbeteStudier {
|
||||
const { sokandeId, ersattningsgrund, antalProcent, startDatum } = data;
|
||||
|
||||
return {
|
||||
sokandeId,
|
||||
ersattningsgrund,
|
||||
antalProcent,
|
||||
startDatum,
|
||||
};
|
||||
}
|
||||
19
apps/mina-sidor-fa/src/app/shared/models/signal.model.ts
Normal file
19
apps/mina-sidor-fa/src/app/shared/models/signal.model.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
import { SignalResponse } from './api/signal.response.model';
|
||||
|
||||
export interface Signal {
|
||||
type: 'arbete' | 'utbildning';
|
||||
omfattning: 'heltid' | 'deltid';
|
||||
percent: number;
|
||||
startDate: Date;
|
||||
}
|
||||
|
||||
export function mapResponseToSignal(data: SignalResponse): Signal {
|
||||
const { typ, startdatum, omfattning, omfattning_procent } = data;
|
||||
|
||||
return {
|
||||
type: typ,
|
||||
omfattning,
|
||||
percent: omfattning_procent,
|
||||
startDate: new Date(startdatum),
|
||||
};
|
||||
}
|
||||
@@ -38,7 +38,7 @@ export class AvvikelseApiService {
|
||||
catchError((error: Error) => {
|
||||
throw new CustomError({
|
||||
error,
|
||||
message: 'Det gick inte att skicka avvikelse \n\n' + error.message,
|
||||
message: `Kunde inte spara Avvikelserapport (avvikelse).\n\n${error.message}`,
|
||||
type: ErrorType.API,
|
||||
});
|
||||
})
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
import { Injectable } from '@angular/core';
|
||||
import { SignalArbeteStudier } from '@msfa-models/signal-arbete-studier.model';
|
||||
import { SignalArbeteStudierApiService } from '@msfa-services/api/signal-arbete-studier-api.service';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root',
|
||||
})
|
||||
export class DeltagareSignalArbeteStudierService {
|
||||
constructor(private signalArbeteStudierApiService: SignalArbeteStudierApiService) { }
|
||||
|
||||
public createSignalArbeteStudier$(signalArbeteStudier: SignalArbeteStudier): Promise<void> {
|
||||
return this.signalArbeteStudierApiService.createSignalArbeteStudier$(signalArbeteStudier);
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
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 { FranvaroReasonResponse } from '@msfa-models/api/franvaro-reason.response.model';
|
||||
import { FranvaroReportRequest } from '@msfa-models/api/franvaro-request.model';
|
||||
@@ -47,7 +48,15 @@ export class FranvaroReportApiService {
|
||||
return this.deltagareApiService.fetchAvropInformation$(genomforandeReferens);
|
||||
}
|
||||
|
||||
public async postFranvaroReport$(requestData: FranvaroReportRequest): Promise<void> {
|
||||
return this.httpClient.post<void>(`${this._apiBaseUrl}/franvaro`, requestData).toPromise();
|
||||
public postFranvaroReport$(requestData: FranvaroReportRequest): Observable<void> {
|
||||
return this.httpClient.post<void>(`${this._apiBaseUrl}/franvaro`, requestData).pipe(
|
||||
catchError((error: Error) => {
|
||||
throw new CustomError({
|
||||
error,
|
||||
message: `Kunde inte spara Avvikelserapport (frånvaro).\n\n${error.message}`,
|
||||
type: ErrorType.API,
|
||||
});
|
||||
})
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
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 { Activity, mapResponseToActivity } from '@msfa-models/activity.model';
|
||||
import { ActivityResponse } from '@msfa-models/api/activity.response.model';
|
||||
@@ -53,8 +54,16 @@ export class GemensamPlaneringApiService {
|
||||
);
|
||||
}
|
||||
|
||||
public async postGemensamPlanering$(requestData: GemensamPlaneringPostRequest): Promise<void> {
|
||||
return this.httpClient.post<void>(`${this._apiBaseUrl}`, requestData).toPromise();
|
||||
public postGemensamPlanering$(requestData: GemensamPlaneringPostRequest): Observable<void> {
|
||||
return this.httpClient.post<void>(`${this._apiBaseUrl}`, requestData).pipe(
|
||||
catchError((error: Error) => {
|
||||
throw new CustomError({
|
||||
error,
|
||||
message: `Kunde inte spara Gemensam planering.\n\n${error.message}`,
|
||||
type: ErrorType.API,
|
||||
});
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
constructor(private httpClient: HttpClient, private deltagareApiService: DeltagareApiService) {}
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
import { HttpClient } from '@angular/common/http';
|
||||
import { Injectable } from '@angular/core';
|
||||
import { environment } from '@msfa-environment';
|
||||
import { SignalArbeteStudier } from '@msfa-models/signal-arbete-studier.model';
|
||||
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root',
|
||||
})
|
||||
export class SignalArbeteStudierApiService {
|
||||
private _apiBaseUrl = `${environment.api.url}`;
|
||||
|
||||
public createSignalArbeteStudier$(signalArbeteStudier: SignalArbeteStudier): Promise<void> {
|
||||
return this.httpClient.post<void>(`${this._apiBaseUrl}/signal`, signalArbeteStudier).toPromise();
|
||||
}
|
||||
|
||||
constructor(private httpClient: HttpClient) { }
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
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 { SignalRequest } from '@msfa-models/api/signal.request.model';
|
||||
import { CustomError } from '@msfa-models/error/custom-error';
|
||||
import { Observable } from 'rxjs';
|
||||
import { catchError } from 'rxjs/operators';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root',
|
||||
})
|
||||
export class SignalApiService {
|
||||
private _apiBaseUrl = `${environment.api.url}/rapporter/signal`;
|
||||
|
||||
public postSignal$(requestData: SignalRequest): Observable<void> {
|
||||
return this.httpClient.post<void>(this._apiBaseUrl, requestData).pipe(
|
||||
catchError((error: Error) => {
|
||||
throw new CustomError({
|
||||
error,
|
||||
message: `Kunde inte spara Signal om arbete eller studier.\n\n${error.message}`,
|
||||
type: ErrorType.API,
|
||||
});
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
constructor(private httpClient: HttpClient) {}
|
||||
}
|
||||
Reference in New Issue
Block a user