From 68c5c8d4a8fdcf4a497abb85de9298c26fdafcaf Mon Sep 17 00:00:00 2001 From: Daniel Appelgren Date: Wed, 22 Sep 2021 08:19:25 +0200 Subject: [PATCH] =?UTF-8?q?feat(Deltagarlista):=20Lade=20till=20startdatum?= =?UTF-8?q?,=20slutdatum,=20avbrott=20samt=20Visa=20h=C3=A4ndelser,=20som?= =?UTF-8?q?=20=C3=B6ppnar=20en=20modal=20med=20en=20deltagares=20h=C3=A4nd?= =?UTF-8?q?elser=20(TV-606)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Squashed commit of the following: commit 932d0ce27b416652e241803e04dd9e98c6ca5757 Author: Daniel Appelgren Date: Wed Sep 22 08:17:56 2021 +0200 fix lint and fails commit b988fb7dc443d336e1e572d1a1f2993f7ed8f43b Merge: 7eb75ec 5846c2c Author: Daniel Appelgren Date: Wed Sep 22 07:54:00 2021 +0200 Merge branch 'develop' into feature/TV-606-deltagarlista-add-columns commit 7eb75ec659a3a25386f76dd9aed1806fd603c35b Author: Daniel Appelgren Date: Wed Sep 22 07:53:54 2021 +0200 refactor commit 3bfe1fe1d7d17f8ba3dcdc6d587d957ff584ef6c Author: Daniel Appelgren Date: Tue Sep 21 11:53:20 2021 +0200 Update deltagare-list-handelser-dialog.component.scss commit 4c7275e24ca9fdf70fb26db8e67a747c2a26b825 Author: Daniel Appelgren Date: Tue Sep 21 11:51:08 2021 +0200 set dialog width to auto commit 1feb3b6f5779a810881a7592325dd9f1bf33d490 Author: Daniel Appelgren Date: Tue Sep 21 11:43:51 2021 +0200 added captions to tables commit 4b4137cd9ae8e4084ea6172119449d247c591c40 Author: Daniel Appelgren Date: Tue Sep 21 11:06:16 2021 +0200 Update server.js commit 203609c380f2d47ce248b94ed06e0dfde293ef24 Author: Daniel Appelgren Date: Tue Sep 21 11:05:05 2021 +0200 full name in dialog heading commit 265c38aefe8d1380c7cc0ae1b87a12d276671ced Merge: e734ab5 2dd9d3d Author: Daniel Appelgren Date: Tue Sep 21 10:58:29 2021 +0200 Merge branch 'develop' into feature/TV-606-deltagarlista-add-columns commit e734ab5c6fe00923642da70dfe92cdbafc0f0c79 Author: Daniel Appelgren Date: Tue Sep 21 10:58:26 2021 +0200 formatting commit 1a13a9fc6d9329e6b5d6fce7c77352ac75123a5a Merge: aa1552d 91eeb1d Author: Daniel Appelgren Date: Tue Sep 21 10:49:07 2021 +0200 Merge branch 'develop' into feature/TV-606-deltagarlista-add-columns commit aa1552d0ad85b3213a0e062ee3f786849013566a Author: Daniel Appelgren Date: Tue Sep 21 09:33:10 2021 +0200 add colums to handelser commit 584ecd2cb2b5265cc885dcab713582083dbe19bb Author: Daniel Appelgren Date: Mon Sep 20 15:46:38 2021 +0200 fix test and lint commit 890e741c69a6408a72ca7899cc5cd76eccbdb498 Author: Daniel Appelgren Date: Mon Sep 20 15:39:18 2021 +0200 add dialog and fix mock apis commit fc8ee963619a8cd24e482c56180536219c83ec28 Merge: 422563b 8da6899 Author: Daniel Appelgren Date: Mon Sep 20 14:14:49 2021 +0200 Merge branch 'develop' into feature/TV-606-deltagarlista-add-columns commit 422563b5ecc8cc923b2e6791b5c533913ae6e4bd Author: Daniel Appelgren Date: Mon Sep 20 13:01:45 2021 +0200 wip commit 2d83fa6e8a4d7459e8661bf7036388021bec460e Author: Daniel Appelgren Date: Mon Sep 20 11:26:38 2021 +0200 added columns to deltagare list commit a9df57d4492ec3f08de8f20a3032c8a1a84fd8a4 Author: Daniel Appelgren Date: Mon Sep 20 10:21:27 2021 +0200 wip --- .../edit-employee-form.component.ts | 2 +- ...agare-list-handelser-dialog.component.html | 33 +++++++ ...agare-list-handelser-dialog.component.scss | 26 ++++++ ...re-list-handelser-dialog.component.spec.ts | 28 ++++++ ...ltagare-list-handelser-dialog.component.ts | 28 ++++++ .../deltagare-list.component.html | 93 +++++++++++++------ .../deltagare-list.component.scss | 19 +++- .../deltagare-list.component.ts | 30 ++++++ .../deltagare-list/deltagare-list.module.ts | 7 +- .../app/pages/deltagare/deltagare.module.ts | 3 +- .../periodisk-redovisning.component.ts | 12 +-- .../periodisk-redovisning.module.ts | 9 +- .../report-layout.component.spec.ts | 9 +- ...yout-module.ts => report-layout.module.ts} | 13 +-- .../multiselect/multiselect.component.ts | 3 +- .../models/api/deltagare.response.model.ts | 4 + .../shared/models/deltagare-handelse.model.ts | 11 +++ .../src/app/shared/models/deltagare.model.ts | 21 ++++- .../api/deltagare-handelser-api.service.ts | 26 ++++++ mock-api/mina-sidor-fa/scripts/avrop.js | 1 + .../scripts/deltagare-handelser.js | 36 +++++++ mock-api/mina-sidor-fa/scripts/deltagare.js | 1 + .../mina-sidor-fa/scripts/generate-api.js | 3 + mock-api/mina-sidor-fa/server.js | 34 +++++-- 24 files changed, 382 insertions(+), 70 deletions(-) create mode 100644 apps/mina-sidor-fa/src/app/pages/deltagare/components/deltagare-list/deltagare-list-handelser-dialog/deltagare-list-handelser-dialog.component.html create mode 100644 apps/mina-sidor-fa/src/app/pages/deltagare/components/deltagare-list/deltagare-list-handelser-dialog/deltagare-list-handelser-dialog.component.scss create mode 100644 apps/mina-sidor-fa/src/app/pages/deltagare/components/deltagare-list/deltagare-list-handelser-dialog/deltagare-list-handelser-dialog.component.spec.ts create mode 100644 apps/mina-sidor-fa/src/app/pages/deltagare/components/deltagare-list/deltagare-list-handelser-dialog/deltagare-list-handelser-dialog.component.ts rename apps/mina-sidor-fa/src/app/pages/deltagare/shared/report-layout/{report-layout-module.ts => report-layout.module.ts} (59%) create mode 100644 apps/mina-sidor-fa/src/app/shared/models/deltagare-handelse.model.ts create mode 100644 apps/mina-sidor-fa/src/app/shared/services/api/deltagare-handelser-api.service.ts create mode 100644 mock-api/mina-sidor-fa/scripts/deltagare-handelser.js diff --git a/apps/mina-sidor-fa/src/app/pages/administration/pages/employee-form/edit-employee-form/edit-employee-form.component.ts b/apps/mina-sidor-fa/src/app/pages/administration/pages/employee-form/edit-employee-form/edit-employee-form.component.ts index f6a2987..34b0675 100644 --- a/apps/mina-sidor-fa/src/app/pages/administration/pages/employee-form/edit-employee-form/edit-employee-form.component.ts +++ b/apps/mina-sidor-fa/src/app/pages/administration/pages/employee-form/edit-employee-form/edit-employee-form.component.ts @@ -1,4 +1,4 @@ -import { ButtonSize, ButtonType, ButtonVariation } from '@af/digi-ng/_button/button'; +import { ButtonSize, ButtonType } from '@af/digi-ng/_button/button'; import { FormSelectItem } from '@af/digi-ng/_form/form-select'; import { ChangeDetectionStrategy, diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/components/deltagare-list/deltagare-list-handelser-dialog/deltagare-list-handelser-dialog.component.html b/apps/mina-sidor-fa/src/app/pages/deltagare/components/deltagare-list/deltagare-list-handelser-dialog/deltagare-list-handelser-dialog.component.html new file mode 100644 index 0000000..4e0f62a --- /dev/null +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/components/deltagare-list/deltagare-list-handelser-dialog/deltagare-list-handelser-dialog.component.html @@ -0,0 +1,33 @@ +
+

+ Genomförandereferens: {{deltagare?.genomforandeReferens}} +

+ + + + + + + + + + + + + + + + + + + + + + + +
Lista med alla händelser för {{deltagare?.fullName}}
InkomHändelseDatum för händelseDatum förklaring
{{handelse.receivedDate | date}} + {{handelse.description}}{{handelse.tidpunkt | date }}{{handelse.tidpunktDescription}} + + {{handelse.description}}
+
+
diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/components/deltagare-list/deltagare-list-handelser-dialog/deltagare-list-handelser-dialog.component.scss b/apps/mina-sidor-fa/src/app/pages/deltagare/components/deltagare-list/deltagare-list-handelser-dialog/deltagare-list-handelser-dialog.component.scss new file mode 100644 index 0000000..8123921 --- /dev/null +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/components/deltagare-list/deltagare-list-handelser-dialog/deltagare-list-handelser-dialog.component.scss @@ -0,0 +1,26 @@ +.deltagare-list-handelser { + + &__heading-row { + white-space: nowrap; + } + + + &__table-cell { + white-space: nowrap; + } + + &__avbrott-cell { + color: var(--digi--ui--color--danger); + } +} + +// DA: Digins maxbredd är hårt satt till 540px (!?) Bör vara auto tycker jag. +// Vi kanske bör ersätta med egen dialog längre fram? +::ng-deep .digi-ng-dialog-base__content { + width: auto; + max-width: 90vw !important; +} +::ng-deep .digi-ng-dialog__inner { + width: auto !important; + max-width: 90vw !important; +} diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/components/deltagare-list/deltagare-list-handelser-dialog/deltagare-list-handelser-dialog.component.spec.ts b/apps/mina-sidor-fa/src/app/pages/deltagare/components/deltagare-list/deltagare-list-handelser-dialog/deltagare-list-handelser-dialog.component.spec.ts new file mode 100644 index 0000000..9b56114 --- /dev/null +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/components/deltagare-list/deltagare-list-handelser-dialog/deltagare-list-handelser-dialog.component.spec.ts @@ -0,0 +1,28 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DeltagareListHandelserDialogComponent } from './deltagare-list-handelser-dialog.component'; +import { HttpClientTestingModule } from '@angular/common/http/testing'; +import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; + +describe('DeltagareListHandelserDialogComponent', () => { + let component: DeltagareListHandelserDialogComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + schemas: [CUSTOM_ELEMENTS_SCHEMA], + imports: [HttpClientTestingModule], + declarations: [DeltagareListHandelserDialogComponent], + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(DeltagareListHandelserDialogComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/components/deltagare-list/deltagare-list-handelser-dialog/deltagare-list-handelser-dialog.component.ts b/apps/mina-sidor-fa/src/app/pages/deltagare/components/deltagare-list/deltagare-list-handelser-dialog/deltagare-list-handelser-dialog.component.ts new file mode 100644 index 0000000..1ac4328 --- /dev/null +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/components/deltagare-list/deltagare-list-handelser-dialog/deltagare-list-handelser-dialog.component.ts @@ -0,0 +1,28 @@ +import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; +import { DeltagareHandelserApiService } from '@msfa-services/api/deltagare-handelser-api.service'; +import { DeltagareHandelse } from '@msfa-models/deltagare-handelse.model'; +import { Observable } from 'rxjs'; +import { IconType } from '@msfa-enums/icon-type.enum'; +import { DeltagareCompact } from '@msfa-models/deltagare.model'; + +@Component({ + selector: 'msfa-deltagare-list-handelser-dialog', + templateUrl: './deltagare-list-handelser-dialog.component.html', + styleUrls: ['./deltagare-list-handelser-dialog.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class DeltagareListHandelserDialogComponent implements OnInit { + @Input() deltagare: DeltagareCompact; + iconType = IconType; + deltagareHandelser$: Observable; + + constructor(private deltagareHandelserApiService: DeltagareHandelserApiService) {} + + ngOnInit(): void { + if (this.deltagare) { + this.deltagareHandelser$ = this.deltagareHandelserApiService.fetchDeltagareHandelser( + this.deltagare.genomforandeReferens + ); + } + } +} diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/components/deltagare-list/deltagare-list.component.html b/apps/mina-sidor-fa/src/app/pages/deltagare/components/deltagare-list/deltagare-list.component.html index bc2a3f7..731d9dd 100644 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/components/deltagare-list/deltagare-list.component.html +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/components/deltagare-list/deltagare-list.component.html @@ -1,41 +1,76 @@
- +
+ - - - + + + - - - - - + + + + + + + +
Tabell med de deltagare som tillhör organistaionen.
- -
+ +
- {{ singleDeltagare.fullName }} - {{ singleDeltagare.tjanst }}{{ singleDeltagare.utforandeVerksamhet }}
+ {{ singleDeltagare.fullName }} + {{ singleDeltagare.tjanst }}{{ singleDeltagare.utforandeVerksamhet }}{{ singleDeltagare.startdatumAvrop | date }} + {{ singleDeltagare.slutdatumAvrop | date }} +
+ + Avbrott +
+
+ + + Visa händelser + +
+ + + + ; @Output() sorted = new EventEmitter(); @Output() paginated = new EventEmitter(); + handelserDialogDeltagare$ = new BehaviorSubject(null); + + handelserDialogIsOpen$ = this.handelserDialogDeltagare$.pipe(map(genomforandereferens => !!genomforandereferens)); + + iconType = IconType; + errorSeverity = ErrorSeverity; columnHeaders: { label: string; key: keyof DeltagareCompact }[] = [ { label: 'Namn', key: 'fullName' }, @@ -27,6 +37,18 @@ export class DeltagareListComponent { label: 'Utförande verksamhet', key: 'utforandeVerksamhet', }, + { + label: 'Startdatum', + key: 'startdatumAvrop', + }, + { + label: 'Slutdatum', + key: 'slutdatumAvrop', + }, + { + label: 'Status', + key: 'genomforandeReferens', + }, ]; orderType = SortOrder; @@ -59,4 +81,12 @@ export class DeltagareListComponent { setNewPage(page: number): void { this.paginated.emit(page); } + + openHandelser(deltagareCompact: DeltagareCompact): void { + this.handelserDialogDeltagare$.next(deltagareCompact); + } + + closeHandelser(): void { + this.handelserDialogDeltagare$.next(null); + } } diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/components/deltagare-list/deltagare-list.module.ts b/apps/mina-sidor-fa/src/app/pages/deltagare/components/deltagare-list/deltagare-list.module.ts index ce8cf49..df3879a 100644 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/components/deltagare-list/deltagare-list.module.ts +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/components/deltagare-list/deltagare-list.module.ts @@ -2,11 +2,14 @@ import { CommonModule } from '@angular/common'; import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; import { DeltagareListComponent } from './deltagare-list.component'; +import { IconModule } from '@msfa-shared/components/icon/icon.module'; +import { DigiNgDialogModule } from '@af/digi-ng/_dialog/dialog'; +import { DeltagareListHandelserDialogComponent } from './deltagare-list-handelser-dialog/deltagare-list-handelser-dialog.component'; @NgModule({ schemas: [CUSTOM_ELEMENTS_SCHEMA], - declarations: [DeltagareListComponent], - imports: [CommonModule, RouterModule], + declarations: [DeltagareListComponent, DeltagareListHandelserDialogComponent], + imports: [CommonModule, RouterModule, IconModule, DigiNgDialogModule], exports: [DeltagareListComponent], }) export class DeltagareListModule {} diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/deltagare.module.ts b/apps/mina-sidor-fa/src/app/pages/deltagare/deltagare.module.ts index dbc5e8d..2a2a29d 100644 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/deltagare.module.ts +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/deltagare.module.ts @@ -4,10 +4,11 @@ import { LayoutModule } from '@msfa-shared/components/layout/layout.module'; import { DeltagareListModule } from './components/deltagare-list/deltagare-list.module'; import { DeltagareRoutingModule } from './deltagare-routing.module'; import { DeltagareComponent } from './deltagare.component'; +import { DigiNgSkeletonBaseModule } from '@af/digi-ng/_skeleton/skeleton-base'; @NgModule({ schemas: [CUSTOM_ELEMENTS_SCHEMA], declarations: [DeltagareComponent], - imports: [CommonModule, DeltagareRoutingModule, LayoutModule, DeltagareListModule], + imports: [CommonModule, DeltagareRoutingModule, LayoutModule, DeltagareListModule, DigiNgSkeletonBaseModule], }) export class DeltagareModule {} diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/periodisk-redovisning/periodisk-redovisning.component.ts b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/periodisk-redovisning/periodisk-redovisning.component.ts index 58adf3a..7229eda 100644 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/periodisk-redovisning/periodisk-redovisning.component.ts +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/periodisk-redovisning/periodisk-redovisning.component.ts @@ -1,18 +1,12 @@ -import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core'; +import { Component, ChangeDetectionStrategy } from '@angular/core'; @Component({ selector: 'msfa-periodisk-redovisning', templateUrl: './periodisk-redovisning.component.html', styleUrls: ['./periodisk-redovisning.component.scss'], - changeDetection: ChangeDetectionStrategy.OnPush + changeDetection: ChangeDetectionStrategy.OnPush, }) -export class PeriodiskRedovisningComponent implements OnInit { +export class PeriodiskRedovisningComponent { currentStep = 1; sendRequest = false; - - constructor() { } - - ngOnInit(): void { - } - } diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/periodisk-redovisning/periodisk-redovisning.module.ts b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/periodisk-redovisning/periodisk-redovisning.module.ts index 2439aec..7aa8e03 100644 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/periodisk-redovisning/periodisk-redovisning.module.ts +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/pages/deltagare-report/pages/periodisk-redovisning/periodisk-redovisning.module.ts @@ -3,10 +3,9 @@ import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; import { ReactiveFormsModule } from '@angular/forms'; import { RouterModule } from '@angular/router'; import { LayoutModule } from '@msfa-shared/components/layout/layout.module'; -import { ReportLayoutModule } from '../../../../shared/report-layout/report-layout-module'; +import { ReportLayoutModule } from '../../../../shared/report-layout/report-layout.module'; import { PeriodiskRedovisningComponent } from './periodisk-redovisning.component'; - @NgModule({ schemas: [CUSTOM_ELEMENTS_SCHEMA], declarations: [PeriodiskRedovisningComponent], @@ -15,8 +14,8 @@ import { PeriodiskRedovisningComponent } from './periodisk-redovisning.component RouterModule.forChild([{ path: '', component: PeriodiskRedovisningComponent }]), LayoutModule, ReactiveFormsModule, - ReportLayoutModule + ReportLayoutModule, ], - exports: [PeriodiskRedovisningComponent] + exports: [PeriodiskRedovisningComponent], }) -export class PeriodiskRedovisningModule { } +export class PeriodiskRedovisningModule {} diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/shared/report-layout/report-layout.component.spec.ts b/apps/mina-sidor-fa/src/app/pages/deltagare/shared/report-layout/report-layout.component.spec.ts index b2809a2..897ed41 100644 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/shared/report-layout/report-layout.component.spec.ts +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/shared/report-layout/report-layout.component.spec.ts @@ -1,6 +1,8 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; - import { ReportLayoutComponent } from './report-layout.component'; +import { HttpClientTestingModule } from '@angular/common/http/testing'; +import { ReportLayoutModule } from './report-layout.module'; +import { RouterTestingModule } from '@angular/router/testing'; describe('ReportLayoutComponent', () => { let component: ReportLayoutComponent; @@ -8,9 +10,8 @@ describe('ReportLayoutComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ ReportLayoutComponent ] - }) - .compileComponents(); + imports: [ReportLayoutModule, RouterTestingModule, HttpClientTestingModule], + }).compileComponents(); }); beforeEach(() => { diff --git a/apps/mina-sidor-fa/src/app/pages/deltagare/shared/report-layout/report-layout-module.ts b/apps/mina-sidor-fa/src/app/pages/deltagare/shared/report-layout/report-layout.module.ts similarity index 59% rename from apps/mina-sidor-fa/src/app/pages/deltagare/shared/report-layout/report-layout-module.ts rename to apps/mina-sidor-fa/src/app/pages/deltagare/shared/report-layout/report-layout.module.ts index 5d34f04..e45f5e4 100644 --- a/apps/mina-sidor-fa/src/app/pages/deltagare/shared/report-layout/report-layout-module.ts +++ b/apps/mina-sidor-fa/src/app/pages/deltagare/shared/report-layout/report-layout.module.ts @@ -4,11 +4,12 @@ import { LayoutModule } from '@msfa-shared/components/layout/layout.module'; import { ReportLayoutComponent } from './report-layout.component'; import { DigiNgProgressProgressbarModule } from '@af/digi-ng/_progress/progressbar'; import { HideTextModule } from '@msfa-shared/components/hide-text/hide-text.module'; +import { RouterModule } from '@angular/router'; @NgModule({ - schemas: [CUSTOM_ELEMENTS_SCHEMA], - declarations: [ReportLayoutComponent], - imports: [CommonModule, LayoutModule, DigiNgProgressProgressbarModule, HideTextModule], - exports: [ReportLayoutComponent] - }) - export class ReportLayoutModule {} \ No newline at end of file + schemas: [CUSTOM_ELEMENTS_SCHEMA], + declarations: [ReportLayoutComponent], + imports: [CommonModule, RouterModule, LayoutModule, DigiNgProgressProgressbarModule, HideTextModule], + exports: [ReportLayoutComponent], +}) +export class ReportLayoutModule {} diff --git a/apps/mina-sidor-fa/src/app/shared/components/multiselect/multiselect.component.ts b/apps/mina-sidor-fa/src/app/shared/components/multiselect/multiselect.component.ts index 7344eea..1e5162c 100644 --- a/apps/mina-sidor-fa/src/app/shared/components/multiselect/multiselect.component.ts +++ b/apps/mina-sidor-fa/src/app/shared/components/multiselect/multiselect.component.ts @@ -9,7 +9,6 @@ import { Output, Renderer2, ViewChild, - ChangeDetectorRef, } from '@angular/core'; import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'; import { DropdownTriggerForDirective } from '@msfa-shared/components/dropdown/dropdown-trigger-for.directive'; @@ -55,7 +54,7 @@ export class MultiselectComponent implements AfterViewInit, ControlValueAccessor private propagateChange: PropagateChangeFn; private propagateTouched: PropagateTouchedFn; - constructor(private renderer: Renderer2, private changeDetectionRef: ChangeDetectorRef) {} + constructor(private renderer: Renderer2) {} // Allows Angular to update the model. // Update the model and changes needed for the view here. diff --git a/apps/mina-sidor-fa/src/app/shared/models/api/deltagare.response.model.ts b/apps/mina-sidor-fa/src/app/shared/models/api/deltagare.response.model.ts index a06db41..414386f 100644 --- a/apps/mina-sidor-fa/src/app/shared/models/api/deltagare.response.model.ts +++ b/apps/mina-sidor-fa/src/app/shared/models/api/deltagare.response.model.ts @@ -16,6 +16,10 @@ export interface DeltagareCompactResponse { tjanst: string; utforandeVerksamhet: string; utforandeAdress: string; + hasAvbrott: boolean; + genomforandeReferens: string; + startdatumAvrop: Date; + slutdatumAvrop: Date; } export interface DeltagareResponse { diff --git a/apps/mina-sidor-fa/src/app/shared/models/deltagare-handelse.model.ts b/apps/mina-sidor-fa/src/app/shared/models/deltagare-handelse.model.ts new file mode 100644 index 0000000..1f0a48e --- /dev/null +++ b/apps/mina-sidor-fa/src/app/shared/models/deltagare-handelse.model.ts @@ -0,0 +1,11 @@ +export interface DeltagareHandelse { + description: string; + receivedDate: Date; + isAvbrott: boolean; + tidpunkt: Date; + tidpunktDescription: string; +} + +export interface DeltagareHandelseApiResponse { + data: DeltagareHandelse[]; +} diff --git a/apps/mina-sidor-fa/src/app/shared/models/deltagare.model.ts b/apps/mina-sidor-fa/src/app/shared/models/deltagare.model.ts index 4c6cba9..47a19dc 100644 --- a/apps/mina-sidor-fa/src/app/shared/models/deltagare.model.ts +++ b/apps/mina-sidor-fa/src/app/shared/models/deltagare.model.ts @@ -18,6 +18,10 @@ export interface DeltagareCompact { tjanst: string; utforandeVerksamhet: string; utforandeAdress: string; + hasAvbrott: boolean; + genomforandeReferens: string; + startdatumAvrop: Date; + slutdatumAvrop: Date; } export interface Deltagare { @@ -45,7 +49,18 @@ export interface DeltagareCompactData { } export function mapResponseToDeltagareCompact(data: DeltagareCompactResponse): DeltagareCompact { - const { sokandeId, fornamn, efternamn, tjanst, utforandeVerksamhet, utforandeAdress } = data; + const { + sokandeId, + fornamn, + efternamn, + tjanst, + utforandeVerksamhet, + utforandeAdress, + hasAvbrott, + genomforandeReferens, + startdatumAvrop, + slutdatumAvrop, + } = data; return { id: sokandeId.toString(), firstName: fornamn, @@ -54,6 +69,10 @@ export function mapResponseToDeltagareCompact(data: DeltagareCompactResponse): D tjanst, utforandeVerksamhet, utforandeAdress, + hasAvbrott, + genomforandeReferens, + startdatumAvrop, + slutdatumAvrop, }; } diff --git a/apps/mina-sidor-fa/src/app/shared/services/api/deltagare-handelser-api.service.ts b/apps/mina-sidor-fa/src/app/shared/services/api/deltagare-handelser-api.service.ts new file mode 100644 index 0000000..1d1c80c --- /dev/null +++ b/apps/mina-sidor-fa/src/app/shared/services/api/deltagare-handelser-api.service.ts @@ -0,0 +1,26 @@ +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { HttpClient } from '@angular/common/http'; +import { DeltagareHandelse, DeltagareHandelseApiResponse } from '@msfa-models/deltagare-handelse.model'; +import { environment } from '@msfa-environment'; + +@Injectable({ + providedIn: 'root', +}) +export class DeltagareHandelserApiService { + private _apiBaseUrl = `${environment.api.url}/deltagareHandelser`; + constructor(private httpClient: HttpClient) {} + + fetchDeltagareHandelser(genomforandereferens: string): Observable { + return this.httpClient + .get(`${this._apiBaseUrl}?genomforandereferens=${genomforandereferens}`) + .pipe( + map(({ data }) => { + if (data) { + return data; + } + }) + ); + } +} diff --git a/mock-api/mina-sidor-fa/scripts/avrop.js b/mock-api/mina-sidor-fa/scripts/avrop.js index 99e83fa..862523e 100644 --- a/mock-api/mina-sidor-fa/scripts/avrop.js +++ b/mock-api/mina-sidor-fa/scripts/avrop.js @@ -58,6 +58,7 @@ function generateAvrop(amount = 10, deltagare, handledare) { sparNamn: track.name, handledareCiamUserId: null, recievedTimestamp: faker.date.recent(), + hasAvbrott: currentDeltagare.hasAvbrott, }); } diff --git a/mock-api/mina-sidor-fa/scripts/deltagare-handelser.js b/mock-api/mina-sidor-fa/scripts/deltagare-handelser.js new file mode 100644 index 0000000..2a09b4d --- /dev/null +++ b/mock-api/mina-sidor-fa/scripts/deltagare-handelser.js @@ -0,0 +1,36 @@ +import faker from 'faker'; +faker.locale = 'sv'; + +const HANDELSER = [ + 'Gemensam planering inkommen', + 'Gemensam planering godkänd', + 'Slutredovisning inkommen', + 'Slutredovisning godkänd', + 'Slutredovisning ej godkänd', + 'Avbrott handläggs', + 'Avbrott bifall', + 'Avbrott avslag', + 'Byte av leverantör bifall', +]; + +const TIDPUNKT_DESCRIPTION = ['Handläggning startad', 'Inrapporteringsdatum slutredovisning']; + +function generateHandelser(amount = 10) { + const handelser = []; + + for (let id = 1; id <= amount; ++id) { + const handelse = HANDELSER[Math.floor(Math.random() * HANDELSER.length)]; + handelser.push({ + description: handelse, + receivedDate: faker.date.recent(), + isAvbrott: handelse.indexOf('Avbrott') >= 0, + tidpunkt: faker.date.recent(), + tidpunktDescription: TIDPUNKT_DESCRIPTION[Math.floor(Math.random() * TIDPUNKT_DESCRIPTION.length)], + }); + } + return handelser; +} + +export default { + generate: generateHandelser, +}; diff --git a/mock-api/mina-sidor-fa/scripts/deltagare.js b/mock-api/mina-sidor-fa/scripts/deltagare.js index 5f70403..bd2c14e 100644 --- a/mock-api/mina-sidor-fa/scripts/deltagare.js +++ b/mock-api/mina-sidor-fa/scripts/deltagare.js @@ -111,6 +111,7 @@ function generateDeltagare(amount = 10) { workExperiences: { arbetslivserfarenheter: chooseRandom(WORK_EXPERIENCES, faker.datatype.number(WORK_EXPERIENCES.length)), }, + hasAvbrott: Math.random() < 0.2, }; if (Math.random() > 0.8) { deltagare.contact.adresser.push({ diff --git a/mock-api/mina-sidor-fa/scripts/generate-api.js b/mock-api/mina-sidor-fa/scripts/generate-api.js index 0a17809..3913356 100644 --- a/mock-api/mina-sidor-fa/scripts/generate-api.js +++ b/mock-api/mina-sidor-fa/scripts/generate-api.js @@ -4,6 +4,7 @@ import avrop from './avrop.js'; import currentUser from './current-user.js'; import userinfo from './userinfo.js'; import deltagare from './deltagare.js'; +import deltagareHandelser from './deltagare-handelser.js'; import employees from './employees.js'; import handledare from './handledare.js'; import languages from './languages.js'; @@ -21,6 +22,7 @@ const AUTHORIZATIONS = ['Hantera användare', 'Hantera origisation', 'Hantera ek const generatedEmployees = employees.generate(50); const generatedDeltagare = deltagare.generate(50); +const generatedDeltagareHandelser = deltagareHandelser.generate(10); const generatedHandledare = handledare.generate(generatedEmployees.slice(0, 6)); const generatedAvrop = avrop.generate(10, generatedDeltagare.slice(0, 25), generatedHandledare); const generatedTjanster = tjanster.generate(); @@ -111,6 +113,7 @@ const apiData = { utforandeVerksamheter, kommuner: avropKommuner, deltagare: generatedDeltagare, + deltagareHandelser: generatedDeltagareHandelser, handledare: generatedHandledare, participants: participants.generate(50).map(participant => ({ ...participant, diff --git a/mock-api/mina-sidor-fa/server.js b/mock-api/mina-sidor-fa/server.js index 012bf0d..8b53b0e 100644 --- a/mock-api/mina-sidor-fa/server.js +++ b/mock-api/mina-sidor-fa/server.js @@ -123,14 +123,32 @@ router.render = (req, res) => { } if (pathname === '/deltagare') { - data = data.map(({ sokandeId, fornamn, efternamn, tjansteNamn, utforandeverksamhet, adress }) => ({ - sokandeId: sokandeId.toString(), - fornamn, - efternamn, - tjanst: tjansteNamn, - utforandeVerksamhet: utforandeverksamhet, - utforandeAdress: adress, - })); + // NOTE: this is reading from avrop.js + data = data.map( + ({ + sokandeId, + fornamn, + efternamn, + tjansteNamn, + utforandeverksamhet, + adress, + startdatumAvrop, + slutdatumAvrop, + hasAvbrott, + genomforandeReferens, + }) => ({ + sokandeId: sokandeId.toString(), + fornamn, + efternamn, + tjanst: tjansteNamn, + utforandeVerksamhet: utforandeverksamhet, + utforandeAdress: adress, + startdatumAvrop, + slutdatumAvrop, + hasAvbrott, + genomforandeReferens, + }) + ); } res.jsonp({