feat(employee): Now showing utförande verksamheter/adresser and tjänster correctly. (TV-554)
Squashed commit of the following: commit 3d1d4a33905f41028f97e7f86131e6e284aebba9 Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Wed Sep 8 11:51:06 2021 +0200 Fixed some tests and linting commit 651300f244f8ef3ca71f290de421033c05f4a1ca Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Wed Sep 8 11:43:34 2021 +0200 Some style changes commit bc0762ba3fa36dc3b85ac3316d87a8a942fe30ee Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Wed Sep 8 09:13:57 2021 +0200 Fixed issue with edit employee after api changes commit 757f69ddcdf3913fcbc967df3fdcf8cbb6ed3eb5 Author: Erik Tiekstra <erik.tiekstra@arbetsformedlingen.se> Date: Wed Sep 8 08:48:44 2021 +0200 Added tjänst and utforandeverksamheter/adresser to employee card
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
export interface EmployeeAdressResponse {
|
||||
id: number;
|
||||
namn: string;
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
export interface EmployeeTjanstResponse {
|
||||
namn: string;
|
||||
tjansteKod: string;
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
import { EmployeeAdressResponse } from './employee-adress.response.model';
|
||||
|
||||
export interface EmployeeUtforandeVerksamhetResponse {
|
||||
id: number;
|
||||
namn: string;
|
||||
allaAdresser: boolean;
|
||||
adresser: EmployeeAdressResponse[];
|
||||
}
|
||||
@@ -1,18 +1,7 @@
|
||||
import { RoleEnum } from '@msfa-enums/role.enum';
|
||||
import { PaginationMeta } from '@msfa-models/pagination-meta.model';
|
||||
import { TjanstResponse } from './tjanst.response.model';
|
||||
|
||||
interface UtforandeVerksamhetResponse {
|
||||
id: number;
|
||||
name: string;
|
||||
allaAdresser: boolean;
|
||||
adresser?: AdressResponse[];
|
||||
}
|
||||
|
||||
interface AdressResponse {
|
||||
id: number;
|
||||
name: string;
|
||||
}
|
||||
import { EmployeeTjanstResponse } from './employee-tjanst.response.model';
|
||||
import { EmployeeUtforandeVerksamhetResponse } from './employee-utforande-verksamhet.response.model';
|
||||
|
||||
export interface EmployeeCompactResponse {
|
||||
ciamUserId: string;
|
||||
@@ -29,14 +18,9 @@ export interface EmployeeResponse {
|
||||
email: string;
|
||||
ssn: string;
|
||||
roles: RoleEnum[];
|
||||
tjanster: TjanstResponse[];
|
||||
tjanster: EmployeeTjanstResponse[];
|
||||
allaUtforandeVerksamheter: boolean;
|
||||
utforandeVerksamheter: UtforandeVerksamhetResponse[];
|
||||
|
||||
// Will be removed
|
||||
tjansteKoder: string[];
|
||||
utforandeVerksamhetIds: number[];
|
||||
adressIds: number[];
|
||||
utforandeVerksamheter: EmployeeUtforandeVerksamhetResponse[];
|
||||
}
|
||||
|
||||
export interface EmployeesDataResponse {
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
export interface UtforandeAdressResponse {
|
||||
id: number;
|
||||
namn: string;
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
import { UtforandeAdressResponse } from './utforande-adress.response.model';
|
||||
|
||||
export interface UtforandeVerksamhetResponse {
|
||||
id: number;
|
||||
name: string;
|
||||
adresser: UtforandeAdressResponse[];
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
import { EmployeeAdressResponse } from './api/employee-adress.response.model';
|
||||
|
||||
export interface EmployeeAdress {
|
||||
id: number;
|
||||
name: string;
|
||||
}
|
||||
|
||||
export function mapResponseToEmployeeAdress(data: EmployeeAdressResponse): EmployeeAdress {
|
||||
const { id, namn } = data;
|
||||
|
||||
return {
|
||||
id,
|
||||
name: namn,
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
import { EmployeeTjanstResponse } from './api/employee-tjanst.response.model';
|
||||
|
||||
export interface EmployeeTjanst {
|
||||
name: string;
|
||||
tjansteKod: string;
|
||||
}
|
||||
|
||||
export function mapResponseToEmployeeTjanst(data: EmployeeTjanstResponse): EmployeeTjanst {
|
||||
const { namn, tjansteKod } = data;
|
||||
|
||||
return {
|
||||
name: namn,
|
||||
tjansteKod,
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
import { EmployeeUtforandeVerksamhetResponse } from './api/employee-utforande-verksamhet.response.model';
|
||||
import { EmployeeAdress, mapResponseToEmployeeAdress } from './employee-adress.model';
|
||||
|
||||
export interface EmployeeUtforandeVerksamhet {
|
||||
id: number;
|
||||
name: string;
|
||||
allaAdresser: boolean;
|
||||
adresser: EmployeeAdress[];
|
||||
}
|
||||
|
||||
export function mapResponseToEmployeeUtforandeVerksamhet(
|
||||
data: EmployeeUtforandeVerksamhetResponse
|
||||
): EmployeeUtforandeVerksamhet {
|
||||
const { id, namn, allaAdresser, adresser } = data;
|
||||
|
||||
return {
|
||||
id,
|
||||
name: namn,
|
||||
allaAdresser,
|
||||
adresser: adresser.map(adress => mapResponseToEmployeeAdress(adress)),
|
||||
};
|
||||
}
|
||||
@@ -1,22 +1,14 @@
|
||||
import { RoleEnum } from '@msfa-enums/role.enum';
|
||||
import { EmployeeCompactResponse, EmployeeResponse } from './api/employee.response.model';
|
||||
import { EmployeeTjanst, mapResponseToEmployeeTjanst } from './employee-tjanst.model';
|
||||
import {
|
||||
EmployeeUtforandeVerksamhet,
|
||||
mapResponseToEmployeeUtforandeVerksamhet,
|
||||
} from './employee-utforande-verksamhet.model';
|
||||
import { PaginationMeta } from './pagination-meta.model';
|
||||
import { mapResponseToTjanst, Tjanst } from './tjanst.model';
|
||||
|
||||
const CURRENT_YEAR = new Date().getFullYear().toString().slice(2, 4);
|
||||
|
||||
interface UtforandeVerksamhet {
|
||||
id: number;
|
||||
name: string;
|
||||
allaAdresser: boolean;
|
||||
adresser?: Adress[];
|
||||
}
|
||||
|
||||
interface Adress {
|
||||
id: number;
|
||||
name: string;
|
||||
}
|
||||
|
||||
export interface EmployeeCompact {
|
||||
id: string;
|
||||
fullName: string;
|
||||
@@ -33,13 +25,9 @@ export interface Employee {
|
||||
email: string;
|
||||
ssn: string;
|
||||
roles: RoleEnum[];
|
||||
tjanster: Tjanst[];
|
||||
tjanster: EmployeeTjanst[];
|
||||
allaUtforandeVerksamheter: boolean;
|
||||
utforandeVerksamheter: UtforandeVerksamhet[];
|
||||
|
||||
tjanstCodes: string[];
|
||||
utforandeVerksamhetIds: number[];
|
||||
utforandeAdressIds: number[];
|
||||
utforandeVerksamheter: EmployeeUtforandeVerksamhet[];
|
||||
}
|
||||
|
||||
export interface EmployeesData {
|
||||
@@ -81,9 +69,6 @@ export function mapResponseToEmployee(data: EmployeeResponse): Employee {
|
||||
tjanster,
|
||||
allaUtforandeVerksamheter,
|
||||
utforandeVerksamheter,
|
||||
tjansteKoder,
|
||||
utforandeVerksamhetIds,
|
||||
adressIds,
|
||||
} = data;
|
||||
return {
|
||||
id: ciamUserId,
|
||||
@@ -93,11 +78,10 @@ export function mapResponseToEmployee(data: EmployeeResponse): Employee {
|
||||
email,
|
||||
ssn: ssn ? mapResponseToSsn(ssn) : null,
|
||||
roles: roles || [],
|
||||
tjanster: tjanster?.map(tjanst => mapResponseToTjanst(tjanst)),
|
||||
tjanster: tjanster?.map(tjanst => mapResponseToEmployeeTjanst(tjanst)),
|
||||
allaUtforandeVerksamheter,
|
||||
utforandeVerksamheter,
|
||||
tjanstCodes: tjansteKoder || [],
|
||||
utforandeVerksamhetIds: utforandeVerksamhetIds || [],
|
||||
utforandeAdressIds: adressIds || [],
|
||||
utforandeVerksamheter: utforandeVerksamheter.map(utforandeVerksamhet =>
|
||||
mapResponseToEmployeeUtforandeVerksamhet(utforandeVerksamhet)
|
||||
),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
import { Tjanst } from "./tjanst.model";
|
||||
import { Tjanst } from './tjanst.model';
|
||||
|
||||
export interface FormTagData {
|
||||
tjanstekod: string,
|
||||
name: string;
|
||||
tjanstekod: string;
|
||||
name: string;
|
||||
}
|
||||
|
||||
|
||||
export function mapTjanstToFormTag(tjanstData: Tjanst): FormTagData {
|
||||
const { name, code } = tjanstData;
|
||||
return { tjanstekod: code, name}
|
||||
}
|
||||
const { name, code } = tjanstData;
|
||||
return { tjanstekod: code, name };
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
import { UtforandeAdressResponse } from './api/utforande-adress.response.model';
|
||||
|
||||
export interface UtforandeAdress {
|
||||
id: number;
|
||||
name: string;
|
||||
}
|
||||
|
||||
export function mapResponseToUtforandeAdress(data: UtforandeAdressResponse): UtforandeAdress {
|
||||
const { id, namn } = data;
|
||||
|
||||
return {
|
||||
id,
|
||||
name: namn,
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
import { UtforandeVerksamhetResponse } from './api/utforande-verksamhet.response.model';
|
||||
import { mapResponseToUtforandeAdress, UtforandeAdress } from './utforande-adress.model';
|
||||
|
||||
export interface UtforandeVerksamhet {
|
||||
id: number;
|
||||
name: string;
|
||||
adresser: UtforandeAdress[];
|
||||
}
|
||||
|
||||
export function mapResponseToUtforandeVerksamhet(data: UtforandeVerksamhetResponse): UtforandeVerksamhet {
|
||||
const { id, name, adresser } = data;
|
||||
|
||||
return {
|
||||
id,
|
||||
name,
|
||||
adresser: adresser.map(adress => mapResponseToUtforandeAdress(adress)),
|
||||
};
|
||||
}
|
||||
@@ -24,7 +24,6 @@ import { Sort } from '@msfa-models/sort.model';
|
||||
import { ErrorService } from '@msfa-services/error.service';
|
||||
import { BehaviorSubject, combineLatest, Observable, of, throwError } from 'rxjs';
|
||||
import { catchError, distinctUntilChanged, filter, map, switchMap, take, tap } from 'rxjs/operators';
|
||||
import { TjanstService } from './tjanst.service';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root',
|
||||
@@ -48,11 +47,7 @@ export class EmployeeService extends UnsubscribeDirective {
|
||||
private _employeeToDelete$ = new BehaviorSubject<Employee>(null);
|
||||
public employeeToDelete$: Observable<Employee> = this._employeeToDelete$.asObservable();
|
||||
|
||||
constructor(
|
||||
private httpClient: HttpClient,
|
||||
private errorService: ErrorService,
|
||||
private tjanstService: TjanstService
|
||||
) {
|
||||
constructor(private httpClient: HttpClient, private errorService: ErrorService) {
|
||||
super();
|
||||
super.unsubscribeOnDestroy(
|
||||
combineLatest([this._currentEmployeeId$, this._lastUpdatedEmployeeId$])
|
||||
@@ -63,20 +58,7 @@ export class EmployeeService extends UnsubscribeDirective {
|
||||
!currLastUpdatedEmployeeId && prevEmployeeId === currEmployeeId
|
||||
),
|
||||
switchMap(([currentEmployeeId]) =>
|
||||
combineLatest([this._fetchEmployee$(currentEmployeeId), this.tjanstService.tjanster$]).pipe(
|
||||
filter(([employee, allTjanster]) => !!(employee && allTjanster?.length)),
|
||||
map(([employee, allTjanster]) => {
|
||||
const tjanster = [];
|
||||
employee.tjanstCodes?.forEach(code => {
|
||||
const currentTjanst = allTjanster.find(tjanst => tjanst.code === code);
|
||||
|
||||
if (currentTjanst) {
|
||||
tjanster.push(currentTjanst);
|
||||
}
|
||||
});
|
||||
return { ...employee, tjanster };
|
||||
})
|
||||
)
|
||||
this._fetchEmployee$(currentEmployeeId).pipe(filter(employee => !!employee))
|
||||
)
|
||||
)
|
||||
.subscribe(employee => {
|
||||
|
||||
@@ -2,39 +2,34 @@ import { HttpClient } from '@angular/common/http';
|
||||
import { Injectable } from '@angular/core';
|
||||
import { environment } from '@msfa-environment';
|
||||
import { Params } from '@msfa-models/api/params.model';
|
||||
import { UtforandeVerksamhetResponse } from '@msfa-models/api/utforande-verksamhet.response.model';
|
||||
import { UtforandeAdress } from '@msfa-models/utforande-adress.model';
|
||||
import { mapResponseToUtforandeVerksamhet, UtforandeVerksamhet } from '@msfa-models/utforande-verksamhet.model';
|
||||
import {
|
||||
TreeNode,
|
||||
TreeNodesSelectorService,
|
||||
} from '@msfa-shared/components/tree-nodes-selector/services/tree-nodes-selector.service';
|
||||
import { Observable, of } from 'rxjs';
|
||||
|
||||
export interface UtforandeVerksamhetAdress {
|
||||
id: number;
|
||||
namn: string;
|
||||
}
|
||||
|
||||
export interface UtforandeVerksamhet {
|
||||
id: number;
|
||||
name: string;
|
||||
adresser: Array<UtforandeVerksamhetAdress>;
|
||||
}
|
||||
import { map } from 'rxjs/operators';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root',
|
||||
})
|
||||
export class UtforandeVerksamheterService {
|
||||
private readonly apiBaseUrl = `${environment.api.url}/utforandeverksamheter`;
|
||||
private readonly _apiBaseUrl = `${environment.api.url}/utforandeverksamheter`;
|
||||
|
||||
constructor(private treeNodesSelectorService: TreeNodesSelectorService, private httpClient: HttpClient) {}
|
||||
|
||||
getUtforandeVerksamheter(tjanstIds: Array<number>): Observable<Array<UtforandeVerksamhet>> {
|
||||
fetchUtforandeVerksamheter$(tjanstIds: number[]): Observable<UtforandeVerksamhet[]> {
|
||||
if (!tjanstIds.length) {
|
||||
return of<Array<UtforandeVerksamhet>>([]);
|
||||
return of<UtforandeVerksamhet[]>([]);
|
||||
}
|
||||
|
||||
const params: Params = { tjansteIds: tjanstIds.map(tjanstId => tjanstId.toString()) };
|
||||
|
||||
return this.httpClient.get<Array<UtforandeVerksamhet>>(`${this.apiBaseUrl}`, { params });
|
||||
return this.httpClient
|
||||
.get<{ data: UtforandeVerksamhetResponse[] }>(`${this._apiBaseUrl}`, { params })
|
||||
.pipe(map(({ data }) => data.map(uv => mapResponseToUtforandeVerksamhet(uv))));
|
||||
}
|
||||
|
||||
getSelectedAdressIdsFromTreeNode(treeNode: TreeNode): number[] {
|
||||
@@ -43,7 +38,7 @@ export class UtforandeVerksamheterService {
|
||||
return selectedUtforandeVerksamheter.map(uv => uv.adresser.map(adress => adress.id)).flat();
|
||||
}
|
||||
|
||||
getTreeNodeDataFromUtforandeVerksamheter(utforandeVerksamhetList: Array<UtforandeVerksamhet>): TreeNode | null {
|
||||
getTreeNodeDataFromUtforandeVerksamheter(utforandeVerksamhetList: UtforandeVerksamhet[]): TreeNode | null {
|
||||
let treeNode: TreeNode | null = null;
|
||||
|
||||
if (!utforandeVerksamhetList || utforandeVerksamhetList.length === 0 || !Array.isArray(utforandeVerksamhetList)) {
|
||||
@@ -67,7 +62,7 @@ export class UtforandeVerksamheterService {
|
||||
childItemType: 'Adresser',
|
||||
children: utforandeVerksamhet.adresser
|
||||
? utforandeVerksamhet.adresser.map(adress => {
|
||||
return { label: adress.namn, isSelected: false, value: adress };
|
||||
return { label: adress.name, isSelected: false, value: adress };
|
||||
})
|
||||
: [],
|
||||
};
|
||||
@@ -80,8 +75,8 @@ export class UtforandeVerksamheterService {
|
||||
return treeNode;
|
||||
}
|
||||
|
||||
getSelectedUtforandeVerksamheterFromTreeNode(treeNode: TreeNode): Array<UtforandeVerksamhet> {
|
||||
let utforandeVerksamhetList: Array<UtforandeVerksamhet> = [];
|
||||
getSelectedUtforandeVerksamheterFromTreeNode(treeNode: TreeNode): UtforandeVerksamhet[] {
|
||||
let utforandeVerksamhetList: UtforandeVerksamhet[] = [];
|
||||
|
||||
if (!treeNode || !treeNode.children) {
|
||||
return utforandeVerksamhetList;
|
||||
@@ -95,7 +90,7 @@ export class UtforandeVerksamheterService {
|
||||
name: originalUtforandeVerksamhet?.name,
|
||||
id: originalUtforandeVerksamhet?.id,
|
||||
adresser: utforandeVerksamhetNode.children.map(adressNode => {
|
||||
return adressNode.value as UtforandeVerksamhetAdress;
|
||||
return adressNode.value as UtforandeAdress;
|
||||
}),
|
||||
};
|
||||
return utforandeVerksamhet;
|
||||
|
||||
Reference in New Issue
Block a user