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: 1b51bf685242b0Author: 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: 43338919bedbd3Author: 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: d263f275846c2cAuthor: 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:
@@ -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
|
||||
),
|
||||
},
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
<msfa-layout>
|
||||
<p>deltagare-gemensam-planering works!</p>
|
||||
</msfa-layout>
|
||||
@@ -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 {}
|
||||
@@ -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,
|
||||
},
|
||||
];
|
||||
|
||||
@@ -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>
|
||||
@@ -0,0 +1,8 @@
|
||||
.gemensam-planering {
|
||||
&__pages {
|
||||
margin: 5rem 0rem;
|
||||
}
|
||||
&__step-buttons-wrapper--space-right {
|
||||
margin-right: 1rem;
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
});
|
||||
|
||||
@@ -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 {}
|
||||
}
|
||||
@@ -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],
|
||||
})
|
||||
@@ -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) {}
|
||||
}
|
||||
@@ -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,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
export interface Activity {
|
||||
activityId: string;
|
||||
name: string;
|
||||
description: string;
|
||||
}
|
||||
|
||||
export interface SubActivity {
|
||||
subActivityId: string;
|
||||
name: string;
|
||||
description: string;
|
||||
}
|
||||
155
mock-api/mina-sidor-fa/scripts/activities.js
Normal file
155
mock-api/mina-sidor-fa/scripts/activities.js
Normal 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,
|
||||
};
|
||||
@@ -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'));
|
||||
|
||||
Reference in New Issue
Block a user