vcomply-workflow-engine 7.4.5 → 7.4.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/add-multiple-responsibility-with-tab/add-multiple-responsibility-with-tab.component.mjs +338 -14
- package/esm2022/lib/constants/responsibility.mjs +58 -2
- package/esm2022/lib/sharedComponents/bulk-responsibility-view/bulk-responsibility-view.component.mjs +35 -8
- package/fesm2022/vcomply-workflow-engine.mjs +498 -90
- package/fesm2022/vcomply-workflow-engine.mjs.map +1 -1
- package/lib/add-multiple-responsibility-with-tab/add-multiple-responsibility-with-tab.component.d.ts +14 -0
- package/lib/constants/responsibility.d.ts +43 -0
- package/lib/sharedComponents/bulk-responsibility-view/bulk-responsibility-view.component.d.ts +5 -14
- package/package.json +1 -1
|
@@ -46962,81 +46962,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
46962
46962
|
}]
|
|
46963
46963
|
}], ctorParameters: function () { return []; } });
|
|
46964
46964
|
|
|
46965
|
-
const RISK_CLASS_LIST = ['high', 'low-medium', 'low', 'medium-high'];
|
|
46966
|
-
const YES_NO_DROPDOWN_LIST = ['Yes', 'No'];
|
|
46967
|
-
const PROGRAM_TYPE_DROPDOWN_LIST = [
|
|
46968
|
-
'Regulations',
|
|
46969
|
-
'Standards',
|
|
46970
|
-
'Internal Controls',
|
|
46971
|
-
'Others',
|
|
46972
|
-
];
|
|
46973
|
-
const ASSIGNEE_TYPE_DROPDOWN_LIST = [
|
|
46974
|
-
'All selected persons need to complete this responsibility',
|
|
46975
|
-
'Any selected person can complete this responsibility',
|
|
46976
|
-
];
|
|
46977
|
-
const RC_TYPE_DROPDOWN_LIST = [
|
|
46978
|
-
'Assign same responsibility',
|
|
46979
|
-
'Create separate responsibilities',
|
|
46980
|
-
];
|
|
46981
|
-
const REVIEWER_TYPE_DROPDOWN_LIST = [
|
|
46982
|
-
'SEQUENTIAL',
|
|
46983
|
-
'ANY REVIEWER CAN MARK THIS AS REVIEWED',
|
|
46984
|
-
];
|
|
46985
|
-
const FREQUENCY_DROPDOWN_LIST = [
|
|
46986
|
-
'Daily',
|
|
46987
|
-
'Every Alternate Day',
|
|
46988
|
-
'Weekly',
|
|
46989
|
-
'Every 10 Days',
|
|
46990
|
-
'Every Fortnight',
|
|
46991
|
-
'Every 2 Weeks',
|
|
46992
|
-
'Every 3 Weeks',
|
|
46993
|
-
'Monthly',
|
|
46994
|
-
'Every 45 Days',
|
|
46995
|
-
'Every Alternate Month',
|
|
46996
|
-
'Quarterly',
|
|
46997
|
-
'Every 120 Days',
|
|
46998
|
-
'Biannual',
|
|
46999
|
-
'Annual',
|
|
47000
|
-
'Every 2 Years',
|
|
47001
|
-
'Every 3 Years',
|
|
47002
|
-
'Every 4 Years',
|
|
47003
|
-
'Every 5 Years',
|
|
47004
|
-
'Every 10 Years',
|
|
47005
|
-
'One Time',
|
|
47006
|
-
'Other Frequency',
|
|
47007
|
-
];
|
|
47008
|
-
const FULL_MONTH_NAMES = [
|
|
47009
|
-
'January',
|
|
47010
|
-
'February',
|
|
47011
|
-
'March',
|
|
47012
|
-
'April',
|
|
47013
|
-
'May',
|
|
47014
|
-
'June',
|
|
47015
|
-
'July',
|
|
47016
|
-
'August',
|
|
47017
|
-
'September',
|
|
47018
|
-
'October',
|
|
47019
|
-
'November',
|
|
47020
|
-
'December',
|
|
47021
|
-
];
|
|
47022
|
-
const VALIDATION_MESSAGES = {
|
|
47023
|
-
DROPDOWN: 'The data added in this field is not valid. Select from the dropdown provided in the template.',
|
|
47024
|
-
RISK_CLASS: 'Invalid risk class. Select a valid option from the drop-down list.',
|
|
47025
|
-
DAY: 'Invalid day selection. Select a valid day from the drop-down list in the template.',
|
|
47026
|
-
DATE_FORMAT: 'Invalid date format. Select a valid date from the drop-down list in the template.',
|
|
47027
|
-
DUE_DATE: 'Invalid Due Date.',
|
|
47028
|
-
DUE_TIME: "This value does not match the VComply template's format. Use the correct value from the drop-downs in the template.",
|
|
47029
|
-
ENDS_AFTER_OCCURRENCES_GREATER_THAN_ZERO: 'Must be greater than 0',
|
|
47030
|
-
ENDS_AFTER_OCCURRENCES_NUMERIC: 'Must be numeric value',
|
|
47031
|
-
ENDS_BY_DATE_INVALID_VALUE: 'The data added in this field is not valid. Select from the dropdown provided in the template.',
|
|
47032
|
-
ENDS_BY_DATE_INCOMPLETE: 'Ends By Date requires both a day and a month. Please complete both fields or clear both to leave the end date unset.',
|
|
47033
|
-
ENDS_BY_DATE_PAST: 'The Ends By Date is in the past. This responsibility will be created with no future occurrences.',
|
|
47034
|
-
ENDS_BY_DATE_CONFLICT: "You have provided values for both 'Ends After Occurrences' and 'Ends By Date'. Fill in only one, or leave both blank if the responsibility will always be active.",
|
|
47035
|
-
};
|
|
47036
|
-
|
|
47037
46965
|
class BulkResponsibilityViewComponent {
|
|
47038
46966
|
constructor() {
|
|
47039
|
-
this.VALIDATION_MESSAGES = VALIDATION_MESSAGES;
|
|
47040
46967
|
this.loader = false;
|
|
47041
46968
|
this.tabType = 'frequency';
|
|
47042
46969
|
this.submitResponsibilityBulkUpload = new EventEmitter();
|
|
@@ -47048,6 +46975,35 @@ class BulkResponsibilityViewComponent {
|
|
|
47048
46975
|
this.isHorizontallyScrolled = false;
|
|
47049
46976
|
this.responsibilityMultiTabBulkUpload = [];
|
|
47050
46977
|
}
|
|
46978
|
+
cellSeverity(report, field) {
|
|
46979
|
+
return report?.fieldValidation?.[field]?.severity || '';
|
|
46980
|
+
}
|
|
46981
|
+
cellMessage(report, field) {
|
|
46982
|
+
return report?.fieldValidation?.[field]?.message || '';
|
|
46983
|
+
}
|
|
46984
|
+
cellClass(report, field) {
|
|
46985
|
+
return this.cellSeverity(report, field);
|
|
46986
|
+
}
|
|
46987
|
+
rowIndexClass(report) {
|
|
46988
|
+
const issues = Object.values(report?.fieldValidation || {});
|
|
46989
|
+
if (!report?.isValid || issues.some((issue) => issue?.severity === 'error')) {
|
|
46990
|
+
return 'error';
|
|
46991
|
+
}
|
|
46992
|
+
if (issues.some((issue) => issue?.severity === 'warning')) {
|
|
46993
|
+
return 'warning';
|
|
46994
|
+
}
|
|
46995
|
+
if (issues.some((issue) => issue?.severity === 'info')) {
|
|
46996
|
+
return 'info';
|
|
46997
|
+
}
|
|
46998
|
+
return '';
|
|
46999
|
+
}
|
|
47000
|
+
isUploadable(report) {
|
|
47001
|
+
const issues = Object.values(report?.fieldValidation || {});
|
|
47002
|
+
if (issues.length) {
|
|
47003
|
+
return !issues.some((issue) => issue?.severity === 'error');
|
|
47004
|
+
}
|
|
47005
|
+
return !!report?.isValid;
|
|
47006
|
+
}
|
|
47051
47007
|
get hasExtendedFrequencyColumns() {
|
|
47052
47008
|
return !!this.responsibilityBulkUpload?.hasExtendedFrequencyColumns;
|
|
47053
47009
|
}
|
|
@@ -47058,7 +47014,7 @@ class BulkResponsibilityViewComponent {
|
|
|
47058
47014
|
if (this.responsibilityBulkUpload) {
|
|
47059
47015
|
this.finalResponsibilities = 0;
|
|
47060
47016
|
this.responsibilityBulkUpload?.reports.forEach((risk) => {
|
|
47061
|
-
if (risk
|
|
47017
|
+
if (this.isUploadable(risk)) {
|
|
47062
47018
|
this.finalResponsibilities += 1;
|
|
47063
47019
|
}
|
|
47064
47020
|
});
|
|
@@ -47066,10 +47022,10 @@ class BulkResponsibilityViewComponent {
|
|
|
47066
47022
|
if (this.responsibilityType === 'multiTab') {
|
|
47067
47023
|
this.responsibilityMultiTabBulkUpload =
|
|
47068
47024
|
this.bulkUpload?.frequency?.reports?.concat(this.bulkUpload?.ongoing?.reports, this.bulkUpload?.onCompletion?.reports);
|
|
47069
|
-
this.isConfirmClickable = this.responsibilityMultiTabBulkUpload?.some((responsibility) => responsibility
|
|
47025
|
+
this.isConfirmClickable = this.responsibilityMultiTabBulkUpload?.some((responsibility) => this.isUploadable(responsibility));
|
|
47070
47026
|
this.finalResponsibilities = 0;
|
|
47071
47027
|
this.responsibilityMultiTabBulkUpload?.forEach((risk) => {
|
|
47072
|
-
if (risk
|
|
47028
|
+
if (this.isUploadable(risk)) {
|
|
47073
47029
|
this.finalResponsibilities += 1;
|
|
47074
47030
|
}
|
|
47075
47031
|
});
|
|
@@ -47086,11 +47042,11 @@ class BulkResponsibilityViewComponent {
|
|
|
47086
47042
|
this.cancel.emit();
|
|
47087
47043
|
}
|
|
47088
47044
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BulkResponsibilityViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
47089
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: BulkResponsibilityViewComponent, selector: "app-bulk-responsibility-view", inputs: { responsibilityBulkUpload: "responsibilityBulkUpload", fileName: "fileName", defaultOwner: "defaultOwner", loader: "loader", tabType: "tabType", bulkUpload: "bulkUpload", responsibilityType: "responsibilityType" }, outputs: { submitResponsibilityBulkUpload: "submitResponsibilityBulkUpload", cancel: "cancel", selectedTab: "selectedTab" }, usesOnChanges: true, ngImport: i0, template: "<!-- --------------------------------------------------------------------upward is new one-------------------- -->\r\n<app-loader *ngIf=\"loader\"></app-loader>\r\n\r\n\r\n\r\n\r\n\r\n\r\n<!-- HTML for multiple tabs -->\r\n<ng-container *ngIf=\"responsibilityType === 'multiTab'\">\r\n <ng-template #dropdownErr let-invalid>\r\n <i *ngIf=\"invalid\" class=\"icons\" [appTooltip]=\"VALIDATION_MESSAGES.DROPDOWN\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i>\r\n </ng-template>\r\n <div class=\"bulk-view\">\r\n <div class=\"bulk-view-head\">\r\n <h2 class=\"bulk-view-title\">\r\n {{fileName}}\r\n </h2>\r\n </div>\r\n <div class=\"bulk-view-body bulk\" [class.is-horizontally-scrolled]=\"isHorizontallyScrolled\"\r\n (scroll)=\"onGridScroll($event)\">\r\n <div class=\"exel-view\">\r\n <div class=\"exel-view-row head\">\r\n <div class=\"exel-view-column sl-no sticky-col sticky-col-index\">#</div>\r\n <div class=\"exel-view-column sticky-col sticky-col-name\">Responsibility Name <span class=\"required\">*</span></div>\r\n <div class=\"exel-view-column\" *ngIf=\"responsibilityBulkUpload?.header.includes('Program')\"\r\n [class.three-column]=\"true\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Program</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.three-column]=\"true\">\r\n <div class=\"exel-view-column\">Program Type</div>\r\n <div class=\"exel-view-column\">Program</div>\r\n <div class=\"exel-view-column\">Program Category</div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\">Entrusted By</div>\r\n <div class=\"exel-view-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Entrust To <span class=\"required\">*</span></div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column\">Person or Group<span class=\"required\">*</span></div>\r\n <div class=\"exel-view-column\">All or Any Persons</div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\">Key Responsibility?</div>\r\n <div class=\"exel-view-column\" *ngIf=\"tabType === 'frequency'\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-row\">\r\n <!-- <div class=\"exel-view-column large\">Frequency of Occurrence and Completion Window <span class=\"required\">*</span></div> -->\r\n <div class=\"exel-view-column large\">{{responsibilityBulkUpload?.header.includes('Program') ?\r\n responsibilityBulkUpload?.header[8]?.slice(0, -1) :\r\n responsibilityBulkUpload?.header[5]?.slice(0, -1)}}<span class=\"required\">*</span></div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\">\r\n <ng-container *ngIf=\"tabType === 'frequency'\">\r\n <div class=\"exel-view-column\">Frequency <span class=\"required\">*</span></div>\r\n <div class=\"exel-view-column\">Due Date <span class=\"info-text\">(Day)</span></div>\r\n <div class=\"exel-view-column\">Due Date <span class=\"info-text\">(Month)</span></div>\r\n <div class=\"exel-view-column\" *ngIf=\"hasExtendedFrequencyColumns\">Due Time</div>\r\n <div class=\"exel-view-column\">Start <span class=\"info-text\">(No. of days before the due\r\n date)</span></div>\r\n <div class=\"exel-view-column\">Fail <span class=\"info-text\"\r\n appTooltip=\"(No. of days after the due date. Select '0' if the responsibility must be completed on the due date)\"\r\n placement=\"bottom\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">(No. of\r\n days after the due date. Select \"0\" if the responsibility must be completed on\r\n the due date)</span></div>\r\n <ng-container *ngIf=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\">Responsibility Ends After Occurences <span\r\n class=\"info-text\">(Number of occurrences)</span></div>\r\n <div class=\"exel-view-column\">Responsibility Ends By Date <span\r\n class=\"info-text\">(Day)</span></div>\r\n <div class=\"exel-view-column\">Responsibility Ends By Date <span\r\n class=\"info-text\">(Month)</span></div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column two-column\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Responsibility Centre</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\">Responsibility Centre Name</div>\r\n <div class=\"exel-view-column\">Responsibility Centre Type</div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\">Risk Class</div>\r\n <div class=\"exel-view-column\">Objective</div>\r\n <div class=\"exel-view-column\">Notes</div>\r\n <div class=\"exel-view-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Format & Evidence</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\" [class.three-column]=\"false\">\r\n <div class=\"exel-view-column\" [class.small-column]=\"true\">Format</div>\r\n <div class=\"exel-view-column\">Format For Responsibility (link)</div>\r\n <div class=\"exel-view-column\" [class.small-column]=\"true\">Evidence</div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"exel-view-column\">Assessments or Checkpoints</div> -->\r\n <div class=\"exel-view-column four-column\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Review of Responsibility</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.four-column]=\"true\">\r\n <div class=\"exel-view-column\">Reviewer</div>\r\n <div class=\"exel-view-column\">Reviewer Type\r\n <span class=\"info-text\">(Specify the type of reviewer flow)</span>\r\n\r\n </div>\r\n\r\n <div class=\"exel-view-column\">Review Start <span class=\"info-text\">(No. of days before the\r\n due date)</span></div>\r\n <div class=\"exel-view-column\">Review Fail <span class=\"info-text\"\r\n appTooltip=\"(No. of days after the due date. Select '0' if the responsibility must be reviewed on the due date)\"\r\n placement=\"bottom\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">(No. of days\r\n after the due date. Select \"0\" if the responsibility must be reviewed on the due\r\n date)</span></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Overseer</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column\">Always Notify</div>\r\n <div class=\"exel-view-column\">Notify on Failure</div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"exel-view-column\">Overseer</div> -->\r\n\r\n <!-- Collaborator -->\r\n <div class=\"exel-view-column\">Collaborator</div>\r\n\r\n </div>\r\n <div class=\"exel-view-row\" *ngFor=\"let report of responsibilityBulkUpload?.reports; let i = index\">\r\n <div class=\"exel-view-column sl-no sticky-col sticky-col-index\" [class.error]=\"!report?.isValid\">{{i+1}}</div>\r\n <div class=\"exel-view-column sticky-col sticky-col-name\" [class.error]=\"!report.responsibilityName\">\r\n {{report?.responsibilityName}} <i *ngIf=\"!report.responsibilityName\" class=\"icons\"\r\n [appTooltip]=\"'Enter a name for this responsibility.'\" placement=\"bottom-right\" type=\"white\"\r\n delay=\"0\" [tooltipMandatory]=true></i></div>\r\n <div class=\"exel-view-column multi-column\"\r\n *ngIf=\"responsibilityBulkUpload?.header.includes('Program')\" [class.error]=\"false\"\r\n [class.three-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.three-column]=\"true\">\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.programType === false\">\r\n {{report?.programType}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.programType === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.program === false\">\r\n {{report?.program}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.program === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.programCategory === false\">\r\n {{report?.programCategory}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.programCategory === false }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.assignor === false\">{{report?.assignor}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.assignor === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"!report?.assignee || !report?.userValidateWithProgram?.isValidAssignee || (!report?.isValidUser) || report?.dropdownValidation?.assignee === false\">\r\n {{report?.assignee}}\r\n <!-- || (!report?.isValidUser) -->\r\n <i *ngIf=\"!report?.assignee\" class=\"icons\"\r\n [appTooltip]=\"'Select the user responsible for completing this responsibility. '\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.assignee && report?.dropdownValidation?.assignee === false }\"></ng-container>\r\n <i *ngIf=\"(report?.assignee) && report?.dropdownValidation?.assignee !== false && !report?.userValidateWithProgram?.isValidAssignee\"\r\n class=\"icons\"\r\n [appTooltip]=\"'This user is not associated with the selected Program.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.assigneeType === false\">\r\n {{report?.assigneeType}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.assigneeType === false }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.keyResponsibility === false\">\r\n {{report?.keyResponsibility}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.keyResponsibility === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\"\r\n *ngIf=\"tabType === 'frequency'\">\r\n\r\n <div class=\"exel-view-row multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\" [class.error]=\"!report?.frequency || report?.dropdownValidation?.frequency === false\">{{report?.frequency}}\r\n <i *ngIf=\"!report?.frequency\" class=\"icons\"\r\n [appTooltip]=\"'Select a frequency for this responsibility.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.frequency && report?.dropdownValidation?.frequency === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\" [class.error]=\"report?.dropdownValidation?.day === false || !report?.validDate || report?.isPastDate\">\r\n {{report?.day}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.day === false }\"></ng-container>\r\n <i *ngIf=\"report?.dropdownValidation?.day !== false && !report?.validDate\" class=\"icons\" [appTooltip]=\"'Invalid Due Date.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n <i *ngIf=\"report?.dropdownValidation?.day !== false && report?.isPastDate\" class=\"icons\"\r\n [appTooltip]=\"'This date occurs in the past. Select a future date.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n <div class=\"exel-view-column\" [class.error]=\"report?.dropdownValidation?.month === false || !report?.validDate || report?.isPastDate\">\r\n {{report?.month}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.month === false }\"></ng-container>\r\n <i *ngIf=\"report?.dropdownValidation?.month !== false && !report?.validDate\" class=\"icons\" [appTooltip]=\"'Invalid Due Date.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n <i *ngIf=\"report?.dropdownValidation?.month !== false && report?.isPastDate\" class=\"icons\"\r\n [appTooltip]=\"'This date occurs in the past. Select a future date.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n <div class=\"exel-view-column\" *ngIf=\"hasExtendedFrequencyColumns\"\r\n [class.error]=\"!report?.isValidDueTime || report?.dropdownValidation?.dueTime === false\">{{report?.dueTime}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: !report?.isValidDueTime || report?.dropdownValidation?.dueTime === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\">{{report?.responsibilityWindow}}</div>\r\n <div class=\"exel-view-column\">{{report?.failedAfter}}</div>\r\n <ng-container *ngIf=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"!report?.isValidEndsAfterOccurrences\">{{report?.endsAfterOccurrences}}\r\n <i *ngIf=\"!report?.isValidEndsAfterOccurrences\" class=\"icons\"\r\n [appTooltip]=\"report?.endsAfterOccurrencesError\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"!report?.isValidEndsByDateDay\">{{report?.endsByDateDay}}\r\n <i *ngIf=\"!report?.isValidEndsByDateDay\" class=\"icons\"\r\n [appTooltip]=\"report?.endsByDateDayError\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"!report?.isValidEndsByDateMonth\">{{report?.endsByDateMonth}}\r\n <i *ngIf=\"!report?.isValidEndsByDateMonth\" class=\"icons\"\r\n [appTooltip]=\"report?.endsByDateMonthError\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n </div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.responsibilityCenter === false\">\r\n {{report?.responsibilityCenter}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.responsibilityCenter === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.responsibilityCenterType === false\">\r\n {{report?.responsibilityCenterType}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.responsibilityCenterType === false }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.reportClass === false\">\r\n {{report?.reportClass}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.reportClass === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\">{{report?.objective}}</div>\r\n <div class=\"exel-view-column\">{{report?.notes}}</div>\r\n <div class=\"exel-view-column multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column multi-column\">\r\n <div class=\"exel-view-row multi-column\">\r\n <div class=\"exel-view-column\" [class.small-column]=\"true\"\r\n [class.error]=\"report?.dropdownValidation?.isFormat === false\">{{report?.isFormat}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.isFormat === false }\"></ng-container>\r\n </div>\r\n <a class=\"exel-view-column external-link\" [href]=\"report?.formatForResponsibility\"\r\n target=\"_blank\">{{report?.formatForResponsibility}}</a>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\" [class.small-column]=\"true\"\r\n [class.error]=\"report?.dropdownValidation?.documentEvidenceRequired === false\">\r\n {{report?.documentEvidenceRequired}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.documentEvidenceRequired === false }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"exel-view-column\">{{report?.assessments}}</div> -->\r\n <div class=\"exel-view-column multi-column\" [class.four-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.four-column]=\"true\">\r\n <div class=\"exel-view-column\" [class.error]=\"report?.dropdownValidation?.reviewer === false || (report?.reviewer && (\r\n !report?.userValidateWithProgram?.isValidReviewer ))\">{{report?.reviewer}}\r\n\r\n <!-- <i *ngIf=\"(report?.reviewer && report?.reviewer === report?.assignor)\"\r\n class=\"icons\"\r\n [appTooltip]=\"((report?.assignor)?'The Assignor cannot also be the Reviewer of this responsibility.':'You cannot be a Reviewer of this responsibility since you are the assignor. ') +'Select another user as the Reviewer'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i> -->\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.reviewer === false }\"></ng-container>\r\n <i *ngIf=\"report?.reviewer && report?.dropdownValidation?.reviewer !== false && !report?.userValidateWithProgram?.isValidReviewer\"\r\n class=\"icons\"\r\n [appTooltip]=\"'This user is not associated with the selected Program.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.reviewerType === false\">\r\n {{report?.reviewerType}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.reviewerType === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\">{{report?.reviewToBeCompletedWithin}}</div>\r\n <div class=\"exel-view-column\">{{report?.reviewWillBeFailedAfter}}</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"exel-view-column multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column\" [class.error]=\"report?.dropdownValidation?.overseer === false || (report?.overseer && (\r\n !report?.userValidateWithProgram?.isValidOverseer ))\">\r\n {{report?.overseer}}\r\n\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.overseer === false }\"></ng-container>\r\n <i *ngIf=\"(report?.overseer) && report?.dropdownValidation?.overseer !== false && !report?.userValidateWithProgram?.isValidOverseer\"\r\n class=\"icons\"\r\n [appTooltip]=\"'This user is not associated with the selected Program.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n </div>\r\n <div class=\"exel-view-column\" [class.error]=\"report?.dropdownValidation?.notifyOnFailure === false || (report?.notifyOnFailure && (\r\n !report?.userValidateWithProgram?.isValidNotifyOnFailure ))\">\r\n {{report?.notifyOnFailure}}\r\n\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.notifyOnFailure === false }\"></ng-container>\r\n <i *ngIf=\"(report?.notifyOnFailure) && report?.dropdownValidation?.notifyOnFailure !== false && !report?.userValidateWithProgram?.isValidNotifyOnFailure\"\r\n class=\"icons\"\r\n [appTooltip]=\"'This user is not associated with the selected Program.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.collaborator === false\">{{report?.collaborator}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.collaborator === false }\"></ng-container>\r\n </div>\r\n\r\n <!-- <div class=\"exel-view-column\" [class.error]=\"(report?.overseer) && ((report?.overseer === report?.assignee) ||(report?.reviewer === report?.overseer) || (report?.overseer == report?.assignor) || (!report?.userValidateWithProgram?.isValidOverseer))\">\r\n {{report?.overseer}}\r\n <i *ngIf=\"(report?.overseer) && ((report?.reviewer === report?.overseer))\"\r\n class=\"icons\"\r\n [appTooltip]=\"'The Reviewer cannot also be the Overseer of this responsibility. Select another user as the Overseer.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n\r\n <i *ngIf=\"report?.overseer && (report?.overseer === report?.assignee)\" class=\"icons\"\r\n [appTooltip]=\"'The Assignee cannot also be the Overseer of this responsibility. Select another user as the Overseer'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n <i *ngIf=\"((report?.overseer) && (report?.overseer == report?.assignor))\"\r\n class=\"icons\"\r\n [appTooltip]=\"((report?.assignor)?'The Assignor cannot also be the Overseer of this responsibility. ':'You cannot be an Overseer of this responsibility since you are the Assignor. ') +'Select another user as the Overseer.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n <i *ngIf=\"!report?.userValidateWithProgram?.isValidOverseer\"\r\n class=\"icons\"\r\n [appTooltip]=\"'Selected user is not a valid overseer for selected program.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n </div> -->\r\n </div>\r\n\r\n <div class=\"exel-view-row empty-fill-row\" aria-hidden=\"true\">\r\n <div class=\"exel-view-column sl-no sticky-col sticky-col-index\"></div>\r\n <div class=\"exel-view-column sticky-col sticky-col-name\"></div>\r\n <div class=\"exel-view-column multi-column three-column\" *ngIf=\"hasProgramColumn\">\r\n <div class=\"exel-view-row multi-column three-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\"\r\n *ngIf=\"tabType === 'frequency'\">\r\n <div class=\"exel-view-row multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\" *ngIf=\"hasExtendedFrequencyColumns\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <ng-container *ngIf=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column multi-column\">\r\n <div class=\"exel-view-row multi-column\">\r\n <div class=\"exel-view-column small-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column small-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column multi-column four-column\">\r\n <div class=\"exel-view-row multi-column four-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n <!-- ------------------------------------------------old code dynamic------------------------------------------------- -->\r\n\r\n <!-- *ngFor=\"let report of responsibilityBulkUpload?.reports; let i = index\" -->\r\n </div>\r\n </div>\r\n <div class=\"bulk-view-option\">\r\n <button *ngIf=\"bulkUpload?.frequency?.reports?.length\" [class.active]=\"tabType === 'frequency'\"\r\n (click)=\"selectedTab.emit('frequency')\">Frequency Responsibilities</button>\r\n <button *ngIf=\"bulkUpload?.ongoing?.reports?.length\" [class.active]=\"tabType === 'ongoing'\"\r\n (click)=\"selectedTab.emit('ongoing')\">Ongoing Responsibilities</button>\r\n <button *ngIf=\"bulkUpload?.onCompletion?.reports?.length\" [class.active]=\"tabType === 'onCompletion'\"\r\n (click)=\"selectedTab.emit('onCompletion')\">On Completion Responsibilities</button>\r\n </div>\r\n <div class=\"bulk-view-footer\">\r\n <!-- <div class=\"left\">\r\n <p>{{finalResponsibilities}} out of {{responsibilityBulkUpload?.reports?.length}} responsibilities will be\r\n uploaded.</p>\r\n </div> -->\r\n <div class=\"left\">\r\n <p>{{finalResponsibilities}} out of {{responsibilityMultiTabBulkUpload?.length}}\r\n {{responsibilityMultiTabBulkUpload?.length > 1 ? 'responsibilities' : 'responsibility'}} will be\r\n uploaded.</p>\r\n </div>\r\n <div class=\"right\">\r\n <button (click)=\"close()\" id=\"bulk-resp-cancel\">Cancel</button>\r\n <button (click)=\"submit()\" id=\"bulk-resp-confirm\" [disabled]=\"!isConfirmClickable\"\r\n class=\"blue\">Confirm</button>\r\n <!-- finalResponsibilities < 1 -->\r\n </div>\r\n </div>\r\n </div>\r\n <app-loader *ngIf=\"loader\"></app-loader>\r\n\r\n</ng-container>\r\n\r\n<!-- --------------------------------------------------------------------upward is new one-------------------- -->", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";::-webkit-scrollbar-thumb,::-webkit-scrollbar-thumb:hover{background:#747576;border-radius:16px}::-webkit-scrollbar{height:15px}.bulk-view{position:fixed;inset:0;z-index:11}.bulk-view-head{height:60px;padding:20px 24px;background:#161b2f;display:flex;justify-content:flex-start}.bulk-view-title{font-size:16px;line-height:20px;font-weight:400;margin:0;color:#fff}.bulk-view-body{height:calc(100vh - 110px);overflow:auto;width:100%;background:#fff}.bulk-view-body .exel-view{display:block}.bulk-view-body .exel-view-row{display:flex;width:100%}.bulk-view-body .exel-view-row.head .exel-view-column{font-weight:500;font-size:14px;min-height:26px;background:#f1f1f1;padding:0;word-break:unset}.bulk-view-body .exel-view-row.multi-column .exel-view-column{width:140px;min-width:140px}.bulk-view-body .exel-view-row.multi-column .external-link{color:#1e5dd3;text-decoration:none}.bulk-view-body .exel-view-column{width:300px;min-width:300px;padding:0 10px;border-right:1px solid #dcdcdc;border-bottom:1px solid #dcdcdc;display:flex;align-items:center;justify-content:center;text-align:center;word-break:break-all;line-height:16px;font-size:12px;color:#161b2f;flex-wrap:wrap;position:relative}.bulk-view-body .exel-view-column i.icons{position:absolute;top:8px;right:10px;cursor:pointer;color:#d93b41}.bulk-view-body .exel-view-column.large{width:100%;min-width:auto}.bulk-view-body .exel-view-column.error{border:1px solid #EB2424!important;padding-right:24px}.bulk-view-body .exel-view-column.error+.error{border-left:none!important}.bulk-view-body .exel-view-column span.required{color:#eb2424;display:contents}.bulk-view-body .exel-view-column .exel-view-row .exel-view-column{width:100%}.bulk-view-body .exel-view-column.sticky-col{position:sticky;z-index:2;background:#fff}.bulk-view-body .exel-view-column.sticky-col-index{left:0;z-index:3;background:#f1f1f1}.bulk-view-body .exel-view-column.sticky-col-name{left:60px}.bulk-view-body .exel-view-column.sl-no{background:#f1f1f1;width:60px;min-width:60px;min-height:30px;font-weight:400}.bulk-view-body .exel-view-column.sl-no.error{background:#f5d6d7;border:none;padding-right:10px;border-bottom:1px solid #dcdcdc}.bulk-view-body .exel-view-column.multi-column{padding:0;border:none}.bulk-view-body .exel-view-column.multi-column .exel-view-row{height:100%}.bulk-view-body .exel-view-column.multi-column .exel-view-column{width:50%;min-width:50%}.bulk-view-body .exel-view-column.multi-column .exel-view-column+.exel-view-column{border-left:none}.bulk-view-body.bulk{height:calc(100vh - 142px)}.bulk-view-body.bulk.is-horizontally-scrolled .sticky-col-name{overflow:visible}.bulk-view-body.bulk.is-horizontally-scrolled .sticky-col-name:after{content:\"\";position:absolute;top:-1px;bottom:-1px;right:0;width:8px;pointer-events:none;box-shadow:4px 0 8px #1e5dd326}.bulk-view-body.bulk .exel-view{display:flex;flex-direction:column;width:max-content;min-width:100%;min-height:100%}.bulk-view-body.bulk .exel-view-row{width:max-content;min-width:100%}.bulk-view-body.bulk .exel-view-row.head{position:sticky;top:0;z-index:4}.bulk-view-body.bulk .exel-view-row.head .exel-view-column{min-height:34px}.bulk-view-body.bulk .exel-view-row.head .exel-view-column.sticky-col{background:#f1f1f1;z-index:5}.bulk-view-body.bulk .exel-view-row.head .exel-view-column .info-text{font-size:10px;display:block;width:100%;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;padding:0 8px}.bulk-view-body.bulk .exel-view-row.two-column .exel-view-column{min-width:250px!important}.bulk-view-body.bulk .exel-view-row.three-column .exel-view-column,.bulk-view-body.bulk .exel-view-row.four-column .exel-view-column,.bulk-view-body.bulk .exel-view-row.five-column .exel-view-column,.bulk-view-body.bulk .exel-view-row.nine-column .exel-view-column{width:200px;min-width:200px!important}.bulk-view-body.bulk .exel-view-column .exel-view-row .exel-view-column.small-column{width:120px;min-width:120px!important}.bulk-view-body.bulk .exel-view-column.multi-column .exel-view-column{min-width:unset}.bulk-view-body.bulk .exel-view-column.two-column{width:500px;min-width:500px!important}.bulk-view-body.bulk .exel-view-column.three-column{width:600px;min-width:600px!important}.bulk-view-body.bulk .exel-view-column.four-column{width:800px;min-width:800px!important}.bulk-view-body.bulk .exel-view-column.five-column{width:1000px;min-width:1000px!important}.bulk-view-body.bulk .exel-view-column.nine-column{width:1800px;min-width:1800px!important}.bulk-view-body.bulk .exel-view .empty-fill-row{flex:1 1 auto;min-height:32px;align-items:stretch}.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-column{min-height:100%;background-color:#fff;background-image:repeating-linear-gradient(to bottom,#fff 0 31px,#dcdcdc 31px 32px);background-repeat:repeat-y;background-size:100% 32px}.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-column.multi-column{background-image:none;background-color:transparent}.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-column.sticky-col-index,.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-column.sl-no{background-color:#f1f1f1;background-image:repeating-linear-gradient(to bottom,#f1f1f1 0 31px,#dcdcdc 31px 32px)}.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-row{height:100%;align-items:stretch}.bulk-view-option{background:#fff;border-top:1px solid #f1f1f1;padding:0 20px;position:fixed;width:100%;bottom:50px;display:flex;align-items:center}.bulk-view-option button{background:transparent;border-radius:0;border:none;border-left:1px solid #f1f1f1;color:#747576;font-size:11px;font-weight:500;padding:0 .5rem;margin:0;height:2rem;position:relative}.bulk-view-option button:last-of-type{border-right:1px solid #f1f1f1}.bulk-view-option button.active{color:#1e5dd3}.bulk-view-option button.active:before{background:#fff;content:\"\";position:absolute;top:-1px;left:0;height:1px;width:100%}.bulk-view-footer{height:50px;box-shadow:0 0 15px #1e03d259;padding:10px 20px;position:fixed;width:100%;bottom:0;display:flex;align-items:center;justify-content:space-between;background:#fff}.bulk-view-footer .left p{color:#747576;font-size:13px;font-weight:500;margin:0}.bulk-view-footer .right button{font-size:12px;background:#fff;border:1px solid #dcdcdc;color:#747576;border-radius:2px;padding:8px 18px;cursor:pointer;text-transform:uppercase}.bulk-view-footer .right button+button{margin-left:4px}.bulk-view-footer .right button.blue{color:#fff;background:#1e5dd3}.bulk-view-footer .right button:disabled{background:#f1f1f1;border-color:#f1f1f1;pointer-events:none;cursor:not-allowed;color:#747576}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: ToolTipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "placement", "type", "tooltipMandatory", "showTooltip", "animate"] }, { kind: "component", type: LoaderComponent$1, selector: "app-loader" }] }); }
|
|
47045
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: BulkResponsibilityViewComponent, selector: "app-bulk-responsibility-view", inputs: { responsibilityBulkUpload: "responsibilityBulkUpload", fileName: "fileName", defaultOwner: "defaultOwner", loader: "loader", tabType: "tabType", bulkUpload: "bulkUpload", responsibilityType: "responsibilityType" }, outputs: { submitResponsibilityBulkUpload: "submitResponsibilityBulkUpload", cancel: "cancel", selectedTab: "selectedTab" }, usesOnChanges: true, ngImport: i0, template: "<!-- --------------------------------------------------------------------upward is new one-------------------- -->\r\n<app-loader *ngIf=\"loader\"></app-loader>\r\n\r\n\r\n\r\n\r\n\r\n\r\n<!-- HTML for multiple tabs -->\r\n<ng-container *ngIf=\"responsibilityType === 'multiTab'\">\r\n <ng-template #fieldIcon let-report let-field=\"field\">\r\n <i *ngIf=\"cellMessage(report, field)\" class=\"icons\" [ngClass]=\"cellSeverity(report, field)\"\r\n [appTooltip]=\"cellMessage(report, field)\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\">\r\n <ng-container *ngIf=\"cellSeverity(report, field) === 'error'\"></ng-container>\r\n <ng-container *ngIf=\"cellSeverity(report, field) !== 'error'\"></ng-container>\r\n </i>\r\n </ng-template>\r\n <div class=\"bulk-view\">\r\n <div class=\"bulk-view-head\">\r\n <h2 class=\"bulk-view-title\">\r\n {{fileName}}\r\n </h2>\r\n </div>\r\n <div class=\"bulk-view-body bulk\" [class.is-horizontally-scrolled]=\"isHorizontallyScrolled\"\r\n (scroll)=\"onGridScroll($event)\">\r\n <div class=\"exel-view\">\r\n <div class=\"exel-view-row head\">\r\n <div class=\"exel-view-column sl-no sticky-col sticky-col-index\">#</div>\r\n <div class=\"exel-view-column sticky-col sticky-col-name\">Responsibility Name <span class=\"required\">*</span></div>\r\n <div class=\"exel-view-column\" *ngIf=\"responsibilityBulkUpload?.header.includes('Program')\"\r\n [class.three-column]=\"true\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Program</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.three-column]=\"true\">\r\n <div class=\"exel-view-column\">Program Type</div>\r\n <div class=\"exel-view-column\">Program</div>\r\n <div class=\"exel-view-column\">Program Category</div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\">Entrusted By</div>\r\n <div class=\"exel-view-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Entrust To <span class=\"required\">*</span></div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column\">Person or Group<span class=\"required\">*</span></div>\r\n <div class=\"exel-view-column\">All or Any Persons</div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\">Key Responsibility?</div>\r\n <div class=\"exel-view-column\" *ngIf=\"tabType === 'frequency'\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-row\">\r\n <!-- <div class=\"exel-view-column large\">Frequency of Occurrence and Completion Window <span class=\"required\">*</span></div> -->\r\n <div class=\"exel-view-column large\">{{responsibilityBulkUpload?.header.includes('Program') ?\r\n responsibilityBulkUpload?.header[8]?.slice(0, -1) :\r\n responsibilityBulkUpload?.header[5]?.slice(0, -1)}}<span class=\"required\">*</span></div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\">\r\n <ng-container *ngIf=\"tabType === 'frequency'\">\r\n <div class=\"exel-view-column\">Frequency <span class=\"required\">*</span></div>\r\n <div class=\"exel-view-column\">Due Date <span class=\"info-text\">(Day)</span></div>\r\n <div class=\"exel-view-column\">Due Date <span class=\"info-text\">(Month)</span></div>\r\n <div class=\"exel-view-column\" *ngIf=\"hasExtendedFrequencyColumns\">Due Time</div>\r\n <div class=\"exel-view-column\">Start <span class=\"info-text\">(No. of days before the due\r\n date)</span></div>\r\n <div class=\"exel-view-column\">Fail <span class=\"info-text\"\r\n appTooltip=\"(No. of days after the due date. Select '0' if the responsibility must be completed on the due date)\"\r\n placement=\"bottom\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">(No. of\r\n days after the due date. Select \"0\" if the responsibility must be completed on\r\n the due date)</span></div>\r\n <ng-container *ngIf=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\">Responsibility Ends After Occurences <span\r\n class=\"info-text\">(Number of occurrences)</span></div>\r\n <div class=\"exel-view-column\">Responsibility Ends By Date <span\r\n class=\"info-text\">(Day)</span></div>\r\n <div class=\"exel-view-column\">Responsibility Ends By Date <span\r\n class=\"info-text\">(Month)</span></div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column two-column\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Responsibility Centre</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\">Responsibility Centre Name</div>\r\n <div class=\"exel-view-column\">Responsibility Centre Type</div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\">Risk Class</div>\r\n <div class=\"exel-view-column\">Objective</div>\r\n <div class=\"exel-view-column\">Notes</div>\r\n <div class=\"exel-view-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Format & Evidence</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\" [class.three-column]=\"false\">\r\n <div class=\"exel-view-column\" [class.small-column]=\"true\">Format</div>\r\n <div class=\"exel-view-column\">Format For Responsibility (link)</div>\r\n <div class=\"exel-view-column\" [class.small-column]=\"true\">Evidence</div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"exel-view-column\">Assessments or Checkpoints</div> -->\r\n <div class=\"exel-view-column four-column\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Review of Responsibility</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.four-column]=\"true\">\r\n <div class=\"exel-view-column\">Reviewer</div>\r\n <div class=\"exel-view-column\">Reviewer Type\r\n <span class=\"info-text\">(Specify the type of reviewer flow)</span>\r\n\r\n </div>\r\n\r\n <div class=\"exel-view-column\">Review Start <span class=\"info-text\">(No. of days before the\r\n due date)</span></div>\r\n <div class=\"exel-view-column\">Review Fail <span class=\"info-text\"\r\n appTooltip=\"(No. of days after the due date. Select '0' if the responsibility must be reviewed on the due date)\"\r\n placement=\"bottom\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">(No. of days\r\n after the due date. Select \"0\" if the responsibility must be reviewed on the due\r\n date)</span></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Overseer</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column\">Always Notify</div>\r\n <div class=\"exel-view-column\">Notify on Failure</div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"exel-view-column\">Overseer</div> -->\r\n\r\n <!-- Collaborator -->\r\n <div class=\"exel-view-column\">Collaborator</div>\r\n\r\n </div>\r\n <div class=\"exel-view-row\" *ngFor=\"let report of responsibilityBulkUpload?.reports; let i = index\">\r\n <div class=\"exel-view-column sl-no sticky-col sticky-col-index\" [ngClass]=\"rowIndexClass(report)\">{{i+1}}</div>\r\n <div class=\"exel-view-column sticky-col sticky-col-name\" [ngClass]=\"cellClass(report, 'responsibilityName')\">\r\n {{report?.responsibilityName}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'responsibilityName' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column multi-column\"\r\n *ngIf=\"responsibilityBulkUpload?.header.includes('Program')\" [class.error]=\"false\"\r\n [class.three-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.three-column]=\"true\">\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'programType')\">\r\n {{report?.programType}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'programType' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'program')\">\r\n {{report?.program}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'program' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'programCategory')\">\r\n {{report?.programCategory}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'programCategory' }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'assignor')\">{{report?.assignor}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'assignor' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'assignee')\">\r\n {{report?.assignee}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'assignee' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'assigneeType')\">\r\n {{report?.assigneeType}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'assigneeType' }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'keyResponsibility')\">\r\n {{report?.keyResponsibility}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'keyResponsibility' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\"\r\n *ngIf=\"tabType === 'frequency'\">\r\n\r\n <div class=\"exel-view-row multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'frequency')\">{{report?.frequency}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'frequency' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'day')\">\r\n {{report?.day}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'day' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'month')\">\r\n {{report?.month}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'month' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\" *ngIf=\"hasExtendedFrequencyColumns\"\r\n [ngClass]=\"cellClass(report, 'dueTime')\">{{report?.dueTime}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'dueTime' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'responsibilityWindow')\">{{report?.responsibilityWindow}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'responsibilityWindow' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'failedAfter')\">{{report?.failedAfter}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'failedAfter' }\"></ng-container>\r\n </div>\r\n <ng-container *ngIf=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'endsAfterOccurrences')\">{{report?.endsAfterOccurrences}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'endsAfterOccurrences' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'endsByDateDay')\">{{report?.endsByDateDay}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'endsByDateDay' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'endsByDateMonth')\">{{report?.endsByDateMonth}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'endsByDateMonth' }\"></ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n </div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'responsibilityCenter')\">\r\n {{report?.responsibilityCenter}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'responsibilityCenter' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'responsibilityCenterType')\">\r\n {{report?.responsibilityCenterType}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'responsibilityCenterType' }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'reportClass')\">\r\n {{report?.reportClass}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'reportClass' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\">{{report?.objective}}</div>\r\n <div class=\"exel-view-column\">{{report?.notes}}</div>\r\n <div class=\"exel-view-column multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column multi-column\">\r\n <div class=\"exel-view-row multi-column\">\r\n <div class=\"exel-view-column\" [class.small-column]=\"true\"\r\n [ngClass]=\"cellClass(report, 'isFormat')\">{{report?.isFormat}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'isFormat' }\"></ng-container>\r\n </div>\r\n <a class=\"exel-view-column external-link\" [href]=\"report?.formatForResponsibility\"\r\n [ngClass]=\"cellClass(report, 'formatForResponsibility')\"\r\n target=\"_blank\">{{report?.formatForResponsibility}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'formatForResponsibility' }\"></ng-container>\r\n </a>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\" [class.small-column]=\"true\"\r\n [ngClass]=\"cellClass(report, 'documentEvidenceRequired')\">\r\n {{report?.documentEvidenceRequired}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'documentEvidenceRequired' }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"exel-view-column\">{{report?.assessments}}</div> -->\r\n <div class=\"exel-view-column multi-column\" [class.four-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.four-column]=\"true\">\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'reviewer')\">{{report?.reviewer}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'reviewer' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'reviewerType')\">\r\n {{report?.reviewerType}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'reviewerType' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'reviewToBeCompletedWithin')\">{{report?.reviewToBeCompletedWithin}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'reviewToBeCompletedWithin' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'reviewWillBeFailedAfter')\">{{report?.reviewWillBeFailedAfter}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'reviewWillBeFailedAfter' }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"exel-view-column multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'overseer')\">\r\n {{report?.overseer}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'overseer' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'notifyOnFailure')\">\r\n {{report?.notifyOnFailure}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'notifyOnFailure' }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'collaborator')\">{{report?.collaborator}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'collaborator' }\"></ng-container>\r\n </div>\r\n\r\n <!-- <div class=\"exel-view-column\" [class.error]=\"(report?.overseer) && ((report?.overseer === report?.assignee) ||(report?.reviewer === report?.overseer) || (report?.overseer == report?.assignor) || (!report?.userValidateWithProgram?.isValidOverseer))\">\r\n {{report?.overseer}}\r\n <i *ngIf=\"(report?.overseer) && ((report?.reviewer === report?.overseer))\"\r\n class=\"icons\"\r\n [appTooltip]=\"'The Reviewer cannot also be the Overseer of this responsibility. Select another user as the Overseer.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n\r\n <i *ngIf=\"report?.overseer && (report?.overseer === report?.assignee)\" class=\"icons\"\r\n [appTooltip]=\"'The Assignee cannot also be the Overseer of this responsibility. Select another user as the Overseer'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n <i *ngIf=\"((report?.overseer) && (report?.overseer == report?.assignor))\"\r\n class=\"icons\"\r\n [appTooltip]=\"((report?.assignor)?'The Assignor cannot also be the Overseer of this responsibility. ':'You cannot be an Overseer of this responsibility since you are the Assignor. ') +'Select another user as the Overseer.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n <i *ngIf=\"!report?.userValidateWithProgram?.isValidOverseer\"\r\n class=\"icons\"\r\n [appTooltip]=\"'Selected user is not a valid overseer for selected program.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n </div> -->\r\n </div>\r\n\r\n <div class=\"exel-view-row empty-fill-row\" aria-hidden=\"true\">\r\n <div class=\"exel-view-column sl-no sticky-col sticky-col-index\"></div>\r\n <div class=\"exel-view-column sticky-col sticky-col-name\"></div>\r\n <div class=\"exel-view-column multi-column three-column\" *ngIf=\"hasProgramColumn\">\r\n <div class=\"exel-view-row multi-column three-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\"\r\n *ngIf=\"tabType === 'frequency'\">\r\n <div class=\"exel-view-row multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\" *ngIf=\"hasExtendedFrequencyColumns\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <ng-container *ngIf=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column multi-column\">\r\n <div class=\"exel-view-row multi-column\">\r\n <div class=\"exel-view-column small-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column small-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column multi-column four-column\">\r\n <div class=\"exel-view-row multi-column four-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n <!-- ------------------------------------------------old code dynamic------------------------------------------------- -->\r\n\r\n <!-- *ngFor=\"let report of responsibilityBulkUpload?.reports; let i = index\" -->\r\n </div>\r\n </div>\r\n <div class=\"bulk-view-option\">\r\n <button *ngIf=\"bulkUpload?.frequency?.reports?.length\" [class.active]=\"tabType === 'frequency'\"\r\n (click)=\"selectedTab.emit('frequency')\">Frequency Responsibilities</button>\r\n <button *ngIf=\"bulkUpload?.ongoing?.reports?.length\" [class.active]=\"tabType === 'ongoing'\"\r\n (click)=\"selectedTab.emit('ongoing')\">Ongoing Responsibilities</button>\r\n <button *ngIf=\"bulkUpload?.onCompletion?.reports?.length\" [class.active]=\"tabType === 'onCompletion'\"\r\n (click)=\"selectedTab.emit('onCompletion')\">On Completion Responsibilities</button>\r\n </div>\r\n <div class=\"bulk-view-footer\">\r\n <!-- <div class=\"left\">\r\n <p>{{finalResponsibilities}} out of {{responsibilityBulkUpload?.reports?.length}} responsibilities will be\r\n added.</p>\r\n </div> -->\r\n <div class=\"left\">\r\n <p>{{finalResponsibilities}} out of {{responsibilityMultiTabBulkUpload?.length}}\r\n {{responsibilityMultiTabBulkUpload?.length > 1 ? 'responsibilities' : 'responsibility'}} will be\r\n added.</p>\r\n </div>\r\n <div class=\"right\">\r\n <button (click)=\"close()\" id=\"bulk-resp-cancel\">Cancel</button>\r\n <button (click)=\"submit()\" id=\"bulk-resp-confirm\" [disabled]=\"!isConfirmClickable\"\r\n class=\"blue\">Confirm</button>\r\n <!-- finalResponsibilities < 1 -->\r\n </div>\r\n </div>\r\n </div>\r\n <app-loader *ngIf=\"loader\"></app-loader>\r\n\r\n</ng-container>\r\n\r\n<!-- --------------------------------------------------------------------upward is new one-------------------- -->", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";::-webkit-scrollbar-thumb,::-webkit-scrollbar-thumb:hover{background:#747576;border-radius:16px}::-webkit-scrollbar{height:15px}.bulk-view{position:fixed;inset:0;z-index:11}.bulk-view-head{height:60px;padding:20px 24px;background:#161b2f;display:flex;justify-content:flex-start}.bulk-view-title{font-size:16px;line-height:20px;font-weight:400;margin:0;color:#fff}.bulk-view-body{height:calc(100vh - 110px);overflow:auto;width:100%;background:#fff}.bulk-view-body .exel-view{display:block}.bulk-view-body .exel-view-row{display:flex;width:100%}.bulk-view-body .exel-view-row.head .exel-view-column{font-weight:500;font-size:14px;min-height:26px;background:#f1f1f1;padding:0;word-break:unset}.bulk-view-body .exel-view-row.multi-column .exel-view-column{width:140px;min-width:140px}.bulk-view-body .exel-view-row.multi-column .external-link{color:#1e5dd3;text-decoration:none}.bulk-view-body .exel-view-column{width:300px;min-width:300px;padding:0 10px;border-right:1px solid #dcdcdc;border-bottom:1px solid #dcdcdc;display:flex;align-items:center;justify-content:center;text-align:center;word-break:break-all;line-height:16px;font-size:12px;color:#161b2f;flex-wrap:wrap;position:relative}.bulk-view-body .exel-view-column i.icons{position:absolute;top:8px;right:10px;cursor:pointer;color:#d93b41}.bulk-view-body .exel-view-column i.icons.warning{color:#b7770d}.bulk-view-body .exel-view-column i.icons.info{color:#1a5276}.bulk-view-body .exel-view-column.large{width:100%;min-width:auto}.bulk-view-body .exel-view-column.error{border:1px solid #EB2424!important;background:#ffeeeb;padding-right:24px}.bulk-view-body .exel-view-column.error+.error{border-left:none!important}.bulk-view-body .exel-view-column.warning{border:1px solid #B7770D!important;background:#fef8e7;padding-right:24px}.bulk-view-body .exel-view-column.warning+.warning{border-left:none!important}.bulk-view-body .exel-view-column.info{border:1px solid #1A5276!important;background:#f4f8ff;padding-right:24px}.bulk-view-body .exel-view-column.info+.info{border-left:none!important}.bulk-view-body .exel-view-column span.required{color:#eb2424;display:contents}.bulk-view-body .exel-view-column .exel-view-row .exel-view-column{width:100%}.bulk-view-body .exel-view-column.sticky-col{position:sticky;z-index:2;background:#fff}.bulk-view-body .exel-view-column.sticky-col.warning{background:#fef8e7}.bulk-view-body .exel-view-column.sticky-col.info{background:#f4f8ff}.bulk-view-body .exel-view-column.sticky-col.error{background:#ffeeeb}.bulk-view-body .exel-view-column.sticky-col-index{left:0;z-index:3;background:#f1f1f1}.bulk-view-body .exel-view-column.sticky-col-index.error{background:#ffeeeb}.bulk-view-body .exel-view-column.sticky-col-index.warning{background:#fef8e7}.bulk-view-body .exel-view-column.sticky-col-index.info{background:#f4f8ff}.bulk-view-body .exel-view-column.sticky-col-name{left:60px}.bulk-view-body .exel-view-column.sl-no{background:#f1f1f1;width:60px;min-width:60px;min-height:30px;font-weight:400}.bulk-view-body .exel-view-column.sl-no.error{background:#ffeeeb;border:none;padding-right:10px;border-bottom:1px solid #dcdcdc}.bulk-view-body .exel-view-column.sl-no.warning{background:#fef8e7;border:none;padding-right:10px;border-bottom:1px solid #dcdcdc}.bulk-view-body .exel-view-column.sl-no.info{background:#f4f8ff;border:none;padding-right:10px;border-bottom:1px solid #dcdcdc}.bulk-view-body .exel-view-column.multi-column{padding:0;border:none}.bulk-view-body .exel-view-column.multi-column .exel-view-row{height:100%}.bulk-view-body .exel-view-column.multi-column .exel-view-column{width:50%;min-width:50%}.bulk-view-body .exel-view-column.multi-column .exel-view-column+.exel-view-column{border-left:none}.bulk-view-body.bulk{height:calc(100vh - 142px)}.bulk-view-body.bulk.is-horizontally-scrolled .sticky-col-name{overflow:visible}.bulk-view-body.bulk.is-horizontally-scrolled .sticky-col-name:after{content:\"\";position:absolute;top:-1px;bottom:-1px;right:0;width:8px;pointer-events:none;box-shadow:4px 0 8px #1e5dd326}.bulk-view-body.bulk .exel-view{display:flex;flex-direction:column;width:max-content;min-width:100%;min-height:100%}.bulk-view-body.bulk .exel-view-row{width:max-content;min-width:100%}.bulk-view-body.bulk .exel-view-row.head{position:sticky;top:0;z-index:4}.bulk-view-body.bulk .exel-view-row.head .exel-view-column{min-height:34px}.bulk-view-body.bulk .exel-view-row.head .exel-view-column.sticky-col{background:#f1f1f1;z-index:5}.bulk-view-body.bulk .exel-view-row.head .exel-view-column .info-text{font-size:10px;display:block;width:100%;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;padding:0 8px}.bulk-view-body.bulk .exel-view-row.two-column .exel-view-column{min-width:250px!important}.bulk-view-body.bulk .exel-view-row.three-column .exel-view-column,.bulk-view-body.bulk .exel-view-row.four-column .exel-view-column,.bulk-view-body.bulk .exel-view-row.five-column .exel-view-column,.bulk-view-body.bulk .exel-view-row.nine-column .exel-view-column{width:200px;min-width:200px!important}.bulk-view-body.bulk .exel-view-column .exel-view-row .exel-view-column.small-column{width:120px;min-width:120px!important}.bulk-view-body.bulk .exel-view-column.multi-column .exel-view-column{min-width:unset}.bulk-view-body.bulk .exel-view-column.two-column{width:500px;min-width:500px!important}.bulk-view-body.bulk .exel-view-column.three-column{width:600px;min-width:600px!important}.bulk-view-body.bulk .exel-view-column.four-column{width:800px;min-width:800px!important}.bulk-view-body.bulk .exel-view-column.five-column{width:1000px;min-width:1000px!important}.bulk-view-body.bulk .exel-view-column.nine-column{width:1800px;min-width:1800px!important}.bulk-view-body.bulk .exel-view .empty-fill-row{flex:1 1 auto;min-height:32px;align-items:stretch}.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-column{min-height:100%;background-color:#fff;background-image:repeating-linear-gradient(to bottom,#fff 0 31px,#dcdcdc 31px 32px);background-repeat:repeat-y;background-size:100% 32px}.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-column.multi-column{background-image:none;background-color:transparent}.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-column.sticky-col-index,.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-column.sl-no{background-color:#f1f1f1;background-image:repeating-linear-gradient(to bottom,#f1f1f1 0 31px,#dcdcdc 31px 32px)}.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-row{height:100%;align-items:stretch}.bulk-view-option{background:#fff;border-top:1px solid #f1f1f1;padding:0 20px;position:fixed;width:100%;bottom:50px;display:flex;align-items:center}.bulk-view-option button{background:transparent;border-radius:0;border:none;border-left:1px solid #f1f1f1;color:#747576;font-size:11px;font-weight:500;padding:0 .5rem;margin:0;height:2rem;position:relative}.bulk-view-option button:last-of-type{border-right:1px solid #f1f1f1}.bulk-view-option button.active{color:#1e5dd3}.bulk-view-option button.active:before{background:#fff;content:\"\";position:absolute;top:-1px;left:0;height:1px;width:100%}.bulk-view-footer{height:50px;box-shadow:0 0 15px #1e03d259;padding:10px 20px;position:fixed;width:100%;bottom:0;display:flex;align-items:center;justify-content:space-between;background:#fff}.bulk-view-footer .left p{color:#747576;font-size:13px;font-weight:500;margin:0}.bulk-view-footer .right button{font-size:12px;background:#fff;border:1px solid #dcdcdc;color:#747576;border-radius:2px;padding:8px 18px;cursor:pointer;text-transform:uppercase}.bulk-view-footer .right button+button{margin-left:4px}.bulk-view-footer .right button.blue{color:#fff;background:#1e5dd3}.bulk-view-footer .right button:disabled{background:#f1f1f1;border-color:#f1f1f1;pointer-events:none;cursor:not-allowed;color:#747576}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: ToolTipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "placement", "type", "tooltipMandatory", "showTooltip", "animate"] }, { kind: "component", type: LoaderComponent$1, selector: "app-loader" }] }); }
|
|
47090
47046
|
}
|
|
47091
47047
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BulkResponsibilityViewComponent, decorators: [{
|
|
47092
47048
|
type: Component,
|
|
47093
|
-
args: [{ selector: 'app-bulk-responsibility-view', template: "<!-- --------------------------------------------------------------------upward is new one-------------------- -->\r\n<app-loader *ngIf=\"loader\"></app-loader>\r\n\r\n\r\n\r\n\r\n\r\n\r\n<!-- HTML for multiple tabs -->\r\n<ng-container *ngIf=\"responsibilityType === 'multiTab'\">\r\n <ng-template #dropdownErr let-invalid>\r\n <i *ngIf=\"invalid\" class=\"icons\" [appTooltip]=\"VALIDATION_MESSAGES.DROPDOWN\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i>\r\n </ng-template>\r\n <div class=\"bulk-view\">\r\n <div class=\"bulk-view-head\">\r\n <h2 class=\"bulk-view-title\">\r\n {{fileName}}\r\n </h2>\r\n </div>\r\n <div class=\"bulk-view-body bulk\" [class.is-horizontally-scrolled]=\"isHorizontallyScrolled\"\r\n (scroll)=\"onGridScroll($event)\">\r\n <div class=\"exel-view\">\r\n <div class=\"exel-view-row head\">\r\n <div class=\"exel-view-column sl-no sticky-col sticky-col-index\">#</div>\r\n <div class=\"exel-view-column sticky-col sticky-col-name\">Responsibility Name <span class=\"required\">*</span></div>\r\n <div class=\"exel-view-column\" *ngIf=\"responsibilityBulkUpload?.header.includes('Program')\"\r\n [class.three-column]=\"true\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Program</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.three-column]=\"true\">\r\n <div class=\"exel-view-column\">Program Type</div>\r\n <div class=\"exel-view-column\">Program</div>\r\n <div class=\"exel-view-column\">Program Category</div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\">Entrusted By</div>\r\n <div class=\"exel-view-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Entrust To <span class=\"required\">*</span></div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column\">Person or Group<span class=\"required\">*</span></div>\r\n <div class=\"exel-view-column\">All or Any Persons</div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\">Key Responsibility?</div>\r\n <div class=\"exel-view-column\" *ngIf=\"tabType === 'frequency'\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-row\">\r\n <!-- <div class=\"exel-view-column large\">Frequency of Occurrence and Completion Window <span class=\"required\">*</span></div> -->\r\n <div class=\"exel-view-column large\">{{responsibilityBulkUpload?.header.includes('Program') ?\r\n responsibilityBulkUpload?.header[8]?.slice(0, -1) :\r\n responsibilityBulkUpload?.header[5]?.slice(0, -1)}}<span class=\"required\">*</span></div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\">\r\n <ng-container *ngIf=\"tabType === 'frequency'\">\r\n <div class=\"exel-view-column\">Frequency <span class=\"required\">*</span></div>\r\n <div class=\"exel-view-column\">Due Date <span class=\"info-text\">(Day)</span></div>\r\n <div class=\"exel-view-column\">Due Date <span class=\"info-text\">(Month)</span></div>\r\n <div class=\"exel-view-column\" *ngIf=\"hasExtendedFrequencyColumns\">Due Time</div>\r\n <div class=\"exel-view-column\">Start <span class=\"info-text\">(No. of days before the due\r\n date)</span></div>\r\n <div class=\"exel-view-column\">Fail <span class=\"info-text\"\r\n appTooltip=\"(No. of days after the due date. Select '0' if the responsibility must be completed on the due date)\"\r\n placement=\"bottom\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">(No. of\r\n days after the due date. Select \"0\" if the responsibility must be completed on\r\n the due date)</span></div>\r\n <ng-container *ngIf=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\">Responsibility Ends After Occurences <span\r\n class=\"info-text\">(Number of occurrences)</span></div>\r\n <div class=\"exel-view-column\">Responsibility Ends By Date <span\r\n class=\"info-text\">(Day)</span></div>\r\n <div class=\"exel-view-column\">Responsibility Ends By Date <span\r\n class=\"info-text\">(Month)</span></div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column two-column\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Responsibility Centre</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\">Responsibility Centre Name</div>\r\n <div class=\"exel-view-column\">Responsibility Centre Type</div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\">Risk Class</div>\r\n <div class=\"exel-view-column\">Objective</div>\r\n <div class=\"exel-view-column\">Notes</div>\r\n <div class=\"exel-view-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Format & Evidence</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\" [class.three-column]=\"false\">\r\n <div class=\"exel-view-column\" [class.small-column]=\"true\">Format</div>\r\n <div class=\"exel-view-column\">Format For Responsibility (link)</div>\r\n <div class=\"exel-view-column\" [class.small-column]=\"true\">Evidence</div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"exel-view-column\">Assessments or Checkpoints</div> -->\r\n <div class=\"exel-view-column four-column\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Review of Responsibility</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.four-column]=\"true\">\r\n <div class=\"exel-view-column\">Reviewer</div>\r\n <div class=\"exel-view-column\">Reviewer Type\r\n <span class=\"info-text\">(Specify the type of reviewer flow)</span>\r\n\r\n </div>\r\n\r\n <div class=\"exel-view-column\">Review Start <span class=\"info-text\">(No. of days before the\r\n due date)</span></div>\r\n <div class=\"exel-view-column\">Review Fail <span class=\"info-text\"\r\n appTooltip=\"(No. of days after the due date. Select '0' if the responsibility must be reviewed on the due date)\"\r\n placement=\"bottom\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">(No. of days\r\n after the due date. Select \"0\" if the responsibility must be reviewed on the due\r\n date)</span></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Overseer</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column\">Always Notify</div>\r\n <div class=\"exel-view-column\">Notify on Failure</div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"exel-view-column\">Overseer</div> -->\r\n\r\n <!-- Collaborator -->\r\n <div class=\"exel-view-column\">Collaborator</div>\r\n\r\n </div>\r\n <div class=\"exel-view-row\" *ngFor=\"let report of responsibilityBulkUpload?.reports; let i = index\">\r\n <div class=\"exel-view-column sl-no sticky-col sticky-col-index\" [class.error]=\"!report?.isValid\">{{i+1}}</div>\r\n <div class=\"exel-view-column sticky-col sticky-col-name\" [class.error]=\"!report.responsibilityName\">\r\n {{report?.responsibilityName}} <i *ngIf=\"!report.responsibilityName\" class=\"icons\"\r\n [appTooltip]=\"'Enter a name for this responsibility.'\" placement=\"bottom-right\" type=\"white\"\r\n delay=\"0\" [tooltipMandatory]=true></i></div>\r\n <div class=\"exel-view-column multi-column\"\r\n *ngIf=\"responsibilityBulkUpload?.header.includes('Program')\" [class.error]=\"false\"\r\n [class.three-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.three-column]=\"true\">\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.programType === false\">\r\n {{report?.programType}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.programType === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.program === false\">\r\n {{report?.program}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.program === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.programCategory === false\">\r\n {{report?.programCategory}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.programCategory === false }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.assignor === false\">{{report?.assignor}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.assignor === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"!report?.assignee || !report?.userValidateWithProgram?.isValidAssignee || (!report?.isValidUser) || report?.dropdownValidation?.assignee === false\">\r\n {{report?.assignee}}\r\n <!-- || (!report?.isValidUser) -->\r\n <i *ngIf=\"!report?.assignee\" class=\"icons\"\r\n [appTooltip]=\"'Select the user responsible for completing this responsibility. '\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.assignee && report?.dropdownValidation?.assignee === false }\"></ng-container>\r\n <i *ngIf=\"(report?.assignee) && report?.dropdownValidation?.assignee !== false && !report?.userValidateWithProgram?.isValidAssignee\"\r\n class=\"icons\"\r\n [appTooltip]=\"'This user is not associated with the selected Program.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.assigneeType === false\">\r\n {{report?.assigneeType}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.assigneeType === false }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.keyResponsibility === false\">\r\n {{report?.keyResponsibility}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.keyResponsibility === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\"\r\n *ngIf=\"tabType === 'frequency'\">\r\n\r\n <div class=\"exel-view-row multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\" [class.error]=\"!report?.frequency || report?.dropdownValidation?.frequency === false\">{{report?.frequency}}\r\n <i *ngIf=\"!report?.frequency\" class=\"icons\"\r\n [appTooltip]=\"'Select a frequency for this responsibility.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.frequency && report?.dropdownValidation?.frequency === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\" [class.error]=\"report?.dropdownValidation?.day === false || !report?.validDate || report?.isPastDate\">\r\n {{report?.day}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.day === false }\"></ng-container>\r\n <i *ngIf=\"report?.dropdownValidation?.day !== false && !report?.validDate\" class=\"icons\" [appTooltip]=\"'Invalid Due Date.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n <i *ngIf=\"report?.dropdownValidation?.day !== false && report?.isPastDate\" class=\"icons\"\r\n [appTooltip]=\"'This date occurs in the past. Select a future date.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n <div class=\"exel-view-column\" [class.error]=\"report?.dropdownValidation?.month === false || !report?.validDate || report?.isPastDate\">\r\n {{report?.month}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.month === false }\"></ng-container>\r\n <i *ngIf=\"report?.dropdownValidation?.month !== false && !report?.validDate\" class=\"icons\" [appTooltip]=\"'Invalid Due Date.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n <i *ngIf=\"report?.dropdownValidation?.month !== false && report?.isPastDate\" class=\"icons\"\r\n [appTooltip]=\"'This date occurs in the past. Select a future date.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n <div class=\"exel-view-column\" *ngIf=\"hasExtendedFrequencyColumns\"\r\n [class.error]=\"!report?.isValidDueTime || report?.dropdownValidation?.dueTime === false\">{{report?.dueTime}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: !report?.isValidDueTime || report?.dropdownValidation?.dueTime === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\">{{report?.responsibilityWindow}}</div>\r\n <div class=\"exel-view-column\">{{report?.failedAfter}}</div>\r\n <ng-container *ngIf=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"!report?.isValidEndsAfterOccurrences\">{{report?.endsAfterOccurrences}}\r\n <i *ngIf=\"!report?.isValidEndsAfterOccurrences\" class=\"icons\"\r\n [appTooltip]=\"report?.endsAfterOccurrencesError\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"!report?.isValidEndsByDateDay\">{{report?.endsByDateDay}}\r\n <i *ngIf=\"!report?.isValidEndsByDateDay\" class=\"icons\"\r\n [appTooltip]=\"report?.endsByDateDayError\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"!report?.isValidEndsByDateMonth\">{{report?.endsByDateMonth}}\r\n <i *ngIf=\"!report?.isValidEndsByDateMonth\" class=\"icons\"\r\n [appTooltip]=\"report?.endsByDateMonthError\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n </div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.responsibilityCenter === false\">\r\n {{report?.responsibilityCenter}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.responsibilityCenter === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.responsibilityCenterType === false\">\r\n {{report?.responsibilityCenterType}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.responsibilityCenterType === false }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.reportClass === false\">\r\n {{report?.reportClass}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.reportClass === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\">{{report?.objective}}</div>\r\n <div class=\"exel-view-column\">{{report?.notes}}</div>\r\n <div class=\"exel-view-column multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column multi-column\">\r\n <div class=\"exel-view-row multi-column\">\r\n <div class=\"exel-view-column\" [class.small-column]=\"true\"\r\n [class.error]=\"report?.dropdownValidation?.isFormat === false\">{{report?.isFormat}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.isFormat === false }\"></ng-container>\r\n </div>\r\n <a class=\"exel-view-column external-link\" [href]=\"report?.formatForResponsibility\"\r\n target=\"_blank\">{{report?.formatForResponsibility}}</a>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\" [class.small-column]=\"true\"\r\n [class.error]=\"report?.dropdownValidation?.documentEvidenceRequired === false\">\r\n {{report?.documentEvidenceRequired}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.documentEvidenceRequired === false }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"exel-view-column\">{{report?.assessments}}</div> -->\r\n <div class=\"exel-view-column multi-column\" [class.four-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.four-column]=\"true\">\r\n <div class=\"exel-view-column\" [class.error]=\"report?.dropdownValidation?.reviewer === false || (report?.reviewer && (\r\n !report?.userValidateWithProgram?.isValidReviewer ))\">{{report?.reviewer}}\r\n\r\n <!-- <i *ngIf=\"(report?.reviewer && report?.reviewer === report?.assignor)\"\r\n class=\"icons\"\r\n [appTooltip]=\"((report?.assignor)?'The Assignor cannot also be the Reviewer of this responsibility.':'You cannot be a Reviewer of this responsibility since you are the assignor. ') +'Select another user as the Reviewer'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i> -->\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.reviewer === false }\"></ng-container>\r\n <i *ngIf=\"report?.reviewer && report?.dropdownValidation?.reviewer !== false && !report?.userValidateWithProgram?.isValidReviewer\"\r\n class=\"icons\"\r\n [appTooltip]=\"'This user is not associated with the selected Program.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.reviewerType === false\">\r\n {{report?.reviewerType}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.reviewerType === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\">{{report?.reviewToBeCompletedWithin}}</div>\r\n <div class=\"exel-view-column\">{{report?.reviewWillBeFailedAfter}}</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"exel-view-column multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column\" [class.error]=\"report?.dropdownValidation?.overseer === false || (report?.overseer && (\r\n !report?.userValidateWithProgram?.isValidOverseer ))\">\r\n {{report?.overseer}}\r\n\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.overseer === false }\"></ng-container>\r\n <i *ngIf=\"(report?.overseer) && report?.dropdownValidation?.overseer !== false && !report?.userValidateWithProgram?.isValidOverseer\"\r\n class=\"icons\"\r\n [appTooltip]=\"'This user is not associated with the selected Program.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n </div>\r\n <div class=\"exel-view-column\" [class.error]=\"report?.dropdownValidation?.notifyOnFailure === false || (report?.notifyOnFailure && (\r\n !report?.userValidateWithProgram?.isValidNotifyOnFailure ))\">\r\n {{report?.notifyOnFailure}}\r\n\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.notifyOnFailure === false }\"></ng-container>\r\n <i *ngIf=\"(report?.notifyOnFailure) && report?.dropdownValidation?.notifyOnFailure !== false && !report?.userValidateWithProgram?.isValidNotifyOnFailure\"\r\n class=\"icons\"\r\n [appTooltip]=\"'This user is not associated with the selected Program.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.collaborator === false\">{{report?.collaborator}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.collaborator === false }\"></ng-container>\r\n </div>\r\n\r\n <!-- <div class=\"exel-view-column\" [class.error]=\"(report?.overseer) && ((report?.overseer === report?.assignee) ||(report?.reviewer === report?.overseer) || (report?.overseer == report?.assignor) || (!report?.userValidateWithProgram?.isValidOverseer))\">\r\n {{report?.overseer}}\r\n <i *ngIf=\"(report?.overseer) && ((report?.reviewer === report?.overseer))\"\r\n class=\"icons\"\r\n [appTooltip]=\"'The Reviewer cannot also be the Overseer of this responsibility. Select another user as the Overseer.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n\r\n <i *ngIf=\"report?.overseer && (report?.overseer === report?.assignee)\" class=\"icons\"\r\n [appTooltip]=\"'The Assignee cannot also be the Overseer of this responsibility. Select another user as the Overseer'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n <i *ngIf=\"((report?.overseer) && (report?.overseer == report?.assignor))\"\r\n class=\"icons\"\r\n [appTooltip]=\"((report?.assignor)?'The Assignor cannot also be the Overseer of this responsibility. ':'You cannot be an Overseer of this responsibility since you are the Assignor. ') +'Select another user as the Overseer.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n <i *ngIf=\"!report?.userValidateWithProgram?.isValidOverseer\"\r\n class=\"icons\"\r\n [appTooltip]=\"'Selected user is not a valid overseer for selected program.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n </div> -->\r\n </div>\r\n\r\n <div class=\"exel-view-row empty-fill-row\" aria-hidden=\"true\">\r\n <div class=\"exel-view-column sl-no sticky-col sticky-col-index\"></div>\r\n <div class=\"exel-view-column sticky-col sticky-col-name\"></div>\r\n <div class=\"exel-view-column multi-column three-column\" *ngIf=\"hasProgramColumn\">\r\n <div class=\"exel-view-row multi-column three-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\"\r\n *ngIf=\"tabType === 'frequency'\">\r\n <div class=\"exel-view-row multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\" *ngIf=\"hasExtendedFrequencyColumns\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <ng-container *ngIf=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column multi-column\">\r\n <div class=\"exel-view-row multi-column\">\r\n <div class=\"exel-view-column small-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column small-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column multi-column four-column\">\r\n <div class=\"exel-view-row multi-column four-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n <!-- ------------------------------------------------old code dynamic------------------------------------------------- -->\r\n\r\n <!-- *ngFor=\"let report of responsibilityBulkUpload?.reports; let i = index\" -->\r\n </div>\r\n </div>\r\n <div class=\"bulk-view-option\">\r\n <button *ngIf=\"bulkUpload?.frequency?.reports?.length\" [class.active]=\"tabType === 'frequency'\"\r\n (click)=\"selectedTab.emit('frequency')\">Frequency Responsibilities</button>\r\n <button *ngIf=\"bulkUpload?.ongoing?.reports?.length\" [class.active]=\"tabType === 'ongoing'\"\r\n (click)=\"selectedTab.emit('ongoing')\">Ongoing Responsibilities</button>\r\n <button *ngIf=\"bulkUpload?.onCompletion?.reports?.length\" [class.active]=\"tabType === 'onCompletion'\"\r\n (click)=\"selectedTab.emit('onCompletion')\">On Completion Responsibilities</button>\r\n </div>\r\n <div class=\"bulk-view-footer\">\r\n <!-- <div class=\"left\">\r\n <p>{{finalResponsibilities}} out of {{responsibilityBulkUpload?.reports?.length}} responsibilities will be\r\n uploaded.</p>\r\n </div> -->\r\n <div class=\"left\">\r\n <p>{{finalResponsibilities}} out of {{responsibilityMultiTabBulkUpload?.length}}\r\n {{responsibilityMultiTabBulkUpload?.length > 1 ? 'responsibilities' : 'responsibility'}} will be\r\n uploaded.</p>\r\n </div>\r\n <div class=\"right\">\r\n <button (click)=\"close()\" id=\"bulk-resp-cancel\">Cancel</button>\r\n <button (click)=\"submit()\" id=\"bulk-resp-confirm\" [disabled]=\"!isConfirmClickable\"\r\n class=\"blue\">Confirm</button>\r\n <!-- finalResponsibilities < 1 -->\r\n </div>\r\n </div>\r\n </div>\r\n <app-loader *ngIf=\"loader\"></app-loader>\r\n\r\n</ng-container>\r\n\r\n<!-- --------------------------------------------------------------------upward is new one-------------------- -->", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";::-webkit-scrollbar-thumb,::-webkit-scrollbar-thumb:hover{background:#747576;border-radius:16px}::-webkit-scrollbar{height:15px}.bulk-view{position:fixed;inset:0;z-index:11}.bulk-view-head{height:60px;padding:20px 24px;background:#161b2f;display:flex;justify-content:flex-start}.bulk-view-title{font-size:16px;line-height:20px;font-weight:400;margin:0;color:#fff}.bulk-view-body{height:calc(100vh - 110px);overflow:auto;width:100%;background:#fff}.bulk-view-body .exel-view{display:block}.bulk-view-body .exel-view-row{display:flex;width:100%}.bulk-view-body .exel-view-row.head .exel-view-column{font-weight:500;font-size:14px;min-height:26px;background:#f1f1f1;padding:0;word-break:unset}.bulk-view-body .exel-view-row.multi-column .exel-view-column{width:140px;min-width:140px}.bulk-view-body .exel-view-row.multi-column .external-link{color:#1e5dd3;text-decoration:none}.bulk-view-body .exel-view-column{width:300px;min-width:300px;padding:0 10px;border-right:1px solid #dcdcdc;border-bottom:1px solid #dcdcdc;display:flex;align-items:center;justify-content:center;text-align:center;word-break:break-all;line-height:16px;font-size:12px;color:#161b2f;flex-wrap:wrap;position:relative}.bulk-view-body .exel-view-column i.icons{position:absolute;top:8px;right:10px;cursor:pointer;color:#d93b41}.bulk-view-body .exel-view-column.large{width:100%;min-width:auto}.bulk-view-body .exel-view-column.error{border:1px solid #EB2424!important;padding-right:24px}.bulk-view-body .exel-view-column.error+.error{border-left:none!important}.bulk-view-body .exel-view-column span.required{color:#eb2424;display:contents}.bulk-view-body .exel-view-column .exel-view-row .exel-view-column{width:100%}.bulk-view-body .exel-view-column.sticky-col{position:sticky;z-index:2;background:#fff}.bulk-view-body .exel-view-column.sticky-col-index{left:0;z-index:3;background:#f1f1f1}.bulk-view-body .exel-view-column.sticky-col-name{left:60px}.bulk-view-body .exel-view-column.sl-no{background:#f1f1f1;width:60px;min-width:60px;min-height:30px;font-weight:400}.bulk-view-body .exel-view-column.sl-no.error{background:#f5d6d7;border:none;padding-right:10px;border-bottom:1px solid #dcdcdc}.bulk-view-body .exel-view-column.multi-column{padding:0;border:none}.bulk-view-body .exel-view-column.multi-column .exel-view-row{height:100%}.bulk-view-body .exel-view-column.multi-column .exel-view-column{width:50%;min-width:50%}.bulk-view-body .exel-view-column.multi-column .exel-view-column+.exel-view-column{border-left:none}.bulk-view-body.bulk{height:calc(100vh - 142px)}.bulk-view-body.bulk.is-horizontally-scrolled .sticky-col-name{overflow:visible}.bulk-view-body.bulk.is-horizontally-scrolled .sticky-col-name:after{content:\"\";position:absolute;top:-1px;bottom:-1px;right:0;width:8px;pointer-events:none;box-shadow:4px 0 8px #1e5dd326}.bulk-view-body.bulk .exel-view{display:flex;flex-direction:column;width:max-content;min-width:100%;min-height:100%}.bulk-view-body.bulk .exel-view-row{width:max-content;min-width:100%}.bulk-view-body.bulk .exel-view-row.head{position:sticky;top:0;z-index:4}.bulk-view-body.bulk .exel-view-row.head .exel-view-column{min-height:34px}.bulk-view-body.bulk .exel-view-row.head .exel-view-column.sticky-col{background:#f1f1f1;z-index:5}.bulk-view-body.bulk .exel-view-row.head .exel-view-column .info-text{font-size:10px;display:block;width:100%;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;padding:0 8px}.bulk-view-body.bulk .exel-view-row.two-column .exel-view-column{min-width:250px!important}.bulk-view-body.bulk .exel-view-row.three-column .exel-view-column,.bulk-view-body.bulk .exel-view-row.four-column .exel-view-column,.bulk-view-body.bulk .exel-view-row.five-column .exel-view-column,.bulk-view-body.bulk .exel-view-row.nine-column .exel-view-column{width:200px;min-width:200px!important}.bulk-view-body.bulk .exel-view-column .exel-view-row .exel-view-column.small-column{width:120px;min-width:120px!important}.bulk-view-body.bulk .exel-view-column.multi-column .exel-view-column{min-width:unset}.bulk-view-body.bulk .exel-view-column.two-column{width:500px;min-width:500px!important}.bulk-view-body.bulk .exel-view-column.three-column{width:600px;min-width:600px!important}.bulk-view-body.bulk .exel-view-column.four-column{width:800px;min-width:800px!important}.bulk-view-body.bulk .exel-view-column.five-column{width:1000px;min-width:1000px!important}.bulk-view-body.bulk .exel-view-column.nine-column{width:1800px;min-width:1800px!important}.bulk-view-body.bulk .exel-view .empty-fill-row{flex:1 1 auto;min-height:32px;align-items:stretch}.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-column{min-height:100%;background-color:#fff;background-image:repeating-linear-gradient(to bottom,#fff 0 31px,#dcdcdc 31px 32px);background-repeat:repeat-y;background-size:100% 32px}.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-column.multi-column{background-image:none;background-color:transparent}.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-column.sticky-col-index,.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-column.sl-no{background-color:#f1f1f1;background-image:repeating-linear-gradient(to bottom,#f1f1f1 0 31px,#dcdcdc 31px 32px)}.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-row{height:100%;align-items:stretch}.bulk-view-option{background:#fff;border-top:1px solid #f1f1f1;padding:0 20px;position:fixed;width:100%;bottom:50px;display:flex;align-items:center}.bulk-view-option button{background:transparent;border-radius:0;border:none;border-left:1px solid #f1f1f1;color:#747576;font-size:11px;font-weight:500;padding:0 .5rem;margin:0;height:2rem;position:relative}.bulk-view-option button:last-of-type{border-right:1px solid #f1f1f1}.bulk-view-option button.active{color:#1e5dd3}.bulk-view-option button.active:before{background:#fff;content:\"\";position:absolute;top:-1px;left:0;height:1px;width:100%}.bulk-view-footer{height:50px;box-shadow:0 0 15px #1e03d259;padding:10px 20px;position:fixed;width:100%;bottom:0;display:flex;align-items:center;justify-content:space-between;background:#fff}.bulk-view-footer .left p{color:#747576;font-size:13px;font-weight:500;margin:0}.bulk-view-footer .right button{font-size:12px;background:#fff;border:1px solid #dcdcdc;color:#747576;border-radius:2px;padding:8px 18px;cursor:pointer;text-transform:uppercase}.bulk-view-footer .right button+button{margin-left:4px}.bulk-view-footer .right button.blue{color:#fff;background:#1e5dd3}.bulk-view-footer .right button:disabled{background:#f1f1f1;border-color:#f1f1f1;pointer-events:none;cursor:not-allowed;color:#747576}\n"] }]
|
|
47049
|
+
args: [{ selector: 'app-bulk-responsibility-view', template: "<!-- --------------------------------------------------------------------upward is new one-------------------- -->\r\n<app-loader *ngIf=\"loader\"></app-loader>\r\n\r\n\r\n\r\n\r\n\r\n\r\n<!-- HTML for multiple tabs -->\r\n<ng-container *ngIf=\"responsibilityType === 'multiTab'\">\r\n <ng-template #fieldIcon let-report let-field=\"field\">\r\n <i *ngIf=\"cellMessage(report, field)\" class=\"icons\" [ngClass]=\"cellSeverity(report, field)\"\r\n [appTooltip]=\"cellMessage(report, field)\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\">\r\n <ng-container *ngIf=\"cellSeverity(report, field) === 'error'\"></ng-container>\r\n <ng-container *ngIf=\"cellSeverity(report, field) !== 'error'\"></ng-container>\r\n </i>\r\n </ng-template>\r\n <div class=\"bulk-view\">\r\n <div class=\"bulk-view-head\">\r\n <h2 class=\"bulk-view-title\">\r\n {{fileName}}\r\n </h2>\r\n </div>\r\n <div class=\"bulk-view-body bulk\" [class.is-horizontally-scrolled]=\"isHorizontallyScrolled\"\r\n (scroll)=\"onGridScroll($event)\">\r\n <div class=\"exel-view\">\r\n <div class=\"exel-view-row head\">\r\n <div class=\"exel-view-column sl-no sticky-col sticky-col-index\">#</div>\r\n <div class=\"exel-view-column sticky-col sticky-col-name\">Responsibility Name <span class=\"required\">*</span></div>\r\n <div class=\"exel-view-column\" *ngIf=\"responsibilityBulkUpload?.header.includes('Program')\"\r\n [class.three-column]=\"true\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Program</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.three-column]=\"true\">\r\n <div class=\"exel-view-column\">Program Type</div>\r\n <div class=\"exel-view-column\">Program</div>\r\n <div class=\"exel-view-column\">Program Category</div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\">Entrusted By</div>\r\n <div class=\"exel-view-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Entrust To <span class=\"required\">*</span></div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column\">Person or Group<span class=\"required\">*</span></div>\r\n <div class=\"exel-view-column\">All or Any Persons</div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\">Key Responsibility?</div>\r\n <div class=\"exel-view-column\" *ngIf=\"tabType === 'frequency'\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-row\">\r\n <!-- <div class=\"exel-view-column large\">Frequency of Occurrence and Completion Window <span class=\"required\">*</span></div> -->\r\n <div class=\"exel-view-column large\">{{responsibilityBulkUpload?.header.includes('Program') ?\r\n responsibilityBulkUpload?.header[8]?.slice(0, -1) :\r\n responsibilityBulkUpload?.header[5]?.slice(0, -1)}}<span class=\"required\">*</span></div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\">\r\n <ng-container *ngIf=\"tabType === 'frequency'\">\r\n <div class=\"exel-view-column\">Frequency <span class=\"required\">*</span></div>\r\n <div class=\"exel-view-column\">Due Date <span class=\"info-text\">(Day)</span></div>\r\n <div class=\"exel-view-column\">Due Date <span class=\"info-text\">(Month)</span></div>\r\n <div class=\"exel-view-column\" *ngIf=\"hasExtendedFrequencyColumns\">Due Time</div>\r\n <div class=\"exel-view-column\">Start <span class=\"info-text\">(No. of days before the due\r\n date)</span></div>\r\n <div class=\"exel-view-column\">Fail <span class=\"info-text\"\r\n appTooltip=\"(No. of days after the due date. Select '0' if the responsibility must be completed on the due date)\"\r\n placement=\"bottom\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">(No. of\r\n days after the due date. Select \"0\" if the responsibility must be completed on\r\n the due date)</span></div>\r\n <ng-container *ngIf=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\">Responsibility Ends After Occurences <span\r\n class=\"info-text\">(Number of occurrences)</span></div>\r\n <div class=\"exel-view-column\">Responsibility Ends By Date <span\r\n class=\"info-text\">(Day)</span></div>\r\n <div class=\"exel-view-column\">Responsibility Ends By Date <span\r\n class=\"info-text\">(Month)</span></div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column two-column\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Responsibility Centre</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\">Responsibility Centre Name</div>\r\n <div class=\"exel-view-column\">Responsibility Centre Type</div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\">Risk Class</div>\r\n <div class=\"exel-view-column\">Objective</div>\r\n <div class=\"exel-view-column\">Notes</div>\r\n <div class=\"exel-view-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Format & Evidence</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\" [class.three-column]=\"false\">\r\n <div class=\"exel-view-column\" [class.small-column]=\"true\">Format</div>\r\n <div class=\"exel-view-column\">Format For Responsibility (link)</div>\r\n <div class=\"exel-view-column\" [class.small-column]=\"true\">Evidence</div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"exel-view-column\">Assessments or Checkpoints</div> -->\r\n <div class=\"exel-view-column four-column\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Review of Responsibility</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.four-column]=\"true\">\r\n <div class=\"exel-view-column\">Reviewer</div>\r\n <div class=\"exel-view-column\">Reviewer Type\r\n <span class=\"info-text\">(Specify the type of reviewer flow)</span>\r\n\r\n </div>\r\n\r\n <div class=\"exel-view-column\">Review Start <span class=\"info-text\">(No. of days before the\r\n due date)</span></div>\r\n <div class=\"exel-view-column\">Review Fail <span class=\"info-text\"\r\n appTooltip=\"(No. of days after the due date. Select '0' if the responsibility must be reviewed on the due date)\"\r\n placement=\"bottom\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">(No. of days\r\n after the due date. Select \"0\" if the responsibility must be reviewed on the due\r\n date)</span></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Overseer</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column\">Always Notify</div>\r\n <div class=\"exel-view-column\">Notify on Failure</div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"exel-view-column\">Overseer</div> -->\r\n\r\n <!-- Collaborator -->\r\n <div class=\"exel-view-column\">Collaborator</div>\r\n\r\n </div>\r\n <div class=\"exel-view-row\" *ngFor=\"let report of responsibilityBulkUpload?.reports; let i = index\">\r\n <div class=\"exel-view-column sl-no sticky-col sticky-col-index\" [ngClass]=\"rowIndexClass(report)\">{{i+1}}</div>\r\n <div class=\"exel-view-column sticky-col sticky-col-name\" [ngClass]=\"cellClass(report, 'responsibilityName')\">\r\n {{report?.responsibilityName}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'responsibilityName' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column multi-column\"\r\n *ngIf=\"responsibilityBulkUpload?.header.includes('Program')\" [class.error]=\"false\"\r\n [class.three-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.three-column]=\"true\">\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'programType')\">\r\n {{report?.programType}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'programType' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'program')\">\r\n {{report?.program}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'program' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'programCategory')\">\r\n {{report?.programCategory}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'programCategory' }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'assignor')\">{{report?.assignor}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'assignor' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'assignee')\">\r\n {{report?.assignee}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'assignee' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'assigneeType')\">\r\n {{report?.assigneeType}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'assigneeType' }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'keyResponsibility')\">\r\n {{report?.keyResponsibility}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'keyResponsibility' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\"\r\n *ngIf=\"tabType === 'frequency'\">\r\n\r\n <div class=\"exel-view-row multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'frequency')\">{{report?.frequency}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'frequency' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'day')\">\r\n {{report?.day}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'day' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'month')\">\r\n {{report?.month}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'month' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\" *ngIf=\"hasExtendedFrequencyColumns\"\r\n [ngClass]=\"cellClass(report, 'dueTime')\">{{report?.dueTime}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'dueTime' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'responsibilityWindow')\">{{report?.responsibilityWindow}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'responsibilityWindow' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'failedAfter')\">{{report?.failedAfter}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'failedAfter' }\"></ng-container>\r\n </div>\r\n <ng-container *ngIf=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'endsAfterOccurrences')\">{{report?.endsAfterOccurrences}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'endsAfterOccurrences' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'endsByDateDay')\">{{report?.endsByDateDay}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'endsByDateDay' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'endsByDateMonth')\">{{report?.endsByDateMonth}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'endsByDateMonth' }\"></ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n </div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'responsibilityCenter')\">\r\n {{report?.responsibilityCenter}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'responsibilityCenter' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'responsibilityCenterType')\">\r\n {{report?.responsibilityCenterType}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'responsibilityCenterType' }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'reportClass')\">\r\n {{report?.reportClass}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'reportClass' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\">{{report?.objective}}</div>\r\n <div class=\"exel-view-column\">{{report?.notes}}</div>\r\n <div class=\"exel-view-column multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column multi-column\">\r\n <div class=\"exel-view-row multi-column\">\r\n <div class=\"exel-view-column\" [class.small-column]=\"true\"\r\n [ngClass]=\"cellClass(report, 'isFormat')\">{{report?.isFormat}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'isFormat' }\"></ng-container>\r\n </div>\r\n <a class=\"exel-view-column external-link\" [href]=\"report?.formatForResponsibility\"\r\n [ngClass]=\"cellClass(report, 'formatForResponsibility')\"\r\n target=\"_blank\">{{report?.formatForResponsibility}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'formatForResponsibility' }\"></ng-container>\r\n </a>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\" [class.small-column]=\"true\"\r\n [ngClass]=\"cellClass(report, 'documentEvidenceRequired')\">\r\n {{report?.documentEvidenceRequired}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'documentEvidenceRequired' }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"exel-view-column\">{{report?.assessments}}</div> -->\r\n <div class=\"exel-view-column multi-column\" [class.four-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.four-column]=\"true\">\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'reviewer')\">{{report?.reviewer}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'reviewer' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'reviewerType')\">\r\n {{report?.reviewerType}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'reviewerType' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'reviewToBeCompletedWithin')\">{{report?.reviewToBeCompletedWithin}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'reviewToBeCompletedWithin' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'reviewWillBeFailedAfter')\">{{report?.reviewWillBeFailedAfter}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'reviewWillBeFailedAfter' }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"exel-view-column multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'overseer')\">\r\n {{report?.overseer}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'overseer' }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'notifyOnFailure')\">\r\n {{report?.notifyOnFailure}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'notifyOnFailure' }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"exel-view-column\" [ngClass]=\"cellClass(report, 'collaborator')\">{{report?.collaborator}}\r\n <ng-container *ngTemplateOutlet=\"fieldIcon; context: { $implicit: report, field: 'collaborator' }\"></ng-container>\r\n </div>\r\n\r\n <!-- <div class=\"exel-view-column\" [class.error]=\"(report?.overseer) && ((report?.overseer === report?.assignee) ||(report?.reviewer === report?.overseer) || (report?.overseer == report?.assignor) || (!report?.userValidateWithProgram?.isValidOverseer))\">\r\n {{report?.overseer}}\r\n <i *ngIf=\"(report?.overseer) && ((report?.reviewer === report?.overseer))\"\r\n class=\"icons\"\r\n [appTooltip]=\"'The Reviewer cannot also be the Overseer of this responsibility. Select another user as the Overseer.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n\r\n <i *ngIf=\"report?.overseer && (report?.overseer === report?.assignee)\" class=\"icons\"\r\n [appTooltip]=\"'The Assignee cannot also be the Overseer of this responsibility. Select another user as the Overseer'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n <i *ngIf=\"((report?.overseer) && (report?.overseer == report?.assignor))\"\r\n class=\"icons\"\r\n [appTooltip]=\"((report?.assignor)?'The Assignor cannot also be the Overseer of this responsibility. ':'You cannot be an Overseer of this responsibility since you are the Assignor. ') +'Select another user as the Overseer.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n <i *ngIf=\"!report?.userValidateWithProgram?.isValidOverseer\"\r\n class=\"icons\"\r\n [appTooltip]=\"'Selected user is not a valid overseer for selected program.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n </div> -->\r\n </div>\r\n\r\n <div class=\"exel-view-row empty-fill-row\" aria-hidden=\"true\">\r\n <div class=\"exel-view-column sl-no sticky-col sticky-col-index\"></div>\r\n <div class=\"exel-view-column sticky-col sticky-col-name\"></div>\r\n <div class=\"exel-view-column multi-column three-column\" *ngIf=\"hasProgramColumn\">\r\n <div class=\"exel-view-row multi-column three-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\"\r\n *ngIf=\"tabType === 'frequency'\">\r\n <div class=\"exel-view-row multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\" *ngIf=\"hasExtendedFrequencyColumns\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <ng-container *ngIf=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column multi-column\">\r\n <div class=\"exel-view-row multi-column\">\r\n <div class=\"exel-view-column small-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column small-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column multi-column four-column\">\r\n <div class=\"exel-view-row multi-column four-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n <!-- ------------------------------------------------old code dynamic------------------------------------------------- -->\r\n\r\n <!-- *ngFor=\"let report of responsibilityBulkUpload?.reports; let i = index\" -->\r\n </div>\r\n </div>\r\n <div class=\"bulk-view-option\">\r\n <button *ngIf=\"bulkUpload?.frequency?.reports?.length\" [class.active]=\"tabType === 'frequency'\"\r\n (click)=\"selectedTab.emit('frequency')\">Frequency Responsibilities</button>\r\n <button *ngIf=\"bulkUpload?.ongoing?.reports?.length\" [class.active]=\"tabType === 'ongoing'\"\r\n (click)=\"selectedTab.emit('ongoing')\">Ongoing Responsibilities</button>\r\n <button *ngIf=\"bulkUpload?.onCompletion?.reports?.length\" [class.active]=\"tabType === 'onCompletion'\"\r\n (click)=\"selectedTab.emit('onCompletion')\">On Completion Responsibilities</button>\r\n </div>\r\n <div class=\"bulk-view-footer\">\r\n <!-- <div class=\"left\">\r\n <p>{{finalResponsibilities}} out of {{responsibilityBulkUpload?.reports?.length}} responsibilities will be\r\n added.</p>\r\n </div> -->\r\n <div class=\"left\">\r\n <p>{{finalResponsibilities}} out of {{responsibilityMultiTabBulkUpload?.length}}\r\n {{responsibilityMultiTabBulkUpload?.length > 1 ? 'responsibilities' : 'responsibility'}} will be\r\n added.</p>\r\n </div>\r\n <div class=\"right\">\r\n <button (click)=\"close()\" id=\"bulk-resp-cancel\">Cancel</button>\r\n <button (click)=\"submit()\" id=\"bulk-resp-confirm\" [disabled]=\"!isConfirmClickable\"\r\n class=\"blue\">Confirm</button>\r\n <!-- finalResponsibilities < 1 -->\r\n </div>\r\n </div>\r\n </div>\r\n <app-loader *ngIf=\"loader\"></app-loader>\r\n\r\n</ng-container>\r\n\r\n<!-- --------------------------------------------------------------------upward is new one-------------------- -->", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";::-webkit-scrollbar-thumb,::-webkit-scrollbar-thumb:hover{background:#747576;border-radius:16px}::-webkit-scrollbar{height:15px}.bulk-view{position:fixed;inset:0;z-index:11}.bulk-view-head{height:60px;padding:20px 24px;background:#161b2f;display:flex;justify-content:flex-start}.bulk-view-title{font-size:16px;line-height:20px;font-weight:400;margin:0;color:#fff}.bulk-view-body{height:calc(100vh - 110px);overflow:auto;width:100%;background:#fff}.bulk-view-body .exel-view{display:block}.bulk-view-body .exel-view-row{display:flex;width:100%}.bulk-view-body .exel-view-row.head .exel-view-column{font-weight:500;font-size:14px;min-height:26px;background:#f1f1f1;padding:0;word-break:unset}.bulk-view-body .exel-view-row.multi-column .exel-view-column{width:140px;min-width:140px}.bulk-view-body .exel-view-row.multi-column .external-link{color:#1e5dd3;text-decoration:none}.bulk-view-body .exel-view-column{width:300px;min-width:300px;padding:0 10px;border-right:1px solid #dcdcdc;border-bottom:1px solid #dcdcdc;display:flex;align-items:center;justify-content:center;text-align:center;word-break:break-all;line-height:16px;font-size:12px;color:#161b2f;flex-wrap:wrap;position:relative}.bulk-view-body .exel-view-column i.icons{position:absolute;top:8px;right:10px;cursor:pointer;color:#d93b41}.bulk-view-body .exel-view-column i.icons.warning{color:#b7770d}.bulk-view-body .exel-view-column i.icons.info{color:#1a5276}.bulk-view-body .exel-view-column.large{width:100%;min-width:auto}.bulk-view-body .exel-view-column.error{border:1px solid #EB2424!important;background:#ffeeeb;padding-right:24px}.bulk-view-body .exel-view-column.error+.error{border-left:none!important}.bulk-view-body .exel-view-column.warning{border:1px solid #B7770D!important;background:#fef8e7;padding-right:24px}.bulk-view-body .exel-view-column.warning+.warning{border-left:none!important}.bulk-view-body .exel-view-column.info{border:1px solid #1A5276!important;background:#f4f8ff;padding-right:24px}.bulk-view-body .exel-view-column.info+.info{border-left:none!important}.bulk-view-body .exel-view-column span.required{color:#eb2424;display:contents}.bulk-view-body .exel-view-column .exel-view-row .exel-view-column{width:100%}.bulk-view-body .exel-view-column.sticky-col{position:sticky;z-index:2;background:#fff}.bulk-view-body .exel-view-column.sticky-col.warning{background:#fef8e7}.bulk-view-body .exel-view-column.sticky-col.info{background:#f4f8ff}.bulk-view-body .exel-view-column.sticky-col.error{background:#ffeeeb}.bulk-view-body .exel-view-column.sticky-col-index{left:0;z-index:3;background:#f1f1f1}.bulk-view-body .exel-view-column.sticky-col-index.error{background:#ffeeeb}.bulk-view-body .exel-view-column.sticky-col-index.warning{background:#fef8e7}.bulk-view-body .exel-view-column.sticky-col-index.info{background:#f4f8ff}.bulk-view-body .exel-view-column.sticky-col-name{left:60px}.bulk-view-body .exel-view-column.sl-no{background:#f1f1f1;width:60px;min-width:60px;min-height:30px;font-weight:400}.bulk-view-body .exel-view-column.sl-no.error{background:#ffeeeb;border:none;padding-right:10px;border-bottom:1px solid #dcdcdc}.bulk-view-body .exel-view-column.sl-no.warning{background:#fef8e7;border:none;padding-right:10px;border-bottom:1px solid #dcdcdc}.bulk-view-body .exel-view-column.sl-no.info{background:#f4f8ff;border:none;padding-right:10px;border-bottom:1px solid #dcdcdc}.bulk-view-body .exel-view-column.multi-column{padding:0;border:none}.bulk-view-body .exel-view-column.multi-column .exel-view-row{height:100%}.bulk-view-body .exel-view-column.multi-column .exel-view-column{width:50%;min-width:50%}.bulk-view-body .exel-view-column.multi-column .exel-view-column+.exel-view-column{border-left:none}.bulk-view-body.bulk{height:calc(100vh - 142px)}.bulk-view-body.bulk.is-horizontally-scrolled .sticky-col-name{overflow:visible}.bulk-view-body.bulk.is-horizontally-scrolled .sticky-col-name:after{content:\"\";position:absolute;top:-1px;bottom:-1px;right:0;width:8px;pointer-events:none;box-shadow:4px 0 8px #1e5dd326}.bulk-view-body.bulk .exel-view{display:flex;flex-direction:column;width:max-content;min-width:100%;min-height:100%}.bulk-view-body.bulk .exel-view-row{width:max-content;min-width:100%}.bulk-view-body.bulk .exel-view-row.head{position:sticky;top:0;z-index:4}.bulk-view-body.bulk .exel-view-row.head .exel-view-column{min-height:34px}.bulk-view-body.bulk .exel-view-row.head .exel-view-column.sticky-col{background:#f1f1f1;z-index:5}.bulk-view-body.bulk .exel-view-row.head .exel-view-column .info-text{font-size:10px;display:block;width:100%;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;padding:0 8px}.bulk-view-body.bulk .exel-view-row.two-column .exel-view-column{min-width:250px!important}.bulk-view-body.bulk .exel-view-row.three-column .exel-view-column,.bulk-view-body.bulk .exel-view-row.four-column .exel-view-column,.bulk-view-body.bulk .exel-view-row.five-column .exel-view-column,.bulk-view-body.bulk .exel-view-row.nine-column .exel-view-column{width:200px;min-width:200px!important}.bulk-view-body.bulk .exel-view-column .exel-view-row .exel-view-column.small-column{width:120px;min-width:120px!important}.bulk-view-body.bulk .exel-view-column.multi-column .exel-view-column{min-width:unset}.bulk-view-body.bulk .exel-view-column.two-column{width:500px;min-width:500px!important}.bulk-view-body.bulk .exel-view-column.three-column{width:600px;min-width:600px!important}.bulk-view-body.bulk .exel-view-column.four-column{width:800px;min-width:800px!important}.bulk-view-body.bulk .exel-view-column.five-column{width:1000px;min-width:1000px!important}.bulk-view-body.bulk .exel-view-column.nine-column{width:1800px;min-width:1800px!important}.bulk-view-body.bulk .exel-view .empty-fill-row{flex:1 1 auto;min-height:32px;align-items:stretch}.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-column{min-height:100%;background-color:#fff;background-image:repeating-linear-gradient(to bottom,#fff 0 31px,#dcdcdc 31px 32px);background-repeat:repeat-y;background-size:100% 32px}.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-column.multi-column{background-image:none;background-color:transparent}.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-column.sticky-col-index,.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-column.sl-no{background-color:#f1f1f1;background-image:repeating-linear-gradient(to bottom,#f1f1f1 0 31px,#dcdcdc 31px 32px)}.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-row{height:100%;align-items:stretch}.bulk-view-option{background:#fff;border-top:1px solid #f1f1f1;padding:0 20px;position:fixed;width:100%;bottom:50px;display:flex;align-items:center}.bulk-view-option button{background:transparent;border-radius:0;border:none;border-left:1px solid #f1f1f1;color:#747576;font-size:11px;font-weight:500;padding:0 .5rem;margin:0;height:2rem;position:relative}.bulk-view-option button:last-of-type{border-right:1px solid #f1f1f1}.bulk-view-option button.active{color:#1e5dd3}.bulk-view-option button.active:before{background:#fff;content:\"\";position:absolute;top:-1px;left:0;height:1px;width:100%}.bulk-view-footer{height:50px;box-shadow:0 0 15px #1e03d259;padding:10px 20px;position:fixed;width:100%;bottom:0;display:flex;align-items:center;justify-content:space-between;background:#fff}.bulk-view-footer .left p{color:#747576;font-size:13px;font-weight:500;margin:0}.bulk-view-footer .right button{font-size:12px;background:#fff;border:1px solid #dcdcdc;color:#747576;border-radius:2px;padding:8px 18px;cursor:pointer;text-transform:uppercase}.bulk-view-footer .right button+button{margin-left:4px}.bulk-view-footer .right button.blue{color:#fff;background:#1e5dd3}.bulk-view-footer .right button:disabled{background:#f1f1f1;border-color:#f1f1f1;pointer-events:none;cursor:not-allowed;color:#747576}\n"] }]
|
|
47094
47050
|
}], propDecorators: { responsibilityBulkUpload: [{
|
|
47095
47051
|
type: Input
|
|
47096
47052
|
}], fileName: [{
|
|
@@ -47857,6 +47813,134 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
47857
47813
|
type: Input
|
|
47858
47814
|
}] } });
|
|
47859
47815
|
|
|
47816
|
+
const RISK_CLASS_LIST = [
|
|
47817
|
+
'high',
|
|
47818
|
+
'medium-high',
|
|
47819
|
+
'medium',
|
|
47820
|
+
'low-medium',
|
|
47821
|
+
'low',
|
|
47822
|
+
];
|
|
47823
|
+
const VALIDATION_SEVERITY = {
|
|
47824
|
+
ERROR: 'error',
|
|
47825
|
+
WARNING: 'warning',
|
|
47826
|
+
INFO: 'info',
|
|
47827
|
+
};
|
|
47828
|
+
const NON_BLOCKING_DROPDOWN_FIELDS = [
|
|
47829
|
+
'assignor',
|
|
47830
|
+
'assigneeType',
|
|
47831
|
+
'keyResponsibility',
|
|
47832
|
+
'dueTime',
|
|
47833
|
+
];
|
|
47834
|
+
const YES_NO_DROPDOWN_LIST = ['Yes', 'No'];
|
|
47835
|
+
const PROGRAM_TYPE_DROPDOWN_LIST = [
|
|
47836
|
+
'Regulations',
|
|
47837
|
+
'Standards',
|
|
47838
|
+
'Internal Controls',
|
|
47839
|
+
'Others',
|
|
47840
|
+
];
|
|
47841
|
+
const ASSIGNEE_TYPE_DROPDOWN_LIST = [
|
|
47842
|
+
'All selected persons need to complete this responsibility',
|
|
47843
|
+
'Any selected person can complete this responsibility',
|
|
47844
|
+
];
|
|
47845
|
+
const RC_TYPE_DROPDOWN_LIST = [
|
|
47846
|
+
'Assign same responsibility',
|
|
47847
|
+
'Create separate responsibilities',
|
|
47848
|
+
];
|
|
47849
|
+
const REVIEWER_TYPE_DROPDOWN_LIST = [
|
|
47850
|
+
'SEQUENTIAL',
|
|
47851
|
+
'ANY REVIEWER CAN MARK THIS AS REVIEWED',
|
|
47852
|
+
];
|
|
47853
|
+
const FREQUENCY_DROPDOWN_LIST = [
|
|
47854
|
+
'Daily',
|
|
47855
|
+
'Every Alternate Day',
|
|
47856
|
+
'Weekly',
|
|
47857
|
+
'Every 10 Days',
|
|
47858
|
+
'Every Fortnight',
|
|
47859
|
+
'Every 2 Weeks',
|
|
47860
|
+
'Every 3 Weeks',
|
|
47861
|
+
'Monthly',
|
|
47862
|
+
'Every 45 Days',
|
|
47863
|
+
'Every Alternate Month',
|
|
47864
|
+
'Quarterly',
|
|
47865
|
+
'Every 120 Days',
|
|
47866
|
+
'Biannual',
|
|
47867
|
+
'Annual',
|
|
47868
|
+
'Every 2 Years',
|
|
47869
|
+
'Every 3 Years',
|
|
47870
|
+
'Every 4 Years',
|
|
47871
|
+
'Every 5 Years',
|
|
47872
|
+
'Every 10 Years',
|
|
47873
|
+
'One Time',
|
|
47874
|
+
'Other Frequency',
|
|
47875
|
+
];
|
|
47876
|
+
const FULL_MONTH_NAMES = [
|
|
47877
|
+
'January',
|
|
47878
|
+
'February',
|
|
47879
|
+
'March',
|
|
47880
|
+
'April',
|
|
47881
|
+
'May',
|
|
47882
|
+
'June',
|
|
47883
|
+
'July',
|
|
47884
|
+
'August',
|
|
47885
|
+
'September',
|
|
47886
|
+
'October',
|
|
47887
|
+
'November',
|
|
47888
|
+
'December',
|
|
47889
|
+
];
|
|
47890
|
+
const VALIDATION_MESSAGES = {
|
|
47891
|
+
DROPDOWN: 'The data added in this field is not valid. Select from the dropdown provided in the template.',
|
|
47892
|
+
RESPONSIBILITY_NAME_REQUIRED: 'This is a mandatory field. Enter a name for this responsibility.',
|
|
47893
|
+
RESPONSIBILITY_NAME_WHITESPACE: 'Responsibility Name cannot be blank or contain only spaces.',
|
|
47894
|
+
PROGRAM_CATEGORY_MISMATCH: 'Program Category does not belong to the selected Program. Select a valid category for this Program.',
|
|
47895
|
+
PROGRAM_CATEGORY_WITHOUT_PROGRAM: 'Program Category has been provided without a Program. Select a Program, or clear the Program Category field.',
|
|
47896
|
+
PROGRAM_TYPE_WITHOUT_PROGRAM: 'Program Type has been provided without a Program. Please also select a Program, or clear the Program Type field.',
|
|
47897
|
+
ENTRUSTED_BY_INVALID: 'This is not a valid user. Select a user from the dropdown or leave blank to use your account as the default.',
|
|
47898
|
+
ENTRUSTED_BY_INACTIVE: 'The user selected in this field is inactive. Select an active user or leave blank to use your account as the default.',
|
|
47899
|
+
ASSIGNEE_REQUIRED: 'This is a mandatory field. Select a user or group.',
|
|
47900
|
+
ASSIGNEE_INVALID: 'This is not a valid user or group in VComply. Select from the dropdown provided in the template.',
|
|
47901
|
+
ASSIGNEE_INACTIVE: 'The user selected in this field is inactive. Select an active user or group.',
|
|
47902
|
+
ASSIGNEE_TYPE_INVALID: 'The data added in this field is not valid. Select from the dropdown provided in the template or the default selection of "Any select person can completed this" will be applied.',
|
|
47903
|
+
GROUP_ALL_ANY_BLANK: "A group has been assigned. The default selection of 'Any selected person can complete this' will be applied.",
|
|
47904
|
+
KEY_RESPONSIBILITY_INVALID: "The data added in this field is not valid. Please select 'Yes', 'No', or leave blank (defaults to 'Not a Key Responsibility').",
|
|
47905
|
+
FREQUENCY_REQUIRED: 'This is mandatory field. Select a frequency.',
|
|
47906
|
+
DUE_DATE_DAY_NOT_NUMBER: 'The data added in this field is not valid. Enter a number from the dropdown provided in the template.',
|
|
47907
|
+
DUE_DATE_DAY_OUT_OF_RANGE: 'The value provided is out of range for a [Weekly] frequency. Select a valid option.',
|
|
47908
|
+
DUE_DATE_REQUIRED: 'This is mandatory field. Select from the dropdown provided in the template.',
|
|
47909
|
+
DUE_DATE_MONTH_INVALID: 'The data added in this field is not valid. Select a month from the dropdown provided in the template.',
|
|
47910
|
+
DUE_TIME_BLANK: 'The responsibilities will be created with a default time of 11:30 PM according to your VComply timezone.',
|
|
47911
|
+
RC_TYPE_WITHOUT_NAME: 'Responsibility Center Type has been provided without a Responsibility Center Name. Enter the Responsibility Center name.',
|
|
47912
|
+
RC_INACTIVE: 'This Responsibility Center no longer exists in VComply. Select an active Responsibility Center or leave blank.',
|
|
47913
|
+
FORMAT_LINK_WITHOUT_YES: 'A format link has been provided but Format selecton is set to "No". Set the Format field to "Yes" and upload the template again.',
|
|
47914
|
+
FORMAT_INVALID_URL: 'This is an invalid URL.',
|
|
47915
|
+
REVIEWER_INACTIVE: 'This user is inactive. Select an active user or group.',
|
|
47916
|
+
REVIEW_WINDOW_WITHOUT_REVIEWER: 'Review window has been specified but no Reviewer has been selected. Select a Reviewer, or clear these fields.',
|
|
47917
|
+
OVERSIGHT_DUPLICATE_ASSIGNEE: 'This user is already assigned as the primary Assignee. Adding them to oversight is redundant.',
|
|
47918
|
+
OVERSIGHT_DUPLICATE_ASSIGNOR: 'This user is already assigned as the Assignor. Adding them to oversight is redundant.',
|
|
47919
|
+
OVERSIGHT_INACTIVE: 'This user is inactive. Select an active user or group.',
|
|
47920
|
+
COLLABORATOR_INACTIVE: 'This user is inactive. Select an active user.',
|
|
47921
|
+
COLLABORATOR_GROUP: 'Collaborators must be individual users, not groups. Please select a specific user for the Collaborator field.',
|
|
47922
|
+
ONE_TIME_LIFECYCLE: "A 'One Time' responsibility cannot also have a lifecycle end rule. Clear the Ends After Occurrences and Ends By Date fields.",
|
|
47923
|
+
ENDS_AFTER_ONE_OCCURRENCE: "Ending after 1 occurrence is equivalent to a 'One Time' responsibility. Consider using the 'One Time' frequency instead.",
|
|
47924
|
+
USER_NOT_IN_PROGRAM: 'This user is not associated with the selected Program.',
|
|
47925
|
+
PAST_DUE_DATE: 'This date occurs in the past. Select a future date.',
|
|
47926
|
+
RISK_CLASS: 'Invalid risk class. Select a valid option from the drop-down list.',
|
|
47927
|
+
DAY: 'Invalid day selection. Select a valid day from the drop-down list in the template.',
|
|
47928
|
+
DATE_FORMAT: 'Invalid date format. Select a valid date from the drop-down list in the template.',
|
|
47929
|
+
DUE_DATE: 'Invalid Due Date.',
|
|
47930
|
+
DUE_TIME: "This value does not match the VComply template's format. Use the correct value from the drop-downs in the template.",
|
|
47931
|
+
ENDS_AFTER_OCCURRENCES_GREATER_THAN_ZERO: 'Must be greater than 0',
|
|
47932
|
+
ENDS_AFTER_OCCURRENCES_NUMERIC: 'Must be numeric value',
|
|
47933
|
+
WHOLE_NUMBER_NON_NEGATIVE: 'Must be a whole number. Negative and decimal values are not allowed.',
|
|
47934
|
+
POSITIVE_NUMBER: 'Must be a positive number',
|
|
47935
|
+
ENDS_BY_DATE_INVALID_VALUE: 'The data added in this field is not valid. Select from the dropdown provided in the template.',
|
|
47936
|
+
ENDS_BY_DATE_INCOMPLETE: 'Ends By Date requires both a day and a month. Please complete both fields or clear both to leave the end date unset.',
|
|
47937
|
+
ENDS_BY_DATE_PAST: 'The Ends By Date is in the past. This responsibility will be created with no future occurrences.',
|
|
47938
|
+
ENDS_BY_DATE_CONFLICT: "You have provided values for both 'Ends After Occurrences' and 'Ends By Date'. Fill in only one, or leave both blank if the responsibility will always be active.",
|
|
47939
|
+
};
|
|
47940
|
+
function dueDateDayOutOfRangeMessage(frequency) {
|
|
47941
|
+
return `The value provided is out of range for a [${frequency}] frequency. Select a valid option.`;
|
|
47942
|
+
}
|
|
47943
|
+
|
|
47860
47944
|
const REGEX = {
|
|
47861
47945
|
MONTH: /^[A-Za-z]+'\d{2}$/,
|
|
47862
47946
|
DUE_TIME: /^(1[0-2]|[1-9]):(00|30) (AM|PM)$/,
|
|
@@ -48908,7 +48992,6 @@ class AddMultipleResponsibilityWithTabComponent {
|
|
|
48908
48992
|
!Object.values(obj['userValidateWithProgram']).includes(false) &&
|
|
48909
48993
|
obj['isValidUser'] &&
|
|
48910
48994
|
this.isValidRiskClass(obj?.reportClass) &&
|
|
48911
|
-
obj['isValidDueTime'] &&
|
|
48912
48995
|
obj['isValidEndsAfterOccurrences'] &&
|
|
48913
48996
|
obj['isValidEndsByDate'];
|
|
48914
48997
|
return this.withDropdownValidation(obj, tabType, isProgram, hasExtendedFrequencyColumns);
|
|
@@ -48963,7 +49046,6 @@ class AddMultipleResponsibilityWithTabComponent {
|
|
|
48963
49046
|
obj?.frequency?.length &&
|
|
48964
49047
|
obj['isValidUser'] &&
|
|
48965
49048
|
this.isValidRiskClass(obj?.reportClass) &&
|
|
48966
|
-
obj['isValidDueTime'] &&
|
|
48967
49049
|
obj['isValidEndsAfterOccurrences'] &&
|
|
48968
49050
|
obj['isValidEndsByDate'];
|
|
48969
49051
|
return this.withDropdownValidation(obj, tabType, isProgram, hasExtendedFrequencyColumns);
|
|
@@ -49147,13 +49229,17 @@ class AddMultipleResponsibilityWithTabComponent {
|
|
|
49147
49229
|
/**
|
|
49148
49230
|
* Adds dropdown-list checks on top of existing row validation.
|
|
49149
49231
|
* Empty optional cells are valid. Frequency / due date / due time are skipped for ongoing.
|
|
49232
|
+
* Warning and info issues are shown in preview but do not make the row invalid.
|
|
49150
49233
|
*/
|
|
49151
49234
|
withDropdownValidation(obj, tabType, isProgram, hasExtendedFrequencyColumns = false) {
|
|
49152
49235
|
if (!obj) {
|
|
49153
49236
|
return obj;
|
|
49154
49237
|
}
|
|
49238
|
+
obj['fieldValidation'] = {};
|
|
49155
49239
|
this.applyDropdownValidation(obj, tabType, isProgram, hasExtendedFrequencyColumns);
|
|
49156
|
-
obj
|
|
49240
|
+
this.applyDaysCountValidation(obj, tabType);
|
|
49241
|
+
this.applySheetFieldMessages(obj, tabType, isProgram, hasExtendedFrequencyColumns);
|
|
49242
|
+
obj['isValid'] = !this.hasBlockingFieldIssues(obj);
|
|
49157
49243
|
return obj;
|
|
49158
49244
|
}
|
|
49159
49245
|
applyDropdownValidation(obj, tabType, isProgram, hasExtendedFrequencyColumns = false) {
|
|
@@ -49184,11 +49270,27 @@ class AddMultipleResponsibilityWithTabComponent {
|
|
|
49184
49270
|
collaborator: true,
|
|
49185
49271
|
};
|
|
49186
49272
|
if (isProgram) {
|
|
49187
|
-
|
|
49273
|
+
const hasProgram = this.hasValue(obj?.program);
|
|
49274
|
+
const hasProgramType = this.hasValue(obj?.programType);
|
|
49275
|
+
if (hasProgramType && !hasProgram) {
|
|
49276
|
+
dropdownValidation.programType = true;
|
|
49277
|
+
}
|
|
49278
|
+
else {
|
|
49279
|
+
dropdownValidation.programType = this.isInStaticDropdown(obj?.programType, PROGRAM_TYPE_DROPDOWN_LIST);
|
|
49280
|
+
}
|
|
49188
49281
|
dropdownValidation.program = this.isInDropdownList(obj?.program, this.getTemplateListNames(this.templateInfo?.categoryList, 'programName'));
|
|
49189
|
-
|
|
49190
|
-
|
|
49191
|
-
|
|
49282
|
+
if (this.hasValue(obj?.programCategory) && !hasProgram) {
|
|
49283
|
+
dropdownValidation.programCategory = false;
|
|
49284
|
+
}
|
|
49285
|
+
else if (this.hasValue(obj?.programCategory) && hasProgram) {
|
|
49286
|
+
const categoryNames = this.getProgramCategoryNamesForProgram(obj?.program);
|
|
49287
|
+
dropdownValidation.programCategory = this.isInDropdownList(obj?.programCategory, categoryNames.length ? categoryNames : programCategoryNames);
|
|
49288
|
+
}
|
|
49289
|
+
else {
|
|
49290
|
+
dropdownValidation.programCategory = programCategoryNames.length
|
|
49291
|
+
? this.isInDropdownList(obj?.programCategory, programCategoryNames)
|
|
49292
|
+
: true;
|
|
49293
|
+
}
|
|
49192
49294
|
}
|
|
49193
49295
|
dropdownValidation.assignor = this.isInUserDropdown(obj?.assignor);
|
|
49194
49296
|
dropdownValidation.assignee = this.isInDropdownList(obj?.assignee, assigneeNames);
|
|
@@ -49199,16 +49301,27 @@ class AddMultipleResponsibilityWithTabComponent {
|
|
|
49199
49301
|
dropdownValidation.day = this.isValidDropdownDay(obj?.day);
|
|
49200
49302
|
dropdownValidation.month = this.isValidDropdownMonth(obj?.month);
|
|
49201
49303
|
if (hasExtendedFrequencyColumns) {
|
|
49202
|
-
dropdownValidation.dueTime =
|
|
49304
|
+
dropdownValidation.dueTime = true;
|
|
49203
49305
|
}
|
|
49204
49306
|
}
|
|
49205
49307
|
dropdownValidation.responsibilityCenter = this.isInDropdownList(obj?.responsibilityCenter, this.getTemplateListNames(this.templateInfo?.rcList, 'name'));
|
|
49206
|
-
|
|
49308
|
+
if (this.hasValue(obj?.responsibilityCenterType) &&
|
|
49309
|
+
!this.hasValue(obj?.responsibilityCenter)) {
|
|
49310
|
+
dropdownValidation.responsibilityCenterType = false;
|
|
49311
|
+
}
|
|
49312
|
+
else {
|
|
49313
|
+
dropdownValidation.responsibilityCenterType = this.isInStaticDropdown(obj?.responsibilityCenterType, RC_TYPE_DROPDOWN_LIST);
|
|
49314
|
+
}
|
|
49207
49315
|
dropdownValidation.reportClass = this.isValidRiskClass(obj?.reportClass);
|
|
49208
49316
|
dropdownValidation.isFormat = this.isInStaticDropdown(obj?.isFormat, YES_NO_DROPDOWN_LIST);
|
|
49209
49317
|
dropdownValidation.documentEvidenceRequired = this.isInStaticDropdown(obj?.documentEvidenceRequired, YES_NO_DROPDOWN_LIST);
|
|
49210
49318
|
dropdownValidation.reviewer = this.isInDropdownList(obj?.reviewer, reviewerNames);
|
|
49211
|
-
|
|
49319
|
+
if (this.hasValue(obj?.reviewerType) && !this.hasValue(obj?.reviewer)) {
|
|
49320
|
+
dropdownValidation.reviewerType = false;
|
|
49321
|
+
}
|
|
49322
|
+
else {
|
|
49323
|
+
dropdownValidation.reviewerType = this.isInStaticDropdown(obj?.reviewerType, REVIEWER_TYPE_DROPDOWN_LIST);
|
|
49324
|
+
}
|
|
49212
49325
|
dropdownValidation.overseer = this.isInDropdownList(obj?.overseer, reviewerNames);
|
|
49213
49326
|
dropdownValidation.notifyOnFailure = this.isInDropdownList(obj?.notifyOnFailure, reviewerNames);
|
|
49214
49327
|
dropdownValidation.collaborator = this.isInDropdownList(obj?.collaborator, [
|
|
@@ -49216,7 +49329,7 @@ class AddMultipleResponsibilityWithTabComponent {
|
|
|
49216
49329
|
...reviewerNames,
|
|
49217
49330
|
]);
|
|
49218
49331
|
obj['dropdownValidation'] = dropdownValidation;
|
|
49219
|
-
obj['isValidDropdown'] = !Object.
|
|
49332
|
+
obj['isValidDropdown'] = !Object.entries(dropdownValidation).some(([field, isValid]) => isValid === false && !NON_BLOCKING_DROPDOWN_FIELDS.includes(field));
|
|
49220
49333
|
}
|
|
49221
49334
|
getTemplateListNames(list = [], key) {
|
|
49222
49335
|
return (list || [])
|
|
@@ -49235,6 +49348,267 @@ class AddMultipleResponsibilityWithTabComponent {
|
|
|
49235
49348
|
});
|
|
49236
49349
|
return names;
|
|
49237
49350
|
}
|
|
49351
|
+
getProgramCategoryNamesForProgram(programName) {
|
|
49352
|
+
const names = [];
|
|
49353
|
+
const program = (this.templateInfo?.categoryList || []).find((item) => this.normalizeDropdownValue(item?.programName) ===
|
|
49354
|
+
this.normalizeDropdownValue(programName));
|
|
49355
|
+
(program?.childCategory || []).forEach((category) => {
|
|
49356
|
+
if (this.hasValue(category?.name)) {
|
|
49357
|
+
names.push(String(category.name).trim());
|
|
49358
|
+
}
|
|
49359
|
+
});
|
|
49360
|
+
return names;
|
|
49361
|
+
}
|
|
49362
|
+
setFieldIssue(obj, field, severity, message) {
|
|
49363
|
+
if (!obj || !field || !message) {
|
|
49364
|
+
return;
|
|
49365
|
+
}
|
|
49366
|
+
obj.fieldValidation = obj.fieldValidation || {};
|
|
49367
|
+
const rank = {
|
|
49368
|
+
[VALIDATION_SEVERITY.ERROR]: 3,
|
|
49369
|
+
[VALIDATION_SEVERITY.WARNING]: 2,
|
|
49370
|
+
[VALIDATION_SEVERITY.INFO]: 1,
|
|
49371
|
+
};
|
|
49372
|
+
const current = obj.fieldValidation[field];
|
|
49373
|
+
if (!current || (rank[severity] || 0) >= (rank[current.severity] || 0)) {
|
|
49374
|
+
obj.fieldValidation[field] = { severity, message };
|
|
49375
|
+
}
|
|
49376
|
+
}
|
|
49377
|
+
hasBlockingFieldIssues(obj) {
|
|
49378
|
+
return Object.values(obj?.fieldValidation || {}).some((issue) => issue?.severity === VALIDATION_SEVERITY.ERROR);
|
|
49379
|
+
}
|
|
49380
|
+
samePerson(left, right) {
|
|
49381
|
+
if (!this.hasValue(left) || !this.hasValue(right)) {
|
|
49382
|
+
return false;
|
|
49383
|
+
}
|
|
49384
|
+
if (this.normalizeDropdownValue(left) === this.normalizeDropdownValue(right)) {
|
|
49385
|
+
return true;
|
|
49386
|
+
}
|
|
49387
|
+
const leftEmail = this.extractDropdownEmail(left);
|
|
49388
|
+
const rightEmail = this.extractDropdownEmail(right);
|
|
49389
|
+
if (leftEmail && rightEmail && leftEmail === rightEmail) {
|
|
49390
|
+
return true;
|
|
49391
|
+
}
|
|
49392
|
+
const leftName = this.extractDropdownName(left);
|
|
49393
|
+
const rightName = this.extractDropdownName(right);
|
|
49394
|
+
return !!leftName && !!rightName && leftName === rightName;
|
|
49395
|
+
}
|
|
49396
|
+
isValidFormatUrl(value) {
|
|
49397
|
+
try {
|
|
49398
|
+
const url = new URL(String(value).trim());
|
|
49399
|
+
return url.protocol === 'http:' || url.protocol === 'https:';
|
|
49400
|
+
}
|
|
49401
|
+
catch {
|
|
49402
|
+
return false;
|
|
49403
|
+
}
|
|
49404
|
+
}
|
|
49405
|
+
applySheetFieldMessages(obj, tabType, isProgram, hasExtendedFrequencyColumns = false) {
|
|
49406
|
+
const dropdown = obj?.dropdownValidation || {};
|
|
49407
|
+
const name = this.checkValidResponsibilityName(obj?.responsibilityName);
|
|
49408
|
+
if (!name) {
|
|
49409
|
+
const raw = obj?.responsibilityName;
|
|
49410
|
+
const whitespaceOnly = raw != null && String(raw).length > 0 && !String(raw).trim();
|
|
49411
|
+
this.setFieldIssue(obj, 'responsibilityName', VALIDATION_SEVERITY.ERROR, whitespaceOnly
|
|
49412
|
+
? VALIDATION_MESSAGES.RESPONSIBILITY_NAME_WHITESPACE
|
|
49413
|
+
: VALIDATION_MESSAGES.RESPONSIBILITY_NAME_REQUIRED);
|
|
49414
|
+
}
|
|
49415
|
+
if (isProgram) {
|
|
49416
|
+
const hasProgram = this.hasValue(obj?.program);
|
|
49417
|
+
const hasProgramType = this.hasValue(obj?.programType);
|
|
49418
|
+
const hasProgramCategory = this.hasValue(obj?.programCategory);
|
|
49419
|
+
if (hasProgramType && !hasProgram) {
|
|
49420
|
+
this.setFieldIssue(obj, 'programType', VALIDATION_SEVERITY.WARNING, VALIDATION_MESSAGES.PROGRAM_TYPE_WITHOUT_PROGRAM);
|
|
49421
|
+
}
|
|
49422
|
+
else if (dropdown.programType === false) {
|
|
49423
|
+
this.setFieldIssue(obj, 'programType', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
|
|
49424
|
+
}
|
|
49425
|
+
if (dropdown.program === false) {
|
|
49426
|
+
this.setFieldIssue(obj, 'program', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
|
|
49427
|
+
}
|
|
49428
|
+
if (hasProgramCategory && !hasProgram) {
|
|
49429
|
+
this.setFieldIssue(obj, 'programCategory', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.PROGRAM_CATEGORY_WITHOUT_PROGRAM);
|
|
49430
|
+
}
|
|
49431
|
+
else if (dropdown.programCategory === false) {
|
|
49432
|
+
this.setFieldIssue(obj, 'programCategory', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.PROGRAM_CATEGORY_MISMATCH);
|
|
49433
|
+
}
|
|
49434
|
+
}
|
|
49435
|
+
if (this.hasValue(obj?.assignor) && dropdown.assignor === false) {
|
|
49436
|
+
this.setFieldIssue(obj, 'assignor', VALIDATION_SEVERITY.WARNING, VALIDATION_MESSAGES.ENTRUSTED_BY_INVALID);
|
|
49437
|
+
}
|
|
49438
|
+
if (!this.hasValue(obj?.assignee)) {
|
|
49439
|
+
this.setFieldIssue(obj, 'assignee', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.ASSIGNEE_REQUIRED);
|
|
49440
|
+
}
|
|
49441
|
+
else if (dropdown.assignee === false || !obj?.isValidUser) {
|
|
49442
|
+
this.setFieldIssue(obj, 'assignee', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.ASSIGNEE_INVALID);
|
|
49443
|
+
}
|
|
49444
|
+
else if (obj?.userValidateWithProgram?.isValidAssignee === false) {
|
|
49445
|
+
this.setFieldIssue(obj, 'assignee', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.USER_NOT_IN_PROGRAM);
|
|
49446
|
+
}
|
|
49447
|
+
if (dropdown.assigneeType === false) {
|
|
49448
|
+
this.setFieldIssue(obj, 'assigneeType', VALIDATION_SEVERITY.WARNING, VALIDATION_MESSAGES.ASSIGNEE_TYPE_INVALID);
|
|
49449
|
+
}
|
|
49450
|
+
else if (this.isGroupSelected(obj?.assignee) &&
|
|
49451
|
+
!this.hasValue(obj?.assigneeType)) {
|
|
49452
|
+
this.setFieldIssue(obj, 'assigneeType', VALIDATION_SEVERITY.INFO, VALIDATION_MESSAGES.GROUP_ALL_ANY_BLANK);
|
|
49453
|
+
}
|
|
49454
|
+
if (dropdown.keyResponsibility === false) {
|
|
49455
|
+
this.setFieldIssue(obj, 'keyResponsibility', VALIDATION_SEVERITY.WARNING, VALIDATION_MESSAGES.KEY_RESPONSIBILITY_INVALID);
|
|
49456
|
+
}
|
|
49457
|
+
if (tabType === 'frequency') {
|
|
49458
|
+
if (!this.hasValue(obj?.frequency)) {
|
|
49459
|
+
this.setFieldIssue(obj, 'frequency', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.FREQUENCY_REQUIRED);
|
|
49460
|
+
}
|
|
49461
|
+
else if (dropdown.frequency === false) {
|
|
49462
|
+
this.setFieldIssue(obj, 'frequency', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
|
|
49463
|
+
}
|
|
49464
|
+
if (this.hasValue(obj?.day)) {
|
|
49465
|
+
const dayText = String(obj.day).trim();
|
|
49466
|
+
if (!/^\d+$/.test(dayText)) {
|
|
49467
|
+
this.setFieldIssue(obj, 'day', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DUE_DATE_DAY_NOT_NUMBER);
|
|
49468
|
+
}
|
|
49469
|
+
else if (dropdown.day === false || Number(dayText) < 1 || Number(dayText) > 31) {
|
|
49470
|
+
this.setFieldIssue(obj, 'day', VALIDATION_SEVERITY.ERROR, dueDateDayOutOfRangeMessage(obj?.frequency || 'Weekly'));
|
|
49471
|
+
}
|
|
49472
|
+
else if (this.normalizeDropdownValue(obj?.frequency) === 'weekly' &&
|
|
49473
|
+
Number(dayText) > 7) {
|
|
49474
|
+
this.setFieldIssue(obj, 'day', VALIDATION_SEVERITY.ERROR, dueDateDayOutOfRangeMessage('Weekly'));
|
|
49475
|
+
}
|
|
49476
|
+
}
|
|
49477
|
+
if (dropdown.month === false) {
|
|
49478
|
+
this.setFieldIssue(obj, 'month', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DUE_DATE_MONTH_INVALID);
|
|
49479
|
+
}
|
|
49480
|
+
if (obj?.isPastDate) {
|
|
49481
|
+
this.setFieldIssue(obj, 'day', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.PAST_DUE_DATE);
|
|
49482
|
+
this.setFieldIssue(obj, 'month', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.PAST_DUE_DATE);
|
|
49483
|
+
}
|
|
49484
|
+
else if (obj?.validDate === false && dropdown.day !== false && dropdown.month !== false) {
|
|
49485
|
+
this.setFieldIssue(obj, 'day', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DUE_DATE);
|
|
49486
|
+
this.setFieldIssue(obj, 'month', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DUE_DATE);
|
|
49487
|
+
}
|
|
49488
|
+
if (hasExtendedFrequencyColumns) {
|
|
49489
|
+
if (!this.hasValue(obj?.dueTime)) {
|
|
49490
|
+
this.setFieldIssue(obj, 'dueTime', VALIDATION_SEVERITY.INFO, VALIDATION_MESSAGES.DUE_TIME_BLANK);
|
|
49491
|
+
}
|
|
49492
|
+
else if (!this.isValidDueTime(obj?.dueTime, true)) {
|
|
49493
|
+
this.setFieldIssue(obj, 'dueTime', VALIDATION_SEVERITY.WARNING, VALIDATION_MESSAGES.DROPDOWN);
|
|
49494
|
+
}
|
|
49495
|
+
}
|
|
49496
|
+
if (obj?.responsibilityWindowError) {
|
|
49497
|
+
this.setFieldIssue(obj, 'responsibilityWindow', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
|
|
49498
|
+
}
|
|
49499
|
+
if (obj?.failedAfterError) {
|
|
49500
|
+
this.setFieldIssue(obj, 'failedAfter', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
|
|
49501
|
+
}
|
|
49502
|
+
if (obj?.endsAfterOccurrencesError) {
|
|
49503
|
+
this.setFieldIssue(obj, 'endsAfterOccurrences', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
|
|
49504
|
+
}
|
|
49505
|
+
if (obj?.endsByDateDayError) {
|
|
49506
|
+
this.setFieldIssue(obj, 'endsByDateDay', VALIDATION_SEVERITY.ERROR, obj.endsByDateDayError);
|
|
49507
|
+
}
|
|
49508
|
+
if (obj?.endsByDateMonthError) {
|
|
49509
|
+
this.setFieldIssue(obj, 'endsByDateMonth', VALIDATION_SEVERITY.ERROR, obj.endsByDateMonthError);
|
|
49510
|
+
}
|
|
49511
|
+
const isOneTime = this.normalizeDropdownValue(obj?.frequency) === 'one time';
|
|
49512
|
+
const hasLifecycleEnd = this.hasValue(obj?.endsAfterOccurrences) ||
|
|
49513
|
+
this.hasValue(obj?.endsByDateDay) ||
|
|
49514
|
+
this.hasValue(obj?.endsByDateMonth);
|
|
49515
|
+
if (isOneTime && hasLifecycleEnd) {
|
|
49516
|
+
const message = VALIDATION_MESSAGES.ONE_TIME_LIFECYCLE;
|
|
49517
|
+
this.setFieldIssue(obj, 'endsAfterOccurrences', VALIDATION_SEVERITY.ERROR, message);
|
|
49518
|
+
this.setFieldIssue(obj, 'endsByDateDay', VALIDATION_SEVERITY.ERROR, message);
|
|
49519
|
+
this.setFieldIssue(obj, 'endsByDateMonth', VALIDATION_SEVERITY.ERROR, message);
|
|
49520
|
+
}
|
|
49521
|
+
else if (hasExtendedFrequencyColumns &&
|
|
49522
|
+
Number(obj?.endsAfterOccurrences) === 1 &&
|
|
49523
|
+
!isOneTime) {
|
|
49524
|
+
this.setFieldIssue(obj, 'endsAfterOccurrences', VALIDATION_SEVERITY.WARNING, VALIDATION_MESSAGES.ENDS_AFTER_ONE_OCCURRENCE);
|
|
49525
|
+
}
|
|
49526
|
+
}
|
|
49527
|
+
if (dropdown.responsibilityCenter === false) {
|
|
49528
|
+
this.setFieldIssue(obj, 'responsibilityCenter', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
|
|
49529
|
+
}
|
|
49530
|
+
if (this.hasValue(obj?.responsibilityCenterType) &&
|
|
49531
|
+
!this.hasValue(obj?.responsibilityCenter)) {
|
|
49532
|
+
this.setFieldIssue(obj, 'responsibilityCenterType', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.RC_TYPE_WITHOUT_NAME);
|
|
49533
|
+
}
|
|
49534
|
+
else if (dropdown.responsibilityCenterType === false) {
|
|
49535
|
+
this.setFieldIssue(obj, 'responsibilityCenterType', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
|
|
49536
|
+
}
|
|
49537
|
+
if (dropdown.reportClass === false) {
|
|
49538
|
+
this.setFieldIssue(obj, 'reportClass', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
|
|
49539
|
+
}
|
|
49540
|
+
if (dropdown.isFormat === false) {
|
|
49541
|
+
this.setFieldIssue(obj, 'isFormat', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
|
|
49542
|
+
}
|
|
49543
|
+
if (this.hasValue(obj?.formatForResponsibility)) {
|
|
49544
|
+
if (this.normalizeDropdownValue(obj?.isFormat) === 'no') {
|
|
49545
|
+
this.setFieldIssue(obj, 'formatForResponsibility', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.FORMAT_LINK_WITHOUT_YES);
|
|
49546
|
+
}
|
|
49547
|
+
else if (!this.isValidFormatUrl(obj?.formatForResponsibility)) {
|
|
49548
|
+
this.setFieldIssue(obj, 'formatForResponsibility', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.FORMAT_INVALID_URL);
|
|
49549
|
+
}
|
|
49550
|
+
}
|
|
49551
|
+
if (dropdown.documentEvidenceRequired === false) {
|
|
49552
|
+
this.setFieldIssue(obj, 'documentEvidenceRequired', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
|
|
49553
|
+
}
|
|
49554
|
+
if (dropdown.reviewer === false) {
|
|
49555
|
+
this.setFieldIssue(obj, 'reviewer', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
|
|
49556
|
+
}
|
|
49557
|
+
else if (this.hasValue(obj?.reviewer) &&
|
|
49558
|
+
obj?.userValidateWithProgram?.isValidReviewer === false) {
|
|
49559
|
+
this.setFieldIssue(obj, 'reviewer', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.USER_NOT_IN_PROGRAM);
|
|
49560
|
+
}
|
|
49561
|
+
if (this.hasValue(obj?.reviewerType) && !this.hasValue(obj?.reviewer)) {
|
|
49562
|
+
this.setFieldIssue(obj, 'reviewerType', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
|
|
49563
|
+
}
|
|
49564
|
+
else if (dropdown.reviewerType === false) {
|
|
49565
|
+
this.setFieldIssue(obj, 'reviewerType', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
|
|
49566
|
+
}
|
|
49567
|
+
if (obj?.reviewToBeCompletedWithinError) {
|
|
49568
|
+
this.setFieldIssue(obj, 'reviewToBeCompletedWithin', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
|
|
49569
|
+
}
|
|
49570
|
+
if (obj?.reviewWillBeFailedAfterError) {
|
|
49571
|
+
this.setFieldIssue(obj, 'reviewWillBeFailedAfter', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
|
|
49572
|
+
}
|
|
49573
|
+
if ((this.hasValue(obj?.reviewToBeCompletedWithin) ||
|
|
49574
|
+
this.hasValue(obj?.reviewWillBeFailedAfter)) &&
|
|
49575
|
+
!this.hasValue(obj?.reviewer)) {
|
|
49576
|
+
this.setFieldIssue(obj, 'reviewToBeCompletedWithin', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.REVIEW_WINDOW_WITHOUT_REVIEWER);
|
|
49577
|
+
this.setFieldIssue(obj, 'reviewWillBeFailedAfter', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.REVIEW_WINDOW_WITHOUT_REVIEWER);
|
|
49578
|
+
}
|
|
49579
|
+
if (dropdown.overseer === false) {
|
|
49580
|
+
this.setFieldIssue(obj, 'overseer', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
|
|
49581
|
+
}
|
|
49582
|
+
else if (this.hasValue(obj?.overseer) &&
|
|
49583
|
+
obj?.userValidateWithProgram?.isValidOverseer === false) {
|
|
49584
|
+
this.setFieldIssue(obj, 'overseer', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.USER_NOT_IN_PROGRAM);
|
|
49585
|
+
}
|
|
49586
|
+
else if (this.samePerson(obj?.overseer, obj?.assignee)) {
|
|
49587
|
+
this.setFieldIssue(obj, 'overseer', VALIDATION_SEVERITY.INFO, VALIDATION_MESSAGES.OVERSIGHT_DUPLICATE_ASSIGNEE);
|
|
49588
|
+
}
|
|
49589
|
+
else if (this.samePerson(obj?.overseer, obj?.assignor)) {
|
|
49590
|
+
this.setFieldIssue(obj, 'overseer', VALIDATION_SEVERITY.INFO, VALIDATION_MESSAGES.OVERSIGHT_DUPLICATE_ASSIGNOR);
|
|
49591
|
+
}
|
|
49592
|
+
if (dropdown.notifyOnFailure === false) {
|
|
49593
|
+
this.setFieldIssue(obj, 'notifyOnFailure', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
|
|
49594
|
+
}
|
|
49595
|
+
else if (this.hasValue(obj?.notifyOnFailure) &&
|
|
49596
|
+
obj?.userValidateWithProgram?.isValidNotifyOnFailure === false) {
|
|
49597
|
+
this.setFieldIssue(obj, 'notifyOnFailure', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.USER_NOT_IN_PROGRAM);
|
|
49598
|
+
}
|
|
49599
|
+
else if (this.samePerson(obj?.notifyOnFailure, obj?.assignee)) {
|
|
49600
|
+
this.setFieldIssue(obj, 'notifyOnFailure', VALIDATION_SEVERITY.INFO, VALIDATION_MESSAGES.OVERSIGHT_DUPLICATE_ASSIGNEE);
|
|
49601
|
+
}
|
|
49602
|
+
else if (this.samePerson(obj?.notifyOnFailure, obj?.assignor)) {
|
|
49603
|
+
this.setFieldIssue(obj, 'notifyOnFailure', VALIDATION_SEVERITY.INFO, VALIDATION_MESSAGES.OVERSIGHT_DUPLICATE_ASSIGNOR);
|
|
49604
|
+
}
|
|
49605
|
+
if (dropdown.collaborator === false) {
|
|
49606
|
+
this.setFieldIssue(obj, 'collaborator', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.DROPDOWN);
|
|
49607
|
+
}
|
|
49608
|
+
else if (this.isGroupSelected(obj?.collaborator)) {
|
|
49609
|
+
this.setFieldIssue(obj, 'collaborator', VALIDATION_SEVERITY.ERROR, VALIDATION_MESSAGES.COLLABORATOR_GROUP);
|
|
49610
|
+
}
|
|
49611
|
+
}
|
|
49238
49612
|
/**
|
|
49239
49613
|
* Entrusted By in the xlsx dropdown is the people list in `Name (email)` form
|
|
49240
49614
|
* (same source as Entrusted To / Reviewer), not the assignor name-only column.
|
|
@@ -49340,6 +49714,40 @@ class AddMultipleResponsibilityWithTabComponent {
|
|
|
49340
49714
|
}
|
|
49341
49715
|
return REGEX.DUE_TIME.test(value);
|
|
49342
49716
|
}
|
|
49717
|
+
/**
|
|
49718
|
+
* Optional field. When filled, the value must be a non-negative whole number.
|
|
49719
|
+
* Rejects negatives, decimals, and non-numeric text. Blank is valid. 0 is allowed
|
|
49720
|
+
* (Fail / Review Fail use 0 to mean complete/review on the due date).
|
|
49721
|
+
*/
|
|
49722
|
+
getWholeNumberDaysError(value) {
|
|
49723
|
+
if (!this.hasValue(value)) {
|
|
49724
|
+
return '';
|
|
49725
|
+
}
|
|
49726
|
+
const normalized = String(value).trim();
|
|
49727
|
+
if (/^-/.test(normalized) || Number(normalized) < 0) {
|
|
49728
|
+
return VALIDATION_MESSAGES.POSITIVE_NUMBER;
|
|
49729
|
+
}
|
|
49730
|
+
if (!/^\d+$/.test(normalized)) {
|
|
49731
|
+
return VALIDATION_MESSAGES.WHOLE_NUMBER_NON_NEGATIVE;
|
|
49732
|
+
}
|
|
49733
|
+
return '';
|
|
49734
|
+
}
|
|
49735
|
+
applyDaysCountValidation(obj, tabType) {
|
|
49736
|
+
const startError = tabType === 'frequency'
|
|
49737
|
+
? this.getWholeNumberDaysError(obj?.responsibilityWindow)
|
|
49738
|
+
: '';
|
|
49739
|
+
const failError = tabType === 'frequency'
|
|
49740
|
+
? this.getWholeNumberDaysError(obj?.failedAfter)
|
|
49741
|
+
: '';
|
|
49742
|
+
const reviewStartError = this.getWholeNumberDaysError(obj?.reviewToBeCompletedWithin);
|
|
49743
|
+
const reviewFailError = this.getWholeNumberDaysError(obj?.reviewWillBeFailedAfter);
|
|
49744
|
+
obj['responsibilityWindowError'] = startError;
|
|
49745
|
+
obj['failedAfterError'] = failError;
|
|
49746
|
+
obj['reviewToBeCompletedWithinError'] = reviewStartError;
|
|
49747
|
+
obj['reviewWillBeFailedAfterError'] = reviewFailError;
|
|
49748
|
+
obj['isValidDaysCount'] =
|
|
49749
|
+
!startError && !failError && !reviewStartError && !reviewFailError;
|
|
49750
|
+
}
|
|
49343
49751
|
/**
|
|
49344
49752
|
* Optional field. When filled, the value must be numeric and greater than 0.
|
|
49345
49753
|
*/
|
|
@@ -49667,7 +50075,7 @@ class AddMultipleResponsibilityWithTabComponent {
|
|
|
49667
50075
|
*/
|
|
49668
50076
|
isGroupSelected(item) {
|
|
49669
50077
|
let isGroup = false;
|
|
49670
|
-
this.templateInfo
|
|
50078
|
+
(this.templateInfo?.assigneesList || []).forEach((enElement) => {
|
|
49671
50079
|
if (enElement.nameAndEmail == item &&
|
|
49672
50080
|
(item?.includes('Users)') || item?.includes('User)')) &&
|
|
49673
50081
|
typeof enElement?.my_member_id == 'object') {
|