@@ -34,7 +34,13 @@
|
||||
</mat-form-field>
|
||||
|
||||
<div class="table-buttons" #buttonCreateCharge>
|
||||
<button mat-flat-button color="primary" class="btn-create" [routerLink]="['create']" *mifosxHasPermission="'CREATE_CHARGE'">
|
||||
<button
|
||||
mat-flat-button
|
||||
color="primary"
|
||||
class="btn-create"
|
||||
[routerLink]="['create']"
|
||||
*mifosxHasPermission="'CREATE_CHARGE'"
|
||||
>
|
||||
<fa-icon icon="plus" class="m-r-10"></fa-icon>
|
||||
{{ 'labels.text.Create Charge' | translate }}
|
||||
</button>
|
||||
|
||||
@@ -207,8 +207,7 @@
|
||||
</mat-error>
|
||||
}
|
||||
@if (
|
||||
(chargeForm.controls.feeInterval.hasError('min') ||
|
||||
chargeForm.controls.feeInterval.hasError('max')) &&
|
||||
(chargeForm.controls.feeInterval.hasError('min') || chargeForm.controls.feeInterval.hasError('max')) &&
|
||||
!chargeForm.controls.feeInterval.hasError('pattern')
|
||||
) {
|
||||
<mat-error>
|
||||
|
||||
@@ -17,10 +17,20 @@
|
||||
<div class="table-actions">
|
||||
<mat-form-field appearance="outline" class="table-search">
|
||||
<i matPrefix class="fas fa-search"></i>
|
||||
<input matInput (keyup)="applyFilter($event.target.value)" placeholder="{{ 'labels.inputs.Filter' | translate }}" />
|
||||
<input
|
||||
matInput
|
||||
(keyup)="applyFilter($event.target.value)"
|
||||
placeholder="{{ 'labels.inputs.Filter' | translate }}"
|
||||
/>
|
||||
</mat-form-field>
|
||||
<div class="table-buttons">
|
||||
<button mat-flat-button color="primary" class="btn-create" [routerLink]="['create']" *mifosxHasPermission="'CREATE_CHARGE'">
|
||||
<button
|
||||
mat-flat-button
|
||||
color="primary"
|
||||
class="btn-create"
|
||||
[routerLink]="['create']"
|
||||
*mifosxHasPermission="'CREATE_CHARGE'"
|
||||
>
|
||||
<fa-icon icon="plus" class="m-r-10"></fa-icon>
|
||||
{{ 'labels.text.Create Collateral' | translate }}
|
||||
</button>
|
||||
|
||||
@@ -97,12 +97,7 @@
|
||||
<button type="button" mat-raised-button [routerLink]="['../']">
|
||||
{{ 'labels.buttons.Cancel' | translate }}
|
||||
</button>
|
||||
<button
|
||||
mat-flat-button
|
||||
color="primary"
|
||||
[disabled]="!collateralForm.valid"
|
||||
*mifosxHasPermission="'CREATE_CHARGE'"
|
||||
>
|
||||
<button mat-flat-button color="primary" [disabled]="!collateralForm.valid" *mifosxHasPermission="'CREATE_CHARGE'">
|
||||
{{ 'labels.buttons.Submit' | translate }}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@@ -97,12 +97,7 @@
|
||||
<button type="button" mat-raised-button [routerLink]="['../']">
|
||||
{{ 'labels.buttons.Cancel' | translate }}
|
||||
</button>
|
||||
<button
|
||||
mat-flat-button
|
||||
color="primary"
|
||||
[disabled]="!collateralForm.valid"
|
||||
*mifosxHasPermission="'UPDATE_CHARGE'"
|
||||
>
|
||||
<button mat-flat-button color="primary" [disabled]="!collateralForm.valid" *mifosxHasPermission="'UPDATE_CHARGE'">
|
||||
{{ 'labels.buttons.Submit' | translate }}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
+9
-4
@@ -12,7 +12,12 @@
|
||||
<h2 class="fdp-header__title">{{ 'labels.heading.Create Fixed Deposit Product' | translate }}</h2>
|
||||
</div>
|
||||
|
||||
<mat-tab-group class="fdp-tabs" animationDuration="200ms" [preserveContent]="true" [(selectedIndex)]="selectedTabIndex">
|
||||
<mat-tab-group
|
||||
class="fdp-tabs"
|
||||
animationDuration="200ms"
|
||||
[preserveContent]="true"
|
||||
[(selectedIndex)]="selectedTabIndex"
|
||||
>
|
||||
<mat-tab>
|
||||
<ng-template mat-tab-label>
|
||||
<i class="fas fa-info-circle fdp-tab-icon"></i>
|
||||
@@ -124,19 +129,19 @@
|
||||
<div class="fdp-action-bar__right">
|
||||
@if (selectedTabIndex > 0) {
|
||||
<button mat-raised-button (click)="selectedTabIndex = selectedTabIndex - 1">
|
||||
<i class="fas fa-arrow-left" style="margin-right: 8px;"></i>
|
||||
<i class="fas fa-arrow-left" style="margin-right: 8px"></i>
|
||||
{{ 'labels.buttons.Previous' | translate }}
|
||||
</button>
|
||||
}
|
||||
@if (selectedTabIndex < totalTabs - 1) {
|
||||
<button mat-raised-button color="primary" (click)="selectedTabIndex = selectedTabIndex + 1">
|
||||
{{ 'labels.buttons.Next' | translate }}
|
||||
<i class="fas fa-arrow-right" style="margin-left: 8px;"></i>
|
||||
<i class="fas fa-arrow-right" style="margin-left: 8px"></i>
|
||||
</button>
|
||||
}
|
||||
@if (fixedDepositProductFormValid && selectedTabIndex === totalTabs - 1) {
|
||||
<button mat-raised-button color="primary" (click)="submit()">
|
||||
<i class="fas fa-check" style="margin-right: 8px;"></i>
|
||||
<i class="fas fa-check" style="margin-right: 8px"></i>
|
||||
{{ 'labels.buttons.Submit' | translate }}
|
||||
</button>
|
||||
}
|
||||
|
||||
+71
-21
@@ -8,33 +8,83 @@
|
||||
|
||||
$primary: #1353a0;
|
||||
|
||||
.fdp-container { max-width: 960px; margin: 0 auto; padding: 24px 16px; }
|
||||
|
||||
.fdp-header {
|
||||
display: flex; align-items: center; gap: 10px; margin-bottom: 20px;
|
||||
&__icon { font-size: 20px; color: $primary; }
|
||||
&__title { margin: 0; font-size: 22px; font-weight: 500; }
|
||||
.fdp-container {
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
padding: 24px 16px;
|
||||
}
|
||||
|
||||
.fdp-tabs {
|
||||
background: var(--md-sys-color-surface, #fff); border-radius: 8px;
|
||||
box-shadow: 0 2px 8px rgb(0 0 0 / 8%);
|
||||
.fdp-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
margin-bottom: 20px;
|
||||
|
||||
::ng-deep {
|
||||
.mat-mdc-tab-header { border-bottom: 1px solid rgb(0 0 0 / 8%); }
|
||||
.mat-mdc-tab { min-width: 100px; padding: 0 12px; height: 52px; }
|
||||
.mat-mdc-tab-body-wrapper { min-height: 200px; }
|
||||
.mat-mdc-tab-body { overflow: visible !important; }
|
||||
.mat-mdc-tab-body-content { overflow: visible !important; }
|
||||
&__icon {
|
||||
font-size: 20px;
|
||||
color: $primary;
|
||||
}
|
||||
|
||||
&__title {
|
||||
margin: 0;
|
||||
font-size: 22px;
|
||||
font-weight: 500;
|
||||
}
|
||||
}
|
||||
|
||||
.fdp-tab-icon { margin-right: 8px; font-size: 14px; }
|
||||
.fdp-tab-content { padding: 24px 16px; }
|
||||
.fdp-tabs {
|
||||
background: var(--md-sys-color-surface, #fff);
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 2px 8px rgb(0 0 0 / 8%);
|
||||
|
||||
::ng-deep {
|
||||
.mat-mdc-tab-header {
|
||||
border-bottom: 1px solid rgb(0 0 0 / 8%);
|
||||
}
|
||||
|
||||
.mat-mdc-tab {
|
||||
min-width: 100px;
|
||||
padding: 0 12px;
|
||||
height: 52px;
|
||||
}
|
||||
|
||||
.mat-mdc-tab-body-wrapper {
|
||||
min-height: 200px;
|
||||
}
|
||||
|
||||
.mat-mdc-tab-body {
|
||||
overflow: visible !important;
|
||||
}
|
||||
|
||||
.mat-mdc-tab-body-content {
|
||||
overflow: visible !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.fdp-tab-icon {
|
||||
margin-right: 8px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.fdp-tab-content {
|
||||
padding: 24px 16px;
|
||||
}
|
||||
|
||||
.fdp-action-bar {
|
||||
display: flex; justify-content: space-between; align-items: center;
|
||||
margin-top: 20px; padding: 16px 0; border-top: 1px solid rgb(0 0 0 / 8%);
|
||||
&__cancel { color: rgb(0 0 0 / 60%); }
|
||||
&__right { display: flex; gap: 12px; }
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-top: 20px;
|
||||
padding: 16px 0;
|
||||
border-top: 1px solid rgb(0 0 0 / 8%);
|
||||
|
||||
&__cancel {
|
||||
color: rgb(0 0 0 / 60%);
|
||||
}
|
||||
|
||||
&__right {
|
||||
display: flex;
|
||||
gap: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-4
@@ -169,10 +169,7 @@
|
||||
</div>
|
||||
@if (paymentChannelToFundSourceMappings.value.length !== 0) {
|
||||
<div class="fdpa-table-wrapper">
|
||||
<table
|
||||
mat-table
|
||||
[dataSource]="paymentChannelToFundSourceMappings.value"
|
||||
>
|
||||
<table mat-table [dataSource]="paymentChannelToFundSourceMappings.value">
|
||||
<ng-container matColumnDef="paymentTypeId">
|
||||
<th mat-header-cell *matHeaderCellDef>{{ 'labels.heading.Payment Type' | translate }}</th>
|
||||
<td mat-cell *matCellDef="let paymentFundSource">
|
||||
|
||||
+9
-5
@@ -24,7 +24,14 @@
|
||||
</mat-form-field>
|
||||
|
||||
<div class="fdpch-field fdpch-btn-wrap">
|
||||
<button type="button" mat-raised-button color="primary" class="fdpch-add-btn" (click)="addCharge(charge)" [disabled]="!charge.value">
|
||||
<button
|
||||
type="button"
|
||||
mat-raised-button
|
||||
color="primary"
|
||||
class="fdpch-add-btn"
|
||||
(click)="addCharge(charge)"
|
||||
[disabled]="!charge.value"
|
||||
>
|
||||
<fa-icon icon="plus" class="m-r-10"></fa-icon>
|
||||
{{ 'labels.buttons.Add' | translate }}
|
||||
</button>
|
||||
@@ -33,10 +40,7 @@
|
||||
|
||||
@if (chargesDataSource.length > 0) {
|
||||
<div class="fdpch-table-wrapper">
|
||||
<table
|
||||
mat-table
|
||||
[dataSource]="chargesDataSource"
|
||||
>
|
||||
<table mat-table [dataSource]="chargesDataSource">
|
||||
<ng-container matColumnDef="name">
|
||||
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Name' | translate }}</th>
|
||||
<td mat-cell *matCellDef="let charge">
|
||||
|
||||
+36
-14
@@ -78,7 +78,13 @@
|
||||
|
||||
<mat-form-field appearance="outline" class="fdpi-field" (click)="endDatePicker.open()">
|
||||
<mat-label>{{ 'labels.inputs.End Date' | translate }}</mat-label>
|
||||
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="endDatePicker" formControlName="endDate" />
|
||||
<input
|
||||
matInput
|
||||
[min]="minDate"
|
||||
[max]="maxDate"
|
||||
[matDatepicker]="endDatePicker"
|
||||
formControlName="endDate"
|
||||
/>
|
||||
<mat-datepicker-toggle matSuffix [for]="endDatePicker"></mat-datepicker-toggle>
|
||||
<mat-datepicker #endDatePicker></mat-datepicker>
|
||||
</mat-form-field>
|
||||
@@ -91,7 +97,13 @@
|
||||
</div>
|
||||
|
||||
<div class="fdpi-slab-actions">
|
||||
<button type="button" mat-raised-button color="primary" class="fdpi-add-btn" (click)="addChartSlab(chart.controls.chartSlabs)">
|
||||
<button
|
||||
type="button"
|
||||
mat-raised-button
|
||||
color="primary"
|
||||
class="fdpi-add-btn"
|
||||
(click)="addChartSlab(chart.controls.chartSlabs)"
|
||||
>
|
||||
<fa-icon icon="plus" class="m-r-10"></fa-icon>
|
||||
{{ 'labels.buttons.Add Slab' | translate }}
|
||||
</button>
|
||||
@@ -105,11 +117,7 @@
|
||||
|
||||
@if (chart.value.chartSlabs.length !== 0) {
|
||||
<div class="fdpi-table-wrapper">
|
||||
<table
|
||||
mat-table
|
||||
[dataSource]="chart.value.chartSlabs"
|
||||
multiTemplateDataRows
|
||||
>
|
||||
<table mat-table [dataSource]="chart.value.chartSlabs" multiTemplateDataRows>
|
||||
<ng-container matColumnDef="period">
|
||||
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Period' | translate }}</th>
|
||||
<td mat-cell *matCellDef="let chartSlab">
|
||||
@@ -182,7 +190,9 @@
|
||||
>
|
||||
<div
|
||||
class="fdpi-incentives-wrap"
|
||||
[@expandChartSlab]="chartSlabIndex === expandChartSlabIndex[chartIndex] ? 'expanded' : 'collapsed'"
|
||||
[@expandChartSlab]="
|
||||
chartSlabIndex === expandChartSlabIndex[chartIndex] ? 'expanded' : 'collapsed'
|
||||
"
|
||||
>
|
||||
<mat-card class="fdpi-incentive-card">
|
||||
<h4>{{ 'labels.heading.Incentives' | translate }}</h4>
|
||||
@@ -201,25 +211,33 @@
|
||||
<div class="fdpi-table-wrapper">
|
||||
<table mat-table [dataSource]="chartSlab.incentives">
|
||||
<ng-container matColumnDef="entityType">
|
||||
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Entity Type' | translate }}</th>
|
||||
<th mat-header-cell *matHeaderCellDef>
|
||||
{{ 'labels.inputs.Entity Type' | translate }}
|
||||
</th>
|
||||
<td mat-cell *matCellDef="let incentive">
|
||||
{{ incentive.entityType | find: entityTypeData : 'id' : 'value' }}
|
||||
</td>
|
||||
</ng-container>
|
||||
<ng-container matColumnDef="attributeName">
|
||||
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Attribute Name' | translate }}</th>
|
||||
<th mat-header-cell *matHeaderCellDef>
|
||||
{{ 'labels.inputs.Attribute Name' | translate }}
|
||||
</th>
|
||||
<td mat-cell *matCellDef="let incentive">
|
||||
{{ incentive.attributeName | find: attributeNameData : 'id' : 'value' }}
|
||||
</td>
|
||||
</ng-container>
|
||||
<ng-container matColumnDef="conditionType">
|
||||
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Condition Type' | translate }}</th>
|
||||
<th mat-header-cell *matHeaderCellDef>
|
||||
{{ 'labels.inputs.Condition Type' | translate }}
|
||||
</th>
|
||||
<td mat-cell *matCellDef="let incentive">
|
||||
{{ incentive.conditionType | find: conditionTypeData : 'id' : 'value' }}
|
||||
</td>
|
||||
</ng-container>
|
||||
<ng-container matColumnDef="attributeValue">
|
||||
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Attribute Value' | translate }}</th>
|
||||
<th mat-header-cell *matHeaderCellDef>
|
||||
{{ 'labels.inputs.Attribute Value' | translate }}
|
||||
</th>
|
||||
<td mat-cell *matCellDef="let incentive">
|
||||
@switch (incentive.attributeName) {
|
||||
@case (2) {
|
||||
@@ -229,7 +247,9 @@
|
||||
<span>{{ incentive.attributeValue }}</span>
|
||||
}
|
||||
@case (4) {
|
||||
<span>{{ incentive.attributeValue | find: clientTypeData : 'id' : 'name' }}</span>
|
||||
<span>{{
|
||||
incentive.attributeValue | find: clientTypeData : 'id' : 'name'
|
||||
}}</span>
|
||||
}
|
||||
@case (5) {
|
||||
<span>{{
|
||||
@@ -240,7 +260,9 @@
|
||||
</td>
|
||||
</ng-container>
|
||||
<ng-container matColumnDef="incentiveType">
|
||||
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Incentive Type' | translate }}</th>
|
||||
<th mat-header-cell *matHeaderCellDef>
|
||||
{{ 'labels.inputs.Incentive Type' | translate }}
|
||||
</th>
|
||||
<td mat-cell *matCellDef="let incentive">
|
||||
{{ incentive.incentiveType | find: incentiveTypeData : 'id' : 'value' }}
|
||||
</td>
|
||||
|
||||
+49
-25
@@ -299,7 +299,9 @@
|
||||
>
|
||||
<div
|
||||
class="fdpp-incentives-wrap"
|
||||
[@expandChartSlab]="chartSlabIndex === expandChartSlabIndex[chartIndex] ? 'expanded' : 'collapsed'"
|
||||
[@expandChartSlab]="
|
||||
chartSlabIndex === expandChartSlabIndex[chartIndex] ? 'expanded' : 'collapsed'
|
||||
"
|
||||
>
|
||||
<mat-card class="fdpp-incentive-card">
|
||||
<h4>{{ 'labels.heading.Incentives' | translate }}</h4>
|
||||
@@ -310,36 +312,54 @@
|
||||
<td mat-cell *matCellDef="let incentive">
|
||||
{{
|
||||
incentive.entityType
|
||||
| find: fixedDepositProductsTemplate.chartTemplate.entityTypeOptions : 'id' : 'value'
|
||||
| find
|
||||
: fixedDepositProductsTemplate.chartTemplate.entityTypeOptions
|
||||
: 'id'
|
||||
: 'value'
|
||||
}}
|
||||
</td>
|
||||
</ng-container>
|
||||
<ng-container matColumnDef="attributeName">
|
||||
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Attribute Name' | translate }}</th>
|
||||
<th mat-header-cell *matHeaderCellDef>
|
||||
{{ 'labels.inputs.Attribute Name' | translate }}
|
||||
</th>
|
||||
<td mat-cell *matCellDef="let incentive">
|
||||
{{
|
||||
incentive.attributeName
|
||||
| find: fixedDepositProductsTemplate.chartTemplate.attributeNameOptions : 'id' : 'value'
|
||||
| find
|
||||
: fixedDepositProductsTemplate.chartTemplate.attributeNameOptions
|
||||
: 'id'
|
||||
: 'value'
|
||||
}}
|
||||
</td>
|
||||
</ng-container>
|
||||
<ng-container matColumnDef="conditionType">
|
||||
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Condition Type' | translate }}</th>
|
||||
<th mat-header-cell *matHeaderCellDef>
|
||||
{{ 'labels.inputs.Condition Type' | translate }}
|
||||
</th>
|
||||
<td mat-cell *matCellDef="let incentive">
|
||||
{{
|
||||
incentive.conditionType
|
||||
| find: fixedDepositProductsTemplate.chartTemplate.conditionTypeOptions : 'id' : 'value'
|
||||
| find
|
||||
: fixedDepositProductsTemplate.chartTemplate.conditionTypeOptions
|
||||
: 'id'
|
||||
: 'value'
|
||||
}}
|
||||
</td>
|
||||
</ng-container>
|
||||
<ng-container matColumnDef="attributeValue">
|
||||
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Attribute Value' | translate }}</th>
|
||||
<th mat-header-cell *matHeaderCellDef>
|
||||
{{ 'labels.inputs.Attribute Value' | translate }}
|
||||
</th>
|
||||
<td mat-cell *matCellDef="let incentive">
|
||||
@switch (incentive.attributeName) {
|
||||
@case (2) {
|
||||
<span>{{
|
||||
incentive.attributeValue
|
||||
| find: fixedDepositProductsTemplate.chartTemplate.genderOptions : 'id' : 'name'
|
||||
| find
|
||||
: fixedDepositProductsTemplate.chartTemplate.genderOptions
|
||||
: 'id'
|
||||
: 'name'
|
||||
}}</span>
|
||||
}
|
||||
@case (3) {
|
||||
@@ -348,7 +368,10 @@
|
||||
@case (4) {
|
||||
<span>{{
|
||||
incentive.attributeValue
|
||||
| find: fixedDepositProductsTemplate.chartTemplate.clientTypeOptions : 'id' : 'name'
|
||||
| find
|
||||
: fixedDepositProductsTemplate.chartTemplate.clientTypeOptions
|
||||
: 'id'
|
||||
: 'name'
|
||||
}}</span>
|
||||
}
|
||||
@case (5) {
|
||||
@@ -364,11 +387,16 @@
|
||||
</td>
|
||||
</ng-container>
|
||||
<ng-container matColumnDef="incentiveType">
|
||||
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Incentive Type' | translate }}</th>
|
||||
<th mat-header-cell *matHeaderCellDef>
|
||||
{{ 'labels.inputs.Incentive Type' | translate }}
|
||||
</th>
|
||||
<td mat-cell *matCellDef="let incentive">
|
||||
{{
|
||||
incentive.incentiveType
|
||||
| find: fixedDepositProductsTemplate.chartTemplate.incentiveTypeOptions : 'id' : 'value'
|
||||
| find
|
||||
: fixedDepositProductsTemplate.chartTemplate.incentiveTypeOptions
|
||||
: 'id'
|
||||
: 'value'
|
||||
}}
|
||||
</td>
|
||||
</ng-container>
|
||||
@@ -452,7 +480,10 @@
|
||||
</div>
|
||||
<div class="fdpp-section-body">
|
||||
@if (!isNoneAccounting()) {
|
||||
<mifosx-view-savings-accounting-details [accountingRule]="accountingRule" [accountingMappings]="accountingMappings">
|
||||
<mifosx-view-savings-accounting-details
|
||||
[accountingRule]="accountingRule"
|
||||
[accountingMappings]="accountingMappings"
|
||||
>
|
||||
</mifosx-view-savings-accounting-details>
|
||||
}
|
||||
</div>
|
||||
@@ -474,10 +505,7 @@
|
||||
@if (fixedDepositProduct.paymentChannelToFundSourceMappings?.length) {
|
||||
<h4 class="fdpp-subsection-title">{{ 'labels.heading.Fund Sources for Payment Channels' | translate }}</h4>
|
||||
<div class="fdpp-table-wrapper">
|
||||
<table
|
||||
mat-table
|
||||
[dataSource]="fixedDepositProduct.paymentChannelToFundSourceMappings"
|
||||
>
|
||||
<table mat-table [dataSource]="fixedDepositProduct.paymentChannelToFundSourceMappings">
|
||||
<ng-container matColumnDef="paymentTypeId">
|
||||
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Payment Type' | translate }}</th>
|
||||
<td mat-cell *matCellDef="let paymentFundSource">
|
||||
@@ -504,10 +532,7 @@
|
||||
@if (fixedDepositProduct.feeToIncomeAccountMappings?.length) {
|
||||
<h4 class="fdpp-subsection-title">{{ 'labels.heading.Fees to Specific Income Accounts' | translate }}</h4>
|
||||
<div class="fdpp-table-wrapper">
|
||||
<table
|
||||
mat-table
|
||||
[dataSource]="fixedDepositProduct.feeToIncomeAccountMappings"
|
||||
>
|
||||
<table mat-table [dataSource]="fixedDepositProduct.feeToIncomeAccountMappings">
|
||||
<ng-container matColumnDef="chargeId">
|
||||
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Fees' | translate }}</th>
|
||||
<td mat-cell *matCellDef="let feesIncome">
|
||||
@@ -529,12 +554,11 @@
|
||||
</div>
|
||||
}
|
||||
@if (fixedDepositProduct.penaltyToIncomeAccountMappings?.length) {
|
||||
<h4 class="fdpp-subsection-title">{{ 'labels.heading.Penalties to Specific Income Accounts' | translate }}</h4>
|
||||
<h4 class="fdpp-subsection-title">
|
||||
{{ 'labels.heading.Penalties to Specific Income Accounts' | translate }}
|
||||
</h4>
|
||||
<div class="fdpp-table-wrapper">
|
||||
<table
|
||||
mat-table
|
||||
[dataSource]="fixedDepositProduct.penaltyToIncomeAccountMappings"
|
||||
>
|
||||
<table mat-table [dataSource]="fixedDepositProduct.penaltyToIncomeAccountMappings">
|
||||
<ng-container matColumnDef="chargeId">
|
||||
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Penalty' | translate }}</th>
|
||||
<td mat-cell *matCellDef="let penaltyIncome">
|
||||
|
||||
+4
-1
@@ -160,7 +160,10 @@
|
||||
<mat-form-field appearance="outline" class="fdps-field">
|
||||
<mat-label>{{ 'labels.inputs.Period' | translate }}</mat-label>
|
||||
<mat-select formControlName="preClosurePenalInterestOnTypeId">
|
||||
@for (preClosurePenalInterestOnType of preClosurePenalInterestOnTypeData; track preClosurePenalInterestOnType) {
|
||||
@for (
|
||||
preClosurePenalInterestOnType of preClosurePenalInterestOnTypeData;
|
||||
track preClosurePenalInterestOnType
|
||||
) {
|
||||
<mat-option [value]="preClosurePenalInterestOnType.id">
|
||||
{{ preClosurePenalInterestOnType.value }}
|
||||
</mat-option>
|
||||
|
||||
+4
-1
@@ -66,7 +66,10 @@
|
||||
matTooltip="{{ 'tooltips.The period at which interest rate' | translate }}"
|
||||
required
|
||||
>
|
||||
@for (interestCompoundingPeriodType of interestCompoundingPeriodTypeData; track interestCompoundingPeriodType) {
|
||||
@for (
|
||||
interestCompoundingPeriodType of interestCompoundingPeriodTypeData;
|
||||
track interestCompoundingPeriodType
|
||||
) {
|
||||
<mat-option [value]="interestCompoundingPeriodType.id">
|
||||
{{ interestCompoundingPeriodType.value }}
|
||||
</mat-option>
|
||||
|
||||
+3
-1
@@ -88,7 +88,9 @@
|
||||
>
|
||||
{{ 'labels.inputs.Interest Rate' | translate }}
|
||||
</th>
|
||||
<td mat-cell *matCellDef="let floatingRatePeriod">{{ floatingRatePeriod.interestRate | formatNumber }}</td>
|
||||
<td mat-cell *matCellDef="let floatingRatePeriod">
|
||||
{{ floatingRatePeriod.interestRate | formatNumber }}
|
||||
</td>
|
||||
</ng-container>
|
||||
|
||||
<ng-container matColumnDef="isDifferential">
|
||||
|
||||
@@ -24,7 +24,13 @@
|
||||
</mat-form-field>
|
||||
|
||||
<div class="table-buttons">
|
||||
<button mat-flat-button color="primary" class="btn-create" [routerLink]="['create']" *mifosxHasPermission="'CREATE_FLOATINGRATE'">
|
||||
<button
|
||||
mat-flat-button
|
||||
color="primary"
|
||||
class="btn-create"
|
||||
[routerLink]="['create']"
|
||||
*mifosxHasPermission="'CREATE_FLOATINGRATE'"
|
||||
>
|
||||
<fa-icon icon="plus" class="m-r-10"></fa-icon>
|
||||
{{ 'labels.buttons.Create Floating Rate' | translate }}
|
||||
</button>
|
||||
|
||||
+9
-4
@@ -12,7 +12,12 @@
|
||||
<h2 class="lp-header__title">{{ 'labels.heading.Create Loan Product' | translate }}</h2>
|
||||
</div>
|
||||
|
||||
<mat-tab-group class="lp-tabs" animationDuration="200ms" [preserveContent]="true" [(selectedIndex)]="selectedTabIndex">
|
||||
<mat-tab-group
|
||||
class="lp-tabs"
|
||||
animationDuration="200ms"
|
||||
[preserveContent]="true"
|
||||
[(selectedIndex)]="selectedTabIndex"
|
||||
>
|
||||
<mat-tab>
|
||||
<ng-template mat-tab-label>
|
||||
<i class="fas fa-info-circle lp-tab-icon"></i>
|
||||
@@ -170,19 +175,19 @@
|
||||
<div class="lp-action-bar__right">
|
||||
@if (selectedTabIndex > 0) {
|
||||
<button mat-raised-button (click)="selectedTabIndex = selectedTabIndex - 1">
|
||||
<i class="fas fa-arrow-left" style="margin-right: 8px;"></i>
|
||||
<i class="fas fa-arrow-left" style="margin-right: 8px"></i>
|
||||
{{ 'labels.buttons.Previous' | translate }}
|
||||
</button>
|
||||
}
|
||||
@if (selectedTabIndex < totalTabs - 1) {
|
||||
<button mat-raised-button color="primary" (click)="selectedTabIndex = selectedTabIndex + 1">
|
||||
{{ 'labels.buttons.Next' | translate }}
|
||||
<i class="fas fa-arrow-right" style="margin-left: 8px;"></i>
|
||||
<i class="fas fa-arrow-right" style="margin-left: 8px"></i>
|
||||
</button>
|
||||
}
|
||||
@if (loanProductFormValid && selectedTabIndex === totalTabs - 1) {
|
||||
<button mat-raised-button color="primary" (click)="submit()">
|
||||
<i class="fas fa-check" style="margin-right: 8px;"></i>
|
||||
<i class="fas fa-check" style="margin-right: 8px"></i>
|
||||
{{ 'labels.buttons.Submit' | translate }}
|
||||
</button>
|
||||
}
|
||||
|
||||
+2
-12
@@ -7,7 +7,6 @@
|
||||
-->
|
||||
|
||||
<form [formGroup]="loanProductAccountingForm">
|
||||
|
||||
<!-- Accounting Rule Section -->
|
||||
<div class="lpa-section">
|
||||
<div class="lpa-section-header">
|
||||
@@ -16,10 +15,7 @@
|
||||
</div>
|
||||
<div class="lpa-section-body">
|
||||
<div class="lpa-full-width">
|
||||
<mat-radio-group
|
||||
class="lpa-radio-group"
|
||||
formControlName="accountingRule"
|
||||
>
|
||||
<mat-radio-group class="lpa-radio-group" formControlName="accountingRule">
|
||||
@for (accountingRule of accountingRuleData; track accountingRule; let i = $index) {
|
||||
<mat-radio-button [value]="i + 1">
|
||||
{{ 'labels.accounting.' + accountingRule | translate }}
|
||||
@@ -38,7 +34,6 @@
|
||||
</div>
|
||||
|
||||
@if (loanProductAccountingForm.value.accountingRule >= 2 && loanProductAccountingForm.value.accountingRule <= 4) {
|
||||
|
||||
<!-- Assets / Liabilities Section -->
|
||||
<div class="lpa-section">
|
||||
<div class="lpa-section-header">
|
||||
@@ -475,10 +470,7 @@
|
||||
</div>
|
||||
@if (chargeOffReasonToExpenseAccountMappings.value.length !== 0) {
|
||||
<div class="lpa-table-wrapper">
|
||||
<table
|
||||
mat-table
|
||||
[dataSource]="chargeOffReasonToExpenseAccountMappings.value"
|
||||
>
|
||||
<table mat-table [dataSource]="chargeOffReasonToExpenseAccountMappings.value">
|
||||
<ng-container matColumnDef="chargeOffReasonCodeValueId">
|
||||
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Charge-off reason' | translate }}</th>
|
||||
<td mat-cell *matCellDef="let chargeOffReasonExpense">
|
||||
@@ -552,7 +544,5 @@
|
||||
></mifosx-advanced-accounting-mapping-rule>
|
||||
}
|
||||
</div>
|
||||
|
||||
}
|
||||
|
||||
</form>
|
||||
|
||||
+21
-5
@@ -18,7 +18,9 @@ $gray-900: #202124;
|
||||
overflow: hidden;
|
||||
background: #fff;
|
||||
|
||||
& + & { margin-top: 16px; }
|
||||
& + & {
|
||||
margin-top: 16px;
|
||||
}
|
||||
|
||||
&__header {
|
||||
display: flex;
|
||||
@@ -28,8 +30,17 @@ $gray-900: #202124;
|
||||
background: $gray-50;
|
||||
border-bottom: 1px solid $gray-200;
|
||||
|
||||
i { font-size: 14px; color: $accent; }
|
||||
h3 { margin: 0; font-size: 14px; font-weight: 600; color: $gray-900; }
|
||||
i {
|
||||
font-size: 14px;
|
||||
color: $accent;
|
||||
}
|
||||
|
||||
h3 {
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
color: $gray-900;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,12 +50,17 @@ $gray-900: #202124;
|
||||
gap: 4px 16px;
|
||||
padding: 16px 24px;
|
||||
|
||||
@media (width <= 600px) { grid-template-columns: 1fr; }
|
||||
@media (width <= 600px) {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
.lpdi-field {
|
||||
width: 100%;
|
||||
&--full { grid-column: 1 / -1; }
|
||||
|
||||
&--full {
|
||||
grid-column: 1 / -1;
|
||||
}
|
||||
}
|
||||
|
||||
.lpdi-checkbox-row {
|
||||
|
||||
+2
-10
@@ -43,11 +43,7 @@
|
||||
|
||||
@if ((chargesDataSource | chargesPenaltyFilter: false).length > 0) {
|
||||
<div class="lpch-table-wrap">
|
||||
<table
|
||||
mat-table
|
||||
[dataSource]="chargesDataSource | chargesPenaltyFilter: false"
|
||||
class="lpch-table"
|
||||
>
|
||||
<table mat-table [dataSource]="chargesDataSource | chargesPenaltyFilter: false" class="lpch-table">
|
||||
<ng-container matColumnDef="name">
|
||||
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Name' | translate }}</th>
|
||||
<td mat-cell *matCellDef="let charge">
|
||||
@@ -130,11 +126,7 @@
|
||||
|
||||
@if ((chargesDataSource | chargesPenaltyFilter: true).length > 0) {
|
||||
<div class="lpch-table-wrap">
|
||||
<table
|
||||
mat-table
|
||||
[dataSource]="chargesDataSource | chargesPenaltyFilter: true"
|
||||
class="lpch-table"
|
||||
>
|
||||
<table mat-table [dataSource]="chargesDataSource | chargesPenaltyFilter: true" class="lpch-table">
|
||||
<ng-container matColumnDef="name">
|
||||
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Name' | translate }}</th>
|
||||
<td mat-cell *matCellDef="let overdueCharge">
|
||||
|
||||
+19
-4
@@ -19,7 +19,9 @@ $gray-900: #202124;
|
||||
overflow: hidden;
|
||||
background: #fff;
|
||||
|
||||
& + & { margin-top: 16px; }
|
||||
& + & {
|
||||
margin-top: 16px;
|
||||
}
|
||||
|
||||
&__header {
|
||||
display: flex;
|
||||
@@ -29,8 +31,17 @@ $gray-900: #202124;
|
||||
background: $gray-50;
|
||||
border-bottom: 1px solid $gray-200;
|
||||
|
||||
i { font-size: 14px; color: $accent; }
|
||||
h3 { margin: 0; font-size: 14px; font-weight: 600; color: $gray-900; }
|
||||
i {
|
||||
font-size: 14px;
|
||||
color: $accent;
|
||||
}
|
||||
|
||||
h3 {
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
color: $gray-900;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,7 +70,11 @@ $gray-900: #202124;
|
||||
|
||||
@media (width <= 600px) {
|
||||
flex-direction: column;
|
||||
&__select { max-width: 100%; width: 100%; }
|
||||
|
||||
&__select {
|
||||
max-width: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+21
-5
@@ -18,7 +18,9 @@ $gray-900: #202124;
|
||||
overflow: hidden;
|
||||
background: #fff;
|
||||
|
||||
& + & { margin-top: 16px; }
|
||||
& + & {
|
||||
margin-top: 16px;
|
||||
}
|
||||
|
||||
&__header {
|
||||
display: flex;
|
||||
@@ -28,8 +30,17 @@ $gray-900: #202124;
|
||||
background: $gray-50;
|
||||
border-bottom: 1px solid $gray-200;
|
||||
|
||||
i { font-size: 14px; color: $accent; }
|
||||
h3 { margin: 0; font-size: 14px; font-weight: 600; color: $gray-900; }
|
||||
i {
|
||||
font-size: 14px;
|
||||
color: $accent;
|
||||
}
|
||||
|
||||
h3 {
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
color: $gray-900;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,12 +50,17 @@ $gray-900: #202124;
|
||||
gap: 4px 16px;
|
||||
padding: 16px 24px;
|
||||
|
||||
@media (width <= 600px) { grid-template-columns: 1fr; }
|
||||
@media (width <= 600px) {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
.lpc-field {
|
||||
width: 100%;
|
||||
&--full { grid-column: 1 / -1; }
|
||||
|
||||
&--full {
|
||||
grid-column: 1 / -1;
|
||||
}
|
||||
}
|
||||
|
||||
.lpc-checkbox-row {
|
||||
|
||||
+21
-5
@@ -18,7 +18,9 @@ $gray-900: #202124;
|
||||
overflow: hidden;
|
||||
background: #fff;
|
||||
|
||||
& + & { margin-top: 16px; }
|
||||
& + & {
|
||||
margin-top: 16px;
|
||||
}
|
||||
|
||||
&__header {
|
||||
display: flex;
|
||||
@@ -28,8 +30,17 @@ $gray-900: #202124;
|
||||
background: $gray-50;
|
||||
border-bottom: 1px solid $gray-200;
|
||||
|
||||
i { font-size: 14px; color: $accent; }
|
||||
h3 { margin: 0; font-size: 14px; font-weight: 600; color: $gray-900; }
|
||||
i {
|
||||
font-size: 14px;
|
||||
color: $accent;
|
||||
}
|
||||
|
||||
h3 {
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
color: $gray-900;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,12 +50,17 @@ $gray-900: #202124;
|
||||
gap: 4px 16px;
|
||||
padding: 16px 24px;
|
||||
|
||||
@media (width <= 600px) { grid-template-columns: 1fr; }
|
||||
@media (width <= 600px) {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
.lpd-field {
|
||||
width: 100%;
|
||||
&--full { grid-column: 1 / -1; }
|
||||
|
||||
&--full {
|
||||
grid-column: 1 / -1;
|
||||
}
|
||||
}
|
||||
|
||||
.lpd-checkbox-row {
|
||||
|
||||
+14
-3
@@ -26,8 +26,17 @@ $gray-900: #202124;
|
||||
background: $gray-50;
|
||||
border-bottom: 1px solid $gray-200;
|
||||
|
||||
i { font-size: 14px; color: $accent; }
|
||||
h3 { margin: 0; font-size: 14px; font-weight: 600; color: $gray-900; }
|
||||
i {
|
||||
font-size: 14px;
|
||||
color: $accent;
|
||||
}
|
||||
|
||||
h3 {
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
color: $gray-900;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,7 +46,9 @@ $gray-900: #202124;
|
||||
gap: 4px 16px;
|
||||
padding: 16px 24px;
|
||||
|
||||
@media (width <= 600px) { grid-template-columns: 1fr; }
|
||||
@media (width <= 600px) {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
.lpir-field {
|
||||
|
||||
+26
-20
@@ -7,12 +7,14 @@
|
||||
-->
|
||||
|
||||
<form [formGroup]="loanProductSettingsForm">
|
||||
|
||||
<!-- Amortization & Interest -->
|
||||
<div class="lps-section">
|
||||
<div class="lps-section__header">
|
||||
<i class="fas fa-percentage lps-section__icon"></i>
|
||||
<h3 class="lps-section__title">{{ 'labels.inputs.products.loan.Amortization' | translate }} & {{ 'labels.inputs.Interest Method' | translate }}</h3>
|
||||
<h3 class="lps-section__title">
|
||||
{{ 'labels.inputs.products.loan.Amortization' | translate }} &
|
||||
{{ 'labels.inputs.Interest Method' | translate }}
|
||||
</h3>
|
||||
</div>
|
||||
<div class="lps-section__body">
|
||||
<mat-form-field appearance="outline">
|
||||
@@ -60,7 +62,10 @@
|
||||
matTooltip="{{ 'tooltips.Daily - Will Calculate the interest' | translate }}"
|
||||
required
|
||||
>
|
||||
@for (interestCalculationPeriodType of interestCalculationPeriodTypeData; track interestCalculationPeriodType) {
|
||||
@for (
|
||||
interestCalculationPeriodType of interestCalculationPeriodTypeData;
|
||||
track interestCalculationPeriodType
|
||||
) {
|
||||
<mat-option [value]="interestCalculationPeriodType.id">
|
||||
{{ interestCalculationPeriodType.value | translateKey: 'catalogs' }}
|
||||
</mat-option>
|
||||
@@ -118,7 +123,10 @@
|
||||
required
|
||||
[disabled]="advancedTransactionProcessingStrategyDisabled"
|
||||
>
|
||||
@for (transactionProcessingStrategy of transactionProcessingStrategyData; track transactionProcessingStrategy) {
|
||||
@for (
|
||||
transactionProcessingStrategy of transactionProcessingStrategyData;
|
||||
track transactionProcessingStrategy
|
||||
) {
|
||||
<mat-option [value]="transactionProcessingStrategy.code">
|
||||
{{ transactionProcessingStrategy.name | translateKey: 'catalogs' }}
|
||||
</mat-option>
|
||||
@@ -374,7 +382,10 @@
|
||||
<i class="fas fa-hourglass-half lps-section__icon"></i>
|
||||
<h3 class="lps-section__title">
|
||||
{{ 'labels.inputs.Moratorium' | translate }}
|
||||
<i class="fas fa-question lps-question-icon" matTooltip="{{ 'tooltips.The moratorium information' | translate }}"></i>
|
||||
<i
|
||||
class="fas fa-question lps-question-icon"
|
||||
matTooltip="{{ 'tooltips.The moratorium information' | translate }}"
|
||||
></i>
|
||||
</h3>
|
||||
</div>
|
||||
<div class="lps-section__body">
|
||||
@@ -418,7 +429,9 @@
|
||||
<div class="lps-section">
|
||||
<div class="lps-section__header">
|
||||
<i class="fas fa-exclamation-triangle lps-section__icon"></i>
|
||||
<h3 class="lps-section__title">{{ 'labels.inputs.Number of days a loan may be overdue before moving into arrears' | translate }}</h3>
|
||||
<h3 class="lps-section__title">
|
||||
{{ 'labels.inputs.Number of days a loan may be overdue before moving into arrears' | translate }}
|
||||
</h3>
|
||||
</div>
|
||||
<div class="lps-section__body">
|
||||
<mat-form-field appearance="outline">
|
||||
@@ -432,10 +445,7 @@
|
||||
</mat-form-field>
|
||||
|
||||
<div class="lps-checkbox-row">
|
||||
<mat-checkbox
|
||||
labelPosition="before"
|
||||
formControlName="accountMovesOutOfNPAOnlyOnArrearsCompletion"
|
||||
>
|
||||
<mat-checkbox labelPosition="before" formControlName="accountMovesOutOfNPAOnlyOnArrearsCompletion">
|
||||
{{ 'labels.inputs.Account moves out of NPA only after all arrears have been cleared' | translate }}
|
||||
</mat-checkbox>
|
||||
</div>
|
||||
@@ -729,20 +739,14 @@
|
||||
}
|
||||
|
||||
<div class="lps-checkbox-row lps-full-width">
|
||||
<mat-checkbox
|
||||
labelPosition="before"
|
||||
formControlName="isArrearsBasedOnOriginalSchedule"
|
||||
>
|
||||
<mat-checkbox labelPosition="before" formControlName="isArrearsBasedOnOriginalSchedule">
|
||||
{{ 'labels.inputs.Is Arrears recognization based on original schedule' | translate }}?
|
||||
</mat-checkbox>
|
||||
</div>
|
||||
|
||||
@if (loanProductSettingsForm.value.loanScheduleType === 'PROGRESSIVE') {
|
||||
<div class="lps-checkbox-row lps-full-width">
|
||||
<mat-checkbox
|
||||
labelPosition="before"
|
||||
formControlName="disallowInterestCalculationOnPastDue"
|
||||
>
|
||||
<mat-checkbox labelPosition="before" formControlName="disallowInterestCalculationOnPastDue">
|
||||
{{ 'labels.inputs.Do not calculate interest on past due principal balances' | translate }}
|
||||
</mat-checkbox>
|
||||
</div>
|
||||
@@ -791,7 +795,10 @@
|
||||
<i class="fas fa-bell lps-section__icon"></i>
|
||||
<h3 class="lps-section__title">
|
||||
{{ 'labels.heading.Event Settings' | translate }}
|
||||
<i class="fas fa-question lps-question-icon" matTooltip="{{ 'tooltips.Setting for event notifications to be sent' | translate }}"></i>
|
||||
<i
|
||||
class="fas fa-question lps-question-icon"
|
||||
matTooltip="{{ 'tooltips.Setting for event notifications to be sent' | translate }}"
|
||||
></i>
|
||||
</h3>
|
||||
</div>
|
||||
<div class="lps-section__body">
|
||||
@@ -889,5 +896,4 @@
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
+5
-3
@@ -7,7 +7,6 @@
|
||||
-->
|
||||
|
||||
<form [formGroup]="loanProductTermsForm">
|
||||
|
||||
<!-- Principal Section -->
|
||||
<div class="lpt-section">
|
||||
<div class="lpt-section-header">
|
||||
@@ -495,7 +494,11 @@
|
||||
mat-icon-button
|
||||
color="primary"
|
||||
(click)="
|
||||
editVariationsForBorrowerCycle('NumberOfRepayments', numberOfRepaymentVariationsForBorrowerCycle, i)
|
||||
editVariationsForBorrowerCycle(
|
||||
'NumberOfRepayments',
|
||||
numberOfRepaymentVariationsForBorrowerCycle,
|
||||
i
|
||||
)
|
||||
"
|
||||
>
|
||||
<fa-icon icon="edit"></fa-icon>
|
||||
@@ -655,5 +658,4 @@
|
||||
</mat-form-field>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
+6
-1
@@ -49,7 +49,12 @@
|
||||
</button>
|
||||
</div>
|
||||
<div class="db-ranges-body">
|
||||
<table mat-table [dataSource]="rangesDataSource" [hidden]="rangesDataSource.length === 0" class="db-ranges-table">
|
||||
<table
|
||||
mat-table
|
||||
[dataSource]="rangesDataSource"
|
||||
[hidden]="rangesDataSource.length === 0"
|
||||
class="db-ranges-table"
|
||||
>
|
||||
<ng-container matColumnDef="classification">
|
||||
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Classification' | translate }}</th>
|
||||
<td mat-cell *matCellDef="let row">
|
||||
|
||||
+21
-6
@@ -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 (width <= 600px) { grid-template-columns: 1fr; }
|
||||
@media (width <= 600px) {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
.db-field {
|
||||
@@ -113,7 +120,10 @@ $gray-900: #202124;
|
||||
padding: 0 14px !important;
|
||||
box-shadow: 0 1px 3px rgba($primary, 0.25) !important;
|
||||
|
||||
fa-icon { margin-right: 6px; font-size: 11px; }
|
||||
fa-icon {
|
||||
margin-right: 6px;
|
||||
font-size: 11px;
|
||||
}
|
||||
}
|
||||
|
||||
// Ranges table
|
||||
@@ -149,7 +159,9 @@ $gray-900: #202124;
|
||||
height: 40px;
|
||||
border-bottom: 1px solid #f1f5f9;
|
||||
|
||||
&:last-child { border-bottom: none; }
|
||||
&:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
}
|
||||
|
||||
.mat-mdc-cell {
|
||||
@@ -208,6 +220,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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+6
-1
@@ -49,7 +49,12 @@
|
||||
</button>
|
||||
</div>
|
||||
<div class="db-ranges-body">
|
||||
<table mat-table [dataSource]="rangesDataSource" [hidden]="rangesDataSource.length === 0" class="db-ranges-table">
|
||||
<table
|
||||
mat-table
|
||||
[dataSource]="rangesDataSource"
|
||||
[hidden]="rangesDataSource.length === 0"
|
||||
class="db-ranges-table"
|
||||
>
|
||||
<ng-container matColumnDef="classification">
|
||||
<th mat-header-cell *matHeaderCellDef>{{ 'labels.inputs.Classification' | translate }}</th>
|
||||
<td mat-cell *matCellDef="let row">{{ row.classification }}</td>
|
||||
|
||||
+21
-6
@@ -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 (width <= 600px) { grid-template-columns: 1fr; }
|
||||
@media (width <= 600px) {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
.db-field {
|
||||
@@ -113,7 +120,10 @@ $gray-900: #202124;
|
||||
padding: 0 14px !important;
|
||||
box-shadow: 0 1px 3px rgba($primary, 0.25) !important;
|
||||
|
||||
fa-icon { margin-right: 6px; font-size: 11px; }
|
||||
fa-icon {
|
||||
margin-right: 6px;
|
||||
font-size: 11px;
|
||||
}
|
||||
}
|
||||
|
||||
// Ranges table
|
||||
@@ -149,7 +159,9 @@ $gray-900: #202124;
|
||||
height: 40px;
|
||||
border-bottom: 1px solid #f1f5f9;
|
||||
|
||||
&:last-child { border-bottom: none; }
|
||||
&:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
}
|
||||
|
||||
.mat-mdc-cell {
|
||||
@@ -208,6 +220,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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+10
-2
@@ -16,7 +16,13 @@
|
||||
<h2 class="vb-header__title">{{ delinquencyBucketData.name }}</h2>
|
||||
</div>
|
||||
<div class="vb-header__actions">
|
||||
<button mat-flat-button color="primary" [routerLink]="['edit']" *mifosxHasPermission="'UPDATE_DELINQUENCY_BUCKET'" class="vb-header__edit">
|
||||
<button
|
||||
mat-flat-button
|
||||
color="primary"
|
||||
[routerLink]="['edit']"
|
||||
*mifosxHasPermission="'UPDATE_DELINQUENCY_BUCKET'"
|
||||
class="vb-header__edit"
|
||||
>
|
||||
<fa-icon icon="edit" class="m-r-10"></fa-icon>
|
||||
{{ 'labels.buttons.Edit' | translate }}
|
||||
</button>
|
||||
@@ -59,7 +65,9 @@
|
||||
@if (delinquencyBucketData.ranges && delinquencyBucketData.ranges.length > 0) {
|
||||
<div class="vb-ranges-table">
|
||||
<div class="vb-ranges-header">
|
||||
<span class="vb-ranges-cell vb-ranges-cell--name">{{ 'labels.inputs.Classification' | translate }} {{ 'labels.inputs.Name' | translate }}</span>
|
||||
<span class="vb-ranges-cell vb-ranges-cell--name"
|
||||
>{{ 'labels.inputs.Classification' | translate }} {{ 'labels.inputs.Name' | translate }}</span
|
||||
>
|
||||
<span class="vb-ranges-cell vb-ranges-cell--num">{{ 'labels.inputs.Days From' | translate }}</span>
|
||||
<span class="vb-ranges-cell vb-ranges-cell--num">{{ 'labels.inputs.Days Till' | translate }}</span>
|
||||
</div>
|
||||
|
||||
+16
-5
@@ -72,9 +72,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
|
||||
@@ -127,7 +132,9 @@ $gray-900: #202124;
|
||||
padding: 10px 0;
|
||||
border-bottom: 1px solid #f1f3f4;
|
||||
|
||||
&:last-child { border-bottom: none; }
|
||||
&:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
&__label {
|
||||
flex: 0 0 40%;
|
||||
@@ -170,9 +177,13 @@ $gray-900: #202124;
|
||||
border-bottom: 1px solid #f1f5f9;
|
||||
transition: background 0.1s;
|
||||
|
||||
&:last-child { border-bottom: none; }
|
||||
&:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
&:hover { background: #f8fafc; }
|
||||
&:hover {
|
||||
background: #f8fafc;
|
||||
}
|
||||
|
||||
.vb-ranges-cell {
|
||||
font-size: 13px;
|
||||
|
||||
+54
-12
@@ -6,34 +6,76 @@
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
.cr-container { max-width: 960px; margin: 0 auto; padding: 24px 16px; }
|
||||
.cr-container {
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
padding: 24px 16px;
|
||||
}
|
||||
|
||||
.cr-header {
|
||||
display: flex; align-items: center; gap: 10px; margin-bottom: 20px;
|
||||
&__icon { font-size: 20px; color: #1353a0; }
|
||||
&__title { margin: 0; font-size: 22px; font-weight: 500; }
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
margin-bottom: 20px;
|
||||
|
||||
&__icon {
|
||||
font-size: 20px;
|
||||
color: #1353a0;
|
||||
}
|
||||
|
||||
&__title {
|
||||
margin: 0;
|
||||
font-size: 22px;
|
||||
font-weight: 500;
|
||||
}
|
||||
}
|
||||
|
||||
.cr-section {
|
||||
border: 1px solid #e2e8f0; border-radius: 10px; overflow: hidden; background: #fff;
|
||||
border: 1px solid #e2e8f0;
|
||||
border-radius: 10px;
|
||||
overflow: hidden;
|
||||
background: #fff;
|
||||
|
||||
&__header {
|
||||
display: flex; align-items: center; gap: 10px; padding: 12px 24px;
|
||||
background: #f8f9fa; border-bottom: 1px solid #e8eaed;
|
||||
i { font-size: 14px; color: #0ea5e9; }
|
||||
h3 { margin: 0; font-size: 14px; font-weight: 600; color: #202124; }
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
padding: 12px 24px;
|
||||
background: #f8f9fa;
|
||||
border-bottom: 1px solid #e8eaed;
|
||||
|
||||
i {
|
||||
font-size: 14px;
|
||||
color: #0ea5e9;
|
||||
}
|
||||
|
||||
h3 {
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
color: #202124;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.cr-grid {
|
||||
display: grid; grid-template-columns: repeat(2, 1fr); gap: 4px 16px; padding: 16px 24px;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 4px 16px;
|
||||
padding: 16px 24px;
|
||||
}
|
||||
|
||||
.cr-action-bar {
|
||||
display: flex; justify-content: flex-end; gap: 12px; margin-top: 20px; padding: 16px 0;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
gap: 12px;
|
||||
margin-top: 20px;
|
||||
padding: 16px 0;
|
||||
border-top: 1px solid rgb(0 0 0 / 8%);
|
||||
}
|
||||
|
||||
@media (width <= 600px) {
|
||||
.cr-grid { grid-template-columns: 1fr; }
|
||||
.cr-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-1
@@ -23,7 +23,13 @@
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div class="table-buttons">
|
||||
<button mat-flat-button color="primary" class="btn-create" [routerLink]="['create']" *mifosxHasPermission="'CREATE_DELINQUENCY_RANGE'">
|
||||
<button
|
||||
mat-flat-button
|
||||
color="primary"
|
||||
class="btn-create"
|
||||
[routerLink]="['create']"
|
||||
*mifosxHasPermission="'CREATE_DELINQUENCY_RANGE'"
|
||||
>
|
||||
<fa-icon icon="plus" class="m-r-10"></fa-icon>
|
||||
{{ 'labels.text.Create Delinquency Range' | translate }}
|
||||
</button>
|
||||
|
||||
+3
-1
@@ -9,7 +9,9 @@
|
||||
<div class="er-container">
|
||||
<div class="er-header">
|
||||
<i class="fas fa-edit er-header__icon"></i>
|
||||
<h2 class="er-header__title">{{ 'labels.buttons.Edit' | translate }} {{ 'labels.inputs.Delinquency Range' | translate }}</h2>
|
||||
<h2 class="er-header__title">
|
||||
{{ 'labels.buttons.Edit' | translate }} {{ 'labels.inputs.Delinquency Range' | translate }}
|
||||
</h2>
|
||||
</div>
|
||||
|
||||
<form [formGroup]="delinquencyRangeForm" (ngSubmit)="submit()">
|
||||
|
||||
+54
-12
@@ -6,34 +6,76 @@
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
.er-container { max-width: 960px; margin: 0 auto; padding: 24px 16px; }
|
||||
.er-container {
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
padding: 24px 16px;
|
||||
}
|
||||
|
||||
.er-header {
|
||||
display: flex; align-items: center; gap: 10px; margin-bottom: 20px;
|
||||
&__icon { font-size: 20px; color: #1353a0; }
|
||||
&__title { margin: 0; font-size: 22px; font-weight: 500; }
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
margin-bottom: 20px;
|
||||
|
||||
&__icon {
|
||||
font-size: 20px;
|
||||
color: #1353a0;
|
||||
}
|
||||
|
||||
&__title {
|
||||
margin: 0;
|
||||
font-size: 22px;
|
||||
font-weight: 500;
|
||||
}
|
||||
}
|
||||
|
||||
.er-section {
|
||||
border: 1px solid #e2e8f0; border-radius: 10px; overflow: hidden; background: #fff;
|
||||
border: 1px solid #e2e8f0;
|
||||
border-radius: 10px;
|
||||
overflow: hidden;
|
||||
background: #fff;
|
||||
|
||||
&__header {
|
||||
display: flex; align-items: center; gap: 10px; padding: 12px 24px;
|
||||
background: #f8f9fa; border-bottom: 1px solid #e8eaed;
|
||||
i { font-size: 14px; color: #0ea5e9; }
|
||||
h3 { margin: 0; font-size: 14px; font-weight: 600; color: #202124; }
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
padding: 12px 24px;
|
||||
background: #f8f9fa;
|
||||
border-bottom: 1px solid #e8eaed;
|
||||
|
||||
i {
|
||||
font-size: 14px;
|
||||
color: #0ea5e9;
|
||||
}
|
||||
|
||||
h3 {
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
color: #202124;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.er-grid {
|
||||
display: grid; grid-template-columns: repeat(2, 1fr); gap: 4px 16px; padding: 16px 24px;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 4px 16px;
|
||||
padding: 16px 24px;
|
||||
}
|
||||
|
||||
.er-action-bar {
|
||||
display: flex; justify-content: flex-end; gap: 12px; margin-top: 20px; padding: 16px 0;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
gap: 12px;
|
||||
margin-top: 20px;
|
||||
padding: 16px 0;
|
||||
border-top: 1px solid rgb(0 0 0 / 8%);
|
||||
}
|
||||
|
||||
@media (width <= 600px) {
|
||||
.er-grid { grid-template-columns: 1fr; }
|
||||
.er-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
+12
-2
@@ -13,11 +13,21 @@
|
||||
<h2 class="vr-header__title">{{ delinquencyRangeData.classification }}</h2>
|
||||
</div>
|
||||
<div class="vr-top-bar__actions">
|
||||
<button mat-raised-button color="primary" [routerLink]="['edit']" *mifosxHasPermission="'UPDATE_DELINQUENCY_RANGE'">
|
||||
<button
|
||||
mat-raised-button
|
||||
color="primary"
|
||||
[routerLink]="['edit']"
|
||||
*mifosxHasPermission="'UPDATE_DELINQUENCY_RANGE'"
|
||||
>
|
||||
<fa-icon icon="edit" class="m-r-10"></fa-icon>
|
||||
{{ 'labels.buttons.Edit' | translate }}
|
||||
</button>
|
||||
<button mat-raised-button color="warn" (click)="deleteDelinquencyRange()" *mifosxHasPermission="'DELETE_DELINQUENCY_RANGE'">
|
||||
<button
|
||||
mat-raised-button
|
||||
color="warn"
|
||||
(click)="deleteDelinquencyRange()"
|
||||
*mifosxHasPermission="'DELETE_DELINQUENCY_RANGE'"
|
||||
>
|
||||
<fa-icon icon="trash" class="m-r-10"></fa-icon>
|
||||
{{ 'labels.buttons.Delete' | translate }}
|
||||
</button>
|
||||
|
||||
+73
-17
@@ -6,38 +6,94 @@
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
.vr-container { max-width: 960px; margin: 0 auto; padding: 24px 16px; }
|
||||
.vr-container {
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
padding: 24px 16px;
|
||||
}
|
||||
|
||||
.vr-top-bar {
|
||||
display: flex; align-items: center; justify-content: space-between;
|
||||
flex-wrap: wrap; gap: 12px; margin-bottom: 20px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
flex-wrap: wrap;
|
||||
gap: 12px;
|
||||
margin-bottom: 20px;
|
||||
|
||||
&__actions { display: flex; gap: 12px; }
|
||||
&__actions {
|
||||
display: flex;
|
||||
gap: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
.vr-header {
|
||||
display: flex; align-items: center; gap: 10px;
|
||||
&__icon { font-size: 20px; color: #1353a0; }
|
||||
&__title { margin: 0; font-size: 22px; font-weight: 500; }
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
|
||||
&__icon {
|
||||
font-size: 20px;
|
||||
color: #1353a0;
|
||||
}
|
||||
|
||||
&__title {
|
||||
margin: 0;
|
||||
font-size: 22px;
|
||||
font-weight: 500;
|
||||
}
|
||||
}
|
||||
|
||||
.vr-section {
|
||||
border: 1px solid #e2e8f0; border-radius: 10px; overflow: hidden; background: #fff;
|
||||
border: 1px solid #e2e8f0;
|
||||
border-radius: 10px;
|
||||
overflow: hidden;
|
||||
background: #fff;
|
||||
|
||||
&__header {
|
||||
display: flex; align-items: center; gap: 10px; padding: 12px 24px;
|
||||
background: #f8f9fa; border-bottom: 1px solid #e8eaed;
|
||||
i { font-size: 14px; color: #0ea5e9; }
|
||||
h3 { margin: 0; font-size: 14px; font-weight: 600; color: #202124; }
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
padding: 12px 24px;
|
||||
background: #f8f9fa;
|
||||
border-bottom: 1px solid #e8eaed;
|
||||
|
||||
i {
|
||||
font-size: 14px;
|
||||
color: #0ea5e9;
|
||||
}
|
||||
|
||||
h3 {
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
color: #202124;
|
||||
}
|
||||
}
|
||||
|
||||
&__body { padding: 16px 24px; }
|
||||
&__body {
|
||||
padding: 16px 24px;
|
||||
}
|
||||
}
|
||||
|
||||
.vr-row {
|
||||
display: flex; padding: 6px 0; border-bottom: 1px solid #f1f3f4;
|
||||
&:last-child { border-bottom: none; }
|
||||
display: flex;
|
||||
padding: 6px 0;
|
||||
border-bottom: 1px solid #f1f3f4;
|
||||
|
||||
&:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
}
|
||||
|
||||
.vr-label { flex: 0 0 40%; font-size: 13px; font-weight: 500; color: #5f6368; }
|
||||
.vr-value { flex: 1; font-size: 13px; color: #202124; }
|
||||
.vr-label {
|
||||
flex: 0 0 40%;
|
||||
font-size: 13px;
|
||||
font-weight: 500;
|
||||
color: #5f6368;
|
||||
}
|
||||
|
||||
.vr-value {
|
||||
flex: 1;
|
||||
font-size: 13px;
|
||||
color: #202124;
|
||||
}
|
||||
|
||||
+64
-16
@@ -6,20 +6,48 @@
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
.mdb-container { max-width: 960px; margin: 0 auto; padding: 24px 16px; }
|
||||
|
||||
.mdb-header {
|
||||
display: flex; align-items: center; gap: 10px; margin-bottom: 20px;
|
||||
&__icon { font-size: 20px; color: #1353a0; }
|
||||
&__title { margin: 0; font-size: 22px; font-weight: 500; }
|
||||
.mdb-container {
|
||||
max-width: 960px;
|
||||
margin: 0 auto;
|
||||
padding: 24px 16px;
|
||||
}
|
||||
|
||||
.mdb-cards { display: flex; flex-direction: column; gap: 12px; }
|
||||
.mdb-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
margin-bottom: 20px;
|
||||
|
||||
&__icon {
|
||||
font-size: 20px;
|
||||
color: #1353a0;
|
||||
}
|
||||
|
||||
&__title {
|
||||
margin: 0;
|
||||
font-size: 22px;
|
||||
font-weight: 500;
|
||||
}
|
||||
}
|
||||
|
||||
.mdb-cards {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.mdb-card {
|
||||
display: flex; align-items: center; gap: 16px; padding: 16px 24px;
|
||||
border: 1px solid #e2e8f0; border-radius: 10px; background: #fff;
|
||||
cursor: pointer; transition: box-shadow 0.2s, border-color 0.2s;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 16px;
|
||||
padding: 16px 24px;
|
||||
border: 1px solid #e2e8f0;
|
||||
border-radius: 10px;
|
||||
background: #fff;
|
||||
cursor: pointer;
|
||||
transition:
|
||||
box-shadow 0.2s,
|
||||
border-color 0.2s;
|
||||
|
||||
&:hover {
|
||||
border-color: #0ea5e9;
|
||||
@@ -27,16 +55,36 @@
|
||||
}
|
||||
|
||||
&__icon-wrap {
|
||||
display: flex; align-items: center; justify-content: center;
|
||||
width: 40px; height: 40px; border-radius: 8px;
|
||||
background: #f0f9ff; color: #0ea5e9; font-size: 16px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
border-radius: 8px;
|
||||
background: #f0f9ff;
|
||||
color: #0ea5e9;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
&__content {
|
||||
flex: 1;
|
||||
h3 { margin: 0; font-size: 14px; font-weight: 600; color: #202124; }
|
||||
p { margin: 4px 0 0; font-size: 12px; color: #5f6368; }
|
||||
|
||||
h3 {
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
color: #202124;
|
||||
}
|
||||
|
||||
p {
|
||||
margin: 4px 0 0;
|
||||
font-size: 12px;
|
||||
color: #5f6368;
|
||||
}
|
||||
}
|
||||
|
||||
&__arrow { font-size: 12px; color: #9ca3af; }
|
||||
&__arrow {
|
||||
font-size: 12px;
|
||||
color: #9ca3af;
|
||||
}
|
||||
}
|
||||
|
||||
+14
-4
@@ -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 (width <= 600px) { grid-template-columns: 1fr; }
|
||||
@media (width <= 600px) {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
.ctc-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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+14
-4
@@ -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 (width <= 600px) { grid-template-columns: 1fr; }
|
||||
@media (width <= 600px) {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
.etc-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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,13 @@
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div class="table-buttons">
|
||||
<button mat-flat-button color="primary" class="btn-create" [routerLink]="['create']" *mifosxHasPermission="'CREATE_TAXCOMPONENT'">
|
||||
<button
|
||||
mat-flat-button
|
||||
color="primary"
|
||||
class="btn-create"
|
||||
[routerLink]="['create']"
|
||||
*mifosxHasPermission="'CREATE_TAXCOMPONENT'"
|
||||
>
|
||||
<fa-icon icon="plus" class="m-r-10"></fa-icon>
|
||||
{{ 'labels.buttons.Create Tax Component' | translate }}
|
||||
</button>
|
||||
|
||||
+7
-1
@@ -15,7 +15,13 @@
|
||||
</button>
|
||||
<h2 class="vtc-header__title">{{ taxComponentData.name }}</h2>
|
||||
</div>
|
||||
<button mat-flat-button color="primary" [routerLink]="['edit']" class="vtc-header__edit" *mifosxHasPermission="'UPDATE_TAXCOMPONENT'">
|
||||
<button
|
||||
mat-flat-button
|
||||
color="primary"
|
||||
[routerLink]="['edit']"
|
||||
class="vtc-header__edit"
|
||||
*mifosxHasPermission="'UPDATE_TAXCOMPONENT'"
|
||||
>
|
||||
<fa-icon icon="edit" class="m-r-10"></fa-icon>
|
||||
{{ 'labels.buttons.Edit' | translate }}
|
||||
</button>
|
||||
|
||||
+10
-3
@@ -60,9 +60,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
|
||||
@@ -81,7 +86,9 @@ $gray-900: #202124;
|
||||
padding: 20px 28px 24px;
|
||||
background: #fff;
|
||||
|
||||
@media (width <= 600px) { grid-template-columns: 1fr; }
|
||||
@media (width <= 600px) {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
.vtc-cell {
|
||||
|
||||
@@ -14,7 +14,10 @@
|
||||
</div>
|
||||
<div>
|
||||
<h1 class="txcfg-header__title">{{ 'labels.heading.Manage Tax Configurations' | translate }}</h1>
|
||||
<p class="txcfg-header__sub">{{ 'labels.heading.Define Tax Components' | translate }} & {{ 'labels.heading.Define Tax Groups' | translate }}</p>
|
||||
<p class="txcfg-header__sub">
|
||||
{{ 'labels.heading.Define Tax Components' | translate }} &
|
||||
{{ 'labels.heading.Define Tax Groups' | translate }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -78,7 +78,10 @@ $gray-900: #0f172a;
|
||||
border-radius: 10px;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
transition: border-color 0.15s, box-shadow 0.15s, transform 0.12s;
|
||||
transition:
|
||||
border-color 0.15s,
|
||||
box-shadow 0.15s,
|
||||
transform 0.12s;
|
||||
|
||||
&:hover {
|
||||
border-color: #cbd5e1;
|
||||
|
||||
+17
-5
@@ -45,9 +45,14 @@ $text-muted: #64748b;
|
||||
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
|
||||
@@ -102,7 +107,9 @@ $text-muted: #64748b;
|
||||
gap: 4px 16px;
|
||||
padding: 16px 24px;
|
||||
|
||||
@media (width <= 600px) { grid-template-columns: 1fr; }
|
||||
@media (width <= 600px) {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
.ctg-field {
|
||||
@@ -143,7 +150,9 @@ $text-muted: #64748b;
|
||||
height: 36px;
|
||||
border-bottom: 1px solid #f1f5f9;
|
||||
|
||||
&:last-child { border-bottom: none; }
|
||||
&:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
}
|
||||
|
||||
.mat-mdc-cell {
|
||||
@@ -192,6 +201,9 @@ $text-muted: #64748b;
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,9 +45,14 @@ $text-muted: #64748b;
|
||||
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
|
||||
@@ -102,7 +107,9 @@ $text-muted: #64748b;
|
||||
gap: 4px 16px;
|
||||
padding: 16px 24px;
|
||||
|
||||
@media (width <= 600px) { grid-template-columns: 1fr; }
|
||||
@media (width <= 600px) {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
.etg-field {
|
||||
@@ -143,7 +150,9 @@ $text-muted: #64748b;
|
||||
height: 36px;
|
||||
border-bottom: 1px solid #f1f5f9;
|
||||
|
||||
&:last-child { border-bottom: none; }
|
||||
&:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
}
|
||||
|
||||
.mat-mdc-cell {
|
||||
@@ -192,6 +201,9 @@ $text-muted: #64748b;
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,13 @@
|
||||
</mat-form-field>
|
||||
</div>
|
||||
<div class="table-buttons">
|
||||
<button mat-flat-button color="primary" class="btn-create" [routerLink]="['create']" *mifosxHasPermission="'CREATE_TAXGROUP'">
|
||||
<button
|
||||
mat-flat-button
|
||||
color="primary"
|
||||
class="btn-create"
|
||||
[routerLink]="['create']"
|
||||
*mifosxHasPermission="'CREATE_TAXGROUP'"
|
||||
>
|
||||
<fa-icon icon="plus" class="m-r-10"></fa-icon>
|
||||
{{ 'labels.buttons.Create Tax Groups' | translate }}
|
||||
</button>
|
||||
|
||||
@@ -15,7 +15,13 @@
|
||||
</button>
|
||||
<h2 class="vtg-header__title">{{ taxGroupData.name }}</h2>
|
||||
</div>
|
||||
<button mat-flat-button color="primary" [routerLink]="['edit']" class="vtg-header__edit" *mifosxHasPermission="'UPDATE_TAXGROUP'">
|
||||
<button
|
||||
mat-flat-button
|
||||
color="primary"
|
||||
[routerLink]="['edit']"
|
||||
class="vtg-header__edit"
|
||||
*mifosxHasPermission="'UPDATE_TAXGROUP'"
|
||||
>
|
||||
<fa-icon icon="edit" class="m-r-10"></fa-icon>
|
||||
{{ 'labels.buttons.Edit' | translate }}
|
||||
</button>
|
||||
|
||||
@@ -61,9 +61,14 @@ $text-muted: #64748b;
|
||||
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
|
||||
@@ -109,7 +114,9 @@ $text-muted: #64748b;
|
||||
gap: 1px;
|
||||
padding: 20px 28px 24px;
|
||||
|
||||
@media (width <= 600px) { grid-template-columns: 1fr; }
|
||||
@media (width <= 600px) {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
.vtg-cell {
|
||||
|
||||
@@ -24,8 +24,14 @@
|
||||
</mat-form-field>
|
||||
|
||||
<div class="table-buttons">
|
||||
<button mat-flat-button color="primary" class="btn-create" [routerLink]="['create']" *mifosxHasPermission="'CREATE_PRODUCTMIX'">
|
||||
<i class="fas fa-plus" style="margin-right: 6px;"></i>
|
||||
<button
|
||||
mat-flat-button
|
||||
color="primary"
|
||||
class="btn-create"
|
||||
[routerLink]="['create']"
|
||||
*mifosxHasPermission="'CREATE_PRODUCTMIX'"
|
||||
>
|
||||
<i class="fas fa-plus" style="margin-right: 6px"></i>
|
||||
{{ 'labels.buttons.Add' | translate }}
|
||||
</button>
|
||||
</div>
|
||||
@@ -40,12 +46,7 @@
|
||||
</ng-container>
|
||||
|
||||
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
|
||||
<tr
|
||||
mat-row
|
||||
*matRowDef="let row; columns: displayedColumns"
|
||||
class="table-row"
|
||||
[routerLink]="[row.productId]"
|
||||
></tr>
|
||||
<tr mat-row *matRowDef="let row; columns: displayedColumns" class="table-row" [routerLink]="[row.productId]"></tr>
|
||||
</table>
|
||||
|
||||
<mat-paginator [pageSizeOptions]="[10, 25, 50, 100]" showFirstLastButtons></mat-paginator>
|
||||
|
||||
@@ -14,11 +14,11 @@
|
||||
</div>
|
||||
<div class="vpm-top-bar__actions">
|
||||
<button mat-flat-button color="primary" [routerLink]="['edit']" *mifosxHasPermission="'UPDATE_PRODUCTMIX'">
|
||||
<i class="fas fa-edit" style="margin-right: 6px;"></i>
|
||||
<i class="fas fa-edit" style="margin-right: 6px"></i>
|
||||
{{ 'labels.buttons.Edit' | translate }}
|
||||
</button>
|
||||
<button mat-flat-button color="warn" (click)="delete()" *mifosxHasPermission="'DELETE_PRODUCTMIX'">
|
||||
<i class="fas fa-trash" style="margin-right: 6px;"></i>
|
||||
<i class="fas fa-trash" style="margin-right: 6px"></i>
|
||||
{{ 'labels.buttons.Delete' | translate }}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@@ -25,7 +25,9 @@
|
||||
</div>
|
||||
<div class="pd-card__body">
|
||||
<h3 class="pd-card__title">{{ 'labels.heading.Loan Products' | translate }}</h3>
|
||||
<p class="pd-card__desc">{{ 'labels.text.Add new loan product or modify or inactivate loan product' | translate }}</p>
|
||||
<p class="pd-card__desc">
|
||||
{{ 'labels.text.Add new loan product or modify or inactivate loan product' | translate }}
|
||||
</p>
|
||||
</div>
|
||||
<i class="fas fa-chevron-right pd-card__arrow"></i>
|
||||
</a>
|
||||
@@ -38,7 +40,9 @@
|
||||
</div>
|
||||
<div class="pd-card__body">
|
||||
<h3 class="pd-card__title">{{ 'labels.heading.Savings Products' | translate }}</h3>
|
||||
<p class="pd-card__desc">{{ 'labels.text.Add new savings product or modify or inactivate savings product' | translate }}</p>
|
||||
<p class="pd-card__desc">
|
||||
{{ 'labels.text.Add new savings product or modify or inactivate savings product' | translate }}
|
||||
</p>
|
||||
</div>
|
||||
<i class="fas fa-chevron-right pd-card__arrow"></i>
|
||||
</a>
|
||||
@@ -62,7 +66,9 @@
|
||||
</div>
|
||||
<div class="pd-card__body">
|
||||
<h3 class="pd-card__title">{{ 'labels.heading.Share Products' | translate }}</h3>
|
||||
<p class="pd-card__desc">{{ 'labels.text.Add new share product or modify or inactivate share product' | translate }}</p>
|
||||
<p class="pd-card__desc">
|
||||
{{ 'labels.text.Add new share product or modify or inactivate share product' | translate }}
|
||||
</p>
|
||||
</div>
|
||||
<i class="fas fa-chevron-right pd-card__arrow"></i>
|
||||
</a>
|
||||
@@ -82,13 +88,19 @@
|
||||
</div>
|
||||
|
||||
<div #recurringDepositProducts>
|
||||
<a class="pd-card" [routerLink]="['recurring-deposit-products']" *mifosxHasPermission="'READ_RECURRINGDEPOSITPRODUCT'">
|
||||
<a
|
||||
class="pd-card"
|
||||
[routerLink]="['recurring-deposit-products']"
|
||||
*mifosxHasPermission="'READ_RECURRINGDEPOSITPRODUCT'"
|
||||
>
|
||||
<div class="pd-card__icon pd-card__icon--teal">
|
||||
<i class="fas fa-redo-alt"></i>
|
||||
</div>
|
||||
<div class="pd-card__body">
|
||||
<h3 class="pd-card__title">{{ 'labels.heading.Recurring Deposit Products' | translate }}</h3>
|
||||
<p class="pd-card__desc">{{ 'labels.text.Add, modify or inactivate a Recurring Deposit product' | translate }}</p>
|
||||
<p class="pd-card__desc">
|
||||
{{ 'labels.text.Add, modify or inactivate a Recurring Deposit product' | translate }}
|
||||
</p>
|
||||
</div>
|
||||
<i class="fas fa-chevron-right pd-card__arrow"></i>
|
||||
</a>
|
||||
@@ -112,7 +124,9 @@
|
||||
</div>
|
||||
<div class="pd-card__body">
|
||||
<h3 class="pd-card__title">{{ 'labels.heading.Charges' | translate }}</h3>
|
||||
<p class="pd-card__desc">{{ 'labels.text.Define charges/penalties for loan products, savings and deposit products' | translate }}</p>
|
||||
<p class="pd-card__desc">
|
||||
{{ 'labels.text.Define charges/penalties for loan products, savings and deposit products' | translate }}
|
||||
</p>
|
||||
</div>
|
||||
<i class="fas fa-chevron-right pd-card__arrow"></i>
|
||||
</a>
|
||||
@@ -129,13 +143,19 @@
|
||||
<i class="fas fa-chevron-right pd-card__arrow"></i>
|
||||
</a>
|
||||
|
||||
<a class="pd-card" [routerLink]="['delinquency-bucket-configurations']" *mifosxHasPermission="'READ_DELINQUENCY_BUCKET'">
|
||||
<a
|
||||
class="pd-card"
|
||||
[routerLink]="['delinquency-bucket-configurations']"
|
||||
*mifosxHasPermission="'READ_DELINQUENCY_BUCKET'"
|
||||
>
|
||||
<div class="pd-card__icon pd-card__icon--rose">
|
||||
<i class="fas fa-exclamation-triangle"></i>
|
||||
</div>
|
||||
<div class="pd-card__body">
|
||||
<h3 class="pd-card__title">{{ 'labels.heading.Delinquency Buckets' | translate }}</h3>
|
||||
<p class="pd-card__desc">{{ 'labels.text.Define delinquency day ranges and bucket set for loan products' | translate }}</p>
|
||||
<p class="pd-card__desc">
|
||||
{{ 'labels.text.Define delinquency day ranges and bucket set for loan products' | translate }}
|
||||
</p>
|
||||
</div>
|
||||
<i class="fas fa-chevron-right pd-card__arrow"></i>
|
||||
</a>
|
||||
|
||||
@@ -195,8 +195,13 @@ $gray-900: #0f172a;
|
||||
// ── Dark mode ──
|
||||
:host-context(.dark-theme) {
|
||||
.pd-header {
|
||||
&__title { color: #e2e8f0; }
|
||||
&__sub { color: #94a3b8; }
|
||||
&__title {
|
||||
color: #e2e8f0;
|
||||
}
|
||||
|
||||
&__sub {
|
||||
color: #94a3b8;
|
||||
}
|
||||
}
|
||||
|
||||
.pd-card {
|
||||
@@ -208,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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+9
-4
@@ -12,7 +12,12 @@
|
||||
<h2 class="shp-header__title">{{ 'labels.heading.Create Share Product' | translate }}</h2>
|
||||
</div>
|
||||
|
||||
<mat-tab-group class="shp-tabs" animationDuration="200ms" [preserveContent]="true" [(selectedIndex)]="selectedTabIndex">
|
||||
<mat-tab-group
|
||||
class="shp-tabs"
|
||||
animationDuration="200ms"
|
||||
[preserveContent]="true"
|
||||
[(selectedIndex)]="selectedTabIndex"
|
||||
>
|
||||
<mat-tab>
|
||||
<ng-template mat-tab-label>
|
||||
<i class="fas fa-info-circle shp-tab-icon"></i>
|
||||
@@ -120,19 +125,19 @@
|
||||
<div class="shp-action-bar__right">
|
||||
@if (selectedTabIndex > 0) {
|
||||
<button mat-raised-button (click)="selectedTabIndex = selectedTabIndex - 1">
|
||||
<i class="fas fa-arrow-left" style="margin-right: 8px;"></i>
|
||||
<i class="fas fa-arrow-left" style="margin-right: 8px"></i>
|
||||
{{ 'labels.buttons.Previous' | translate }}
|
||||
</button>
|
||||
}
|
||||
@if (selectedTabIndex < totalTabs - 1) {
|
||||
<button mat-raised-button color="primary" (click)="selectedTabIndex = selectedTabIndex + 1">
|
||||
{{ 'labels.buttons.Next' | translate }}
|
||||
<i class="fas fa-arrow-right" style="margin-left: 8px;"></i>
|
||||
<i class="fas fa-arrow-right" style="margin-left: 8px"></i>
|
||||
</button>
|
||||
}
|
||||
@if (shareProductFormValid && selectedTabIndex === totalTabs - 1) {
|
||||
<button mat-raised-button color="primary" (click)="submit()">
|
||||
<i class="fas fa-check" style="margin-right: 8px;"></i>
|
||||
<i class="fas fa-check" style="margin-right: 8px"></i>
|
||||
{{ 'labels.buttons.Submit' | translate }}
|
||||
</button>
|
||||
}
|
||||
|
||||
+47
-11
@@ -20,8 +20,16 @@ $primary: #1353a0;
|
||||
gap: 10px;
|
||||
margin-bottom: 20px;
|
||||
|
||||
&__icon { font-size: 20px; color: $primary; }
|
||||
&__title { margin: 0; font-size: 22px; font-weight: 500; }
|
||||
&__icon {
|
||||
font-size: 20px;
|
||||
color: $primary;
|
||||
}
|
||||
|
||||
&__title {
|
||||
margin: 0;
|
||||
font-size: 22px;
|
||||
font-weight: 500;
|
||||
}
|
||||
}
|
||||
|
||||
.shp-tabs {
|
||||
@@ -30,16 +38,38 @@ $primary: #1353a0;
|
||||
box-shadow: 0 2px 8px rgb(0 0 0 / 8%);
|
||||
|
||||
::ng-deep {
|
||||
.mat-mdc-tab-header { border-bottom: 1px solid rgb(0 0 0 / 8%); }
|
||||
.mat-mdc-tab { min-width: 100px; padding: 0 12px; height: 52px; }
|
||||
.mat-mdc-tab-body-wrapper { min-height: 200px; }
|
||||
.mat-mdc-tab-body { overflow: visible !important; }
|
||||
.mat-mdc-tab-body-content { overflow: visible !important; }
|
||||
.mat-mdc-tab-header {
|
||||
border-bottom: 1px solid rgb(0 0 0 / 8%);
|
||||
}
|
||||
|
||||
.mat-mdc-tab {
|
||||
min-width: 100px;
|
||||
padding: 0 12px;
|
||||
height: 52px;
|
||||
}
|
||||
|
||||
.mat-mdc-tab-body-wrapper {
|
||||
min-height: 200px;
|
||||
}
|
||||
|
||||
.mat-mdc-tab-body {
|
||||
overflow: visible !important;
|
||||
}
|
||||
|
||||
.mat-mdc-tab-body-content {
|
||||
overflow: visible !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.shp-tab-icon { margin-right: 8px; font-size: 14px; }
|
||||
.shp-tab-content { padding: 24px 16px; }
|
||||
.shp-tab-icon {
|
||||
margin-right: 8px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.shp-tab-content {
|
||||
padding: 24px 16px;
|
||||
}
|
||||
|
||||
.shp-action-bar {
|
||||
display: flex;
|
||||
@@ -49,6 +79,12 @@ $primary: #1353a0;
|
||||
padding: 16px 0;
|
||||
border-top: 1px solid rgb(0 0 0 / 8%);
|
||||
|
||||
&__cancel { color: rgb(0 0 0 / 60%); }
|
||||
&__right { display: flex; gap: 12px; }
|
||||
&__cancel {
|
||||
color: rgb(0 0 0 / 60%);
|
||||
}
|
||||
|
||||
&__right {
|
||||
display: flex;
|
||||
gap: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
+8
-1
@@ -25,7 +25,14 @@
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
|
||||
<button type="button" mat-raised-button color="primary" class="shpc-add-btn" (click)="addCharge(charge)" [disabled]="!charge.value">
|
||||
<button
|
||||
type="button"
|
||||
mat-raised-button
|
||||
color="primary"
|
||||
class="shpc-add-btn"
|
||||
(click)="addCharge(charge)"
|
||||
[disabled]="!charge.value"
|
||||
>
|
||||
<fa-icon icon="plus" class="m-r-10"></fa-icon>
|
||||
{{ 'labels.buttons.Add' | translate }}
|
||||
</button>
|
||||
|
||||
+35
-10
@@ -18,28 +18,53 @@ $gray-900: #202124;
|
||||
overflow: hidden;
|
||||
background: #fff;
|
||||
|
||||
& + & { margin-top: 16px; }
|
||||
& + & {
|
||||
margin-top: 16px;
|
||||
}
|
||||
|
||||
&__header {
|
||||
display: flex; align-items: center; gap: 10px;
|
||||
padding: 12px 24px; background: $gray-50; border-bottom: 1px solid $gray-200;
|
||||
i { font-size: 14px; color: $accent; }
|
||||
h3 { margin: 0; font-size: 14px; font-weight: 600; color: $gray-900; }
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
padding: 12px 24px;
|
||||
background: $gray-50;
|
||||
border-bottom: 1px solid $gray-200;
|
||||
|
||||
i {
|
||||
font-size: 14px;
|
||||
color: $accent;
|
||||
}
|
||||
|
||||
h3 {
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
color: $gray-900;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.shpcr-grid {
|
||||
display: grid; grid-template-columns: repeat(2, 1fr);
|
||||
gap: 4px 16px; padding: 16px 24px;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 4px 16px;
|
||||
padding: 16px 24px;
|
||||
|
||||
@media (width <= 600px) { grid-template-columns: 1fr; }
|
||||
@media (width <= 600px) {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
.shpcr-field {
|
||||
width: 100%;
|
||||
&--full { grid-column: 1 / -1; }
|
||||
|
||||
&--full {
|
||||
grid-column: 1 / -1;
|
||||
}
|
||||
}
|
||||
|
||||
.shpcr-checkbox-row {
|
||||
display: flex; align-items: center; padding: 4px 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 4px 0;
|
||||
}
|
||||
|
||||
+29
-8
@@ -19,21 +19,42 @@ $gray-900: #202124;
|
||||
background: #fff;
|
||||
|
||||
&__header {
|
||||
display: flex; align-items: center; gap: 10px;
|
||||
padding: 12px 24px; background: $gray-50; border-bottom: 1px solid $gray-200;
|
||||
i { font-size: 14px; color: $accent; }
|
||||
h3 { margin: 0; font-size: 14px; font-weight: 600; color: $gray-900; }
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
padding: 12px 24px;
|
||||
background: $gray-50;
|
||||
border-bottom: 1px solid $gray-200;
|
||||
|
||||
i {
|
||||
font-size: 14px;
|
||||
color: $accent;
|
||||
}
|
||||
|
||||
h3 {
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
color: $gray-900;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.shpd-grid {
|
||||
display: grid; grid-template-columns: repeat(2, 1fr);
|
||||
gap: 4px 16px; padding: 16px 24px;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 4px 16px;
|
||||
padding: 16px 24px;
|
||||
|
||||
@media (width <= 600px) { grid-template-columns: 1fr; }
|
||||
@media (width <= 600px) {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
.shpd-field {
|
||||
width: 100%;
|
||||
&--full { grid-column: 1 / -1; }
|
||||
|
||||
&--full {
|
||||
grid-column: 1 / -1;
|
||||
}
|
||||
}
|
||||
|
||||
+29
-8
@@ -19,21 +19,42 @@ $gray-900: #202124;
|
||||
background: #fff;
|
||||
|
||||
&__header {
|
||||
display: flex; align-items: center; gap: 10px;
|
||||
padding: 12px 24px; background: $gray-50; border-bottom: 1px solid $gray-200;
|
||||
i { font-size: 14px; color: $accent; }
|
||||
h3 { margin: 0; font-size: 14px; font-weight: 600; color: $gray-900; }
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
padding: 12px 24px;
|
||||
background: $gray-50;
|
||||
border-bottom: 1px solid $gray-200;
|
||||
|
||||
i {
|
||||
font-size: 14px;
|
||||
color: $accent;
|
||||
}
|
||||
|
||||
h3 {
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
color: $gray-900;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.shpt-grid {
|
||||
display: grid; grid-template-columns: repeat(2, 1fr);
|
||||
gap: 4px 16px; padding: 16px 24px;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 4px 16px;
|
||||
padding: 16px 24px;
|
||||
|
||||
@media (width <= 600px) { grid-template-columns: 1fr; }
|
||||
@media (width <= 600px) {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
.shpt-field {
|
||||
width: 100%;
|
||||
&--full { grid-column: 1 / -1; }
|
||||
|
||||
&--full {
|
||||
grid-column: 1 / -1;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user