WEB-269: Buy-Down fees Accounting for non merchant product

This commit is contained in:
Jose Alberto Hernandez
2025-08-13 18:09:06 -05:00
parent 64f62a705d
commit 59cad0a73c
29 changed files with 145 additions and 71 deletions
@@ -65,13 +65,10 @@ export class LoansActiveClientMembersComponent implements OnInit {
];
ngOnInit(): void {
// console.log("Active Client Members in LoansActiveClientMembersComponent:", this.activeClientMembers);
this.dataSource = new MatTableDataSource<any>(this.activeClientMembers);
}
get isValid() {
// console.log("LoansActiveClientMembersComponent isValid:", this.selectedClientMembers?.selectedMembers?.reduce((acc: any, cur: any) => acc + (cur.principal ?? 0), 0) > 0);
return (
!this.activeClientMembers ||
this.selectedClientMembers?.selectedMembers?.reduce((acc: any, cur: any) => acc + (cur.principal ?? 0), 0) > 0
@@ -123,6 +123,11 @@
<span class="flex-50"> {{ loanDetails.buyDownFeeIncomeType?.value | translateKey: 'catalogs' }} </span>
</div>
<div class="flex-fill layout-row" *ngIf="loanDetails.enableBuyDownFee">
<span class="flex-50"> {{ 'labels.inputs.Merchant Buy down fee' | translate }}</span>
<span class="flex-50"> {{ loanDetails.merchantBuyDownFee | yesNo }} </span>
</div>
<div class="flex-fill layout-row">
<span class="flex-50"> {{ 'labels.inputs.Grace: On Principal Payment' | translate }}</span>
<span class="flex-50"> {{ loanDetails.graceOnPrincipalPayment }} </span>
@@ -14,41 +14,41 @@
<ng-container matColumnDef="buyDownFeeDate">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.heading.Date' | translate }}</th>
<td mat-cell *matCellDef="let item">
{{ item.buyDownFeeDate | date: 'mediumDate' }}
{{ item.buyDownFeeDate | dateFormat }}
</td>
</ng-container>
<ng-container matColumnDef="buyDownFeeAmount">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.heading.Fee Amount' | translate }}</th>
<td mat-cell *matCellDef="let item">
<td mat-cell class="r-amount" *matCellDef="let item">
{{ item.buyDownFeeAmount | formatNumber: '0.00' }}
</td>
</ng-container>
<ng-container matColumnDef="amortizedAmount">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.heading.Amortized Amount' | translate }}</th>
<td mat-cell *matCellDef="let item">
<td mat-cell class="r-amount" *matCellDef="let item">
{{ item.amortizedAmount | formatNumber: '0.00' }}
</td>
</ng-container>
<ng-container matColumnDef="notYetAmortizedAmount">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.heading.Not Yet Amortized Amount' | translate }}</th>
<td mat-cell *matCellDef="let item">
<td mat-cell class="r-amount" *matCellDef="let item">
{{ item.notYetAmortizedAmount | formatNumber: '0.00' }}
</td>
</ng-container>
<ng-container matColumnDef="adjustedAmount">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.heading.Adjusted Amount' | translate }}</th>
<td mat-cell *matCellDef="let item">
<td mat-cell class="r-amount" *matCellDef="let item">
{{ item.adjustedAmount | formatNumber: '0.00' }}
</td>
</ng-container>
<ng-container matColumnDef="chargedOffAmount">
<th mat-header-cell *matHeaderCellDef>{{ 'labels.heading.Charged Off Amount' | translate }}</th>
<td mat-cell *matCellDef="let item">
<td mat-cell class="r-amount" *matCellDef="let item">
{{ item.chargedOffAmount | formatNumber: '0.00' }}
</td>
</ng-container>
@@ -16,7 +16,7 @@ import { FormatNumberPipe } from '@pipes/format-number.pipe';
import { STANDALONE_SHARED_IMPORTS } from 'app/standalone-shared.module';
import { LoansService } from '../../loans.service';
import { BuyDownFeeAmortizationDetails } from '../../models/loan-account.model';
import { DatePipe } from '@angular/common';
import { DateFormatPipe } from '@pipes/date-format.pipe';
@Component({
selector: 'mifosx-loan-buy-down-fees-tab',
@@ -35,7 +35,7 @@ import { DatePipe } from '@angular/common';
MatRowDef,
MatRow,
FormatNumberPipe,
DatePipe
DateFormatPipe
]
})
export class LoanBuyDownFeesTabComponent implements OnInit {