tnx-shared 5.1.70 → 5.1.74
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/tnx-shared.umd.js +537 -409
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/classes/base/data-form-base.d.ts +1 -0
- package/classes/base/data-form-base.d.ts.map +1 -1
- package/classes/base/data-list-base.d.ts +4 -0
- package/classes/base/data-list-base.d.ts.map +1 -1
- package/components/congviec-picker/congviec-picker.component.d.ts.map +1 -1
- package/components/crud/crud-form/crud-form.component.d.ts +1 -1
- package/components/crud/crud-list/crud-list.component.d.ts +7 -0
- package/components/crud/crud-list/crud-list.component.d.ts.map +1 -1
- package/components/statemachines/statemachines-designer/statemachines-designer.component.d.ts +1 -0
- package/components/statemachines/statemachines-designer/statemachines-designer.component.d.ts.map +1 -1
- package/components/tn-app-notification/tn-app-notification.component.d.ts.map +1 -1
- package/components/tn-tinymce/tn-tinymce.component.d.ts +1 -55
- package/components/tn-tinymce/tn-tinymce.component.d.ts.map +1 -1
- package/components/workflow/workflow-history-new/workflow-history-new.component.d.ts +2 -0
- package/components/workflow/workflow-history-new/workflow-history-new.component.d.ts.map +1 -1
- package/congviec/congviec/congviec-form/congviec-form.component.d.ts.map +1 -1
- package/esm2015/classes/base/data-form-base.js +5 -1
- package/esm2015/classes/base/data-list-base.js +108 -41
- package/esm2015/components/congviec-picker/congviec-picker.component.js +1 -1
- package/esm2015/components/crud/crud-list/crud-list.component.js +77 -15
- package/esm2015/components/share-link-by-permission/share-link-by-permission.component.js +3 -3
- package/esm2015/components/statemachines/statemachines-designer/statemachines-designer.component.js +4 -2
- package/esm2015/components/tn-app-notification/tn-app-notification.component.js +3 -2
- package/esm2015/components/tn-tinymce/tn-tinymce.component.js +35 -87
- package/esm2015/components/workflow/workflow-history-new/workflow-history-new.component.js +14 -6
- package/esm2015/congviec/congviec/congviec-form/congviec-form.component.js +8 -6
- package/fesm2015/tnx-shared.js +478 -388
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +2 -2
- package/tnx-shared.metadata.json +1 -1
|
@@ -10301,6 +10301,284 @@
|
|
|
10301
10301
|
return WorkflowSettingNew;
|
|
10302
10302
|
}());
|
|
10303
10303
|
|
|
10304
|
+
var CongViecService = /** @class */ (function (_super) {
|
|
10305
|
+
__extends(CongViecService, _super);
|
|
10306
|
+
function CongViecService(http, injector, _moduleConfigService) {
|
|
10307
|
+
var _this = _super.call(this, http, injector, _moduleConfigService.getConfig().environment.apiDomain.congviecEndpoint + "/" + _moduleConfigService.getConfig().environment.apiVersion + "/CongViec") || this;
|
|
10308
|
+
_this._moduleConfigService = _moduleConfigService;
|
|
10309
|
+
_this.serviceCode = 'congviec';
|
|
10310
|
+
_this.entityName = 'CongViec';
|
|
10311
|
+
_this.objectName = 'công việc';
|
|
10312
|
+
_this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.congviecEndpoint;
|
|
10313
|
+
return _this;
|
|
10314
|
+
}
|
|
10315
|
+
CongViecService.prototype.countByMenuState = function (data) {
|
|
10316
|
+
return this.defaultPost(this.serviceUri + "/CountByMenuState", data);
|
|
10317
|
+
};
|
|
10318
|
+
CongViecService.prototype.getDicIdByMenuState = function (data) {
|
|
10319
|
+
return this.defaultPost(this.serviceUri + "/GetDicIdByMenuState", data);
|
|
10320
|
+
};
|
|
10321
|
+
CongViecService.prototype.updateBulkIdCha = function (model) {
|
|
10322
|
+
var url = this.serviceUri + "/UpdateBulkIdCha";
|
|
10323
|
+
return this.defaultPost(url, model);
|
|
10324
|
+
};
|
|
10325
|
+
CongViecService.prototype.deleteBulkCongViecCon = function (ids) {
|
|
10326
|
+
var url = this.serviceUri + "/DeleteBulkCongViecCon";
|
|
10327
|
+
return this.defaultPost(url, ids);
|
|
10328
|
+
};
|
|
10329
|
+
CongViecService.prototype.getDataDashboardCaNhan = function (inputData) {
|
|
10330
|
+
var url = this.serviceUri + "/GetDataDashboardCaNhan";
|
|
10331
|
+
return this.defaultPost(url, inputData);
|
|
10332
|
+
};
|
|
10333
|
+
CongViecService.prototype.getDataDashboardByDonVi = function (inputData) {
|
|
10334
|
+
var url = this.serviceUri + "/GetDataDashboardByDonVi";
|
|
10335
|
+
return this.defaultPost(url, inputData);
|
|
10336
|
+
};
|
|
10337
|
+
CongViecService.prototype.getListTasksDashboard = function (dataFilter) {
|
|
10338
|
+
var url = this.serviceUri + "/getListTasksDashboard";
|
|
10339
|
+
return this.defaultPost(url, dataFilter);
|
|
10340
|
+
};
|
|
10341
|
+
return CongViecService;
|
|
10342
|
+
}(BaseService));
|
|
10343
|
+
CongViecService.ɵprov = i0.ɵɵdefineInjectable({ factory: function CongViecService_Factory() { return new CongViecService(i0.ɵɵinject(i1$1.HttpClient), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(ModuleConfigService)); }, token: CongViecService, providedIn: "root" });
|
|
10344
|
+
CongViecService.decorators = [
|
|
10345
|
+
{ type: i0.Injectable, args: [{
|
|
10346
|
+
providedIn: 'root'
|
|
10347
|
+
},] }
|
|
10348
|
+
];
|
|
10349
|
+
CongViecService.ctorParameters = function () { return [
|
|
10350
|
+
{ type: i1$1.HttpClient },
|
|
10351
|
+
{ type: i0.Injector },
|
|
10352
|
+
{ type: ModuleConfigService }
|
|
10353
|
+
]; };
|
|
10354
|
+
|
|
10355
|
+
var StateMachinesService = /** @class */ (function (_super) {
|
|
10356
|
+
__extends(StateMachinesService, _super);
|
|
10357
|
+
function StateMachinesService(http, injector, _moduleConfigService) {
|
|
10358
|
+
var _this = _super.call(this, http, injector, _moduleConfigService.getConfig().environment.apiDomain.workflowEndpoint + "/" + _moduleConfigService.getConfig().environment.apiVersion + "/StateMachines") || this;
|
|
10359
|
+
_this._moduleConfigService = _moduleConfigService;
|
|
10360
|
+
_this.entityName = 'StateMachines';
|
|
10361
|
+
_this.serviceCode = 'workflow';
|
|
10362
|
+
_this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.workflowEndpoint;
|
|
10363
|
+
return _this;
|
|
10364
|
+
}
|
|
10365
|
+
StateMachinesService.prototype.changeState = function (itemWorkflowHistory) {
|
|
10366
|
+
return this.defaultPost(this.serviceUri + "/ChangeState", itemWorkflowHistory);
|
|
10367
|
+
};
|
|
10368
|
+
StateMachinesService.prototype.rollback = function (rowData) {
|
|
10369
|
+
return this.defaultPost(this.serviceUri + "/Rollback/" + rowData.__workflowCode + "/" + rowData.id, {});
|
|
10370
|
+
};
|
|
10371
|
+
StateMachinesService.prototype.getUserInProcessForm = function (workflowCode, stateCode, actionCode, itemId) {
|
|
10372
|
+
return this.defaultPost(this.serviceUri + "/GetUserInProcessForm/" + workflowCode + "/" + stateCode + "/" + actionCode + "/" + itemId, {});
|
|
10373
|
+
};
|
|
10374
|
+
return StateMachinesService;
|
|
10375
|
+
}(BaseService));
|
|
10376
|
+
StateMachinesService.ɵprov = i0.ɵɵdefineInjectable({ factory: function StateMachinesService_Factory() { return new StateMachinesService(i0.ɵɵinject(i1$1.HttpClient), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(ModuleConfigService)); }, token: StateMachinesService, providedIn: "root" });
|
|
10377
|
+
StateMachinesService.decorators = [
|
|
10378
|
+
{ type: i0.Injectable, args: [{
|
|
10379
|
+
providedIn: 'root'
|
|
10380
|
+
},] }
|
|
10381
|
+
];
|
|
10382
|
+
StateMachinesService.ctorParameters = function () { return [
|
|
10383
|
+
{ type: i1$1.HttpClient },
|
|
10384
|
+
{ type: i0.Injector },
|
|
10385
|
+
{ type: ModuleConfigService }
|
|
10386
|
+
]; };
|
|
10387
|
+
|
|
10388
|
+
var CauHinhWorkflowService = /** @class */ (function (_super) {
|
|
10389
|
+
__extends(CauHinhWorkflowService, _super);
|
|
10390
|
+
function CauHinhWorkflowService(http, injector, _moduleConfigService) {
|
|
10391
|
+
var _this = _super.call(this, http, injector, _moduleConfigService.getConfig().environment.apiDomain.congviecEndpoint + "/" + _moduleConfigService.getConfig().environment.apiVersion + "/CauHinhWorkflow") || this;
|
|
10392
|
+
_this._moduleConfigService = _moduleConfigService;
|
|
10393
|
+
_this.serviceCode = 'congviec';
|
|
10394
|
+
_this.entityName = 'CauHinhWorkflow';
|
|
10395
|
+
_this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.congviecEndpoint;
|
|
10396
|
+
return _this;
|
|
10397
|
+
}
|
|
10398
|
+
return CauHinhWorkflowService;
|
|
10399
|
+
}(BaseService));
|
|
10400
|
+
CauHinhWorkflowService.ɵprov = i0.ɵɵdefineInjectable({ factory: function CauHinhWorkflowService_Factory() { return new CauHinhWorkflowService(i0.ɵɵinject(i1$1.HttpClient), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(ModuleConfigService)); }, token: CauHinhWorkflowService, providedIn: "root" });
|
|
10401
|
+
CauHinhWorkflowService.decorators = [
|
|
10402
|
+
{ type: i0.Injectable, args: [{
|
|
10403
|
+
providedIn: 'root'
|
|
10404
|
+
},] }
|
|
10405
|
+
];
|
|
10406
|
+
CauHinhWorkflowService.ctorParameters = function () { return [
|
|
10407
|
+
{ type: i1$1.HttpClient },
|
|
10408
|
+
{ type: i0.Injector },
|
|
10409
|
+
{ type: ModuleConfigService }
|
|
10410
|
+
]; };
|
|
10411
|
+
|
|
10412
|
+
var DmLoaiCongViecService = /** @class */ (function (_super) {
|
|
10413
|
+
__extends(DmLoaiCongViecService, _super);
|
|
10414
|
+
function DmLoaiCongViecService(http, injector, _moduleConfigService) {
|
|
10415
|
+
var _this = _super.call(this, http, injector, _moduleConfigService.getConfig().environment.apiDomain.congviecEndpoint + "/" + _moduleConfigService.getConfig().environment.apiVersion + "/DM_LoaiCongViec") || this;
|
|
10416
|
+
_this._moduleConfigService = _moduleConfigService;
|
|
10417
|
+
_this.serviceCode = 'congviec';
|
|
10418
|
+
_this.entityName = 'DM_LoaiCongViec';
|
|
10419
|
+
_this.dicLoaiCongViec = {};
|
|
10420
|
+
_this.keyIdLoaiCongViecRoot = 'root';
|
|
10421
|
+
_this.getWorkflowSettingByIdLoaiCongViec = function (idLoaiCongViec) { return __awaiter(_this, void 0, void 0, function () {
|
|
10422
|
+
var result, idLoaiCongViecs, i;
|
|
10423
|
+
return __generator(this, function (_a) {
|
|
10424
|
+
switch (_a.label) {
|
|
10425
|
+
case 0:
|
|
10426
|
+
if (!!this.dicWorkflowByLoaiCongViec) return [3 /*break*/, 2];
|
|
10427
|
+
return [4 /*yield*/, this.getDatasourceWorkflowCongViec()];
|
|
10428
|
+
case 1:
|
|
10429
|
+
_a.sent();
|
|
10430
|
+
_a.label = 2;
|
|
10431
|
+
case 2:
|
|
10432
|
+
if (!idLoaiCongViec) {
|
|
10433
|
+
return [2 /*return*/, this.dicWorkflowByLoaiCongViec[this.keyIdLoaiCongViecRoot]];
|
|
10434
|
+
}
|
|
10435
|
+
result = this.dicWorkflowByLoaiCongViec[idLoaiCongViec];
|
|
10436
|
+
if (result)
|
|
10437
|
+
return [2 /*return*/, result];
|
|
10438
|
+
return [4 /*yield*/, this.getIdLoaiCongViecs(idLoaiCongViec)];
|
|
10439
|
+
case 3:
|
|
10440
|
+
idLoaiCongViecs = _a.sent();
|
|
10441
|
+
if (!Array.isArray(idLoaiCongViecs))
|
|
10442
|
+
return [2 /*return*/, null];
|
|
10443
|
+
if (idLoaiCongViecs.length > 1) {
|
|
10444
|
+
for (i = idLoaiCongViecs.length - 2; i >= 0; i--) {
|
|
10445
|
+
result = this.dicWorkflowByLoaiCongViec[idLoaiCongViecs[i]];
|
|
10446
|
+
if (result)
|
|
10447
|
+
return [2 /*return*/, result];
|
|
10448
|
+
}
|
|
10449
|
+
}
|
|
10450
|
+
if (!result) {
|
|
10451
|
+
result = this.dicWorkflowByLoaiCongViec[this.keyIdLoaiCongViecRoot];
|
|
10452
|
+
}
|
|
10453
|
+
return [2 /*return*/, result];
|
|
10454
|
+
}
|
|
10455
|
+
});
|
|
10456
|
+
}); };
|
|
10457
|
+
_this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.congviecEndpoint;
|
|
10458
|
+
return _this;
|
|
10459
|
+
}
|
|
10460
|
+
DmLoaiCongViecService.prototype.getDatasourceWorkflowCongViec = function () {
|
|
10461
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
10462
|
+
var cauHinhWorkflowService, cauHinhWorkflows, notifierService, workflowCodes, stateMachinesService, workflows;
|
|
10463
|
+
var _this = this;
|
|
10464
|
+
return __generator(this, function (_a) {
|
|
10465
|
+
switch (_a.label) {
|
|
10466
|
+
case 0:
|
|
10467
|
+
if (!this.dicWorkflowByLoaiCongViec) {
|
|
10468
|
+
this.dicWorkflowByLoaiCongViec = {};
|
|
10469
|
+
}
|
|
10470
|
+
cauHinhWorkflowService = this._injector.get(CauHinhWorkflowService);
|
|
10471
|
+
return [4 /*yield*/, cauHinhWorkflowService.getAll([], 'idLoaiCongViec,workflowCodes,workflowCode')];
|
|
10472
|
+
case 1:
|
|
10473
|
+
cauHinhWorkflows = (_a.sent()).data;
|
|
10474
|
+
notifierService = this._injector.get(NotifierService);
|
|
10475
|
+
if (cauHinhWorkflows == null) {
|
|
10476
|
+
notifierService.showWarning('Dịch vụ workflow không phản hồi');
|
|
10477
|
+
return [2 /*return*/, []];
|
|
10478
|
+
}
|
|
10479
|
+
workflowCodes = [];
|
|
10480
|
+
cauHinhWorkflows.forEach(function (itemWorkflowSetting) {
|
|
10481
|
+
if (itemWorkflowSetting.workflowCodes && !Array.isArray(itemWorkflowSetting.workflowCodes)) {
|
|
10482
|
+
itemWorkflowSetting.workflowCodes = itemWorkflowSetting.workflowCodes.split(',');
|
|
10483
|
+
}
|
|
10484
|
+
else {
|
|
10485
|
+
itemWorkflowSetting.workflowCodes = [];
|
|
10486
|
+
}
|
|
10487
|
+
itemWorkflowSetting.workflowCodes.forEach(function (workflowCode) {
|
|
10488
|
+
if (workflowCodes.indexOf(workflowCode) == -1) {
|
|
10489
|
+
workflowCodes.push(workflowCode);
|
|
10490
|
+
}
|
|
10491
|
+
});
|
|
10492
|
+
});
|
|
10493
|
+
stateMachinesService = this._injector.get(StateMachinesService);
|
|
10494
|
+
return [4 /*yield*/, stateMachinesService.getDataDropdownByFilter([
|
|
10495
|
+
this.newFilter('code', exports.Operator.in, workflowCodes)
|
|
10496
|
+
], new DropdownOptions({
|
|
10497
|
+
valueField: 'code',
|
|
10498
|
+
displayField: 'title',
|
|
10499
|
+
fieldPlus: 'data'
|
|
10500
|
+
}))];
|
|
10501
|
+
case 2:
|
|
10502
|
+
workflows = (_a.sent());
|
|
10503
|
+
workflows.forEach(function (item) {
|
|
10504
|
+
item.data = JSON.parse(item.data);
|
|
10505
|
+
var stateMachineData = item.data;
|
|
10506
|
+
stateMachineData.actions = {};
|
|
10507
|
+
stateMachineData.machines.forEach(function (machine) {
|
|
10508
|
+
stateMachineData.actions[machine.code] = [];
|
|
10509
|
+
stateMachineData.connections.forEach(function (conn) {
|
|
10510
|
+
if (conn.source == machine.id) {
|
|
10511
|
+
stateMachineData.actions[machine.code].push(conn);
|
|
10512
|
+
}
|
|
10513
|
+
});
|
|
10514
|
+
});
|
|
10515
|
+
});
|
|
10516
|
+
cauHinhWorkflows.forEach(function (itemWorkflowSetting) {
|
|
10517
|
+
itemWorkflowSetting.workflows = workflows.filter(function (q) { return itemWorkflowSetting.workflowCodes.indexOf(q.code) > -1; });
|
|
10518
|
+
if (!itemWorkflowSetting.idLoaiCongViec) {
|
|
10519
|
+
_this.dicWorkflowByLoaiCongViec[_this.keyIdLoaiCongViecRoot] = itemWorkflowSetting;
|
|
10520
|
+
}
|
|
10521
|
+
else {
|
|
10522
|
+
_this.dicWorkflowByLoaiCongViec[itemWorkflowSetting.idLoaiCongViec] = itemWorkflowSetting;
|
|
10523
|
+
}
|
|
10524
|
+
});
|
|
10525
|
+
return [2 /*return*/, workflows];
|
|
10526
|
+
}
|
|
10527
|
+
});
|
|
10528
|
+
});
|
|
10529
|
+
};
|
|
10530
|
+
DmLoaiCongViecService.prototype.getIdLoaiCongViecs = function (idLoaiCongViec) {
|
|
10531
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
10532
|
+
var notifierService, itemLoaiCongViec, idLoaiCongViecs;
|
|
10533
|
+
return __generator(this, function (_a) {
|
|
10534
|
+
switch (_a.label) {
|
|
10535
|
+
case 0:
|
|
10536
|
+
notifierService = this._injector.get(NotifierService);
|
|
10537
|
+
return [4 /*yield*/, this.getItemLoaiCongViec(idLoaiCongViec)];
|
|
10538
|
+
case 1:
|
|
10539
|
+
itemLoaiCongViec = _a.sent();
|
|
10540
|
+
if (itemLoaiCongViec == null) {
|
|
10541
|
+
notifierService.showWarning('Loại công việc không tồn tại');
|
|
10542
|
+
return [2 /*return*/, null];
|
|
10543
|
+
}
|
|
10544
|
+
idLoaiCongViecs = itemLoaiCongViec.idDuongDan.split(';').filter(function (q) { return !!q; });
|
|
10545
|
+
return [2 /*return*/, idLoaiCongViecs];
|
|
10546
|
+
}
|
|
10547
|
+
});
|
|
10548
|
+
});
|
|
10549
|
+
};
|
|
10550
|
+
DmLoaiCongViecService.prototype.getItemLoaiCongViec = function (idLoaiCongViec) {
|
|
10551
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
10552
|
+
var _a, _b;
|
|
10553
|
+
return __generator(this, function (_c) {
|
|
10554
|
+
switch (_c.label) {
|
|
10555
|
+
case 0:
|
|
10556
|
+
if (!!this.dicLoaiCongViec[idLoaiCongViec]) return [3 /*break*/, 2];
|
|
10557
|
+
_a = this.dicLoaiCongViec;
|
|
10558
|
+
_b = idLoaiCongViec;
|
|
10559
|
+
return [4 /*yield*/, this.getDetail(idLoaiCongViec)];
|
|
10560
|
+
case 1:
|
|
10561
|
+
_a[_b] = (_c.sent()).data;
|
|
10562
|
+
_c.label = 2;
|
|
10563
|
+
case 2: return [2 /*return*/, this.dicLoaiCongViec[idLoaiCongViec]];
|
|
10564
|
+
}
|
|
10565
|
+
});
|
|
10566
|
+
});
|
|
10567
|
+
};
|
|
10568
|
+
return DmLoaiCongViecService;
|
|
10569
|
+
}(BaseService));
|
|
10570
|
+
DmLoaiCongViecService.ɵprov = i0.ɵɵdefineInjectable({ factory: function DmLoaiCongViecService_Factory() { return new DmLoaiCongViecService(i0.ɵɵinject(i1$1.HttpClient), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(ModuleConfigService)); }, token: DmLoaiCongViecService, providedIn: "root" });
|
|
10571
|
+
DmLoaiCongViecService.decorators = [
|
|
10572
|
+
{ type: i0.Injectable, args: [{
|
|
10573
|
+
providedIn: 'root'
|
|
10574
|
+
},] }
|
|
10575
|
+
];
|
|
10576
|
+
DmLoaiCongViecService.ctorParameters = function () { return [
|
|
10577
|
+
{ type: i1$1.HttpClient },
|
|
10578
|
+
{ type: i0.Injector },
|
|
10579
|
+
{ type: ModuleConfigService }
|
|
10580
|
+
]; };
|
|
10581
|
+
|
|
10304
10582
|
var maximumPageSize = 99999;
|
|
10305
10583
|
var FieldDefineIsWorkflowControl = '__WorkflowField';
|
|
10306
10584
|
var FieldDefineIsTaskFormControl = '__TaskForm';
|
|
@@ -10859,39 +11137,6 @@
|
|
|
10859
11137
|
return SearchInfo;
|
|
10860
11138
|
}());
|
|
10861
11139
|
|
|
10862
|
-
var StateMachinesService = /** @class */ (function (_super) {
|
|
10863
|
-
__extends(StateMachinesService, _super);
|
|
10864
|
-
function StateMachinesService(http, injector, _moduleConfigService) {
|
|
10865
|
-
var _this = _super.call(this, http, injector, _moduleConfigService.getConfig().environment.apiDomain.workflowEndpoint + "/" + _moduleConfigService.getConfig().environment.apiVersion + "/StateMachines") || this;
|
|
10866
|
-
_this._moduleConfigService = _moduleConfigService;
|
|
10867
|
-
_this.entityName = 'StateMachines';
|
|
10868
|
-
_this.serviceCode = 'workflow';
|
|
10869
|
-
_this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.workflowEndpoint;
|
|
10870
|
-
return _this;
|
|
10871
|
-
}
|
|
10872
|
-
StateMachinesService.prototype.changeState = function (itemWorkflowHistory) {
|
|
10873
|
-
return this.defaultPost(this.serviceUri + "/ChangeState", itemWorkflowHistory);
|
|
10874
|
-
};
|
|
10875
|
-
StateMachinesService.prototype.rollback = function (rowData) {
|
|
10876
|
-
return this.defaultPost(this.serviceUri + "/Rollback/" + rowData.__workflowCode + "/" + rowData.id, {});
|
|
10877
|
-
};
|
|
10878
|
-
StateMachinesService.prototype.getUserInProcessForm = function (workflowCode, stateCode, actionCode, itemId) {
|
|
10879
|
-
return this.defaultPost(this.serviceUri + "/GetUserInProcessForm/" + workflowCode + "/" + stateCode + "/" + actionCode + "/" + itemId, {});
|
|
10880
|
-
};
|
|
10881
|
-
return StateMachinesService;
|
|
10882
|
-
}(BaseService));
|
|
10883
|
-
StateMachinesService.ɵprov = i0.ɵɵdefineInjectable({ factory: function StateMachinesService_Factory() { return new StateMachinesService(i0.ɵɵinject(i1$1.HttpClient), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(ModuleConfigService)); }, token: StateMachinesService, providedIn: "root" });
|
|
10884
|
-
StateMachinesService.decorators = [
|
|
10885
|
-
{ type: i0.Injectable, args: [{
|
|
10886
|
-
providedIn: 'root'
|
|
10887
|
-
},] }
|
|
10888
|
-
];
|
|
10889
|
-
StateMachinesService.ctorParameters = function () { return [
|
|
10890
|
-
{ type: i1$1.HttpClient },
|
|
10891
|
-
{ type: i0.Injector },
|
|
10892
|
-
{ type: ModuleConfigService }
|
|
10893
|
-
]; };
|
|
10894
|
-
|
|
10895
11140
|
var CanBo_HoSoService = /** @class */ (function (_super) {
|
|
10896
11141
|
__extends(CanBo_HoSoService, _super);
|
|
10897
11142
|
function CanBo_HoSoService(http, injector, _moduleConfigService) {
|
|
@@ -16421,6 +16666,7 @@
|
|
|
16421
16666
|
function DataFormBase(_injector) {
|
|
16422
16667
|
var _this = _super.call(this, _injector) || this;
|
|
16423
16668
|
_this.model = new CrudFormData();
|
|
16669
|
+
_this.forceOnlyView = false;
|
|
16424
16670
|
_this.onSave = new i0.EventEmitter();
|
|
16425
16671
|
_this.onSaved = new i0.EventEmitter();
|
|
16426
16672
|
_this.onCancel = new i0.EventEmitter();
|
|
@@ -16717,6 +16963,8 @@
|
|
|
16717
16963
|
data.__disableEdit = this.model.data.__disableEdit;
|
|
16718
16964
|
this.model.data = data;
|
|
16719
16965
|
this.checkPermission(data.basePermission);
|
|
16966
|
+
if (this.forceOnlyView)
|
|
16967
|
+
this.__isFormView = true;
|
|
16720
16968
|
if (this.crudForm) {
|
|
16721
16969
|
this.crudForm.switchViewMode(this.__isFormView);
|
|
16722
16970
|
this.crudForm.data = data;
|
|
@@ -17209,6 +17457,7 @@
|
|
|
17209
17457
|
buttonTemplate: [{ type: i0.ViewChild, args: ['buttonTemplate', { static: true },] }],
|
|
17210
17458
|
parentSetting: [{ type: i0.Input }],
|
|
17211
17459
|
model: [{ type: i0.Input }],
|
|
17460
|
+
forceOnlyView: [{ type: i0.Input }],
|
|
17212
17461
|
onSave: [{ type: i0.Output }],
|
|
17213
17462
|
onSaved: [{ type: i0.Output }],
|
|
17214
17463
|
onCancel: [{ type: i0.Output }],
|
|
@@ -18523,6 +18772,9 @@
|
|
|
18523
18772
|
congViecSetting: new CrudListSetting()
|
|
18524
18773
|
}
|
|
18525
18774
|
});
|
|
18775
|
+
_this.detailTaskModel = new DialogModel({
|
|
18776
|
+
header: 'Chi tiết công việc'
|
|
18777
|
+
});
|
|
18526
18778
|
_this.shareLinkModel = new DialogModel({
|
|
18527
18779
|
header: 'Chia sẻ quyền',
|
|
18528
18780
|
popupSize: new PopupSize({ width: 650, height: 310 })
|
|
@@ -18720,6 +18972,8 @@
|
|
|
18720
18972
|
_this.entityWorkflowHistoryService = _this._injector.get(EntityWorkflowHistoryService);
|
|
18721
18973
|
_this.stateMachinesService = _this._injector.get(StateMachinesService);
|
|
18722
18974
|
_this.canBo_HoSoService = _this._injector.get(CanBo_HoSoService);
|
|
18975
|
+
_this._congViecService = _this._injector.get(CongViecService);
|
|
18976
|
+
_this._dmLoaiCongViecService = _this._injector.get(DmLoaiCongViecService);
|
|
18723
18977
|
_this.handleCheckAll = _this.handleCheckAll.bind(_this);
|
|
18724
18978
|
_this.handleCheckAll_Group = _this.handleCheckAll_Group.bind(_this);
|
|
18725
18979
|
_this.environment = _this._moduleConfigService.getConfig().environment;
|
|
@@ -19363,12 +19617,13 @@
|
|
|
19363
19617
|
});
|
|
19364
19618
|
});
|
|
19365
19619
|
};
|
|
19366
|
-
CrudListComponent.prototype.getItemWorkflowSetting = function (rowData) {
|
|
19620
|
+
CrudListComponent.prototype.getItemWorkflowSetting = function (rowData, workflowSetting) {
|
|
19621
|
+
if (workflowSetting === void 0) { workflowSetting = null; }
|
|
19367
19622
|
return __awaiter(this, void 0, void 0, function () {
|
|
19368
|
-
var workflowSetting;
|
|
19369
19623
|
return __generator(this, function (_b) {
|
|
19370
19624
|
switch (_b.label) {
|
|
19371
19625
|
case 0:
|
|
19626
|
+
if (!!workflowSetting) return [3 /*break*/, 2];
|
|
19372
19627
|
workflowSetting = this.setting.workflowSettingNew;
|
|
19373
19628
|
if (!(this.setting.isWorkflowTree
|
|
19374
19629
|
&& this.setting.workflowConfigAdvance
|
|
@@ -19435,9 +19690,12 @@
|
|
|
19435
19690
|
CrudListComponent.prototype.showActionWorkflowNew = function (evt, rowData) {
|
|
19436
19691
|
return __awaiter(this, void 0, void 0, function () {
|
|
19437
19692
|
var resultGetActionWorkflow, _b, buttonContexts, hasPermission;
|
|
19693
|
+
var _this = this;
|
|
19438
19694
|
return __generator(this, function (_c) {
|
|
19439
19695
|
switch (_c.label) {
|
|
19440
|
-
case 0:
|
|
19696
|
+
case 0:
|
|
19697
|
+
if (!(this.setting.isWorkflowTree || !this.setting.workflowSettingNew.createTaskInstead)) return [3 /*break*/, 2];
|
|
19698
|
+
return [4 /*yield*/, this.getActionWorkflowNew(rowData)];
|
|
19441
19699
|
case 1:
|
|
19442
19700
|
resultGetActionWorkflow = _c.sent();
|
|
19443
19701
|
if (!Array.isArray(resultGetActionWorkflow))
|
|
@@ -19447,6 +19705,75 @@
|
|
|
19447
19705
|
rowData.__actions = buttonContexts;
|
|
19448
19706
|
this.buttonContexts = buttonContexts;
|
|
19449
19707
|
this._showContextMenu(evt);
|
|
19708
|
+
return [3 /*break*/, 3];
|
|
19709
|
+
case 2:
|
|
19710
|
+
this.buttonContexts = [
|
|
19711
|
+
{
|
|
19712
|
+
label: "Xem chi ti\u1EBFt c\u00F4ng vi\u1EC7c",
|
|
19713
|
+
icon: 'pi pi-list',
|
|
19714
|
+
command: function () { return _this.viewTaskDetail(rowData); }
|
|
19715
|
+
},
|
|
19716
|
+
{
|
|
19717
|
+
label: "Xem l\u1ECBch s\u1EED",
|
|
19718
|
+
icon: 'pi pi-calendar',
|
|
19719
|
+
command: function () { return _this.viewTaskHistory(rowData); }
|
|
19720
|
+
}
|
|
19721
|
+
];
|
|
19722
|
+
this._showContextMenu(evt);
|
|
19723
|
+
_c.label = 3;
|
|
19724
|
+
case 3: return [2 /*return*/];
|
|
19725
|
+
}
|
|
19726
|
+
});
|
|
19727
|
+
});
|
|
19728
|
+
};
|
|
19729
|
+
CrudListComponent.prototype.viewTaskDetail = function (rowData) {
|
|
19730
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
19731
|
+
var itemTask, taskFormModel;
|
|
19732
|
+
return __generator(this, function (_b) {
|
|
19733
|
+
switch (_b.label) {
|
|
19734
|
+
case 0: return [4 /*yield*/, this._congViecService.getDetailByFilter([
|
|
19735
|
+
this.newFilter('entityKey', exports.Operator.equal, rowData.id)
|
|
19736
|
+
])];
|
|
19737
|
+
case 1:
|
|
19738
|
+
itemTask = (_b.sent()).data;
|
|
19739
|
+
if (itemTask == null) {
|
|
19740
|
+
return [2 /*return*/, this._notifierService.showWarning('Không tìm thấy công việc gắn với bản ghi')];
|
|
19741
|
+
}
|
|
19742
|
+
taskFormModel = {};
|
|
19743
|
+
taskFormModel.formState = exports.FormState.VIEW;
|
|
19744
|
+
taskFormModel.data = itemTask;
|
|
19745
|
+
this.detailTaskModel.data.taskFormModel = taskFormModel;
|
|
19746
|
+
this.detailTaskModel.showEditForm = true;
|
|
19747
|
+
return [2 /*return*/];
|
|
19748
|
+
}
|
|
19749
|
+
});
|
|
19750
|
+
});
|
|
19751
|
+
};
|
|
19752
|
+
CrudListComponent.prototype.viewTaskHistory = function (rowData) {
|
|
19753
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
19754
|
+
var itemTask, workflowSetting;
|
|
19755
|
+
return __generator(this, function (_b) {
|
|
19756
|
+
switch (_b.label) {
|
|
19757
|
+
case 0: return [4 /*yield*/, this._congViecService.getDetailByFilter([
|
|
19758
|
+
this.newFilter('entityKey', exports.Operator.equal, rowData.id)
|
|
19759
|
+
])];
|
|
19760
|
+
case 1:
|
|
19761
|
+
itemTask = (_b.sent()).data;
|
|
19762
|
+
if (itemTask == null) {
|
|
19763
|
+
return [2 /*return*/, this._notifierService.showWarning('Không tìm thấy công việc gắn với bản ghi')];
|
|
19764
|
+
}
|
|
19765
|
+
// Set như này vì form lịch sử đang dùng trường __workflowCode
|
|
19766
|
+
itemTask.__workflowCode = itemTask.workflowCode;
|
|
19767
|
+
this.currentItem = itemTask;
|
|
19768
|
+
return [4 /*yield*/, this._dmLoaiCongViecService.getWorkflowSettingByIdLoaiCongViec(itemTask.idLoaiCongViec)];
|
|
19769
|
+
case 2:
|
|
19770
|
+
workflowSetting = _b.sent();
|
|
19771
|
+
if (!workflowSetting)
|
|
19772
|
+
return [2 /*return*/];
|
|
19773
|
+
this.workflowHistoryModel.data = {};
|
|
19774
|
+
this.workflowHistoryModel.data.workflowSetting = workflowSetting;
|
|
19775
|
+
this.workflowHistoryModel.data.tableName = this._congViecService.entityName;
|
|
19776
|
+
this.workflowHistoryModel.showEditForm = true;
|
|
19450
19777
|
return [2 /*return*/];
|
|
19451
19778
|
}
|
|
19452
19779
|
});
|
|
@@ -19593,6 +19920,7 @@
|
|
|
19593
19920
|
workflowSetting = _b.sent();
|
|
19594
19921
|
if (!workflowSetting)
|
|
19595
19922
|
return [2 /*return*/];
|
|
19923
|
+
this.workflowHistoryModel.data = {};
|
|
19596
19924
|
this.workflowHistoryModel.data.workflowSetting = workflowSetting;
|
|
19597
19925
|
this.workflowHistoryModel.showEditForm = true;
|
|
19598
19926
|
return [2 /*return*/];
|
|
@@ -21291,7 +21619,7 @@
|
|
|
21291
21619
|
{ type: i0.Component, args: [{
|
|
21292
21620
|
// tslint:disable-next-line: component-selector
|
|
21293
21621
|
selector: 'crud-list',
|
|
21294
|
-
template: "<div #container class=\"custom-card card card-w-title flex-container-fit-child\" [attr.height-type]=\"setting.heightType\"\r\n [ngStyle]=\"_style\">\r\n <div class=\"ui-helper-clearfix crud-list-header-area\">\r\n <div *ngIf=\"searchCustom\" class=\"p-grid ui-fluid custom-p-col custom-search-area\">\r\n <div class=\"p-col-12 main-container-search\">\r\n <div class=\"p-grid main-container-search-inner\">\r\n <ng-container>\r\n <ng-container *ngTemplateOutlet=\"searchCustom; context: {$implicit: this}\"></ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!setting.hiddenHeader\" class=\"p-grid ui-fluid custom-p-col page-title-area\">\r\n <div *ngIf=\"!setting.hiddenPageTitle\" class=\"main-title\">\r\n <h1 *ngIf=\"!hasTemplate('customTitle')\">\r\n {{setting.title != null ? setting.title : 'Danh s\u00E1ch ' + setting.objectName}}\r\n </h1>\r\n\r\n <ng-container *ngIf=\"hasTemplate('customTitle')\" [ngTemplateOutlet]=\"getTemplate('customTitle')\"\r\n [ngTemplateOutletContext]=\"{crudList: this}\">\r\n </ng-container>\r\n </div>\r\n\r\n <div *ngIf=\"!setting.hiddenPageSetting\" class=\"paginator-table\">\r\n <paging-next-back-only [model]=\"model\" [setting]=\"setting\" (onOldest)=\"onOldest($event)\"\r\n (onNext)=\"onNext($event)\" (onPrev)=\"onPrev($event)\" (onLatest)=\"onLatest($event)\"\r\n (onChangeLimitPage)=\"savePageSize()\">\r\n </paging-next-back-only>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"fit-content crud-list-body-area\">\r\n <div class=\"crud-list-body-area-inner\" style=\"overflow: unset;\">\r\n <div class=\"flex-container-fit-child\" style=\"overflow: unset;\">\r\n <div *ngIf=\"!setting.hiddenToolbar\" class=\"p-grid crudListToolbar\">\r\n <ng-container>\r\n <div *ngIf=\"!setting.hiddenButtons && hasTemplate('toolbar')\"\r\n [ngClass]=\"setting.hiddenAdvanceSearch ? 'p-md-12 p-lg-12' : 'p-md-7 p-lg-8'\"\r\n class=\"p-col-12 button-group function-topbar custom-toolbar\">\r\n <ng-container\r\n [ngTemplateOutletContext]=\"{selectedItems: model.selectedItems, crudList: this}\"\r\n [ngTemplateOutlet]=\"getTemplate('toolbar')\"></ng-container>\r\n </div>\r\n <div *ngIf=\"!setting.hiddenButtons && !hasTemplate('toolbar')\"\r\n [ngClass]=\"setting.hiddenAdvanceSearch ? 'p-md-12 p-lg-12' : 'p-md-7 p-lg-8'\"\r\n class=\"p-col-12 button-group function-topbar\">\r\n <button *ngIf=\"!hiddenAdd\" type=\"button\" pButton pRipple label=\"Th\u00EAm m\u1EDBi\" icon=\"pi pi-plus\"\r\n class=\"p-button-text\" [disabled]=\"!model.baseReady\" (click)=\"add()\"></button>\r\n <button *ngIf=\"setting.showExportSelectedItems && model.selectedItems.length > 0\"\r\n type=\"button\" pButton pRipple\r\n label=\"Xu\u1EA5t c\u00E1c m\u1EE5c \u0111\u00E3 ch\u1ECDn ({{model.selectedItems.length}})\" icon=\"fas fa-file-excel\"\r\n class=\"p-button-text p-button-success\" (click)=\"xuatCacMucDaChon()\"></button>\r\n <button *ngIf=\"!hiddenDelete && model.selectedItems.length > 0 && !disableMultipleDelete()\"\r\n type=\"button\" pButton pRipple\r\n label=\"{{ 'X\u00F3a' | translate }} ({{model.selectedItems.length}})\" icon=\"pi pi-trash\"\r\n class=\"p-button-text p-button-danger\" (click)=\"deleteMutiple()\"></button>\r\n <button\r\n *ngIf=\"!hiddenCopyLink && model.selectedItems.length > 0 && !disableMultipleCopyLink()\"\r\n label=\"Sao ch\u00E9p li\u00EAn k\u1EBFt\" type=\"button\" pButton pRipple\r\n pTooltip=\"{{'Sao ch\u00E9p li\u00EAn k\u1EBFt' | translate}}\" tooltipPosition=\"top\"\r\n class=\"p-button-text p-button-info link-or-action\" icon=\"pi pi-link\"\r\n (click)=\"copyLinkMultiple()\"></button>\r\n <button *ngIf=\"!disableShare && model.selectedItems.length > 0\" label=\"Chia s\u1EBB li\u00EAn k\u1EBFt\"\r\n type=\"button\" pButton pRipple [pTooltip]=\"'Chia s\u1EBB li\u00EAn k\u1EBFt' | translate\"\r\n tooltipPosition=\"top\" class=\"p-button-text p-button-info link-or-action\"\r\n icon=\"pi pi-link\" (click)=\"createShareLinkMultiple()\"></button>\r\n <ng-container [ngTemplateOutlet]=\"getTemplate('buttonAfterToolbar')\"\r\n [ngTemplateOutletContext]=\"{crudList: this}\"></ng-container>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"!setting.hiddenAdvanceSearch\" class=\"p-col-12 advance-search-container\"\r\n [ngClass]=\"setting.hiddenButtons ? 'p-md-12 p-lg-12' : 'p-md-5 p-lg-4'\">\r\n <advance-search #advanceSearch [parentSetting]=\"setting\" [searchInfo]=\"searchInfo\"\r\n [loading]=\"model.loading\" (onSearch)=\"handleSearchAdvs($event)\"\r\n (onInit)=\"handleInitAdvanceSearch($event)\">\r\n </advance-search>\r\n </div>\r\n </div>\r\n <div *ngIf=\"hasTemplate('topGrid')\" class=\"extend-content-top-grid\">\r\n <ng-container [ngTemplateOutletContext]=\"{selectedItems: model.selectedItems, crudList: this}\"\r\n [ngTemplateOutlet]=\"getTemplate('topGrid')\"></ng-container>\r\n </div>\r\n <div class=\"container-table fit-content\" [class.--table-responsive]=\"responsive\">\r\n <div class=\"container-table-inner\">\r\n <ng-container *ngIf=\"!_groupField\">\r\n <tn-custom-scrollbar *ngIf=\"showScrollBar\" #scrollbar [config]=\"configScrollBar\"\r\n [showScrollHorizontal]=\"showScrollHorizontal\">\r\n <ng-container *ngTemplateOutlet=\"tableGetGroupFieldFalse\">\r\n </ng-container>\r\n <ng-container *ngIf=\"hasTemplate('afterCrudList')\">\r\n <ng-container [ngTemplateOutlet]=\"hasTemplate('afterCrudList')\"></ng-container>\r\n </ng-container>\r\n </tn-custom-scrollbar>\r\n <div *ngIf=\"!showScrollBar\">\r\n <ng-container *ngTemplateOutlet=\"tableGetGroupFieldFalse\">\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"_groupField\">\r\n <tn-custom-scrollbar *ngIf=\"showScrollBar\" #scrollbar [config]=\"configScrollBar\"\r\n [showScrollHorizontal]=\"showScrollHorizontal\">\r\n <ng-container *ngTemplateOutlet=\"tableGetGroupFieldTrue\">\r\n </ng-container>\r\n <ng-container *ngIf=\"hasTemplate('afterCrudList')\">\r\n <ng-container [ngTemplateOutlet]=\"getTemplate('afterCrudList')\"></ng-container>\r\n </ng-container>\r\n </tn-custom-scrollbar>\r\n <div *ngIf=\"!showScrollBar\">\r\n <ng-container *ngTemplateOutlet=\"tableGetGroupFieldTrue\">\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"table-border-line --top\"></div>\r\n <div class=\"table-border-line --right\"></div>\r\n <div class=\"table-border-line --bottom\"></div>\r\n <div class=\"table-border-line --left\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<after-view-checked (loaded)=\"handleReady()\"></after-view-checked>\r\n<settings *ngIf=\"_showSettings && !setting.hiddenSetting\" [entityMetadataService]=\"entityMetadataService\"\r\n [parentContext]=\"context\" [parentSetting]=\"setting\" [parentModel]=\"model\" (onSave)=\"onSaveSettings($event)\"\r\n (onCancel)=\"_showSettings = false\">\r\n</settings>\r\n<settings-row *ngIf=\"_showSettingsRowColor && !setting.hiddenSetting\" [entityMetadataService]=\"entityMetadataService\"\r\n [parentContext]=\"context\" [parentSetting]=\"setting\" [parentModel]=\"model\" (onSave)=\"onSaveColorSettings($event)\"\r\n (onCancel)=\"_showSettingsRowColor = false\">\r\n</settings-row>\r\n<workflow-setting-dialog *ngIf=\"_showSettingsWorkflow && !setting.hiddenSettingWorkflow\" [parentSetting]=\"setting\"\r\n [parentContext]=\"context\" [parentModel]=\"model\" (onSaved)=\"onSaveWorkflowSettings($event)\"\r\n (onRemoved)=\"onRemoveWorkflowSettings($event)\" (onCancel)=\"_showSettingsWorkflow = false\"></workflow-setting-dialog>\r\n<tn-dialog *ngIf=\"workflowSettingModel.showEditForm\" [header]=\"'C\u1EA5u h\u00ECnh quy tr\u00ECnh nghi\u1EC7p v\u1EE5' | translate\"\r\n [popupSize]=\"workflowSettingModel.popupSize\" (onHide)=\"workflowSettingModel.showEditForm = false\">\r\n <workflow-setting-new #formBase [parentSetting]=\"setting\" (onSaved)=\"onSaveWorkflowSettingsNew($event)\"\r\n (onCancel)=\"workflowSettingModel.showEditForm = false\"></workflow-setting-new>\r\n</tn-dialog>\r\n<entity-permission *ngIf=\"_showSettingsPermission && !setting.hiddenSettingPermission\" [parentSetting]=\"setting\"\r\n [parentContext]=\"context\" [parentModel]=\"model\" [searchInfo]=\"searchInfo\"\r\n (onCancel)=\"_showSettingsPermission = false\">\r\n</entity-permission>\r\n<p-contextMenu #contextMenu [appendTo]=\"'body'\" [model]=\"buttonContexts\">\r\n</p-contextMenu>\r\n<tn-dialog *ngIf=\"showFormWorkflow\" #dialog [header]=\"headerWorkflow | translate\" [popupSize]=\"popupSizeWorkflow\"\r\n [scrollBarStyleClass]=\"'fit-content'\" (onHide)=\"showFormWorkflow = false\">\r\n <div style=\"height: 100%\">\r\n <simple-workflow-form #formBase [baseService]=\"setting.baseService\" [item]=\"currentItem\"\r\n [action]=\"actionWorkflow\" (onInvalidWorkflow)=\"handleInvalidWF($event)\" (onSaved)=\"handleProcessedWorflow()\"\r\n (onCancel)=\"showFormWorkflow = false\">\r\n </simple-workflow-form>\r\n </div>\r\n</tn-dialog>\r\n<tn-dialog *ngIf=\"processWorkflowModel.showEditForm\" #dialog [header]=\"processWorkflowModel.header | translate\"\r\n [popupSize]=\"processWorkflowModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\"\r\n (onHide)=\"processWorkflowModel.showEditForm = false\">\r\n <div style=\"height: 100%\">\r\n <process-workflow-form #formBase [businessSetting]=\"setting\" [item]=\"currentItem\"\r\n [workflow]=\"processWorkflowModel.data.workflow\" [action]=\"processWorkflowModel.data.action\"\r\n (onSaved)=\"handleProcessedWorkflowBase()\" (onCancel)=\"processWorkflowModel.showEditForm = false\">\r\n </process-workflow-form>\r\n </div>\r\n</tn-dialog>\r\n<tn-dialog *ngIf=\"choYKienModel.showEditForm\" #dialog [header]=\"choYKienModel.header | translate\"\r\n [popupSize]=\"choYKienModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\"\r\n (onHide)=\"choYKienModel.showEditForm = false\">\r\n <div style=\"height: 100%\">\r\n <cho-y-kien-form #formBase [bussinessSetting]=\"setting\" [rowItem]=\"choYKienModel.data.rowData\"\r\n (onSaved)=\"choYKienModel.showEditForm = false\" (onCancel)=\"choYKienModel.showEditForm = false\">\r\n </cho-y-kien-form>\r\n </div>\r\n</tn-dialog>\r\n<tn-dialog *ngIf=\"workflowHistoryModel.showEditForm\" #dialog [header]=\"workflowHistoryModel.header | translate\"\r\n [popupSize]=\"workflowHistoryModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\"\r\n (onHide)=\"workflowHistoryModel.showEditForm = false\">\r\n <div style=\"height: 100%\">\r\n <workflow-history-new #formBase [businessSetting]=\"setting\" [item]=\"currentItem\"\r\n [workflowSetting]=\"workflowHistoryModel.data.workflowSetting\"\r\n (onCancel)=\"workflowHistoryModel.showEditForm = false\">\r\n </workflow-history-new>\r\n </div>\r\n</tn-dialog>\r\n<tn-dialog *ngIf=\"permissionSharingModel.showEditForm\" #dialog [header]=\"permissionSharingModel.header | translate\"\r\n [popupSize]=\"permissionSharingModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\"\r\n (onHide)=\"permissionSharingModel.showEditForm = false\">\r\n <div style=\"height: 100%\">\r\n <permission-sharing #formBase [item]=\"rowDataCurrent\" [baseService]=\"setting.baseService\"\r\n (onCancel)=\"permissionSharingModel.showEditForm = false\">\r\n </permission-sharing>\r\n </div>\r\n</tn-dialog>\r\n<workflow-history-dialog *ngIf=\"showHistoryWorkflow\" [baseService]=\"setting.baseService\" [item]=\"currentItem\"\r\n [workflowSetting]=\"setting.workflowSetting\" (onHide)=\"handleHideHistoryWorkflow()\">\r\n</workflow-history-dialog>\r\n<tn-dialog *ngIf=\"startWorkflowModel.showEditForm\" #dialog [header]=\"startWorkflowModel.header | translate\"\r\n [popupSize]=\"startWorkflowModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\"\r\n (onHide)=\"startWorkflowModel.showEditForm = false\">\r\n <div style=\"height: 100%\">\r\n <start-workflow #formBase [workflows]=\"startWorkflowModel.data.workflows\"\r\n [defaultWorkflow]=\"startWorkflowModel.data.defaultWorkflow\"\r\n (onCancel)=\"startWorkflowModel.showEditForm = false\" (onSaved)=\"handleStartWorkflowFromDialog($event)\">\r\n </start-workflow>\r\n </div>\r\n</tn-dialog>\r\n<tn-dialog *ngIf=\"congViecModel.showEditForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"congViecModel.header | translate\" [popupSize]=\"congViecModel.popupSize\"\r\n (onHide)=\"congViecModel.showEditForm = false\">\r\n <base-congviec-form #formBase [parentSetting]=\"congViecModel.data.congViecSetting\"\r\n [model]=\"congViecModel.data.model\" (onSaved)=\"congViecModel.showEditForm = false;getData()\"\r\n (onCancel)=\"congViecModel.showEditForm = false\">\r\n </base-congviec-form>\r\n</tn-dialog>\r\n<tn-dialog *ngIf=\"shareLinkModel.showEditForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"shareLinkModel.header | translate\" [popupSize]=\"shareLinkModel.popupSize\" [useDefaultScrollBar]=\"true\"\r\n (onHide)=\"shareLinkModel.showEditForm = false\">\r\n <share-link-by-permission #formBase [setting]=\"setting\" [lstItem]=\"shareLinkModel.data.lstItem\"\r\n (onCancel)=\"congViecModel.showEditForm = false\">\r\n </share-link-by-permission>\r\n</tn-dialog>\r\n<ng-template #tableGetGroupFieldFalse>\r\n <p-table #table [dataKey]=\"'id'\" [scrollable]=\"pTableScrollable\" [scrollHeight]=\"pTableScrollHeight\"\r\n [columns]=\"setting.cols\" [paginator]=\"false\" [value]=\"_dataSource\" (onSort)=\"onSort($event, table)\"\r\n [class]=\"_tableClass\" [responsive]=\"responsive\" [lazy]=\"lazy\" [loading]=\"model.loading\"\r\n [(selection)]=\"model.selectedItems\" (onRowReorder)=\"handleRowOrdered($event)\">\r\n <ng-template *ngIf=\"header\" pTemplate=\"header\" let-columns>\r\n <ng-container\r\n *ngTemplateOutlet=\"header, context: {$implicit: columns, crudList: this, rowHeaderFilter: rowHeaderFilter, contentTh: contentTh, containerSticky: containerSticky, funcCheckAll: handleCheckAll}\">\r\n </ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"!header\" pTemplate=\"header\" let-columns>\r\n <ng-container *ngTemplateOutlet=\"trHeader; context: {$implicit: columns, funcCheckAll: handleCheckAll}\">\r\n </ng-container>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-columns=\"columns\" let-index=\"rowIndex\" let-expanded=\"expanded\">\r\n <ng-container\r\n *ngTemplateOutlet=\"trBody; context: {$implicit: rowData, columns: columns, index: index, expanded: expanded, eventSelectRow: handleSelectRow, eventChecked: handleCheckRowData}\">\r\n </ng-container>\r\n <after-view-checked *ngIf=\"index == _dataSource.length - 1\" style=\"display: none;\" [renderKey]=\"_dataSource\"\r\n (loaded)=\"handleTableRendered()\">\r\n </after-view-checked>\r\n </ng-template>\r\n <ng-template *ngIf=\"rowExpansion\" pTemplate=\"rowexpansion\" let-rowData let-expanded=\"expanded\">\r\n <ng-container\r\n *ngTemplateOutlet=\"rowExpansion; context: {rowData: rowData, expanded: expanded, getColSpanGroup: getColSpanGroup}\">\r\n </ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"summary\" pTemplate=\"summary\">\r\n <ng-container *ngTemplateOutlet=\"summary\"></ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"footer\" pTemplate=\"footer\" let-columns>\r\n <ng-container *ngTemplateOutlet=\"footer; context: {$implicit: columns}\"></ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"colgroup\" pTemplate=\"colgroup\" let-columns>\r\n <ng-container *ngTemplateOutlet=\"colgroup; context: {$implicit: columns}\"></ng-container>\r\n </ng-template>\r\n </p-table>\r\n</ng-template>\r\n<ng-template #tableGetGroupFieldTrue>\r\n <p-table #tableGroup [scrollable]=\"pTableScrollable\" [scrollHeight]=\"pTableScrollHeight\" [columns]=\"setting.cols\"\r\n [paginator]=\"false\" [value]=\"_dataSource\" [metaKeySelection]=\"false\" (onSort)=\"onSort($event, tableGroup)\"\r\n [class]=\"_tableClass\" [customSort]=\"true\" [responsive]=\"responsive\" [lazy]=\"true\" [loading]=\"model.loading\"\r\n [(selection)]=\"model.selectedItems\" [expandedRowKeys]=\"model.expandedRowKeys\" [dataKey]=\"_groupField\">\r\n <ng-template *ngIf=\"header\" pTemplate=\"header\" let-columns>\r\n <ng-container\r\n *ngTemplateOutlet=\"header, context: {$implicit: columns, crudList: this, rowHeaderFilter: rowHeaderFilter, contentTh: contentTh, containerSticky: containerSticky, funcCheckAll: handleCheckAll_Group}\">\r\n </ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"!header\" pTemplate=\"header\" let-columns>\r\n <ng-container\r\n *ngTemplateOutlet=\"trHeader; context: {$implicit: columns, funcCheckAll: handleCheckAll_Group}\">\r\n </ng-container>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-rowIndex=\"rowIndex\" let-expanded=\"expanded\" let-columns=\"columns\">\r\n <tr *ngIf=\"rowGroupMetadata[rowData[_groupField]] && rowGroupMetadata[rowData[_groupField]].index == rowIndex\"\r\n class=\"p-widget-header group-row\" style=\"border: 0px; border-bottom: 1px solid #eee\">\r\n <td *ngIf=\"!setting.hiddenCheckbox\" class=\"center chkbox\" [class.sticky]=\"setting.stickyColumn\">\r\n <p-checkbox [(ngModel)]=\"rowGroupChecked[rowData[_groupField]]\" binary=\"true\"\r\n (onChange)=\"handleCheckRowGroup(rowData)\">\r\n </p-checkbox>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n <ng-container *ngIf=\"!rowGroup\">\r\n <td [colSpan]=\"getColSpanGroup()\" [class]=\"_classRowGroup\">\r\n <div class=\"container-row-group\">\r\n <a href=\"javascript:;\" [pRowToggler]=\"rowData\" class=\"container-row-group-toggle\"\r\n [class.sticky]=\"setting.stickyColumn\">\r\n <i style=\"margin-right:5px\"\r\n [ngClass]=\"expanded ? 'fas fa-fw fa-caret-down' : 'fas fa-fw fa-caret-right'\"></i>\r\n <span class=\"content-row-group\">\r\n <ng-container *ngIf=\"!contentRowGroup\">\r\n <ng-container [ngTemplateOutlet]=\"_contentRowGroup\"\r\n [ngTemplateOutletContext]=\"getContextRowGroup(rowData)\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"contentRowGroup\">\r\n <ng-container [ngTemplateOutlet]=\"contentRowGroup\"\r\n [ngTemplateOutletContext]=\"getContextRowGroup(rowData)\">\r\n </ng-container>\r\n </ng-container>\r\n </span>\r\n </a>\r\n </div>\r\n </td>\r\n </ng-container>\r\n <ng-container *ngIf=\"rowGroup\">\r\n <ng-container [ngTemplateOutlet]=\"rowGroup\"\r\n [ngTemplateOutletContext]=\"getContextRowGroupRoot(rowData, expanded)\">\r\n </ng-container>\r\n </ng-container>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"rowexpansion\" let-columns=\"columns\" let-rowData let-index=\"rowIndex\">\r\n <ng-container\r\n *ngTemplateOutlet=\"trBody; context: {$implicit: rowData, columns: columns, index: index, expanded: false, eventSelectRow: handleSelectRowGroup, eventChecked: handleCheckRowData_Group}\">\r\n </ng-container>\r\n <after-view-checked *ngIf=\"index == _dataSource.length - 1\" style=\"display: none;\" [renderKey]=\"_dataSource\"\r\n (loaded)=\"handleTableRendered()\">\r\n </after-view-checked>\r\n </ng-template>\r\n <ng-template *ngIf=\"summary\" pTemplate=\"summary\">\r\n <ng-container *ngTemplateOutlet=\"summary\"></ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"footer\" pTemplate=\"footer\" let-columns>\r\n <ng-container *ngTemplateOutlet=\"footer; context: {$implicit: columns}\"></ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"colgroup\" pTemplate=\"colgroup\" let-columns>\r\n <ng-container *ngTemplateOutlet=\"colgroup; context: {$implicit: columns}\"></ng-container>\r\n </ng-template>\r\n </p-table>\r\n <after-view-checked></after-view-checked>\r\n</ng-template>\r\n<ng-template #trHeader let-columns let-funcCheckAll=\"funcCheckAll\">\r\n <tr class=\"title-row\">\r\n <ng-container *ngIf=\"!setting.hiddenCheckbox\">\r\n <th [style.width]=\"widthCheckbox\" class=\"chkbox link-or-action cell-checkbox\"\r\n [class.sticky]=\"setting.stickyColumn\">\r\n <button *ngIf=\"!hasTemplate('headerCheckbox')\" type=\"button\" pButton pRipple icon=\"pi pi-refresh\"\r\n class=\"p-button-rounded p-button-text btnReload\" pTooltip=\"L\u00E0m m\u1EDBi d\u1EEF li\u1EC7u\" tooltipPosition=\"top\"\r\n [disabled]=\"model.loading\" (click)=\"reload()\"></button>\r\n <ng-container *ngIf=\"hasTemplate('headerCheckbox')\">\r\n <ng-container [ngTemplateOutletContext]=\"{crudList: this}\"\r\n [ngTemplateOutlet]=\"getTemplate('headerCheckbox')\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n </ng-container>\r\n <th *ngIf=\"!setting.hiddenOrderColumn\" [style.width]=\"widthOrderColumn\" class=\"stt nopad center\"\r\n [class.sticky]=\"setting.stickyColumn\">\r\n {{ 'TT' |translate}}\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <th *ngIf=\"rowExpansion\" class=\"nopad row-expansion-toggle center\" style=\"width: 2.5rem\"\r\n [class.sticky]=\"setting.stickyColumn\">\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <ng-container *ngFor=\"let col of columns; let i = index\">\r\n <th *ngIf=\"col && col.visible && col.field!='function'\" [ngStyle]=\"col.extendData.headerStyle\"\r\n [pTooltip]=\"col.fullLabel\" tooltipStyleClass=\"unset-width\" [class]=\"col.extendData.headerClass\"\r\n [class.first-th]=\"i==0\" [escape]=\"false\" tooltipPosition=\"top\" [tnSortableColumn]=\"col.field\">\r\n <ng-container *ngTemplateOutlet=\"contentTh; context: {$implicit: col}\"></ng-container>\r\n <ng-container *ngIf=\"col.sort || col.sortClient\">\r\n <ng-container *ngTemplateOutlet=\"sortIcon; context: {field: col.field}\"></ng-container>\r\n </ng-container>\r\n </th>\r\n </ng-container>\r\n <th *ngIf=\"enableReorderRow\" style=\"width: 30px\">\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <ng-container *ngTemplateOutlet=\"colFunctionHeader\"></ng-container>\r\n </tr>\r\n <ng-container *ngTemplateOutlet=\"rowHeaderFilter; context: {columns: columns, funcCheckAll: funcCheckAll}\">\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #rowHeaderFilter let-columns=\"columns\" let-funcCheckAll=\"funcCheckAll\">\r\n <tr class=\"filter-row\" *ngIf=\"!setting.hiddenFilterRow\">\r\n <th *ngIf=\"!setting.hiddenCheckbox\" class=\"chkbox nopad center\" [class.sticky]=\"setting.stickyColumn\"\r\n [class.tricheckbox-custom-false]=\"checkedAll === false\" [style.width]=\"widthCheckbox\">\r\n <p-triStateCheckbox [(ngModel)]=\"checkedAll\" binary=\"true\" (onChange)=\"funcCheckAll()\">\r\n </p-triStateCheckbox>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <th *ngIf=\"!setting.hiddenOrderColumn\" class=\"stt center v-top\" [class.sticky]=\"setting.stickyColumn\">\r\n <div *ngIf=\"!setting.hiddenSetting\" class=\"pick-color-row\" pTooltip=\"C\u1EA5u h\u00ECnh hi\u1EC3n th\u1ECB m\u00E0u\"\r\n tooltipPosition=\"top\" (click)=\"showSettingRowColor()\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <th *ngIf=\"rowExpansion\" class=\"nopad center row-expansion-toggle\" [class.sticky]=\"setting.stickyColumn\">\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <ng-container *ngFor=\"let col of columns; let i = index\">\r\n <th *ngIf=\"col.visible && col.field != 'function'\" class=\"cell-header-filter center\">\r\n <ng-container *ngIf=\"col.allowFilter\">\r\n <ng-container *ngIf=\"col.templateFilter\">\r\n <ng-container [ngTemplateOutlet]=\"col.templateFilter\"\r\n [ngTemplateOutletContext]=\"{col: col, filterData: filterData, onSearch: onSearch, onShowFilterDropdownPanel: onShowFilterDropdownPanel, onHideFilterDropdownPanel: onHideFilterDropdownPanel}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!col.templateFilter\" [ngSwitch]=\"col.controlType\">\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <ng-container [ngTemplateOutlet]=\"filterDropdown\"\r\n [ngTemplateOutletContext]=\"{col: col.rawColumn}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <ng-container [ngTemplateOutlet]=\"filterNumber\" [ngTemplateOutletContext]=\"{col: col}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <ng-container [ngTemplateOutlet]=\"filterDate\" [ngTemplateOutletContext]=\"{col: col}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'datetime'\">\r\n <ng-container [ngTemplateOutlet]=\"filterDate\" [ngTemplateOutletContext]=\"{col: col}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ng-container [ngSwitch]=\"col.dataType\">\r\n <ng-container *ngSwitchCase=\"'int'\">\r\n <ng-container [ngTemplateOutlet]=\"filterNumber\"\r\n [ngTemplateOutletContext]=\"{col: col}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'decimal'\">\r\n <ng-container [ngTemplateOutlet]=\"filterNumber\"\r\n [ngTemplateOutletContext]=\"{col: col}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <ng-container [ngTemplateOutlet]=\"filterDate\"\r\n [ngTemplateOutletContext]=\"{col: col}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'datetime'\">\r\n <ng-container [ngTemplateOutlet]=\"filterDate\"\r\n [ngTemplateOutletContext]=\"{col: col}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'boolean'\">\r\n <ng-container [ngTemplateOutlet]=\"filterBoolean\"\r\n [ngTemplateOutletContext]=\"{col: col}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ng-container [ngTemplateOutlet]=\"filterText\"\r\n [ngTemplateOutletContext]=\"{col: col}\">\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n </ng-container>\r\n <th *ngIf=\"enableReorderRow\" style=\"width: 30px\">\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <th *ngIf=\"!setting.hiddenFunctionColumn\" class=\"center setting-cell column-function\"\r\n [class.sticky]=\"setting.stickyColumn\">\r\n <button *ngIf=\"!setting.hiddenSetting\" type=\"button\" pButton pRipple icon=\"pi pi-cog\"\r\n class=\"p-button-rounded p-button-text\" pTooltip=\"C\u1EA5u h\u00ECnh hi\u1EC3n th\u1ECB\" tooltipPosition=\"top\"\r\n (click)=\"showSettings()\"></button>\r\n <button *ngIf=\"!setting.hiddenSettingPermission\" type=\"button\" pButton pRipple icon=\"pi pi-users\"\r\n class=\"p-button-rounded p-button-text\" pTooltip=\"Ph\u00E2n quy\u1EC1n d\u1EEF li\u1EC7u\" tooltipPosition=\"left\"\r\n (click)=\"showSettingsPermission()\"></button>\r\n <button *ngIf=\"!setting.hiddenSettingWorkflowNew\" type=\"button\" pButton pRipple icon=\"pi pi-sitemap\"\r\n class=\"p-button-rounded p-button-text\" pTooltip=\"C\u1EA5u h\u00ECnh quy tr\u00ECnh\" tooltipPosition=\"left\"\r\n (click)=\"showSettingsWorkflowNew()\"></button>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n </tr>\r\n</ng-template>\r\n<ng-template #colFunctionHeader>\r\n <ng-container *ngIf=\"!setting.hiddenFunctionColumn\">\r\n <th class=\"column-function\" [class.sticky]=\"setting.stickyColumn\"\r\n [style.width]=\"widthFunctionColumn || _widthFunctionColumn\">\r\n <div class=\"cell-header-function\">\r\n <span>{{'GRID.FUNCTION'| translate}}</span>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #contentTh let-col>\r\n <ng-container *ngIf=\"templateHeaderContent[col.field]\">\r\n <ng-container *ngTemplateOutlet=\"templateHeaderContent[col.field]\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!templateHeaderContent[col.field]\">\r\n {{col.label}}\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n</ng-template>\r\n<ng-template #trBody let-rowData let-columns=\"columns\" let-index=\"index\" let-expanded=\"expanded\"\r\n let-eventSelectRow=\"eventSelectRow\" let-eventChecked=\"eventChecked\">\r\n <tr [tnReorderableRow]=\"index\" [attr.rowIndex]=\"index\"\r\n [ngClass]=\"mergeClassObj(rowData, { 'ui-state-highlight': rowData._checked })\" [pTooltip]=\"rowData.tooltip\"\r\n tooltipPosition=\"top\" [tooltipStyleClass]=\"rowData.tooltipClass\" [escape]=\"escape\"\r\n (click)=\"eventSelectRow($event, rowData)\">\r\n <ng-container *ngIf=\"!setting.hiddenCheckbox\">\r\n <td [style.width]=\"widthCheckbox\" class=\"chkbox link-or-action cell-checkbox\"\r\n [class.sticky]=\"setting.stickyColumn\">\r\n <ng-container *ngIf=\"!hasTemplate('checkbox')\">\r\n <p-checkbox [(ngModel)]=\"rowData._checked\" binary=\"true\" (onChange)=\"eventChecked(rowData)\">\r\n </p-checkbox>\r\n </ng-container>\r\n <ng-container *ngIf=\"hasTemplate('checkbox')\">\r\n <ng-container [ngTemplateOutlet]=\"getTemplate('checkbox')\"\r\n [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n </ng-container>\r\n <td *ngIf=\"!setting.hiddenOrderColumn && (!rowData.hidden || !rowData.hidden[fieldOrder])\"\r\n [style.width]=\"widthOrderColumn\" class=\"stt\" style=\"text-align: center;\"\r\n [class.sticky]=\"setting.stickyColumn\" [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[fieldOrder]\"\r\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[fieldOrder]\">\r\n <span class=\"row-card\" [ngStyle]=\"getBookmarkColor(rowData, columns)\"></span>\r\n {{rowData[fieldOrder]}}\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n <td *ngIf=\"rowExpansion\" class=\"no-padding center row-expansion-toggle\" [class.sticky]=\"setting.stickyColumn\">\r\n <ng-container *ngTemplateOutlet=\"iconToggleRowData; context: {rowData: rowData, expanded: expanded}\">\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n <ng-container\r\n *ngTemplateOutlet=\"dynamicColBodys; context: {$implicit: columns, rowData: rowData, index: index, expanded: expanded}\">\r\n </ng-container>\r\n <td *ngIf=\"enableReorderRow\" class=\"no-padding center\">\r\n <i class=\"fas fa-arrows-alt\" style=\"cursor:pointer; padding: 8px; color: #555;\" pReorderableRowHandle></i>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n <ng-container *ngIf=\"!setting.hiddenFunctionColumn\">\r\n <td class=\"text-center column-function\" style=\"text-align: center;\" [class.sticky]=\"setting.stickyColumn\">\r\n <div *ngIf=\"hasTemplate('function')\" class=\"p-toolbar-group-center button-group\">\r\n <ng-container [ngTemplateOutlet]=\"getTemplate('function')\"\r\n [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </div>\r\n <div *ngIf=\"!hasTemplate('function')\" class=\"p-toolbar-group-center button-group\">\r\n <ng-container [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"\r\n [ngTemplateOutlet]=\"getTemplate('buttonBefore')\"></ng-container>\r\n <button *ngIf=\"setting.showVersionButton\" type=\"button\" pButton pRipple icon=\"pi pi-calendar\"\r\n class=\"p-button-rounded p-button-success link-or-action\" pTooltip=\"Xem l\u1ECBch s\u1EED phi\u00EAn b\u1EA3n\"\r\n tooltipPosition=\"top\" (click)=\"showListVersion(rowData)\"></button>\r\n <button *ngIf=\"!rowData.hiddenEdit\" type=\"button\" pButton pRipple [disabled]=\"disableEdit(rowData)\"\r\n pTooltip=\"{{'FORM.EDIT' | translate}}\" tooltipPosition=\"top\"\r\n class=\"p-button-rounded p-button-text p-button-info link-or-action\" icon=\"pi pi-pencil\"\r\n (click)=\"edit(rowData)\"></button>\r\n <button *ngIf=\"!rowData.hiddenDelete\" type=\"button\" pButton pRipple\r\n [disabled]=\"disableDelete(rowData)\" pTooltip=\"{{'FORM.DELETE' | translate}}\"\r\n tooltipPosition=\"top\" class=\"p-button-rounded p-button-text p-button-danger link-or-action\"\r\n icon=\"pi pi-trash\" (click)=\"delete(rowData)\"></button>\r\n <button *ngIf=\"!rowData.hiddenCopyLink\" type=\"button\" pButton pRipple\r\n [disabled]=\"disableCopyLink(rowData)\" pTooltip=\"{{'Sao ch\u00E9p li\u00EAn k\u1EBFt' | translate}}\"\r\n tooltipPosition=\"top\" class=\"p-button-rounded p-button-text p-button-info link-or-action\"\r\n icon=\"pi pi-link\" (click)=\"copyLink(rowData)\"></button>\r\n <button *ngIf=\"this.menuButtons\" type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-info p-button-rounded\" pTooltip=\"Ch\u1EE9c n\u0103ng kh\u00E1c\"\r\n tooltipPosition=\"top\" (click)=\"showContextMenu($event, rowData)\"></button>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n</ng-template>\r\n<ng-template #dynamicColBodys let-columns let-rowData=\"rowData\" let-index=\"index\" let-expanded=\"expanded\">\r\n <ng-container *ngFor=\"let col of columns; let i = index\">\r\n <ng-container\r\n *ngTemplateOutlet=\"contentTd; context: {$implicit: rowData, col: col, index: index, i: i, expanded: expanded}\">\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #contentTd let-rowData let-col=\"col\" let-index=\"index\" let-expanded=\"expanded\" let-i=\"i\">\r\n <td *ngIf=\"col && col.visible && col.field != 'function' && (!rowData.hidden || !rowData.hidden[col.field])\"\r\n [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[col.field]\"\r\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[col.field]\" [ngStyle]=\"col.extendData.style\"\r\n [class]=\"col.cellClass\" [class.first-td]=\"i == 0\">\r\n <span *ngIf=\"col.pipe\">\r\n <span class=\"p-column-title\" [pTooltip]=\"col.fullLabel\" [escape]=\"false\"\r\n tooltipPosition=\"top\">{{col.label}}</span>\r\n {{rowData['pipe__' + col.field]}}\r\n </span>\r\n <span *ngIf=\"!col.pipe\">\r\n <span class=\"p-column-title\" [pTooltip]=\"col.fullLabel\" [escape]=\"false\"\r\n tooltipPosition=\"top\">{{col.label}}</span>\r\n <span *ngIf=\"setting.showEditLink && col.showEditLink\" [pTooltip]=\"config.tooltipView\" tooltipPosition=\"top\"\r\n class=\"link-or-action\">\r\n <a href=\"javascript:;\" (click)=\"view(rowData)\" [pTooltip]=\"config.tooltipView\" tooltipPosition=\"top\">\r\n <ng-container [ngTemplateOutlet]=\"contentCell\"\r\n [ngTemplateOutletContext]=\"getContextCell(rowData, index, col, expanded, this)\">\r\n </ng-container>\r\n </a>\r\n </span>\r\n <span *ngIf=\"!setting.showEditLink || !col.showEditLink\">\r\n <ng-container [ngTemplateOutlet]=\"contentCell\"\r\n [ngTemplateOutletContext]=\"getContextCell(rowData, index, col, expanded, this)\">\r\n </ng-container>\r\n </span>\r\n </span>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n</ng-template>\r\n<ng-template #contentCell let-col=\"col\" let-rowData=\"rowData\" let-rowIndex=\"rowIndex\" let-field=\"field\"\r\n let-expanded=\"expanded\">\r\n <ng-container *ngIf=\"col.template\">\r\n <ng-container [ngTemplateOutlet]=\"col.template\"\r\n [ngTemplateOutletContext]=\"getContextCell(rowData, rowIndex, col, expanded,this)\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!col.template\">\r\n <ng-container [ngSwitch]=\"col.dataType\">\r\n <span *ngSwitchCase=\"'color'\" style=\"display:block;text-align:center;\">\r\n <div pTooltip=\"{{rowData[field]}}\" tooltipPosition=\"top\" [ngStyle]=\"{'background-color':rowData[field]}\"\r\n style=\"width:30px;height:30px;margin:0 auto;\"></div>\r\n </span>\r\n <span *ngSwitchCase=\"'icon'\" style=\"display:block;text-align:center;\">\r\n <i pTooltip=\"{{rowData[field]}}\" tooltipPosition=\"top\" style=\"text-align: center;\"\r\n [ngClass]=\"rowData[field]\"></i>\r\n </span>\r\n <span *ngSwitchCase=\"'date'\" pTooltip=\"{{rowData[field] | date:'dd/MM/yyyy'}}\" tooltipPosition=\"top\">\r\n {{_crudService.renderDate(rowData[field], col.format)}}\r\n </span>\r\n <span *ngSwitchCase=\"'datetime'\" pTooltip=\"{{rowData[field] | date:'dd/MM/yyyy HH:mm'}}\"\r\n tooltipPosition=\"top\">\r\n {{_crudService.renderDateTime(rowData[field], col.format)}}\r\n </span>\r\n <span *ngSwitchCase=\"'user'\" class=\"user\">\r\n {{rowData[field] | userFormat | async}}\r\n </span>\r\n <div *ngSwitchCase=\"'users'\" [innerHTML]=\"rowData[field] | usersFormat | async\">\r\n </div>\r\n <span *ngSwitchCase=\"'int'\">\r\n {{rowData[field]}}\r\n </span>\r\n <span *ngSwitchCase=\"'decimal'\">\r\n {{rowData[field]}}\r\n </span>\r\n <span *ngSwitchCase=\"'boolean'\">\r\n <p-checkbox class=\"boolean-data-type\" [(ngModel)]=\"rowData[field]\" binary=\"true\"\r\n [disabled]=\"col.disableCheckBox\">\r\n </p-checkbox>\r\n </span>\r\n <span *ngSwitchCase=\"'html'\">\r\n <div *ngIf=\"rowData[field]==null?'':rowData[field]\" [innerHTML]=\"rowData[field] | safeHtml\"></div>\r\n </span>\r\n <span *ngSwitchCase=\"'metadataStatus'\">\r\n <span *ngIf=\"rowData['rejectReason']\" class=\"label-danger\" [pTooltip]=\"rowData['rejectReason']\"\r\n tooltipStyleClass=\"unset-width\" [escape]=\"false\" tooltipPosition=\"top\">T\u1EEB ch\u1ED1i</span>\r\n <span *ngIf=\"rowData[field] == '0' && !rowData['rejectReason']\" class=\"label-secondary\">Ch\u01B0a\r\n duy\u1EC7t</span>\r\n <span *ngIf=\"rowData[field] == '1' && !rowData['rejectReason']\" class=\"label-warning\">Ch\u1EDD duy\u1EC7t</span>\r\n <span *ngIf=\"rowData[field] == '2'\" class=\"label-primary\">\u0110\u00E3 duy\u1EC7t</span>\r\n </span>\r\n <ng-container *ngSwitchCase=\"'string'\">\r\n <ng-container *ngTemplateOutlet=\"contentCellString; context: {$implicit: rowData, field: col.field}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"null\">\r\n <ng-container *ngTemplateOutlet=\"contentCellString; context: {$implicit: rowData, field: col.field}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ng-container [ngTemplateOutlet]=\"getComponentByType(col.dataType)\"\r\n [ngTemplateOutletContext]=\"getContextCell(rowData, rowIndex, col, expanded, this)\">\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #contentCellString let-rowData let-field=\"field\">\r\n <span>\r\n <!-- __sv: Short Value -->\r\n <ng-container *ngIf=\"rowData[field + '__sv']\">\r\n <ng-container *ngIf=\"!rowData[field + '__showFull']\">\r\n {{rowData[field + '__sv']}}\r\n <span class=\"toggle-showfull\" (click)=\"toggleShowFull(rowData, field)\" pTooltip=\"B\u1EA5m \u0111\u1EC3 xem th\u00EAm\"\r\n tooltipPosition=\"top\">[...]</span>\r\n </ng-container>\r\n <ng-container *ngIf=\"rowData[field + '__showFull']\">\r\n {{rowData[field]}}\r\n <span class=\"toggle-showfull\" (click)=\"toggleShowFull(rowData, field)\">Thu g\u1ECDn</span>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!rowData[field + '__sv']\">\r\n {{rowData[field]}}\r\n </ng-container>\r\n </span>\r\n</ng-template>\r\n<ng-template #iconToggleRowGroup let-rowData=\"rowData\" let-expanded=\"expanded\">\r\n <a href=\"javascript:;\" (click)=\"handleToggleRow(rowData, $event)\">\r\n <i style=\"margin-right:5px\" [ngClass]=\"expanded ? 'fas fa-fw fa-caret-down' : 'fas fa-fw fa-caret-right'\"></i>\r\n </a>\r\n</ng-template>\r\n<ng-template #iconToggleRowData let-rowData=\"rowData\" let-expanded=\"expanded\">\r\n <button type=\"button\" pButton pRipple class=\"link-or-action p-button-text p-button-rounded p-button-plain\"\r\n [icon]=\"expanded ? 'pi pi-chevron-down' : 'pi pi-chevron-right'\"\r\n (click)=\"handleToggleRow(rowData, $event)\"></button>\r\n</ng-template>\r\n<ng-template #_contentRowGroup let-rowData=\"rowData\" let-groupCol=\"groupCol\" let-groupField=\"_groupField\">\r\n <ng-container [ngTemplateOutlet]=\"contentCell\"\r\n [ngTemplateOutletContext]=\"{rowData: rowData, col: groupCol, field: _groupField}\">\r\n </ng-container>\r\n <span> ({{rowGroupMetadata[rowData[_groupField]].size}})</span>\r\n</ng-template>\r\n<ng-template #entityWorkflowStatus let-rowData=\"rowData\">\r\n <div class=\"container-text-workflow\">\r\n <span class=\"content\">{{rowData.statusString ? rowData.statusString : rowData.strcurrentStateCode}}</span>\r\n <button *ngIf=\"!rowData.hiddenWorkflowAction\" type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-rounded\" pTooltip=\"H\u00E0nh \u0111\u1ED9ng\" tooltipPosition=\"top\"\r\n (click)=\"showActionWorkflow($event, rowData)\"></button>\r\n </div>\r\n</ng-template>\r\n<ng-template #trangThaiV5 let-rowData=\"rowData\">\r\n <div class=\"container-text-workflow\">\r\n <button *ngIf=\"!rowData.__workflowCode\" pButton class=\"p-button-text link-or-action\" label=\"B\u1EAFt \u0111\u1EA7u\"\r\n style=\"border: 1px solid #7ca9cd;\" pTooltip=\"B\u1EAFt \u0111\u1EA7u ch\u1EA1y quy tr\u00ECnh\" tooltipPosition=\"top\"\r\n (click)=\"showFormStartWorkflow(rowData)\"></button>\r\n <ng-container *ngIf=\"rowData.__workflowCode\">\r\n <span class=\"content\">{{rowData.__textTrangThai}}</span>\r\n <button *ngIf=\"!rowData.hiddenWorkflowAction\" type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-rounded\" pTooltip=\"H\u00E0nh \u0111\u1ED9ng\" tooltipPosition=\"top\"\r\n [disabled]=\"showingActionWorkflow\" (click)=\"showActionWorkflowNew($event, rowData)\"></button>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n<ng-template #viewHistory let-rowData=\"rowData\">\r\n <button pButton icon=\"pi pi-calendar\" class=\"p-button-text p-button-rounded link-or-action\" pTooltip=\"Xem l\u1ECBch s\u1EED\"\r\n tooltipPosition=\"top\" (click)=\"viewHistoryWorkflowNew(rowData)\"></button>\r\n</ng-template>\r\n<ng-template #workflowCoreStatus let-rowData=\"rowData\">\r\n <div class=\"container-text-workflow\">\r\n <a class=\"content\" (click)=\"goToTask($event)\" href=\"javascript:;\">{{rowData.strworkflowCoreStatus}}</a>\r\n </div>\r\n</ng-template>\r\n<ng-template #containerSticky>\r\n <span class=\"fix-sticky top\"></span>\r\n <span class=\"fix-sticky right\"></span>\r\n <!-- <span class=\"fix-sticky bottom\"></span> -->\r\n <span class=\"fix-sticky left\"></span>\r\n</ng-template>\r\n<ng-template #sortIcon let-field=\"field\">\r\n <i class=\"p-sortable-column-icon pi\" style=\"font-size: 0.8em;\"\r\n [ngClass]=\"{'pi-sort-amount-up-alt': field == _sortField && _sortDir === 1, 'pi-sort-amount-down': field == _sortField && _sortDir === -1, 'pi-sort-alt': field != _sortField || _sortDir === 0}\"></i>\r\n</ng-template>\r\n<ng-template #filterDropdown let-col=\"col\">\r\n <div #filterBox style=\"width: 100%; border-radius: 4px;\">\r\n <dropdown *ngIf=\"col && filterSchema.dropdown[col.field]\" [control]=\"filterSchema.dropdown[col.field]\"\r\n [dataSource]=\"filterSchema.dropdown[col.field].dataSource\" [(value)]=\"filterData[col.field]\"\r\n (onHideSmartEvent)=\"onSearch()\" (onShow)=\"onShowFilterDropdownPanel($event)\"\r\n (onHide)=\"onHideFilterDropdownPanel($event)\" (mousedown)=\"initFilterBoxFocus(filterBox)\"></dropdown>\r\n </div>\r\n</ng-template>\r\n<ng-template #filterText let-col=\"col\">\r\n <div #filterBox class=\"text-filter filter-box\" tabindex=\"-1\" (mousedown)=\"initFilterBoxFocus(filterBox)\">\r\n <div tabindex=\"-1\">\r\n <input pInputText type=\"text\" class=\"input-search\" [placeholder]=\"col.label\"\r\n [(ngModel)]=\"filterData[col.field]\" (change)=\"onSearch()\"\r\n (keyup.esc)=\"onClearSearch(filterBox, col.field)\">\r\n </div>\r\n <span [ngClass]=\"{'action-clear': true, 'dirty': filterData[col.field] != null && filterData[col.field] !== ''}\"\r\n [pTooltip]=\"'B\u1ECF filter'\" tooltipPosition=\"top\" (mousedown)=\"onClearSearch(filterBox, col.field)\"\r\n tabindex=\"-1\"><i class=\"pi pi-filter-slash\"></i></span>\r\n <after-view-checked style=\"display: none;\" (loaded)=\"initFilterBoxFocus(filterBox)\">\r\n </after-view-checked>\r\n </div>\r\n</ng-template>\r\n<ng-template #filterNumber let-col=\"col\">\r\n <div #filterBox class=\"number-picker-range filter-box\" tabindex=\"-1\" (mousedown)=\"initFilterBoxFocus(filterBox)\">\r\n <div tabindex=\"-1\">\r\n <tn-number-picker-range #numberRange [maskType]=\"col.dataType\" [(ngModel)]=\"filterData[col.field]\"\r\n [min]=\"col.min\" [max]=\"col.max\" (change)=\"onSearch()\">\r\n </tn-number-picker-range>\r\n </div>\r\n <span\r\n [ngClass]=\"{'action-clear': true, 'dirty': filterData[col.field] && ((filterData[col.field][0] != null && filterData[col.field][0] !== '') || (filterData[col.field][1] != null && filterData[col.field][1] !== ''))}\"\r\n [pTooltip]=\"'B\u1ECF filter'\" tooltipPosition=\"top\" (mousedown)=\"onClearNumberSearch(filterBox, numberRange)\"\r\n tabindex=\"-1\">\r\n <i class=\"pi pi-filter-slash\"></i></span>\r\n <after-view-checked style=\"display: none;\" (loaded)=\"initFilterBoxFocus(filterBox)\">\r\n </after-view-checked>\r\n </div>\r\n</ng-template>\r\n<ng-template #filterDate let-col=\"col\">\r\n <div #filterBox class=\"date-picker-range filter-box\" tabindex=\"-1\" (mousedown)=\"initFilterBoxFocus(filterBox)\">\r\n <div tabindex=\"-1\">\r\n <tn-datetime-picker-range #dateRange [control]=\"filterSchema.dateRange\"\r\n (onChanged)=\"onChangeDateTime($event, col.field)\">\r\n </tn-datetime-picker-range>\r\n </div>\r\n <span\r\n [ngClass]=\"{'action-clear': true, 'dirty': filterData[col.field] && ((filterData[col.field][0] != null && filterData[col.field][0] !== '') || (filterData[col.field][1] != null && filterData[col.field][1] !== ''))}\"\r\n [pTooltip]=\"'B\u1ECF filter'\" tooltipPosition=\"top\"\r\n (mousedown)=\"onClearDateSearch(filterBox, dateRange, col.field)\" tabindex=\"-1\"><i\r\n class=\"pi pi-filter-slash\"></i></span>\r\n <after-view-checked style=\"display: none;\" (loaded)=\"initFilterBoxFocus(filterBox)\">\r\n </after-view-checked>\r\n </div>\r\n</ng-template>\r\n<ng-template #filterBoolean let-col=\"col\">\r\n <div class=\"filter-boolean-box\">\r\n <p-selectButton\r\n [options]=\"[{value: true, label: 'C\u00F3', icon: 'pi pi-check'}, {value: false, label: 'Kh\u00F4ng', icon: 'pi pi-times'}]\"\r\n [multiple]=\"true\" [(ngModel)]=\"filterData[col.field]\" (onChange)=\"onChangeBoolean($event, col.field)\">\r\n <ng-template let-item>\r\n <i style=\"padding: 3px 0;\" [class]=\"item.icon\"></i>\r\n </ng-template>\r\n </p-selectButton>\r\n </div>\r\n</ng-template>",
|
|
21622
|
+
template: "<div #container class=\"custom-card card card-w-title flex-container-fit-child\" [attr.height-type]=\"setting.heightType\"\r\n [ngStyle]=\"_style\">\r\n <div class=\"ui-helper-clearfix crud-list-header-area\">\r\n <div *ngIf=\"searchCustom\" class=\"p-grid ui-fluid custom-p-col custom-search-area\">\r\n <div class=\"p-col-12 main-container-search\">\r\n <div class=\"p-grid main-container-search-inner\">\r\n <ng-container>\r\n <ng-container *ngTemplateOutlet=\"searchCustom; context: {$implicit: this}\"></ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!setting.hiddenHeader\" class=\"p-grid ui-fluid custom-p-col page-title-area\">\r\n <div *ngIf=\"!setting.hiddenPageTitle\" class=\"main-title\">\r\n <h1 *ngIf=\"!hasTemplate('customTitle')\">\r\n {{setting.title != null ? setting.title : 'Danh s\u00E1ch ' + setting.objectName}}\r\n </h1>\r\n\r\n <ng-container *ngIf=\"hasTemplate('customTitle')\" [ngTemplateOutlet]=\"getTemplate('customTitle')\"\r\n [ngTemplateOutletContext]=\"{crudList: this}\">\r\n </ng-container>\r\n </div>\r\n\r\n <div *ngIf=\"!setting.hiddenPageSetting\" class=\"paginator-table\">\r\n <paging-next-back-only [model]=\"model\" [setting]=\"setting\" (onOldest)=\"onOldest($event)\"\r\n (onNext)=\"onNext($event)\" (onPrev)=\"onPrev($event)\" (onLatest)=\"onLatest($event)\"\r\n (onChangeLimitPage)=\"savePageSize()\">\r\n </paging-next-back-only>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"fit-content crud-list-body-area\">\r\n <div class=\"crud-list-body-area-inner\" style=\"overflow: unset;\">\r\n <div class=\"flex-container-fit-child\" style=\"overflow: unset;\">\r\n <div *ngIf=\"!setting.hiddenToolbar\" class=\"p-grid crudListToolbar\">\r\n <ng-container>\r\n <div *ngIf=\"!setting.hiddenButtons && hasTemplate('toolbar')\"\r\n [ngClass]=\"setting.hiddenAdvanceSearch ? 'p-md-12 p-lg-12' : 'p-md-7 p-lg-8'\"\r\n class=\"p-col-12 button-group function-topbar custom-toolbar\">\r\n <ng-container\r\n [ngTemplateOutletContext]=\"{selectedItems: model.selectedItems, crudList: this}\"\r\n [ngTemplateOutlet]=\"getTemplate('toolbar')\"></ng-container>\r\n </div>\r\n <div *ngIf=\"!setting.hiddenButtons && !hasTemplate('toolbar')\"\r\n [ngClass]=\"setting.hiddenAdvanceSearch ? 'p-md-12 p-lg-12' : 'p-md-7 p-lg-8'\"\r\n class=\"p-col-12 button-group function-topbar\">\r\n <button *ngIf=\"!hiddenAdd\" type=\"button\" pButton pRipple label=\"Th\u00EAm m\u1EDBi\" icon=\"pi pi-plus\"\r\n class=\"p-button-text\" [disabled]=\"!model.baseReady\" (click)=\"add()\"></button>\r\n <button *ngIf=\"setting.showExportSelectedItems && model.selectedItems.length > 0\"\r\n type=\"button\" pButton pRipple\r\n label=\"Xu\u1EA5t c\u00E1c m\u1EE5c \u0111\u00E3 ch\u1ECDn ({{model.selectedItems.length}})\" icon=\"fas fa-file-excel\"\r\n class=\"p-button-text p-button-success\" (click)=\"xuatCacMucDaChon()\"></button>\r\n <button *ngIf=\"!hiddenDelete && model.selectedItems.length > 0 && !disableMultipleDelete()\"\r\n type=\"button\" pButton pRipple\r\n label=\"{{ 'X\u00F3a' | translate }} ({{model.selectedItems.length}})\" icon=\"pi pi-trash\"\r\n class=\"p-button-text p-button-danger\" (click)=\"deleteMutiple()\"></button>\r\n <button\r\n *ngIf=\"!hiddenCopyLink && model.selectedItems.length > 0 && !disableMultipleCopyLink()\"\r\n label=\"Sao ch\u00E9p li\u00EAn k\u1EBFt\" type=\"button\" pButton pRipple\r\n pTooltip=\"{{'Sao ch\u00E9p li\u00EAn k\u1EBFt' | translate}}\" tooltipPosition=\"top\"\r\n class=\"p-button-text p-button-info link-or-action\" icon=\"pi pi-link\"\r\n (click)=\"copyLinkMultiple()\"></button>\r\n <button *ngIf=\"!disableShare && model.selectedItems.length > 0\" label=\"Chia s\u1EBB li\u00EAn k\u1EBFt\"\r\n type=\"button\" pButton pRipple [pTooltip]=\"'Chia s\u1EBB li\u00EAn k\u1EBFt' | translate\"\r\n tooltipPosition=\"top\" class=\"p-button-text p-button-info link-or-action\"\r\n icon=\"pi pi-link\" (click)=\"createShareLinkMultiple()\"></button>\r\n <ng-container [ngTemplateOutlet]=\"getTemplate('buttonAfterToolbar')\"\r\n [ngTemplateOutletContext]=\"{crudList: this}\"></ng-container>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"!setting.hiddenAdvanceSearch\" class=\"p-col-12 advance-search-container\"\r\n [ngClass]=\"setting.hiddenButtons ? 'p-md-12 p-lg-12' : 'p-md-5 p-lg-4'\">\r\n <advance-search #advanceSearch [parentSetting]=\"setting\" [searchInfo]=\"searchInfo\"\r\n [loading]=\"model.loading\" (onSearch)=\"handleSearchAdvs($event)\"\r\n (onInit)=\"handleInitAdvanceSearch($event)\">\r\n </advance-search>\r\n </div>\r\n </div>\r\n <div *ngIf=\"hasTemplate('topGrid')\" class=\"extend-content-top-grid\">\r\n <ng-container [ngTemplateOutletContext]=\"{selectedItems: model.selectedItems, crudList: this}\"\r\n [ngTemplateOutlet]=\"getTemplate('topGrid')\"></ng-container>\r\n </div>\r\n <div class=\"container-table fit-content\" [class.--table-responsive]=\"responsive\">\r\n <div class=\"container-table-inner\">\r\n <ng-container *ngIf=\"!_groupField\">\r\n <tn-custom-scrollbar *ngIf=\"showScrollBar\" #scrollbar [config]=\"configScrollBar\"\r\n [showScrollHorizontal]=\"showScrollHorizontal\">\r\n <ng-container *ngTemplateOutlet=\"tableGetGroupFieldFalse\">\r\n </ng-container>\r\n <ng-container *ngIf=\"hasTemplate('afterCrudList')\">\r\n <ng-container [ngTemplateOutlet]=\"hasTemplate('afterCrudList')\"></ng-container>\r\n </ng-container>\r\n </tn-custom-scrollbar>\r\n <div *ngIf=\"!showScrollBar\">\r\n <ng-container *ngTemplateOutlet=\"tableGetGroupFieldFalse\">\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"_groupField\">\r\n <tn-custom-scrollbar *ngIf=\"showScrollBar\" #scrollbar [config]=\"configScrollBar\"\r\n [showScrollHorizontal]=\"showScrollHorizontal\">\r\n <ng-container *ngTemplateOutlet=\"tableGetGroupFieldTrue\">\r\n </ng-container>\r\n <ng-container *ngIf=\"hasTemplate('afterCrudList')\">\r\n <ng-container [ngTemplateOutlet]=\"getTemplate('afterCrudList')\"></ng-container>\r\n </ng-container>\r\n </tn-custom-scrollbar>\r\n <div *ngIf=\"!showScrollBar\">\r\n <ng-container *ngTemplateOutlet=\"tableGetGroupFieldTrue\">\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"table-border-line --top\"></div>\r\n <div class=\"table-border-line --right\"></div>\r\n <div class=\"table-border-line --bottom\"></div>\r\n <div class=\"table-border-line --left\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<after-view-checked (loaded)=\"handleReady()\"></after-view-checked>\r\n<settings *ngIf=\"_showSettings && !setting.hiddenSetting\" [entityMetadataService]=\"entityMetadataService\"\r\n [parentContext]=\"context\" [parentSetting]=\"setting\" [parentModel]=\"model\" (onSave)=\"onSaveSettings($event)\"\r\n (onCancel)=\"_showSettings = false\">\r\n</settings>\r\n<settings-row *ngIf=\"_showSettingsRowColor && !setting.hiddenSetting\" [entityMetadataService]=\"entityMetadataService\"\r\n [parentContext]=\"context\" [parentSetting]=\"setting\" [parentModel]=\"model\" (onSave)=\"onSaveColorSettings($event)\"\r\n (onCancel)=\"_showSettingsRowColor = false\">\r\n</settings-row>\r\n<workflow-setting-dialog *ngIf=\"_showSettingsWorkflow && !setting.hiddenSettingWorkflow\" [parentSetting]=\"setting\"\r\n [parentContext]=\"context\" [parentModel]=\"model\" (onSaved)=\"onSaveWorkflowSettings($event)\"\r\n (onRemoved)=\"onRemoveWorkflowSettings($event)\" (onCancel)=\"_showSettingsWorkflow = false\"></workflow-setting-dialog>\r\n<tn-dialog *ngIf=\"workflowSettingModel.showEditForm\" [header]=\"'C\u1EA5u h\u00ECnh quy tr\u00ECnh nghi\u1EC7p v\u1EE5' | translate\"\r\n [popupSize]=\"workflowSettingModel.popupSize\" (onHide)=\"workflowSettingModel.showEditForm = false\">\r\n <workflow-setting-new #formBase [parentSetting]=\"setting\" (onSaved)=\"onSaveWorkflowSettingsNew($event)\"\r\n (onCancel)=\"workflowSettingModel.showEditForm = false\"></workflow-setting-new>\r\n</tn-dialog>\r\n<entity-permission *ngIf=\"_showSettingsPermission && !setting.hiddenSettingPermission\" [parentSetting]=\"setting\"\r\n [parentContext]=\"context\" [parentModel]=\"model\" [searchInfo]=\"searchInfo\"\r\n (onCancel)=\"_showSettingsPermission = false\">\r\n</entity-permission>\r\n<p-contextMenu #contextMenu [appendTo]=\"'body'\" [model]=\"buttonContexts\">\r\n</p-contextMenu>\r\n<tn-dialog *ngIf=\"showFormWorkflow\" #dialog [header]=\"headerWorkflow | translate\" [popupSize]=\"popupSizeWorkflow\"\r\n [scrollBarStyleClass]=\"'fit-content'\" (onHide)=\"showFormWorkflow = false\">\r\n <div style=\"height: 100%\">\r\n <simple-workflow-form #formBase [baseService]=\"setting.baseService\" [item]=\"currentItem\"\r\n [action]=\"actionWorkflow\" (onInvalidWorkflow)=\"handleInvalidWF($event)\" (onSaved)=\"handleProcessedWorflow()\"\r\n (onCancel)=\"showFormWorkflow = false\">\r\n </simple-workflow-form>\r\n </div>\r\n</tn-dialog>\r\n<tn-dialog *ngIf=\"processWorkflowModel.showEditForm\" #dialog [header]=\"processWorkflowModel.header | translate\"\r\n [popupSize]=\"processWorkflowModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\"\r\n (onHide)=\"processWorkflowModel.showEditForm = false\">\r\n <div style=\"height: 100%\">\r\n <process-workflow-form #formBase [businessSetting]=\"setting\" [item]=\"currentItem\"\r\n [workflow]=\"processWorkflowModel.data.workflow\" [action]=\"processWorkflowModel.data.action\"\r\n (onSaved)=\"handleProcessedWorkflowBase()\" (onCancel)=\"processWorkflowModel.showEditForm = false\">\r\n </process-workflow-form>\r\n </div>\r\n</tn-dialog>\r\n<tn-dialog *ngIf=\"choYKienModel.showEditForm\" #dialog [header]=\"choYKienModel.header | translate\"\r\n [popupSize]=\"choYKienModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\"\r\n (onHide)=\"choYKienModel.showEditForm = false\">\r\n <div style=\"height: 100%\">\r\n <cho-y-kien-form #formBase [bussinessSetting]=\"setting\" [rowItem]=\"choYKienModel.data.rowData\"\r\n (onSaved)=\"choYKienModel.showEditForm = false\" (onCancel)=\"choYKienModel.showEditForm = false\">\r\n </cho-y-kien-form>\r\n </div>\r\n</tn-dialog>\r\n<tn-dialog *ngIf=\"workflowHistoryModel.showEditForm\" #dialog [header]=\"workflowHistoryModel.header | translate\"\r\n [popupSize]=\"workflowHistoryModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\"\r\n (onHide)=\"workflowHistoryModel.showEditForm = false\">\r\n <div style=\"height: 100%\">\r\n <workflow-history-new #formBase [businessSetting]=\"setting\" [tableName]=\"workflowHistoryModel.data.tableName\"\r\n [item]=\"currentItem\" [workflowSetting]=\"workflowHistoryModel.data.workflowSetting\"\r\n (onCancel)=\"workflowHistoryModel.showEditForm = false\">\r\n </workflow-history-new>\r\n </div>\r\n</tn-dialog>\r\n<tn-dialog *ngIf=\"detailTaskModel.showEditForm\" #dialog [header]=\"detailTaskModel.header | translate\"\r\n [popupSize]=\"detailTaskModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\"\r\n (onHide)=\"detailTaskModel.showEditForm = false\">\r\n <base-congviec-form #formBase [model]=\"detailTaskModel.data.taskFormModel\" [forceOnlyView]=\"true\">\r\n </base-congviec-form>\r\n</tn-dialog>\r\n\r\n<!-- <tn-dialog *ngIf=\"showDetailForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"setting.popupHeader | translate\" [popupSize]=\"setting.popupSize\" (onHide)=\"showDetailForm = false\">\r\n <base-congviec-form #formBase [parentModel]=\"model\" [parentSetting]=\"setting\" [parentContext]=\"context\"\r\n [model]=\"formModel\" [crudList]=\"crudList\" (onSaved)=\"showDetailForm = false;crudList.reload()\"\r\n (onCancel)=\"_handleCancel($event)\" (onAfterSaved)=\"onAfterSaved($event)\">\r\n </base-congviec-form>\r\n</tn-dialog> -->\r\n\r\n<tn-dialog *ngIf=\"permissionSharingModel.showEditForm\" #dialog [header]=\"permissionSharingModel.header | translate\"\r\n [popupSize]=\"permissionSharingModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\"\r\n (onHide)=\"permissionSharingModel.showEditForm = false\">\r\n <div style=\"height: 100%\">\r\n <permission-sharing #formBase [item]=\"rowDataCurrent\" [baseService]=\"setting.baseService\"\r\n (onCancel)=\"permissionSharingModel.showEditForm = false\">\r\n </permission-sharing>\r\n </div>\r\n</tn-dialog>\r\n<workflow-history-dialog *ngIf=\"showHistoryWorkflow\" [baseService]=\"setting.baseService\" [item]=\"currentItem\"\r\n [workflowSetting]=\"setting.workflowSetting\" (onHide)=\"handleHideHistoryWorkflow()\">\r\n</workflow-history-dialog>\r\n<tn-dialog *ngIf=\"startWorkflowModel.showEditForm\" #dialog [header]=\"startWorkflowModel.header | translate\"\r\n [popupSize]=\"startWorkflowModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\"\r\n (onHide)=\"startWorkflowModel.showEditForm = false\">\r\n <div style=\"height: 100%\">\r\n <start-workflow #formBase [workflows]=\"startWorkflowModel.data.workflows\"\r\n [defaultWorkflow]=\"startWorkflowModel.data.defaultWorkflow\"\r\n (onCancel)=\"startWorkflowModel.showEditForm = false\" (onSaved)=\"handleStartWorkflowFromDialog($event)\">\r\n </start-workflow>\r\n </div>\r\n</tn-dialog>\r\n<tn-dialog *ngIf=\"congViecModel.showEditForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"congViecModel.header | translate\" [popupSize]=\"congViecModel.popupSize\"\r\n (onHide)=\"congViecModel.showEditForm = false\">\r\n <base-congviec-form #formBase [parentSetting]=\"congViecModel.data.congViecSetting\"\r\n [model]=\"congViecModel.data.model\" (onSaved)=\"congViecModel.showEditForm = false;getData()\"\r\n (onCancel)=\"congViecModel.showEditForm = false\">\r\n </base-congviec-form>\r\n</tn-dialog>\r\n<tn-dialog *ngIf=\"shareLinkModel.showEditForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"shareLinkModel.header | translate\" [popupSize]=\"shareLinkModel.popupSize\" [useDefaultScrollBar]=\"true\"\r\n (onHide)=\"shareLinkModel.showEditForm = false\">\r\n <share-link-by-permission #formBase [setting]=\"setting\" [lstItem]=\"shareLinkModel.data.lstItem\"\r\n (onCancel)=\"congViecModel.showEditForm = false\">\r\n </share-link-by-permission>\r\n</tn-dialog>\r\n<ng-template #tableGetGroupFieldFalse>\r\n <p-table #table [dataKey]=\"'id'\" [scrollable]=\"pTableScrollable\" [scrollHeight]=\"pTableScrollHeight\"\r\n [columns]=\"setting.cols\" [paginator]=\"false\" [value]=\"_dataSource\" (onSort)=\"onSort($event, table)\"\r\n [class]=\"_tableClass\" [responsive]=\"responsive\" [lazy]=\"lazy\" [loading]=\"model.loading\"\r\n [(selection)]=\"model.selectedItems\" (onRowReorder)=\"handleRowOrdered($event)\">\r\n <ng-template *ngIf=\"header\" pTemplate=\"header\" let-columns>\r\n <ng-container\r\n *ngTemplateOutlet=\"header, context: {$implicit: columns, crudList: this, rowHeaderFilter: rowHeaderFilter, contentTh: contentTh, containerSticky: containerSticky, funcCheckAll: handleCheckAll}\">\r\n </ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"!header\" pTemplate=\"header\" let-columns>\r\n <ng-container *ngTemplateOutlet=\"trHeader; context: {$implicit: columns, funcCheckAll: handleCheckAll}\">\r\n </ng-container>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-columns=\"columns\" let-index=\"rowIndex\" let-expanded=\"expanded\">\r\n <ng-container\r\n *ngTemplateOutlet=\"trBody; context: {$implicit: rowData, columns: columns, index: index, expanded: expanded, eventSelectRow: handleSelectRow, eventChecked: handleCheckRowData}\">\r\n </ng-container>\r\n <after-view-checked *ngIf=\"index == _dataSource.length - 1\" style=\"display: none;\" [renderKey]=\"_dataSource\"\r\n (loaded)=\"handleTableRendered()\">\r\n </after-view-checked>\r\n </ng-template>\r\n <ng-template *ngIf=\"rowExpansion\" pTemplate=\"rowexpansion\" let-rowData let-expanded=\"expanded\">\r\n <ng-container\r\n *ngTemplateOutlet=\"rowExpansion; context: {rowData: rowData, expanded: expanded, getColSpanGroup: getColSpanGroup}\">\r\n </ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"summary\" pTemplate=\"summary\">\r\n <ng-container *ngTemplateOutlet=\"summary\"></ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"footer\" pTemplate=\"footer\" let-columns>\r\n <ng-container *ngTemplateOutlet=\"footer; context: {$implicit: columns}\"></ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"colgroup\" pTemplate=\"colgroup\" let-columns>\r\n <ng-container *ngTemplateOutlet=\"colgroup; context: {$implicit: columns}\"></ng-container>\r\n </ng-template>\r\n </p-table>\r\n</ng-template>\r\n<ng-template #tableGetGroupFieldTrue>\r\n <p-table #tableGroup [scrollable]=\"pTableScrollable\" [scrollHeight]=\"pTableScrollHeight\" [columns]=\"setting.cols\"\r\n [paginator]=\"false\" [value]=\"_dataSource\" [metaKeySelection]=\"false\" (onSort)=\"onSort($event, tableGroup)\"\r\n [class]=\"_tableClass\" [customSort]=\"true\" [responsive]=\"responsive\" [lazy]=\"true\" [loading]=\"model.loading\"\r\n [(selection)]=\"model.selectedItems\" [expandedRowKeys]=\"model.expandedRowKeys\" [dataKey]=\"_groupField\">\r\n <ng-template *ngIf=\"header\" pTemplate=\"header\" let-columns>\r\n <ng-container\r\n *ngTemplateOutlet=\"header, context: {$implicit: columns, crudList: this, rowHeaderFilter: rowHeaderFilter, contentTh: contentTh, containerSticky: containerSticky, funcCheckAll: handleCheckAll_Group}\">\r\n </ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"!header\" pTemplate=\"header\" let-columns>\r\n <ng-container\r\n *ngTemplateOutlet=\"trHeader; context: {$implicit: columns, funcCheckAll: handleCheckAll_Group}\">\r\n </ng-container>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-rowIndex=\"rowIndex\" let-expanded=\"expanded\" let-columns=\"columns\">\r\n <tr *ngIf=\"rowGroupMetadata[rowData[_groupField]] && rowGroupMetadata[rowData[_groupField]].index == rowIndex\"\r\n class=\"p-widget-header group-row\" style=\"border: 0px; border-bottom: 1px solid #eee\">\r\n <td *ngIf=\"!setting.hiddenCheckbox\" class=\"center chkbox\" [class.sticky]=\"setting.stickyColumn\">\r\n <p-checkbox [(ngModel)]=\"rowGroupChecked[rowData[_groupField]]\" binary=\"true\"\r\n (onChange)=\"handleCheckRowGroup(rowData)\">\r\n </p-checkbox>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n <ng-container *ngIf=\"!rowGroup\">\r\n <td [colSpan]=\"getColSpanGroup()\" [class]=\"_classRowGroup\">\r\n <div class=\"container-row-group\">\r\n <a href=\"javascript:;\" [pRowToggler]=\"rowData\" class=\"container-row-group-toggle\"\r\n [class.sticky]=\"setting.stickyColumn\">\r\n <i style=\"margin-right:5px\"\r\n [ngClass]=\"expanded ? 'fas fa-fw fa-caret-down' : 'fas fa-fw fa-caret-right'\"></i>\r\n <span class=\"content-row-group\">\r\n <ng-container *ngIf=\"!contentRowGroup\">\r\n <ng-container [ngTemplateOutlet]=\"_contentRowGroup\"\r\n [ngTemplateOutletContext]=\"getContextRowGroup(rowData)\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"contentRowGroup\">\r\n <ng-container [ngTemplateOutlet]=\"contentRowGroup\"\r\n [ngTemplateOutletContext]=\"getContextRowGroup(rowData)\">\r\n </ng-container>\r\n </ng-container>\r\n </span>\r\n </a>\r\n </div>\r\n </td>\r\n </ng-container>\r\n <ng-container *ngIf=\"rowGroup\">\r\n <ng-container [ngTemplateOutlet]=\"rowGroup\"\r\n [ngTemplateOutletContext]=\"getContextRowGroupRoot(rowData, expanded)\">\r\n </ng-container>\r\n </ng-container>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"rowexpansion\" let-columns=\"columns\" let-rowData let-index=\"rowIndex\">\r\n <ng-container\r\n *ngTemplateOutlet=\"trBody; context: {$implicit: rowData, columns: columns, index: index, expanded: false, eventSelectRow: handleSelectRowGroup, eventChecked: handleCheckRowData_Group}\">\r\n </ng-container>\r\n <after-view-checked *ngIf=\"index == _dataSource.length - 1\" style=\"display: none;\" [renderKey]=\"_dataSource\"\r\n (loaded)=\"handleTableRendered()\">\r\n </after-view-checked>\r\n </ng-template>\r\n <ng-template *ngIf=\"summary\" pTemplate=\"summary\">\r\n <ng-container *ngTemplateOutlet=\"summary\"></ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"footer\" pTemplate=\"footer\" let-columns>\r\n <ng-container *ngTemplateOutlet=\"footer; context: {$implicit: columns}\"></ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"colgroup\" pTemplate=\"colgroup\" let-columns>\r\n <ng-container *ngTemplateOutlet=\"colgroup; context: {$implicit: columns}\"></ng-container>\r\n </ng-template>\r\n </p-table>\r\n <after-view-checked></after-view-checked>\r\n</ng-template>\r\n<ng-template #trHeader let-columns let-funcCheckAll=\"funcCheckAll\">\r\n <tr class=\"title-row\">\r\n <ng-container *ngIf=\"!setting.hiddenCheckbox\">\r\n <th [style.width]=\"widthCheckbox\" class=\"chkbox link-or-action cell-checkbox\"\r\n [class.sticky]=\"setting.stickyColumn\">\r\n <button *ngIf=\"!hasTemplate('headerCheckbox')\" type=\"button\" pButton pRipple icon=\"pi pi-refresh\"\r\n class=\"p-button-rounded p-button-text btnReload\" pTooltip=\"L\u00E0m m\u1EDBi d\u1EEF li\u1EC7u\" tooltipPosition=\"top\"\r\n [disabled]=\"model.loading\" (click)=\"reload()\"></button>\r\n <ng-container *ngIf=\"hasTemplate('headerCheckbox')\">\r\n <ng-container [ngTemplateOutletContext]=\"{crudList: this}\"\r\n [ngTemplateOutlet]=\"getTemplate('headerCheckbox')\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n </ng-container>\r\n <th *ngIf=\"!setting.hiddenOrderColumn\" [style.width]=\"widthOrderColumn\" class=\"stt nopad center\"\r\n [class.sticky]=\"setting.stickyColumn\">\r\n {{ 'TT' |translate}}\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <th *ngIf=\"rowExpansion\" class=\"nopad row-expansion-toggle center\" style=\"width: 2.5rem\"\r\n [class.sticky]=\"setting.stickyColumn\">\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <ng-container *ngFor=\"let col of columns; let i = index\">\r\n <th *ngIf=\"col && col.visible && col.field!='function'\" [ngStyle]=\"col.extendData.headerStyle\"\r\n [pTooltip]=\"col.fullLabel\" tooltipStyleClass=\"unset-width\" [class]=\"col.extendData.headerClass\"\r\n [class.first-th]=\"i==0\" [escape]=\"false\" tooltipPosition=\"top\" [tnSortableColumn]=\"col.field\">\r\n <ng-container *ngTemplateOutlet=\"contentTh; context: {$implicit: col}\"></ng-container>\r\n <ng-container *ngIf=\"col.sort || col.sortClient\">\r\n <ng-container *ngTemplateOutlet=\"sortIcon; context: {field: col.field}\"></ng-container>\r\n </ng-container>\r\n </th>\r\n </ng-container>\r\n <th *ngIf=\"enableReorderRow\" style=\"width: 30px\">\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <ng-container *ngTemplateOutlet=\"colFunctionHeader\"></ng-container>\r\n </tr>\r\n <ng-container *ngTemplateOutlet=\"rowHeaderFilter; context: {columns: columns, funcCheckAll: funcCheckAll}\">\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #rowHeaderFilter let-columns=\"columns\" let-funcCheckAll=\"funcCheckAll\">\r\n <tr class=\"filter-row\" *ngIf=\"!setting.hiddenFilterRow\">\r\n <th *ngIf=\"!setting.hiddenCheckbox\" class=\"chkbox nopad center\" [class.sticky]=\"setting.stickyColumn\"\r\n [class.tricheckbox-custom-false]=\"checkedAll === false\" [style.width]=\"widthCheckbox\">\r\n <p-triStateCheckbox [(ngModel)]=\"checkedAll\" binary=\"true\" (onChange)=\"funcCheckAll()\">\r\n </p-triStateCheckbox>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <th *ngIf=\"!setting.hiddenOrderColumn\" class=\"stt center v-top\" [class.sticky]=\"setting.stickyColumn\">\r\n <div *ngIf=\"!setting.hiddenSetting\" class=\"pick-color-row\" pTooltip=\"C\u1EA5u h\u00ECnh hi\u1EC3n th\u1ECB m\u00E0u\"\r\n tooltipPosition=\"top\" (click)=\"showSettingRowColor()\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <th *ngIf=\"rowExpansion\" class=\"nopad center row-expansion-toggle\" [class.sticky]=\"setting.stickyColumn\">\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <ng-container *ngFor=\"let col of columns; let i = index\">\r\n <th *ngIf=\"col.visible && col.field != 'function'\" class=\"cell-header-filter center\">\r\n <ng-container *ngIf=\"col.allowFilter\">\r\n <ng-container *ngIf=\"col.templateFilter\">\r\n <ng-container [ngTemplateOutlet]=\"col.templateFilter\"\r\n [ngTemplateOutletContext]=\"{col: col, filterData: filterData, onSearch: onSearch, onShowFilterDropdownPanel: onShowFilterDropdownPanel, onHideFilterDropdownPanel: onHideFilterDropdownPanel}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!col.templateFilter\" [ngSwitch]=\"col.controlType\">\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <ng-container [ngTemplateOutlet]=\"filterDropdown\"\r\n [ngTemplateOutletContext]=\"{col: col.rawColumn}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <ng-container [ngTemplateOutlet]=\"filterNumber\" [ngTemplateOutletContext]=\"{col: col}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <ng-container [ngTemplateOutlet]=\"filterDate\" [ngTemplateOutletContext]=\"{col: col}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'datetime'\">\r\n <ng-container [ngTemplateOutlet]=\"filterDate\" [ngTemplateOutletContext]=\"{col: col}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ng-container [ngSwitch]=\"col.dataType\">\r\n <ng-container *ngSwitchCase=\"'int'\">\r\n <ng-container [ngTemplateOutlet]=\"filterNumber\"\r\n [ngTemplateOutletContext]=\"{col: col}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'decimal'\">\r\n <ng-container [ngTemplateOutlet]=\"filterNumber\"\r\n [ngTemplateOutletContext]=\"{col: col}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <ng-container [ngTemplateOutlet]=\"filterDate\"\r\n [ngTemplateOutletContext]=\"{col: col}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'datetime'\">\r\n <ng-container [ngTemplateOutlet]=\"filterDate\"\r\n [ngTemplateOutletContext]=\"{col: col}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'boolean'\">\r\n <ng-container [ngTemplateOutlet]=\"filterBoolean\"\r\n [ngTemplateOutletContext]=\"{col: col}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ng-container [ngTemplateOutlet]=\"filterText\"\r\n [ngTemplateOutletContext]=\"{col: col}\">\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n </ng-container>\r\n <th *ngIf=\"enableReorderRow\" style=\"width: 30px\">\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n <th *ngIf=\"!setting.hiddenFunctionColumn\" class=\"center setting-cell column-function\"\r\n [class.sticky]=\"setting.stickyColumn\">\r\n <button *ngIf=\"!setting.hiddenSetting\" type=\"button\" pButton pRipple icon=\"pi pi-cog\"\r\n class=\"p-button-rounded p-button-text\" pTooltip=\"C\u1EA5u h\u00ECnh hi\u1EC3n th\u1ECB\" tooltipPosition=\"top\"\r\n (click)=\"showSettings()\"></button>\r\n <button *ngIf=\"!setting.hiddenSettingPermission\" type=\"button\" pButton pRipple icon=\"pi pi-users\"\r\n class=\"p-button-rounded p-button-text\" pTooltip=\"Ph\u00E2n quy\u1EC1n d\u1EEF li\u1EC7u\" tooltipPosition=\"left\"\r\n (click)=\"showSettingsPermission()\"></button>\r\n <button *ngIf=\"!setting.hiddenSettingWorkflowNew\" type=\"button\" pButton pRipple icon=\"pi pi-sitemap\"\r\n class=\"p-button-rounded p-button-text\" pTooltip=\"C\u1EA5u h\u00ECnh quy tr\u00ECnh\" tooltipPosition=\"left\"\r\n (click)=\"showSettingsWorkflowNew()\"></button>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n </tr>\r\n</ng-template>\r\n<ng-template #colFunctionHeader>\r\n <ng-container *ngIf=\"!setting.hiddenFunctionColumn\">\r\n <th class=\"column-function\" [class.sticky]=\"setting.stickyColumn\"\r\n [style.width]=\"widthFunctionColumn || _widthFunctionColumn\">\r\n <div class=\"cell-header-function\">\r\n <span>{{'GRID.FUNCTION'| translate}}</span>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </th>\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #contentTh let-col>\r\n <ng-container *ngIf=\"templateHeaderContent[col.field]\">\r\n <ng-container *ngTemplateOutlet=\"templateHeaderContent[col.field]\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!templateHeaderContent[col.field]\">\r\n {{col.label}}\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n</ng-template>\r\n<ng-template #trBody let-rowData let-columns=\"columns\" let-index=\"index\" let-expanded=\"expanded\"\r\n let-eventSelectRow=\"eventSelectRow\" let-eventChecked=\"eventChecked\">\r\n <tr [tnReorderableRow]=\"index\" [attr.rowIndex]=\"index\"\r\n [ngClass]=\"mergeClassObj(rowData, { 'ui-state-highlight': rowData._checked })\" [pTooltip]=\"rowData.tooltip\"\r\n tooltipPosition=\"top\" [tooltipStyleClass]=\"rowData.tooltipClass\" [escape]=\"escape\"\r\n (click)=\"eventSelectRow($event, rowData)\">\r\n <ng-container *ngIf=\"!setting.hiddenCheckbox\">\r\n <td [style.width]=\"widthCheckbox\" class=\"chkbox link-or-action cell-checkbox\"\r\n [class.sticky]=\"setting.stickyColumn\">\r\n <ng-container *ngIf=\"!hasTemplate('checkbox')\">\r\n <p-checkbox [(ngModel)]=\"rowData._checked\" binary=\"true\" (onChange)=\"eventChecked(rowData)\">\r\n </p-checkbox>\r\n </ng-container>\r\n <ng-container *ngIf=\"hasTemplate('checkbox')\">\r\n <ng-container [ngTemplateOutlet]=\"getTemplate('checkbox')\"\r\n [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n </ng-container>\r\n <td *ngIf=\"!setting.hiddenOrderColumn && (!rowData.hidden || !rowData.hidden[fieldOrder])\"\r\n [style.width]=\"widthOrderColumn\" class=\"stt\" style=\"text-align: center;\"\r\n [class.sticky]=\"setting.stickyColumn\" [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[fieldOrder]\"\r\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[fieldOrder]\">\r\n <span class=\"row-card\" [ngStyle]=\"getBookmarkColor(rowData, columns)\"></span>\r\n {{rowData[fieldOrder]}}\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n <td *ngIf=\"rowExpansion\" class=\"no-padding center row-expansion-toggle\" [class.sticky]=\"setting.stickyColumn\">\r\n <ng-container *ngTemplateOutlet=\"iconToggleRowData; context: {rowData: rowData, expanded: expanded}\">\r\n </ng-container>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n <ng-container\r\n *ngTemplateOutlet=\"dynamicColBodys; context: {$implicit: columns, rowData: rowData, index: index, expanded: expanded}\">\r\n </ng-container>\r\n <td *ngIf=\"enableReorderRow\" class=\"no-padding center\">\r\n <i class=\"fas fa-arrows-alt\" style=\"cursor:pointer; padding: 8px; color: #555;\" pReorderableRowHandle></i>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n <ng-container *ngIf=\"!setting.hiddenFunctionColumn\">\r\n <td class=\"text-center column-function\" style=\"text-align: center;\" [class.sticky]=\"setting.stickyColumn\">\r\n <div *ngIf=\"hasTemplate('function')\" class=\"p-toolbar-group-center button-group\">\r\n <ng-container [ngTemplateOutlet]=\"getTemplate('function')\"\r\n [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"></ng-container>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </div>\r\n <div *ngIf=\"!hasTemplate('function')\" class=\"p-toolbar-group-center button-group\">\r\n <ng-container [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"\r\n [ngTemplateOutlet]=\"getTemplate('buttonBefore')\"></ng-container>\r\n <button *ngIf=\"setting.showVersionButton\" type=\"button\" pButton pRipple icon=\"pi pi-calendar\"\r\n class=\"p-button-rounded p-button-success link-or-action\" pTooltip=\"Xem l\u1ECBch s\u1EED phi\u00EAn b\u1EA3n\"\r\n tooltipPosition=\"top\" (click)=\"showListVersion(rowData)\"></button>\r\n <button *ngIf=\"!rowData.hiddenEdit\" type=\"button\" pButton pRipple [disabled]=\"disableEdit(rowData)\"\r\n pTooltip=\"{{'FORM.EDIT' | translate}}\" tooltipPosition=\"top\"\r\n class=\"p-button-rounded p-button-text p-button-info link-or-action\" icon=\"pi pi-pencil\"\r\n (click)=\"edit(rowData)\"></button>\r\n <button *ngIf=\"!rowData.hiddenDelete\" type=\"button\" pButton pRipple\r\n [disabled]=\"disableDelete(rowData)\" pTooltip=\"{{'FORM.DELETE' | translate}}\"\r\n tooltipPosition=\"top\" class=\"p-button-rounded p-button-text p-button-danger link-or-action\"\r\n icon=\"pi pi-trash\" (click)=\"delete(rowData)\"></button>\r\n <button *ngIf=\"!rowData.hiddenCopyLink\" type=\"button\" pButton pRipple\r\n [disabled]=\"disableCopyLink(rowData)\" pTooltip=\"{{'Sao ch\u00E9p li\u00EAn k\u1EBFt' | translate}}\"\r\n tooltipPosition=\"top\" class=\"p-button-rounded p-button-text p-button-info link-or-action\"\r\n icon=\"pi pi-link\" (click)=\"copyLink(rowData)\"></button>\r\n <button *ngIf=\"this.menuButtons\" type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-info p-button-rounded\" pTooltip=\"Ch\u1EE9c n\u0103ng kh\u00E1c\"\r\n tooltipPosition=\"top\" (click)=\"showContextMenu($event, rowData)\"></button>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n</ng-template>\r\n<ng-template #dynamicColBodys let-columns let-rowData=\"rowData\" let-index=\"index\" let-expanded=\"expanded\">\r\n <ng-container *ngFor=\"let col of columns; let i = index\">\r\n <ng-container\r\n *ngTemplateOutlet=\"contentTd; context: {$implicit: rowData, col: col, index: index, i: i, expanded: expanded}\">\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #contentTd let-rowData let-col=\"col\" let-index=\"index\" let-expanded=\"expanded\" let-i=\"i\">\r\n <td *ngIf=\"col && col.visible && col.field != 'function' && (!rowData.hidden || !rowData.hidden[col.field])\"\r\n [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[col.field]\"\r\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[col.field]\" [ngStyle]=\"col.extendData.style\"\r\n [class]=\"col.cellClass\" [class.first-td]=\"i == 0\">\r\n <span *ngIf=\"col.pipe\">\r\n <span class=\"p-column-title\" [pTooltip]=\"col.fullLabel\" [escape]=\"false\"\r\n tooltipPosition=\"top\">{{col.label}}</span>\r\n {{rowData['pipe__' + col.field]}}\r\n </span>\r\n <span *ngIf=\"!col.pipe\">\r\n <span class=\"p-column-title\" [pTooltip]=\"col.fullLabel\" [escape]=\"false\"\r\n tooltipPosition=\"top\">{{col.label}}</span>\r\n <span *ngIf=\"setting.showEditLink && col.showEditLink\" [pTooltip]=\"config.tooltipView\" tooltipPosition=\"top\"\r\n class=\"link-or-action\">\r\n <a href=\"javascript:;\" (click)=\"view(rowData)\" [pTooltip]=\"config.tooltipView\" tooltipPosition=\"top\">\r\n <ng-container [ngTemplateOutlet]=\"contentCell\"\r\n [ngTemplateOutletContext]=\"getContextCell(rowData, index, col, expanded, this)\">\r\n </ng-container>\r\n </a>\r\n </span>\r\n <span *ngIf=\"!setting.showEditLink || !col.showEditLink\">\r\n <ng-container [ngTemplateOutlet]=\"contentCell\"\r\n [ngTemplateOutletContext]=\"getContextCell(rowData, index, col, expanded, this)\">\r\n </ng-container>\r\n </span>\r\n </span>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n</ng-template>\r\n<ng-template #contentCell let-col=\"col\" let-rowData=\"rowData\" let-rowIndex=\"rowIndex\" let-field=\"field\"\r\n let-expanded=\"expanded\">\r\n <ng-container *ngIf=\"col.template\">\r\n <ng-container [ngTemplateOutlet]=\"col.template\"\r\n [ngTemplateOutletContext]=\"getContextCell(rowData, rowIndex, col, expanded,this)\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!col.template\">\r\n <ng-container [ngSwitch]=\"col.dataType\">\r\n <span *ngSwitchCase=\"'color'\" style=\"display:block;text-align:center;\">\r\n <div pTooltip=\"{{rowData[field]}}\" tooltipPosition=\"top\" [ngStyle]=\"{'background-color':rowData[field]}\"\r\n style=\"width:30px;height:30px;margin:0 auto;\"></div>\r\n </span>\r\n <span *ngSwitchCase=\"'icon'\" style=\"display:block;text-align:center;\">\r\n <i pTooltip=\"{{rowData[field]}}\" tooltipPosition=\"top\" style=\"text-align: center;\"\r\n [ngClass]=\"rowData[field]\"></i>\r\n </span>\r\n <span *ngSwitchCase=\"'date'\" pTooltip=\"{{rowData[field] | date:'dd/MM/yyyy'}}\" tooltipPosition=\"top\">\r\n {{_crudService.renderDate(rowData[field], col.format)}}\r\n </span>\r\n <span *ngSwitchCase=\"'datetime'\" pTooltip=\"{{rowData[field] | date:'dd/MM/yyyy HH:mm'}}\"\r\n tooltipPosition=\"top\">\r\n {{_crudService.renderDateTime(rowData[field], col.format)}}\r\n </span>\r\n <span *ngSwitchCase=\"'user'\" class=\"user\">\r\n {{rowData[field] | userFormat | async}}\r\n </span>\r\n <div *ngSwitchCase=\"'users'\" [innerHTML]=\"rowData[field] | usersFormat | async\">\r\n </div>\r\n <span *ngSwitchCase=\"'int'\">\r\n {{rowData[field]}}\r\n </span>\r\n <span *ngSwitchCase=\"'decimal'\">\r\n {{rowData[field]}}\r\n </span>\r\n <span *ngSwitchCase=\"'boolean'\">\r\n <p-checkbox class=\"boolean-data-type\" [(ngModel)]=\"rowData[field]\" binary=\"true\"\r\n [disabled]=\"col.disableCheckBox\">\r\n </p-checkbox>\r\n </span>\r\n <span *ngSwitchCase=\"'html'\">\r\n <div *ngIf=\"rowData[field]==null?'':rowData[field]\" [innerHTML]=\"rowData[field] | safeHtml\"></div>\r\n </span>\r\n <span *ngSwitchCase=\"'metadataStatus'\">\r\n <span *ngIf=\"rowData['rejectReason']\" class=\"label-danger\" [pTooltip]=\"rowData['rejectReason']\"\r\n tooltipStyleClass=\"unset-width\" [escape]=\"false\" tooltipPosition=\"top\">T\u1EEB ch\u1ED1i</span>\r\n <span *ngIf=\"rowData[field] == '0' && !rowData['rejectReason']\" class=\"label-secondary\">Ch\u01B0a\r\n duy\u1EC7t</span>\r\n <span *ngIf=\"rowData[field] == '1' && !rowData['rejectReason']\" class=\"label-warning\">Ch\u1EDD duy\u1EC7t</span>\r\n <span *ngIf=\"rowData[field] == '2'\" class=\"label-primary\">\u0110\u00E3 duy\u1EC7t</span>\r\n </span>\r\n <ng-container *ngSwitchCase=\"'string'\">\r\n <ng-container *ngTemplateOutlet=\"contentCellString; context: {$implicit: rowData, field: col.field}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"null\">\r\n <ng-container *ngTemplateOutlet=\"contentCellString; context: {$implicit: rowData, field: col.field}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ng-container [ngTemplateOutlet]=\"getComponentByType(col.dataType)\"\r\n [ngTemplateOutletContext]=\"getContextCell(rowData, rowIndex, col, expanded, this)\">\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #contentCellString let-rowData let-field=\"field\">\r\n <span>\r\n <!-- __sv: Short Value -->\r\n <ng-container *ngIf=\"rowData[field + '__sv']\">\r\n <ng-container *ngIf=\"!rowData[field + '__showFull']\">\r\n {{rowData[field + '__sv']}}\r\n <span class=\"toggle-showfull\" (click)=\"toggleShowFull(rowData, field)\" pTooltip=\"B\u1EA5m \u0111\u1EC3 xem th\u00EAm\"\r\n tooltipPosition=\"top\">[...]</span>\r\n </ng-container>\r\n <ng-container *ngIf=\"rowData[field + '__showFull']\">\r\n {{rowData[field]}}\r\n <span class=\"toggle-showfull\" (click)=\"toggleShowFull(rowData, field)\">Thu g\u1ECDn</span>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!rowData[field + '__sv']\">\r\n {{rowData[field]}}\r\n </ng-container>\r\n </span>\r\n</ng-template>\r\n<ng-template #iconToggleRowGroup let-rowData=\"rowData\" let-expanded=\"expanded\">\r\n <a href=\"javascript:;\" (click)=\"handleToggleRow(rowData, $event)\">\r\n <i style=\"margin-right:5px\" [ngClass]=\"expanded ? 'fas fa-fw fa-caret-down' : 'fas fa-fw fa-caret-right'\"></i>\r\n </a>\r\n</ng-template>\r\n<ng-template #iconToggleRowData let-rowData=\"rowData\" let-expanded=\"expanded\">\r\n <button type=\"button\" pButton pRipple class=\"link-or-action p-button-text p-button-rounded p-button-plain\"\r\n [icon]=\"expanded ? 'pi pi-chevron-down' : 'pi pi-chevron-right'\"\r\n (click)=\"handleToggleRow(rowData, $event)\"></button>\r\n</ng-template>\r\n<ng-template #_contentRowGroup let-rowData=\"rowData\" let-groupCol=\"groupCol\" let-groupField=\"_groupField\">\r\n <ng-container [ngTemplateOutlet]=\"contentCell\"\r\n [ngTemplateOutletContext]=\"{rowData: rowData, col: groupCol, field: _groupField}\">\r\n </ng-container>\r\n <span> ({{rowGroupMetadata[rowData[_groupField]].size}})</span>\r\n</ng-template>\r\n<ng-template #entityWorkflowStatus let-rowData=\"rowData\">\r\n <div class=\"container-text-workflow\">\r\n <span class=\"content\">{{rowData.statusString ? rowData.statusString : rowData.strcurrentStateCode}}</span>\r\n <button *ngIf=\"!rowData.hiddenWorkflowAction\" type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-rounded\" pTooltip=\"H\u00E0nh \u0111\u1ED9ng\" tooltipPosition=\"top\"\r\n (click)=\"showActionWorkflow($event, rowData)\"></button>\r\n </div>\r\n</ng-template>\r\n<ng-template #trangThaiV5 let-rowData=\"rowData\">\r\n <div class=\"container-text-workflow\">\r\n <button *ngIf=\"!rowData.__workflowCode\" pButton class=\"p-button-text link-or-action\" label=\"B\u1EAFt \u0111\u1EA7u\"\r\n style=\"border: 1px solid #7ca9cd;\" pTooltip=\"B\u1EAFt \u0111\u1EA7u ch\u1EA1y quy tr\u00ECnh\" tooltipPosition=\"top\"\r\n (click)=\"showFormStartWorkflow(rowData)\"></button>\r\n <ng-container *ngIf=\"rowData.__workflowCode\">\r\n <span class=\"content\">{{rowData.__textTrangThai}}</span>\r\n <button *ngIf=\"!rowData.hiddenWorkflowAction\" type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-rounded\" pTooltip=\"H\u00E0nh \u0111\u1ED9ng\" tooltipPosition=\"top\"\r\n [disabled]=\"showingActionWorkflow\" (click)=\"showActionWorkflowNew($event, rowData)\"></button>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n<ng-template #viewHistory let-rowData=\"rowData\">\r\n <button pButton icon=\"pi pi-calendar\" class=\"p-button-text p-button-rounded link-or-action\" pTooltip=\"Xem l\u1ECBch s\u1EED\"\r\n tooltipPosition=\"top\" (click)=\"viewHistoryWorkflowNew(rowData)\"></button>\r\n</ng-template>\r\n<ng-template #workflowCoreStatus let-rowData=\"rowData\">\r\n <div class=\"container-text-workflow\">\r\n <a class=\"content\" (click)=\"goToTask($event)\" href=\"javascript:;\">{{rowData.strworkflowCoreStatus}}</a>\r\n </div>\r\n</ng-template>\r\n<ng-template #containerSticky>\r\n <span class=\"fix-sticky top\"></span>\r\n <span class=\"fix-sticky right\"></span>\r\n <!-- <span class=\"fix-sticky bottom\"></span> -->\r\n <span class=\"fix-sticky left\"></span>\r\n</ng-template>\r\n<ng-template #sortIcon let-field=\"field\">\r\n <i class=\"p-sortable-column-icon pi\" style=\"font-size: 0.8em;\"\r\n [ngClass]=\"{'pi-sort-amount-up-alt': field == _sortField && _sortDir === 1, 'pi-sort-amount-down': field == _sortField && _sortDir === -1, 'pi-sort-alt': field != _sortField || _sortDir === 0}\"></i>\r\n</ng-template>\r\n<ng-template #filterDropdown let-col=\"col\">\r\n <div #filterBox style=\"width: 100%; border-radius: 4px;\">\r\n <dropdown *ngIf=\"col && filterSchema.dropdown[col.field]\" [control]=\"filterSchema.dropdown[col.field]\"\r\n [dataSource]=\"filterSchema.dropdown[col.field].dataSource\" [(value)]=\"filterData[col.field]\"\r\n (onHideSmartEvent)=\"onSearch()\" (onShow)=\"onShowFilterDropdownPanel($event)\"\r\n (onHide)=\"onHideFilterDropdownPanel($event)\" (mousedown)=\"initFilterBoxFocus(filterBox)\"></dropdown>\r\n </div>\r\n</ng-template>\r\n<ng-template #filterText let-col=\"col\">\r\n <div #filterBox class=\"text-filter filter-box\" tabindex=\"-1\" (mousedown)=\"initFilterBoxFocus(filterBox)\">\r\n <div tabindex=\"-1\">\r\n <input pInputText type=\"text\" class=\"input-search\" [placeholder]=\"col.label\"\r\n [(ngModel)]=\"filterData[col.field]\" (change)=\"onSearch()\"\r\n (keyup.esc)=\"onClearSearch(filterBox, col.field)\">\r\n </div>\r\n <span [ngClass]=\"{'action-clear': true, 'dirty': filterData[col.field] != null && filterData[col.field] !== ''}\"\r\n [pTooltip]=\"'B\u1ECF filter'\" tooltipPosition=\"top\" (mousedown)=\"onClearSearch(filterBox, col.field)\"\r\n tabindex=\"-1\"><i class=\"pi pi-filter-slash\"></i></span>\r\n <after-view-checked style=\"display: none;\" (loaded)=\"initFilterBoxFocus(filterBox)\">\r\n </after-view-checked>\r\n </div>\r\n</ng-template>\r\n<ng-template #filterNumber let-col=\"col\">\r\n <div #filterBox class=\"number-picker-range filter-box\" tabindex=\"-1\" (mousedown)=\"initFilterBoxFocus(filterBox)\">\r\n <div tabindex=\"-1\">\r\n <tn-number-picker-range #numberRange [maskType]=\"col.dataType\" [(ngModel)]=\"filterData[col.field]\"\r\n [min]=\"col.min\" [max]=\"col.max\" (change)=\"onSearch()\">\r\n </tn-number-picker-range>\r\n </div>\r\n <span\r\n [ngClass]=\"{'action-clear': true, 'dirty': filterData[col.field] && ((filterData[col.field][0] != null && filterData[col.field][0] !== '') || (filterData[col.field][1] != null && filterData[col.field][1] !== ''))}\"\r\n [pTooltip]=\"'B\u1ECF filter'\" tooltipPosition=\"top\" (mousedown)=\"onClearNumberSearch(filterBox, numberRange)\"\r\n tabindex=\"-1\">\r\n <i class=\"pi pi-filter-slash\"></i></span>\r\n <after-view-checked style=\"display: none;\" (loaded)=\"initFilterBoxFocus(filterBox)\">\r\n </after-view-checked>\r\n </div>\r\n</ng-template>\r\n<ng-template #filterDate let-col=\"col\">\r\n <div #filterBox class=\"date-picker-range filter-box\" tabindex=\"-1\" (mousedown)=\"initFilterBoxFocus(filterBox)\">\r\n <div tabindex=\"-1\">\r\n <tn-datetime-picker-range #dateRange [control]=\"filterSchema.dateRange\"\r\n (onChanged)=\"onChangeDateTime($event, col.field)\">\r\n </tn-datetime-picker-range>\r\n </div>\r\n <span\r\n [ngClass]=\"{'action-clear': true, 'dirty': filterData[col.field] && ((filterData[col.field][0] != null && filterData[col.field][0] !== '') || (filterData[col.field][1] != null && filterData[col.field][1] !== ''))}\"\r\n [pTooltip]=\"'B\u1ECF filter'\" tooltipPosition=\"top\"\r\n (mousedown)=\"onClearDateSearch(filterBox, dateRange, col.field)\" tabindex=\"-1\"><i\r\n class=\"pi pi-filter-slash\"></i></span>\r\n <after-view-checked style=\"display: none;\" (loaded)=\"initFilterBoxFocus(filterBox)\">\r\n </after-view-checked>\r\n </div>\r\n</ng-template>\r\n<ng-template #filterBoolean let-col=\"col\">\r\n <div class=\"filter-boolean-box\">\r\n <p-selectButton\r\n [options]=\"[{value: true, label: 'C\u00F3', icon: 'pi pi-check'}, {value: false, label: 'Kh\u00F4ng', icon: 'pi pi-times'}]\"\r\n [multiple]=\"true\" [(ngModel)]=\"filterData[col.field]\" (onChange)=\"onChangeBoolean($event, col.field)\">\r\n <ng-template let-item>\r\n <i style=\"padding: 3px 0;\" [class]=\"item.icon\"></i>\r\n </ng-template>\r\n </p-selectButton>\r\n </div>\r\n</ng-template>",
|
|
21295
21623
|
providers: [i2$1.DecimalPipe, i2$1.DatePipe],
|
|
21296
21624
|
styles: [".container-table{display:flex;flex-direction:column;overflow:hidden}.container-table .container-table-inner{display:flex;height:auto;max-height:100%;min-height:60px;position:relative}.container-table-inner>tn-custom-scrollbar{width:100%}.cell-checkbox{text-align:center}.pick-color-row{border:1px solid #d1d1d1;border-radius:2px;bottom:0;cursor:pointer;display:flex;flex-wrap:wrap;height:1.4em;left:0;margin:auto;position:absolute;right:0;top:0;width:1.4em}.pick-color-row>div{background:#84d140;border:1px solid #fff;flex:0 0 50%}.pick-color-row>div:nth-child(2){background:#fc6868}.pick-color-row>div:nth-child(3){background:#fbc02d}.pick-color-row>div:nth-child(4){background:#7dc5ff}.cell-header-function{align-items:center;display:flex}.cell-header-function>span{flex:1 1;text-align:center}.cell-header-function button{height:24px;margin:0;padding:0;width:24px}.group-icon{color:#256aa2;font-weight:400}.group-icon i{font-size:.8em;margin-right:5px}.center{text-align:center!important}.row-card{height:100%;left:0;position:absolute;top:0;width:5px}.column-function{min-width:80px;padding:0}.custom-search-area{background-color:#f2f2f2;margin:-.5em -1em .5em;padding-left:.5em;padding-right:.5em}.main-container-search-inner{margin-bottom:-.5em}.main-title>h1{font-size:1.2em}.filter-row>th:not(.sticky):not(.chkbox){padding:3px!important}.container-text-workflow{align-items:center;display:flex;justify-content:center}.container-text-workflow .link-or-action{color:#2196f3;cursor:pointer}.container-text-workflow .content{flex:1 1}.btnReload{height:2rem;left:50%;position:absolute;top:50%;transform:translate(-50%,calc(-50% - 1px));width:2rem}.toggle-showfull{color:#00f;cursor:pointer;font-size:.8rem;font-weight:700;white-space:nowrap}.col-share-permission>div:not(:last-child){margin-bottom:5px}::ng-deep crud-list .advance-search-container{display:flex;justify-content:flex-end}::ng-deep crud-list advance-search{display:block;flex:1;max-width:400px}::ng-deep crud-list .ps__rail-x,::ng-deep crud-list .ps__rail-y{z-index:5}::ng-deep crud-list .p-datatable .p-datatable-thead>tr>th.cell-fixed-filter{z-index:999}::ng-deep crud-list .p-datatable .p-datatable-thead>tr>th.cell-fixed-filter .fixed-filter{min-width:200px;position:fixed;z-index:10}::ng-deep crud-list .p-datatable .p-datatable-thead>tr>th .container-icon-loading{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}::ng-deep crud-list .check-all-custom{height:0;position:absolute;width:0}::ng-deep crud-list .cell-header-filter{position:relative}::ng-deep crud-list .cell-header-filter .tn-dropdown{height:32px}::ng-deep crud-list .cell-header-filter tn-mask .p-inputtext{width:100%}::ng-deep crud-list .cell-header-filter .filter-box{background-color:#fff;border-radius:3px;display:flex;min-width:0}::ng-deep crud-list .cell-header-filter .filter-box>div{border:1px solid #ced4da;border-radius:3px 0 0 3px;border-right:none;flex:1;outline:none;overflow:hidden}::ng-deep crud-list .cell-header-filter .filter-box>span{align-items:center;background:#f5f6f8;border:1px solid #ced4da;color:#6c757d;cursor:pointer;display:inline-flex;flex-basis:32px;height:32px;justify-content:center;min-width:unset;outline:none}::ng-deep crud-list .cell-header-filter .filter-box>span.action-clear{border-radius:0 3px 3px 0}::ng-deep crud-list .cell-header-filter .filter-box>span.action-clear.dirty{color:#008eff}::ng-deep crud-list .cell-header-filter .filter-box input{border:none;box-shadow:none!important;padding-left:5px;padding-right:5px}::ng-deep crud-list .cell-header-filter .filter-box:not(.no-transition){transition:min-width .1s}::ng-deep crud-list .cell-header-filter .filter-box.boolean-filter>div{flex:0 0 109px;width:109px}::ng-deep crud-list .cell-header-filter .p-multiselect-label.p-placeholder{padding-left:.5rem;padding-right:.5rem}::ng-deep crud-list .cell-header-filter.focus-within,::ng-deep crud-list .cell-header-filter:focus-within{z-index:10!important}::ng-deep crud-list .cell-header-filter.focus-within .filter-boolean-box .p-button,::ng-deep crud-list .cell-header-filter:focus-within .filter-boolean-box .p-button{z-index:10}::ng-deep crud-list .cell-header-filter.focus-within .filter-box>div,::ng-deep crud-list .cell-header-filter:focus-within .filter-box>div{border-color:#2196f3;box-shadow:0 0 0 .2rem #a6d5fa;z-index:0}::ng-deep crud-list .cell-header-filter.focus-within .short-filter-box,::ng-deep crud-list .cell-header-filter:focus-within .short-filter-box{box-shadow:5px 0 15px 1px rgba(0,0,0,.27058823529411763);min-width:250px;position:absolute;top:calc(50% - 16px);z-index:2}::ng-deep crud-list .cell-header-filter.focus-within .short-filter-box>div,::ng-deep crud-list .cell-header-filter:focus-within .short-filter-box>div{border-color:#2196f3;box-shadow:0 0 0 .2rem #a6d5fa;flex:1;z-index:0}::ng-deep crud-list .cell-header-filter.focus-within .short-filter-box>span.action-clear,::ng-deep crud-list .cell-header-filter:focus-within .short-filter-box>span.action-clear{display:flex}::ng-deep crud-list .cell-header-filter.focus-within .short-filter-box.boolean-filter,::ng-deep crud-list .cell-header-filter:focus-within .short-filter-box.boolean-filter{min-width:140px}::ng-deep crud-list .cell-header-filter.focus-within .short-filter-box.boolean-filter>div,::ng-deep crud-list .cell-header-filter:focus-within .short-filter-box.boolean-filter>div{flex:0 0 109px;width:109px}::ng-deep crud-list .cell-header-filter.focus-within:nth-last-child(2) .short-filter-box,::ng-deep crud-list .cell-header-filter:focus-within:nth-last-child(2) .short-filter-box{left:50%;transform:translateX(-50%)}::ng-deep crud-list .cell-header-filter:last-child .filter-box{right:3px}::ng-deep crud-list .table-border-line{background-color:#eee;position:absolute;z-index:5}::ng-deep crud-list .table-border-line.--left,::ng-deep crud-list .table-border-line.--right{bottom:0;top:0;width:1px}::ng-deep crud-list .table-border-line.--bottom,::ng-deep crud-list .table-border-line.--top{height:1px;left:0;right:0}::ng-deep crud-list .table-border-line.--left{left:0}::ng-deep crud-list .table-border-line.--right{right:0}::ng-deep crud-list .table-border-line.--top{top:0}::ng-deep crud-list .table-border-line.--bottom{bottom:0}::ng-deep crud-list .filter-boolean-box{text-align:center}::ng-deep crud-list .filter-boolean-box .p-selectbutton{white-space:nowrap}::ng-deep crud-list .custom-search-area crud-form{width:100%}::ng-deep crud-list>p-contextmenu{display:none}@media (max-width:640px){::ng-deep crud-list .--table-responsive .p-datatable-wrapper{padding:1px}}"]
|
|
21297
21625
|
},] }
|
|
@@ -21558,6 +21886,7 @@
|
|
|
21558
21886
|
_this._workflowSettingService = _this._injector.get(WorkflowSettingsService);
|
|
21559
21887
|
_this._workflowPermissionDetailService = _this._injector.get(WorkflowPermissionDetailService);
|
|
21560
21888
|
_this._stateMachinesService = _this._injector.get(StateMachinesService);
|
|
21889
|
+
_this._congViecServiceInBase = _this._injector.get(CongViecService);
|
|
21561
21890
|
return _this;
|
|
21562
21891
|
}
|
|
21563
21892
|
Object.defineProperty(DataListBase.prototype, "content", {
|
|
@@ -21592,11 +21921,7 @@
|
|
|
21592
21921
|
|| !this.setting.hiddenSettingWorkflowNew) {
|
|
21593
21922
|
this.setting.baseService.useWorkflow = true;
|
|
21594
21923
|
}
|
|
21595
|
-
|
|
21596
|
-
this._entityWorkflowSettingService.registerService(key, this.setting.baseService);
|
|
21597
|
-
this._entityWorkflowHistoryService.registerService(key, this.setting.baseService);
|
|
21598
|
-
this._entityPermissionService.registerService(key, this.setting.baseService);
|
|
21599
|
-
this._workflowSettingService.registerService(key, this.setting.baseService);
|
|
21924
|
+
this.registerGlobalService(this.setting.baseService);
|
|
21600
21925
|
}
|
|
21601
21926
|
this.checkAllowTrinhKy = this.checkAllowTrinhKy.bind(this);
|
|
21602
21927
|
this.setting.checkAllowTrinhKy = this.checkAllowTrinhKy;
|
|
@@ -21604,6 +21929,19 @@
|
|
|
21604
21929
|
this.getItemState = this.getItemState.bind(this);
|
|
21605
21930
|
this.getMenuButtons = this.getMenuButtons.bind(this);
|
|
21606
21931
|
};
|
|
21932
|
+
DataListBase.prototype.registerGlobalService = function (service) {
|
|
21933
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
21934
|
+
var key;
|
|
21935
|
+
return __generator(this, function (_a) {
|
|
21936
|
+
key = service.getKeyWorkflowSetting();
|
|
21937
|
+
this._entityWorkflowSettingService.registerService(key, service);
|
|
21938
|
+
this._entityWorkflowHistoryService.registerService(key, service);
|
|
21939
|
+
this._entityPermissionService.registerService(key, service);
|
|
21940
|
+
this._workflowSettingService.registerService(key, service);
|
|
21941
|
+
return [2 /*return*/];
|
|
21942
|
+
});
|
|
21943
|
+
});
|
|
21944
|
+
};
|
|
21607
21945
|
DataListBase.prototype.loadItemFromQueryParam = function () {
|
|
21608
21946
|
var _this = this;
|
|
21609
21947
|
if (this.loadDetailFromQueryParam === undefined || this.loadDetailFromQueryParam === true) {
|
|
@@ -21763,6 +22101,7 @@
|
|
|
21763
22101
|
])];
|
|
21764
22102
|
case 4:
|
|
21765
22103
|
dataWorkflowNew = (_a.sent()).data;
|
|
22104
|
+
this.registerGlobalService(this._congViecServiceInBase);
|
|
21766
22105
|
if (!dataWorkflowNew) return [3 /*break*/, 6];
|
|
21767
22106
|
return [4 /*yield*/, this.getWorkflowDetailByWorkflowSetting(dataWorkflowNew)];
|
|
21768
22107
|
case 5:
|
|
@@ -21789,23 +22128,62 @@
|
|
|
21789
22128
|
});
|
|
21790
22129
|
});
|
|
21791
22130
|
};
|
|
22131
|
+
DataListBase.prototype.getWorkflowCodeByTask = function () {
|
|
22132
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
22133
|
+
var phanCongCongViecService, dataWorkflowByTask, workflowCodes;
|
|
22134
|
+
return __generator(this, function (_a) {
|
|
22135
|
+
switch (_a.label) {
|
|
22136
|
+
case 0:
|
|
22137
|
+
phanCongCongViecService = this._injector.get(CauHinhWorkflowService);
|
|
22138
|
+
return [4 /*yield*/, phanCongCongViecService.getAll([], 'WorkflowCodes')];
|
|
22139
|
+
case 1:
|
|
22140
|
+
dataWorkflowByTask = (_a.sent()).data;
|
|
22141
|
+
if (!dataWorkflowByTask)
|
|
22142
|
+
return [2 /*return*/, []];
|
|
22143
|
+
workflowCodes = [];
|
|
22144
|
+
dataWorkflowByTask.forEach(function (cauHinh) {
|
|
22145
|
+
if (!cauHinh.workflowCodes)
|
|
22146
|
+
return;
|
|
22147
|
+
cauHinh.workflowCodes.split(',').forEach(function (workflowCode) {
|
|
22148
|
+
if (workflowCodes.indexOf(workflowCode) == -1) {
|
|
22149
|
+
workflowCodes.push(workflowCode);
|
|
22150
|
+
}
|
|
22151
|
+
});
|
|
22152
|
+
});
|
|
22153
|
+
return [2 /*return*/, workflowCodes];
|
|
22154
|
+
}
|
|
22155
|
+
});
|
|
22156
|
+
});
|
|
22157
|
+
};
|
|
21792
22158
|
DataListBase.prototype.getWorkflowDetailByWorkflowSetting = function (itemWorkflowSetting) {
|
|
21793
22159
|
return __awaiter(this, void 0, void 0, function () {
|
|
21794
|
-
var workflows;
|
|
22160
|
+
var workflowCodes, workflows;
|
|
21795
22161
|
return __generator(this, function (_a) {
|
|
21796
22162
|
switch (_a.label) {
|
|
21797
22163
|
case 0:
|
|
22164
|
+
itemWorkflowSetting.workflows = [];
|
|
22165
|
+
workflowCodes = [];
|
|
22166
|
+
if (!itemWorkflowSetting.createTaskInstead) return [3 /*break*/, 2];
|
|
22167
|
+
return [4 /*yield*/, this.getWorkflowCodeByTask()];
|
|
22168
|
+
case 1:
|
|
22169
|
+
workflowCodes = _a.sent();
|
|
22170
|
+
return [3 /*break*/, 3];
|
|
22171
|
+
case 2:
|
|
21798
22172
|
if (itemWorkflowSetting.workflowCodes && !Array.isArray(itemWorkflowSetting.workflowCodes)) {
|
|
21799
22173
|
itemWorkflowSetting.workflowCodes = itemWorkflowSetting.workflowCodes.split(',');
|
|
22174
|
+
workflowCodes = itemWorkflowSetting.workflowCodes;
|
|
21800
22175
|
}
|
|
22176
|
+
_a.label = 3;
|
|
22177
|
+
case 3:
|
|
22178
|
+
if (!workflowCodes.length) return [3 /*break*/, 5];
|
|
21801
22179
|
return [4 /*yield*/, this._stateMachinesService.getDataDropdownByFilter([
|
|
21802
|
-
this.newFilter('code', exports.Operator.in,
|
|
22180
|
+
this.newFilter('code', exports.Operator.in, workflowCodes)
|
|
21803
22181
|
], new DropdownOptions({
|
|
21804
22182
|
valueField: 'code',
|
|
21805
22183
|
displayField: 'title',
|
|
21806
22184
|
fieldPlus: 'data'
|
|
21807
22185
|
}))];
|
|
21808
|
-
case
|
|
22186
|
+
case 4:
|
|
21809
22187
|
workflows = (_a.sent());
|
|
21810
22188
|
workflows.forEach(function (item) {
|
|
21811
22189
|
item.data = JSON.parse(item.data);
|
|
@@ -21821,7 +22199,8 @@
|
|
|
21821
22199
|
});
|
|
21822
22200
|
});
|
|
21823
22201
|
itemWorkflowSetting.workflows = workflows;
|
|
21824
|
-
|
|
22202
|
+
_a.label = 5;
|
|
22203
|
+
case 5: return [2 /*return*/];
|
|
21825
22204
|
}
|
|
21826
22205
|
});
|
|
21827
22206
|
});
|
|
@@ -22408,7 +22787,7 @@
|
|
|
22408
22787
|
};
|
|
22409
22788
|
DataListBase.prototype.processGetData = function (response) {
|
|
22410
22789
|
return __awaiter(this, void 0, void 0, function () {
|
|
22411
|
-
var dataSource, statusNotAllowEdits_1, userIdCurrent_1, dataStatus_1, resetSelectedItems;
|
|
22790
|
+
var dataSource, lstItemId, statusNotAllowEdits_1, userIdCurrent_1, dataStatus_1, dataTask_1, lstIdTask, resetSelectedItems;
|
|
22412
22791
|
var _this = this;
|
|
22413
22792
|
return __generator(this, function (_a) {
|
|
22414
22793
|
switch (_a.label) {
|
|
@@ -22428,44 +22807,77 @@
|
|
|
22428
22807
|
_a.label = 2;
|
|
22429
22808
|
case 2:
|
|
22430
22809
|
dataSource = response.data;
|
|
22810
|
+
lstItemId = [];
|
|
22431
22811
|
if (this.setting.workflowSetting) {
|
|
22432
22812
|
statusNotAllowEdits_1 = this.setting.workflowSetting.statuses.filter(function (p) { return !p.options.choPhepSua; }).map(function (item) { return item.trangThaiContainer.ma; });
|
|
22433
22813
|
dataSource.forEach(function (item, index) {
|
|
22434
22814
|
item._index = (_this.setting.pageSetting.page - 1) * _this.setting.pageSetting.pageSize + 1 + index;
|
|
22435
22815
|
// item.currentStateCode = item.currentStateCode;
|
|
22436
22816
|
item.__disableEdit = statusNotAllowEdits_1.indexOf(item.currentStateCode) > -1;
|
|
22817
|
+
lstItemId.push(item.id);
|
|
22437
22818
|
});
|
|
22438
22819
|
}
|
|
22439
22820
|
else {
|
|
22440
22821
|
dataSource.forEach(function (item, index) {
|
|
22441
22822
|
item._index = (_this.setting.pageSetting.page - 1) * _this.setting.pageSetting.pageSize + 1 + index;
|
|
22442
22823
|
// item.currentStateCode = item.currentStateCode;
|
|
22824
|
+
lstItemId.push(item.id);
|
|
22443
22825
|
});
|
|
22444
22826
|
}
|
|
22445
22827
|
if (!(this.setting.workflowSettingNew
|
|
22446
|
-
|| this.setting.isWorkflowTree)) return [3 /*break*/,
|
|
22828
|
+
|| this.setting.isWorkflowTree)) return [3 /*break*/, 8];
|
|
22447
22829
|
userIdCurrent_1 = this._userService.getId();
|
|
22830
|
+
dataStatus_1 = [];
|
|
22831
|
+
dataTask_1 = [];
|
|
22832
|
+
if (!(this.setting.isWorkflowTree || !this.setting.workflowSettingNew.createTaskInstead)) return [3 /*break*/, 4];
|
|
22448
22833
|
return [4 /*yield*/, this._workflowPermissionDetailService.getAll([
|
|
22449
|
-
this.newFilter('itemId', exports.Operator.in,
|
|
22834
|
+
this.newFilter('itemId', exports.Operator.in, lstItemId),
|
|
22450
22835
|
this.newFilter('userId', exports.Operator.equal, userIdCurrent_1)
|
|
22451
22836
|
], 'itemId,userId,trangThai,textTrangThai,workflowCode,permission')];
|
|
22452
22837
|
case 3:
|
|
22838
|
+
// Lấy ra trạng thái quy trình
|
|
22453
22839
|
dataStatus_1 = (_a.sent()).data;
|
|
22840
|
+
return [3 /*break*/, 7];
|
|
22841
|
+
case 4: return [4 /*yield*/, this._congViecServiceInBase.getAll([
|
|
22842
|
+
this.newFilter('serviceCode', exports.Operator.equal, this.setting.baseService.serviceCode),
|
|
22843
|
+
this.newFilter('entity', exports.Operator.equal, this.setting.baseService.entityName),
|
|
22844
|
+
this.newFilter('entityKey', exports.Operator.in, lstItemId)
|
|
22845
|
+
], 'id,entityKey')];
|
|
22846
|
+
case 5:
|
|
22847
|
+
// Lấy ra danh sách các task gắn vào bản ghi
|
|
22848
|
+
dataTask_1 = (_a.sent()).data;
|
|
22849
|
+
if (!dataTask_1) return [3 /*break*/, 7];
|
|
22850
|
+
lstIdTask = dataTask_1.map(function (q) { return q.id; });
|
|
22851
|
+
return [4 /*yield*/, this._workflowPermissionDetailService.getAll([
|
|
22852
|
+
this.newFilter('itemId', exports.Operator.in, lstIdTask),
|
|
22853
|
+
this.newFilter('userId', exports.Operator.equal, userIdCurrent_1)
|
|
22854
|
+
], 'itemId,userId,trangThai,textTrangThai,workflowCode,permission')];
|
|
22855
|
+
case 6:
|
|
22856
|
+
dataStatus_1 = (_a.sent()).data;
|
|
22857
|
+
_a.label = 7;
|
|
22858
|
+
case 7:
|
|
22454
22859
|
if (dataStatus_1 == null) {
|
|
22455
22860
|
return [2 /*return*/, this._notifierService.showWarning('Không lấy được thông tin trạng thái hiện tại của bản ghi')];
|
|
22456
22861
|
}
|
|
22457
22862
|
dataSource.forEach(function (rowItem) {
|
|
22458
|
-
var
|
|
22459
|
-
|
|
22460
|
-
|
|
22461
|
-
|
|
22462
|
-
|
|
22463
|
-
};
|
|
22863
|
+
var itemStatus = {
|
|
22864
|
+
textTrangThai: 'Chưa chạy quy trình'
|
|
22865
|
+
};
|
|
22866
|
+
var itemId = rowItem.id;
|
|
22867
|
+
if (!_this.setting.isWorkflowTree && _this.setting.workflowSettingNew.createTaskInstead) {
|
|
22868
|
+
var itemTask = dataTask_1.find(function (q) { return q.entityKey == rowItem.id; });
|
|
22869
|
+
if (itemTask) {
|
|
22870
|
+
itemId = itemTask.id;
|
|
22871
|
+
}
|
|
22464
22872
|
}
|
|
22465
|
-
|
|
22466
|
-
|
|
22467
|
-
|
|
22468
|
-
|
|
22873
|
+
if (itemId) {
|
|
22874
|
+
var lstItemStatus = dataStatus_1.filter(function (q) { return q.itemId == itemId && q.userId == userIdCurrent_1; });
|
|
22875
|
+
// let itemStatus = null;
|
|
22876
|
+
if (lstItemStatus.length) {
|
|
22877
|
+
itemStatus = lstItemStatus.find(function (q) { return (q.permission & exports.PermissionBase.EDIT) == exports.PermissionBase.EDIT; });
|
|
22878
|
+
if (itemStatus == null) {
|
|
22879
|
+
itemStatus = lstItemStatus[0];
|
|
22880
|
+
}
|
|
22469
22881
|
}
|
|
22470
22882
|
}
|
|
22471
22883
|
rowItem.__trangThai = itemStatus.trangThai;
|
|
@@ -22487,15 +22899,15 @@
|
|
|
22487
22899
|
rowItem.__disablePermissionDelete = true;
|
|
22488
22900
|
}
|
|
22489
22901
|
});
|
|
22490
|
-
_a.label =
|
|
22491
|
-
case
|
|
22902
|
+
_a.label = 8;
|
|
22903
|
+
case 8:
|
|
22492
22904
|
this.model.dataSource = dataSource;
|
|
22493
22905
|
resetSelectedItems = this.model.selectedItems && this.model.selectedItems.length;
|
|
22494
22906
|
if (resetSelectedItems) {
|
|
22495
22907
|
this.model.selectedItems.length = 0;
|
|
22496
22908
|
}
|
|
22497
22909
|
return [4 /*yield*/, this.afterGetData()];
|
|
22498
|
-
case
|
|
22910
|
+
case 9:
|
|
22499
22911
|
_a.sent();
|
|
22500
22912
|
this._getRefDataDropdown(this.model.dataSource);
|
|
22501
22913
|
return [2 /*return*/];
|
|
@@ -30573,7 +30985,7 @@
|
|
|
30573
30985
|
greeting: [{ type: i0.Input }]
|
|
30574
30986
|
};
|
|
30575
30987
|
|
|
30576
|
-
var CongViecService = /** @class */ (function (_super) {
|
|
30988
|
+
var CongViecService$1 = /** @class */ (function (_super) {
|
|
30577
30989
|
__extends(CongViecService, _super);
|
|
30578
30990
|
function CongViecService(http, injector, _moduleConfigService) {
|
|
30579
30991
|
var _this = _super.call(this, http, injector, _moduleConfigService.getConfig().environment.apiDomain.vanbanEndpoint + "/" + _moduleConfigService.getConfig().environment.apiVersion + "/vanbanden") || this;
|
|
@@ -30583,13 +30995,13 @@
|
|
|
30583
30995
|
}
|
|
30584
30996
|
return CongViecService;
|
|
30585
30997
|
}(BaseService));
|
|
30586
|
-
CongViecService.ɵprov = i0.ɵɵdefineInjectable({ factory: function CongViecService_Factory() { return new CongViecService(i0.ɵɵinject(i1$1.HttpClient), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(ModuleConfigService)); }, token: CongViecService, providedIn: "root" });
|
|
30587
|
-
CongViecService.decorators = [
|
|
30998
|
+
CongViecService$1.ɵprov = i0.ɵɵdefineInjectable({ factory: function CongViecService_Factory() { return new CongViecService$1(i0.ɵɵinject(i1$1.HttpClient), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(ModuleConfigService)); }, token: CongViecService$1, providedIn: "root" });
|
|
30999
|
+
CongViecService$1.decorators = [
|
|
30588
31000
|
{ type: i0.Injectable, args: [{
|
|
30589
31001
|
providedIn: 'root'
|
|
30590
31002
|
},] }
|
|
30591
31003
|
];
|
|
30592
|
-
CongViecService.ctorParameters = function () { return [
|
|
31004
|
+
CongViecService$1.ctorParameters = function () { return [
|
|
30593
31005
|
{ type: i1$1.HttpClient },
|
|
30594
31006
|
{ type: i0.Injector },
|
|
30595
31007
|
{ type: ModuleConfigService }
|
|
@@ -30784,7 +31196,7 @@
|
|
|
30784
31196
|
];
|
|
30785
31197
|
CongViecPickerComponent.ctorParameters = function () { return [
|
|
30786
31198
|
{ type: i0.Injector },
|
|
30787
|
-
{ type: CongViecService },
|
|
31199
|
+
{ type: CongViecService$1 },
|
|
30788
31200
|
{ type: ModuleConfigService },
|
|
30789
31201
|
{ type: TaskWorkflowHistoriesService }
|
|
30790
31202
|
]; };
|
|
@@ -40100,6 +40512,7 @@
|
|
|
40100
40512
|
function StateMachinesDesignerComponent(injector, notifierService) {
|
|
40101
40513
|
var _this = _super.call(this, injector) || this;
|
|
40102
40514
|
_this.notifierService = notifierService;
|
|
40515
|
+
_this.useScrollBar = true;
|
|
40103
40516
|
_this.viewOnly = true;
|
|
40104
40517
|
_this.containerId = _this._commonService.guid();
|
|
40105
40518
|
_this.height = 400;
|
|
@@ -40518,7 +40931,7 @@
|
|
|
40518
40931
|
StateMachinesDesignerComponent.decorators = [
|
|
40519
40932
|
{ type: i0.Component, args: [{
|
|
40520
40933
|
selector: 'statemachines-designer',
|
|
40521
|
-
template: "<div class=\"state-control\" [ngStyle]=\"holderStyle\" [class.highlight]=\"highlighting\">\r\n <tn-custom-scrollbar #scrollbar [ngStyle]=\"{ height: '100%', display: 'block'}\"
|
|
40934
|
+
template: "<div class=\"state-control\" [ngStyle]=\"holderStyle\" [class.highlight]=\"highlighting\">\r\n <tn-custom-scrollbar *ngIf=\"useScrollBar\" #scrollbar [ngStyle]=\"{ height: '100%', display: 'block'}\"\r\n [config]=\"{suppressScrollX : true}\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n </tn-custom-scrollbar>\r\n <ng-container *ngIf=\"!useScrollBar\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n </ng-container>\r\n <div class=\"container-note\">\r\n <span *ngIf=\"!viewOnly\"><i class=\"fas fa-info-circle\"></i> Click \u0111\u00FAp v\u00E0o v\u00F9ng tr\u1ED1ng \u0111\u1EC3 th\u00EAm m\u1EDBi tr\u1EA1ng th\u00E1i\r\n </span>\r\n\r\n <button (click)=\"copyWfToClipboard()\" pButton type=\"button\" pTooltip=\"Sao ch\u00E9p\" tooltipPosition=\"top\"\r\n class=\"p-button-rounded p-button-info p-button-outlined p-ripple p-button p-component p-button-icon-only\">\r\n <i class=\"fas fa-copy\"></i>\r\n </button>\r\n\r\n <button *ngIf=\"!viewOnly\" (click)=\"pasteWfToClipboard()\" pButton type=\"button\" label=\"Success\" pTooltip=\"D\u00E1n\"\r\n tooltipPosition=\"top\"\r\n class=\"p-button-rounded p-button-success p-button-outlined p-ripple p-button p-component p-button-icon-only\">\r\n <i class=\"fas fa-paste\"></i>\r\n </button>\r\n\r\n <button (click)=\"fullScreen(!fullScreenMode)\" pButton type=\"button\" label=\"Success\" pTooltip=\"M\u1EDF r\u1ED9ng\"\r\n tooltipPosition=\"top\"\r\n class=\"p-button-rounded p-button-secondary p-button-outlined p-ripple p-button p-component p-button-icon-only\">\r\n <i *ngIf=\"!fullScreenMode\" class=\"fas fa-expand-arrows-alt\"></i>\r\n <i *ngIf=\"fullScreenMode\" class=\"fas fa-compress-arrows-alt\"></i>\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<ng-template #content>\r\n <div *ngIf=\"jsPlumbReady\" #container [id]=\"containerId\" class=\"container\" [ngClass]=\"viewOnly?'':'editable'\"\r\n [ngStyle]=\"{ height: viewHeight + 'px' }\" (dblclick)=\"createNewNode($event, container)\">\r\n <ng-container *ngIf=\"data.machines.length > 0\">\r\n <state *ngFor=\"let machine of data.machines\" [id]=\"containerId + '_' + machine.id\" [machine]=\"machine\"\r\n [viewOnly]=\"viewOnly\" class=\"state-node\"\r\n [ngStyle]=\"{'left': machine.location[0] + 'px', 'top': machine.location[1] + 'px'}\"\r\n [jsPlumbInstance]=\"jsPlumbInstance\" [containerId]=\"containerId\" (onEdit)=\"editNode($event)\"\r\n (onDelete)=\"deleteNode($event)\" (onReady)=\"checkStatesReadyThenRenderConnections($event)\">\r\n </state>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<p-contextMenu #contextMenu [appendTo]=\"'body'\" [model]=\"buttonContexts\"></p-contextMenu>\r\n\r\n<tn-dialog *ngIf=\"stateMetadataModel.showEditForm\" #dialog [styleClass]=\"'address-form'\"\r\n [header]=\"'Th\u00F4ng tin tr\u1EA1ng th\u00E1i' | translate\" [popupSize]=\"stateMetadataModel.popupSize\"\r\n (onHide)=\"hideStateMetadataForm()\">\r\n <state-metadata #formBase [data]=\"currentState\" [location]=\"locationWhenAdd\" [machinesData]=\"data\"\r\n (onSaved)=\"handleSavedStateMetadata($event)\" (onCancel)=\"hideStateMetadataForm()\"\r\n (onRemove)=\"handleRemoveFromDialog()\">\r\n </state-metadata>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"stateMachineConnectionModel.showEditForm\" #dialog [styleClass]=\"'address-form'\"\r\n [useDefaultScrollBar]=\"true\" [header]=\"'Th\u00F4ng tin \u0111\u01B0\u1EDDng n\u1ED1i' | translate\"\r\n [popupSize]=\"stateMachineConnectionModel.popupSize\" (onHide)=\"hideConnectionForm()\">\r\n <statemachines-connection-metadata #formBase [data]=\"currentConnectionObject.connectionMetadata\"\r\n [designerContext]=\"context\" [machinesData]=\"data\" [viewOnly]=\"viewOnly\"\r\n (onSaved)=\"handleSavedConnection($event)\" (onCancel)=\"hideConnectionForm()\"\r\n (onRemove)=\"handleRemoveConnectionFromDialog()\">\r\n </statemachines-connection-metadata>\r\n</tn-dialog>",
|
|
40522
40935
|
providers: [ComponentContextService],
|
|
40523
40936
|
styles: [".state-control{border:1px solid #ced4da;border-radius:3px;overflow:hidden;position:relative}.state-control .container{height:1500px;position:relative}.state-control .container .state-node{display:block;height:100px;max-height:100px;position:absolute;width:150px}.state-control .container-note{display:inline-block;font-weight:100;margin:0;padding:10px 14px;position:absolute;text-align:right;top:0;width:100%}.state-control .container-note span{background:#ffeb3b;line-height:30px;margin-right:10px;padding:5px}.state-control .container-note button{margin-right:5px}:host ::ng-deep .jtk-hover{z-index:1}:host ::ng-deep .conn-label{background:rgba(97,183,207,.30196078431372547);border:1px dashed #c5c5c5;padding:5px;z-index:2}:host ::ng-deep .conn-label:hover{background:#fff}:host ::ng-deep .conn-label.jtk-hover{background:#44a7c3;border:none;color:#fff;z-index:3}:host ::ng-deep .editable .conn-label,:host ::ng-deep .editable .jtk-connector,:host ::ng-deep .editable .jtk-endpoint,:host ::ng-deep .editable path{cursor:pointer}::ng-deep .state-control.highlight .conn-label,::ng-deep .state-control.highlight .jtk-connector,::ng-deep .state-control.highlight state{opacity:.3}::ng-deep .state-control.highlight .conn-label.--current,::ng-deep .state-control.highlight .jtk-connector.--current,::ng-deep .state-control.highlight state.--current{opacity:unset}"]
|
|
40524
40937
|
},] }
|
|
@@ -40530,6 +40943,7 @@
|
|
|
40530
40943
|
StateMachinesDesignerComponent.propDecorators = {
|
|
40531
40944
|
containerDOM: [{ type: i0.ViewChild, args: ['container', { static: true },] }],
|
|
40532
40945
|
contextMenu: [{ type: i0.ViewChild, args: ['contextMenu', { static: false },] }],
|
|
40946
|
+
useScrollBar: [{ type: i0.Input }],
|
|
40533
40947
|
viewOnly: [{ type: i0.Input }],
|
|
40534
40948
|
data: [{ type: i0.Input }],
|
|
40535
40949
|
currentConnection: [{ type: i0.Input }],
|
|
@@ -41760,7 +42174,8 @@
|
|
|
41760
42174
|
this.bounceNoti = false;
|
|
41761
42175
|
};
|
|
41762
42176
|
TnAppNotificationComponent.prototype.handleClicked = function () {
|
|
41763
|
-
this.
|
|
42177
|
+
var domain = this.environment.clientDomain.thongbaoDomain;
|
|
42178
|
+
this._router.navigate([domain + "/thongbao-chuadoc"]);
|
|
41764
42179
|
};
|
|
41765
42180
|
return TnAppNotificationComponent;
|
|
41766
42181
|
}(ComponentBase));
|
|
@@ -42387,9 +42802,8 @@
|
|
|
42387
42802
|
});
|
|
42388
42803
|
};
|
|
42389
42804
|
TnTinymceComponent.prototype.writeValue = function (obj) {
|
|
42390
|
-
if (obj == null)
|
|
42805
|
+
if (obj == null)
|
|
42391
42806
|
obj = '';
|
|
42392
|
-
}
|
|
42393
42807
|
this.model = obj;
|
|
42394
42808
|
if (this.editor) {
|
|
42395
42809
|
this.editor.setContent(this.model);
|
|
@@ -42473,7 +42887,7 @@
|
|
|
42473
42887
|
e.originalEvent.preventDefault();
|
|
42474
42888
|
_this.handlePaste(e.originalEvent).then(function (content) {
|
|
42475
42889
|
if (content) {
|
|
42476
|
-
//content = content.replace(/<!\[if[\s\S]*?>/gm, '').replace(/<!\[endif[\s\S]*?>/gm, '');
|
|
42890
|
+
// content = content.replace(/<!\[if[\s\S]*?>/gm, '').replace(/<!\[endif[\s\S]*?>/gm, '');
|
|
42477
42891
|
content = _this.normalizeHTML(content, '<![if !supportLists]>', '<![endif]>');
|
|
42478
42892
|
content = _this.normalizeHTML(content, '<![if !msEquation]>', '<![endif]>');
|
|
42479
42893
|
editor.execCommand('mceInsertContent', false, content);
|
|
@@ -42508,87 +42922,13 @@
|
|
|
42508
42922
|
});
|
|
42509
42923
|
editor.setContent(_this.model);
|
|
42510
42924
|
};
|
|
42511
|
-
|
|
42512
|
-
return {
|
|
42513
|
-
selector: '#' + this.id,
|
|
42514
|
-
height: this.height,
|
|
42515
|
-
plugins: [
|
|
42516
|
-
'advlist autolink lists link image charmap print preview anchor textcolor searchreplace visualblocks code fullscreen insertdatetime media table media code lists colorpicker imagetools tabfocus editFileNew addNews'
|
|
42517
|
-
],
|
|
42518
|
-
toolbar: 'formatselect | bold italic Strikethrough forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | table link editFileNew addNews | print removeformat undo redo | fullscreen ',
|
|
42519
|
-
content_css: [
|
|
42520
|
-
'/assets/vendor/tinymce/custom.css'
|
|
42521
|
-
],
|
|
42522
|
-
imagetools_toolbar: 'rotateleft rotateright | flipv fliph | editimage imageoptions',
|
|
42523
|
-
language: 'vi_VN',
|
|
42524
|
-
statusbar: false,
|
|
42525
|
-
tabfocus_elements: ':prev,:next',
|
|
42526
|
-
init_instance_callback: callbackFunc,
|
|
42527
|
-
mobile: {
|
|
42528
|
-
theme: 'silver',
|
|
42529
|
-
plugins: ['advlist autolink lists link image charmap print preview anchor textcolor searchreplace visualblocks code fullscreen insertdatetime media table media code lists colorpicker imagetools tabfocus textcolor'],
|
|
42530
|
-
toolbar: 'bold italic Strikethrough forecolor backcolor | bullist numlist | fullscreen'
|
|
42531
|
-
},
|
|
42532
|
-
paste_data_images: true
|
|
42533
|
-
};
|
|
42534
|
-
}
|
|
42535
|
-
else if (mode == 'medium') {
|
|
42536
|
-
return {
|
|
42537
|
-
selector: '#' + this.id,
|
|
42538
|
-
height: this.height,
|
|
42539
|
-
plugins: ['advlist autolink lists link image charmap print preview anchor textcolor searchreplace visualblocks code fullscreen insertdatetime media table media code lists colorpicker imagetools tabfocus textcolor'],
|
|
42540
|
-
toolbar: 'formatselect | bold italic Strikethrough forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | table link | print removeformat undo redo | fullscreen',
|
|
42541
|
-
content_css: [
|
|
42542
|
-
'/assets/vendor/tinymce/custom.css'
|
|
42543
|
-
],
|
|
42544
|
-
imagetools_toolbar: 'rotateleft rotateright | flipv fliph | editimage imageoptions',
|
|
42545
|
-
menubar: false,
|
|
42546
|
-
language: 'vi_VN',
|
|
42547
|
-
statusbar: false,
|
|
42548
|
-
tabfocus_elements: ':prev,:next',
|
|
42549
|
-
init_instance_callback: callbackFunc,
|
|
42550
|
-
mobile: {
|
|
42551
|
-
theme: 'silver',
|
|
42552
|
-
plugins: ['advlist autolink lists link image charmap print preview anchor textcolor searchreplace visualblocks code fullscreen insertdatetime media table media code lists colorpicker imagetools tabfocus textcolor'],
|
|
42553
|
-
toolbar: 'bold italic Strikethrough forecolor backcolor | bullist numlist | fullscreen'
|
|
42554
|
-
},
|
|
42555
|
-
paste_data_images: true
|
|
42556
|
-
};
|
|
42557
|
-
}
|
|
42558
|
-
else if (mode == 'simple') {
|
|
42559
|
-
return {
|
|
42560
|
-
selector: '#' + this.id,
|
|
42561
|
-
height: this.height,
|
|
42562
|
-
plugins: ['advlist autolink lists link image charmap print preview anchor textcolor searchreplace visualblocks code fullscreen insertdatetime media table media code lists colorpicker imagetools tabfocus textcolor'],
|
|
42563
|
-
toolbar: 'bold italic Strikethrough forecolor backcolor | bullist numlist | fullscreen',
|
|
42564
|
-
content_css: [
|
|
42565
|
-
'/assets/vendor/tinymce/custom.css'
|
|
42566
|
-
],
|
|
42567
|
-
imagetools_toolbar: 'rotateleft rotateright | flipv fliph | editimage imageoptions',
|
|
42568
|
-
menubar: false,
|
|
42569
|
-
language: 'vi_VN',
|
|
42570
|
-
statusbar: false,
|
|
42571
|
-
tabfocus_elements: ':prev,:next',
|
|
42572
|
-
init_instance_callback: callbackFunc,
|
|
42573
|
-
mobile: {
|
|
42574
|
-
theme: 'silver',
|
|
42575
|
-
plugins: ['advlist autolink lists link image charmap print preview anchor textcolor searchreplace visualblocks code fullscreen insertdatetime media table media code lists colorpicker imagetools tabfocus textcolor'],
|
|
42576
|
-
toolbar: 'fullscreen | bold italic Strikethrough forecolor backcolor | bullist numlist'
|
|
42577
|
-
}
|
|
42578
|
-
};
|
|
42579
|
-
}
|
|
42580
|
-
return {
|
|
42925
|
+
var config = {
|
|
42581
42926
|
selector: '#' + this.id,
|
|
42582
42927
|
height: this.height,
|
|
42583
|
-
plugins: ['advlist autolink lists link image charmap print preview anchor textcolor searchreplace visualblocks code fullscreen insertdatetime media table media code lists colorpicker imagetools tabfocus textcolor'],
|
|
42584
|
-
toolbar: 'formatselect | bold italic Strikethrough forecolor backcolor| alignleft aligncenter alignright alignjustify | bullist numlist',
|
|
42585
|
-
// plugins: '',
|
|
42586
|
-
// toolbar: false,
|
|
42587
42928
|
content_css: [
|
|
42588
42929
|
'/assets/vendor/tinymce/custom.css'
|
|
42589
42930
|
],
|
|
42590
42931
|
imagetools_toolbar: 'rotateleft rotateright | flipv fliph | editimage imageoptions',
|
|
42591
|
-
menubar: false,
|
|
42592
42932
|
language: 'vi_VN',
|
|
42593
42933
|
statusbar: false,
|
|
42594
42934
|
tabfocus_elements: ':prev,:next',
|
|
@@ -42596,10 +42936,34 @@
|
|
|
42596
42936
|
mobile: {
|
|
42597
42937
|
theme: 'silver',
|
|
42598
42938
|
plugins: ['advlist autolink lists link image charmap print preview anchor textcolor searchreplace visualblocks code fullscreen insertdatetime media table media code lists colorpicker imagetools tabfocus textcolor'],
|
|
42599
|
-
|
|
42600
|
-
},
|
|
42601
|
-
paste_data_images: true
|
|
42939
|
+
}
|
|
42602
42940
|
};
|
|
42941
|
+
if (mode == 'full') {
|
|
42942
|
+
config.plugins = [
|
|
42943
|
+
'advlist autolink lists link image charmap print preview anchor textcolor searchreplace visualblocks code fullscreen insertdatetime media table media code lists colorpicker imagetools tabfocus editFileNew addNews'
|
|
42944
|
+
];
|
|
42945
|
+
config.toolbar = 'formatselect | bold italic Strikethrough forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | table link editFileNew addNews | print removeformat undo redo | fullscreen ';
|
|
42946
|
+
config.mobile.toolbar = 'bold italic Strikethrough forecolor backcolor | bullist numlist | fullscreen';
|
|
42947
|
+
config.paste_data_images = true;
|
|
42948
|
+
return config;
|
|
42949
|
+
}
|
|
42950
|
+
else if (mode == 'medium') {
|
|
42951
|
+
config.plugins = ['advlist autolink lists link image charmap print preview anchor textcolor searchreplace visualblocks code fullscreen insertdatetime media table media code lists colorpicker imagetools tabfocus textcolor'];
|
|
42952
|
+
config.toolbar = 'formatselect | bold italic Strikethrough forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | table link | print removeformat undo redo | fullscreen';
|
|
42953
|
+
config.mobile.toolbar = 'bold italic Strikethrough forecolor backcolor | bullist numlist | fullscreen';
|
|
42954
|
+
config.paste_data_images = true;
|
|
42955
|
+
return config;
|
|
42956
|
+
}
|
|
42957
|
+
else if (mode == 'simple') {
|
|
42958
|
+
config.plugins = ['advlist autolink lists link image charmap print preview anchor textcolor searchreplace visualblocks code fullscreen insertdatetime media table media code lists colorpicker imagetools tabfocus textcolor'];
|
|
42959
|
+
config.toolbar = 'bold italic Strikethrough forecolor backcolor | bullist numlist | fullscreen';
|
|
42960
|
+
config.mobile.toolbar = 'fullscreen | bold italic Strikethrough forecolor backcolor | bullist numlist';
|
|
42961
|
+
}
|
|
42962
|
+
config.plugins = ['advlist autolink lists link image charmap print preview anchor textcolor searchreplace visualblocks code fullscreen insertdatetime media table media code lists colorpicker imagetools tabfocus textcolor'];
|
|
42963
|
+
config.toolbar = 'formatselect | bold italic Strikethrough forecolor backcolor| alignleft aligncenter alignright alignjustify | bullist numlist';
|
|
42964
|
+
config.toolbar = 'bold italic Strikethrough forecolor backcolor | bullist numlist | fullscreen';
|
|
42965
|
+
config.paste_data_images = true;
|
|
42966
|
+
return config;
|
|
42603
42967
|
};
|
|
42604
42968
|
TnTinymceComponent.prototype.normalizeHTML = function (content, begin, end) {
|
|
42605
42969
|
var index = content.indexOf(begin);
|
|
@@ -42672,9 +43036,8 @@
|
|
|
42672
43036
|
while (index > -1) {
|
|
42673
43037
|
var p1 = pastedData_1.substring(0, index);
|
|
42674
43038
|
var index2 = pastedData_1.indexOf('/>', index);
|
|
42675
|
-
if (index == -1)
|
|
43039
|
+
if (index == -1)
|
|
42676
43040
|
break;
|
|
42677
|
-
}
|
|
42678
43041
|
else {
|
|
42679
43042
|
var p2 = pastedData_1.substring(index2 + 2);
|
|
42680
43043
|
var imageStr = '';
|
|
@@ -45460,6 +45823,9 @@
|
|
|
45460
45823
|
_this._coCauToChucService = _coCauToChucService;
|
|
45461
45824
|
_this._userGroupService = _userGroupService;
|
|
45462
45825
|
_this._roleService = _roleService;
|
|
45826
|
+
// Là form lịch sử của task nhưng mở từ giao diện của đối tượng mà task gắn vào
|
|
45827
|
+
// Ở form này thì chỉ xem lịch sử chứ k dc làm gì hết
|
|
45828
|
+
_this.isRelativeForm = false;
|
|
45463
45829
|
_this.layoutFile = exports.EnumFileLayout;
|
|
45464
45830
|
_this.enumWorkflowHistoryStatus = exports.EnumWorkflowHistoryStatus;
|
|
45465
45831
|
_this.machinesData = { machines: [], connections: [] };
|
|
@@ -45479,10 +45845,13 @@
|
|
|
45479
45845
|
this.setting.hiddenButtons = true;
|
|
45480
45846
|
this.setting.hiddenCheckbox = true;
|
|
45481
45847
|
var userCurrent = this._userService.getCurrentUser();
|
|
45482
|
-
if (userCurrent.userName != 'admin') {
|
|
45848
|
+
if (userCurrent.userName != 'admin' || this.isRelativeForm) {
|
|
45483
45849
|
this.setting.hiddenFunctionColumn = true;
|
|
45484
45850
|
}
|
|
45485
|
-
|
|
45851
|
+
if (!this.tableName) {
|
|
45852
|
+
this.tableName = this.businessSetting.baseService.entityName;
|
|
45853
|
+
}
|
|
45854
|
+
this._entityWorkflowHistoryService.setCurrentServiceUri(this.tableName);
|
|
45486
45855
|
if (this.currentWorkflow == null) {
|
|
45487
45856
|
this.model.ready = false;
|
|
45488
45857
|
// Kiểm tra nếu account là admin thì tìm lịch sử cuối cùng của bản ghi để xác định workflow code
|
|
@@ -45684,7 +46053,7 @@
|
|
|
45684
46053
|
WorkflowHistoryNewComponent.prototype.modifyGridInfo = function (gridInfo) {
|
|
45685
46054
|
return __awaiter(this, void 0, void 0, function () {
|
|
45686
46055
|
return __generator(this, function (_a) {
|
|
45687
|
-
gridInfo.filters.unshift(this.newFilter('tableName', exports.Operator.equal, this.
|
|
46056
|
+
gridInfo.filters.unshift(this.newFilter('tableName', exports.Operator.equal, this.tableName), this.newFilter('itemId', exports.Operator.equal, this.item.id), this.newFilter('workflowCode', exports.Operator.equal, this.item.__workflowCode));
|
|
45688
46057
|
gridInfo.sorts.unshift(this.newSort('created', -1));
|
|
45689
46058
|
return [2 /*return*/];
|
|
45690
46059
|
});
|
|
@@ -45816,9 +46185,9 @@
|
|
|
45816
46185
|
WorkflowHistoryNewComponent.decorators = [
|
|
45817
46186
|
{ type: i0.Component, args: [{
|
|
45818
46187
|
selector: 'workflow-history-new',
|
|
45819
|
-
template: "<div style=\"height: 100%\"
|
|
46188
|
+
template: "<div style=\"height: 100%\">\r\n <as-split direction=\"vertical\">\r\n <as-split-area [size]=\"40\">\r\n <div class=\"state-designer-container\">\r\n <div>\r\n S\u01A1 \u0111\u1ED3 quy tr\u00ECnh\r\n </div>\r\n <div>\r\n <tn-custom-scrollbar>\r\n <statemachines-designer [data]=\"machinesData\" [currentConnection]=\"currentConnection\"\r\n [viewOnly]=\"true\" [useScrollBar]=\"false\">\r\n </statemachines-designer>\r\n <after-view-checked (loaded)=\"setMachinesAndConnection()\"></after-view-checked>\r\n </tn-custom-scrollbar>\r\n </div>\r\n </div>\r\n </as-split-area>\r\n <as-split-area [size]=\"60\">\r\n <div style=\"height: 100%\">\r\n <crud-list *ngIf=\"model.ready\" #crudList [model]=\"model\" [setting]=\"setting\"\r\n [dataSource]=\"model.dataSource\" (onReload)=\"_triggerProcessData($event)\" (onAdd)=\"_add($event)\"\r\n (onEdit)=\"_edit($event)\" (onView)=\"_view($event)\" (onDelete)=\"_delete($event)\"\r\n (onDeleteMultiple)=\"_deleteMultiple($event)\" (onReloaded)=\"_handleReloaded($event)\"\r\n (onRowSelect)=\"handleRowSelect($event)\">\r\n <ng-template #note let-rowData=\"rowData\">\r\n <div *ngIf=\"rowData.note==null?'':rowData.note\" [innerHTML]=\"rowData.note | safeHtml\"></div>\r\n </ng-template>\r\n <ng-template #receiver let-rowData=\"rowData\">\r\n <div *ngIf=\"!rowData.notInMainThread\" class=\"container-receiver\">\r\n <div *ngIf=\"rowData.struserIds\"><b>C\u00E1n b\u1ED9: </b>{{rowData.struserIds}}</div>\r\n <div *ngIf=\"rowData.strdonViIds\"><b>\u0110\u01A1n v\u1ECB: </b>{{rowData.strdonViIds}}</div>\r\n <div *ngIf=\"rowData.strgroupIds\"><b>Nh\u00F3m: </b>{{rowData.strgroupIds}}</div>\r\n <div *ngIf=\"rowData.strroleIds\"><b>Vai tr\u00F2: </b>{{rowData.strroleIds}}</div>\r\n </div>\r\n <div *ngIf=\"rowData.notInMainThread\">\r\n <div *ngFor=\"let changedField of rowData.jsonModelChange\">\r\n {{changedField.field}},\r\n {{changedField.valueOld}} => {{changedField.valueNew}}\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #receiverView let-rowData=\"rowData\">\r\n <div class=\"container-receiver\">\r\n <div *ngIf=\"rowData.struserViewIds\"><b>C\u00E1n b\u1ED9: </b>{{rowData.struserViewIds}}</div>\r\n <div *ngIf=\"rowData.strdonViViewIds\"><b>\u0110\u01A1n v\u1ECB: </b>{{rowData.strdonViViewIds}}</div>\r\n <div *ngIf=\"rowData.strgroupViewIds\"><b>Nh\u00F3m: </b>{{rowData.strgroupViewIds}}</div>\r\n <div *ngIf=\"rowData.strroleViewIds\"><b>Vai tr\u00F2: </b>{{rowData.strroleViewIds}}</div>\r\n </div>\r\n </ng-template>\r\n <ng-template #fileDinhKem let-rowData=\"rowData\">\r\n <file-manager [serviceCode]=\"_workflowHistoryService.serviceCode\"\r\n [entity]=\"_workflowHistoryService.entityName\" [entityKey]=\"rowData.id\"\r\n [fileDataService]=\"fileDataService\" [layout]=\"layoutFile.SIMPLE\" [readonly]=\"true\">\r\n </file-manager>\r\n </ng-template>\r\n <ng-template #function let-rowData=\"rowData\">\r\n <button *ngIf=\"rowData.status == enumWorkflowHistoryStatus.IN_MAIN_THREAD\" pButton\r\n icon=\"pi pi-replay\" class=\"p-button-text p-button-rounded link-or-action\"\r\n pTooltip=\"Thu h\u1ED3i v\u1EC1 b\u01B0\u1EDBc n\u00E0y\" tooltipPosition=\"top\"\r\n (click)=\"rollbackByHistory(rowData)\"></button>\r\n </ng-template>\r\n </crud-list>\r\n </div>\r\n </as-split-area>\r\n </as-split>\r\n</div>",
|
|
45820
46189
|
providers: [ComponentContextService],
|
|
45821
|
-
styles: [".state-designer-container>div:first-child{font-size:.9em;font-weight:700;padding:.5em 0}.container-receiver div{margin-bottom:10px}.container-receiver div:last-child{margin-bottom:0}::ng-deep workflow-history-new tr.recalled{opacity:.5}"]
|
|
46190
|
+
styles: [".state-designer-container{display:flex;flex-direction:column;height:100%}.state-designer-container>div:first-child{font-size:.9em;font-weight:700;padding:.5em 0}.state-designer-container>div:last-child{flex:1 1;overflow:auto}.container-receiver div{margin-bottom:10px}.container-receiver div:last-child{margin-bottom:0}::ng-deep workflow-history-new tr.recalled{opacity:.5}"]
|
|
45822
46191
|
},] }
|
|
45823
46192
|
];
|
|
45824
46193
|
WorkflowHistoryNewComponent.ctorParameters = function () { return [
|
|
@@ -45831,6 +46200,8 @@
|
|
|
45831
46200
|
]; };
|
|
45832
46201
|
WorkflowHistoryNewComponent.propDecorators = {
|
|
45833
46202
|
businessSetting: [{ type: i0.Input }],
|
|
46203
|
+
isRelativeForm: [{ type: i0.Input }],
|
|
46204
|
+
tableName: [{ type: i0.Input }],
|
|
45834
46205
|
item: [{ type: i0.Input }],
|
|
45835
46206
|
workflowSetting: [{ type: i0.Input }]
|
|
45836
46207
|
};
|
|
@@ -46213,200 +46584,6 @@
|
|
|
46213
46584
|
onCancel: [{ type: i0.Output }]
|
|
46214
46585
|
};
|
|
46215
46586
|
|
|
46216
|
-
var CauHinhWorkflowService = /** @class */ (function (_super) {
|
|
46217
|
-
__extends(CauHinhWorkflowService, _super);
|
|
46218
|
-
function CauHinhWorkflowService(http, injector, _moduleConfigService) {
|
|
46219
|
-
var _this = _super.call(this, http, injector, _moduleConfigService.getConfig().environment.apiDomain.congviecEndpoint + "/" + _moduleConfigService.getConfig().environment.apiVersion + "/CauHinhWorkflow") || this;
|
|
46220
|
-
_this._moduleConfigService = _moduleConfigService;
|
|
46221
|
-
_this.serviceCode = 'congviec';
|
|
46222
|
-
_this.entityName = 'CauHinhWorkflow';
|
|
46223
|
-
_this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.congviecEndpoint;
|
|
46224
|
-
return _this;
|
|
46225
|
-
}
|
|
46226
|
-
return CauHinhWorkflowService;
|
|
46227
|
-
}(BaseService));
|
|
46228
|
-
CauHinhWorkflowService.ɵprov = i0.ɵɵdefineInjectable({ factory: function CauHinhWorkflowService_Factory() { return new CauHinhWorkflowService(i0.ɵɵinject(i1$1.HttpClient), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(ModuleConfigService)); }, token: CauHinhWorkflowService, providedIn: "root" });
|
|
46229
|
-
CauHinhWorkflowService.decorators = [
|
|
46230
|
-
{ type: i0.Injectable, args: [{
|
|
46231
|
-
providedIn: 'root'
|
|
46232
|
-
},] }
|
|
46233
|
-
];
|
|
46234
|
-
CauHinhWorkflowService.ctorParameters = function () { return [
|
|
46235
|
-
{ type: i1$1.HttpClient },
|
|
46236
|
-
{ type: i0.Injector },
|
|
46237
|
-
{ type: ModuleConfigService }
|
|
46238
|
-
]; };
|
|
46239
|
-
|
|
46240
|
-
var DmLoaiCongViecService = /** @class */ (function (_super) {
|
|
46241
|
-
__extends(DmLoaiCongViecService, _super);
|
|
46242
|
-
function DmLoaiCongViecService(http, injector, _moduleConfigService) {
|
|
46243
|
-
var _this = _super.call(this, http, injector, _moduleConfigService.getConfig().environment.apiDomain.congviecEndpoint + "/" + _moduleConfigService.getConfig().environment.apiVersion + "/DM_LoaiCongViec") || this;
|
|
46244
|
-
_this._moduleConfigService = _moduleConfigService;
|
|
46245
|
-
_this.serviceCode = 'congviec';
|
|
46246
|
-
_this.entityName = 'DM_LoaiCongViec';
|
|
46247
|
-
_this.dicLoaiCongViec = {};
|
|
46248
|
-
_this.keyIdLoaiCongViecRoot = 'root';
|
|
46249
|
-
_this.getWorkflowSettingByIdLoaiCongViec = function (idLoaiCongViec) { return __awaiter(_this, void 0, void 0, function () {
|
|
46250
|
-
var result, idLoaiCongViecs, i;
|
|
46251
|
-
return __generator(this, function (_a) {
|
|
46252
|
-
switch (_a.label) {
|
|
46253
|
-
case 0:
|
|
46254
|
-
if (!!this.dicWorkflowByLoaiCongViec) return [3 /*break*/, 2];
|
|
46255
|
-
return [4 /*yield*/, this.getDatasourceWorkflowCongViec()];
|
|
46256
|
-
case 1:
|
|
46257
|
-
_a.sent();
|
|
46258
|
-
_a.label = 2;
|
|
46259
|
-
case 2:
|
|
46260
|
-
if (!idLoaiCongViec) {
|
|
46261
|
-
return [2 /*return*/, this.dicWorkflowByLoaiCongViec[this.keyIdLoaiCongViecRoot]];
|
|
46262
|
-
}
|
|
46263
|
-
result = this.dicWorkflowByLoaiCongViec[idLoaiCongViec];
|
|
46264
|
-
if (result)
|
|
46265
|
-
return [2 /*return*/, result];
|
|
46266
|
-
return [4 /*yield*/, this.getIdLoaiCongViecs(idLoaiCongViec)];
|
|
46267
|
-
case 3:
|
|
46268
|
-
idLoaiCongViecs = _a.sent();
|
|
46269
|
-
if (!Array.isArray(idLoaiCongViecs))
|
|
46270
|
-
return [2 /*return*/, null];
|
|
46271
|
-
if (idLoaiCongViecs.length > 1) {
|
|
46272
|
-
for (i = idLoaiCongViecs.length - 2; i >= 0; i--) {
|
|
46273
|
-
result = this.dicWorkflowByLoaiCongViec[idLoaiCongViecs[i]];
|
|
46274
|
-
if (result)
|
|
46275
|
-
return [2 /*return*/, result];
|
|
46276
|
-
}
|
|
46277
|
-
}
|
|
46278
|
-
if (!result) {
|
|
46279
|
-
result = this.dicWorkflowByLoaiCongViec[this.keyIdLoaiCongViecRoot];
|
|
46280
|
-
}
|
|
46281
|
-
return [2 /*return*/, result];
|
|
46282
|
-
}
|
|
46283
|
-
});
|
|
46284
|
-
}); };
|
|
46285
|
-
_this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.congviecEndpoint;
|
|
46286
|
-
return _this;
|
|
46287
|
-
}
|
|
46288
|
-
DmLoaiCongViecService.prototype.getDatasourceWorkflowCongViec = function () {
|
|
46289
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
46290
|
-
var cauHinhWorkflowService, cauHinhWorkflows, notifierService, workflowCodes, stateMachinesService, workflows;
|
|
46291
|
-
var _this = this;
|
|
46292
|
-
return __generator(this, function (_a) {
|
|
46293
|
-
switch (_a.label) {
|
|
46294
|
-
case 0:
|
|
46295
|
-
if (!this.dicWorkflowByLoaiCongViec) {
|
|
46296
|
-
this.dicWorkflowByLoaiCongViec = {};
|
|
46297
|
-
}
|
|
46298
|
-
cauHinhWorkflowService = this._injector.get(CauHinhWorkflowService);
|
|
46299
|
-
return [4 /*yield*/, cauHinhWorkflowService.getAll([], 'idLoaiCongViec,workflowCodes,workflowCode')];
|
|
46300
|
-
case 1:
|
|
46301
|
-
cauHinhWorkflows = (_a.sent()).data;
|
|
46302
|
-
notifierService = this._injector.get(NotifierService);
|
|
46303
|
-
if (cauHinhWorkflows == null) {
|
|
46304
|
-
notifierService.showWarning('Dịch vụ workflow không phản hồi');
|
|
46305
|
-
return [2 /*return*/, []];
|
|
46306
|
-
}
|
|
46307
|
-
workflowCodes = [];
|
|
46308
|
-
cauHinhWorkflows.forEach(function (itemWorkflowSetting) {
|
|
46309
|
-
if (itemWorkflowSetting.workflowCodes && !Array.isArray(itemWorkflowSetting.workflowCodes)) {
|
|
46310
|
-
itemWorkflowSetting.workflowCodes = itemWorkflowSetting.workflowCodes.split(',');
|
|
46311
|
-
}
|
|
46312
|
-
else {
|
|
46313
|
-
itemWorkflowSetting.workflowCodes = [];
|
|
46314
|
-
}
|
|
46315
|
-
itemWorkflowSetting.workflowCodes.forEach(function (workflowCode) {
|
|
46316
|
-
if (workflowCodes.indexOf(workflowCode) == -1) {
|
|
46317
|
-
workflowCodes.push(workflowCode);
|
|
46318
|
-
}
|
|
46319
|
-
});
|
|
46320
|
-
});
|
|
46321
|
-
stateMachinesService = this._injector.get(StateMachinesService);
|
|
46322
|
-
return [4 /*yield*/, stateMachinesService.getDataDropdownByFilter([
|
|
46323
|
-
this.newFilter('code', exports.Operator.in, workflowCodes)
|
|
46324
|
-
], new DropdownOptions({
|
|
46325
|
-
valueField: 'code',
|
|
46326
|
-
displayField: 'title',
|
|
46327
|
-
fieldPlus: 'data'
|
|
46328
|
-
}))];
|
|
46329
|
-
case 2:
|
|
46330
|
-
workflows = (_a.sent());
|
|
46331
|
-
workflows.forEach(function (item) {
|
|
46332
|
-
item.data = JSON.parse(item.data);
|
|
46333
|
-
var stateMachineData = item.data;
|
|
46334
|
-
stateMachineData.actions = {};
|
|
46335
|
-
stateMachineData.machines.forEach(function (machine) {
|
|
46336
|
-
stateMachineData.actions[machine.code] = [];
|
|
46337
|
-
stateMachineData.connections.forEach(function (conn) {
|
|
46338
|
-
if (conn.source == machine.id) {
|
|
46339
|
-
stateMachineData.actions[machine.code].push(conn);
|
|
46340
|
-
}
|
|
46341
|
-
});
|
|
46342
|
-
});
|
|
46343
|
-
});
|
|
46344
|
-
cauHinhWorkflows.forEach(function (itemWorkflowSetting) {
|
|
46345
|
-
itemWorkflowSetting.workflows = workflows.filter(function (q) { return itemWorkflowSetting.workflowCodes.indexOf(q.code) > -1; });
|
|
46346
|
-
if (!itemWorkflowSetting.idLoaiCongViec) {
|
|
46347
|
-
_this.dicWorkflowByLoaiCongViec[_this.keyIdLoaiCongViecRoot] = itemWorkflowSetting;
|
|
46348
|
-
}
|
|
46349
|
-
else {
|
|
46350
|
-
_this.dicWorkflowByLoaiCongViec[itemWorkflowSetting.idLoaiCongViec] = itemWorkflowSetting;
|
|
46351
|
-
}
|
|
46352
|
-
});
|
|
46353
|
-
return [2 /*return*/, workflows];
|
|
46354
|
-
}
|
|
46355
|
-
});
|
|
46356
|
-
});
|
|
46357
|
-
};
|
|
46358
|
-
DmLoaiCongViecService.prototype.getIdLoaiCongViecs = function (idLoaiCongViec) {
|
|
46359
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
46360
|
-
var notifierService, itemLoaiCongViec, idLoaiCongViecs;
|
|
46361
|
-
return __generator(this, function (_a) {
|
|
46362
|
-
switch (_a.label) {
|
|
46363
|
-
case 0:
|
|
46364
|
-
notifierService = this._injector.get(NotifierService);
|
|
46365
|
-
return [4 /*yield*/, this.getItemLoaiCongViec(idLoaiCongViec)];
|
|
46366
|
-
case 1:
|
|
46367
|
-
itemLoaiCongViec = _a.sent();
|
|
46368
|
-
if (itemLoaiCongViec == null) {
|
|
46369
|
-
notifierService.showWarning('Loại công việc không tồn tại');
|
|
46370
|
-
return [2 /*return*/, null];
|
|
46371
|
-
}
|
|
46372
|
-
idLoaiCongViecs = itemLoaiCongViec.idDuongDan.split(';').filter(function (q) { return !!q; });
|
|
46373
|
-
return [2 /*return*/, idLoaiCongViecs];
|
|
46374
|
-
}
|
|
46375
|
-
});
|
|
46376
|
-
});
|
|
46377
|
-
};
|
|
46378
|
-
DmLoaiCongViecService.prototype.getItemLoaiCongViec = function (idLoaiCongViec) {
|
|
46379
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
46380
|
-
var _a, _b;
|
|
46381
|
-
return __generator(this, function (_c) {
|
|
46382
|
-
switch (_c.label) {
|
|
46383
|
-
case 0:
|
|
46384
|
-
if (!!this.dicLoaiCongViec[idLoaiCongViec]) return [3 /*break*/, 2];
|
|
46385
|
-
_a = this.dicLoaiCongViec;
|
|
46386
|
-
_b = idLoaiCongViec;
|
|
46387
|
-
return [4 /*yield*/, this.getDetail(idLoaiCongViec)];
|
|
46388
|
-
case 1:
|
|
46389
|
-
_a[_b] = (_c.sent()).data;
|
|
46390
|
-
_c.label = 2;
|
|
46391
|
-
case 2: return [2 /*return*/, this.dicLoaiCongViec[idLoaiCongViec]];
|
|
46392
|
-
}
|
|
46393
|
-
});
|
|
46394
|
-
});
|
|
46395
|
-
};
|
|
46396
|
-
return DmLoaiCongViecService;
|
|
46397
|
-
}(BaseService));
|
|
46398
|
-
DmLoaiCongViecService.ɵprov = i0.ɵɵdefineInjectable({ factory: function DmLoaiCongViecService_Factory() { return new DmLoaiCongViecService(i0.ɵɵinject(i1$1.HttpClient), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(ModuleConfigService)); }, token: DmLoaiCongViecService, providedIn: "root" });
|
|
46399
|
-
DmLoaiCongViecService.decorators = [
|
|
46400
|
-
{ type: i0.Injectable, args: [{
|
|
46401
|
-
providedIn: 'root'
|
|
46402
|
-
},] }
|
|
46403
|
-
];
|
|
46404
|
-
DmLoaiCongViecService.ctorParameters = function () { return [
|
|
46405
|
-
{ type: i1$1.HttpClient },
|
|
46406
|
-
{ type: i0.Injector },
|
|
46407
|
-
{ type: ModuleConfigService }
|
|
46408
|
-
]; };
|
|
46409
|
-
|
|
46410
46587
|
var WorkflowSettingNewComponent = /** @class */ (function (_super) {
|
|
46411
46588
|
__extends(WorkflowSettingNewComponent, _super);
|
|
46412
46589
|
function WorkflowSettingNewComponent(_injector, _workflowSettingsService, _stateMachinesService, _dmLoaiCongViecService) {
|
|
@@ -47180,57 +47357,6 @@
|
|
|
47180
47357
|
EnumLoaiDanhSachCongViec[EnumLoaiDanhSachCongViec["CongViecLienQuan"] = 2] = "CongViecLienQuan";
|
|
47181
47358
|
})(exports.EnumLoaiDanhSachCongViec || (exports.EnumLoaiDanhSachCongViec = {}));
|
|
47182
47359
|
|
|
47183
|
-
var CongViecService$1 = /** @class */ (function (_super) {
|
|
47184
|
-
__extends(CongViecService, _super);
|
|
47185
|
-
function CongViecService(http, injector, _moduleConfigService) {
|
|
47186
|
-
var _this = _super.call(this, http, injector, _moduleConfigService.getConfig().environment.apiDomain.congviecEndpoint + "/" + _moduleConfigService.getConfig().environment.apiVersion + "/CongViec") || this;
|
|
47187
|
-
_this._moduleConfigService = _moduleConfigService;
|
|
47188
|
-
_this.serviceCode = 'congviec';
|
|
47189
|
-
_this.entityName = 'CongViec';
|
|
47190
|
-
_this.objectName = 'công việc';
|
|
47191
|
-
_this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.congviecEndpoint;
|
|
47192
|
-
return _this;
|
|
47193
|
-
}
|
|
47194
|
-
CongViecService.prototype.countByMenuState = function (data) {
|
|
47195
|
-
return this.defaultPost(this.serviceUri + "/CountByMenuState", data);
|
|
47196
|
-
};
|
|
47197
|
-
CongViecService.prototype.getDicIdByMenuState = function (data) {
|
|
47198
|
-
return this.defaultPost(this.serviceUri + "/GetDicIdByMenuState", data);
|
|
47199
|
-
};
|
|
47200
|
-
CongViecService.prototype.updateBulkIdCha = function (model) {
|
|
47201
|
-
var url = this.serviceUri + "/UpdateBulkIdCha";
|
|
47202
|
-
return this.defaultPost(url, model);
|
|
47203
|
-
};
|
|
47204
|
-
CongViecService.prototype.deleteBulkCongViecCon = function (ids) {
|
|
47205
|
-
var url = this.serviceUri + "/DeleteBulkCongViecCon";
|
|
47206
|
-
return this.defaultPost(url, ids);
|
|
47207
|
-
};
|
|
47208
|
-
CongViecService.prototype.getDataDashboardCaNhan = function (inputData) {
|
|
47209
|
-
var url = this.serviceUri + "/GetDataDashboardCaNhan";
|
|
47210
|
-
return this.defaultPost(url, inputData);
|
|
47211
|
-
};
|
|
47212
|
-
CongViecService.prototype.getDataDashboardByDonVi = function (inputData) {
|
|
47213
|
-
var url = this.serviceUri + "/GetDataDashboardByDonVi";
|
|
47214
|
-
return this.defaultPost(url, inputData);
|
|
47215
|
-
};
|
|
47216
|
-
CongViecService.prototype.getListTasksDashboard = function (dataFilter) {
|
|
47217
|
-
var url = this.serviceUri + "/getListTasksDashboard";
|
|
47218
|
-
return this.defaultPost(url, dataFilter);
|
|
47219
|
-
};
|
|
47220
|
-
return CongViecService;
|
|
47221
|
-
}(BaseService));
|
|
47222
|
-
CongViecService$1.ɵprov = i0.ɵɵdefineInjectable({ factory: function CongViecService_Factory() { return new CongViecService$1(i0.ɵɵinject(i1$1.HttpClient), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(ModuleConfigService)); }, token: CongViecService$1, providedIn: "root" });
|
|
47223
|
-
CongViecService$1.decorators = [
|
|
47224
|
-
{ type: i0.Injectable, args: [{
|
|
47225
|
-
providedIn: 'root'
|
|
47226
|
-
},] }
|
|
47227
|
-
];
|
|
47228
|
-
CongViecService$1.ctorParameters = function () { return [
|
|
47229
|
-
{ type: i1$1.HttpClient },
|
|
47230
|
-
{ type: i0.Injector },
|
|
47231
|
-
{ type: ModuleConfigService }
|
|
47232
|
-
]; };
|
|
47233
|
-
|
|
47234
47360
|
var BaseCongViecFormComponent = /** @class */ (function (_super) {
|
|
47235
47361
|
__extends(BaseCongViecFormComponent, _super);
|
|
47236
47362
|
function BaseCongViecFormComponent(_injector, _congViecService, _dmLoaiCongViecService, _dmLinhVucCongViecService, _dmPriorityService, _workflowPermissionDetailService) {
|
|
@@ -47431,6 +47557,7 @@
|
|
|
47431
47557
|
data.__textTrangThai = itemStatus.textTrangThai;
|
|
47432
47558
|
data.__workflowCode = itemStatus.workflowCode;
|
|
47433
47559
|
data.__permission = itemStatus.permission;
|
|
47560
|
+
if (!this.crudList) return [3 /*break*/, 3];
|
|
47434
47561
|
return [4 /*yield*/, this.crudList.getActionWorkflowNew(data)];
|
|
47435
47562
|
case 2:
|
|
47436
47563
|
resultGetActionWorkflow = _b.sent();
|
|
@@ -47438,7 +47565,8 @@
|
|
|
47438
47565
|
return [2 /*return*/];
|
|
47439
47566
|
_a = __read(resultGetActionWorkflow, 1), buttonContexts = _a[0];
|
|
47440
47567
|
this.buttons = buttonContexts;
|
|
47441
|
-
|
|
47568
|
+
_b.label = 3;
|
|
47569
|
+
case 3: return [2 /*return*/];
|
|
47442
47570
|
}
|
|
47443
47571
|
});
|
|
47444
47572
|
});
|
|
@@ -47497,7 +47625,7 @@
|
|
|
47497
47625
|
];
|
|
47498
47626
|
BaseCongViecFormComponent.ctorParameters = function () { return [
|
|
47499
47627
|
{ type: i0.Injector },
|
|
47500
|
-
{ type: CongViecService
|
|
47628
|
+
{ type: CongViecService },
|
|
47501
47629
|
{ type: DmLoaiCongViecService },
|
|
47502
47630
|
{ type: DmLinhVucCongViecService },
|
|
47503
47631
|
{ type: DmPriorityService },
|
|
@@ -47924,7 +48052,7 @@
|
|
|
47924
48052
|
];
|
|
47925
48053
|
BaseCongViecComponent.ctorParameters = function () { return [
|
|
47926
48054
|
{ type: i0.Injector },
|
|
47927
|
-
{ type: CongViecService
|
|
48055
|
+
{ type: CongViecService },
|
|
47928
48056
|
{ type: DmLoaiCongViecService },
|
|
47929
48057
|
{ type: DmLinhVucCongViecService },
|
|
47930
48058
|
{ type: DmPriorityService },
|
|
@@ -50473,14 +50601,14 @@
|
|
|
50473
50601
|
}
|
|
50474
50602
|
if (permission & exports.PermissionBase.EDIT) {
|
|
50475
50603
|
this.disableEdit = false;
|
|
50476
|
-
this.allowEdit = true;
|
|
50604
|
+
// this.allowEdit = true;
|
|
50477
50605
|
}
|
|
50478
50606
|
else {
|
|
50479
50607
|
this.disableEdit = true;
|
|
50480
50608
|
}
|
|
50481
50609
|
if (permission & exports.PermissionBase.DELETE) {
|
|
50482
50610
|
this.disableDelete = false;
|
|
50483
|
-
this.allowDelete = true;
|
|
50611
|
+
// this.allowDelete = true;
|
|
50484
50612
|
}
|
|
50485
50613
|
else {
|
|
50486
50614
|
this.disableDelete = true;
|
|
@@ -52689,7 +52817,7 @@
|
|
|
52689
52817
|
exports.ConditionalBuilderService = ConditionalBuilderService;
|
|
52690
52818
|
exports.CongViecLienQuanService = CongViecLienQuanService;
|
|
52691
52819
|
exports.CongViecPickerControlSchema = CongViecPickerControlSchema;
|
|
52692
|
-
exports.CongViecService = CongViecService
|
|
52820
|
+
exports.CongViecService = CongViecService;
|
|
52693
52821
|
exports.ContainerSchema = ContainerSchema;
|
|
52694
52822
|
exports.ControlTreeNode = ControlTreeNode;
|
|
52695
52823
|
exports.ConvertMoneyToWordPipe = ConvertMoneyToWordPipe;
|
|
@@ -53034,7 +53162,7 @@
|
|
|
53034
53162
|
exports.ɵbu = VanbanDiPickerComponent;
|
|
53035
53163
|
exports.ɵbv = VanbanDenPickerComponent;
|
|
53036
53164
|
exports.ɵbw = CongViecPickerComponent;
|
|
53037
|
-
exports.ɵbx = CongViecService;
|
|
53165
|
+
exports.ɵbx = CongViecService$1;
|
|
53038
53166
|
exports.ɵby = TaskWorkflowHistoriesService;
|
|
53039
53167
|
exports.ɵbz = SettingsComponent;
|
|
53040
53168
|
exports.ɵc = EntityPickerService;
|