@@ -64,49 +64,49 @@ export class ViewRoleComponent implements OnInit {
|
||||
/** Mapping of category groupings to role groups */
|
||||
private categoryToGroupMap: { [key: string]: string } = {
|
||||
// Special & Authorisation
|
||||
'special': 'Special & Authorisation',
|
||||
'authorisation': 'Special & Authorisation',
|
||||
special: 'Special & Authorisation',
|
||||
authorisation: 'Special & Authorisation',
|
||||
|
||||
// Configuration & Admin
|
||||
'configuration': 'Configuration & Admin',
|
||||
'organisation': 'Configuration & Admin',
|
||||
'datatable': 'Configuration & Admin',
|
||||
'jobs': 'Configuration & Admin',
|
||||
configuration: 'Configuration & Admin',
|
||||
organisation: 'Configuration & Admin',
|
||||
datatable: 'Configuration & Admin',
|
||||
jobs: 'Configuration & Admin',
|
||||
|
||||
// Portfolio — Client, Loan, Savings, FD, RD, Guarantor etc.
|
||||
'portfolio': 'Portfolio',
|
||||
'portfolio_group': 'Portfolio — Groups & Centers',
|
||||
'portfolio_center': 'Portfolio — Groups & Centers',
|
||||
portfolio: 'Portfolio',
|
||||
portfolio_group: 'Portfolio — Groups & Centers',
|
||||
portfolio_center: 'Portfolio — Groups & Centers',
|
||||
|
||||
// Transactions
|
||||
'transaction_loan': 'Transactions — Loan',
|
||||
'transaction_savings': 'Transactions — Savings',
|
||||
'transaction_shareaccount': 'Transactions — Share Account',
|
||||
transaction_loan: 'Transactions — Loan',
|
||||
transaction_savings: 'Transactions — Savings',
|
||||
transaction_shareaccount: 'Transactions — Share Account',
|
||||
|
||||
// Accounting & Finance
|
||||
'accounting': 'Accounting & Finance',
|
||||
'loan_provisioning': 'Accounting & Finance',
|
||||
'loan_reschedule': 'Accounting & Finance',
|
||||
accounting: 'Accounting & Finance',
|
||||
loan_provisioning: 'Accounting & Finance',
|
||||
loan_reschedule: 'Accounting & Finance',
|
||||
|
||||
// Cash Management
|
||||
'cash_mgmt': 'Cash Management',
|
||||
cash_mgmt: 'Cash Management',
|
||||
|
||||
// Reporting
|
||||
'report': 'Reporting & Analytics',
|
||||
report: 'Reporting & Analytics',
|
||||
|
||||
// Share Account
|
||||
'shareaccount': 'Share Account',
|
||||
shareaccount: 'Share Account',
|
||||
|
||||
// Heading Menu (Top Navigation Bar)
|
||||
'heading_menu': 'Heading Menu',
|
||||
heading_menu: 'Heading Menu',
|
||||
|
||||
// Left Panel Menu (Sidebar)
|
||||
'sidebar_menu': 'Left Panel Menu',
|
||||
sidebar_menu: 'Left Panel Menu'
|
||||
};
|
||||
private groupIcons: { [key: string]: string } = {
|
||||
'Special & Authorisation': 'fa-star',
|
||||
'Configuration & Admin': 'fa-cog',
|
||||
'Portfolio': 'fa-briefcase',
|
||||
Portfolio: 'fa-briefcase',
|
||||
'Portfolio — Groups & Centers': 'fa-users',
|
||||
'Transactions — Loan': 'fa-exchange-alt',
|
||||
'Transactions — Savings': 'fa-piggy-bank',
|
||||
@@ -116,7 +116,7 @@ export class ViewRoleComponent implements OnInit {
|
||||
'Reporting & Analytics': 'fa-chart-bar',
|
||||
'Share Account': 'fa-chart-pie',
|
||||
'Heading Menu': 'fa-th-list',
|
||||
'Left Panel Menu': 'fa-bars',
|
||||
'Left Panel Menu': 'fa-bars'
|
||||
};
|
||||
/** Checks if its disabled */
|
||||
isDisabled: Boolean = true;
|
||||
@@ -264,8 +264,8 @@ export class ViewRoleComponent implements OnInit {
|
||||
'Other'
|
||||
];
|
||||
this.roleGroups = order
|
||||
.filter(name => groupMap[name])
|
||||
.map(name => ({
|
||||
.filter((name) => groupMap[name])
|
||||
.map((name) => ({
|
||||
name,
|
||||
icon: this.groupIcons[name] || 'fa-folder',
|
||||
categories: groupMap[name],
|
||||
@@ -327,45 +327,79 @@ export class ViewRoleComponent implements OnInit {
|
||||
|
||||
/** Entity display names */
|
||||
private entityNames: { [key: string]: string } = {
|
||||
'CLIENT': 'Client', 'CLIENTIMAGE': 'Client Image', 'CLIENTIDENTIFIER': 'Client Identifier',
|
||||
'CLIENTNOTE': 'Client Note', 'CLIENTCHARGE': 'Client Charge',
|
||||
'LOAN': 'Loan', 'LOANNOTE': 'Loan Note', 'LOANCHARGE': 'Loan Charge',
|
||||
'LOANTRANSACTIONNOTE': 'Loan Transaction Note',
|
||||
'SAVINGSACCOUNT': 'Savings Account', 'SAVINGSACCOUNTCHARGE': 'Savings Account Charge',
|
||||
'SAVINGNOTE': 'Savings Note',
|
||||
'FIXEDDEPOSITACCOUNT': 'Fixed Deposit Account',
|
||||
'RECURRINGDEPOSITACCOUNT': 'Recurring Deposit Account',
|
||||
'SHAREACCOUNT': 'Share Account',
|
||||
'GROUP': 'Group', 'GROUPNOTE': 'Group Note',
|
||||
'CENTER': 'Center',
|
||||
'GUARANTOR': 'Guarantor', 'COLLATERAL': 'Collateral', 'DOCUMENT': 'Document',
|
||||
'ACCOUNTTRANSFER': 'Account Transfer', 'STANDINGINSTRUCTION': 'Standing Instruction',
|
||||
'RESCHEDULELOAN': 'Reschedule Loan',
|
||||
'JOURNALENTRY': 'Journal Entry',
|
||||
'TELLER': 'Teller', 'CASHIER': 'Cashier',
|
||||
'ROLE': 'Role', 'USER': 'User', 'PERMISSION': 'Permission',
|
||||
'CODE': 'Code', 'CODEVALUE': 'Code Value',
|
||||
'OFFICE': 'Office', 'OFFICETRANSACTION': 'Office Transaction',
|
||||
'STAFF': 'Staff', 'STAFFIMAGE': 'Staff Image',
|
||||
'CHARGE': 'Charge', 'FUND': 'Fund',
|
||||
'LOANPRODUCT': 'Loan Product', 'SAVINGSPRODUCT': 'Savings Product',
|
||||
'FIXEDDEPOSITPRODUCT': 'Fixed Deposit Product', 'RECURRINGDEPOSITPRODUCT': 'Recurring Deposit Product',
|
||||
'SHAREPRODUCT': 'Share Product',
|
||||
'CURRENCY': 'Currency', 'DATATABLE': 'Data Table', 'CALENDAR': 'Calendar',
|
||||
'CONFIGURATION': 'Configuration', 'AUDIT': 'Audit',
|
||||
'REPORT': 'Report', 'HOOK': 'Hook', 'TEMPLATE': 'Template',
|
||||
'PAYMENTTYPE': 'Payment Type', 'HOLIDAY': 'Holiday', 'WORKINGDAYS': 'Working Days',
|
||||
'GLACCOUNT': 'GL Account', 'GLCLOSURE': 'GL Closure',
|
||||
'FINANCIALACTIVITYACCOUNT': 'Financial Activity Account',
|
||||
'TAXCOMPONENT': 'Tax Component', 'TAXGROUP': 'Tax Group',
|
||||
'PRODUCTMIX': 'Product Mix', 'EXTERNALSERVICES': 'External Services',
|
||||
'SCHEDULER': 'Scheduler', 'MEETING': 'Meeting',
|
||||
'INTERESTRATECHART': 'Interest Rate Chart', 'FLOATINGRATE': 'Floating Rate',
|
||||
'ACCOUNTNUMBERFORMAT': 'Account Number Format', 'ACCOUNTINGRULE': 'Accounting Rule',
|
||||
'ENTITYMAPPING': 'Entity Mapping', 'PROVISION': 'Provisioning',
|
||||
'REPORTMAILINGJOB': 'Report Mailing Job',
|
||||
'PASSWORD_PREFERENCES': 'Password Preferences', 'ADDRESS': 'Address',
|
||||
'CACHE': 'Cache',
|
||||
CLIENT: 'Client',
|
||||
CLIENTIMAGE: 'Client Image',
|
||||
CLIENTIDENTIFIER: 'Client Identifier',
|
||||
CLIENTNOTE: 'Client Note',
|
||||
CLIENTCHARGE: 'Client Charge',
|
||||
LOAN: 'Loan',
|
||||
LOANNOTE: 'Loan Note',
|
||||
LOANCHARGE: 'Loan Charge',
|
||||
LOANTRANSACTIONNOTE: 'Loan Transaction Note',
|
||||
SAVINGSACCOUNT: 'Savings Account',
|
||||
SAVINGSACCOUNTCHARGE: 'Savings Account Charge',
|
||||
SAVINGNOTE: 'Savings Note',
|
||||
FIXEDDEPOSITACCOUNT: 'Fixed Deposit Account',
|
||||
RECURRINGDEPOSITACCOUNT: 'Recurring Deposit Account',
|
||||
SHAREACCOUNT: 'Share Account',
|
||||
GROUP: 'Group',
|
||||
GROUPNOTE: 'Group Note',
|
||||
CENTER: 'Center',
|
||||
GUARANTOR: 'Guarantor',
|
||||
COLLATERAL: 'Collateral',
|
||||
DOCUMENT: 'Document',
|
||||
ACCOUNTTRANSFER: 'Account Transfer',
|
||||
STANDINGINSTRUCTION: 'Standing Instruction',
|
||||
RESCHEDULELOAN: 'Reschedule Loan',
|
||||
JOURNALENTRY: 'Journal Entry',
|
||||
TELLER: 'Teller',
|
||||
CASHIER: 'Cashier',
|
||||
ROLE: 'Role',
|
||||
USER: 'User',
|
||||
PERMISSION: 'Permission',
|
||||
CODE: 'Code',
|
||||
CODEVALUE: 'Code Value',
|
||||
OFFICE: 'Office',
|
||||
OFFICETRANSACTION: 'Office Transaction',
|
||||
STAFF: 'Staff',
|
||||
STAFFIMAGE: 'Staff Image',
|
||||
CHARGE: 'Charge',
|
||||
FUND: 'Fund',
|
||||
LOANPRODUCT: 'Loan Product',
|
||||
SAVINGSPRODUCT: 'Savings Product',
|
||||
FIXEDDEPOSITPRODUCT: 'Fixed Deposit Product',
|
||||
RECURRINGDEPOSITPRODUCT: 'Recurring Deposit Product',
|
||||
SHAREPRODUCT: 'Share Product',
|
||||
CURRENCY: 'Currency',
|
||||
DATATABLE: 'Data Table',
|
||||
CALENDAR: 'Calendar',
|
||||
CONFIGURATION: 'Configuration',
|
||||
AUDIT: 'Audit',
|
||||
REPORT: 'Report',
|
||||
HOOK: 'Hook',
|
||||
TEMPLATE: 'Template',
|
||||
PAYMENTTYPE: 'Payment Type',
|
||||
HOLIDAY: 'Holiday',
|
||||
WORKINGDAYS: 'Working Days',
|
||||
GLACCOUNT: 'GL Account',
|
||||
GLCLOSURE: 'GL Closure',
|
||||
FINANCIALACTIVITYACCOUNT: 'Financial Activity Account',
|
||||
TAXCOMPONENT: 'Tax Component',
|
||||
TAXGROUP: 'Tax Group',
|
||||
PRODUCTMIX: 'Product Mix',
|
||||
EXTERNALSERVICES: 'External Services',
|
||||
SCHEDULER: 'Scheduler',
|
||||
MEETING: 'Meeting',
|
||||
INTERESTRATECHART: 'Interest Rate Chart',
|
||||
FLOATINGRATE: 'Floating Rate',
|
||||
ACCOUNTNUMBERFORMAT: 'Account Number Format',
|
||||
ACCOUNTINGRULE: 'Accounting Rule',
|
||||
ENTITYMAPPING: 'Entity Mapping',
|
||||
PROVISION: 'Provisioning',
|
||||
REPORTMAILINGJOB: 'Report Mailing Job',
|
||||
PASSWORD_PREFERENCES: 'Password Preferences',
|
||||
ADDRESS: 'Address',
|
||||
CACHE: 'Cache'
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -374,25 +408,83 @@ export class ViewRoleComponent implements OnInit {
|
||||
private extractEntity(code: string): string {
|
||||
// Common action prefixes to strip
|
||||
const actions = [
|
||||
'CREATE', 'READ', 'UPDATE', 'DELETE', 'APPROVE', 'REJECT', 'ACTIVATE', 'DEACTIVATE',
|
||||
'CLOSE', 'DEPOSIT', 'WITHDRAWAL', 'WITHDRAW', 'DISBURSE', 'DISBURSETOSAVINGS',
|
||||
'DISBURSALUNDO', 'DISBURSALLASTUNDO', 'REPAYMENT', 'ADJUST', 'WAIVE', 'WAIVEINTERESTPORTION',
|
||||
'WRITEOFF', 'UNDOWRITEOFF', 'UNDOAPPROVAL', 'UNDOTRANSACTION', 'UNDO',
|
||||
'CLOSEASRESCHEDULED', 'FORECLOSURE', 'REOPEN', 'REACTIVATE',
|
||||
'POSTINTEREST', 'CALCULATEINTEREST', 'APPLYANNUALFEE', 'PREMATURECLOSE',
|
||||
'UPDATEDEPOSITAMOUNT', 'WITHDRAWWITHHELD', 'UPDATELOANOFFICER', 'REMOVELOANOFFICER',
|
||||
'BULKREASSIGN', 'REFUNDBYCASH', 'REFUNDBYTRANSFER',
|
||||
'RECOVERGUARANTEES', 'RECOVERYPAYMENT',
|
||||
'CREATESCHEDULEEXCEPTIONS', 'DELETESCHEDULEEXCEPTIONS',
|
||||
'UPDATERUNNINGBALANCE', 'DEFINEOPENINGBALANCE', 'REVERSE',
|
||||
'REGISTER', 'DEREGISTER', 'ENABLE', 'DISABLE', 'PERMISSIONS',
|
||||
'INACTIVATE', 'PAY', 'PROPOSETRANSFER', 'ACCEPTTRANSFER', 'REJECTTRANSFER',
|
||||
'WITHDRAWTRANSFER', 'ASSIGNSTAFF', 'UNASSIGNSTAFF', 'ASSIGNROLE', 'UPDATEROLE',
|
||||
'DISASSOCIATECLIENTS', 'ASSOCIATECLIENTS', 'TRANSFERCLIENTS',
|
||||
'ASSOCIATEGROUPS', 'DISASSOCIATEGROUPS',
|
||||
'ALLOCATECASHIER', 'ALLOCATECASHTOCASHIER', 'SETTLECASHFROMCASHIER',
|
||||
'EXECUTEJOB', 'EXECUTE', 'DIVIDEND',
|
||||
'APPLYADDITIONALSHARES', 'APPROVEADDITIONALSHARES', 'REJECTADDITIONALSHARES', 'REDEEMSHARES',
|
||||
'CREATE',
|
||||
'READ',
|
||||
'UPDATE',
|
||||
'DELETE',
|
||||
'APPROVE',
|
||||
'REJECT',
|
||||
'ACTIVATE',
|
||||
'DEACTIVATE',
|
||||
'CLOSE',
|
||||
'DEPOSIT',
|
||||
'WITHDRAWAL',
|
||||
'WITHDRAW',
|
||||
'DISBURSE',
|
||||
'DISBURSETOSAVINGS',
|
||||
'DISBURSALUNDO',
|
||||
'DISBURSALLASTUNDO',
|
||||
'REPAYMENT',
|
||||
'ADJUST',
|
||||
'WAIVE',
|
||||
'WAIVEINTERESTPORTION',
|
||||
'WRITEOFF',
|
||||
'UNDOWRITEOFF',
|
||||
'UNDOAPPROVAL',
|
||||
'UNDOTRANSACTION',
|
||||
'UNDO',
|
||||
'CLOSEASRESCHEDULED',
|
||||
'FORECLOSURE',
|
||||
'REOPEN',
|
||||
'REACTIVATE',
|
||||
'POSTINTEREST',
|
||||
'CALCULATEINTEREST',
|
||||
'APPLYANNUALFEE',
|
||||
'PREMATURECLOSE',
|
||||
'UPDATEDEPOSITAMOUNT',
|
||||
'WITHDRAWWITHHELD',
|
||||
'UPDATELOANOFFICER',
|
||||
'REMOVELOANOFFICER',
|
||||
'BULKREASSIGN',
|
||||
'REFUNDBYCASH',
|
||||
'REFUNDBYTRANSFER',
|
||||
'RECOVERGUARANTEES',
|
||||
'RECOVERYPAYMENT',
|
||||
'CREATESCHEDULEEXCEPTIONS',
|
||||
'DELETESCHEDULEEXCEPTIONS',
|
||||
'UPDATERUNNINGBALANCE',
|
||||
'DEFINEOPENINGBALANCE',
|
||||
'REVERSE',
|
||||
'REGISTER',
|
||||
'DEREGISTER',
|
||||
'ENABLE',
|
||||
'DISABLE',
|
||||
'PERMISSIONS',
|
||||
'INACTIVATE',
|
||||
'PAY',
|
||||
'PROPOSETRANSFER',
|
||||
'ACCEPTTRANSFER',
|
||||
'REJECTTRANSFER',
|
||||
'WITHDRAWTRANSFER',
|
||||
'ASSIGNSTAFF',
|
||||
'UNASSIGNSTAFF',
|
||||
'ASSIGNROLE',
|
||||
'UPDATEROLE',
|
||||
'DISASSOCIATECLIENTS',
|
||||
'ASSOCIATECLIENTS',
|
||||
'TRANSFERCLIENTS',
|
||||
'ASSOCIATEGROUPS',
|
||||
'DISASSOCIATEGROUPS',
|
||||
'ALLOCATECASHIER',
|
||||
'ALLOCATECASHTOCASHIER',
|
||||
'SETTLECASHFROMCASHIER',
|
||||
'EXECUTEJOB',
|
||||
'EXECUTE',
|
||||
'DIVIDEND',
|
||||
'APPLYADDITIONALSHARES',
|
||||
'APPROVEADDITIONALSHARES',
|
||||
'REJECTADDITIONALSHARES',
|
||||
'REDEEMSHARES'
|
||||
];
|
||||
|
||||
// Try to match action_entity pattern
|
||||
@@ -416,8 +508,8 @@ export class ViewRoleComponent implements OnInit {
|
||||
*/
|
||||
buildFlatMakerChecker() {
|
||||
const perms = this.permissions.permissions;
|
||||
this.flatMakerPerms = perms.filter(p => !this.isChecker(p.code));
|
||||
this.flatCheckerPerms = perms.filter(p => this.isChecker(p.code));
|
||||
this.flatMakerPerms = perms.filter((p) => !this.isChecker(p.code));
|
||||
this.flatCheckerPerms = perms.filter((p) => this.isChecker(p.code));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -432,7 +524,9 @@ export class ViewRoleComponent implements OnInit {
|
||||
return;
|
||||
}
|
||||
|
||||
const groups: { [entity: string]: { maker: { code: string; id: number }[]; checker: { code: string; id: number }[] } } = {};
|
||||
const groups: {
|
||||
[entity: string]: { maker: { code: string; id: number }[]; checker: { code: string; id: number }[] };
|
||||
} = {};
|
||||
for (const p of perms) {
|
||||
const entity = this.extractEntity(p.code);
|
||||
if (!groups[entity]) {
|
||||
@@ -445,7 +539,7 @@ export class ViewRoleComponent implements OnInit {
|
||||
}
|
||||
}
|
||||
|
||||
this.permissionSubGroups = Object.keys(groups).map(entity => ({
|
||||
this.permissionSubGroups = Object.keys(groups).map((entity) => ({
|
||||
entity,
|
||||
makerPerms: groups[entity].maker,
|
||||
checkerPerms: groups[entity].checker,
|
||||
@@ -463,14 +557,20 @@ export class ViewRoleComponent implements OnInit {
|
||||
|
||||
selectAllSubGroup(subGroup: any) {
|
||||
const roster = this.formGroup.get('roster') as FormArray;
|
||||
for (const p of [...subGroup.makerPerms, ...subGroup.checkerPerms]) {
|
||||
for (const p of [
|
||||
...subGroup.makerPerms,
|
||||
...subGroup.checkerPerms
|
||||
]) {
|
||||
roster.at(p.id).patchValue({ selected: true });
|
||||
}
|
||||
}
|
||||
|
||||
deselectAllSubGroup(subGroup: any) {
|
||||
const roster = this.formGroup.get('roster') as FormArray;
|
||||
for (const p of [...subGroup.makerPerms, ...subGroup.checkerPerms]) {
|
||||
for (const p of [
|
||||
...subGroup.makerPerms,
|
||||
...subGroup.checkerPerms
|
||||
]) {
|
||||
roster.at(p.id).patchValue({ selected: false });
|
||||
}
|
||||
}
|
||||
@@ -495,7 +595,11 @@ export class ViewRoleComponent implements OnInit {
|
||||
|
||||
selectAllChecker(perms: { code: string; id: number }[]) {
|
||||
const dialogRef = this.dialog.open(EnableDialogComponent, {
|
||||
data: { enableContext: this.translateService.instant('labels.text.all Checker permissions for this section. This grants approval authority') }
|
||||
data: {
|
||||
enableContext: this.translateService.instant(
|
||||
'labels.text.all Checker permissions for this section. This grants approval authority'
|
||||
)
|
||||
}
|
||||
});
|
||||
dialogRef.afterClosed().subscribe((response: any) => {
|
||||
if (response?.enable) {
|
||||
|
||||
Reference in New Issue
Block a user