Skip to content

Commit de7a92c

Browse files
committed
Adding support for setting tags on a property worker.
1 parent 709a7ab commit de7a92c

File tree

10 files changed

+170
-59
lines changed

10 files changed

+170
-59
lines changed

eFormAPI/Plugins/BackendConfiguration.Pn/BackendConfiguration.Pn/Infrastructure/Helpers/BackendConfigurationAssignmentWorkerServiceHelper.cs

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,51 @@ public static async Task<OperationResult> UpdateDeviceUser(DeviceUserModel devic
277277
if (siteDto.WorkerUid == null) return new OperationResult(false, "DeviceUserNotFound");
278278
{
279279
// var workerDto = await core.Advanced_WorkerRead((int)siteDto.WorkerUid);
280-
var worker = await sdkDbContext.Workers.SingleOrDefaultAsync(x => x.MicrotingUid == siteDto.WorkerUid).ConfigureAwait(false);
280+
var worker = await sdkDbContext.Workers.FirstOrDefaultAsync(x => x.MicrotingUid == siteDto.WorkerUid).ConfigureAwait(false);
281+
var site = await sdkDbContext.Sites
282+
.Include(x => x.SiteTags)
283+
.Where(x => x.WorkflowState != Constants.WorkflowStates.Removed)
284+
.Where(x => x.MicrotingUid ==deviceUserModel.SiteMicrotingUid)
285+
.FirstAsync();
286+
287+
var siteTagIds = site.SiteTags
288+
.Where(x => x.WorkflowState != Constants.WorkflowStates.Removed)
289+
.Where(x => x.TagId != null)
290+
.Where(x => x.WorkflowState != Constants.WorkflowStates.Removed)
291+
.Select(x => (int)x.TagId)
292+
.ToList();
293+
294+
var forRemove = siteTagIds
295+
.Where(x => !deviceUserModel.Tags.Contains(x))
296+
.ToList();
297+
298+
foreach (var tagIdForRemove in forRemove)
299+
{
300+
var siteTag = await sdkDbContext.SiteTags
301+
.Where(x => x.TagId == tagIdForRemove)
302+
.Where(x => x.SiteId == site.Id)
303+
.FirstOrDefaultAsync();
304+
305+
if (siteTag != null)
306+
{
307+
await siteTag.Delete(sdkDbContext);
308+
}
309+
}
310+
311+
var forCreate = deviceUserModel.Tags
312+
.Where(x => !siteTagIds.Contains(x))
313+
.ToList();
314+
315+
foreach (var tagIdForCreate in forCreate)
316+
{
317+
var siteTag = new SiteTag
318+
{
319+
TagId = tagIdForCreate,
320+
SiteId = site.Id
321+
};
322+
323+
await siteTag.Create(sdkDbContext);
324+
}
281325
if (worker == null) return new OperationResult(false, "DeviceUserCouldNotBeObtained");
282326
{
283327
var oldEmail = worker.Email;

eFormAPI/Plugins/BackendConfiguration.Pn/BackendConfiguration.Pn/Infrastructure/Models/DeviceUserModel.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,9 @@ public class DeviceUserModel
111111
public bool Resigned { get; set; }
112112
public DateTime ResignedAtDate { get; set; }
113113

114+
public List<int> Tags { get; set; }
115+
= new List<int>();
116+
114117
public static implicit operator DeviceUserModel(Microting.EformAngularFrontendBase.Infrastructure.Data.Models.DeviceUserModel model)
115118
{
116119
return new DeviceUserModel

eFormAPI/Plugins/BackendConfiguration.Pn/BackendConfiguration.Pn/Services/BackendConfigurationAssignmentWorkerService/BackendConfigurationAssignmentWorkerService.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,12 @@ join worker in sdkDbContext.Workers on siteWorker.WorkerId equals worker.Id
370370
site.CreatedAt,
371371
site.UpdatedAt,
372372
worker.Resigned,
373-
worker.ResignedAtDate
373+
worker.ResignedAtDate,
374+
SiteTags = site.SiteTags
375+
.Where(y => y.WorkflowState != Constants.WorkflowStates.Removed)
376+
.Where(y => y.Tag.WorkflowState != Constants.WorkflowStates.Removed)
377+
.Select(t => (int)t.TagId)
378+
.ToList()
374379

375380
};
376381
sitesQuery = sitesQuery
@@ -396,7 +401,8 @@ join worker in sdkDbContext.Workers on siteWorker.WorkerId equals worker.Id
396401
LanguageCode = sdkDbContext.Languages.Where(y => y.Id == x.LanguageId).Select(y => y.LanguageCode).SingleOrDefault() ?? "da",
397402
IsLocked = x.IsLocked,
398403
Resigned = x.Resigned,
399-
ResignedAtDate = x.ResignedAtDate
404+
ResignedAtDate = x.ResignedAtDate,
405+
Tags = x.SiteTags
400406
})
401407
.ToListAsync().ConfigureAwait(false);
402408

eform-client/src/app/plugins/modules/backend-configuration-pn/models/device-users/device-user.model.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,5 @@ export class DeviceUserModel {
5151
phoneNumber: string;
5252
resigned: boolean;
5353
resignedAtDate: Date;
54+
tags: number[];
5455
}

eform-client/src/app/plugins/modules/backend-configuration-pn/modules/property-workers/components/property-worker-create-edit-modal/property-worker-create-edit-modal.component.html

Lines changed: 77 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<h3 mat-dialog-title>{{ (edit ? 'Edit employee' : 'New employee') | translate}}</h3>
1+
<h3 mat-dialog-title>{{ (edit ? 'Edit employee' : 'New employee') | translate }}</h3>
22
<form [formGroup]="form">
33
<div mat-dialog-content>
44
<mat-tab-group
@@ -10,7 +10,7 @@ <h3 mat-dialog-title>{{ (edit ? 'Edit employee' : 'New employee') | translate}}<
1010
<div class="modal-columns">
1111
<div class="d-flex flex-column" id="column1">
1212
<mat-form-field>
13-
<mat-label>{{'First name' | translate }}</mat-label>
13+
<mat-label>{{ 'First name' | translate }}</mat-label>
1414
<input
1515
matInput
1616
formControlName="userFirstName"
@@ -23,7 +23,7 @@ <h3 mat-dialog-title>{{ (edit ? 'Edit employee' : 'New employee') | translate}}<
2323
</mat-error>
2424
</mat-form-field>
2525
<mat-form-field>
26-
<mat-label>{{'e-mail' | translate }}</mat-label>
26+
<mat-label>{{ 'e-mail' | translate }}</mat-label>
2727
<input
2828
matInput
2929
formControlName="workerEmail"
@@ -38,15 +38,15 @@ <h3 mat-dialog-title>{{ (edit ? 'Edit employee' : 'New employee') | translate}}<
3838
</mat-error>
3939
</mat-form-field>
4040
<mat-form-field>
41-
<mat-label>{{'Employee no' | translate }}</mat-label>
41+
<mat-label>{{ 'Employee no' | translate }}</mat-label>
4242
<input
4343
matInput
4444
formControlName="employeeNo"
4545
type="text"
4646
id="employeeNo">
4747
</mat-form-field>
4848
<mat-form-field>
49-
<mat-label>{{'Language' | translate }}</mat-label>
49+
<mat-label>{{ 'Language' | translate }}</mat-label>
5050
<mtx-select
5151
id="profileLanguageSelector"
5252
[bindLabel]="'name'"
@@ -55,33 +55,17 @@ <h3 mat-dialog-title>{{ (edit ? 'Edit employee' : 'New employee') | translate}}<
5555
formControlName="languageCode"
5656
[items]="activeLanguages">
5757
<ng-template ng-label-tmp let-item="item">
58-
{{item.name | translate}}
58+
{{ item.name | translate }}
5959
</ng-template>
6060
<ng-template ng-option-tmp let-item="item">
61-
{{item.name | translate}}
61+
{{ item.name | translate }}
6262
</ng-template>
6363
</mtx-select>
6464
</mat-form-field>
65-
<mat-slide-toggle
66-
*ngIf="authStateService.checkClaim('time_registration_enable')"
67-
color="primary"
68-
class="mb-2"
69-
id="timeRegistrationEnabledToggle"
70-
formControlName="timeRegistrationEnabled">
71-
{{ "Timeregistration" | translate }}
72-
</mat-slide-toggle>
73-
<mat-slide-toggle
74-
*ngIf="authStateService.checkClaim('task_management_enable')"
75-
color="primary"
76-
class="mb-2"
77-
id="taskManagementEnabledToggle"
78-
formControlName="taskManagementEnabled">
79-
{{ "Task management" | translate }}
80-
</mat-slide-toggle>
8165
</div>
8266
<div class="d-flex flex-column" id="column2">
8367
<mat-form-field>
84-
<mat-label>{{'Last name' | translate }}</mat-label>
68+
<mat-label>{{ 'Last name' | translate }}</mat-label>
8569
<input
8670
matInput
8771
formControlName="userLastName"
@@ -93,7 +77,7 @@ <h3 mat-dialog-title>{{ (edit ? 'Edit employee' : 'New employee') | translate}}<
9377
</mat-error>
9478
</mat-form-field>
9579
<mat-form-field>
96-
<mat-label>{{'Phone' | translate }}</mat-label>
80+
<mat-label>{{ 'Phone' | translate }}</mat-label>
9781
<input
9882
matInput
9983
formControlName="phoneNumber"
@@ -102,7 +86,7 @@ <h3 mat-dialog-title>{{ (edit ? 'Edit employee' : 'New employee') | translate}}<
10286
id="phoneNumber">
10387
</mat-form-field>
10488
<mat-form-field>
105-
<mat-label>{{'PIN code' | translate }}</mat-label>
89+
<mat-label>{{ 'PIN code' | translate }}</mat-label>
10690
<input
10791
matInput
10892
formControlName="pinCode"
@@ -111,31 +95,72 @@ <h3 mat-dialog-title>{{ (edit ? 'Edit employee' : 'New employee') | translate}}<
11195
pattern="([0-9]*|\*{4})"
11296
id="pinCode">
11397
</mat-form-field>
114-
<div class="d-flex flex-row">
115-
<mat-checkbox class="p-1"
116-
[id]="'resigned'"
117-
[name]="'resigned'"
118-
formControlName="resigned">
119-
<div>{{ 'Resigned' | translate }}</div>
120-
</mat-checkbox>
121-
<mat-form-field *ngIf="selectedDeviceUser.resigned">
122-
<mat-label>{{ 'Resigned at date' | translate }}</mat-label>
123-
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
124-
<input
125-
required
126-
matInput
127-
[matDatepicker]="picker"
128-
formControlName="resignedAtDate"
129-
(click)="picker.open()"
130-
>
131-
<mat-datepicker #picker></mat-datepicker>
132-
<mat-error class="text-warn" *ngIf="!selectedDeviceUser.resignedAtDate">
133-
{{ 'Date is required'| translate }}*
134-
</mat-error>
135-
</mat-form-field>
136-
</div>
13798
</div>
138-
99+
</div>
100+
<div class="modal-columns">
101+
<mat-form-field>
102+
<mat-label>{{ 'Current tags' | translate }}</mat-label>
103+
<mtx-select
104+
class="custom"
105+
[dropdownPosition]="'bottom'"
106+
[bindValue]="'id'"
107+
[bindLabel]="'name'"
108+
[items]="availableTags"
109+
id="tagSelector"
110+
[multiple]="true"
111+
appendTo="body"
112+
formControlName="tags">
113+
</mtx-select>
114+
</mat-form-field>
115+
</div>
116+
<div class="modal-columns">
117+
<div class="d-flex flex-column" id="column1">
118+
<mat-checkbox class="p-1"
119+
[id]="'resigned'"
120+
[name]="'resigned'"
121+
formControlName="resigned">
122+
<div>{{ 'Resigned' | translate }}</div>
123+
</mat-checkbox>
124+
</div>
125+
<div class="d-flex flex-column" id="column2">
126+
<mat-form-field *ngIf="selectedDeviceUser.resigned">
127+
<mat-label>{{ 'Resigned at date' | translate }}</mat-label>
128+
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
129+
<input
130+
required
131+
matInput
132+
[matDatepicker]="picker"
133+
formControlName="resignedAtDate"
134+
(click)="picker.open()"
135+
>
136+
<mat-datepicker #picker></mat-datepicker>
137+
<mat-error class="text-warn" *ngIf="!selectedDeviceUser.resignedAtDate">
138+
{{ 'Date is required'| translate }}*
139+
</mat-error>
140+
</mat-form-field>
141+
</div>
142+
</div>
143+
<div class="modal-columns">
144+
<div class="d-flex flex-column" id="column1">
145+
<mat-slide-toggle
146+
*ngIf="authStateService.checkClaim('time_registration_enable')"
147+
color="primary"
148+
class="mb-2"
149+
id="timeRegistrationEnabledToggle"
150+
formControlName="timeRegistrationEnabled">
151+
{{ "Timeregistration" | translate }}
152+
</mat-slide-toggle>
153+
<mat-slide-toggle
154+
*ngIf="authStateService.checkClaim('task_management_enable')"
155+
color="primary"
156+
class="mb-2"
157+
id="taskManagementEnabledToggle"
158+
formControlName="taskManagementEnabled">
159+
{{ "Task management" | translate }}
160+
</mat-slide-toggle>
161+
</div>
162+
<div class="d-flex flex-column" id="column2">
163+
</div>
139164
</div>
140165
<br>
141166
</mat-tab>
@@ -176,15 +201,15 @@ <h3 mat-dialog-title>{{ (edit ? 'Edit employee' : 'New employee') | translate}}<
176201
id="{{edit ? 'cancelEditBtn' : 'cancelCreateBtn'}}"
177202
(click)="hide()"
178203
>
179-
{{'Cancel' | translate}}
204+
{{ 'Cancel' | translate }}
180205
</button>
181206
<button
182207
class="btn-primary btn-primary--icon-left"
183208
(click)="edit ? updateSingle() : createDeviceUser()"
184209
[disabled]="form.invalid"
185210
id="{{edit ? 'saveEditBtn' : 'saveCreateBtn'}}"
186211
>
187-
<span>{{(edit ? 'Save' : 'Create') | translate}}</span>
212+
<span>{{ (edit ? 'Save' : 'Create') | translate }}</span>
188213
</button>
189214
</div>
190215
</div>

eform-client/src/app/plugins/modules/backend-configuration-pn/modules/property-workers/components/property-worker-create-edit-modal/property-worker-create-edit-modal.component.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ export class PropertyWorkerCreateEditModalComponent implements OnInit, OnDestroy
3737
deviceUser: DeviceUserModel,
3838
assignments: PropertyAssignmentWorkerModel[],
3939
availableProperties: CommonDictionaryModel[],
40+
availableTags: CommonDictionaryModel[];
4041
}>(MAT_DIALOG_DATA);
4142

