Enhancement/inverstor search data (#1838)

* Investor Search data

* Investor module

---------

Co-authored-by: Jose Alberto Hernandez <alberto@blue-daemon.local>
This commit is contained in:
José Alberto Hernández
2023-08-10 01:53:42 -06:00
committed by GitHub
co-authored by Jose Alberto Hernandez
parent 861cf7a000
commit ed47d769e3
47 changed files with 1627 additions and 489 deletions
@@ -1,93 +1,22 @@
<div class="tab-container mat-typography">
<div fxFlexFill *ngIf="existActiveTransfer">
<h3>Active Asset Transfer</h3>
<div fxLayout="row" fxLayoutGap="32px" class="asset-transfer-container">
<table>
<tbody>
<tr>
<td fxFlex="25%">
<b>Status :</b>
</td>
<td fxFlex="25%" class="left">
<div [ngClass]="itemStatus(activeTransferData.status)">
<fa-icon icon="stop"></fa-icon>
<span class="m-l-10 status">{{activeTransferData.status}}</span>
</div>
</td>
<td fxFlex="25%">
<b>Owner External Id :</b>
</td>
<td fxFlex="25%" class="left">
<mifosx-external-identifier externalId="{{activeTransferData.owner.externalId}}" completed="true"></mifosx-external-identifier>
</td>
</tr>
<tr>
<td fxFlex="25%">
<b>Settlement Date :</b>
</td>
<td fxFlex="25%" class="left">
{{activeTransferData.settlementDate | dateFormat}}
</td>
<td fxFlex="25%">
<b>Effective Date :</b>
</td>
<td fxFlex="25%" class="left">
{{activeTransferData.effectiveFrom | dateFormat}}
</td>
</tr>
<tr>
<td fxFlex="25%">
<b>Details :</b>
</td>
<td fxFlex="75%" class="left">
<table>
<tbody>
<tr>
<td fxFlex="50%"><b>Principal Outstanding :</b></td>
<td fxFlex="50%" class="r-amount">{{activeTransferData.details.totalPrincipalOutstanding | formatNumber}}</td>
</tr>
<tr>
<td fxFlex="50%"><b>Interest Outstanding :</b></td>
<td fxFlex="50%" class="r-amount">{{activeTransferData.details.totalInterestOutstanding | formatNumber}}</td>
</tr>
<tr>
<td fxFlex="50%"><b>Fees Outstanding :</b></td>
<td fxFlex="50%" class="r-amount">{{activeTransferData.details.totalFeeChargesOutstanding | formatNumber}}</td>
</tr>
<tr>
<td fxFlex="50%"><b>Penalties Outstanding :</b></td>
<td fxFlex="50%" class="r-amount">{{activeTransferData.details.totalPenaltyChargesOutstanding | formatNumber}}</td>
</tr>
<tr>
<td fxFlex="50%"><b>Outstanding :</b></td>
<td fxFlex="50%" class="r-amount">{{activeTransferData.details.totalOutstanding | formatNumber}}</td>
</tr>
<tr>
<td fxFlex="50%"><b>Overpaid :</b></td>
<td fxFlex="50%" class="r-amount">{{activeTransferData.details.totalOverpaid | formatNumber}}</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
<mifosx-external-asset-transfer [transferData]="activeTransferData"></mifosx-external-asset-transfer>
</div>
<div fxLayout="row" fxLayoutAlign="start center">
<h3 fxFlex="90%">External Asset Owner</h3>
<div fxFlex="10%" *ngIf="canBeSaled()" >
<div fxFlex="10%" *ngIf="canBeSold()" >
<button mat-raised-button class="f-right" color="primary" (click)="saleLoan()" *mifosxHasPermission="'SALE_LOAN'">
<fa-icon icon="dollar-sign" class="m-r-10"></fa-icon>Sale Loan
<fa-icon icon="dollar-sign" class="m-r-10"></fa-icon>Sell Loan
</button>
</div>
<div fxFlex="10%" *ngIf="canBeCancelled()" >
<button mat-raised-button class="f-right" color="warn" (click)="cancelSaleLoan()" *mifosxHasPermission="'SALE_LOAN'">
<fa-icon icon="trash" class="m-r-10"></fa-icon>Cancel Sale Loan
<fa-icon icon="trash" class="m-r-10"></fa-icon>Cancel Sell Loan
</button>
</div>
@@ -1,7 +1,8 @@
import { Component, OnInit } from '@angular/core';
import { MatDialog } from '@angular/material/dialog';
import { ActivatedRoute, Router } from '@angular/router';
import { ExternalAssetOwnerService } from 'app/loans/external-asset-owner.service';
import { ExternalAssetOwner } from 'app/loans/services/external-asset-owner';
import { ExternalAssetOwnerService } from 'app/loans/services/external-asset-owner.service';
import { CancelDialogComponent } from 'app/shared/cancel-dialog/cancel-dialog.component';
@Component({
@@ -22,6 +23,7 @@ export class ExternalAssetOwnerTabComponent implements OnInit {
constructor(private route: ActivatedRoute,
private router: Router,
private dialog: MatDialog,
private externalAssetOwner: ExternalAssetOwner,
private externalAssetOwnerService: ExternalAssetOwnerService
) {
this.route.data.subscribe((data: { loanTransfersData: any, activeTransferData: any }) => {
@@ -39,52 +41,39 @@ export class ExternalAssetOwnerTabComponent implements OnInit {
}
itemCurrentStatus(item: any): string {
if (this.isBuyBackPending(item)) {
return item.status + ' PENDING';
}
return item.status;
return this.externalAssetOwner.itemCurrentStatus(item);
}
itemStatus(status: string): string {
return 'status-' + status.toLowerCase();
return this.externalAssetOwner.itemStatus(status);
}
isPending(item: any): boolean {
return (item.status === 'PENDING');
return this.externalAssetOwner.isPending(item);
}
isPendingOrCanceled(item: any): boolean {
return ((item.status === 'PENDING') || (item.status === 'CANCELLED') || this.isBuyBackPending(item));
return this.externalAssetOwner.isPendingOrCanceled(item);
}
isBuyBackPending(item: any): boolean {
return (item.status === 'BUYBACK' && item.effectiveTo === this.defaultDate);
return this.externalAssetOwner.isBuyBackPending(item);
}
canBeCancelled(): boolean {
return this.validateStatus('PENDING');
return this.externalAssetOwner.validateStatus(this.currentItem, 'PENDING');
}
canBeSaled(): boolean {
if (this.currentItem == null) {
return true;
}
return ['', 'CANCELLED'].includes(this.currentItem.status) || (this.currentItem.status === 'BUYBACK' && this.currentItem.effectiveTo !== this.defaultDate);
canBeSold(): boolean {
return this.externalAssetOwner.canBeSold(this.currentItem);
}
canBeBuyed(): boolean {
return this.validateStatus('ACTIVE');
}
private validateStatus(status: string): boolean {
if (this.currentItem != null) {
return (this.currentItem.status === status);
}
return false;
return this.externalAssetOwner.validateStatus(this.currentItem, 'ACTIVE');
}
saleLoan(): void {
this.router.navigate(['../actions/Sale Loan'], { relativeTo: this.route });
this.router.navigate(['../actions/Sell Loan'], { relativeTo: this.route });
}
cancelSaleLoan(): void {
@@ -0,0 +1,72 @@
<div fxLayout="row" fxLayoutGap="32px" class="asset-transfer-container">
<table>
<tbody>
<tr>
<td fxFlex="25%" class="m-l-5">
<b>Status :</b>
</td>
<td fxFlex="25%" class="m-l-5 left">
<div [ngClass]="itemStatus(transferData.status)">
<fa-icon icon="stop"></fa-icon>
<span class="m-l-5 status">{{transferData.status}}</span>
</div>
</td>
<td fxFlex="25%" class="m-l-5">
<b>Owner External Id :</b>
</td>
<td fxFlex="25%" class="m-l-5 left">
<mifosx-external-identifier externalId="{{transferData.owner.externalId}}" completed="true"></mifosx-external-identifier>
</td>
</tr>
<tr>
<td fxFlex="25%" class="m-l-5">
<b>Settlement Date :</b>
</td>
<td fxFlex="25%" class="m-l-5">
{{transferData.settlementDate | dateFormat}}
</td>
<td fxFlex="25%" class="m-l-5">
<b>Effective Date :</b>
</td>
<td fxFlex="25%" class="m-l-5">
{{transferData.effectiveFrom | dateFormat}}
</td>
</tr>
<tr>
<td fxFlex="25%" class="m-l-5">
<b>Details :</b>
</td>
<td fxFlex="75%" class="left">
<table>
<tbody>
<tr>
<td fxFlex="50%" class="m-l-5"><b>Principal Outstanding :</b></td>
<td fxFlex="50%" class="r-amount">{{transferData.details.totalPrincipalOutstanding | formatNumber}}</td>
</tr>
<tr>
<td fxFlex="50%" class="m-l-5"><b>Interest Outstanding :</b></td>
<td fxFlex="50%" class="r-amount">{{transferData.details.totalInterestOutstanding | formatNumber}}</td>
</tr>
<tr>
<td fxFlex="50%" class="m-l-5"><b>Fees Outstanding :</b></td>
<td fxFlex="50%" class="r-amount">{{transferData.details.totalFeeChargesOutstanding | formatNumber}}</td>
</tr>
<tr>
<td fxFlex="50%" class="m-l-5"><b>Penalties Outstanding :</b></td>
<td fxFlex="50%" class="r-amount">{{transferData.details.totalPenaltyChargesOutstanding | formatNumber}}</td>
</tr>
<tr>
<td fxFlex="50%" class="m-l-5"><b>Outstanding :</b></td>
<td fxFlex="50%" class="r-amount">{{transferData.details.totalOutstanding | formatNumber}}</td>
</tr>
<tr>
<td fxFlex="50%" class="m-l-5"><b>Overpaid :</b></td>
<td fxFlex="50%" class="r-amount">{{transferData.details.totalOverpaid | formatNumber}}</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
@@ -0,0 +1,8 @@
.asset-transfer-container {
height: 150px;
.status {
color: black;
}
}
@@ -0,0 +1,25 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ExternalAssetTransferComponent } from './external-asset-transfer.component';
describe('ExternalAssetTransferComponent', () => {
let component: ExternalAssetTransferComponent;
let fixture: ComponentFixture<ExternalAssetTransferComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ ExternalAssetTransferComponent ]
})
.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(ExternalAssetTransferComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
@@ -0,0 +1,23 @@
import { Component, Input, OnInit } from '@angular/core';
import { ExternalAssetOwner } from 'app/loans/services/external-asset-owner';
@Component({
selector: 'mifosx-external-asset-transfer',
templateUrl: './external-asset-transfer.component.html',
styleUrls: ['./external-asset-transfer.component.scss']
})
export class ExternalAssetTransferComponent implements OnInit {
/** Input Fields Data */
@Input() transferData: any;
constructor(private externalAssetOwner: ExternalAssetOwner) { }
ngOnInit(): void {
console.log(this.transferData);
}
itemStatus(status: string): string {
return this.externalAssetOwner.itemStatus(status);
}
}