tnx-shared 5.1.406 → 5.1.408

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 (29) hide show
  1. package/bundles/tnx-shared.umd.js +509 -411
  2. package/bundles/tnx-shared.umd.js.map +1 -1
  3. package/bundles/tnx-shared.umd.min.js +2 -2
  4. package/bundles/tnx-shared.umd.min.js.map +1 -1
  5. package/classes/base/list-base.d.ts +2 -0
  6. package/classes/base/list-base.d.ts.map +1 -1
  7. package/components/workflow/services/workflow-permission-detail.service.d.ts +2 -0
  8. package/components/workflow/services/workflow-permission-detail.service.d.ts.map +1 -1
  9. package/components/workflow/workflow-button/workflow-button.component.d.ts +9 -8
  10. package/components/workflow/workflow-button/workflow-button.component.d.ts.map +1 -1
  11. package/esm2015/classes/base/list-base.js +5 -3
  12. package/esm2015/components/tn-app-notification/tn-app-notification.component.js +2 -2
  13. package/esm2015/components/workflow/services/workflow-permission-detail.service.js +123 -47
  14. package/esm2015/components/workflow/workflow-button/workflow-button.component.js +22 -29
  15. package/esm2015/services/crud.service.js +17 -11
  16. package/esm2015/services/logger.service.js +15 -9
  17. package/esm2015/services/notification.service.js +5 -1
  18. package/esm2015/tnx-shared.js +150 -149
  19. package/fesm2015/tnx-shared.js +264 -180
  20. package/fesm2015/tnx-shared.js.map +1 -1
  21. package/package.json +2 -2
  22. package/services/crud.service.d.ts +3 -1
  23. package/services/crud.service.d.ts.map +1 -1
  24. package/services/logger.service.d.ts.map +1 -1
  25. package/services/notification.service.d.ts +1 -0
  26. package/services/notification.service.d.ts.map +1 -1
  27. package/tnx-shared.d.ts +149 -148
  28. package/tnx-shared.d.ts.map +1 -1
  29. package/tnx-shared.metadata.json +1 -1
@@ -2,7 +2,7 @@
2
2
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('rxjs'), require('rxjs/operators'), require('@angular/common'), require('@angular/common/http'), require('fast-safe-stringify'), require('moment'), require('underscore'), require('uuid'), require('angular-oauth2-oidc'), require('@ngx-translate/core'), require('tn-custom-primeng/api'), require('@angular/router'), require('@aspnet/signalr'), require('file-saver'), require('print-js'), require('@angular/platform-browser'), require('jquery'), require('ngx-device-detector'), require('jwt-decode'), require('tn-custom-primeng/table'), require('@angular/common/locales/vi'), require('@angular/forms'), require('@angular/platform-browser/animations'), require('ngx-img-fallback'), require('ngx-mask'), require('ng2-signalr'), require('tn-custom-primeng/fileupload'), require('tn-custom-primeng/dropdown'), require('tn-custom-primeng/multiselect'), require('hammerjs'), require('jsplumb'), require('tn-custom-primeng/dom'), require('angular-split'), require('ng2-currency-mask'), require('ngx-drag-drop'), require('ngx-extended-pdf-viewer'), require('ngx-perfect-scrollbar'), require('tn-custom-primeng/accordion'), require('tn-custom-primeng/autocomplete'), require('tn-custom-primeng/blockui'), require('tn-custom-primeng/breadcrumb'), require('tn-custom-primeng/button'), require('tn-custom-primeng/calendar'), require('tn-custom-primeng/card'), require('tn-custom-primeng/chart'), require('tn-custom-primeng/checkbox'), require('tn-custom-primeng/chips'), require('tn-custom-primeng/colorpicker'), require('tn-custom-primeng/confirmdialog'), require('tn-custom-primeng/contextmenu'), require('tn-custom-primeng/dataview'), require('tn-custom-primeng/dialog'), require('tn-custom-primeng/fieldset'), require('tn-custom-primeng/focustrap'), require('tn-custom-primeng/inputmask'), require('tn-custom-primeng/inputswitch'), require('tn-custom-primeng/inputtext'), require('tn-custom-primeng/inputtextarea'), require('tn-custom-primeng/menu'), require('tn-custom-primeng/menubar'), require('tn-custom-primeng/overlaypanel'), require('tn-custom-primeng/paginator'), require('tn-custom-primeng/panel'), require('tn-custom-primeng/progressspinner'), require('tn-custom-primeng/radiobutton'), require('tn-custom-primeng/scrollpanel'), require('tn-custom-primeng/selectbutton'), require('tn-custom-primeng/sidebar'), require('tn-custom-primeng/slider'), require('tn-custom-primeng/spinner'), require('tn-custom-primeng/splitbutton'), require('tn-custom-primeng/steps'), require('tn-custom-primeng/tabview'), require('tn-custom-primeng/toast'), require('tn-custom-primeng/tooltip'), require('tn-custom-primeng/tree'), require('tn-custom-primeng/treetable'), require('tn-custom-primeng/tristatecheckbox'), require('@angular/animations'), require('qrcode'), require('nanoid'), require('rtf.js')) :
3
3
  typeof define === 'function' && define.amd ? define('tnx-shared', ['exports', '@angular/core', 'rxjs', 'rxjs/operators', '@angular/common', '@angular/common/http', 'fast-safe-stringify', 'moment', 'underscore', 'uuid', 'angular-oauth2-oidc', '@ngx-translate/core', 'tn-custom-primeng/api', '@angular/router', '@aspnet/signalr', 'file-saver', 'print-js', '@angular/platform-browser', 'jquery', 'ngx-device-detector', 'jwt-decode', 'tn-custom-primeng/table', '@angular/common/locales/vi', '@angular/forms', '@angular/platform-browser/animations', 'ngx-img-fallback', 'ngx-mask', 'ng2-signalr', 'tn-custom-primeng/fileupload', 'tn-custom-primeng/dropdown', 'tn-custom-primeng/multiselect', 'hammerjs', 'jsplumb', 'tn-custom-primeng/dom', 'angular-split', 'ng2-currency-mask', 'ngx-drag-drop', 'ngx-extended-pdf-viewer', 'ngx-perfect-scrollbar', 'tn-custom-primeng/accordion', 'tn-custom-primeng/autocomplete', 'tn-custom-primeng/blockui', 'tn-custom-primeng/breadcrumb', 'tn-custom-primeng/button', 'tn-custom-primeng/calendar', 'tn-custom-primeng/card', 'tn-custom-primeng/chart', 'tn-custom-primeng/checkbox', 'tn-custom-primeng/chips', 'tn-custom-primeng/colorpicker', 'tn-custom-primeng/confirmdialog', 'tn-custom-primeng/contextmenu', 'tn-custom-primeng/dataview', 'tn-custom-primeng/dialog', 'tn-custom-primeng/fieldset', 'tn-custom-primeng/focustrap', 'tn-custom-primeng/inputmask', 'tn-custom-primeng/inputswitch', 'tn-custom-primeng/inputtext', 'tn-custom-primeng/inputtextarea', 'tn-custom-primeng/menu', 'tn-custom-primeng/menubar', 'tn-custom-primeng/overlaypanel', 'tn-custom-primeng/paginator', 'tn-custom-primeng/panel', 'tn-custom-primeng/progressspinner', 'tn-custom-primeng/radiobutton', 'tn-custom-primeng/scrollpanel', 'tn-custom-primeng/selectbutton', 'tn-custom-primeng/sidebar', 'tn-custom-primeng/slider', 'tn-custom-primeng/spinner', 'tn-custom-primeng/splitbutton', 'tn-custom-primeng/steps', 'tn-custom-primeng/tabview', 'tn-custom-primeng/toast', 'tn-custom-primeng/tooltip', 'tn-custom-primeng/tree', 'tn-custom-primeng/treetable', 'tn-custom-primeng/tristatecheckbox', '@angular/animations', 'qrcode', 'nanoid', 'rtf.js'], factory) :
