Merge pull request #132 in TEA/mina-sidor-fa-web from feature/TV-591 to develop

Squashed commit of the following:

commit 92501f038a2e9d43a62ee7ef606fe8ff95b3a994
Author: Chingiz <chingiz.esenbaev@arbetsformedlingen.se>
Date:   Mon Sep 27 10:06:56 2021 +0200

    updating models, services, api

commit bc9815f457ef4e80e40e3f0ea9f0f71d14cf5c65
Author: Chingiz <chingiz.esenbaev@arbetsformedlingen.se>
Date:   Mon Sep 27 07:07:34 2021 +0200

    updated html file

commit a5842fd33b9909679c091d7b2657eb7d8cd2e094
Merge: 1b51bf6 85242b0
Author: Chingiz <chingiz.esenbaev@arbetsformedlingen.se>
Date:   Mon Sep 27 06:56:01 2021 +0200

    Merge branch 'develop' into feature/TV-591

commit 1b51bf6c73e831b6b0f46c0b75b09c86f813b237
Author: Chingiz <chingiz.esenbaev@arbetsformedlingen.se>
Date:   Mon Sep 27 06:55:26 2021 +0200

    base structure done

commit fd0900411a0365d9c92337ab5ee7c8fae4282fe3
Merge: 4333891 9bedbd3
Author: Chingiz <chingiz.esenbaev@arbetsformedlingen.se>
Date:   Thu Sep 23 16:44:11 2021 +0200

    Merge branch 'develop' into feature/TV-591

commit 43338914fa67d40357f68d20ef2d6fe0cb19e218
Author: Chingiz <chingiz.esenbaev@arbetsformedlingen.se>
Date:   Thu Sep 23 16:43:42 2021 +0200

    formgroup and more

commit 96086b08b10ca785d3271e38e5cd81cade91acf0
Merge: d263f27 5846c2c
Author: Chingiz <chingiz.esenbaev@arbetsformedlingen.se>
Date:   Tue Sep 21 19:57:06 2021 +0200

    Merge branch 'develop' into feature/TV-591

commit d263f270c643cc0a8f36a1edb4f87813b1916eba
Author: Chingiz <chingiz.esenbaev@arbetsformedlingen.se>
Date:   Tue Sep 21 19:56:24 2021 +0200

    sÃparar filer innan merge

commit 4352b00d0eed60ea2703b5a3957a608ee053e8d3
Author: Chingiz <chingiz.esenbaev@arbetsformedlingen.se>
Date:   Mon Sep 20 10:58:12 2021 +0200

    updating to match other tasks

commit d51e22bc8a61e67cec711eb4915c3a381eb67aaf
Author: Chingiz <chingiz.esenbaev@arbetsformedlingen.se>
Date:   Thu Sep 16 18:52:25 2021 +0200

    Created some base-structure
This commit is contained in:
Aden Hassan
2021-09-27 12:33:47 +02:00
parent 85242b0544
commit a7aa94e084
15 changed files with 362 additions and 47 deletions

View File