4243
availableProperties: CommonDictionaryModel[] = [];
@@ -47,6 +48,7 @@ export class PropertyWorkerCreateEditModalComponent implements OnInit, OnDestroy
4748
assignmentsCopy: PropertyAssignmentWorkerModel[] = [];
4849
taskManagementEnabled: boolean = false;
4950
timeRegistrationEnabled: boolean = false;
51+
availableTags: CommonDictionaryModel[] = [];
5052
@Output() userUpdated: EventEmitter<void> = new EventEmitter<void>();
5153
tableHeaders: MtxGridColumn[] = [
5254
{
@@ -72,7 +74,7 @@ export class PropertyWorkerCreateEditModalComponent implements OnInit, OnDestroy
7274
activeLanguages: Array<any> = [];
7375
form: FormGroup;
7476

75-
77+
7678

7779
private updateDisabledFieldsBasedOnResigned() {
7880
const isResigned = this.form.get('resigned')?.value;
@@ -135,6 +137,7 @@ export class PropertyWorkerCreateEditModalComponent implements OnInit, OnDestroy
135137
this.assignmentsCopy = [...this.model.assignments];
136138
this.taskManagementEnabled = this.selectedDeviceUserCopy.taskManagementEnabled;
137139
this.timeRegistrationEnabled = this.selectedDeviceUserCopy.timeRegistrationEnabled;
140+
this.availableTags = [...this.model.availableTags];
138141

139142
this.form = this.fb.group({
140143
userFirstName: [this.selectedDeviceUser.userFirstName || '', Validators.required],
@@ -155,6 +158,7 @@ export class PropertyWorkerCreateEditModalComponent implements OnInit, OnDestroy
155158
pinCode: [this.selectedDeviceUser.pinCode || ''],
156159
employeeNo: [this.selectedDeviceUser.employeeNo || ''],
157160
languageCode: [this.selectedDeviceUser.languageCode || ''],
161+
tags: [this.selectedDeviceUser.tags || []],
158162
timeRegistrationEnabled: [this.selectedDeviceUser.timeRegistrationEnabled || false],
159163
taskManagementEnabled: [this.selectedDeviceUser.taskManagementEnabled || false],
160164
resigned: [this.selectedDeviceUser.resigned || false],

eform-client/src/app/plugins/modules/backend-configuration-pn/modules/property-workers/components/property-worker-table/property-worker-table.component.html

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
language: languageTpl,
1111
customerOtp: customerOtpTpl,
1212
manufacturer: manufacturerTpl,
13+
tags: tagsTpl,
1314
actions: actionsTpl,
1415
taskManagementEnabled: taskManagementEnabledTpl,
1516
timeRegistrationEnabled: timeRegistrationEnabledTpl,
@@ -203,3 +204,8 @@
203204
title="{{TaskWizardStatusesEnum[row.timeRegistrationEnabled ? 1 : 2] | translate}}">{{ TaskWizardStatusesEnum[row.timeRegistrationEnabled ? 1 : 2] | translate }}</span>
204205
</mat-chip>
205206
</ng-template>
207+
<ng-template #tagsTpl let-row>
208+
<div id="tags">
209+
<app-eform-tag [tags]="getTagsBySiteDto(row)"/>
210+
</div>
211+
</ng-template>

0 commit comments

Comments
 (0)