Skip to content

Commit d8fc16d

Browse files
committed
Added organization select, and user group permissions based on auto active.
1 parent 6b6e6a2 commit d8fc16d

File tree

7 files changed

+1295
-1235
lines changed

7 files changed

+1295
-1235
lines changed

src/app/applications/application-detail/application-detail.component.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ export class ApplicationDetailComponent implements OnInit, OnDestroy, AfterViewI
8787
extraOptions: [],
8888
};
8989

90-
this.translate.get("APPLICATION.CHANGE_ORGANIZATION").subscribe(translation => {
90+
this.translate.get("APPLICATION.CHANGE-ORGANIZATION.TITLE").subscribe(translation => {
9191
const changeOrganizationButton = {
9292
id: this.id,
9393
label: translation,
@@ -213,6 +213,7 @@ export class ApplicationDetailComponent implements OnInit, OnDestroy, AfterViewI
213213
this.changeOrganizationDialog.open(ChangeOrganizationDialogComponent, {
214214
data: {
215215
id: this.id,
216+
organizationId: this.application.belongsTo.id,
216217
} as ApplicationDialogModel,
217218
});
218219
}

src/app/applications/application-detail/change-organization-dialog/change-organization-dialog.component.html

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,23 @@
1-
<h2>{{ "APPLICATION.CHANGE_ORGANIZATION" | translate }}</h2>
2-
<div class="form-group mt-3 col-12">
3-
<label class="form-label" for="userGroup">{{ "QUESTION.APPLICATION.ADD-PERMISSION" | translate }}</label>
1+
<h1 mat-dialog-title>{{ "APPLICATION.CHANGE-ORGANIZATION.TITLE" | translate }}</h1>
2+
<div mat-dialog-content>
3+
<label class="form-label" for="userGroup">{{
4+
"APPLICATION.CHANGE-ORGANIZATION.CHOOSE-ORGANIZATION" | translate
5+
}}</label>
6+
<mat-select
7+
id="userGroup"
8+
class="form-control"
9+
panelClass="overflow-x-hidden"
10+
[(value)]="application.organizationId"
11+
[compareWith]="compare"
12+
(selectionChange)="onOrganizationChange()"
13+
>
14+
<mat-option *ngFor="let organization of filteredOrganizationsMulti | async" [value]="organization.id">
15+
{{ organization.name }}
16+
</mat-option>
17+
</mat-select>
18+
<label class="form-label" for="userGroup">{{
19+
"APPLICATION.CHANGE-ORGANIZATION.CHOOSE-USER-GROUPS" | translate
20+
}}</label>
421
<mat-select
522
id="userGroup"
623
class="form-control"
@@ -15,5 +32,13 @@ <h2>{{ "APPLICATION.CHANGE_ORGANIZATION" | translate }}</h2>
1532
{{ permission.name }}
1633
</mat-option>
1734
</mat-select>
18-
<mat-hint>{{ "QUESTION.APPLICATION.PERMISSION-HINT" | translate }}</mat-hint>
35+
<mat-hint>{{ "APPLICATION.CHANGE-ORGANIZATION.USER-GROUP-AUTO-SELECT" | translate }}</mat-hint>
36+
</div>
37+
<div mat-dialog-actions class="d-flex flex-row">
38+
<button mat-dialog-close [mat-dialog-close]="true" class="btn btn-primary">
39+
{{ "GEN.SAVE" | translate }}
40+
</button>
41+
<button mat-dialog-close [mat-dialog-close]="false" class="btn btn-secondary ml-2">
42+
{{ "GEN.CANCEL" | translate }}
43+
</button>
1944
</div>
Lines changed: 46 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import { Component, Inject, OnInit } from "@angular/core";
22
import { UntypedFormControl } from "@angular/forms";
33
import { MAT_DIALOG_DATA } from "@angular/material/dialog";
4-
import { ActivatedRoute } from "@angular/router";
4+
import { Organisation } from "@app/admin/organisation/organisation.model";
5+
import { OrganisationService } from "@app/admin/organisation/organisation.service";
56
import { PermissionResponse } from "@app/admin/permission/permission.model";
67
import { PermissionService } from "@app/admin/permission/permission.service";
7-
import { Application, ApplicationRequest } from "@applications/application.model";
8+
import { Application, UpdateApplicationOrganization } from "@applications/application.model";
89
import { TranslateService } from "@ngx-translate/core";
910
import { ApplicationDialogModel } from "@shared/models/dialog.model";
11+
import { MeService } from "@shared/services/me.service";
1012
import { RestService } from "@shared/services/rest.service";
1113
import { SharedVariableService } from "@shared/shared-variable/shared-variable.service";
1214
import { ReplaySubject, Subscription } from "rxjs";
@@ -19,20 +21,29 @@ import { ReplaySubject, Subscription } from "rxjs";
1921
export class ChangeOrganizationDialogComponent implements OnInit {
2022
public applicationsSubscription: Subscription;
2123
public permissionsSubscription: Subscription;
24+
public organizationsSubscription: Subscription;
2225
public permissionMultiCtrl: UntypedFormControl = new UntypedFormControl();
2326
public permissionMultiFilterCtrl: UntypedFormControl = new UntypedFormControl();
24-
application = new ApplicationRequest();
27+
public application: UpdateApplicationOrganization;
2528
public permissions: PermissionResponse[];
29+
public organizations: Organisation[];
2630
public filteredPermissionsMulti: ReplaySubject<PermissionResponse[]> = new ReplaySubject<PermissionResponse[]>(1);
31+
public filteredOrganizationsMulti: ReplaySubject<Organisation[]> = new ReplaySubject<Organisation[]>(1);
2732

2833
constructor(
2934
private restService: RestService,
30-
private route: ActivatedRoute,
3135
public translate: TranslateService,
3236
private permissionService: PermissionService,
37+
private organizationService: OrganisationService,
3338
private sharedVariableService: SharedVariableService,
39+
private meService: MeService,
3440
@Inject(MAT_DIALOG_DATA) public dialogModel: ApplicationDialogModel
3541
) {
42+
this.application = {
43+
applicationId: this.dialogModel.id,
44+
organizationId: this.dialogModel.organizationId ?? this.sharedVariableService.getSelectedOrganisationId(),
45+
permissionIds: [],
46+
};
3647
this.permissionMultiCtrl.setValue(this.application.permissionIds);
3748
}
3849

@@ -41,7 +52,8 @@ export class ChangeOrganizationDialogComponent implements OnInit {
4152
if (this.dialogModel.id) {
4253
this.getApplication(this.dialogModel.id);
4354
}
44-
this.getPermissions(this.sharedVariableService.getUserInfo().user.id);
55+
this.getOrganizations();
56+
this.getPermissions();
4557
}
4658

4759
public compare(o1: any, o2: any): boolean {
@@ -52,38 +64,47 @@ export class ChangeOrganizationDialogComponent implements OnInit {
5264
this.applicationsSubscription = this.restService
5365
.get("application", {}, id)
5466
.subscribe((application: Application) => {
55-
this.application = new ApplicationRequest();
56-
this.application.name = application.name;
57-
this.application.description = application.description;
58-
this.application.organizationId = application.belongsTo.id;
59-
this.application.status = application.status;
60-
this.application.startDate = application.startDate;
61-
this.application.endDate = application.endDate;
62-
63-
this.application.category = application.category;
64-
this.application.owner = application.owner;
65-
this.application.contactPerson = application.contactPerson;
66-
this.application.contactEmail = application.contactEmail;
67-
this.application.contactPhone = application.contactPhone;
68-
this.application.personalData = application.personalData;
69-
this.application.hardware = application.hardware;
70-
this.application.controlledProperties = application.controlledProperties.map(ctrlProperty => ctrlProperty.type);
71-
this.application.deviceTypes = application.deviceTypes.map(deviceType => deviceType.type);
7267
this.application.permissionIds = application.permissionIds;
7368
this.permissionMultiCtrl.setValue(this.application.permissionIds);
7469
});
7570
}
7671

77-
getPermissions(userId: number) {
72+
getOrganizations() {
73+
this.organizationsSubscription = this.organizationService.getMinimal().subscribe(res => {
74+
this.organizations = res.data;
75+
this.filteredOrganizationsMulti.next(this.organizations.slice());
76+
});
77+
}
78+
79+
getPermissions() {
7880
this.permissionsSubscription = this.permissionService
79-
.getPermissions(1000, 0, undefined, undefined, userId, this.sharedVariableService.getSelectedOrganisationId())
81+
.getPermissions(
82+
1000,
83+
0,
84+
undefined,
85+
undefined,
86+
this.meService.hasGlobalAdmin() ? undefined : this.sharedVariableService.getUserInfo().user.id
87+
)
8088
.subscribe(res => {
8189
this.permissions = res.data.sort((a, b) => a.name.localeCompare(b.name, "da-DK", { numeric: true }));
82-
this.filteredPermissionsMulti.next(this.permissions.slice());
90+
this.filteredPermissionsMulti.next(
91+
this.permissions.filter(p => p?.organization?.id === this?.application?.organizationId)
92+
);
8393
if (!this.dialogModel.id) {
8494
this.application.permissionIds = [this.permissions[0].id];
8595
this.permissionMultiCtrl.setValue(this.application.permissionIds);
8696
}
8797
});
8898
}
99+
100+
onOrganizationChange() {
101+
this.filteredPermissionsMulti.next(
102+
this.permissions.filter(p => p?.organization?.id === this?.application?.organizationId)
103+
);
104+
this.filteredPermissionsMulti.subscribe(res => {
105+
this.permissionMultiCtrl.setValue(
106+
res.filter(permission => permission.automaticallyAddNewApplications).map(permission => permission.id)
107+
);
108+
});
109+
}
89110
}

src/app/applications/application.model.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,3 +61,9 @@ export interface ApplicationData {
6161
ok?: boolean;
6262
count?: number;
6363
}
64+
65+
export class UpdateApplicationOrganization {
66+
public applicationId: number;
67+
public organizationId: number;
68+
public permissionIds: number[];
69+
}

src/app/applications/applications-list/applications-table/applications-table.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@
163163
</li>
164164
<li class="dropdown-item">
165165
<a (click)="onOpenChangeOrganizationDialog(element.id)" routerLinkActive="active">{{
166-
"APPLICATION.CHANGE_ORGANIZATION" | translate
166+
"APPLICATION.CHANGE-ORGANIZATION.TITLE" | translate
167167
}}</a>
168168
</li>
169169
<li class="dropdown-item">

src/app/shared/models/dialog.model.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,5 @@ export class WelcomeDialogModel {
1515

1616
export class ApplicationDialogModel {
1717
id: number;
18+
organizationId?: number;
1819
}

0 commit comments

Comments
 (0)