@@ -16,13 +16,16 @@ const routes: Routes = [
path: 'rapportera/:deltagareId',
data: { title: 'Skapa rapport' },
// eslint-disable-next-line max-len
loadChildren: () => import('./pages/deltagare-report/pages/deltagare-avvikelse/deltagare-avvikelse.module').then(m => m.DeltagareAvvikelseModule),
loadChildren: () =>
import('./pages/deltagare-report/pages/deltagare-avvikelse/deltagare-avvikelse.module').then(
m => m.DeltagareAvvikelseModule
),
},
{
path: 'planering/:deltagareId',
data: { title: 'Skapa gemensam planering' },
loadChildren: () =>
import('./pages/deltagare-report/deltagare-gemensam-planering/deltagare-gemensam-planering.module').then(
import('./pages/deltagare-report/pages/deltagare-gemensam-planering/deltagare-gemensam-planering.module').then(
m => m.DeltagareGemensamPlaneringModule
),
},

View File

@@ -1,3 +0,0 @@
<msfa-layout>
<p>deltagare-gemensam-planering works!</p>
</msfa-layout>

View File

@@ -1,9 +0,0 @@
import { ChangeDetectionStrategy, Component } from '@angular/core';
@Component({
selector: 'msfa-deltagare-gemensam-planering',
templateUrl: './deltagare-gemensam-planering.component.html',
styleUrls: ['./deltagare-gemensam-planering.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class DeltagareGemensamPlaneringComponent {}

View File

@@ -1,24 +1,25 @@
import { Alternative } from '@msfa-enums/alternative.enum'
import { DayOrPartOfDay } from '@msfa-enums/day-or-part-of-day.enum'
import { RadiobuttonModel } from '@af/digi-ng/_form/form-radiobutton-group'
import { Alternative } from '@msfa-enums/alternative.enum';
import { DayOrPartOfDay } from '@msfa-enums/day-or-part-of-day.enum';
import { RadiobuttonModel } from '@af/digi-ng/_form/form-radiobutton-group';
export const avvikelseAlternatives: RadiobuttonModel[] = [
{
label: 'Frånvaro',
value: Alternative.FRANVARO
value: Alternative.FRANVARO,
},
{
label: 'Avvikelse',
value: Alternative.AVVIKELSE
}
]
value: Alternative.AVVIKELSE,
},
];
export const dayOrPartOfDay: RadiobuttonModel[] = [{
export const dayOrPartOfDay: RadiobuttonModel[] = [
{
label: 'Heldag',
value: DayOrPartOfDay.HELDAG
value: DayOrPartOfDay.HELDAG,
},
{
label: 'Del av dag',
value: DayOrPartOfDay.DEL_AV_DAG
}
]
value: DayOrPartOfDay.DEL_AV_DAG,
},
];

View File

@@ -0,0 +1,43 @@
<msfa-layout>
<form [formGroup]="planeringFormGroup" (ngSubmit)="onFormSubmitted()">
<msfa-report-layout
reportTitle="Gemensam Planering"
reportSubTitle="Aktiviteter"
[totalAmountOfSteps]="totalAmountOfSteps"
[isPeriodDate]="true"
[currentStep]="currentStep"
[startDate]="'2021-09-01'"
[endDate]="'2021-09-30'"
(currentStepEvent)="currentStep = $event"
(sendRequestEvent)="sendRequest = $event"
>
<div class="gemensam-planering_activity" *ngIf="currentStep === 1">
<h3>Deltar arbetssökande på distans?</h3>
<digi-ng-form-radiobutton-group
[afRadiobuttons]="distanceChoice"
[formControlName]="participatedOnDistansFormControlName"
[afRadiobuttonGroupDirection]="direction"
></digi-ng-form-radiobutton-group>
</div>
<div class="gemensam-planering_activity" *ngIf="currentStep === 2">Förhandsgranska</div>
<div class="gemensam-planering__step-buttons-wrapper">
<ng-container *ngIf="currentStep > 1">
<digi-button
class="gemensam-planering__step-buttons-wrapper--space-right"
af-variation="secondary"
af-size="m"
(afOnClick)="previousStep()"
>
Tillbaka
</digi-button>
</ng-container>
<ng-container *ngIf="currentStep === (totalAmountOfSteps -1)">
<digi-button af-size="m" (afOnClick)="nextStep()"> Förhandsgranska </digi-button>
</ng-container>
<ng-container *ngIf="currentStep === totalAmountOfSteps">
<digi-button af-size="m" (afOnClick)="sendRequest(true)"> Skicka in </digi-button>
</ng-container>
</div>
</msfa-report-layout>
</form>
</msfa-layout>

View File

@@ -0,0 +1,8 @@
.gemensam-planering {
&__pages {
margin: 5rem 0rem;
}
&__step-buttons-wrapper--space-right {
margin-right: 1rem;
}
}

View File

@@ -4,6 +4,8 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
import { RouterTestingModule } from '@angular/router/testing';
import { LayoutComponent } from '@msfa-shared/components/layout/layout.component';
import { DeltagareGemensamPlaneringComponent } from './deltagare-gemensam-planering.component';
import { DigiNgFormRadiobuttonGroupModule } from '@af/digi-ng/_form/form-radiobutton-group';
import { DigiNgFormCheckboxModule } from '@af/digi-ng/_form/form-checkbox';
describe('DeltagareGemensamPlaneringComponent', () => {
let component: DeltagareGemensamPlaneringComponent;
@@ -13,7 +15,12 @@ describe('DeltagareGemensamPlaneringComponent', () => {
await TestBed.configureTestingModule({
schemas: [CUSTOM_ELEMENTS_SCHEMA],
declarations: [DeltagareGemensamPlaneringComponent, LayoutComponent],
imports: [RouterTestingModule, HttpClientTestingModule],
imports: [
RouterTestingModule,
HttpClientTestingModule,
DigiNgFormRadiobuttonGroupModule,
DigiNgFormCheckboxModule,
],
}).compileComponents();
});

View File

@@ -0,0 +1,63 @@
import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';
import { RadiobuttonGroupDirection, RadiobuttonModel } from '@af/digi-ng/_form/form-radiobutton-group';
import { AbstractControl, FormArray, FormControl, FormControlName, FormGroup } from '@angular/forms';
import { RequiredValidator } from '@msfa-utils/validators/required.validator';
import { GemensamPlaneringService } from '../../services/gemensam-planering.service';
@Component({
selector: 'msfa-deltagare-gemensam-planering',
templateUrl: './deltagare-gemensam-planering.component.html',
styleUrls: ['./deltagare-gemensam-planering.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class DeltagareGemensamPlaneringComponent implements OnInit {
totalAmountOfSteps = 2;
currentStep = 1;
direction = RadiobuttonGroupDirection.HORIZONTAL;
planeringFormGroup: FormGroup | null = null;
readonly participatedOnDistansFormControlName = 'participatedOnDistans';
distanceChoice: RadiobuttonModel[] = [
{
label: 'Ja',
value: 'Ja',
},
{
label: 'Nej',
value: 'Nej',
},
];
constructor(private gemensamPlaneringService: GemensamPlaneringService) {}
ngOnInit(): void {
this.planeringFormGroup = new FormGroup({
participatedOnDistans: new FormControl('', [RequiredValidator()]),
});
}
nextStep(): void {
if (this.planeringFormGroup?.valid && this.currentStep < this.totalAmountOfSteps) {
console.log(this.participatedOnDistansFormControl.value);
this.currentStep++;
console.log(this.currentStep);
}
}
previousStep(): void {
if (this.currentStep > 1) {
this.currentStep--;
console.log(this.currentStep);
}
}
sendRequest(val: boolean): boolean {
return val;
}
get participatedOnDistansFormControl(): AbstractControl | undefined {
return this.planeringFormGroup?.get(this.participatedOnDistansFormControlName);
}
onFormSubmitted(): void {}
}

View File

@@ -3,6 +3,11 @@ import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import { LayoutModule } from '@msfa-shared/components/layout/layout.module';
import { DeltagareGemensamPlaneringComponent } from './deltagare-gemensam-planering.component';
import { DigiNgProgressProgressbarModule } from '@af/digi-ng/_progress/progressbar';
import { DigiNgFormRadiobuttonGroupModule } from '@af/digi-ng/_form/form-radiobutton-group';
import { ReactiveFormsModule } from '@angular/forms';
import { ReportLayoutModule } from '../../../../shared/report-layout/report-layout.module';
import { DigiNgFormCheckboxModule } from '@af/digi-ng/_form/form-checkbox';
@NgModule({
schemas: [CUSTOM_ELEMENTS_SCHEMA],
@@ -11,6 +16,11 @@ import { DeltagareGemensamPlaneringComponent } from './deltagare-gemensam-planer
CommonModule,
RouterModule.forChild([{ path: '', component: DeltagareGemensamPlaneringComponent }]),
LayoutModule,
DigiNgProgressProgressbarModule,
DigiNgFormRadiobuttonGroupModule,
ReactiveFormsModule,
ReportLayoutModule,
DigiNgFormCheckboxModule,
],
exports: [DeltagareGemensamPlaneringComponent],
})

View File

@@ -0,0 +1,20 @@
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 { Observable } from 'rxjs';
import { filter, map } from 'rxjs/operators';
@Injectable({
providedIn: 'root',
})
export class GemensamPlaneringService {
private _apiBaseUrl = `${environment.api.url}`;
public getActivities$(): Observable<Activity[]> {
return this.httpClient.get<{ data: ActivityResponse[] }>(`${this._apiBaseUrl}/activities`).pipe(
filter(response => !!response?.data),
map(({ data }) => data.map(aktivitet => mapResponseToActivity(aktivitet)))
);
}
constructor(private httpClient: HttpClient) {}
}

View File

@@ -1,23 +1,26 @@
import { ActivityResponse } from './api/activity-response.model';
export interface Activity {
id: string;
name: string;
activityId: number;
activityName: string;
description?: string;
subActivities: SubActivity[];
}
export interface SubActivity {
subId: string;
subName: string;
subDescription: string;
id: number;
subActivityName: string;
subActivityDescription: string;
}
export interface ActivityResponse {
id: number;
activityName: string;
description?: string;
subActivities: SubActivity[];
}
export function mapResponseToActivity(data: ActivityResponse): Activity {
const { aktivitets_id, aktivitets_namn } = data;
const { id, activityName, description, subActivities } = data;
return {
id: aktivitets_id,
name: aktivitets_namn
}
activityId: id,
activityName,
description,
subActivities,
};
}

View File

@@ -0,0 +1,11 @@
export interface Activity {
activityId: string;
name: string;
description: string;
}
export interface SubActivity {
subActivityId: string;
name: string;
description: string;
}

View File

@@ -0,0 +1,155 @@
function generateActivities() {
const activities = [
{
id: 24,
activityName: 'Motiverande samtal',
description: 'test',
subActivities: [],
},
{
id: 156,
activityName: 'Hälsofrämjande åtgärder',
description: 'test',
subActivities: [],
},
{
id: 157,
activityName: 'Information',
description: 'test',
subActivities: [],
},
{
id: 158,
activityName: 'Insats hos annan aktör',
description: 'test',
subActivities: [],
},
{
id: 159,
activityName: 'Kontakter med arbetsgivare eller andra relevanta aktörer',
description: 'test',
subActivities: [],
},
{
id: 160,
activityName: 'Kortare utbildning',
description: 'test',
subActivities: [],
},
{
id: 161,
activityName: 'Vägledning mot arbete eller utbildning',
description: 'test',
subActivities: [],
},
{
id: 162,
activityName: 'Praktiskt stöd',
description: 'test',
subActivities: [
{
id: 321,
subActivityName: 'Hitta och söka jobb',
description: '',
},
{
id: 341,
subActivityName: 'Söka utbildning',
description: '',
},
{
id: 351,
subActivityName: 'Utforma ansökningar, träning inför intervjuer och arbetsgivarkontakter, uppföljning',
description: '',
},
],
},
{
id: 163,
activityName: 'Stöd för att stärka deltagarens digitala kompetens',
description: 'test',
subActivities: [],
},
{
id: 164,
activityName: 'Stöd för att stärka deltagarens språkkunskaper',
description: 'test',
subActivities: [],
},
{
id: 165,
activityName: 'Individuellt utvecklingsmöte',
description: 'test',
subActivities: [],
},
{
id: 188,
activityName: 'Eget arbete enligt individuell planering med anordnare',
description: 'test',
subActivities: [
{
id: 21,
subActivityName: 'Skriva ansökningshandlingar',
description: 'Skapa CV och dylikt',
},
{
id: 22,
subActivityName: 'Kontakta referenter',
description: 'Be om underlag om styrkor och utvecklingsområden',
},
{
id: 23,
subActivityName: 'Skriva en egen handlingsplan',
description:
'Deltagaren tar fram förslag på aktiviteter att göra på \
egen hand för att föra personen närmare arbetsmarknaden',
},
{
id: 231,
subActivityName: 'Ta fram en egen målbild',
description: 'Beskriv konkret var personen ser sig om ett år',
},
{
id: 25,
subActivityName: 'Läsa på om arbetsgivares verksamhet',
description: 'Sker inför besök/ praktik/ jobb',
},
{
id: 26,
subActivityName: 'Titta på yrkesfilmer',
description: 'För att förstå mer om vissa yrken',
},
{
id: 27,
subActivityName: 'Undersöka krav för olika yrken',
description: 'Exempelvis utbildning',
},
{
id: 28,
subActivityName: 'Delta på externa jobbmässor och rekryteringsträffar',
description: 'Deltagare får större möjligheter att utöka sitt nätverk',
},
{
id: 29,
subActivityName: 'Delta i webbinarier med arbetssökarfokus',
description: 'Exempelvis intervjuträning, marknadsför dig själv',
},
{
id: 30,
subActivityName: 'Kontakta arbetsgivare / utbildningsanordnare',
description: 'Deltagare tar eget initiativ',
},
{
id: 241,
subActivityName: 'Kontakta CSN',
description: 'Och diverse myndigheter',
},
],
},
];
console.log('Activities generated...');
return activities;
}
export default {
generate: generateActivities,
};

View File

@@ -16,10 +16,12 @@ import orsaksKoderFranvaro from './avvikelse-alternative/orsaks-koder-franvaro.j
import orsaksKoderAvvikelse from './avvikelse-alternative/orsaks-koder-avvikelse.js';
import kandaAvvikelseKoder from './avvikelse-alternative/kanda-avvikelse-koder.js';
import fragorForAvvikelser from './avvikelse-alternative/fragor-for-avvikelser.js';
import activities from './activities.js';
const ORGANIZATIONS = organizations.generate();
const AUTHORIZATIONS = ['Hantera användare', 'Hantera origisation', 'Hantera ekonomi'];
const generatedActivities = activities.generate();
const generatedEmployees = employees.generate(50);
const generatedDeltagare = deltagare.generate(50);
const generatedDeltagareHandelser = deltagareHandelser.generate(10);
@@ -129,6 +131,7 @@ const apiData = {
kandaavvikelsekoder: generateKandaAvvikelseKoder,
fragorforavvikelser: generateFragorForAvvikelser,
minaDeltagare: chooseRandom(generatedAvrop, 3),
activities: generatedActivities,
};
fs.writeFileSync('api.json', JSON.stringify(apiData, null, '\t'));