4
4
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global['tnx-shared'] = {}, global.ng.core, global.rxjs, global.rxjs.operators, global.ng.common, global.ng.common.http, global.stringify, global.moment_, global._, global.uuid, global.i4, global.i2, global.i1, global.ng.router, global.signalR, global.FileSaver, global.printJS$3, global.ng.platformBrowser, global.jQuery_, global.ngxDeviceDetector, global.JWT_, global.table, global.ng.common.locales.vi, global.ng.forms, global.ng.platformBrowser.animations, global.ngxImgFallback, global.ngxMask, global.ng2Signalr, global.fileupload, global.dropdown, global.multiselect, global.Hammer, global.jsplumb, global.dom, global.angularSplit, global.ng2CurrencyMask, global.ngxDragDrop, global.ngxExtendedPdfViewer, global.ngxPerfectScrollbar, global.accordion, global.autocomplete, global.blockui, global.breadcrumb, global.button, global.calendar, global.card, global.chart, global.checkbox, global.chips, global.colorpicker, global.confirmdialog, global.contextmenu, global.dataview, global.dialog, global.fieldset, global.focustrap, global.inputmask, global.inputswitch, global.inputtext, global.inputtextarea, global.menu, global.menubar, global.overlaypanel, global.paginator, global.panel, global.progressspinner, global.radiobutton, global.scrollpanel, global.selectbutton, global.sidebar, global.slider, global.spinner, global.splitbutton, global.steps, global.tabview, global.toast, global.tooltip, global.tree, global.treetable, global.tristatecheckbox, global.ng.animations, global.QRCode, global.nanoid, global.rtf_js));
5
- }(this, (function (exports, i0, rxjs, operators, i3, i1$1, stringify, moment_, _, uuid, i4, i2, i1, i3$1, signalR, FileSaver, printJS$3, platformBrowser, jQuery_, ngxDeviceDetector, JWT_, table, localeVi, forms, animations, ngxImgFallback, ngxMask, ng2Signalr, fileupload, dropdown, multiselect, Hammer, jsplumb, dom, angularSplit, ng2CurrencyMask, ngxDragDrop, ngxExtendedPdfViewer, ngxPerfectScrollbar, accordion, autocomplete, blockui, breadcrumb, button, calendar, card, chart, checkbox, chips, colorpicker, confirmdialog, contextmenu, dataview, dialog, fieldset, focustrap, inputmask, inputswitch, inputtext, inputtextarea, menu, menubar, overlaypanel, paginator, panel, progressspinner, radiobutton, scrollpanel, selectbutton, sidebar, slider, spinner, splitbutton, steps, tabview, toast, tooltip, tree, treetable, tristatecheckbox, animations$1, QRCode, nanoid, rtf_js) { 'use strict';
5
+ }(this, (function (exports, i0, rxjs, operators, i4$1, i1$1, stringify, moment_, _, uuid, i4, i2, i1, i3, signalR, FileSaver, printJS$3, platformBrowser, jQuery_, ngxDeviceDetector, JWT_, table, localeVi, forms, animations, ngxImgFallback, ngxMask, ng2Signalr, fileupload, dropdown, multiselect, Hammer, jsplumb, dom, angularSplit, ng2CurrencyMask, ngxDragDrop, ngxExtendedPdfViewer, ngxPerfectScrollbar, accordion, autocomplete, blockui, breadcrumb, button, calendar, card, chart, checkbox, chips, colorpicker, confirmdialog, contextmenu, dataview, dialog, fieldset, focustrap, inputmask, inputswitch, inputtext, inputtextarea, menu, menubar, overlaypanel, paginator, panel, progressspinner, radiobutton, scrollpanel, selectbutton, sidebar, slider, spinner, splitbutton, steps, tabview, toast, tooltip, tree, treetable, tristatecheckbox, animations$1, QRCode, nanoid, rtf_js) { 'use strict';
6
6
 
7
7
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
8
 
@@ -3112,7 +3112,7 @@
3112
3112
  }
3113
3113
  // Format Date
3114
3114
  if (c.dateFormat) {
3115
- var datePipe = new i3.DatePipe('en-US');
3115
+ var datePipe = new i4$1.DatePipe('en-US');
3116
3116
  colVal = datePipe.transform(colVal, c.dateFormat);
3117
3117
  }
3118
3118
  // Format mapping
@@ -3183,7 +3183,7 @@
3183
3183
  }
3184
3184
  // Format Date
3185
3185
  if (c.dateFormat) {
3186
- var datePipe = new i3.DatePipe('en-US');
3186
+ var datePipe = new i4$1.DatePipe('en-US');
3187
3187
  colVal = datePipe.transform(colVal, c.dateFormat);
3188
3188
  }
3189
3189
  // Format mapping
@@ -3251,7 +3251,7 @@
3251
3251
  }
3252
3252
  // Format Date
3253
3253
  if (c.dateFormat) {
3254
- var datePipe = new i3.DatePipe('en-US');
3254
+ var datePipe = new i4$1.DatePipe('en-US');
3255
3255
  colVal = datePipe.transform(colVal, c.dateFormat);
3256
3256
  }
3257
3257
  // Format mapping
@@ -4997,6 +4997,148 @@
4997
4997
  { ten: 'Đã duyệt quyết định', id: 3 }
4998
4998
  ];
4999
4999
 
5000
+ var LoggerService = /** @class */ (function () {
5001
+ function LoggerService(_moduleConfigService) {
5002
+ this.logGroups = {
5003
+ info: {},
5004
+ error: {},
5005
+ warning: {}
5006
+ };
5007
+ this.environment = _moduleConfigService.getConfig().environment;
5008
+ }
5009
+ LoggerService.prototype.disableConsole = function () {
5010
+ return this.environment.systemLogSetting
5011
+ && this.environment.systemLogSetting.disableConsole;
5012
+ };
5013
+ LoggerService.prototype.logInfo = function (message) {
5014
+ var optionalParams = [];
5015
+ for (var _i = 1; _i < arguments.length; _i++) {
5016
+ optionalParams[_i - 1] = arguments[_i];
5017
+ }
5018
+ if (!this.disableConsole()) {
5019
+ console.info(message, optionalParams);
5020
+ }
5021
+ };
5022
+ LoggerService.prototype.logError = function (message) {
5023
+ var optionalParams = [];
5024
+ for (var _i = 1; _i < arguments.length; _i++) {
5025
+ optionalParams[_i - 1] = arguments[_i];
5026
+ }
5027
+ if (!this.disableConsole()) {
5028
+ console.error(message, optionalParams);
5029
+ }
5030
+ };
5031
+ LoggerService.prototype.logWarning = function (message) {
5032
+ var optionalParams = [];
5033
+ for (var _i = 1; _i < arguments.length; _i++) {
5034
+ optionalParams[_i - 1] = arguments[_i];
5035
+ }
5036
+ if (!this.disableConsole()) {
5037
+ console.warn(message, optionalParams);
5038
+ }
5039
+ };
5040
+ LoggerService.prototype.logGroupInfo = function (category) {
5041
+ var _a;
5042
+ var messages = [];
5043
+ for (var _i = 1; _i < arguments.length; _i++) {
5044
+ messages[_i - 1] = arguments[_i];
5045
+ }
5046
+ if (!this.logGroups.info[category])
5047
+ this.logGroups.info[category] = [];
5048
+ (_a = this.logGroups.info[category]).push.apply(_a, __spread(messages));
5049
+ };
5050
+ LoggerService.prototype.logGroupError = function (category) {
5051
+ var _a;
5052
+ var messages = [];
5053
+ for (var _i = 1; _i < arguments.length; _i++) {
5054
+ messages[_i - 1] = arguments[_i];
5055
+ }
5056
+ if (!this.logGroups.error[category])
5057
+ this.logGroups.error[category] = [];
5058
+ (_a = this.logGroups.error[category]).push.apply(_a, __spread(messages));
5059
+ };
5060
+ LoggerService.prototype.logGroupWarning = function (category) {
5061
+ var _a;
5062
+ var messages = [];
5063
+ for (var _i = 1; _i < arguments.length; _i++) {
5064
+ messages[_i - 1] = arguments[_i];
5065
+ }
5066
+ if (!this.logGroups.warning[category])
5067
+ this.logGroups.warning[category] = [];
5068
+ (_a = this.logGroups.warning[category]).push.apply(_a, __spread(messages));
5069
+ };
5070
+ LoggerService.prototype.writeGroupInfo = function (category) {
5071
+ if (!this.disableConsole()) {
5072
+ var items = this.logGroups.info[category];
5073
+ if (items) {
5074
+ console.info(category, items);
5075
+ }
5076
+ }
5077
+ };
5078
+ LoggerService.prototype.writeGroupError = function (category) {
5079
+ if (!this.disableConsole()) {
5080
+ var items = this.logGroups.error[category];
5081
+ if (items) {
5082
+ console.error(category, items);
5083
+ }
5084
+ }
5085
+ };
5086
+ LoggerService.prototype.writeGroupWarning = function (category) {
5087
+ if (!this.disableConsole()) {
5088
+ var items = this.logGroups.warning[category];
5089
+ if (items) {
5090
+ console.warn(category, items);
5091
+ }
5092
+ }
5093
+ };
5094
+ LoggerService.prototype.writeAndFlushGroupInfo = function (category) {
5095
+ this.writeGroupInfo(category);
5096
+ this.flushGroupInfo(category);
5097
+ };
5098
+ LoggerService.prototype.writeAndFlushGroupError = function (category) {
5099
+ this.writeGroupError(category);
5100
+ this.flushGroupError(category);
5101
+ };
5102
+ LoggerService.prototype.writeAndFlushGroupWarning = function (category) {
5103
+ this.writeGroupWarning(category);
5104
+ this.flushGroupWarning(category);
5105
+ };
5106
+ LoggerService.prototype.flushGroupInfo = function (category) {
5107
+ if (this.logGroups.info[category]) {
5108
+ this.logGroups.info[category] = [];
5109
+ }
5110
+ else {
5111
+ this.logGroups.info[category] = [];
5112
+ }
5113
+ };
5114
+ LoggerService.prototype.flushGroupError = function (category) {
5115
+ if (this.logGroups.error[category]) {
5116
+ this.logGroups.error[category] = [];
5117
+ }
5118
+ else {
5119
+ this.logGroups.error[category] = [];
5120
+ }
5121
+ };
5122
+ LoggerService.prototype.flushGroupWarning = function (category) {
5123
+ if (this.logGroups.warning[category]) {
5124
+ this.logGroups.warning[category] = [];
5125
+ }
5126
+ else {
5127
+ this.logGroups.warning[category] = [];
5128
+ }
5129
+ };
5130
+ return LoggerService;
5131
+ }());
5132
+ LoggerService.ɵprov = i0.ɵɵdefineInjectable({ factory: function LoggerService_Factory() { return new LoggerService(i0.ɵɵinject(ModuleConfigService)); }, token: LoggerService, providedIn: "root" });
5133
+ LoggerService.decorators = [
5134
+ { type: i0.Injectable, args: [{
5135
+ providedIn: 'root'
5136
+ },] }
5137
+ ];
5138
+ LoggerService.ctorParameters = function () { return [
5139
+ { type: ModuleConfigService }
5140
+ ]; };
5141
+
5000
5142
  var MasterDataItem = /** @class */ (function () {
5001
5143
  function MasterDataItem() {
5002
5144
  }
@@ -5839,9 +5981,10 @@
5839
5981
  ]; };
5840
5982
 
5841
5983
  var CrudService = /** @class */ (function () {
5842
- function CrudService(_injector, _translateService, _commonService, datePipe, _notifierService) {
5984
+ function CrudService(_injector, _translateService, _loggerService, _commonService, datePipe, _notifierService) {
5843
5985
  this._injector = _injector;
5844
5986
  this._translateService = _translateService;
5987
+ this._loggerService = _loggerService;
5845
5988
  this._commonService = _commonService;
5846
5989
  this.datePipe = datePipe;
5847
5990
  this._notifierService = _notifierService;
@@ -6673,8 +6816,10 @@
6673
6816
  this._notifierService.showWarning(rs.message);
6674
6817
  break;
6675
6818
  case Validation.ERR_SYS_DEV:
6676
- console.log("__________ ERR_SYS_DEV __________ : " + rs.message);
6677
- console.log("TraceId ====> " + this.getTraceId() + " \u0111\u1EC3 d\u00F9ng cho elastic search");
6819
+ this._loggerService.logError("__________ ERR_SYS_DEV __________ : " + rs.message);
6820
+ this._loggerService.logError("TraceId ====> " + this.getTraceId() + " \u0111\u1EC3 d\u00F9ng cho elastic search");
6821
+ this._notifierService.showWarning('Thao tác chưa thành công. Vui lòng thử lại sau!');
6822
+ break;
6678
6823
  default:
6679
6824
  this._notifierService.showWarning('Thao tác chưa thành công. Vui lòng thử lại sau!');
6680
6825
  break;
@@ -6684,7 +6829,7 @@
6684
6829
  CrudService.prototype.handleResponse = function (res, message, callBack, callBackError) {
6685
6830
  if (!res.success) {
6686
6831
  if (res.error == Validation.ERR_SYS_DEV) {
6687
- console.error(res.message);
6832
+ this._loggerService.logError(res.message);
6688
6833
  this._injector.get(NotifierService).showWarning('Có lỗi xảy ra. Liên hệ quản trị viên để biết thêm chi tiết.');
6689
6834
  }
6690
6835
  else {
@@ -6712,7 +6857,7 @@
6712
6857
  return new Promise(function (resolve, reject) {
6713
6858
  if (!res.success) {
6714
6859
  if (res.error == Validation.ERR_SYS_DEV) {
6715
- console.error(res.message);
6860
+ _this._loggerService.logError(res.message);
6716
6861
  _this._injector.get(NotifierService).showWarning('Có lỗi xảy ra. Liên hệ quản trị viên để biết thêm chi tiết.');
6717
6862
  }
6718
6863
  else {
@@ -6785,6 +6930,7 @@
6785
6930
  };
6786
6931
  CrudService.prototype.getValueFilter = function (filter, model, rootModel) {
6787
6932
  var e_4, _a;
6933
+ var _this = this;
6788
6934
  var sourceField = filter.sourceField;
6789
6935
  var subField = filter.subField;
6790
6936
  var tryGetBySubField = function (value) {
@@ -6802,7 +6948,7 @@
6802
6948
  return value;
6803
6949
  }
6804
6950
  catch (ex) {
6805
- console.log(ex);
6951
+ _this._loggerService.logError(ex);
6806
6952
  return null;
6807
6953
  }
6808
6954
  };
@@ -6848,7 +6994,7 @@
6848
6994
  };
6849
6995
  return CrudService;
6850
6996
  }());
6851
- CrudService.ɵprov = i0.ɵɵdefineInjectable({ factory: function CrudService_Factory() { return new CrudService(i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(i2.TranslateService), i0.ɵɵinject(CommonService), i0.ɵɵinject(i3.DatePipe), i0.ɵɵinject(NotifierService)); }, token: CrudService, providedIn: "root" });
6997
+ CrudService.ɵprov = i0.ɵɵdefineInjectable({ factory: function CrudService_Factory() { return new CrudService(i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(i2.TranslateService), i0.ɵɵinject(LoggerService), i0.ɵɵinject(CommonService), i0.ɵɵinject(i4$1.DatePipe), i0.ɵɵinject(NotifierService)); }, token: CrudService, providedIn: "root" });
6852
6998
  CrudService.decorators = [
6853
6999
  { type: i0.Injectable, args: [{
6854
7000
  providedIn: 'root',
@@ -6857,8 +7003,9 @@
6857
7003
  CrudService.ctorParameters = function () { return [
6858
7004
  { type: i0.Injector },
6859
7005
  { type: i2.TranslateService },
7006
+ { type: LoggerService },
6860
7007
  { type: CommonService },
6861
- { type: i3.DatePipe },
7008
+ { type: i4$1.DatePipe },
6862
7009
  { type: NotifierService }
6863
7010
  ]; };
6864
7011
 
@@ -9167,10 +9314,10 @@
9167
9314
  this._injector = injector;
9168
9315
  this._appContext = injector.get(ApplicationContextService);
9169
9316
  this._componentContext = injector.get(ComponentContextService);
9170
- this._activatedRoute = injector.get(i3$1.ActivatedRoute);
9317
+ this._activatedRoute = injector.get(i3.ActivatedRoute);
9171
9318
  this._crudService = injector.get(CrudService);
9172
9319
  this._commonService = injector.get(CommonService);
9173
- this._datePipe = injector.get(i3.DatePipe);
9320
+ this._datePipe = injector.get(i4$1.DatePipe);
9174
9321
  this._componentContext = this._appContext.addComponentContext(this._componentContext, this._activatedRoute, this.getComponentId());
9175
9322
  if (this._componentContext) {
9176
9323
  this.model = this._componentContext.data;
@@ -16459,16 +16606,16 @@
16459
16606
  };
16460
16607
  return CustomRouterService;
16461
16608
  }());
16462
- CustomRouterService.ɵprov = i0.ɵɵdefineInjectable({ factory: function CustomRouterService_Factory() { return new CustomRouterService(i0.ɵɵinject(i3$1.ActivatedRoute), i0.ɵɵinject(i3$1.Router), i0.ɵɵinject(i3.Location)); }, token: CustomRouterService, providedIn: "root" });
16609
+ CustomRouterService.ɵprov = i0.ɵɵdefineInjectable({ factory: function CustomRouterService_Factory() { return new CustomRouterService(i0.ɵɵinject(i3.ActivatedRoute), i0.ɵɵinject(i3.Router), i0.ɵɵinject(i4$1.Location)); }, token: CustomRouterService, providedIn: "root" });
16463
16610
  CustomRouterService.decorators = [
16464
16611
  { type: i0.Injectable, args: [{
16465
16612
  providedIn: 'root'
16466
16613
  },] }
16467
16614
  ];
16468
16615
  CustomRouterService.ctorParameters = function () { return [
16469
- { type: i3$1.ActivatedRoute },
16470
- { type: i3$1.Router },
16471
- { type: i3.Location }
16616
+ { type: i3.ActivatedRoute },
16617
+ { type: i3.Router },
16618
+ { type: i4$1.Location }
16472
16619
  ]; };
16473
16620
 
16474
16621
  var DomService = /** @class */ (function () {
@@ -16756,8 +16903,8 @@
16756
16903
  _this.__isFormView = false;
16757
16904
  _this._notifierService = _this._injector.get(NotifierService);
16758
16905
  _this._masterDataService = _this._injector.get(MasterDataService);
16759
- _this._router = _this._injector.get(i3$1.Router);
16760
- _this._activatedRoute = _this._injector.get(i3$1.ActivatedRoute);
16906
+ _this._router = _this._injector.get(i3.Router);
16907
+ _this._activatedRoute = _this._injector.get(i3.ActivatedRoute);
16761
16908
  _this._translateService = _this._injector.get(i2.TranslateService);
16762
16909
  _this._customRouterService = _this._injector.get(CustomRouterService);
16763
16910
  _this._crudService = _this._injector.get(CrudService);
@@ -17830,6 +17977,91 @@
17830
17977
  this.serviceUri = this.getEndpointByService(baseService) + "/WorkflowPermissionDetail";
17831
17978
  return this;
17832
17979
  };
17980
+ WorkflowPermissionDetailService.prototype.appendInfoForWorkflowSingle = function (userIdCurrent, data, fieldKey, ignoreWorkflow, callBackWhenNotHaveStatus) {
17981
+ if (fieldKey === void 0) { fieldKey = 'id'; }
17982
+ if (ignoreWorkflow === void 0) { ignoreWorkflow = false; }
17983
+ if (callBackWhenNotHaveStatus === void 0) { callBackWhenNotHaveStatus = null; }
17984
+ return __awaiter(this, void 0, void 0, function () {
17985
+ var itemId, filters, sorts, dataStatus, notifierService;
17986
+ return __generator(this, function (_a) {
17987
+ switch (_a.label) {
17988
+ case 0:
17989
+ if (callBackWhenNotHaveStatus == null) {
17990
+ callBackWhenNotHaveStatus = function (itemStatus, rowItem) {
17991
+ };
17992
+ }
17993
+ itemId = data[fieldKey];
17994
+ filters = [
17995
+ this.newFilter('itemId', exports.Operator.equal, itemId),
17996
+ this.newFilter('notInWorkflow', exports.Operator.equal, false),
17997
+ ];
17998
+ sorts = [];
17999
+ if (!ignoreWorkflow) {
18000
+ filters.push(this.newFilter('userId', exports.Operator.equal, userIdCurrent));
18001
+ }
18002
+ else {
18003
+ sorts.push(new Sort({ field: 'permission', dir: -1 }), new Sort({ field: 'inComing', dir: -1 }));
18004
+ }
18005
+ return [4 /*yield*/, this.getAll(filters, 'itemId,userId,trangThai,textTrangThai,workflowCode,permission', sorts)];
18006
+ case 1:
18007
+ dataStatus = (_a.sent()).data;
18008
+ if (dataStatus == null) {
18009
+ notifierService = this._injector.get(NotifierService);
18010
+ return [2 /*return*/, notifierService.showWarning('Không lấy được thông tin trạng thái hiện tại của bản ghi')];
18011
+ }
18012
+ this.appendWorkflowInfoToItem(data, itemId, userIdCurrent, ignoreWorkflow, dataStatus, callBackWhenNotHaveStatus);
18013
+ return [2 /*return*/, true];
18014
+ }
18015
+ });
18016
+ });
18017
+ };
18018
+ WorkflowPermissionDetailService.prototype.appendWorkflowInfoToItem = function (data, itemId, userIdCurrent, ignoreWorkflow, dataStatus, callBackWhenNotHaveStatus) {
18019
+ if (callBackWhenNotHaveStatus === void 0) { callBackWhenNotHaveStatus = null; }
18020
+ var itemStatus = {
18021
+ textTrangThai: 'Chưa chạy quy trình'
18022
+ };
18023
+ if (itemId) {
18024
+ var lstItemStatus = dataStatus.filter(function (q) { return q.itemId == itemId && q.userId == userIdCurrent; });
18025
+ if (ignoreWorkflow === true && lstItemStatus.length === 0) {
18026
+ lstItemStatus.push.apply(lstItemStatus, __spread(dataStatus.filter(function (q) { return q.itemId === itemId; })));
18027
+ }
18028
+ // let itemStatus = null;
18029
+ if (lstItemStatus.length) {
18030
+ itemStatus = lstItemStatus.find(function (q) { return (q.permission & exports.PermissionBase.EDIT) == exports.PermissionBase.EDIT; });
18031
+ if (itemStatus == null) {
18032
+ itemStatus = lstItemStatus[0];
18033
+ }
18034
+ }
18035
+ }
18036
+ // Nếu không có bản ghi trạng thái
18037
+ // Nhưng đã tạo task rồi thì hiển thị trạng thái "đã tạo công việc" để tránh trường hợp hiển thị nút bắt đầu thừa trên giao diện
18038
+ if (!itemStatus.trangThai) {
18039
+ callBackWhenNotHaveStatus(itemStatus, data);
18040
+ }
18041
+ data.__trangThai = itemStatus.trangThai;
18042
+ data.__textTrangThai = itemStatus.textTrangThai;
18043
+ if (itemStatus.workflowCode == DummyWorkflowCode) {
18044
+ data.hiddenWorkflowAction = true;
18045
+ }
18046
+ data.__workflowCode = itemStatus.workflowCode;
18047
+ data.__permission = itemStatus.permission;
18048
+ data.__disableEdit = true;
18049
+ data.__disableDelete = true;
18050
+ if (data.basePermission & exports.PermissionBase.EDIT
18051
+ || data.__permission & exports.PermissionBase.EDIT) {
18052
+ data.__disableEdit = false;
18053
+ }
18054
+ else {
18055
+ data.__disablePermissionEdit = true;
18056
+ }
18057
+ if (data.basePermission & exports.PermissionBase.DELETE
18058
+ || data.__permission & exports.PermissionBase.DELETE) {
18059
+ data.__disableDelete = false;
18060
+ }
18061
+ else {
18062
+ data.__disablePermissionDelete = true;
18063
+ }
18064
+ };
17833
18065
  /**
17834
18066
  * Lấy thêm các thông tin cần cho quy trình nghiệp vụ cho các bản ghi trong data
17835
18067
  */
@@ -17839,6 +18071,7 @@
17839
18071
  if (callBackWhenNotHaveStatus === void 0) { callBackWhenNotHaveStatus = null; }
17840
18072
  return __awaiter(this, void 0, void 0, function () {
17841
18073
  var lstItemId, filters, sorts, dataStatus, notifierService;
18074
+ var _this = this;
17842
18075
  return __generator(this, function (_a) {
17843
18076
  switch (_a.label) {
17844
18077
  case 0:
@@ -17866,51 +18099,54 @@
17866
18099
  return [2 /*return*/, notifierService.showWarning('Không lấy được thông tin trạng thái hiện tại của bản ghi')];
17867
18100
  }
17868
18101
  data.forEach(function (rowItem) {
17869
- var itemStatus = {
17870
- textTrangThai: 'Chưa chạy quy trình'
17871
- };
17872
- var itemId = rowItem[fieldKey];
17873
- if (itemId) {
17874
- var lstItemStatus = dataStatus.filter(function (q) { return q.itemId == itemId && q.userId == userIdCurrent; });
17875
- if (ignoreWorkflow === true && lstItemStatus.length === 0) {
17876
- lstItemStatus.push.apply(lstItemStatus, __spread(dataStatus.filter(function (q) { return q.itemId === itemId; })));
17877
- }
17878
- // let itemStatus = null;
17879
- if (lstItemStatus.length) {
17880
- itemStatus = lstItemStatus.find(function (q) { return (q.permission & exports.PermissionBase.EDIT) == exports.PermissionBase.EDIT; });
17881
- if (itemStatus == null) {
17882
- itemStatus = lstItemStatus[0];
17883
- }
17884
- }
17885
- }
17886
- // Nếu không có bản ghi trạng thái
17887
- // Nhưng đã tạo task rồi thì hiển thị trạng thái "đã tạo công việc" để tránh trường hợp hiển thị nút bắt đầu thừa trên giao diện
17888
- if (!itemStatus.trangThai) {
17889
- callBackWhenNotHaveStatus(itemStatus, rowItem);
17890
- }
17891
- rowItem.__trangThai = itemStatus.trangThai;
17892
- rowItem.__textTrangThai = itemStatus.textTrangThai;
17893
- if (itemStatus.workflowCode == DummyWorkflowCode) {
17894
- rowItem.hiddenWorkflowAction = true;
17895
- }
17896
- rowItem.__workflowCode = itemStatus.workflowCode;
17897
- rowItem.__permission = itemStatus.permission;
17898
- rowItem.__disableEdit = true;
17899
- rowItem.__disableDelete = true;
17900
- if (rowItem.basePermission & exports.PermissionBase.EDIT
17901
- || rowItem.__permission & exports.PermissionBase.EDIT) {
17902
- rowItem.__disableEdit = false;
17903
- }
17904
- else {
17905
- rowItem.__disablePermissionEdit = true;
17906
- }
17907
- if (rowItem.basePermission & exports.PermissionBase.DELETE
17908
- || rowItem.__permission & exports.PermissionBase.DELETE) {
17909
- rowItem.__disableDelete = false;
17910
- }
17911
- else {
17912
- rowItem.__disablePermissionDelete = true;
17913
- }
18102
+ _this.appendWorkflowInfoToItem(rowItem, rowItem[fieldKey], userIdCurrent, ignoreWorkflow, dataStatus, callBackWhenNotHaveStatus);
18103
+ // let itemStatus: any = {
18104
+ // textTrangThai: 'Chưa chạy quy trình'
18105
+ // };
18106
+ // const itemId = rowItem[fieldKey];
18107
+ // if (itemId) {
18108
+ // const lstItemStatus = dataStatus.filter(q => q.itemId == itemId && q.userId == userIdCurrent);
18109
+ // if (ignoreWorkflow === true && lstItemStatus.length === 0) {
18110
+ // lstItemStatus.push(...dataStatus.filter(q => q.itemId === itemId));
18111
+ // }
18112
+ // // let itemStatus = null;
18113
+ // if (lstItemStatus.length) {
18114
+ // itemStatus = lstItemStatus.find(q => (q.permission & PermissionBase.EDIT) == PermissionBase.EDIT);
18115
+ // if (itemStatus == null) {
18116
+ // itemStatus = lstItemStatus[0];
18117
+ // }
18118
+ // }
18119
+ // }
18120
+ // // Nếu không bản ghi trạng thái
18121
+ // // Nhưng đã tạo task rồi thì hiển thị trạng thái "đã tạo công việc" để tránh trường hợp hiển thị nút bắt đầu thừa trên giao diện
18122
+ // if (!itemStatus.trangThai) {
18123
+ // callBackWhenNotHaveStatus(itemStatus, rowItem);
18124
+ // }
18125
+ // rowItem.__trangThai = itemStatus.trangThai;
18126
+ // rowItem.__textTrangThai = itemStatus.textTrangThai;
18127
+ // if (itemStatus.workflowCode == DummyWorkflowCode) {
18128
+ // rowItem.hiddenWorkflowAction = true;
18129
+ // }
18130
+ // rowItem.__workflowCode = itemStatus.workflowCode;
18131
+ // rowItem.__permission = itemStatus.permission;
18132
+ // rowItem.__disableEdit = true;
18133
+ // rowItem.__disableDelete = true;
18134
+ // if (rowItem.basePermission & PermissionBase.EDIT
18135
+ // || rowItem.__permission & PermissionBase.EDIT
18136
+ // ) {
18137
+ // rowItem.__disableEdit = false;
18138
+ // }
18139
+ // else {
18140
+ // rowItem.__disablePermissionEdit = true;
18141
+ // }
18142
+ // if (rowItem.basePermission & PermissionBase.DELETE
18143
+ // || rowItem.__permission & PermissionBase.DELETE
18144
+ // ) {
18145
+ // rowItem.__disableDelete = false;
18146
+ // }
18147
+ // else {
18148
+ // rowItem.__disablePermissionDelete = true;
18149
+ // }
17914
18150
  });
17915
18151
  return [2 /*return*/, true];
17916
18152
  }
@@ -19541,142 +19777,6 @@
19541
19777
  { type: ModuleConfigService }
19542
19778
  ]; };
19543
19779
 
19544
- var LoggerService = /** @class */ (function () {
19545
- function LoggerService(_moduleConfigService) {
19546
- this.logGroups = {
19547
- info: {},
19548
- error: {},
19549
- warning: {}
19550
- };
19551
- this.environment = _moduleConfigService.getConfig().environment;
19552
- }
19553
- LoggerService.prototype.disableConsole = function () {
19554
- return this.environment.systemLogSetting
19555
- && this.environment.systemLogSetting.disableConsole;
19556
- };
19557
- LoggerService.prototype.logInfo = function (message) {
19558
- var optionalParams = [];
19559
- for (var _i = 1; _i < arguments.length; _i++) {
19560
- optionalParams[_i - 1] = arguments[_i];
19561
- }
19562
- if (!this.disableConsole()) {
19563
- console.log(message, optionalParams);
19564
- }
19565
- };
19566
- LoggerService.prototype.logError = function (message) {
19567
- var optionalParams = [];
19568
- for (var _i = 1; _i < arguments.length; _i++) {
19569
- optionalParams[_i - 1] = arguments[_i];
19570
- }
19571
- if (!this.disableConsole()) {
19572
- console.error(message, optionalParams);
19573
- }
19574
- };
19575
- LoggerService.prototype.logWarning = function (message) {
19576
- var optionalParams = [];
19577
- for (var _i = 1; _i < arguments.length; _i++) {
19578
- optionalParams[_i - 1] = arguments[_i];
19579
- }
19580
- if (!this.disableConsole()) {
19581
- console.warn(message, optionalParams);
19582
- }
19583
- };
19584
- LoggerService.prototype.logGroupInfo = function (category) {
19585
- var _a;
19586
- var messages = [];
19587
- for (var _i = 1; _i < arguments.length; _i++) {
19588
- messages[_i - 1] = arguments[_i];
19589
- }
19590
- if (!this.logGroups.info[category])
19591
- this.logGroups.info[category] = [];
19592
- (_a = this.logGroups.info[category]).push.apply(_a, __spread(messages));
19593
- };
19594
- LoggerService.prototype.logGroupError = function (category) {
19595
- var _a;
19596
- var messages = [];
19597
- for (var _i = 1; _i < arguments.length; _i++) {
19598
- messages[_i - 1] = arguments[_i];
19599
- }
19600
- if (!this.logGroups.error[category])
19601
- this.logGroups.error[category] = [];
19602
- (_a = this.logGroups.error[category]).push.apply(_a, __spread(messages));
19603
- };
19604
- LoggerService.prototype.logGroupWarning = function (category) {
19605
- var _a;
19606
- var messages = [];
19607
- for (var _i = 1; _i < arguments.length; _i++) {
19608
- messages[_i - 1] = arguments[_i];
19609
- }
19610
- if (!this.logGroups.warning[category])
19611
- this.logGroups.warning[category] = [];
19612
- (_a = this.logGroups.warning[category]).push.apply(_a, __spread(messages));
19613
- };
19614
- LoggerService.prototype.writeGroupInfo = function (category) {
19615
- if (!this.disableConsole()) {
19616
- var items = this.logGroups.info[category];
19617
- if (items) {
19618
- console.log(category, items);
19619
- }
19620
- }
19621
- };
19622
- LoggerService.prototype.writeGroupError = function (category) {
19623
- if (!this.disableConsole()) {
19624
- var items = this.logGroups.error[category];
19625
- if (items) {
19626
- console.error(category, items);
19627
- }
19628
- }
19629
- };
19630
- LoggerService.prototype.writeGroupWarning = function (category) {
19631
- if (!this.disableConsole()) {
19632
- var items = this.logGroups.warning[category];
19633
- if (items) {
19634
- console.warn(category, items);
19635
- }
19636
- }
19637
- };
19638
- LoggerService.prototype.writeAndFlushGroupInfo = function (category) {
19639
- this.writeGroupInfo(category);
19640
- this.flushGroupInfo(category);
19641
- };
19642
- LoggerService.prototype.writeAndFlushGroupError = function (category) {
19643
- this.writeGroupError(category);
19644
- this.flushGroupError(category);
19645
- };
19646
- LoggerService.prototype.writeAndFlushGroupWarning = function (category) {
19647
- this.writeGroupWarning(category);
19648
- this.flushGroupWarning(category);
19649
- };
19650
- LoggerService.prototype.flushGroupInfo = function (category) {
19651
- if (this.logGroups.info[category])
19652
- this.logGroups.info[category] = [];
19653
- else
19654
- this.logGroups.info[category] = [];
19655
- };
19656
- LoggerService.prototype.flushGroupError = function (category) {
19657
- if (this.logGroups.error[category])
19658
- this.logGroups.error[category] = [];
19659
- else
19660
- this.logGroups.error[category] = [];
19661
- };
19662
- LoggerService.prototype.flushGroupWarning = function (category) {
19663
- if (this.logGroups.warning[category])
19664
- this.logGroups.warning[category] = [];
19665
- else
19666
- this.logGroups.warning[category] = [];
19667
- };
19668
- return LoggerService;
19669
- }());
19670
- LoggerService.ɵprov = i0.ɵɵdefineInjectable({ factory: function LoggerService_Factory() { return new LoggerService(i0.ɵɵinject(ModuleConfigService)); }, token: LoggerService, providedIn: "root" });
19671
- LoggerService.decorators = [
19672
- { type: i0.Injectable, args: [{
19673
- providedIn: 'root'
19674
- },] }
19675
- ];
19676
- LoggerService.ctorParameters = function () { return [
19677
- { type: ModuleConfigService }
19678
- ]; };
19679
-
19680
19780
  var PhanQuyenModel = /** @class */ (function () {
19681
19781
  function PhanQuyenModel(init) {
19682
19782
  this.addRoleIds = [];
@@ -20635,8 +20735,8 @@
20635
20735
  _this.getData();
20636
20736
  };
20637
20737
  _this.isTreeTable = _isTreeTable;
20638
- _this._activatedRoute = _this._injector.get(i3$1.ActivatedRoute);
20639
- _this._router = _this._injector.get(i3$1.Router);
20738
+ _this._activatedRoute = _this._injector.get(i3.ActivatedRoute);
20739
+ _this._router = _this._injector.get(i3.Router);
20640
20740
  _this._customRouterService = _this._injector.get(CustomRouterService);
20641
20741
  _this._notifierService = _this._injector.get(NotifierService);
20642
20742
  _this._exportService = _this._injector.get(ExportService);
@@ -20650,7 +20750,7 @@
20650
20750
  _this._commonService = _this._injector.get(CommonService);
20651
20751
  _this._crudService = _this._injector.get(CrudService);
20652
20752
  _this._santilizer = _this._injector.get(platformBrowser.DomSanitizer);
20653
- _this._datePipe = _this._injector.get(i3.DatePipe);
20753
+ _this._datePipe = _this._injector.get(i4$1.DatePipe);
20654
20754
  _this._moduleConfigService = _this._injector.get(ModuleConfigService);
20655
20755
  _this._permissionService = _this._injector.get(PermissionService);
20656
20756
  _this.handleCheckAll = _this.handleCheckAll.bind(_this);
@@ -23586,7 +23686,7 @@
23586
23686
  // tslint:disable-next-line: component-selector
23587
23687
  selector: 'crud-list',
23588
23688
  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]=\"{\r\n crudList: this,\r\n buttonAdd: buttonAdd, buttonExport: buttonExport, buttonDelete: buttonDelete\r\n }\">\r\n </ng-container>\r\n </div>\r\n\r\n <div *ngIf=\"!setting.hiddenPageSetting\" class=\"paginator-table\">\r\n <ng-container *ngIf=\"!paginationTemplate\">\r\n <paging-next-back-only [model]=\"model\" [setting]=\"setting\" (onChanged)=\"getData()\"\r\n (onChangeLimitPage)=\"savePageSize()\">\r\n </paging-next-back-only>\r\n </ng-container>\r\n <ng-container *ngIf=\"paginationTemplate\">\r\n <ng-container [ngTemplateOutlet]=\"paginationTemplate\"></ng-container>\r\n </ng-container>\r\n </div>\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=\"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 [ngTemplateOutlet]=\"getTemplate('toolbar')\" [ngTemplateOutletContext]=\"{\r\n selectedItems: model.selectedItems, crudList: this,\r\n buttonAdd: buttonAdd, buttonExport: buttonExport, buttonDelete: buttonDelete\r\n }\">\r\n </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 <ng-container [ngTemplateOutlet]=\"getTemplate('buttonBeforeToolbar')\"\r\n [ngTemplateOutletContext]=\"{crudList: this}\"></ng-container>\r\n <button type=\"button\" pButton label=\"\u0110\u00E1nh STT\" class=\"p-button-text\" style=\"display: none\"\r\n (click)=\"danhSoThuTuGroupLastest()\"></button>\r\n <ng-container *ngIf=\"!hiddenAdd\" [ngTemplateOutlet]=\"buttonAdd\"></ng-container>\r\n <ng-container *ngIf=\"setting.showExportSelectedItems\" [ngTemplateOutlet]=\"buttonExport\">\r\n </ng-container>\r\n <ng-container *ngIf=\"!hiddenDelete\" [ngTemplateOutlet]=\"buttonDelete\">\r\n </ng-container>\r\n <button *ngIf=\"!setting.disableShare && model.selectedItems.length > 0\"\r\n label=\"Chia s\u1EBB li\u00EAn k\u1EBFt\" type=\"button\" pButton pRipple\r\n [pTooltip]=\"'Chia s\u1EBB 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)=\"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]=\"getTemplate('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 (onDelete)=\"onDeleteSettings()\" (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\">\r\n</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'\" [styleClass]=\"'allow-selected'\" [model]=\"buttonContexts\">\r\n</p-contextMenu>\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%; padding: 1rem\">\r\n <process-workflow-form #formBase [businessSetting]=\"processWorkflowModel.data.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]=\"choYKienModel.data.setting\"\r\n [rowItem]=\"choYKienModel.data.rowData\" (onSaved)=\"choYKienModel.showEditForm = false\"\r\n (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]=\"workflowHistoryModel.data.setting\"\r\n [tableName]=\"workflowHistoryModel.data.tableName\" [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=\"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 (onCancel)=\"detailTaskModel.showEditForm = false\">\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<tn-dialog *ngIf=\"permissionListModel.showEditForm\" #dialog [header]=\"permissionListModel.header | translate\"\r\n [popupSize]=\"permissionListModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\" [useDefaultScrollBar]=\"true\"\r\n (onHide)=\"permissionListModel.showEditForm = false\">\r\n <div style=\"height: 100%\">\r\n <workflow-permission #formBase [item]=\"rowDataCurrent\" [businessSetting]=\"setting\"\r\n (onCancel)=\"permissionListModel.showEditForm = false\">\r\n </workflow-permission>\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<tn-dialog *ngIf=\"attachedTaskModel.showEditForm\" [header]=\"attachedTaskModel.header | translate\"\r\n [popupSize]=\"attachedTaskModel.popupSize\" [useDefaultScrollBar]=\"true\"\r\n (onHide)=\"attachedTaskModel.showEditForm = false\">\r\n <base-congviec [serviceCode]=\"setting.baseService.serviceCode\" [entity]=\"setting.baseService.entityName\"\r\n [itemIdAttach]=\"rowDataCurrent.id\"></base-congviec>\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=\"colgroup\" pTemplate=\"colgroup\" let-columns>\r\n <ng-container *ngTemplateOutlet=\"colgroup; context: {$implicit: columns}\"></ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"!colgroup\" pTemplate=\"colgroup\" let-columns>\r\n <ng-container *ngTemplateOutlet=\"baseColgroup; context: {$implicit: columns}\">\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=\"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: {$implicit: 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 </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=\"colgroup\" pTemplate=\"colgroup\" let-columns>\r\n <ng-container *ngTemplateOutlet=\"colgroup; context: {$implicit: columns}\"></ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"!colgroup\" pTemplate=\"colgroup\" let-columns>\r\n <ng-container *ngTemplateOutlet=\"baseColgroup; context: {$implicit: columns}\">\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=\"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 <div 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 </div>\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 </p-table>\r\n <after-view-checked></after-view-checked>\r\n</ng-template>\r\n<ng-template #baseColgroup let-columns>\r\n <colgroup>\r\n <col *ngIf=\"!setting.hiddenCheckbox\" [style.width]=\"widthCheckbox\" />\r\n <col *ngIf=\"!setting.hiddenOrderColumn\" [style.width]=\"widthOrderColumn\" />\r\n <col *ngIf=\"rowExpansion\" style=\"width: 2.5rem\" />\r\n <ng-container *ngFor=\"let col of columns; let i = index\">\r\n <col *ngIf=\"col && col.visible && col.field!='function'\" [style.width]=\"col.width\" />\r\n </ng-container>\r\n <col *ngIf=\"enableReorderRow\" style=\"width: 30px\" />\r\n <col *ngIf=\"!setting.hiddenFunctionColumn\" [style.width]=\"widthFunctionColumn || _widthFunctionColumn\" />\r\n </colgroup>\r\n</ng-template>\r\n<ng-template #buttonAdd>\r\n <span [appAuthorize]=\"serviceCode\" [permission]=\"authorizePaths[commonConst.ADD]\"\r\n [enableAuthorize]=\"buttonApplyAuthorize[commonConst.ADD]\">\r\n <button type=\"button\" pButton pRipple label=\"Th\u00EAm m\u1EDBi\" icon=\"pi pi-plus\" class=\"p-button-text\"\r\n [disabled]=\"!model.baseReady\" (click)=\"add()\"></button>\r\n </span>\r\n</ng-template>\r\n<ng-template #buttonExport>\r\n <button *ngIf=\"model.selectedItems.length > 0\" [appAuthorize]=\"serviceCode\"\r\n [permission]=\"authorizePaths[commonConst.EXPORT_EXCEL]\"\r\n [enableAuthorize]=\"buttonApplyAuthorize[commonConst.EXPORT_EXCEL]\" 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</ng-template>\r\n<ng-template #buttonDelete>\r\n <button *ngIf=\"!hiddenDelete && model.selectedItems.length > 0 && !disableMultipleDelete()\"\r\n [appAuthorize]=\"serviceCode\" [permission]=\"authorizePaths[commonConst.DELETE_MULTIPLE]\"\r\n [enableAuthorize]=\"buttonApplyAuthorize[commonConst.DELETE_MULTIPLE]\" type=\"button\" pButton pRipple\r\n [label]=\"'X\u00F3a ' + (model.selectedItems.length) | translate\" icon=\"pi pi-trash\"\r\n class=\"p-button-text p-button-danger\" (click)=\"deleteMutiple()\"></button>\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 class=\"chkbox link-or-action cell-checkbox\" [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\" class=\"stt nopad center\" [class.sticky]=\"setting.stickyColumn\"\r\n (dblclick)=\"reload()\">\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 [tnSortableColumnDisabled]=\"!col.sort\">\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\">\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=\"'intWithoutMask'\">\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=\"'currency'\">\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 [disabled]=\"!checkPermissionToUseButton(BUTTON_PHAN_QUYEN)\" (click)=\"showSettingsPermission()\"></button>\r\n <button *ngIf=\"!setting.hiddenSettingWorkflow\" 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 [disabled]=\"!checkPermissionToUseButton(BUTTON_CAU_HINH_QUY_TRINH)\"\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 <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 *ngIf=\"!rowData.template\" [tnReorderableRow]=\"index\" [attr.rowIndex]=\"index\" [ngClass]=\"rowData.objStyleClass\"\r\n [class.ui-state-highlight]=\"rowData._checked\" [pTooltip]=\"rowData.tooltip\" tooltipPosition=\"top\"\r\n [tooltipStyleClass]=\"rowData.tooltipClass\" [escape]=\"escape\" (click)=\"eventSelectRow($event, rowData)\">\r\n <ng-container *ngIf=\"!setting.hiddenCheckbox && !rowData.hidden[fieldCheckbox]\">\r\n <td class=\"chkbox link-or-action cell-checkbox\" [class.sticky]=\"setting.stickyColumn\"\r\n [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[fieldCheckbox]\"\r\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[fieldCheckbox]\">\r\n <ng-container *ngIf=\"!rowData.hiddenCheckBox\">\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>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n </ng-container>\r\n <td *ngIf=\"!setting.hiddenOrderColumn && !rowData.hidden[fieldOrder]\" 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]=\"rowData.bookmarkStyle\"></span>\r\n {{rowData[fieldOrder]}}\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n <td *ngIf=\"rowExpansion && !rowData.hidden[fieldColExpand]\" class=\"no-padding center row-expansion-toggle\"\r\n [class.sticky]=\"setting.stickyColumn\" [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[fieldColExpand]\"\r\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[fieldColExpand]\">\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 && !rowData.hidden[fieldColReorder]\" class=\"no-padding center\"\r\n [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[fieldColReorder]\"\r\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[fieldColReorder]\">\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 && !rowData.hidden[fieldFunction]\">\r\n <td class=\"text-center column-function\" style=\"text-align: center;\" [class.sticky]=\"setting.stickyColumn\"\r\n [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[fieldFunction]\"\r\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[fieldFunction]\">\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-text p-button-success link-or-action\"\r\n pTooltip=\"Xem l\u1ECBch s\u1EED phi\u00EAn b\u1EA3n\" tooltipPosition=\"top\"\r\n (click)=\"showListVersion(rowData)\"></button>\r\n <button *ngIf=\"!rowData.hiddenEdit\" [appAuthorize]=\"serviceCode\"\r\n [permission]=\"authorizePaths[commonConst.EDIT]\"\r\n [enableAuthorize]=\"buttonApplyAuthorize[commonConst.EDIT]\" type=\"button\" pButton pRipple\r\n [disabled]=\"disableEdit(rowData)\" [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\" [appAuthorize]=\"serviceCode\"\r\n [permission]=\"authorizePaths[commonConst.DELETE]\"\r\n [enableAuthorize]=\"buttonApplyAuthorize[commonConst.DELETE]\" type=\"button\" pButton pRipple\r\n [disabled]=\"disableDelete(rowData)\" [pTooltip]=\"'FORM.DELETE' | translate\" tooltipPosition=\"top\"\r\n class=\"p-button-rounded p-button-text p-button-danger link-or-action\" icon=\"pi pi-trash\"\r\n (click)=\"delete(rowData)\"></button>\r\n <button *ngIf=\"showMenuButtons && 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 <ng-container [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"\r\n [ngTemplateOutlet]=\"getTemplate('buttonAfter')\"></ng-container>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n <ng-container *ngIf=\"rowData.template\">\r\n <ng-container *ngTemplateOutlet=\"rowData.template; context: {\r\n $implicit: rowData, columns: columns, index: index, expanded: expanded, eventSelectRow: eventSelectRow, eventChecked: eventChecked\r\n }\"></ng-container>\r\n </ng-container>\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[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 {{rowData[field] | tnDate:col.dataType: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 {{rowData[field] | tnDate:col.dataType: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] | number}}\r\n </span>\r\n <span *ngSwitchCase=\"'intWithoutMask'\">\r\n {{rowData[field]}}\r\n </span>\r\n <span *ngSwitchCase=\"'currency'\">\r\n {{rowData[field] | currency:\"VND\"}}\r\n </span>\r\n <span *ngSwitchCase=\"'decimal'\">\r\n {{rowData[field] | number}}\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=\"'fileUpload'\">\r\n <ng-container\r\n *ngTemplateOutlet=\"fileUploadColumn; context: {$implicit: rowData, field: col.field, fileSetting: col.fileSetting}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'fileManager'\">\r\n <ng-container\r\n *ngTemplateOutlet=\"fileManagerColumn; context: {$implicit: rowData, field: col.field, fileSetting: col.fileSetting}\">\r\n </ng-container>\r\n </ng-container>\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 *ngIf=\"setting.columnSetting.showGroupSize\">\r\n ({{rowGroupMetadata[rowData[_groupField]].size}})</span>\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 && !rowData.hiddenWorkflowAction && !rowData.hiddenStartWorkflow\" pButton\r\n class=\"p-button-text link-or-action\" label=\"B\u1EAFt \u0111\u1EA7u\" style=\"border: 1px solid #7ca9cd;\"\r\n pTooltip=\"B\u1EAFt \u0111\u1EA7u ch\u1EA1y quy tr\u00ECnh\" tooltipPosition=\"top\"\r\n [disabled]=\"rowData.__startingWorkflow && !rowData.__notReadyForStart\"\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)=\"showActionWorkflow($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)=\"viewHistoryWorkflow(setting, rowData)\"></button>\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 *ngIf=\"!col.minimizeFilter\"\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 <ng-container *ngIf=\"col.minimizeFilter\">\r\n <button *ngIf=\"!filterData[col.field]\" type=\"button\" pButton icon=\"pi pi-filter-slash\"\r\n class=\"btn-filter-boolean\" (click)=\"showCheckBoxFilterMenu($event, col.field)\"></button>\r\n <button *ngIf=\"filterData[col.field]\" type=\"button\" pButton icon=\"pi pi-filter\"\r\n class=\"btn-filter-boolean p-button-primary\"\r\n (click)=\"showCheckBoxFilterMenu($event, col.field)\"></button>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n<ng-template #fileUploadColumn let-field=\"field\" let-rowData let-fileSetting=\"fileSetting\">\r\n <file-upload *ngIf=\"fileSetting.mode == FileUploadMode.usingFileInstanceId\"\r\n [sharedFolderType]=\"fileSetting.control.sharedFolderType\" [readonly]=\"fileSetting.control.readonly\"\r\n [accept]=\"fileSetting.control.accept\" [(ngModel)]=\"rowData[field]\">\r\n </file-upload>\r\n <service-file-upload *ngIf=\"fileSetting.control.mode == FileUploadMode.usingServiceFile\"\r\n [serviceCode]=\"fileSetting.control.serviceCode\" [parentContext]=\"context\" [entity]=\"fileSetting.control.entity\"\r\n [entityKey]=\"rowData[fileSetting.control.entityKeyField]\" [control]=\"fileSetting.control\"\r\n [fileDataService]=\"fileSetting.control.fileDataService\" [(ngModel)]=\"rowData.field\">\r\n </service-file-upload>\r\n</ng-template>\r\n<ng-template #fileManagerColumn let-rowData let-fileSetting=\"fileSetting\" let-field=\"field\">\r\n <file-manager [control]=\"fileSetting.control\" [serviceCode]=\"fileSetting.control.serviceCode\"\r\n [entity]=\"fileSetting.control.entity\" [entityKey]=\"rowData[fileSetting.control.entityKeyField]\"\r\n [readonly]=\"fileSetting.control.readonly\" [layout]=\"fileSetting.control.layout\"\r\n [maxFileSize]=\"fileSetting.control.maxFileSize\" [inTaiLieu]=\"fileSetting.control.inTaiLieu\"\r\n [(value)]=\"rowData[field]\">\r\n </file-manager>\r\n</ng-template>",
23589
- providers: [i3.DecimalPipe, i3.DatePipe],
23689
+ providers: [i4$1.DecimalPipe, i4$1.DatePipe],
23590
23690
  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:100px;padding:0}.custom-search-area{background-color:#f2f2f2;margin:-.5em -1em .5em;padding-left:.5em;padding-right:.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}.advance-search-container{display:flex;justify-content:flex-end}.btn-filter-boolean{height:26px;width:26px}.btn-filter-boolean:not(.p-button-primary),.btn-filter-boolean:not(.p-button-primary):hover{background:#f5f6f8;border-color:#ced4da;color:#6c757d}::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 .main-title>*>h1{font-size:1.2em}::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 .custom-search-area .main-container-search-inner .container-control{overflow:hidden;padding-bottom:0}::ng-deep crud-list>p-contextmenu{display:none}@media (max-width:640px){::ng-deep crud-list .--table-responsive .p-datatable-wrapper{padding:1px}}"]
23591
23691
  },] }
23592
23692
  ];
@@ -23887,15 +23987,15 @@
23887
23987
  var moduleConfigService = _injector.get(ModuleConfigService);
23888
23988
  _this.environment = moduleConfigService.getConfig().environment;
23889
23989
  _this._notifierService = _this._injector.get(NotifierService);
23890
- _this._activatedRoute = _this._injector.get(i3$1.ActivatedRoute);
23891
- _this._router = _this._injector.get(i3$1.Router);
23990
+ _this._activatedRoute = _this._injector.get(i3.ActivatedRoute);
23991
+ _this._router = _this._injector.get(i3.Router);
23892
23992
  _this._customRouterService = _this._injector.get(CustomRouterService);
23893
23993
  _this._listHelperService = _this._injector.get(ListHelperService);
23894
23994
  _this._commonService = _this._injector.get(CommonService);
23895
23995
  _this._translateService = _this._injector.get(i2.TranslateService);
23896
23996
  _this._exportService = _this._injector.get(ExportService);
23897
23997
  _this._crudService = _this._injector.get(CrudService);
23898
- _this._datePipe = _this._injector.get(i3.DatePipe);
23998
+ _this._datePipe = _this._injector.get(i4$1.DatePipe);
23899
23999
  _this._cd = _this._injector.get(i0.ChangeDetectorRef);
23900
24000
  _this._userService = _this._injector.get(UserService);
23901
24001
  _this._masterDataService = _this._injector.get(MasterDataService);
@@ -23904,6 +24004,7 @@
23904
24004
  _this._workflowPermissionDetailService = _this._injector.get(WorkflowPermissionDetailService);
23905
24005
  _this._stateMachinesService = _this._injector.get(StateMachinesService);
23906
24006
  _this._congViecServiceInBase = _this._injector.get(CongViecService);
24007
+ _this._loggerService = _this._injector.get(LoggerService);
23907
24008
  _this.setting.key = _this._commonService.guid();
23908
24009
  return _this;
23909
24010
  }
@@ -24649,7 +24750,7 @@
24649
24750
  _this._notifierService.showWarning('Bạn không có quyền xem bản ghi');
24650
24751
  }
24651
24752
  }).catch(function (err) {
24652
- console.error('error on get detail from querystring', err);
24753
+ _this._loggerService.logError('error on get detail from querystring', err);
24653
24754
  _this._notifierService.showWarning('Không tìm thấy bản ghi cần xem chi tiết');
24654
24755
  });
24655
24756
  }
@@ -24672,7 +24773,7 @@
24672
24773
  _this._notifierService.showWarning('Bạn không có quyền xem bản ghi');
24673
24774
  }
24674
24775
  }); }).catch(function (err) {
24675
- console.error('error on get detail from querystring', err);
24776
+ _this._loggerService.logError('error on get detail from querystring', err);
24676
24777
  _this._notifierService.showWarning('Không tìm thấy bản ghi cần xem chi tiết');
24677
24778
  });
