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.
Files changed (34) hide show
  1. package/bundles/tnx-shared.umd.js +537 -409
  2. package/bundles/tnx-shared.umd.js.map +1 -1
  3. package/bundles/tnx-shared.umd.min.js +1 -1
  4. package/bundles/tnx-shared.umd.min.js.map +1 -1
  5. package/classes/base/data-form-base.d.ts +1 -0
  6. package/classes/base/data-form-base.d.ts.map +1 -1
  7. package/classes/base/data-list-base.d.ts +4 -0
  8. package/classes/base/data-list-base.d.ts.map +1 -1
  9. package/components/congviec-picker/congviec-picker.component.d.ts.map +1 -1
  10. package/components/crud/crud-form/crud-form.component.d.ts +1 -1
  11. package/components/crud/crud-list/crud-list.component.d.ts +7 -0
  12. package/components/crud/crud-list/crud-list.component.d.ts.map +1 -1
  13. package/components/statemachines/statemachines-designer/statemachines-designer.component.d.ts +1 -0
  14. package/components/statemachines/statemachines-designer/statemachines-designer.component.d.ts.map +1 -1
  15. package/components/tn-app-notification/tn-app-notification.component.d.ts.map +1 -1
  16. package/components/tn-tinymce/tn-tinymce.component.d.ts +1 -55
  17. package/components/tn-tinymce/tn-tinymce.component.d.ts.map +1 -1
  18. package/components/workflow/workflow-history-new/workflow-history-new.component.d.ts +2 -0
  19. package/components/workflow/workflow-history-new/workflow-history-new.component.d.ts.map +1 -1
  20. package/congviec/congviec/congviec-form/congviec-form.component.d.ts.map +1 -1
  21. package/esm2015/classes/base/data-form-base.js +5 -1
  22. package/esm2015/classes/base/data-list-base.js +108 -41
  23. package/esm2015/components/congviec-picker/congviec-picker.component.js +1 -1
  24. package/esm2015/components/crud/crud-list/crud-list.component.js +77 -15
  25. package/esm2015/components/share-link-by-permission/share-link-by-permission.component.js +3 -3
  26. package/esm2015/components/statemachines/statemachines-designer/statemachines-designer.component.js +4 -2
  27. package/esm2015/components/tn-app-notification/tn-app-notification.component.js +3 -2
  28. package/esm2015/components/tn-tinymce/tn-tinymce.component.js +35 -87
  29. package/esm2015/components/workflow/workflow-history-new/workflow-history-new.component.js +14 -6
  30. package/esm2015/congviec/congviec/congviec-form/congviec-form.component.js +8 -6
  31. package/fesm2015/tnx-shared.js +478 -388
  32. package/fesm2015/tnx-shared.js.map +1 -1
  33. package/package.json +2 -2
  34. 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: return [4 /*yield*/, this.getActionWorkflowNew(rowData)];
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
- var key = this.setting.baseService.getKeyWorkflowSetting();
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, itemWorkflowSetting.workflowCodes)
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 1:
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
- return [2 /*return*/];
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*/, 4];
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, dataSource.map(function (q) { return q.id; })),
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 lstItemStatus = dataStatus_1.filter(function (q) { return q.itemId == rowItem.id && q.userId == userIdCurrent_1; });
22459
- var itemStatus = null;
22460
- if (!lstItemStatus.length) {
22461
- itemStatus = {
22462
- textTrangThai: 'Chưa chạy quy trình'
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
- else {
22466
- itemStatus = lstItemStatus.find(function (q) { return (q.permission & exports.PermissionBase.EDIT) == exports.PermissionBase.EDIT; });
22467
- if (itemStatus == null) {
22468
- itemStatus = lstItemStatus[0];
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 = 4;
22491
- case 4:
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 5:
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'}\" [config]=\"{suppressScrollX : true}\">\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 </tn-custom-scrollbar>\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<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>",
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._router.navigate(["user/managemant-notification"]);
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
- if (mode == 'full') {
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
- toolbar: 'bold italic Strikethrough forecolor backcolor | bullist numlist | fullscreen'
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
- this._entityWorkflowHistoryService.setCurrentServiceUri(this.businessSetting.baseService.entityName);
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.businessSetting.baseService.entityName), this.newFilter('itemId', exports.Operator.equal, this.item.id), this.newFilter('workflowCode', exports.Operator.equal, this.item.__workflowCode));
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%\" class=\"flex-container-fit-child\">\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 <statemachines-designer [data]=\"machinesData\" [currentConnection]=\"currentConnection\" [viewOnly]=\"true\">\r\n </statemachines-designer>\r\n <after-view-checked (loaded)=\"setMachinesAndConnection()\"></after-view-checked>\r\n </div>\r\n </div>\r\n <div class=\"fit-content\">\r\n <div>\r\n <crud-list *ngIf=\"model.ready\" #crudList [model]=\"model\" [setting]=\"setting\" [dataSource]=\"model.dataSource\"\r\n (onReload)=\"_triggerProcessData($event)\" (onAdd)=\"_add($event)\" (onEdit)=\"_edit($event)\"\r\n (onView)=\"_view($event)\" (onDelete)=\"_delete($event)\" (onDeleteMultiple)=\"_deleteMultiple($event)\"\r\n (onReloaded)=\"_handleReloaded($event)\" (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 </div>\r\n</div>",
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
- return [2 /*return*/];
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$1 },
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$1 },
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$1;
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;