-
+
-
+
Inskickade rapporter
-
+
+
+ Inga rapporter finns registrerad.
+
diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/deltagare-card/components/deltagare-tab-reports/deltagare-tab-reports.component.ts b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/deltagare-card/components/deltagare-tab-reports/deltagare-tab-reports.component.ts
index 3a08f90..125fc22 100644
--- a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/deltagare-card/components/deltagare-tab-reports/deltagare-tab-reports.component.ts
+++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/deltagare-card/components/deltagare-tab-reports/deltagare-tab-reports.component.ts
@@ -1,11 +1,9 @@
import { FormSelectItem } from '@af/digi-ng/_form/form-select';
-import { ChangeDetectionStrategy, Component } from '@angular/core';
-import { AbstractControl, FormBuilder, FormGroup, Validators } from '@angular/forms';
-import { ActivatedRoute, Router } from '@angular/router';
-import { ReportsData } from '@msfa-models/reports.model';
-import { BehaviorSubject, combineLatest, Observable } from 'rxjs';
-import { distinctUntilChanged, map, shareReplay, switchMap } from 'rxjs/operators';
-import { DeltagareCardService } from '../../deltagare-card.service';
+import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
+import { AbstractControl, FormBuilder, FormGroup } from '@angular/forms';
+import { Router } from '@angular/router';
+import { ReportsData } from '@msfa-models/report.model';
+import { RequiredValidator } from '@msfa-utils/validators/required.validator';
@Component({
selector: 'msfa-deltagare-tab-reports',
@@ -14,80 +12,50 @@ import { DeltagareCardService } from '../../deltagare-card.service';
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class DeltagareTabReportsComponent {
+ @Input() reportsData: ReportsData;
+ @Input() genomforandeReferens: number;
+ @Output() reportsPaginated = new EventEmitter
();
+
readonly reportsFormControlName = 'reports';
- public currentGenomforandeReferens$: Observable = this.activatedRoute.params.pipe(
- map(params => params.genomforandeReferens as string),
- distinctUntilChanged(
- ([prevGenomforandeReferens], [currGenomforandeReferens]) => prevGenomforandeReferens === currGenomforandeReferens
- ),
- map(genomforandeReferens => +genomforandeReferens)
- );
reportPickerFormGroup: FormGroup = this.formBuilder.group({
- // eslint-disable-next-line @typescript-eslint/unbound-method
- reports: this.formBuilder.control('', [Validators.required]),
+ reports: this.formBuilder.control('', [RequiredValidator('Rapporttyp')]),
});
selectableReportTypes: Array = [
{ name: 'Avvikelse', value: 'avvikelse' },
{ name: 'Gemensam Planering', value: 'planering' },
];
- selectedReportType: FormSelectItem;
- private _limit$ = new BehaviorSubject(20);
- private _page$ = new BehaviorSubject(1);
- reportsData$: Observable = combineLatest([
- this.currentGenomforandeReferens$,
- this._limit$,
- this._page$,
- ]).pipe(
- switchMap(([genomforandeReferens, limit, page]) =>
- this.deltagareCardService.fetchReports$(limit, page, genomforandeReferens)
- ),
- shareReplay(1)
- );
- private _type$ = new BehaviorSubject(null);
- constructor(
- private activatedRoute: ActivatedRoute,
- private deltagareCardService: DeltagareCardService,
- private formBuilder: FormBuilder,
- private router: Router
- ) {}
+ constructor(private formBuilder: FormBuilder, private router: Router) {}
get reportsFormControl(): AbstractControl | null {
return this.reportPickerFormGroup?.get(this.reportsFormControlName);
}
- onFormSubmitted(event: Event, reportType: string, genomforandeReferens: number): void {
+ onFormSubmitted(event: Event, reportType: string): void {
event.preventDefault();
+ this.reportsFormControl.markAsTouched();
+
+ if (this.reportsFormControl.invalid) {
+ return;
+ }
switch (reportType) {
case 'planering':
- if (this.reportsFormControl.valid) {
- void this.router.navigate([`/deltagare/${genomforandeReferens}/gemensam-planering`]);
- }
+ void this.router.navigateByUrl(`/deltagare/${this.genomforandeReferens}/gemensam-planering`);
break;
case 'avvikelse':
- if (this.reportsFormControl.valid) {
- void this.router.navigate([`/deltagare/${genomforandeReferens}/avvikelserapport`]);
- }
+ void this.router.navigateByUrl(`/deltagare/${this.genomforandeReferens}/avvikelserapport`);
break;
default:
return;
}
- this.reportsFormControl.markAsTouched();
-
if (!this.selectableReportTypes || this.reportPickerFormGroup.invalid) {
return;
}
-
- const selectedReportType = this.selectableReportTypes.find(report => {
- return report.value === this.reportsFormControl.value;
- });
-
- this._type$.next(selectedReportType);
}
- setNewPage(page: number): void {
- this._page$.next(page);
+ emitNewPage(page: number): void {
+ this.reportsPaginated.emit(page);
}
}
diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/deltagare-card/deltagare-card.component.html b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/deltagare-card/deltagare-card.component.html
index 246e81f..a880d4a 100644
--- a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/deltagare-card/deltagare-card.component.html
+++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/deltagare-card/deltagare-card.component.html
@@ -31,7 +31,11 @@
*ngIf="reportingTabVisible"
>
-
+
diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/deltagare-card/deltagare-card.component.ts b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/deltagare-card/deltagare-card.component.ts
index 39db498..ec14c20 100644
--- a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/deltagare-card/deltagare-card.component.ts
+++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/deltagare-card/deltagare-card.component.ts
@@ -3,6 +3,7 @@ import { ActivatedRoute } from '@angular/router';
import { Feature } from '@msfa-enums/feature.enum';
import { RoleEnum } from '@msfa-enums/role.enum';
import { environment } from '@msfa-environment';
+import { PaginationParams } from '@msfa-models/api/params.model';
import { Avrop } from '@msfa-models/avrop.model';
import { ContactInformation } from '@msfa-models/contact-information.model';
import { Disability } from '@msfa-models/disability.model';
@@ -10,6 +11,7 @@ import { DriversLicense } from '@msfa-models/drivers-license.model';
import { Education } from '@msfa-models/education.model';
import { Handledare } from '@msfa-models/handledare.model';
import { HighestEducation } from '@msfa-models/highest-education.model';
+import { ReportsData } from '@msfa-models/report.model';
import { Role } from '@msfa-models/role.model';
import { WorkExperience } from '@msfa-models/work-experience.model';
import { UserService } from '@msfa-services/api/user.service';
@@ -25,6 +27,12 @@ import { DeltagareCardService } from './deltagare-card.service';
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class DeltagareCardComponent {
+ private _reportsParams$ = new BehaviorSubject({ page: 1, limit: 20 });
+ private _activeFeatures: Feature[] = environment.activeFeatures;
+ private _activeTab$ = new BehaviorSubject('0');
+ activeTab$: Observable = this._activeTab$.asObservable();
+ private _userRoles: Role[] = this.userService.userRolesSnapshot;
+
currentGenomforandeReferens$: Observable = this.activatedRoute.params.pipe(
map(params => params.genomforandeReferens as string),
distinctUntilChanged(
@@ -69,6 +77,12 @@ export class DeltagareCardComponent {
distinctUntilChanged((prevAvrop, currAvrop) => prevAvrop.id === currAvrop.id),
switchMap(avropInformation => this.handledareService.fetchAvailableHandledare$([avropInformation.id]))
);
+ reportsData$: Observable = combineLatest([this._reportsParams$, this.currentGenomforandeReferens$]).pipe(
+ switchMap(([params, genomforandeReferens]) =>
+ this.deltagareCardService.fetchReports$(genomforandeReferens, params)
+ ),
+ shareReplay(1)
+ );
tab0Loading$: Observable = combineLatest([this.contactInformation$, this.avropInformation$]).pipe(
map(([contactInformation, avropInformation]) => !(contactInformation && avropInformation)),
startWith(true)
@@ -93,10 +107,6 @@ export class DeltagareCardComponent {
map(([disabilities, avropInformation, workLanguages]) => !(disabilities && avropInformation && workLanguages)),
startWith(true)
);
- private _activeFeatures: Feature[] = environment.activeFeatures;
- private _activeTab$ = new BehaviorSubject('0');
- activeTab$: Observable = this._activeTab$.asObservable();
- private _userRoles: Role[] = this.userService.userRolesSnapshot;
constructor(
private activatedRoute: ActivatedRoute,
@@ -136,4 +146,8 @@ export class DeltagareCardComponent {
setActiveTab(tab: number): void {
this._activeTab$.next(tab.toString());
}
+
+ setNewPage(page: number): void {
+ this._reportsParams$.next({ ...this._reportsParams$.getValue(), page });
+ }
}
diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/deltagare-card/deltagare-card.service.ts b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/deltagare-card/deltagare-card.service.ts
index a7993c6..8442133 100644
--- a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/deltagare-card/deltagare-card.service.ts
+++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-details/pages/deltagare-card/deltagare-card.service.ts
@@ -1,11 +1,12 @@
import { Injectable } from '@angular/core';
+import { PaginationParams } from '@msfa-models/api/params.model';
import { Avrop } from '@msfa-models/avrop.model';
import { ContactInformation } from '@msfa-models/contact-information.model';
import { Disability } from '@msfa-models/disability.model';
import { DriversLicense } from '@msfa-models/drivers-license.model';
import { Education } from '@msfa-models/education.model';
import { HighestEducation } from '@msfa-models/highest-education.model';
-import { ReportsData } from '@msfa-models/reports.model';
+import { ReportsData } from '@msfa-models/report.model';
import { WorkExperience } from '@msfa-models/work-experience.model';
import { DeltagareApiService } from '@msfa-services/api/deltagare.api.service';
import { HandledareService } from '@msfa-services/handledare.service';
@@ -52,7 +53,7 @@ export class DeltagareCardService {
return this.deltagareApiService.fetchDisabilities$(genomforandeReferens);
}
- public fetchReports$(limit: number, page: number, genomforandeReferens: number): Observable {
- return this.deltagareApiService.fetchReports$(limit, page, genomforandeReferens);
+ public fetchReports$(genomforandeReferens: number, params: PaginationParams): Observable {
+ return this.deltagareApiService.fetchReports$(genomforandeReferens, params);
}
}
diff --git a/apps/mina-sidor-fa/src/app/shared/enums/report-type.enum.ts b/apps/mina-sidor-fa/src/app/shared/enums/report-type.enum.ts
index a28811f..1d11f51 100644
--- a/apps/mina-sidor-fa/src/app/shared/enums/report-type.enum.ts
+++ b/apps/mina-sidor-fa/src/app/shared/enums/report-type.enum.ts
@@ -1,4 +1,7 @@
export enum ReportType {
FRANVARO = 'franvaro',
AVVIKELSE = 'avvikelse',
+ GemensamPlanering = 'Gemensam planering',
+ Franvaro = 'Frånvaro',
+ Avvikelse = 'Avvikelse',
}
diff --git a/apps/mina-sidor-fa/src/app/shared/models/api/report.response.model.ts b/apps/mina-sidor-fa/src/app/shared/models/api/report.response.model.ts
index 3d74e81..54969a2 100644
--- a/apps/mina-sidor-fa/src/app/shared/models/api/report.response.model.ts
+++ b/apps/mina-sidor-fa/src/app/shared/models/api/report.response.model.ts
@@ -1,13 +1,15 @@
+import { ReportType } from '@msfa-enums/report-type.enum';
import { PaginationMeta } from '@msfa-models/pagination-meta.model';
-import { Report } from '@msfa-models/reports.model';
export interface ReportResponse {
- data: Report[];
+ id: string;
+ genomforandeReferens: string;
+ typAvRapport: ReportType;
+ inskickadDatum: string;
+ statusRapport: string;
+ ciamUserId: string;
+}
+export interface ReportsDataResponse {
+ data: ReportResponse[];
meta: PaginationMeta;
}
-
-export interface ReportsApiResponseData {
- type: string;
- sendDate: Date;
- status: string;
-}
diff --git a/apps/mina-sidor-fa/src/app/shared/models/report.model.ts b/apps/mina-sidor-fa/src/app/shared/models/report.model.ts
new file mode 100644
index 0000000..d502b01
--- /dev/null
+++ b/apps/mina-sidor-fa/src/app/shared/models/report.model.ts
@@ -0,0 +1,29 @@
+import { ReportType } from '@msfa-enums/report-type.enum';
+import { ReportResponse } from './api/report.response.model';
+import { PaginationMeta } from './pagination-meta.model';
+
+export interface Report {
+ id: string;
+ genomforandeReferens: string;
+ type: string;
+ date: Date;
+ status: string;
+ ciamUserId: string;
+}
+
+export interface ReportsData {
+ data: Report[];
+ meta: PaginationMeta;
+}
+
+export function mapResponseToReport(data: ReportResponse): Report {
+ const { id, genomforandeReferens, typAvRapport, inskickadDatum, statusRapport, ciamUserId } = data;
+ return {
+ id,
+ genomforandeReferens,
+ type: (ReportType[typAvRapport] as string) || 'Okänd',
+ date: new Date(inskickadDatum),
+ status: statusRapport,
+ ciamUserId,
+ };
+}
diff --git a/apps/mina-sidor-fa/src/app/shared/models/reports.model.ts b/apps/mina-sidor-fa/src/app/shared/models/reports.model.ts
deleted file mode 100644
index af6e1af..0000000
--- a/apps/mina-sidor-fa/src/app/shared/models/reports.model.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-import { ReportsApiResponseData } from './api/report.response.model';
-import { PaginationMeta } from './pagination-meta.model';
-
-export interface Report {
- type: string;
- sendDate: Date;
- status: string;
-}
-
-export interface ReportsData {
- data: Report[];
- meta: PaginationMeta;
-}
-
-export function mapReportsResponseToReport(data: ReportsApiResponseData): Report {
- const { type, sendDate, status } = data;
- return {
- type,
- sendDate,
- status
- }
-}
diff --git a/apps/mina-sidor-fa/src/app/shared/services/api/deltagare.api.service.ts b/apps/mina-sidor-fa/src/app/shared/services/api/deltagare.api.service.ts
index d1053bc..edb09a5 100644
--- a/apps/mina-sidor-fa/src/app/shared/services/api/deltagare.api.service.ts
+++ b/apps/mina-sidor-fa/src/app/shared/services/api/deltagare.api.service.ts
@@ -8,7 +8,8 @@ import { DisabilityResponse } from '@msfa-models/api/disability.response.model';
import { DriversLicenseResponse } from '@msfa-models/api/drivers-license.response.model';
import { EducationsResponse } from '@msfa-models/api/educations.response.model';
import { HighestEducationResponse } from '@msfa-models/api/highest-education.response.model';
-import { DeltagareParams, Params } from '@msfa-models/api/params.model';
+import { DeltagareParams, PaginationParams, Params } from '@msfa-models/api/params.model';
+import { ReportsDataResponse } from '@msfa-models/api/report.response.model';
import { TranslatorResponse } from '@msfa-models/api/translator.response.model';
import { WorkExperiencesResponse } from '@msfa-models/api/work-experiences.response.model';
import { WorkLanguagesResponse } from '@msfa-models/api/work-languages.response.model';
@@ -20,7 +21,7 @@ import { DriversLicense, mapResponseToDriversLicense } from '@msfa-models/driver
import { Education, mapResponseToEducation } from '@msfa-models/education.model';
import { CustomError, errorToCustomError } from '@msfa-models/error/custom-error';
import { HighestEducation, mapResponseToHighestEducation } from '@msfa-models/highest-education.model';
-import { ReportsData } from '@msfa-models/reports.model';
+import { mapResponseToReport, ReportsData } from '@msfa-models/report.model';
import { mapResponseToWorkExperience, WorkExperience } from '@msfa-models/work-experience.model';
import { sortFromToDates } from '@msfa-utils/sort.util';
import { BehaviorSubject, Observable, of } from 'rxjs';
@@ -31,6 +32,7 @@ import { catchError, map } from 'rxjs/operators';
})
export class DeltagareApiService {
private _apiBaseUrl = `${environment.api.url}/deltagare`;
+ private _apiReportUrl = `${environment.api.url}/handlingar`;
private _deltagareLoading$ = new BehaviorSubject(false);
public deltagareLoading$: Observable = this._deltagareLoading$.asObservable();
private _showUnauthorizedError$ = new BehaviorSubject(false);
@@ -75,28 +77,24 @@ export class DeltagareApiService {
);
}
- public fetchReports$(limit: number, page: number, genomforandeReferens: number): Observable {
- return of({ data: [], meta: null });
+ public fetchReports$(genomforandeReferens: number, paginationParams: PaginationParams): Observable {
+ const { page, limit } = paginationParams;
+ const params: { [param: string]: string | string[] } = {
+ genomforandeReferens: genomforandeReferens.toString(),
+ page: page.toString(),
+ limit: limit.toString(),
+ };
- // TODO: When the API/Mock-API has implemented the endpoint, we can remove use following code
- // to make API-requests.
-
- // const params: { [param: string]: string | string[] } = {
- // id: genomforandeReferens.toString(),
- // limit: limit.toString(),
- // page: page.toString(),
- // };
-
- // return this.httpClient
- // .get(`${this._apiBaseUrl}/report`, {
- // params,
- // })
- // .pipe(
- // map(({ data, meta }) => {
- // data.sort((reportA, reportB) => (+reportA.sendDate < +reportB.sendDate ? 1 : -1));
- // return { data: data.map(report => mapReportsResponseToReport(report)), meta };
- // })
- // );
+ return this.httpClient
+ .get(`${this._apiReportUrl}`, { params })
+ .pipe(
+ map(({ data, meta }) => ({ data: data.map(report => mapResponseToReport(report)), meta })),
+ catchError((error: Error) => {
+ throw new CustomError(
+ errorToCustomError({ ...error, message: `Kunde inte hämta rapporter.\n\n${error.message}` })
+ );
+ })
+ );
}
public fetchContactInformation$(genomforandeReferens: number): Observable {