24678
24779
  };
@@ -25611,7 +25712,7 @@
25611
25712
  { type: PermissionService },
25612
25713
  { type: ngxDeviceDetector.DeviceDetectorService },
25613
25714
  { type: UserService },
25614
- { type: i3$1.Router },
25715
+ { type: i3.Router },
25615
25716
  { type: AuthenService },
25616
25717
  { type: GlobalService }
25617
25718
  ]; };
@@ -26314,7 +26415,7 @@
26314
26415
  ];
26315
26416
  NotFoundComponent.ctorParameters = function () { return [
26316
26417
  { type: i0.Injector },
26317
- { type: i3$1.Router },
26418
+ { type: i3.Router },
26318
26419
  { type: UserService },
26319
26420
  { type: ModuleConfigService },
26320
26421
  { type: AuthenService }
@@ -26396,7 +26497,7 @@
26396
26497
  AccessDeniedComponent.ctorParameters = function () { return [
26397
26498
  { type: i0.Injector },
26398
26499
  { type: UserService },
26399
- { type: i3$1.Router },
26500
+ { type: i3.Router },
26400
26501
  { type: ModuleConfigService },
26401
26502
  { type: AuthenService }
26402
26503
  ]; };
@@ -26444,7 +26545,7 @@
26444
26545
  ];
26445
26546
  UniversalLinkProcessorComponent.ctorParameters = function () { return [
26446
26547
  { type: i0.Injector },
26447
- { type: i3$1.ActivatedRoute }
26548
+ { type: i3.ActivatedRoute }
26448
26549
  ]; };
26449
26550
 
26450
26551
  var TraceInterceptor = /** @class */ (function () {
@@ -26523,7 +26624,7 @@
26523
26624
  if (!language) {
26524
26625
  language = 'vi';
26525
26626
  }
26526
- i3.registerLocaleData(locale, language);
26627
+ i4$1.registerLocaleData(locale, language);
26527
26628
  };
26528
26629
  PublicFunction.importRootModule = function (environment) {
26529
26630
  return [
@@ -26574,7 +26675,7 @@
26574
26675
  },
26575
26676
  i1.MessageService,
26576
26677
  i1.ConfirmationService,
26577
- i3.DatePipe,
26678
+ i4$1.DatePipe,
26578
26679
  UserFormatPipe,
26579
26680
  UsersFormatPipe,
26580
26681
  HtmlFormatPipe,
@@ -26583,7 +26684,7 @@
26583
26684
  OrganizationsFormatPipe,
26584
26685
  MasterDataPipe,
26585
26686
  NotifierService,
26586
- i3.DecimalPipe,
26687
+ i4$1.DecimalPipe,
26587
26688
  i2.TranslateService,
26588
26689
  EntityWorkflowSettingService,
26589
26690
  EntityWorkflowHistoryService,
@@ -29609,7 +29710,7 @@
29609
29710
  };
29610
29711
  return GenericGuardChildService;
29611
29712
  }());
