Merge branch 'develop' of ssh://bitbucket.arbetsformedlingen.se:7999/tea/dafa-web-monorepo into develop
This commit is contained in:
@@ -99,7 +99,19 @@
|
||||
</digi-form-validation-message>
|
||||
</fieldset>
|
||||
|
||||
<div class="edit-employee-form__footer">
|
||||
<digi-notification-alert
|
||||
*ngIf="errorWhileUpdating"
|
||||
af-variation="danger"
|
||||
af-heading="Kunde inte spara"
|
||||
af-heading-level="h2"
|
||||
[afCloseable]="true"
|
||||
(afOnClose)="emitCloseError()"
|
||||
>
|
||||
<p>Personalkontot för {{employee.fullName}} kunde inte redigeras. Vänligen försök igen.</p>
|
||||
<p class="msfa__small-text" *ngIf="errorWhileUpdating.message">{{errorWhileUpdating.message}}</p>
|
||||
</digi-notification-alert>
|
||||
|
||||
<footer class="edit-employee-form__footer">
|
||||
<a
|
||||
class="edit-employee-form__link-btn edit-employee-form__link-btn--secondary"
|
||||
[routerLink]="['/administration/personal', employee.id]"
|
||||
@@ -107,7 +119,7 @@
|
||||
Avbryt
|
||||
</a>
|
||||
<digi-button af-type="submit">Spara ändringar</digi-button>
|
||||
</div>
|
||||
</footer>
|
||||
</form>
|
||||
</digi-typography>
|
||||
|
||||
|
||||
@@ -8,8 +8,8 @@ import { HttpClientTestingModule } from '@angular/common/http/testing';
|
||||
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { ReactiveFormsModule } from '@angular/forms';
|
||||
import { RouterTestingModule } from '@angular/router/testing';
|
||||
import { TreeNodesSelectorModule } from '@msfa-shared/components/tree-nodes-selector/tree-nodes-selector.module';
|
||||
|
||||
import { EditEmployeeFormComponent } from './edit-employee-form.component';
|
||||
|
||||
describe('EditEmployeeFormComponent', () => {
|
||||
@@ -29,6 +29,7 @@ describe('EditEmployeeFormComponent', () => {
|
||||
DigiNgFormCheckboxModule,
|
||||
HttpClientTestingModule,
|
||||
TreeNodesSelectorModule,
|
||||
RouterTestingModule,
|
||||
],
|
||||
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||
}).compileComponents();
|
||||
@@ -37,6 +38,22 @@ describe('EditEmployeeFormComponent', () => {
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(EditEmployeeFormComponent);
|
||||
component = fixture.componentInstance;
|
||||
component.employee = {
|
||||
id: 'string',
|
||||
firstName: 'string',
|
||||
lastName: 'string',
|
||||
fullName: 'string',
|
||||
email: 'string',
|
||||
ssn: 'string',
|
||||
roles: [],
|
||||
tjanster: [],
|
||||
allaUtforandeVerksamheter: false,
|
||||
utforandeVerksamheter: [],
|
||||
|
||||
tjanstCodes: [],
|
||||
utforandeVerksamhetIds: [],
|
||||
utforandeAdressIds: [],
|
||||
};
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@ import {
|
||||
import { AbstractControl, FormControl, FormGroup } from '@angular/forms';
|
||||
import { EmployeeEditRequest } from '@msfa-models/api/employee-edit.request.model';
|
||||
import { Employee } from '@msfa-models/employee.model';
|
||||
import { CustomError } from '@msfa-models/error/custom-error';
|
||||
import { Role } from '@msfa-models/role.model';
|
||||
import { Tjanst } from '@msfa-models/tjanst.model';
|
||||
import {
|
||||
@@ -46,8 +47,10 @@ export class EditEmployeeFormComponent implements OnInit, OnChanges {
|
||||
@Input() availableRoles: Role[];
|
||||
@Input() availableTjanster: Tjanst[];
|
||||
@Input() availableUtforandeVerksamheter: UtforandeVerksamhet[];
|
||||
@Input() errorWhileUpdating: CustomError;
|
||||
|
||||
@Output() tjansterSelected = new EventEmitter<Tjanst[]>();
|
||||
@Output() closeError = new EventEmitter<void>();
|
||||
@Output() formSubmitted = new EventEmitter<EmployeeEditRequest>();
|
||||
|
||||
readonly ButtonVariation = ButtonVariation;
|
||||
@@ -226,4 +229,8 @@ export class EditEmployeeFormComponent implements OnInit, OnChanges {
|
||||
Object.fromEntries([[this.toggleAllUtforandeVerksamhetFormControlName, hasSelectedAllLeafNodes]])
|
||||
);
|
||||
}
|
||||
|
||||
emitCloseError(): void {
|
||||
this.closeError.emit();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<msfa-layout>
|
||||
<section class="employee-form" *ngIf="employee$ | async as employee">
|
||||
<digi-typography>
|
||||
<digi-typography>
|
||||
<section class="employee-form" *ngIf="employee$ | async as employee">
|
||||
<header class="employee-form__header">
|
||||
<h1>Redigera personalkonto</h1>
|
||||
<msfa-employee-delete [returnToEmployeeList]="true"></msfa-employee-delete>
|
||||
@@ -13,39 +13,44 @@
|
||||
Ta bort konto
|
||||
</digi-button> -->
|
||||
</header>
|
||||
</digi-typography>
|
||||
|
||||
<div class="employee-form__block">
|
||||
<digi-typography>
|
||||
<div class="employee-form__block">
|
||||
<h2>Personuppgifter</h2>
|
||||
</digi-typography>
|
||||
|
||||
<ng-container class="employee-form__privateInformation">
|
||||
<digi-typography>
|
||||
<h4>Förnamn</h4>
|
||||
<p>{{employee.firstName}}</p>
|
||||
</digi-typography>
|
||||
<digi-typography>
|
||||
<h4>Efternamn</h4>
|
||||
<p>{{employee.lastName}}</p>
|
||||
</digi-typography>
|
||||
<digi-typography>
|
||||
<h4>Personnummer</h4>
|
||||
<msfa-hide-text
|
||||
symbols="********-****"
|
||||
[changingText]="employee.ssn"
|
||||
ariaLabelType="personnummer"
|
||||
></msfa-hide-text>
|
||||
</digi-typography>
|
||||
</ng-container>
|
||||
</div>
|
||||
<msfa-edit-employee-form
|
||||
[employee]="employee"
|
||||
[availableRoles]="availableRoles"
|
||||
[availableTjanster]="tjanster$ | async"
|
||||
[availableUtforandeVerksamheter]="availableUtforandeVerksamheter$ | async"
|
||||
(tjansterSelected)="setupAvailableUtforandeVerksamheter($event)"
|
||||
(formSubmitted)="updateEmployee($event)"
|
||||
></msfa-edit-employee-form>
|
||||
</section>
|
||||
<dl>
|
||||
<dt>Förnamn</dt>
|
||||
<dd>{{employee.firstName}}</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt>Förnamn</dt>
|
||||
<dd>{{employee.firstName}}</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt>Efternamn</dt>
|
||||
<dd>{{employee.lastName}}</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt>Personnummer</dt>
|
||||
<dd>
|
||||
<msfa-hide-text
|
||||
symbols="********-****"
|
||||
[changingText]="employee.ssn"
|
||||
ariaLabelType="personnummer"
|
||||
></msfa-hide-text>
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
<div class="employee-form__block">
|
||||
<msfa-edit-employee-form
|
||||
[employee]="employee"
|
||||
[availableRoles]="availableRoles"
|
||||
[availableTjanster]="tjanster$ | async"
|
||||
[availableUtforandeVerksamheter]="availableUtforandeVerksamheter$ | async"
|
||||
[errorWhileUpdating]="errorWhileUpdating$ | async"
|
||||
(tjansterSelected)="setupAvailableUtforandeVerksamheter($event)"
|
||||
(formSubmitted)="updateEmployee($event)"
|
||||
(closeError)="closeError()"
|
||||
></msfa-edit-employee-form>
|
||||
</div>
|
||||
</section>
|
||||
</digi-typography>
|
||||
</msfa-layout>
|
||||
|
||||
@@ -2,6 +2,7 @@ import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';
|
||||
import { ActivatedRoute, Router } from '@angular/router';
|
||||
import { EmployeeEditRequest } from '@msfa-models/api/employee-edit.request.model';
|
||||
import { Employee } from '@msfa-models/employee.model';
|
||||
import { CustomError } from '@msfa-models/error/custom-error';
|
||||
import { Role } from '@msfa-models/role.model';
|
||||
import { Tjanst } from '@msfa-models/tjanst.model';
|
||||
import { EmployeeService } from '@msfa-services/api/employee.service';
|
||||
@@ -22,6 +23,8 @@ import { filter, switchMap } from 'rxjs/operators';
|
||||
export class EmployeeFormComponent implements OnInit {
|
||||
private _employeeId$ = new BehaviorSubject<string>(this.activatedRoute.snapshot.params['employeeId']);
|
||||
private _selectedTjanstIds$ = new BehaviorSubject<number[]>(null);
|
||||
private _errorWhileUpdating$ = new BehaviorSubject<CustomError>(null);
|
||||
errorWhileUpdating$: Observable<CustomError> = this._errorWhileUpdating$.asObservable();
|
||||
employee$ = this.employeeService.employee$;
|
||||
tjanster$: Observable<Tjanst[]> = this.tjanstService.tjanster$;
|
||||
availableUtforandeVerksamheter$: Observable<UtforandeVerksamhet[]> = this._selectedTjanstIds$.pipe(
|
||||
@@ -54,6 +57,9 @@ export class EmployeeFormComponent implements OnInit {
|
||||
next: () => {
|
||||
void this.router.navigateByUrl(`/administration/personal/${this.employeeId}`);
|
||||
},
|
||||
error: error => {
|
||||
this._errorWhileUpdating$.next(error);
|
||||
},
|
||||
complete: () => {
|
||||
updateEmployeeSubscription.unsubscribe();
|
||||
},
|
||||
@@ -66,4 +72,8 @@ export class EmployeeFormComponent implements OnInit {
|
||||
setEmployeeToDelete(employee: Employee): void {
|
||||
this.employeeService.setEmployeeToDelete(employee);
|
||||
}
|
||||
|
||||
closeError(): void {
|
||||
this._errorWhileUpdating$.next(null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,6 +48,7 @@ export interface EmployeesData {
|
||||
}
|
||||
|
||||
function mapResponseToSsn(ssn: string): string {
|
||||
ssn = ssn.replaceAll('-', '');
|
||||
if (ssn.length === 10) {
|
||||
const century = +CURRENT_YEAR - +ssn.slice(0, 2) > 0 ? '20' : '19';
|
||||
ssn = ssn.padStart(12, century);
|
||||
|
||||
@@ -82,29 +82,6 @@ export class EmployeeService extends UnsubscribeDirective {
|
||||
.subscribe(employee => {
|
||||
this._employee$.next(employee as Employee);
|
||||
})
|
||||
// this._currentEmployeeId$
|
||||
// .pipe(
|
||||
// filter(currentEmployeeId => !!currentEmployeeId),
|
||||
// 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 };
|
||||
// })
|
||||
// )
|
||||
// )
|
||||
// )
|
||||
// .subscribe(employee => {
|
||||
// this._employee$.next(employee as Employee);
|
||||
// })
|
||||
);
|
||||
}
|
||||
|
||||
@@ -215,7 +192,7 @@ export class EmployeeService extends UnsubscribeDirective {
|
||||
map(({ data }) => data),
|
||||
catchError(error => {
|
||||
this.errorService.add(errorToCustomError(error));
|
||||
return of(null);
|
||||
return throwError(errorToCustomError(error));
|
||||
})
|
||||
);
|
||||
}
|
||||
@@ -229,8 +206,7 @@ export class EmployeeService extends UnsubscribeDirective {
|
||||
}),
|
||||
map(() => true),
|
||||
catchError(error => {
|
||||
this.errorService.add(errorToCustomError(error));
|
||||
return of(false);
|
||||
return throwError(errorToCustomError(error));
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
17
openshift/dev/Jenkinsfile
vendored
17
openshift/dev/Jenkinsfile
vendored
@@ -3,7 +3,6 @@ def appname = "${APP_NAME}"
|
||||
def utv_project = "${UTV_NAMESPACE}"
|
||||
def auto_project = "${AUTO_NAMESPACE}"
|
||||
def sys_project = "${SYS_NAMESPACE}"
|
||||
def test_project = "${TEST_NAMESPACE}"
|
||||
def jenkinsslave = "nodejs15-agent"
|
||||
def dist_path = "dist/apps/mina-sidor-fa"
|
||||
|
||||
@@ -149,22 +148,6 @@ pipeline {
|
||||
echo '### Deployed to "sys"! ###'
|
||||
}
|
||||
}
|
||||
|
||||
stage('Deploy "test"') {
|
||||
steps {
|
||||
echo '### Deploying to "test"... ###'
|
||||
script {
|
||||
openshift.withCluster() {
|
||||
openshift.withProject(test_project) {
|
||||
openshift.raw("set image dc/${ appname } ${ appname }=docker-registry.default.svc:5000/${utv_project}/${ appname }:${BUILD_TAG} --record=true --source=docker")
|
||||
openshift.raw("annotate dc ${ appname } version=${BUILD_TAG} --overwrite=true")
|
||||
openshift.selector("dc", "${ appname }").rollout().status();
|
||||
}
|
||||
}
|
||||
}
|
||||
echo '### Deployed to "test"! ###'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user