@@ -45,7 +45,10 @@
|
||||
|
||||
<mat-form-field appearance="outline" class="at-ff">
|
||||
<mat-label>Status</mat-label>
|
||||
<mat-select [formControl]="processingResult" (selectionChange)="applyFilter($event.value, 'processingResult')">
|
||||
<mat-select
|
||||
[formControl]="processingResult"
|
||||
(selectionChange)="applyFilter($event.value, 'processingResult')"
|
||||
>
|
||||
@for (processingResult of auditTrailSearchTemplateData.processingResults; track processingResult) {
|
||||
<mat-option [value]="processingResult.id">{{ processingResult.processingResult }}</mat-option>
|
||||
}
|
||||
@@ -54,7 +57,12 @@
|
||||
|
||||
<mat-form-field appearance="outline" class="at-ff">
|
||||
<mat-label>User</mat-label>
|
||||
<input matInput [formControl]="user" [matAutocomplete]="userNameAutocomplete" placeholder="Search user..." />
|
||||
<input
|
||||
matInput
|
||||
[formControl]="user"
|
||||
[matAutocomplete]="userNameAutocomplete"
|
||||
placeholder="Search user..."
|
||||
/>
|
||||
<fa-icon icon="user" matPrefix class="at-ff__prefix"></fa-icon>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
@@ -63,17 +71,32 @@
|
||||
<div class="at-filters__row at-filters__row--3">
|
||||
<mat-form-field appearance="outline" class="at-ff">
|
||||
<mat-label>Action</mat-label>
|
||||
<input matInput [formControl]="actionName" [matAutocomplete]="actionNameAutocomplete" placeholder="e.g. CREATE, UPDATE" />
|
||||
<input
|
||||
matInput
|
||||
[formControl]="actionName"
|
||||
[matAutocomplete]="actionNameAutocomplete"
|
||||
placeholder="e.g. CREATE, UPDATE"
|
||||
/>
|
||||
</mat-form-field>
|
||||
|
||||
<mat-form-field appearance="outline" class="at-ff">
|
||||
<mat-label>Entity</mat-label>
|
||||
<input matInput [formControl]="entityName" [matAutocomplete]="entityNameAutocomplete" placeholder="e.g. CLIENT, LOAN" />
|
||||
<input
|
||||
matInput
|
||||
[formControl]="entityName"
|
||||
[matAutocomplete]="entityNameAutocomplete"
|
||||
placeholder="e.g. CLIENT, LOAN"
|
||||
/>
|
||||
</mat-form-field>
|
||||
|
||||
<mat-form-field appearance="outline" class="at-ff">
|
||||
<mat-label>Checker</mat-label>
|
||||
<input matInput [formControl]="checker" [matAutocomplete]="checkerAutocomplete" placeholder="Search checker..." />
|
||||
<input
|
||||
matInput
|
||||
[formControl]="checker"
|
||||
[matAutocomplete]="checkerAutocomplete"
|
||||
placeholder="Search checker..."
|
||||
/>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
|
||||
@@ -84,7 +107,13 @@
|
||||
<div class="at-date-group">
|
||||
<mat-form-field appearance="outline" class="at-ff at-ff--date" (click)="fromDatePicker.open()">
|
||||
<mat-label>From Date</mat-label>
|
||||
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="fromDatePicker" [formControl]="fromDate" />
|
||||
<input
|
||||
matInput
|
||||
[min]="minDate"
|
||||
[max]="maxDate"
|
||||
[matDatepicker]="fromDatePicker"
|
||||
[formControl]="fromDate"
|
||||
/>
|
||||
<mat-datepicker-toggle matSuffix [for]="fromDatePicker"></mat-datepicker-toggle>
|
||||
<mat-datepicker #fromDatePicker></mat-datepicker>
|
||||
</mat-form-field>
|
||||
@@ -115,7 +144,13 @@
|
||||
<div class="at-date-group">
|
||||
<mat-form-field appearance="outline" class="at-ff at-ff--date" (click)="checkedFromDatePicker.open()">
|
||||
<mat-label>From Date</mat-label>
|
||||
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="checkedFromDatePicker" [formControl]="checkedFromDate" />
|
||||
<input
|
||||
matInput
|
||||
[min]="minDate"
|
||||
[max]="maxDate"
|
||||
[matDatepicker]="checkedFromDatePicker"
|
||||
[formControl]="checkedFromDate"
|
||||
/>
|
||||
<mat-datepicker-toggle matSuffix [for]="checkedFromDatePicker"></mat-datepicker-toggle>
|
||||
<mat-datepicker #checkedFromDatePicker></mat-datepicker>
|
||||
</mat-form-field>
|
||||
@@ -128,7 +163,13 @@
|
||||
<div class="at-date-group">
|
||||
<mat-form-field appearance="outline" class="at-ff at-ff--date" (click)="checkedToDatePicker.open()">
|
||||
<mat-label>To Date</mat-label>
|
||||
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="checkedToDatePicker" [formControl]="checkedToDate" />
|
||||
<input
|
||||
matInput
|
||||
[min]="minDate"
|
||||
[max]="maxDate"
|
||||
[matDatepicker]="checkedToDatePicker"
|
||||
[formControl]="checkedToDate"
|
||||
/>
|
||||
<mat-datepicker-toggle matSuffix [for]="checkedToDatePicker"></mat-datepicker-toggle>
|
||||
<mat-datepicker #checkedToDatePicker></mat-datepicker>
|
||||
</mat-form-field>
|
||||
@@ -186,7 +227,12 @@
|
||||
<ng-container matColumnDef="processingResult">
|
||||
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Status' | translate }}</th>
|
||||
<td mat-cell *matCellDef="let auditTrail">
|
||||
<span class="at-status" [class.at-status--success]="auditTrail.processingResult === 'SUCCESS'" [class.at-status--failure]="auditTrail.processingResult === 'FAILURE'" [class.at-status--awaiting]="auditTrail.processingResult === 'AWAITING_APPROVAL'">
|
||||
<span
|
||||
class="at-status"
|
||||
[class.at-status--success]="auditTrail.processingResult === 'SUCCESS'"
|
||||
[class.at-status--failure]="auditTrail.processingResult === 'FAILURE'"
|
||||
[class.at-status--awaiting]="auditTrail.processingResult === 'AWAITING_APPROVAL'"
|
||||
>
|
||||
{{ auditTrail.processingResult }}
|
||||
</span>
|
||||
</td>
|
||||
@@ -203,7 +249,9 @@
|
||||
</ng-container>
|
||||
<ng-container matColumnDef="entityName">
|
||||
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Entity' | translate }}</th>
|
||||
<td mat-cell *matCellDef="let auditTrail">{{ auditTrail.entityName | translateKey: 'auditTrail.entities' }}</td>
|
||||
<td mat-cell *matCellDef="let auditTrail">
|
||||
{{ auditTrail.entityName | translateKey: 'auditTrail.entities' }}
|
||||
</td>
|
||||
</ng-container>
|
||||
<ng-container matColumnDef="officeName">
|
||||
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Office' | translate }}</th>
|
||||
@@ -219,7 +267,9 @@
|
||||
</ng-container>
|
||||
<ng-container matColumnDef="checkedOnDate">
|
||||
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Checked Date' | translate }}</th>
|
||||
<td mat-cell *matCellDef="let auditTrail" class="cell-mono">{{ auditTrail.checkedOnDate | datetimeFormat }}</td>
|
||||
<td mat-cell *matCellDef="let auditTrail" class="cell-mono">
|
||||
{{ auditTrail.checkedOnDate | datetimeFormat }}
|
||||
</td>
|
||||
</ng-container>
|
||||
<ng-container matColumnDef="clientIp">
|
||||
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ 'labels.inputs.Client Ip' | translate }}</th>
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
@use 'sass:color';
|
||||
@use '../../shared/styles/list-layout' as *;
|
||||
|
||||
$blue: #1353a0;
|
||||
@@ -90,7 +91,7 @@ $muted: #64748b;
|
||||
box-shadow: 0 1px 4px rgb(19 83 160 / 25%);
|
||||
|
||||
&:hover {
|
||||
background: darken($blue, 6%);
|
||||
background: color.adjust($blue, $lightness: -6%);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -263,7 +264,7 @@ $muted: #64748b;
|
||||
}
|
||||
|
||||
// ===== Responsive =====
|
||||
@media (max-width: 960px) {
|
||||
@media (width <= 960px) {
|
||||
.at-filters__row--3 {
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
}
|
||||
@@ -278,7 +279,7 @@ $muted: #64748b;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 600px) {
|
||||
@media (width <= 600px) {
|
||||
.at-filters__row--3 {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
@@ -24,7 +24,13 @@
|
||||
</div>
|
||||
<div class="table-buttons">
|
||||
<div #buttonCreateCode>
|
||||
<button mat-flat-button color="primary" class="btn-create" [routerLink]="['create']" *mifosxHasPermission="'CREATE_CODE'">
|
||||
<button
|
||||
mat-flat-button
|
||||
color="primary"
|
||||
class="btn-create"
|
||||
[routerLink]="['create']"
|
||||
*mifosxHasPermission="'CREATE_CODE'"
|
||||
>
|
||||
<fa-icon icon="plus" class="m-r-10"></fa-icon>
|
||||
{{ 'labels.buttons.Create Code' | translate }}
|
||||
</button>
|
||||
|
||||
@@ -44,9 +44,14 @@ $gray-900: #202124;
|
||||
border-color: $border !important;
|
||||
color: $gray-500 !important;
|
||||
|
||||
i { margin-right: 6px; }
|
||||
i {
|
||||
margin-right: 6px;
|
||||
}
|
||||
|
||||
&:hover { color: $primary !important; border-color: $primary !important; }
|
||||
&:hover {
|
||||
color: $primary !important;
|
||||
border-color: $primary !important;
|
||||
}
|
||||
}
|
||||
|
||||
// Card
|
||||
@@ -92,7 +97,9 @@ $gray-900: #202124;
|
||||
gap: 4px 16px;
|
||||
padding: 16px 24px;
|
||||
|
||||
@media (max-width: 600px) { grid-template-columns: 1fr; }
|
||||
@media (width <= 600px) {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
.cc-field {
|
||||
@@ -128,6 +135,9 @@ $gray-900: #202124;
|
||||
height: 36px !important;
|
||||
box-shadow: 0 1px 3px rgba($primary, 0.3) !important;
|
||||
|
||||
i { margin-right: 6px; font-size: 12px; }
|
||||
i {
|
||||
margin-right: 6px;
|
||||
font-size: 12px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,9 +44,14 @@ $gray-900: #202124;
|
||||
border-color: $border !important;
|
||||
color: $gray-500 !important;
|
||||
|
||||
i { margin-right: 6px; }
|
||||
i {
|
||||
margin-right: 6px;
|
||||
}
|
||||
|
||||
&:hover { color: $primary !important; border-color: $primary !important; }
|
||||
&:hover {
|
||||
color: $primary !important;
|
||||
border-color: $primary !important;
|
||||
}
|
||||
}
|
||||
|
||||
// Card
|
||||
@@ -92,7 +97,9 @@ $gray-900: #202124;
|
||||
gap: 4px 16px;
|
||||
padding: 16px 24px;
|
||||
|
||||
@media (max-width: 600px) { grid-template-columns: 1fr; }
|
||||
@media (width <= 600px) {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
.ec-field {
|
||||
@@ -128,6 +135,9 @@ $gray-900: #202124;
|
||||
height: 36px !important;
|
||||
box-shadow: 0 1px 3px rgba($primary, 0.3) !important;
|
||||
|
||||
i { margin-right: 6px; font-size: 12px; }
|
||||
i {
|
||||
margin-right: 6px;
|
||||
font-size: 12px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,13 +17,25 @@
|
||||
</div>
|
||||
<div class="vc-header__actions">
|
||||
@if (!codeData.systemDefined) {
|
||||
<button mat-flat-button color="primary" [routerLink]="['edit']" *mifosxHasPermission="'UPDATE_CODE'" class="vc-header__btn">
|
||||
<button
|
||||
mat-flat-button
|
||||
color="primary"
|
||||
[routerLink]="['edit']"
|
||||
*mifosxHasPermission="'UPDATE_CODE'"
|
||||
class="vc-header__btn"
|
||||
>
|
||||
<fa-icon icon="edit" class="m-r-10"></fa-icon>
|
||||
{{ 'labels.buttons.Edit Code' | translate }}
|
||||
</button>
|
||||
}
|
||||
@if (!codeData.systemDefined) {
|
||||
<button mat-stroked-button color="warn" (click)="delete()" *mifosxHasPermission="'DELETE_CODEVALUE'" class="vc-header__btn-delete">
|
||||
<button
|
||||
mat-stroked-button
|
||||
color="warn"
|
||||
(click)="delete()"
|
||||
*mifosxHasPermission="'DELETE_CODEVALUE'"
|
||||
class="vc-header__btn-delete"
|
||||
>
|
||||
<fa-icon icon="trash" class="m-r-10"></fa-icon>
|
||||
{{ 'labels.buttons.Delete Code' | translate }}
|
||||
</button>
|
||||
@@ -88,11 +100,20 @@
|
||||
|
||||
<!-- Table Rows -->
|
||||
@for (codeValue of codeValues.controls; track codeValue; let i = $index) {
|
||||
<div formArrayName="codeValues" class="vc-values-row" [class.vc-values-row--editing]="codeValueRowStatus[i] !== 'disabled'">
|
||||
<div
|
||||
formArrayName="codeValues"
|
||||
class="vc-values-row"
|
||||
[class.vc-values-row--editing]="codeValueRowStatus[i] !== 'disabled'"
|
||||
>
|
||||
<div [formGroupName]="i" class="vc-values-row__inner">
|
||||
<div class="vc-values-col vc-values-col--name">
|
||||
<mat-form-field appearance="outline" class="vc-inline-field">
|
||||
<input required matInput formControlName="name" placeholder="{{ 'labels.inputs.name' | translate }}" />
|
||||
<input
|
||||
required
|
||||
matInput
|
||||
formControlName="name"
|
||||
placeholder="{{ 'labels.inputs.name' | translate }}"
|
||||
/>
|
||||
@if (codeValues.at(i).controls.name.hasError('required')) {
|
||||
<mat-error>
|
||||
{{ 'labels.inputs.name' | translate }} {{ 'labels.commons.is' | translate }}
|
||||
@@ -103,12 +124,23 @@
|
||||
</div>
|
||||
<div class="vc-values-col vc-values-col--desc">
|
||||
<mat-form-field appearance="outline" class="vc-inline-field">
|
||||
<input matInput formControlName="description" placeholder="{{ 'labels.inputs.Description' | translate }}" />
|
||||
<input
|
||||
matInput
|
||||
formControlName="description"
|
||||
placeholder="{{ 'labels.inputs.Description' | translate }}"
|
||||
/>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div class="vc-values-col vc-values-col--pos">
|
||||
<mat-form-field appearance="outline" class="vc-inline-field">
|
||||
<input required matInput formControlName="position" type="number" min="0" placeholder="{{ 'labels.inputs.Position' | translate }}" />
|
||||
<input
|
||||
required
|
||||
matInput
|
||||
formControlName="position"
|
||||
type="number"
|
||||
min="0"
|
||||
placeholder="{{ 'labels.inputs.Position' | translate }}"
|
||||
/>
|
||||
@if (codeValues.at(i).controls.position.hasError('required')) {
|
||||
<mat-error>
|
||||
{{ 'labels.inputs.Position' | translate }} {{ 'labels.commons.is' | translate }}
|
||||
|
||||
@@ -73,9 +73,14 @@ $gray-900: #202124;
|
||||
border-color: $border !important;
|
||||
color: $gray-500 !important;
|
||||
|
||||
i { margin-right: 6px; }
|
||||
i {
|
||||
margin-right: 6px;
|
||||
}
|
||||
|
||||
&:hover { color: $primary !important; border-color: $primary !important; }
|
||||
&:hover {
|
||||
color: $primary !important;
|
||||
border-color: $primary !important;
|
||||
}
|
||||
}
|
||||
|
||||
// Card
|
||||
@@ -125,7 +130,9 @@ $gray-900: #202124;
|
||||
padding: 10px 0;
|
||||
border-bottom: 1px solid #f1f5f9;
|
||||
|
||||
&:last-child { border-bottom: none; }
|
||||
&:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
&__label {
|
||||
flex: 0 0 40%;
|
||||
@@ -149,10 +156,17 @@ $gray-900: #202124;
|
||||
font-weight: 600;
|
||||
font-size: 13px;
|
||||
|
||||
i { font-size: 11px; }
|
||||
i {
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
&--yes { color: #16a34a; }
|
||||
&--no { color: #dc2626; }
|
||||
&--yes {
|
||||
color: #16a34a;
|
||||
}
|
||||
|
||||
&--no {
|
||||
color: #dc2626;
|
||||
}
|
||||
}
|
||||
|
||||
// Add button in section header
|
||||
@@ -192,9 +206,17 @@ $gray-900: #202124;
|
||||
min-width: 700px;
|
||||
transition: background 0.1s;
|
||||
|
||||
&:last-child { border-bottom: none; }
|
||||
&:nth-child(even) { background: #fafbfc; }
|
||||
&:hover { background: #f8fafc; }
|
||||
&:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
&:nth-child(even) {
|
||||
background: #fafbfc;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: #f8fafc;
|
||||
}
|
||||
|
||||
&--editing {
|
||||
background: #eff6ff !important;
|
||||
@@ -208,10 +230,26 @@ $gray-900: #202124;
|
||||
}
|
||||
|
||||
.vc-values-col {
|
||||
&--name { flex: 0 0 22%; padding-right: 8px; }
|
||||
&--desc { flex: 0 0 26%; padding-right: 8px; }
|
||||
&--pos { flex: 0 0 14%; padding-right: 8px; }
|
||||
&--active { flex: 0 0 12%; padding-right: 8px; }
|
||||
&--name {
|
||||
flex: 0 0 22%;
|
||||
padding-right: 8px;
|
||||
}
|
||||
|
||||
&--desc {
|
||||
flex: 0 0 26%;
|
||||
padding-right: 8px;
|
||||
}
|
||||
|
||||
&--pos {
|
||||
flex: 0 0 14%;
|
||||
padding-right: 8px;
|
||||
}
|
||||
|
||||
&--active {
|
||||
flex: 0 0 12%;
|
||||
padding-right: 8px;
|
||||
}
|
||||
|
||||
&--actions {
|
||||
flex: 0 0 26%;
|
||||
display: flex;
|
||||
@@ -225,7 +263,9 @@ $gray-900: #202124;
|
||||
width: 100%;
|
||||
|
||||
::ng-deep {
|
||||
.mat-mdc-form-field-flex { height: 36px; }
|
||||
.mat-mdc-form-field-flex {
|
||||
height: 36px;
|
||||
}
|
||||
|
||||
.mat-mdc-form-field-infix {
|
||||
padding: 4px 0;
|
||||
@@ -233,11 +273,18 @@ $gray-900: #202124;
|
||||
}
|
||||
|
||||
.mdc-notched-outline {
|
||||
.mdc-notched-outline__leading { border-radius: 6px 0 0 6px; }
|
||||
.mdc-notched-outline__trailing { border-radius: 0 6px 6px 0; }
|
||||
.mdc-notched-outline__leading {
|
||||
border-radius: 6px 0 0 6px;
|
||||
}
|
||||
|
||||
.mdc-notched-outline__trailing {
|
||||
border-radius: 0 6px 6px 0;
|
||||
}
|
||||
}
|
||||
|
||||
input { font-size: 13px; }
|
||||
input {
|
||||
font-size: 13px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -272,7 +319,7 @@ $gray-900: #202124;
|
||||
}
|
||||
|
||||
// Responsive
|
||||
@media (max-width: 768px) {
|
||||
@media (width <= 768px) {
|
||||
.vc-header {
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
|
||||
@@ -44,9 +44,14 @@ $gray-900: #202124;
|
||||
border-color: $border !important;
|
||||
color: $gray-500 !important;
|
||||
|
||||
i { margin-right: 6px; }
|
||||
i {
|
||||
margin-right: 6px;
|
||||
}
|
||||
|
||||
&:hover { color: $primary !important; border-color: $primary !important; }
|
||||
&:hover {
|
||||
color: $primary !important;
|
||||
border-color: $primary !important;
|
||||
}
|
||||
}
|
||||
|
||||
// Card
|
||||
@@ -92,7 +97,9 @@ $gray-900: #202124;
|
||||
gap: 4px 16px;
|
||||
padding: 16px 24px;
|
||||
|
||||
@media (max-width: 600px) { grid-template-columns: 1fr; }
|
||||
@media (width <= 600px) {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
.ar-field {
|
||||
@@ -128,6 +135,9 @@ $gray-900: #202124;
|
||||
height: 36px !important;
|
||||
box-shadow: 0 1px 3px rgba($primary, 0.3) !important;
|
||||
|
||||
i { margin-right: 6px; font-size: 12px; }
|
||||
i {
|
||||
margin-right: 6px;
|
||||
font-size: 12px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,7 +48,13 @@
|
||||
<button type="button" mat-stroked-button [routerLink]="['../../']" class="er-actions__cancel">
|
||||
{{ 'labels.buttons.Cancel' | translate }}
|
||||
</button>
|
||||
<button type="submit" mat-flat-button color="primary" [disabled]="!roleForm.valid || roleForm.pristine" class="er-actions__submit">
|
||||
<button
|
||||
type="submit"
|
||||
mat-flat-button
|
||||
color="primary"
|
||||
[disabled]="!roleForm.valid || roleForm.pristine"
|
||||
class="er-actions__submit"
|
||||
>
|
||||
<i class="fas fa-check"></i> {{ 'labels.buttons.Submit' | translate }}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@@ -44,9 +44,14 @@ $gray-900: #202124;
|
||||
border-color: $border !important;
|
||||
color: $gray-500 !important;
|
||||
|
||||
i { margin-right: 6px; }
|
||||
i {
|
||||
margin-right: 6px;
|
||||
}
|
||||
|
||||
&:hover { color: $primary !important; border-color: $primary !important; }
|
||||
&:hover {
|
||||
color: $primary !important;
|
||||
border-color: $primary !important;
|
||||
}
|
||||
}
|
||||
|
||||
// Card
|
||||
@@ -92,7 +97,9 @@ $gray-900: #202124;
|
||||
gap: 4px 16px;
|
||||
padding: 16px 24px;
|
||||
|
||||
@media (max-width: 600px) { grid-template-columns: 1fr; }
|
||||
@media (width <= 600px) {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
.er-field {
|
||||
@@ -128,6 +135,9 @@ $gray-900: #202124;
|
||||
height: 36px !important;
|
||||
box-shadow: 0 1px 3px rgba($primary, 0.3) !important;
|
||||
|
||||
i { margin-right: 6px; font-size: 12px; }
|
||||
i {
|
||||
margin-right: 6px;
|
||||
font-size: 12px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,31 +19,45 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="vr-topbar__actions">
|
||||
<button mat-flat-button color="primary" class="vr-btn vr-btn--edit"
|
||||
<button
|
||||
mat-flat-button
|
||||
color="primary"
|
||||
class="vr-btn vr-btn--edit"
|
||||
(click)="editRoles(); backupCheckValues()"
|
||||
[disabled]="rolePermissionService.name === 'Super user'">
|
||||
[disabled]="rolePermissionService.name === 'Super user'"
|
||||
>
|
||||
<fa-icon icon="edit" class="m-r-10"></fa-icon>
|
||||
{{ 'labels.text.Edit Role' | translate }}
|
||||
</button>
|
||||
@if (!isRoleEnable(rolePermissionService.disabled)) {
|
||||
<button mat-stroked-button class="vr-btn vr-btn--disable"
|
||||
<button
|
||||
mat-stroked-button
|
||||
class="vr-btn vr-btn--disable"
|
||||
(click)="disableRolesConfirmation()"
|
||||
[disabled]="rolePermissionService.name === 'Super user'">
|
||||
[disabled]="rolePermissionService.name === 'Super user'"
|
||||
>
|
||||
<fa-icon icon="lock" class="m-r-10"></fa-icon>
|
||||
{{ 'labels.buttons.Disable' | translate }} {{ 'labels.inputs.Role' | translate }}
|
||||
</button>
|
||||
}
|
||||
@if (isRoleEnable(rolePermissionService.disabled)) {
|
||||
<button mat-flat-button color="primary" class="vr-btn vr-btn--enable"
|
||||
<button
|
||||
mat-flat-button
|
||||
color="primary"
|
||||
class="vr-btn vr-btn--enable"
|
||||
(click)="enableRolesConfirmation()"
|
||||
[disabled]="rolePermissionService.name === 'Super user'">
|
||||
[disabled]="rolePermissionService.name === 'Super user'"
|
||||
>
|
||||
<fa-icon icon="lock-open" class="m-r-10"></fa-icon>
|
||||
{{ 'labels.buttons.Enable' | translate }} {{ 'labels.inputs.Role' | translate }}
|
||||
</button>
|
||||
}
|
||||
<button mat-stroked-button class="vr-btn vr-btn--delete"
|
||||
<button
|
||||
mat-stroked-button
|
||||
class="vr-btn vr-btn--delete"
|
||||
(click)="deleteRole()"
|
||||
[disabled]="rolePermissionService.name === 'Super user'">
|
||||
[disabled]="rolePermissionService.name === 'Super user'"
|
||||
>
|
||||
<fa-icon icon="trash" class="m-r-10"></fa-icon>
|
||||
{{ 'labels.buttons.Delete' | translate }} {{ 'labels.inputs.Role' | translate }}
|
||||
</button>
|
||||
@@ -54,7 +68,9 @@
|
||||
<div class="vr-card">
|
||||
<div class="vr-card__header">
|
||||
<i class="fas fa-shield-alt"></i>
|
||||
<h3>{{ 'labels.buttons.Permissions' | translate }}: <strong>{{ formatName(previousGrouping) }}</strong></h3>
|
||||
<h3>
|
||||
{{ 'labels.buttons.Permissions' | translate }}: <strong>{{ formatName(previousGrouping) }}</strong>
|
||||
</h3>
|
||||
@if (!isDisabled) {
|
||||
<div class="vr-card__header-actions">
|
||||
<button mat-flat-button color="primary" class="vr-btn-sm" (click)="selectAll()">
|
||||
@@ -77,27 +93,49 @@
|
||||
<span class="vr-group__name">{{ group.name }}</span>
|
||||
<span class="vr-group__count">{{ getGroupPermCount(group) }}</span>
|
||||
@if (!isDisabled) {
|
||||
<button class="vr-group__select-btn vr-group__select-btn--check" (click)="selectAllGroup(group); $event.stopPropagation()" title="Select all in {{ group.name }}">
|
||||
<button
|
||||
class="vr-group__select-btn vr-group__select-btn--check"
|
||||
(click)="selectAllGroup(group); $event.stopPropagation()"
|
||||
title="Select all in {{ group.name }}"
|
||||
>
|
||||
<i class="fas fa-check-double"></i>
|
||||
</button>
|
||||
<button class="vr-group__select-btn vr-group__select-btn--clear" (click)="deselectAllGroup(group); $event.stopPropagation()" title="Deselect all in {{ group.name }}">
|
||||
<button
|
||||
class="vr-group__select-btn vr-group__select-btn--clear"
|
||||
(click)="deselectAllGroup(group); $event.stopPropagation()"
|
||||
title="Deselect all in {{ group.name }}"
|
||||
>
|
||||
<i class="fas fa-times"></i>
|
||||
</button>
|
||||
}
|
||||
<i class="fas vr-group__chevron" [class.fa-chevron-down]="group.expanded" [class.fa-chevron-right]="!group.expanded"></i>
|
||||
<i
|
||||
class="fas vr-group__chevron"
|
||||
[class.fa-chevron-down]="group.expanded"
|
||||
[class.fa-chevron-right]="!group.expanded"
|
||||
></i>
|
||||
</div>
|
||||
@if (group.expanded) {
|
||||
<div class="vr-group__items">
|
||||
@for (cat of group.categories; track cat) {
|
||||
<div class="vr-category-item"
|
||||
<div
|
||||
class="vr-category-item"
|
||||
[class.vr-category-item--active]="selectedItem === cat"
|
||||
(click)="showPermissions(cat)">
|
||||
(click)="showPermissions(cat)"
|
||||
>
|
||||
<span class="vr-category-item__name">{{ formatName(cat) }}</span>
|
||||
@if (!isDisabled) {
|
||||
<button class="vr-category-item__sel" (click)="selectAllCategory(cat); $event.stopPropagation()" title="Select all">
|
||||
<button
|
||||
class="vr-category-item__sel"
|
||||
(click)="selectAllCategory(cat); $event.stopPropagation()"
|
||||
title="Select all"
|
||||
>
|
||||
<i class="fas fa-check"></i>
|
||||
</button>
|
||||
<button class="vr-category-item__desel" (click)="deselectAllCategory(cat); $event.stopPropagation()" title="Deselect all">
|
||||
<button
|
||||
class="vr-category-item__desel"
|
||||
(click)="deselectAllCategory(cat); $event.stopPropagation()"
|
||||
title="Deselect all"
|
||||
>
|
||||
<i class="fas fa-times"></i>
|
||||
</button>
|
||||
}
|
||||
@@ -113,20 +151,33 @@
|
||||
<!-- Permission Checkboxes (Right) -->
|
||||
<div class="vr-checkboxes">
|
||||
<form [formGroup]="formGroup" (submit)="submit()">
|
||||
|
||||
<!-- Sub-grouped view for large categories -->
|
||||
@if (permissionSubGroups.length > 0) {
|
||||
@for (subGroup of permissionSubGroups; track subGroup.entity) {
|
||||
<div class="vr-subgroup">
|
||||
<div class="vr-subgroup__header" (click)="toggleSubGroup(subGroup)">
|
||||
<i class="fas" [class.fa-chevron-down]="subGroup.expanded" [class.fa-chevron-right]="!subGroup.expanded"></i>
|
||||
<i
|
||||
class="fas"
|
||||
[class.fa-chevron-down]="subGroup.expanded"
|
||||
[class.fa-chevron-right]="!subGroup.expanded"
|
||||
></i>
|
||||
<span class="vr-subgroup__name">{{ getEntityDisplayName(subGroup.entity) }}</span>
|
||||
<span class="vr-subgroup__count">{{ getSubGroupCount(subGroup) }}</span>
|
||||
@if (!isDisabled) {
|
||||
<button type="button" class="vr-subgroup__select" (click)="selectAllSubGroup(subGroup); $event.stopPropagation()" title="Select all">
|
||||
<button
|
||||
type="button"
|
||||
class="vr-subgroup__select"
|
||||
(click)="selectAllSubGroup(subGroup); $event.stopPropagation()"
|
||||
title="Select all"
|
||||
>
|
||||
<i class="fas fa-check-double"></i>
|
||||
</button>
|
||||
<button type="button" class="vr-subgroup__deselect" (click)="deselectAllSubGroup(subGroup); $event.stopPropagation()" title="Deselect all">
|
||||
<button
|
||||
type="button"
|
||||
class="vr-subgroup__deselect"
|
||||
(click)="deselectAllSubGroup(subGroup); $event.stopPropagation()"
|
||||
title="Deselect all"
|
||||
>
|
||||
<i class="fas fa-times"></i>
|
||||
</button>
|
||||
}
|
||||
@@ -137,10 +188,20 @@
|
||||
<div class="vr-subgroup__col-label">
|
||||
<span>Maker</span>
|
||||
@if (!isDisabled && subGroup.makerPerms.length > 0) {
|
||||
<button type="button" class="vr-col-btn vr-col-btn--select" (click)="selectAllMaker(subGroup.makerPerms)" title="Select all maker">
|
||||
<button
|
||||
type="button"
|
||||
class="vr-col-btn vr-col-btn--select"
|
||||
(click)="selectAllMaker(subGroup.makerPerms)"
|
||||
title="Select all maker"
|
||||
>
|
||||
<i class="fas fa-check"></i> All
|
||||
</button>
|
||||
<button type="button" class="vr-col-btn vr-col-btn--clear" (click)="deselectAllMaker(subGroup.makerPerms)" title="Deselect all maker">
|
||||
<button
|
||||
type="button"
|
||||
class="vr-col-btn vr-col-btn--clear"
|
||||
(click)="deselectAllMaker(subGroup.makerPerms)"
|
||||
title="Deselect all maker"
|
||||
>
|
||||
<i class="fas fa-times"></i>
|
||||
</button>
|
||||
}
|
||||
@@ -162,10 +223,20 @@
|
||||
<div class="vr-subgroup__col-label vr-subgroup__col-label--checker">
|
||||
<span>Checker</span>
|
||||
@if (!isDisabled && subGroup.checkerPerms.length > 0) {
|
||||
<button type="button" class="vr-col-btn vr-col-btn--select-warn" (click)="selectAllChecker(subGroup.checkerPerms)" title="Select all checker">
|
||||
<button
|
||||
type="button"
|
||||
class="vr-col-btn vr-col-btn--select-warn"
|
||||
(click)="selectAllChecker(subGroup.checkerPerms)"
|
||||
title="Select all checker"
|
||||
>
|
||||
<i class="fas fa-check"></i> All
|
||||
</button>
|
||||
<button type="button" class="vr-col-btn vr-col-btn--clear" (click)="deselectAllChecker(subGroup.checkerPerms)" title="Deselect all checker">
|
||||
<button
|
||||
type="button"
|
||||
class="vr-col-btn vr-col-btn--clear"
|
||||
(click)="deselectAllChecker(subGroup.checkerPerms)"
|
||||
title="Deselect all checker"
|
||||
>
|
||||
<i class="fas fa-times"></i>
|
||||
</button>
|
||||
}
|
||||
@@ -194,10 +265,20 @@
|
||||
<div class="vr-flat-col__label">
|
||||
<span>Maker</span>
|
||||
@if (!isDisabled && flatMakerPerms.length > 0) {
|
||||
<button type="button" class="vr-col-btn vr-col-btn--select" (click)="selectAllMaker(flatMakerPerms)" title="Select all maker">
|
||||
<button
|
||||
type="button"
|
||||
class="vr-col-btn vr-col-btn--select"
|
||||
(click)="selectAllMaker(flatMakerPerms)"
|
||||
title="Select all maker"
|
||||
>
|
||||
<i class="fas fa-check"></i> All
|
||||
</button>
|
||||
<button type="button" class="vr-col-btn vr-col-btn--clear" (click)="deselectAllMaker(flatMakerPerms)" title="Deselect all">
|
||||
<button
|
||||
type="button"
|
||||
class="vr-col-btn vr-col-btn--clear"
|
||||
(click)="deselectAllMaker(flatMakerPerms)"
|
||||
title="Deselect all"
|
||||
>
|
||||
<i class="fas fa-times"></i>
|
||||
</button>
|
||||
}
|
||||
@@ -216,10 +297,20 @@
|
||||
<div class="vr-flat-col__label vr-flat-col__label--checker">
|
||||
<span>Checker</span>
|
||||
@if (!isDisabled && flatCheckerPerms.length > 0) {
|
||||
<button type="button" class="vr-col-btn vr-col-btn--select-warn" (click)="selectAllChecker(flatCheckerPerms)" title="Select all checker">
|
||||
<button
|
||||
type="button"
|
||||
class="vr-col-btn vr-col-btn--select-warn"
|
||||
(click)="selectAllChecker(flatCheckerPerms)"
|
||||
title="Select all checker"
|
||||
>
|
||||
<i class="fas fa-check"></i> All
|
||||
</button>
|
||||
<button type="button" class="vr-col-btn vr-col-btn--clear" (click)="deselectAllChecker(flatCheckerPerms)" title="Deselect all">
|
||||
<button
|
||||
type="button"
|
||||
class="vr-col-btn vr-col-btn--clear"
|
||||
(click)="deselectAllChecker(flatCheckerPerms)"
|
||||
title="Deselect all"
|
||||
>
|
||||
<i class="fas fa-times"></i>
|
||||
</button>
|
||||
}
|
||||
@@ -239,14 +330,18 @@
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if (!isDisabled) {
|
||||
<div class="vr-card__footer">
|
||||
<button type="button" mat-stroked-button class="vr-btn-action vr-btn-action--cancel" (click)="cancel(); restoreCheckboxes()">
|
||||
<button
|
||||
type="button"
|
||||
mat-stroked-button
|
||||
class="vr-btn-action vr-btn-action--cancel"
|
||||
(click)="cancel(); restoreCheckboxes()"
|
||||
>
|
||||
{{ 'labels.buttons.Cancel' | translate }}
|
||||
</button>
|
||||
<button mat-flat-button color="primary" class="vr-btn-action vr-btn-action--submit" (click)="submit()">
|
||||
|
||||
@@ -199,7 +199,9 @@ $gray-900: #202124;
|
||||
.vr-group {
|
||||
border-bottom: 1px solid #f1f3f5;
|
||||
|
||||
&:last-child { border-bottom: none; }
|
||||
&:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
&__header {
|
||||
display: flex;
|
||||
@@ -210,7 +212,9 @@ $gray-900: #202124;
|
||||
transition: background 0.15s;
|
||||
user-select: none;
|
||||
|
||||
&:hover { background: #f0f4f8; }
|
||||
&:hover {
|
||||
background: #f0f4f8;
|
||||
}
|
||||
}
|
||||
|
||||
&__icon {
|
||||
@@ -257,12 +261,21 @@ $gray-900: #202124;
|
||||
|
||||
&--check {
|
||||
color: $accent;
|
||||
&:hover { background: rgba($accent, 0.1); border-color: $accent; }
|
||||
|
||||
&:hover {
|
||||
background: rgba($accent, 0.1);
|
||||
border-color: $accent;
|
||||
}
|
||||
}
|
||||
|
||||
&--clear {
|
||||
color: $gray-500;
|
||||
&:hover { background: rgba(#ef4444, 0.05); border-color: #ef4444; color: #ef4444; }
|
||||
|
||||
&:hover {
|
||||
background: rgba(#ef4444, 0.05);
|
||||
border-color: #ef4444;
|
||||
color: #ef4444;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -297,7 +310,8 @@ $gray-900: #202124;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
&__sel, &__desel {
|
||||
&__sel,
|
||||
&__desel {
|
||||
background: none;
|
||||
border: 1px solid transparent;
|
||||
border-radius: 3px;
|
||||
@@ -313,16 +327,28 @@ $gray-900: #202124;
|
||||
transition: all 0.15s;
|
||||
}
|
||||
|
||||
&:hover &__sel, &:hover &__desel { opacity: 1; }
|
||||
&:hover &__sel,
|
||||
&:hover &__desel {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
&__sel {
|
||||
color: $accent;
|
||||
&:hover { background: rgba($accent, 0.1); border-color: $accent; }
|
||||
|
||||
&:hover {
|
||||
background: rgba($accent, 0.1);
|
||||
border-color: $accent;
|
||||
}
|
||||
}
|
||||
|
||||
&__desel {
|
||||
color: $gray-500;
|
||||
&:hover { background: rgba(#ef4444, 0.05); border-color: #ef4444; color: #ef4444; }
|
||||
|
||||
&:hover {
|
||||
background: rgba(#ef4444, 0.05);
|
||||
border-color: #ef4444;
|
||||
color: #ef4444;
|
||||
}
|
||||
}
|
||||
|
||||
&__count {
|
||||
@@ -371,7 +397,9 @@ $gray-900: #202124;
|
||||
overflow: hidden;
|
||||
grid-column: 1 / -1;
|
||||
|
||||
& + & { margin-top: 6px; }
|
||||
& + & {
|
||||
margin-top: 6px;
|
||||
}
|
||||
|
||||
&__header {
|
||||
display: flex;
|
||||
@@ -383,9 +411,15 @@ $gray-900: #202124;
|
||||
transition: background 0.15s;
|
||||
user-select: none;
|
||||
|
||||
&:hover { background: #f0f4f8; }
|
||||
&:hover {
|
||||
background: #f0f4f8;
|
||||
}
|
||||
|
||||
> i { font-size: 9px; color: $gray-500; width: 12px; }
|
||||
> i {
|
||||
font-size: 9px;
|
||||
color: $gray-500;
|
||||
width: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
&__name {
|
||||
@@ -405,7 +439,8 @@ $gray-900: #202124;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
&__select, &__deselect {
|
||||
&__select,
|
||||
&__deselect {
|
||||
background: none;
|
||||
border: 1px solid $border;
|
||||
border-radius: 4px;
|
||||
@@ -422,12 +457,21 @@ $gray-900: #202124;
|
||||
|
||||
&__select {
|
||||
color: $accent;
|
||||
&:hover { background: rgba($accent, 0.1); border-color: $accent; }
|
||||
|
||||
&:hover {
|
||||
background: rgba($accent, 0.1);
|
||||
border-color: $accent;
|
||||
}
|
||||
}
|
||||
|
||||
&__deselect {
|
||||
color: $gray-500;
|
||||
&:hover { background: rgba(#ef4444, 0.05); border-color: #ef4444; color: #ef4444; }
|
||||
|
||||
&:hover {
|
||||
background: rgba(#ef4444, 0.05);
|
||||
border-color: #ef4444;
|
||||
color: #ef4444;
|
||||
}
|
||||
}
|
||||
|
||||
&__columns {
|
||||
@@ -458,9 +502,13 @@ $gray-900: #202124;
|
||||
border-bottom: 1px solid #f1f3f5;
|
||||
margin-bottom: 4px;
|
||||
|
||||
span { flex: 1; }
|
||||
span {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
&--checker { color: #f59e0b; }
|
||||
&--checker {
|
||||
color: #f59e0b;
|
||||
}
|
||||
}
|
||||
|
||||
&__empty {
|
||||
@@ -488,17 +536,30 @@ $gray-900: #202124;
|
||||
|
||||
&--select {
|
||||
color: $accent;
|
||||
&:hover { background: rgba($accent, 0.1); border-color: $accent; }
|
||||
|
||||
&:hover {
|
||||
background: rgba($accent, 0.1);
|
||||
border-color: $accent;
|
||||
}
|
||||
}
|
||||
|
||||
&--select-warn {
|
||||
color: #f59e0b;
|
||||
&:hover { background: rgba(#f59e0b, 0.1); border-color: #f59e0b; }
|
||||
|
||||
&:hover {
|
||||
background: rgba(#f59e0b, 0.1);
|
||||
border-color: #f59e0b;
|
||||
}
|
||||
}
|
||||
|
||||
&--clear {
|
||||
color: $gray-500;
|
||||
&:hover { background: rgba(#ef4444, 0.05); border-color: #ef4444; color: #ef4444; }
|
||||
|
||||
&:hover {
|
||||
background: rgba(#ef4444, 0.05);
|
||||
border-color: #ef4444;
|
||||
color: #ef4444;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -531,9 +592,13 @@ $gray-900: #202124;
|
||||
border-bottom: 1px solid #f1f3f5;
|
||||
margin-bottom: 4px;
|
||||
|
||||
span { flex: 1; }
|
||||
span {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
&--checker { color: #f59e0b; }
|
||||
&--checker {
|
||||
color: #f59e0b;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -579,12 +644,15 @@ $gray-900: #202124;
|
||||
&--submit {
|
||||
box-shadow: 0 1px 3px rgba($primary, 0.3) !important;
|
||||
|
||||
i { margin-right: 6px; font-size: 12px; }
|
||||
i {
|
||||
margin-right: 6px;
|
||||
font-size: 12px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Responsive
|
||||
@media (max-width: 768px) {
|
||||
@media (width <= 768px) {
|
||||
.vr-topbar {
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -82,7 +82,9 @@
|
||||
</div>
|
||||
<div class="sys-card__body">
|
||||
<h3 class="sys-card__title">{{ 'labels.heading.Manage Roles and Permissions' | translate }}</h3>
|
||||
<p class="sys-card__desc">{{ 'labels.text.Define or modify roles and associated permissions' | translate }}</p>
|
||||
<p class="sys-card__desc">
|
||||
{{ 'labels.text.Define or modify roles and associated permissions' | translate }}
|
||||
</p>
|
||||
</div>
|
||||
<i class="fas fa-chevron-right sys-card__arrow"></i>
|
||||
</a>
|
||||
@@ -147,7 +149,9 @@
|
||||
</div>
|
||||
<div class="sys-card__body">
|
||||
<h3 class="sys-card__title">{{ 'labels.heading.Account Number Preferences' | translate }}</h3>
|
||||
<p class="sys-card__desc">{{ 'labels.text.Preferences for generating account numbers for client' | translate }}</p>
|
||||
<p class="sys-card__desc">
|
||||
{{ 'labels.text.Preferences for generating account numbers for client' | translate }}
|
||||
</p>
|
||||
</div>
|
||||
<i class="fas fa-chevron-right sys-card__arrow"></i>
|
||||
</a>
|
||||
@@ -207,7 +211,9 @@
|
||||
</div>
|
||||
<div class="sys-card__body">
|
||||
<h3 class="sys-card__title">{{ 'labels.heading.Manage External Events' | translate }}</h3>
|
||||
<p class="sys-card__desc">{{ 'labels.text.External Events configuration, to enable or disable' | translate }}</p>
|
||||
<p class="sys-card__desc">
|
||||
{{ 'labels.text.External Events configuration, to enable or disable' | translate }}
|
||||
</p>
|
||||
</div>
|
||||
<i class="fas fa-chevron-right sys-card__arrow"></i>
|
||||
</a>
|
||||
@@ -219,7 +225,9 @@
|
||||
</div>
|
||||
<div class="sys-card__body">
|
||||
<h3 class="sys-card__title">{{ 'labels.heading.System Information' | translate }}</h3>
|
||||
<p class="sys-card__desc">{{ 'labels.text.View system version, server and licensing information' | translate }}</p>
|
||||
<p class="sys-card__desc">
|
||||
{{ 'labels.text.View system version, server and licensing information' | translate }}
|
||||
</p>
|
||||
</div>
|
||||
<i class="fas fa-chevron-right sys-card__arrow"></i>
|
||||
</a>
|
||||
@@ -231,9 +239,15 @@
|
||||
<h2>{{ 'labels.heading.Manage Data Tables' | translate }}</h2>
|
||||
<p class="mw300">{{ 'labels.text.Mifos X data-tables allow the user to add custom fields' | translate }}</p>
|
||||
<div class="layout-row align-end gap-2px responsive-column">
|
||||
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">{{ 'labels.buttons.Close' | translate }}</button>
|
||||
<button mat-raised-button color="primary" (click)="popover.close(); previousStepDatatables()">{{ 'labels.buttons.Back' | translate }}</button>
|
||||
<button mat-raised-button color="primary" (click)="popover.close(); nextStepDatatables()">{{ 'labels.buttons.Next' | translate }}</button>
|
||||
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
|
||||
{{ 'labels.buttons.Close' | translate }}
|
||||
</button>
|
||||
<button mat-raised-button color="primary" (click)="popover.close(); previousStepDatatables()">
|
||||
{{ 'labels.buttons.Back' | translate }}
|
||||
</button>
|
||||
<button mat-raised-button color="primary" (click)="popover.close(); nextStepDatatables()">
|
||||
{{ 'labels.buttons.Next' | translate }}
|
||||
</button>
|
||||
</div>
|
||||
</ng-template>
|
||||
|
||||
@@ -241,9 +255,15 @@
|
||||
<h2>{{ 'labels.heading.Manage Codes' | translate }}</h2>
|
||||
<p class="mw300">{{ 'labels.text.Selection you can create new drop-downs and edit' | translate }}</p>
|
||||
<div class="layout-row align-end gap-2px responsive-column">
|
||||
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">{{ 'labels.buttons.Close' | translate }}</button>
|
||||
<button mat-raised-button color="primary" (click)="popover.close(); previousStepCodes()">{{ 'labels.buttons.Back' | translate }}</button>
|
||||
<button mat-raised-button color="primary" (click)="popover.close(); nextStepCodes()">{{ 'labels.buttons.Next' | translate }}</button>
|
||||
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
|
||||
{{ 'labels.buttons.Close' | translate }}
|
||||
</button>
|
||||
<button mat-raised-button color="primary" (click)="popover.close(); previousStepCodes()">
|
||||
{{ 'labels.buttons.Back' | translate }}
|
||||
</button>
|
||||
<button mat-raised-button color="primary" (click)="popover.close(); nextStepCodes()">
|
||||
{{ 'labels.buttons.Next' | translate }}
|
||||
</button>
|
||||
</div>
|
||||
</ng-template>
|
||||
|
||||
@@ -251,9 +271,15 @@
|
||||
<h2>{{ 'labels.heading.Manage Roles and Permissions' | translate }}</h2>
|
||||
<p class="mw300">{{ 'labels.text.Roles and Permissions allow the administrator to control access' | translate }}</p>
|
||||
<div class="layout-row align-end gap-2px responsive-column">
|
||||
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">{{ 'labels.buttons.Close' | translate }}</button>
|
||||
<button mat-raised-button color="primary" (click)="popover.close(); previousStepRolesandPermission()">{{ 'labels.buttons.Back' | translate }}</button>
|
||||
<button mat-raised-button color="primary" (click)="popover.close(); nextStepRolesandPermission()">{{ 'labels.buttons.Next' | translate }}</button>
|
||||
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
|
||||
{{ 'labels.buttons.Close' | translate }}
|
||||
</button>
|
||||
<button mat-raised-button color="primary" (click)="popover.close(); previousStepRolesandPermission()">
|
||||
{{ 'labels.buttons.Back' | translate }}
|
||||
</button>
|
||||
<button mat-raised-button color="primary" (click)="popover.close(); nextStepRolesandPermission()">
|
||||
{{ 'labels.buttons.Next' | translate }}
|
||||
</button>
|
||||
</div>
|
||||
</ng-template>
|
||||
|
||||
@@ -261,9 +287,15 @@
|
||||
<h2>{{ 'labels.heading.Configure Maker-Checker Tasks' | translate }}</h2>
|
||||
<p class="mw300">{{ 'labels.text."Maker-Checker" principle requires every tasks' | translate }}</p>
|
||||
<div class="layout-row align-end gap-2px responsive-column">
|
||||
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">{{ 'labels.buttons.Close' | translate }}</button>
|
||||
<button mat-raised-button color="primary" (click)="popover.close(); previousStepMakerCheckerTable()">{{ 'labels.buttons.Back' | translate }}</button>
|
||||
<button mat-raised-button color="primary" (click)="popover.close(); nextStepMakerCheckerTable()">{{ 'labels.buttons.Next' | translate }}</button>
|
||||
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
|
||||
{{ 'labels.buttons.Close' | translate }}
|
||||
</button>
|
||||
<button mat-raised-button color="primary" (click)="popover.close(); previousStepMakerCheckerTable()">
|
||||
{{ 'labels.buttons.Back' | translate }}
|
||||
</button>
|
||||
<button mat-raised-button color="primary" (click)="popover.close(); nextStepMakerCheckerTable()">
|
||||
{{ 'labels.buttons.Next' | translate }}
|
||||
</button>
|
||||
</div>
|
||||
</ng-template>
|
||||
|
||||
@@ -271,9 +303,15 @@
|
||||
<h2>{{ 'labels.heading.Configuration' | translate }}</h2>
|
||||
<p class="mw300">{{ 'labels.text.Configurations page allows you to further customize' | translate }}</p>
|
||||
<div class="layout-row align-end gap-2px responsive-column">
|
||||
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">{{ 'labels.buttons.Close' | translate }}</button>
|
||||
<button mat-raised-button color="primary" (click)="popover.close(); previousStepConfigurations()">{{ 'labels.buttons.Back' | translate }}</button>
|
||||
<button mat-raised-button color="primary" (click)="popover.close(); nextStepConfigurations()">{{ 'labels.buttons.Next' | translate }}</button>
|
||||
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
|
||||
{{ 'labels.buttons.Close' | translate }}
|
||||
</button>
|
||||
<button mat-raised-button color="primary" (click)="popover.close(); previousStepConfigurations()">
|
||||
{{ 'labels.buttons.Back' | translate }}
|
||||
</button>
|
||||
<button mat-raised-button color="primary" (click)="popover.close(); nextStepConfigurations()">
|
||||
{{ 'labels.buttons.Next' | translate }}
|
||||
</button>
|
||||
</div>
|
||||
</ng-template>
|
||||
|
||||
@@ -281,9 +319,15 @@
|
||||
<h2>{{ 'labels.heading.Manage Scheduler Jobs' | translate }}</h2>
|
||||
<p class="mw300">{{ 'labels.text.Scheduler Jobs can set batch jobs' | translate }}</p>
|
||||
<div class="layout-row align-end gap-2px responsive-column">
|
||||
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">{{ 'labels.buttons.Close' | translate }}</button>
|
||||
<button mat-raised-button color="primary" (click)="popover.close(); previousStepSchedulerJobs()">{{ 'labels.buttons.Back' | translate }}</button>
|
||||
<button mat-raised-button color="primary" (click)="popover.close(); nextStepSchedulerJobs()">{{ 'labels.buttons.Next' | translate }}</button>
|
||||
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
|
||||
{{ 'labels.buttons.Close' | translate }}
|
||||
</button>
|
||||
<button mat-raised-button color="primary" (click)="popover.close(); previousStepSchedulerJobs()">
|
||||
{{ 'labels.buttons.Back' | translate }}
|
||||
</button>
|
||||
<button mat-raised-button color="primary" (click)="popover.close(); nextStepSchedulerJobs()">
|
||||
{{ 'labels.buttons.Next' | translate }}
|
||||
</button>
|
||||
</div>
|
||||
</ng-template>
|
||||
|
||||
@@ -291,8 +335,14 @@
|
||||
<h2>{{ 'labels.heading.Manage Reports' | translate }}</h2>
|
||||
<p class="mw300">{{ 'labels.text.Add customized reports and edit core reports' | translate }}</p>
|
||||
<div class="layout-row align-end gap-2px responsive-column">
|
||||
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">{{ 'labels.buttons.Close' | translate }}</button>
|
||||
<button mat-raised-button color="primary" (click)="popover.close(); previousStepManageReports()">{{ 'labels.buttons.Back' | translate }}</button>
|
||||
<button mat-raised-button color="primary" (click)="popover.close(); nextStepManageReports()">{{ 'labels.buttons.Next' | translate }}</button>
|
||||
<button mat-raised-button color="warn" (click)="popover.close(); configurationWizardService.closeConfigWizard()">
|
||||
{{ 'labels.buttons.Close' | translate }}
|
||||
</button>
|
||||
<button mat-raised-button color="primary" (click)="popover.close(); previousStepManageReports()">
|
||||
{{ 'labels.buttons.Back' | translate }}
|
||||
</button>
|
||||
<button mat-raised-button color="primary" (click)="popover.close(); nextStepManageReports()">
|
||||
{{ 'labels.buttons.Next' | translate }}
|
||||
</button>
|
||||
</div>
|
||||
</ng-template>
|
||||
|
||||
@@ -61,7 +61,7 @@ $gray-900: #0f172a;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 12px;
|
||||
|
||||
@media (max-width: 768px) {
|
||||
@media (width <= 768px) {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
@@ -82,7 +82,7 @@ $gray-900: #0f172a;
|
||||
&:hover {
|
||||
border-color: #cbd5e1;
|
||||
background: $gray-50;
|
||||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
|
||||
box-shadow: 0 2px 8px rgb(0 0 0 / 4%);
|
||||
|
||||
.sys-card__arrow {
|
||||
color: $gray-700;
|
||||
@@ -105,17 +105,60 @@ $gray-900: #0f172a;
|
||||
font-size: 15px;
|
||||
flex-shrink: 0;
|
||||
|
||||
&--blue { background: rgba(59, 130, 246, 0.1); color: #2563eb; }
|
||||
&--amber { background: rgba(245, 158, 11, 0.1); color: #d97706; }
|
||||
&--green { background: rgba(34, 197, 94, 0.1); color: #16a34a; }
|
||||
&--emerald { background: rgba(16, 185, 129, 0.1); color: #059669; }
|
||||
&--purple { background: rgba(139, 92, 246, 0.1); color: #7c3aed; }
|
||||
&--indigo { background: rgba(99, 102, 241, 0.1); color: #4f46e5; }
|
||||
&--slate { background: rgba(100, 116, 139, 0.1); color: #475569; }
|
||||
&--orange { background: rgba(249, 115, 22, 0.1); color: #ea580c; }
|
||||
&--teal { background: rgba(20, 184, 166, 0.1); color: #0d9488; }
|
||||
&--cyan { background: rgba(6, 182, 212, 0.1); color: #0891b2; }
|
||||
&--rose { background: rgba(244, 63, 94, 0.1); color: #e11d48; }
|
||||
&--blue {
|
||||
background: rgb(59 130 246 / 10%);
|
||||
color: #2563eb;
|
||||
}
|
||||
|
||||
&--amber {
|
||||
background: rgb(245 158 11 / 10%);
|
||||
color: #d97706;
|
||||
}
|
||||
|
||||
&--green {
|
||||
background: rgb(34 197 94 / 10%);
|
||||
color: #16a34a;
|
||||
}
|
||||
|
||||
&--emerald {
|
||||
background: rgb(16 185 129 / 10%);
|
||||
color: #059669;
|
||||
}
|
||||
|
||||
&--purple {
|
||||
background: rgb(139 92 246 / 10%);
|
||||
color: #7c3aed;
|
||||
}
|
||||
|
||||
&--indigo {
|
||||
background: rgb(99 102 241 / 10%);
|
||||
color: #4f46e5;
|
||||
}
|
||||
|
||||
&--slate {
|
||||
background: rgb(100 116 139 / 10%);
|
||||
color: #475569;
|
||||
}
|
||||
|
||||
&--orange {
|
||||
background: rgb(249 115 22 / 10%);
|
||||
color: #ea580c;
|
||||
}
|
||||
|
||||
&--teal {
|
||||
background: rgb(20 184 166 / 10%);
|
||||
color: #0d9488;
|
||||
}
|
||||
|
||||
&--cyan {
|
||||
background: rgb(6 182 212 / 10%);
|
||||
color: #0891b2;
|
||||
}
|
||||
|
||||
&--rose {
|
||||
background: rgb(244 63 94 / 10%);
|
||||
color: #e11d48;
|
||||
}
|
||||
}
|
||||
|
||||
&__body {
|
||||
@@ -152,8 +195,13 @@ $gray-900: #0f172a;
|
||||
// ── Dark mode ──
|
||||
:host-context(.dark-theme) {
|
||||
.sys-header {
|
||||
&__title { color: #e2e8f0; }
|
||||
&__sub { color: #94a3b8; }
|
||||
&__title {
|
||||
color: #e2e8f0;
|
||||
}
|
||||
|
||||
&__sub {
|
||||
color: #94a3b8;
|
||||
}
|
||||
}
|
||||
|
||||
.sys-card {
|
||||
@@ -165,8 +213,16 @@ $gray-900: #0f172a;
|
||||
border-color: #444;
|
||||
}
|
||||
|
||||
&__title { color: #e2e8f0; }
|
||||
&__desc { color: #64748b; }
|
||||
&__arrow { color: #444; }
|
||||
&__title {
|
||||
color: #e2e8f0;
|
||||
}
|
||||
|
||||
&__desc {
|
||||
color: #64748b;
|
||||
}
|
||||
|
||||
&__arrow {
|
||||
color: #444;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user