29612
- GenericGuardChildService.ɵprov = i0.ɵɵdefineInjectable({ factory: function GenericGuardChildService_Factory() { return new GenericGuardChildService(i0.ɵɵinject(UserService), i0.ɵɵinject(PermissionService), i0.ɵɵinject(i3$1.Router), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(NotifierService)); }, token: GenericGuardChildService, providedIn: "root" });
29713
+ GenericGuardChildService.ɵprov = i0.ɵɵdefineInjectable({ factory: function GenericGuardChildService_Factory() { return new GenericGuardChildService(i0.ɵɵinject(UserService), i0.ɵɵinject(PermissionService), i0.ɵɵinject(i3.Router), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(NotifierService)); }, token: GenericGuardChildService, providedIn: "root" });
29613
29714
  GenericGuardChildService.decorators = [
29614
29715
  { type: i0.Injectable, args: [{
29615
29716
  providedIn: 'root'
@@ -29618,7 +29719,7 @@
29618
29719
  GenericGuardChildService.ctorParameters = function () { return [
29619
29720
  { type: UserService },
29620
29721
  { type: PermissionService },
29621
- { type: i3$1.Router },
29722
+ { type: i3.Router },
29622
29723
  { type: i0.Injector },
29623
29724
  { type: NotifierService }
29624
29725
  ]; };
@@ -30532,7 +30633,7 @@
30532
30633
  // Loại export.
30533
30634
  this._type = JobTypes.SingnalR;
30534
30635
  this._code = code;
30535
- var datepipe = new i3.DatePipe('en-US');
30636
+ var datepipe = new i4$1.DatePipe('en-US');
30536
30637
  var formattedDate = datepipe.transform(new Date(), 'ddMMyyyy_hhmmss');
30537
30638
  this._fileName = fileName + "_" + formattedDate + TemplateConstant.EXCEL_EXTENSION;
30538
30639
  this._data = data || {};
@@ -31261,7 +31362,7 @@
31261
31362
  _this.messageWaiting = __spread(data.message);
31262
31363
  });
31263
31364
  this._router.events.subscribe(function (x) {
31264
- if (x instanceof i3$1.NavigationStart) {
31365
+ if (x instanceof i3.NavigationStart) {
31265
31366
  _this.rootData.httpRequestList = [];
31266
31367
  }
31267
31368
  });
@@ -31729,14 +31830,14 @@
31729
31830
  { type: i4.OAuthService },
31730
31831
  { type: AuthenService },
31731
31832
  { type: UserService },
31732
- { type: i3$1.Router },
31833
+ { type: i3.Router },
31733
31834
  { type: platformBrowser.Title },
31734
31835
  { type: SignalRService },
31735
31836
  { type: StorageUpdatedService },
31736
31837
  { type: CustomRouterService },
31737
31838
  { type: ApplicationContextService },
31738
31839
  { type: ComponentContextService },
31739
- { type: i3$1.ActivatedRoute },
31840
+ { type: i3.ActivatedRoute },
31740
31841
  { type: ngxDeviceDetector.DeviceDetectorService },
31741
31842
  { type: i0.ChangeDetectorRef },
31742
31843
  { type: TnClientService },
@@ -42413,7 +42514,7 @@
42413
42514
  };
42414
42515
  return DhvinhGuardService;
42415
42516
  }());
42416
- DhvinhGuardService.ɵprov = i0.ɵɵdefineInjectable({ factory: function DhvinhGuardService_Factory() { return new DhvinhGuardService(i0.ɵɵinject(UserService), i0.ɵɵinject(PermissionService), i0.ɵɵinject(i3$1.Router), i0.ɵɵinject(NotifierService)); }, token: DhvinhGuardService, providedIn: "root" });
42517
+ DhvinhGuardService.ɵprov = i0.ɵɵdefineInjectable({ factory: function DhvinhGuardService_Factory() { return new DhvinhGuardService(i0.ɵɵinject(UserService), i0.ɵɵinject(PermissionService), i0.ɵɵinject(i3.Router), i0.ɵɵinject(NotifierService)); }, token: DhvinhGuardService, providedIn: "root" });
42417
42518
  DhvinhGuardService.decorators = [
42418
42519
  { type: i0.Injectable, args: [{
42419
42520
  providedIn: 'root'
@@ -42422,7 +42523,7 @@
42422
42523
  DhvinhGuardService.ctorParameters = function () { return [
42423
42524
  { type: UserService },
42424
42525
  { type: PermissionService },
42425
- { type: i3$1.Router },
42526
+ { type: i3.Router },
42426
42527
  { type: NotifierService }
42427
42528
  ]; };
42428
42529
 
@@ -42546,7 +42647,7 @@
42546
42647
  };
42547
42648
  return GuardSvService;
42548
42649
  }());
42549
- GuardSvService.ɵprov = i0.ɵɵdefineInjectable({ factory: function GuardSvService_Factory() { return new GuardSvService(i0.ɵɵinject(UserService), i0.ɵɵinject(i3$1.Router), i0.ɵɵinject(NotifierService)); }, token: GuardSvService, providedIn: "root" });
42650
+ GuardSvService.ɵprov = i0.ɵɵdefineInjectable({ factory: function GuardSvService_Factory() { return new GuardSvService(i0.ɵɵinject(UserService), i0.ɵɵinject(i3.Router), i0.ɵɵinject(NotifierService)); }, token: GuardSvService, providedIn: "root" });
42550
42651
  GuardSvService.decorators = [
42551
42652
  { type: i0.Injectable, args: [{
42552
42653
  providedIn: 'root'
@@ -42554,7 +42655,7 @@
42554
42655
  ];
42555
42656
  GuardSvService.ctorParameters = function () { return [
42556
42657
  { type: UserService },
42557
- { type: i3$1.Router },
42658
+ { type: i3.Router },
42558
42659
  { type: NotifierService }
42559
42660
  ]; };
42560
42661
 
@@ -42601,7 +42702,7 @@
42601
42702
  };
42602
42703
  return GuardService;
42603
42704
  }());
42604
- GuardService.ɵprov = i0.ɵɵdefineInjectable({ factory: function GuardService_Factory() { return new GuardService(i0.ɵɵinject(UserService), i0.ɵɵinject(PermissionService), i0.ɵɵinject(i3$1.Router), i0.ɵɵinject(NotifierService)); }, token: GuardService, providedIn: "root" });
42705
+ GuardService.ɵprov = i0.ɵɵdefineInjectable({ factory: function GuardService_Factory() { return new GuardService(i0.ɵɵinject(UserService), i0.ɵɵinject(PermissionService), i0.ɵɵinject(i3.Router), i0.ɵɵinject(NotifierService)); }, token: GuardService, providedIn: "root" });
42605
42706
  GuardService.decorators = [
42606
42707
  { type: i0.Injectable, args: [{
42607
42708
  providedIn: 'root'
@@ -42610,7 +42711,7 @@
42610
42711
  GuardService.ctorParameters = function () { return [
42611
42712
  { type: UserService },
42612
42713
  { type: PermissionService },
42613
- { type: i3$1.Router },
42714
+ { type: i3.Router },
42614
42715
  { type: NotifierService }
42615
42716
  ]; };
42616
42717
 
@@ -42672,6 +42773,10 @@
42672
42773
  _this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.notificationCRUDEndpoint;
42673
42774
  return _this;
42674
42775
  }
42776
+ NotificationService.prototype.getAllUserUnreadNotification = function () {
42777
+ var url = this.serviceUri + "/AllUserUnreadNotification";
42778
+ return this.defaultGet(url);
42779
+ };
42675
42780
  NotificationService.prototype.getAllUserReadNotification = function () {
42676
42781
  var url = this.serviceUri + "/AllUserReadNotification";
42677
42782
  return this.defaultGet(url);
@@ -43637,7 +43742,7 @@
43637
43742
  { type: i0.Injector },
43638
43743
  { type: ModuleConfigService },
43639
43744
  { type: UserService },
43640
- { type: i3$1.Router },
43745
+ { type: i3.Router },
43641
43746
  { type: AuthenService }
43642
43747
  ]; };
43643
43748
 
@@ -45995,7 +46100,7 @@
45995
46100
  ];
45996
46101
  AppTopBarV1Component.ctorParameters = function () { return [
45997
46102
  { type: CustomRouterService },
45998
- { type: i3$1.Router },
46103
+ { type: i3.Router },
45999
46104
  { type: CommonService },
46000
46105
  { type: AuthenService },
46001
46106
  { type: i0.ChangeDetectorRef },
@@ -46443,7 +46548,7 @@
46443
46548
  ];
46444
46549
  AppTopBarV2Component.ctorParameters = function () { return [
46445
46550
  { type: CustomRouterService },
46446
- { type: i3$1.Router },
46551
+ { type: i3.Router },
46447
46552
  { type: CommonService },
46448
46553
  { type: AuthenService },
46449
46554
  { type: i0.ChangeDetectorRef },
@@ -46564,7 +46669,7 @@
46564
46669
  },] }
46565
46670
  ];
46566
46671
  AppSubMenuComponent.ctorParameters = function () { return [
46567
- { type: i3$1.Router },
46672
+ { type: i3.Router },
46568
46673
  { type: CommonService },
46569
46674
  { type: i0.Injector },
46570
46675
  { type: CustomRouterService }
@@ -46600,7 +46705,7 @@
46600
46705
  }
46601
46706
  this._router
46602
46707
  .events
46603
- .pipe(operators.filter(function (event) { return event instanceof i3$1.NavigationEnd; }))
46708
+ .pipe(operators.filter(function (event) { return event instanceof i3.NavigationEnd; }))
46604
46709
  .subscribe(function (event) {
46605
46710
  for (var i in _this.model) {
46606
46711
  var item = _this.model[i];
@@ -46735,7 +46840,7 @@
46735
46840
  AppMenuComponent.ctorParameters = function () { return [
46736
46841
  { type: MenuService },
46737
46842
  { type: i2.TranslateService },
46738
- { type: i3$1.Router },
46843
+ { type: i3.Router },
46739
46844
  { type: ApplicationContextService },
46740
46845
  { type: CommonService },
46741
46846
  { type: ModuleConfigService },
@@ -47208,7 +47313,7 @@
47208
47313
  ];
47209
47314
  AppTopBarComponent.ctorParameters = function () { return [
47210
47315
  { type: CustomRouterService },
47211
- { type: i3$1.Router },
47316
+ { type: i3.Router },
47212
47317
  { type: CommonService },
47213
47318
  { type: AuthenService },
47214
47319
  { type: i0.ChangeDetectorRef },
@@ -51803,13 +51908,13 @@
51803
51908
  useExisting: i0.forwardRef(function () { return MaskComponent; }),
51804
51909
  multi: true
51805
51910
  },
51806
- i3.DecimalPipe
51911
+ i4$1.DecimalPipe
51807
51912
  ],
51808
51913
  styles: [".tn-mask-viewMode>span{margin-right:3px}.tn-mask-viewMode>span:last-child{margin-right:0}"]
51809
51914
  },] }
51810
51915
  ];
51811
51916
  MaskComponent.ctorParameters = function () { return [
51812
- { type: i3.DecimalPipe }
51917
+ { type: i4$1.DecimalPipe }
51813
51918
  ]; };
51814
51919
  MaskComponent.propDecorators = {
51815
51920
  maskType: [{ type: i0.Input }],
@@ -51949,7 +52054,7 @@
51949
52054
  },] }
51950
52055
  ];
51951
52056
  NumberPickerRangeComponent.ctorParameters = function () { return [
51952
- { type: i3.DecimalPipe }
52057
+ { type: i4$1.DecimalPipe }
51953
52058
  ]; };
51954
52059
  NumberPickerRangeComponent.propDecorators = {
51955
52060
  readonly: [{ type: i0.Input }],
@@ -53413,7 +53518,7 @@
53413
53518
  { type: PermissionService },
53414
53519
  { type: ngxDeviceDetector.DeviceDetectorService },
53415
53520
  { type: UserService },
53416
- { type: i3$1.Router },
53521
+ { type: i3.Router },
53417
53522
  { type: AuthenService },
53418
53523
  { type: GlobalService }
53419
53524
  ]; };
@@ -53623,7 +53728,7 @@
53623
53728
  { type: PermissionService },
53624
53729
  { type: ngxDeviceDetector.DeviceDetectorService },
53625
53730
  { type: UserService },
53626
- { type: i3$1.Router },
53731
+ { type: i3.Router },
53627
53732
  { type: AuthenService },
53628
53733
  { type: GlobalService }
53629
53734
  ]; };
@@ -55075,7 +55180,7 @@
55075
55180
  _this.bounceNoti = true;
55076
55181
  _this.afterGetNotication();
55077
55182
  }); }),
55078
- this._notificationService.getAllUserReadNotification().then(function (res) {
55183
+ this._notificationService.getAllUserUnreadNotification().then(function (res) {
55079
55184
  if (res.data == null || !res.success) {
55080
55185
  _this._notifierService.showWarningByResponse(res);
55081
55186
  return;
@@ -55218,7 +55323,7 @@
55218
55323
  { type: SignalRService },
55219
55324
  { type: UserV5Service },
55220
55325
  { type: NotificationService },
55221
- { type: i3$1.Router },
55326
+ { type: i3.Router },
55222
55327
  { type: ModuleConfigService },
55223
55328
  { type: CrudService },
55224
55329
  { type: NotifierService },
@@ -58446,7 +58551,7 @@
58446
58551
  var Button = /** @class */ (function () {
58447
58552
  function Button() {
58448
58553
  this.icon = '';
58449
- this.iconPos = 'top';
58554
+ this.iconPos = 'left';
58450
58555
  this.loadingIcon = '';
58451
58556
  }
58452
58557
  return Button;
@@ -58514,16 +58619,16 @@
58514
58619
  if (this.setting == null || this.idModel == null) {
58515
58620
  return;
58516
58621
  }
58622
+ this.showActionWorkflow();
58517
58623
  };
58518
- WorkflowButtonComponent.prototype.showActionWorkflow = function (evt) {
58624
+ WorkflowButtonComponent.prototype.showActionWorkflow = function () {
58519
58625
  return __awaiter(this, void 0, void 0, function () {
58520
58626
  var _this = this;
58521
58627
  return __generator(this, function (_a) {
58522
58628
  this.showingActionWorkflow = true;
58523
58629
  this.setting.baseService.getDetail(this.idModel)
58524
58630
  .then(function (res) { return __awaiter(_this, void 0, void 0, function () {
58525
- var currentUser, dataSource, finalData, _a;
58526
- var _this = this;
58631
+ var currentUser, _a;
58527
58632
  return __generator(this, function (_b) {
58528
58633
  switch (_b.label) {
58529
58634
  case 0:
@@ -58535,20 +58640,13 @@
58535
58640
  if (currentUser == null) {
58536
58641
  return [2 /*return*/];
58537
58642
  }
58538
- dataSource = [res.data];
58539
- return [4 /*yield*/, this._workflowPermissionDetailService.appendInfoForWorkflow(currentUser.userId, dataSource)];
58643
+ return [4 /*yield*/, this._workflowPermissionDetailService.appendInfoForWorkflowSingle(currentUser.userId, res.data)];
58540
58644
  case 1:
58541
58645
  _b.sent();
58542
- finalData = dataSource[0];
58543
58646
  _a = this;
58544
- return [4 /*yield*/, this.getButtonContext(finalData)];
58647
+ return [4 /*yield*/, this.getButtonContext(res.data)];
58545
58648
  case 2:
58546
58649
  _a.workflowButtons = _b.sent();
58547
- setTimeout(function (f) {
58548
- _this.contextMenu.show(evt);
58549
- }, 10);
58550
- evt.preventDefault();
58551
- evt.stopPropagation();
58552
58650
  this.showingActionWorkflow = false;
58553
58651
  return [2 /*return*/];
58554
58652
  }
@@ -58780,7 +58878,7 @@
58780
58878
  return;
58781
58879
  var name = '';
58782
58880
  if (typeof crudListSetting.displayField == 'string') {
58783
- name = rowData[(crudListSetting.displayField)];
58881
+ name = rowData[crudListSetting.displayField];
58784
58882
  }
58785
58883
  else {
58786
58884
  name = (crudListSetting.displayField)(rowData);
@@ -58868,8 +58966,7 @@
58868
58966
  };
58869
58967
  WorkflowButtonComponent.prototype.hideWaitBox = function (message) {
58870
58968
  this.rootContext.fireEvent(ComCtxConstants.ROOT.SHOW_WAIT_BOX, {
58871
- show: true,
58872
- message: message
58969
+ show: false
58873
58970
  });
58874
58971
  };
58875
58972
  WorkflowButtonComponent.prototype.handleResponse = function (res, message, callBack, callBackError) {
@@ -58908,8 +59005,8 @@
58908
59005
  WorkflowButtonComponent.decorators = [
58909
59006
  { type: i0.Component, args: [{
58910
59007
  selector: 'workflow-button',
58911
- template: "<button type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-rounded\" label=\"H\u00E0nh \u0111\u1ED9ng\" pTooltip=\"H\u00E0nh \u0111\u1ED9ng\" tooltipPosition=\"top\"\r\n [disabled]=\"showingActionWorkflow\" (click)=\"showActionWorkflow($event)\"></button>\r\n<p-contextMenu #contextMenu [appendTo]=\"'body'\" [styleClass]=\"'allow-selected'\" [model]=\"workflowButtons\">\r\n</p-contextMenu>\r\n\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%; padding: 1rem\">\r\n <process-workflow-form #formBase [businessSetting]=\"processWorkflowModel.data.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]=\"choYKienModel.data.setting\"\r\n [rowItem]=\"choYKienModel.data.rowData\" (onSaved)=\"choYKienModel.showEditForm = false\"\r\n (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]=\"workflowHistoryModel.data.setting\"\r\n [tableName]=\"workflowHistoryModel.data.tableName\" [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=\"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 (onCancel)=\"detailTaskModel.showEditForm = false\">\r\n </base-congviec-form>\r\n</tn-dialog>\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<!--<tn-dialog *ngIf=\"permissionListModel.showEditForm\" #dialog [header]=\"permissionListModel.header | translate\"-->\r\n<!-- [popupSize]=\"permissionListModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\" [useDefaultScrollBar]=\"true\"-->\r\n<!-- (onHide)=\"permissionListModel.showEditForm = false\">-->\r\n<!-- <div style=\"height: 100%\">-->\r\n<!-- <workflow-permission #formBase [item]=\"rowDataCurrent\" [businessSetting]=\"setting\"-->\r\n<!-- (onCancel)=\"permissionListModel.showEditForm = false\">-->\r\n<!-- </workflow-permission>-->\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<!--<tn-dialog *ngIf=\"attachedTaskModel.showEditForm\" [header]=\"attachedTaskModel.header | translate\"-->\r\n<!-- [popupSize]=\"attachedTaskModel.popupSize\" [useDefaultScrollBar]=\"true\"-->\r\n<!-- (onHide)=\"attachedTaskModel.showEditForm = false\">-->\r\n<!-- <base-congviec [serviceCode]=\"setting.baseService.serviceCode\" [entity]=\"setting.baseService.entityName\"-->\r\n<!-- [itemIdAttach]=\"rowDataCurrent.id\"></base-congviec>-->\r\n<!--</tn-dialog>-->\r\n",
58912
- styles: [".workflowButtons{display:flex;flex:1 1}.workflowButtons>button{min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content}"]
59008
+ template: "<ng-container *ngIf=\"workflowButtons\">\r\n <div class=\"workflowButtons\">\r\n <div *ngFor=\"let button of workflowButtons\">\r\n <button pButton class=\"p-button-text p-button-rounded link-or-action\" type=\"button\" [label]=\"button.label\"\r\n [icon]=\"button.icon\" (click)=\"button.command()\"></button>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\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%; padding: 1rem\">\r\n <process-workflow-form #formBase [businessSetting]=\"processWorkflowModel.data.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]=\"choYKienModel.data.setting\"\r\n [rowItem]=\"choYKienModel.data.rowData\" (onSaved)=\"choYKienModel.showEditForm = false\"\r\n (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]=\"workflowHistoryModel.data.setting\"\r\n [tableName]=\"workflowHistoryModel.data.tableName\" [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=\"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 (onCancel)=\"detailTaskModel.showEditForm = false\">\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<!--<tn-dialog *ngIf=\"permissionListModel.showEditForm\" #dialog [header]=\"permissionListModel.header | translate\"-->\r\n<!-- [popupSize]=\"permissionListModel.popupSize\" [scrollBarStyleClass]=\"'fit-content'\" [useDefaultScrollBar]=\"true\"-->\r\n<!-- (onHide)=\"permissionListModel.showEditForm = false\">-->\r\n<!-- <div style=\"height: 100%\">-->\r\n<!-- <workflow-permission #formBase [item]=\"rowDataCurrent\" [businessSetting]=\"setting\"-->\r\n<!-- (onCancel)=\"permissionListModel.showEditForm = false\">-->\r\n<!-- </workflow-permission>-->\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<!--<tn-dialog *ngIf=\"attachedTaskModel.showEditForm\" [header]=\"attachedTaskModel.header | translate\"-->\r\n<!-- [popupSize]=\"attachedTaskModel.popupSize\" [useDefaultScrollBar]=\"true\"-->\r\n<!-- (onHide)=\"attachedTaskModel.showEditForm = false\">-->\r\n<!-- <base-congviec [serviceCode]=\"setting.baseService.serviceCode\" [entity]=\"setting.baseService.entityName\"-->\r\n<!-- [itemIdAttach]=\"rowDataCurrent.id\"></base-congviec>-->\r\n<!--</tn-dialog>-->",
59009
+ styles: [".workflowButtons{display:flex;flex:1 1}.workflowButtons>button{margin-right:.2rem;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content}"]
58913
59010
  },] }
58914
59011
  ];
58915
59012
  WorkflowButtonComponent.ctorParameters = function () { return [
@@ -61258,7 +61355,7 @@
61258
61355
  return [
61259
61356
  accordion.AccordionModule,
61260
61357
  angularSplit.AngularSplitModule,
61261
- i3.CommonModule,
61358
+ i4$1.CommonModule,
61262
61359
  dialog.DialogModule,
61263
61360
  button.ButtonModule,
61264
61361
  breadcrumb.BreadcrumbModule,
@@ -61870,155 +61967,156 @@
61870
61967
  exports.ɵ7 = ɵ7;
61871
61968
  exports.ɵ8 = ɵ8;
61872
61969
  exports.ɵ9 = ɵ9;
61873
- exports.ɵa = DropdownService;
61874
- exports.ɵb = EntityPickerService;
61875
- exports.ɵba = RoleService;
61876
- exports.ɵbb = ProcessWorkflowFormComponent;
61877
- exports.ɵbc = CongViecDinhKemService;
61878
- exports.ɵbd = CongViecThayDoiService;
61879
- exports.ɵbe = AddressComponent;
61880
- exports.ɵbf = AfterViewCheckedComponent;
61881
- exports.ɵbg = AdvanceSearchComponent;
61882
- exports.ɵbh = AppRootMenuComponent;
61883
- exports.ɵbi = AppTopBarComponent;
61884
- exports.ɵbj = AppTopBarV1Component;
61885
- exports.ɵbk = AppTopBarV2Component;
61886
- exports.ɵbl = AppProfileComponent;
61887
- exports.ɵbm = AppSubMenuComponent;
61888
- exports.ɵbn = AppMenuComponent;
61889
- exports.ɵbo = AutoCompletePickerComponent;
61890
- exports.ɵbp = ImageUploaderComponent;
61891
- exports.ɵbq = CheckBoxListComponent;
61892
- exports.ɵbr = CoCauToChucPickerListComponent;
61893
- exports.ɵbs = CoCauToChucPickerListNewComponent;
61894
- exports.ɵbt = CoCauToChucNewService;
61895
- exports.ɵbu = FormBuilderComponent;
61896
- exports.ɵbv = BaseCongViecTestComponent;
61897
- exports.ɵbw = BaseCauHinhWorkflowDetailComponent;
61898
- exports.ɵbx = BaseDmLoaiCongViecFormComponent;
61899
- exports.ɵby = BaseDmLinhVucCongViecFormComponent;
61900
- exports.ɵbz = BaseDmPriorityFormComponent;
61901
- exports.ɵc = ExceptionHandlerService;
61902
- exports.ɵca = BaseCongviecDinhkemComponent;
61903
- exports.ɵcb = BaseCongviecDinhkemFormComponent;
61904
- exports.ɵcc = DatetimePickerComponent;
61905
- exports.ɵcd = DatetimePickerRangeComponent;
61906
- exports.ɵce = DynamicNodeComponent;
61907
- exports.ɵcf = EntityPickerBoxComponent;
61908
- exports.ɵcg = EntityPickerDataComponent;
61909
- exports.ɵch = EntityPickerSelectedComponent;
61910
- exports.ɵci = EntityPickerComponent;
61911
- exports.ɵcj = EntityPickerDialogComponent;
61912
- exports.ɵck = EntityPickerTreeDataComponent;
61913
- exports.ɵcl = EntityPickerTreeSelectedComponent;
61914
- exports.ɵcm = EntityPermissionComponent;
61915
- exports.ɵcn = EquationEditorComponent;
61916
- exports.ɵco = MaskComponent;
61917
- exports.ɵcp = NumberPickerRangeComponent;
61918
- exports.ɵcq = PagingNextBackOnlyComponent;
61919
- exports.ɵcr = RadioButtonListComponent;
61920
- exports.ɵcs = VanBanPickerComponent;
61921
- exports.ɵct = VanBanDenService;
61922
- exports.ɵcu = VanBanDiService;
61923
- exports.ɵcv = VanBanPickerDialogComponent;
61924
- exports.ɵcw = VanbanDiPickerComponent;
61925
- exports.ɵcx = VanbanDenPickerComponent;
61926
- exports.ɵcy = CongViecPickerComponent;
61927
- exports.ɵcz = SettingsComponent;
61928
- exports.ɵd = CanBo_HoSoService;
61929
- exports.ɵda = SettingsRowComponent;
61930
- exports.ɵdb = SettingsWorkflowComponent;
61931
- exports.ɵdc = SettingsWorkflowNo1Component;
61932
- exports.ɵdd = SimpleWorkflowFormComponent;
61933
- exports.ɵde = ProcessWorkflowTargetComponent;
61934
- exports.ɵdf = DmChucVuService;
61935
- exports.ɵdg = ChoYKienFormComponent;
61936
- exports.ɵdh = SplashComponentV1Component;
61937
- exports.ɵdi = SplashComponentV2Component;
61938
- exports.ɵdj = StateMachinesConnectionReceiverComponent;
61939
- exports.ɵdk = StateMachinesConnectionReceiverConditionComponent;
61940
- exports.ɵdl = StateMachinesConnectionReceiverDepartmentComponent;
61941
- exports.ɵdm = StateMachinesConnectionReceiverGroupComponent;
61942
- exports.ɵdn = StateMachinesConnectionReceiverUserComponent;
61943
- exports.ɵdo = StateMachinesConnectionReceiverRoleComponent;
61944
- exports.ɵdp = StateMachinesConnectionSenderComponent;
61945
- exports.ɵdq = StartWorkflowComponent;
61946
- exports.ɵdr = ShareLinkByPermissionComponent;
61947
- exports.ɵds = WorkflowSettingNewComponent;
61948
- exports.ɵdt = PermissionSharingComponent;
61949
- exports.ɵdu = WorkflowPermissionService;
61950
- exports.ɵdv = TnCheckboxComponent;
61951
- exports.ɵdw = TnDialogComponent;
61952
- exports.ɵdx = TnColorPickerComponent;
61953
- exports.ɵdy = TnTinymceComponent;
61954
- exports.ɵdz = TnTabViewComponent;
61955
- exports.ɵe = ListBase;
61956
- exports.ɵea = TableDetailFormComponent;
61957
- exports.ɵeb = FileIconPipe;
61958
- exports.ɵec = FileSizePipe;
61959
- exports.ɵed = QuickAddFormComponent;
61960
- exports.ɵee = PreventShiftTabDirective;
61961
- exports.ɵef = TnTemplateDirective;
61962
- exports.ɵeg = UserPickerComponent;
61963
- exports.ɵeh = UserPickerBoxComponent;
61964
- exports.ɵei = CoCauToChucTestService;
61965
- exports.ɵej = TnAppHelpComponent;
61966
- exports.ɵek = PathNameService;
61967
- exports.ɵel = HelperCurrentPageComponent;
61968
- exports.ɵem = TnAppNotificationListComponent;
61969
- exports.ɵen = TnAppNotificationComponent;
61970
- exports.ɵeo = FolderFormComponent;
61971
- exports.ɵep = FileFormComponent;
61972
- exports.ɵeq = FileViewerComponent;
61973
- exports.ɵer = FileVersionListComponent;
61974
- exports.ɵes = ViewDetailComponent;
61975
- exports.ɵet = WorkflowHistoryComponent;
61976
- exports.ɵeu = WorkflowHistoryDialogComponent;
61977
- exports.ɵev = WorkflowHistoryNewComponent;
61978
- exports.ɵew = WorkflowSettingComponent;
61979
- exports.ɵex = WorkflowSettingDialogComponent;
61980
- exports.ɵey = WorkflowPermissionComponent;
61981
- exports.ɵez = WorkflowPermissionFormComponent;
61982
- exports.ɵf = ListComponentBase;
61983
- exports.ɵfa = ReferenceTextBoxComponent;
61984
- exports.ɵfb = QrCodeGeneratorComponent;
61985
- exports.ɵfc = AccessDeniedV1Component;
61986
- exports.ɵfd = AddNewsComponent;
61987
- exports.ɵfe = ArticleService;
61988
- exports.ɵff = NewsCategoryService;
61989
- exports.ɵfg = SignatureDetailComponent;
61990
- exports.ɵfh = KySoSimDanhSachChuKyComponent;
61991
- exports.ɵfi = KySoSimChuKyUserService;
61992
- exports.ɵfj = FileKySoSimComponent;
61993
- exports.ɵfk = KySoSimSignPDFService;
61994
- exports.ɵfl = TaiLieuCuaToiComponent;
61995
- exports.ɵfm = KhaiThacTaiLieuDungChungComponent;
61996
- exports.ɵfn = DanhMucDungChungService;
61997
- exports.ɵfo = TnTemplateComponent;
61998
- exports.ɵfp = LoadingPageV1Component;
61999
- exports.ɵfq = DropdownSettingFormComponent;
62000
- exports.ɵfr = CheckReadyComponent;
62001
- exports.ɵfs = WorkflowButtonComponent;
62002
- exports.ɵg = TreeTableComponent;
62003
- exports.ɵh = UniversalLinkProcessorComponent;
62004
- exports.ɵi = NotFoundComponent;
62005
- exports.ɵj = SendAccessTokenInterceptor;
62006
- exports.ɵk = LogInterceptor;
62007
- exports.ɵl = PermissionUtilsInterceptor;
62008
- exports.ɵm = TraceInterceptor;
62009
- exports.ɵn = EntityWorkflowSettingService;
62010
- exports.ɵo = EntityWorkflowHistoryService;
62011
- exports.ɵp = EntityPermissionService;
62012
- exports.ɵq = ChatService;
62013
- exports.ɵr = MyDriveService;
62014
- exports.ɵs = ContentsService;
62015
- exports.ɵt = StatusExtendsService;
62016
- exports.ɵu = MessageBoardService;
62017
- exports.ɵv = FileExplorerNewService;
62018
- exports.ɵw = ReportQueueComponent;
62019
- exports.ɵx = FileVersionService;
62020
- exports.ɵy = FileManagerService;
62021
- exports.ɵz = DM_ChucVuService;
61970
+ exports.ɵa = LoggerService;
61971
+ exports.ɵb = DropdownService;
61972
+ exports.ɵba = DM_ChucVuService;
61973
+ exports.ɵbb = RoleService;
61974
+ exports.ɵbc = ProcessWorkflowFormComponent;
61975
+ exports.ɵbd = CongViecDinhKemService;
61976
+ exports.ɵbe = CongViecThayDoiService;
61977
+ exports.ɵbf = AddressComponent;
61978
+ exports.ɵbg = AfterViewCheckedComponent;
61979
+ exports.ɵbh = AdvanceSearchComponent;
61980
+ exports.ɵbi = AppRootMenuComponent;
61981
+ exports.ɵbj = AppTopBarComponent;
61982
+ exports.ɵbk = AppTopBarV1Component;
61983
+ exports.ɵbl = AppTopBarV2Component;
61984
+ exports.ɵbm = AppProfileComponent;
61985
+ exports.ɵbn = AppSubMenuComponent;
61986
+ exports.ɵbo = AppMenuComponent;
61987
+ exports.ɵbp = AutoCompletePickerComponent;
61988
+ exports.ɵbq = ImageUploaderComponent;
61989
+ exports.ɵbr = CheckBoxListComponent;
61990
+ exports.ɵbs = CoCauToChucPickerListComponent;
61991
+ exports.ɵbt = CoCauToChucPickerListNewComponent;
61992
+ exports.ɵbu = CoCauToChucNewService;
61993
+ exports.ɵbv = FormBuilderComponent;
61994
+ exports.ɵbw = BaseCongViecTestComponent;
61995
+ exports.ɵbx = BaseCauHinhWorkflowDetailComponent;
61996
+ exports.ɵby = BaseDmLoaiCongViecFormComponent;
61997
+ exports.ɵbz = BaseDmLinhVucCongViecFormComponent;
61998
+ exports.ɵc = EntityPickerService;
61999
+ exports.ɵca = BaseDmPriorityFormComponent;
62000
+ exports.ɵcb = BaseCongviecDinhkemComponent;
62001
+ exports.ɵcc = BaseCongviecDinhkemFormComponent;
62002
+ exports.ɵcd = DatetimePickerComponent;
62003
+ exports.ɵce = DatetimePickerRangeComponent;
62004
+ exports.ɵcf = DynamicNodeComponent;
62005
+ exports.ɵcg = EntityPickerBoxComponent;
62006
+ exports.ɵch = EntityPickerDataComponent;
62007
+ exports.ɵci = EntityPickerSelectedComponent;
62008
+ exports.ɵcj = EntityPickerComponent;
62009
+ exports.ɵck = EntityPickerDialogComponent;
62010
+ exports.ɵcl = EntityPickerTreeDataComponent;
62011
+ exports.ɵcm = EntityPickerTreeSelectedComponent;
62012
+ exports.ɵcn = EntityPermissionComponent;
62013
+ exports.ɵco = EquationEditorComponent;
62014
+ exports.ɵcp = MaskComponent;
62015
+ exports.ɵcq = NumberPickerRangeComponent;
62016
+ exports.ɵcr = PagingNextBackOnlyComponent;
62017
+ exports.ɵcs = RadioButtonListComponent;
62018
+ exports.ɵct = VanBanPickerComponent;
62019
+ exports.ɵcu = VanBanDenService;
62020
+ exports.ɵcv = VanBanDiService;
62021
+ exports.ɵcw = VanBanPickerDialogComponent;
62022
+ exports.ɵcx = VanbanDiPickerComponent;
62023
+ exports.ɵcy = VanbanDenPickerComponent;
62024
+ exports.ɵcz = CongViecPickerComponent;
62025
+ exports.ɵd = ExceptionHandlerService;
62026
+ exports.ɵda = SettingsComponent;
62027
+ exports.ɵdb = SettingsRowComponent;
62028
+ exports.ɵdc = SettingsWorkflowComponent;
62029
+ exports.ɵdd = SettingsWorkflowNo1Component;
62030
+ exports.ɵde = SimpleWorkflowFormComponent;
62031
+ exports.ɵdf = ProcessWorkflowTargetComponent;
62032
+ exports.ɵdg = DmChucVuService;
62033
+ exports.ɵdh = ChoYKienFormComponent;
62034
+ exports.ɵdi = SplashComponentV1Component;
62035
+ exports.ɵdj = SplashComponentV2Component;
62036
+ exports.ɵdk = StateMachinesConnectionReceiverComponent;
62037
+ exports.ɵdl = StateMachinesConnectionReceiverConditionComponent;
62038
+ exports.ɵdm = StateMachinesConnectionReceiverDepartmentComponent;
62039
+ exports.ɵdn = StateMachinesConnectionReceiverGroupComponent;
62040
+ exports.ɵdo = StateMachinesConnectionReceiverUserComponent;
62041
+ exports.ɵdp = StateMachinesConnectionReceiverRoleComponent;
62042
+ exports.ɵdq = StateMachinesConnectionSenderComponent;
62043
+ exports.ɵdr = StartWorkflowComponent;
62044
+ exports.ɵds = ShareLinkByPermissionComponent;
62045
+ exports.ɵdt = WorkflowSettingNewComponent;
62046
+ exports.ɵdu = PermissionSharingComponent;
62047
+ exports.ɵdv = WorkflowPermissionService;
62048
+ exports.ɵdw = TnCheckboxComponent;
62049
+ exports.ɵdx = TnDialogComponent;
62050
+ exports.ɵdy = TnColorPickerComponent;
62051
+ exports.ɵdz = TnTinymceComponent;
62052
+ exports.ɵe = CanBo_HoSoService;
62053
+ exports.ɵea = TnTabViewComponent;
62054
+ exports.ɵeb = TableDetailFormComponent;
62055
+ exports.ɵec = FileIconPipe;
62056
+ exports.ɵed = FileSizePipe;
62057
+ exports.ɵee = QuickAddFormComponent;
62058
+ exports.ɵef = PreventShiftTabDirective;
62059
+ exports.ɵeg = TnTemplateDirective;
62060
+ exports.ɵeh = UserPickerComponent;
62061
+ exports.ɵei = UserPickerBoxComponent;
62062
+ exports.ɵej = CoCauToChucTestService;
62063
+ exports.ɵek = TnAppHelpComponent;
62064
+ exports.ɵel = PathNameService;
62065
+ exports.ɵem = HelperCurrentPageComponent;
62066
+ exports.ɵen = TnAppNotificationListComponent;
62067
+ exports.ɵeo = TnAppNotificationComponent;
62068
+ exports.ɵep = FolderFormComponent;
62069
+ exports.ɵeq = FileFormComponent;
62070
+ exports.ɵer = FileViewerComponent;
62071
+ exports.ɵes = FileVersionListComponent;
62072
+ exports.ɵet = ViewDetailComponent;
62073
+ exports.ɵeu = WorkflowHistoryComponent;
62074
+ exports.ɵev = WorkflowHistoryDialogComponent;
62075
+ exports.ɵew = WorkflowHistoryNewComponent;
62076
+ exports.ɵex = WorkflowSettingComponent;
62077
+ exports.ɵey = WorkflowSettingDialogComponent;
62078
+ exports.ɵez = WorkflowPermissionComponent;
62079
+ exports.ɵf = ListBase;
62080
+ exports.ɵfa = WorkflowPermissionFormComponent;
62081
+ exports.ɵfb = ReferenceTextBoxComponent;
62082
+ exports.ɵfc = QrCodeGeneratorComponent;
62083
+ exports.ɵfd = AccessDeniedV1Component;
62084
+ exports.ɵfe = AddNewsComponent;
62085
+ exports.ɵff = ArticleService;
62086
+ exports.ɵfg = NewsCategoryService;
62087
+ exports.ɵfh = SignatureDetailComponent;
62088
+ exports.ɵfi = KySoSimDanhSachChuKyComponent;
62089
+ exports.ɵfj = KySoSimChuKyUserService;
62090
+ exports.ɵfk = FileKySoSimComponent;
62091
+ exports.ɵfl = KySoSimSignPDFService;
62092
+ exports.ɵfm = TaiLieuCuaToiComponent;
62093
+ exports.ɵfn = KhaiThacTaiLieuDungChungComponent;
62094
+ exports.ɵfo = DanhMucDungChungService;
62095
+ exports.ɵfp = TnTemplateComponent;
62096
+ exports.ɵfq = LoadingPageV1Component;
62097
+ exports.ɵfr = DropdownSettingFormComponent;
62098
+ exports.ɵfs = CheckReadyComponent;
62099
+ exports.ɵft = WorkflowButtonComponent;
62100
+ exports.ɵg = ListComponentBase;
62101
+ exports.ɵh = TreeTableComponent;
62102
+ exports.ɵi = UniversalLinkProcessorComponent;
62103
+ exports.ɵj = NotFoundComponent;
62104
+ exports.ɵk = SendAccessTokenInterceptor;
62105
+ exports.ɵl = LogInterceptor;
62106
+ exports.ɵm = PermissionUtilsInterceptor;
62107
+ exports.ɵn = TraceInterceptor;
62108
+ exports.ɵo = EntityWorkflowSettingService;
62109
+ exports.ɵp = EntityWorkflowHistoryService;
62110
+ exports.ɵq = EntityPermissionService;
62111
+ exports.ɵr = ChatService;
62112
+ exports.ɵs = MyDriveService;
62113
+ exports.ɵt = ContentsService;
62114
+ exports.ɵu = StatusExtendsService;
62115
+ exports.ɵv = MessageBoardService;
62116
+ exports.ɵw = FileExplorerNewService;
62117
+ exports.ɵx = ReportQueueComponent;
62118
+ exports.ɵy = FileVersionService;
62119
+ exports.ɵz = FileManagerService;
62022
62120
 
62023
62121
  Object.defineProperty(exports, '__esModule', { value: true });
62024
62122