瀏覽代碼

pepper is ready

tags/2.037
Patrick Sun 4 年之前
父節點
當前提交
c5c11a8c68
共有 15 個文件被更改,包括 236 次插入12 次删除
  1. +2
    -0
      src/app/app.module.ts
  2. +2
    -1
      src/app/list-all-loans/list-all-loans.component.html
  3. +1
    -1
      src/app/list-all-rewards/list-all-rewards.component.ts
  4. +4
    -2
      src/app/loan-edit/trail-income/trail-income.component.html
  5. +6
    -3
      src/app/loan-edit/trail-income/trail-income.component.ts
  6. +0
    -3
      src/app/main-menu-items.ts
  7. +13
    -1
      src/app/models/pay-in-connective.model.ts
  8. +98
    -0
      src/app/models/pay-in-pepper.model.ts
  9. +6
    -0
      src/app/models/upload.analysis.model.ts
  10. +1
    -1
      src/app/pay-in/lender-connective-income/lender-connective-income.component.html
  11. +39
    -0
      src/app/pay-in/lender-pepper-income/lender-pepper-income.component.html
  12. +3
    -0
      src/app/pay-in/lender-pepper-income/lender-pepper-income.component.scss
  13. +25
    -0
      src/app/pay-in/lender-pepper-income/lender-pepper-income.component.spec.ts
  14. +30
    -0
      src/app/pay-in/lender-pepper-income/lender-pepper-income.component.ts
  15. +6
    -0
      src/app/upload-detail/upload-detail.component.html

+ 2
- 0
src/app/app.module.ts 查看文件

@@ -105,6 +105,7 @@ import { LenderAaaIncomeComponent } from './pay-in/lender-aaa-income/lender-aaa-
import { LenderConnectiveIncomeComponent } from './pay-in/lender-connective-income/lender-connective-income.component';
import { LenderResimacXlsIncomeComponent } from './pay-in/lender-resimac-xls-income/lender-resimac-xls-income.component';
import { LenderResimacPdfIncomeComponent } from './pay-in/lender-resimac-pdf-income/lender-resimac-pdf-income.component';
import { LenderPepperIncomeComponent } from './pay-in/lender-pepper-income/lender-pepper-income.component';



@@ -179,6 +180,7 @@ export function initializeApp(appConfig: AppConfig): () => Promise<void> {
LenderConnectiveIncomeComponent,
LenderResimacXlsIncomeComponent,
LenderResimacPdfIncomeComponent,
LenderPepperIncomeComponent,
],
imports: [
BrowserModule,

+ 2
- 1
src/app/list-all-loans/list-all-loans.component.html 查看文件

@@ -100,7 +100,8 @@
</kendo-grid-column-group>

<kendo-grid-column-group title="Loan Details" [columnMenu]="false" [headerClass]="'colGroupLoanDetails'">
<kendo-grid-column field="Rating" title="Rating" width="150" [resizable]="false" [filterable]="false" [headerClass]="'colRating'" [class]="'topAlign colRating'">
<kendo-grid-column field="Rating" title="Rating" width="150" [resizable]="false"
[filterable]="false" [headerClass]="'colRating'" [class]="'topAlign colRating'">
<ng-template kendoGridCellTemplate let-dataItem>
<app-biukop-rating
[value]="dataItem.Rating"

+ 1
- 1
src/app/list-all-rewards/list-all-rewards.component.ts 查看文件

@@ -17,7 +17,7 @@ export class ListAllRewardsComponent implements OnInit {
public gridView: GridDataResult;
public state: State = {
skip: 0,
take: 10
take: 20
};
public loading = true;


+ 4
- 2
src/app/loan-edit/trail-income/trail-income.component.html 查看文件

@@ -29,7 +29,7 @@


<bkp-divider>
<kendo-icon [name]="'table'"></kendo-icon> &nbsp; Monthly Income
<kendo-icon [name]="'table'"></kendo-icon> &nbsp; Income of this Loan
</bkp-divider>

<kendo-grid [data]="Loan.PayIn"
@@ -56,7 +56,9 @@
<kendo-grid-column field="Id" title="Id" width="50" editable="false">
</kendo-grid-column>

<kendo-grid-column field="Trail" title="Trail Received" width="200" format="{0:c}" editor="numeric">
<kendo-grid-column field="IncomeAmount" title="Income Received" width="200" format="{0:c}" editor="numeric">
</kendo-grid-column>
<kendo-grid-column field="IncomeType" title="Income Type" width="200" editor="string">
</kendo-grid-column>

<kendo-grid-column field="Ts" title="Trail Date" editor="date">

+ 6
- 3
src/app/loan-edit/trail-income/trail-income.component.ts 查看文件

@@ -9,7 +9,8 @@ import {Router} from '@angular/router';

const createFormGroup = dataItem => new FormGroup({
Id: new FormControl({value: dataItem.Id, disabled: true}, Validators.required),
Trail : new FormControl(dataItem.Trail, Validators.required),
IncomeAmount : new FormControl(dataItem.IncomeAmount, Validators.required),
IncomeType : new FormControl(dataItem.IncomeType, Validators.required),
Ts: new FormControl(dataItem.Ts, Validators.required),
Balance: new FormControl(dataItem.Balance, Validators.required),
OffsetBalance: new FormControl(dataItem.OffsetBalance, Validators.required),
@@ -57,7 +58,8 @@ export class TrailIncomeComponent implements OnInit {

this.formGroup = createFormGroup({
Id: 0,
Trail: 168,
IncomeAmount: 168,
IncomeType: 'Trail',
Ts: new Date(),
Balance: balance,
OffsetBalance: offsetBalance,
@@ -107,7 +109,8 @@ export class TrailIncomeComponent implements OnInit {
pi.LoanNumber = this.Loan.LenderLoanNumber;
pi.OffsetBalance = v.OffsetBalance;
pi.Settlement = this.Loan.Settlement;
pi.IncomeAmount = v.Trail; //TODO: rename Trail to incomeAmount and add IncomeType
pi.IncomeAmount = v.IncomeAmount;
pi.IncomeType = v.IncomeType;
pi.Ts = new Date(v.Ts);
pi.UploadId = v.UploadId;


+ 0
- 3
src/app/main-menu-items.ts 查看文件

@@ -23,9 +23,6 @@ export const mainMenuItems: any[] = [
{ text: 'list income', icon: 'dollar', url: './#list-income' },
{ text: '--', separator: 'true' },
{ text: 'Uploads', icon: 'dollar', url: './#lender-uploads' },
{ text: '--', separator: 'true' },
{ text: 'Test Uploads by Id', icon: 'dollar', url: './#upload-details/1' },
{ text: 'Test Pay-in', icon: 'dollar', url: './#pay-in' },
]
},
{

+ 13
- 1
src/app/models/pay-in-connective.model.ts 查看文件

@@ -30,7 +30,7 @@ export class PayInConnectiveModel extends PayInLenderIncomeModel {
this.Balance = payload.Balance || 0;
this.Associate = payload.Associate || '';
this.Comm = payload.Comm || 0;
this.Type = payload.Type || '';
this.Type = this.mapIncomeType(payload.Type || '');
this.Percent = payload.Percent || 0;
this.Paid = payload.Paid || 0;
this.GST = payload.GST || 0;
@@ -38,6 +38,18 @@ export class PayInConnectiveModel extends PayInLenderIncomeModel {
this.matchedPayIn = payload.matchedPayIn || -1;
}

private mapIncomeType( input: string ): string {
const myMap = new Map();
myMap.set('tc', 'Trail');
myMap.set('ufc', 'Upfront');

if ( myMap.has(input.toLowerCase()) ) {
return myMap.get(input.toLowerCase());
}else{
return input;
}
}

private ensureLenderHasAgencyNameAppended(): void {
if ( this.Lender.indexOf(this.AgencyName) === -1 ){
this.Lender += '_' + this.AgencyName;

+ 98
- 0
src/app/models/pay-in-pepper.model.ts 查看文件

@@ -0,0 +1,98 @@
import {PayInLenderIncomeModel} from '../abstract/pay-in-lender.income.model';
import {PayInModel} from './pay-in.model';

export class PayInPepperModel extends PayInLenderIncomeModel {
public InvoiceDate: Date;

// Shared Fields for both upfront and Trailer
public LoanNumber: string;
public Customer: string;
public PrimaryIntroducer: string;
public NextGenNumber: string;
public Settlement: Date;
public NetAmount: number;
public GST: number;
public GrossAmount: number;


// Trailer Only
public Period: Date;
public Balance: number;
public SettlementAmount: number;
public TrailerMargin: number;


// Upfront only
public UpfrontRate: number;

// Derived
public IncomeType: string;
public IncomeAmount: number;

constructor(payload: Partial<PayInPepperModel>) {
super('Pepper', payload);
if ( payload.InvoiceDate !== undefined && payload.InvoiceDate !== null){
this.InvoiceDate = new Date(payload.InvoiceDate);
}else{
this.InvoiceDate = new Date('1800-01-01'); // some invalid date before 1900-01-01
}
this.LoanNumber = payload.LoanNumber || '';
this.Customer = payload.Customer || '';
this.PrimaryIntroducer = payload.PrimaryIntroducer || '';
this.NextGenNumber = payload.NextGenNumber || '';

if ( payload.Settlement !== undefined && payload.Settlement !== null){
this.Settlement = new Date(payload.Settlement);
}else{
this.Settlement = new Date('1800-01-01'); // some invalid date before 1900-01-01
}

this.NetAmount = payload.NetAmount || 0;
this.GST = payload.GST || 0;
this.GrossAmount = payload.GrossAmount || 0;

// Trailer only
if ( payload.Period !== undefined && payload.Period !== null){
this.Period = new Date(payload.Period);
}else{
this.Period = new Date('1800-01-01'); // some invalid date before 1900-01-01
}
this.Balance = payload.Balance || 0;
this.SettlementAmount = payload.SettlementAmount || 0;
this.TrailerMargin = payload.TrailerMargin || 0;

// Upfront only
this.UpfrontRate = payload.UpfrontRate || 0;

// Derived
this.IncomeType = payload.IncomeType || '';
this.IncomeAmount = payload.IncomeAmount || 0;
}

public convertToPayIn(): PayInModel {
const pi = new PayInModel({});
pi.Lender = 'Pepper';
pi.LoanNumber = this.LoanNumber;
pi.Amount = this.SettlementAmount;
pi.Settlement = this.Settlement;
pi.IncomeAmount = this.IncomeAmount;
pi.IncomeType = this.IncomeType;
pi.Balance = this.Balance;
pi.OffsetBalance = -1;
if ( this.IncomeType.toLowerCase() === 'upfront' ){
pi.Ts = this.InvoiceDate;
}else{
pi.Ts = this.Period;
}

return pi;
}

public isMatch(pi: PayInModel): boolean{
return this.LoanNumber === pi.LoanNumber && this.LoanNumber !== '' &&
this.AgencyName === pi.Lender && this.AgencyName !== '' &&
this.IncomeAmount === pi.IncomeAmount &&
this.Balance === pi.Balance &&
this.IncomeType.toLowerCase() === pi.IncomeType.toLowerCase();
}
}

+ 6
- 0
src/app/models/upload.analysis.model.ts 查看文件

@@ -4,6 +4,7 @@ import {PayInAAARowModel} from './Pay.In.AAA.Row.model';
import {PayInConnectiveModel} from './pay-in-connective.model';
import {PayInResimacXlsModel} from './pay-in-resimac-xls.mode';
import {PayInResimacPdfModel} from './pay-in-resimac-pdf.model';
import {PayInPepperModel} from './pay-in-pepper.model';



@@ -17,6 +18,7 @@ export class UploadAnalysisModel {
public Connective?: PayInConnectiveModel[];
public ResimacXls?: PayInResimacXlsModel[];
public ResimacPdf?: PayInResimacPdfModel[];
public Pepper?: PayInPepperModel[];

public IsDuplicate: boolean;
public Uid?: string; // client side unique id when upload
@@ -57,6 +59,10 @@ export class UploadAnalysisModel {
if (Array.isArray(payload.ResimacPdf)){
payload.ResimacPdf.forEach( v => { this.ResimacPdf.push(new PayInResimacPdfModel(v)); });
}
this.Pepper = [];
if (Array.isArray(payload.Pepper)){
payload.Pepper.forEach(v => { this.Pepper.push (new PayInPepperModel(v)); });
}

this.IsDuplicate = payload.IsDuplicate || false;
this.Uid = payload.Uid || '' ;

+ 1
- 1
src/app/pay-in/lender-connective-income/lender-connective-income.component.html 查看文件

@@ -15,7 +15,7 @@
<kendo-grid-column field="Balance" format='{0:c}' width="150" > </kendo-grid-column>
<kendo-grid-column field="Associate" width="150"> </kendo-grid-column>
<kendo-grid-column field="Comm" format='{0:c}'> </kendo-grid-column>
<kendo-grid-column field="Type" width="50"> </kendo-grid-column>
<kendo-grid-column field="Type" width="150"> </kendo-grid-column>
<kendo-grid-column field="Percent" format='{0:p}' width="80"> </kendo-grid-column>
<kendo-grid-column field="Paid" format='{0:c}' width="150"> </kendo-grid-column>
<kendo-grid-column field="GST" format='{0:c}' width="150"> </kendo-grid-column>

+ 39
- 0
src/app/pay-in/lender-pepper-income/lender-pepper-income.component.html 查看文件

@@ -0,0 +1,39 @@
<kendo-grid [data]="data" (cellClick)="onCellClick($event)" [selectable]="true">
<ng-template kendoGridToolbarTemplate>
{{ AgencyName }} - <span> {{InvoiceDate | date:'longDate'}} </span>
</ng-template>

<kendo-grid-column *ngIf="IncomeType=='trail'" field="Period" title="Period" format='{0:yyyy MMMM}' width="150"> </kendo-grid-column>
<kendo-grid-column *ngIf="IncomeType=='trail'" field="IncomeAmount" width="150" format='{0:c}' > </kendo-grid-column>
<kendo-grid-column field="LoanNumber" width="150"> </kendo-grid-column>
<kendo-grid-column field="Customer" width="150"> </kendo-grid-column>
<kendo-grid-column field="PrimaryIntroducer" width="150" > </kendo-grid-column>
<kendo-grid-column field="NextGenNumber" width="100" > </kendo-grid-column>
<kendo-grid-column field="Settlement" width="150" format='{0:MM/dd/yyyy}'>
<ng-template kendoGridCellTemplate let-dataItem>
<div *ngIf="dataItem.Settlement != null && dataItem.Settlement >= Epoc" >
{{ dataItem.Settlement | date: 'yyyy-MM-dd' }}
</div>
</ng-template>
</kendo-grid-column>
<kendo-grid-column field="Balance" width="150" format='{0:c}' > </kendo-grid-column>

<kendo-grid-column *ngIf="IncomeType=='trail'" field="SettlementAmount" format='{0:c}' width="150"> </kendo-grid-column>
<kendo-grid-column *ngIf="IncomeType=='trail'" field="TrailerMargin" width="150"> </kendo-grid-column>

<kendo-grid-column *ngIf="IncomeType=='upfront'" field="UpfrontRate" width="150" > </kendo-grid-column>


<kendo-grid-column field="NetAmount" width="150" format='{0:c}' > </kendo-grid-column>
<kendo-grid-column field="GST" width="150" format='{0:c}' > </kendo-grid-column>
<kendo-grid-column field="GrossAmount" width="150" format='{0:c}' > </kendo-grid-column>

<kendo-grid-column field="matchedPayIn" title="Matched" width="200" format='{0:c}'>
<ng-template kendoGridCellTemplate let-dataItem>
<kendo-icon *ngIf="dataItem.matchedPayIn === -1" [name]="'close-circle'" [size]="'small'" [themeColor]="'warning'"></kendo-icon>
<kendo-icon *ngIf="dataItem.matchedPayIn !== -1" [name]="'tick'" [size]="'small'" [themeColor]="'success'"></kendo-icon>
{{ dataItem.matchedPayIn === -1? 'Not matched': dataItem.matchedPayIn.Id}}
</ng-template>
</kendo-grid-column>

</kendo-grid>

+ 3
- 0
src/app/pay-in/lender-pepper-income/lender-pepper-income.component.scss 查看文件

@@ -0,0 +1,3 @@
kendo-grid{
height: 100%;
}

+ 25
- 0
src/app/pay-in/lender-pepper-income/lender-pepper-income.component.spec.ts 查看文件

@@ -0,0 +1,25 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';

import { LenderPepperIncomeComponent } from './lender-pepper-income.component';

describe('LenderPepperIncomeComponent', () => {
let component: LenderPepperIncomeComponent;
let fixture: ComponentFixture<LenderPepperIncomeComponent>;

beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ LenderPepperIncomeComponent ]
})
.compileComponents();
});

beforeEach(() => {
fixture = TestBed.createComponent(LenderPepperIncomeComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});

it('should create', () => {
expect(component).toBeTruthy();
});
});

+ 30
- 0
src/app/pay-in/lender-pepper-income/lender-pepper-income.component.ts 查看文件

@@ -0,0 +1,30 @@
import {Component, OnChanges, OnInit} from '@angular/core';

import {LenderIncomeAbstractDirective} from '../../abstract/lender-income-abstract.directive';
import {PayInPepperModel} from '../../models/pay-in-pepper.model';

@Component({
selector: 'app-lender-pepper-income',
templateUrl: './lender-pepper-income.component.html',
styleUrls: ['./lender-pepper-income.component.scss']
})
export class LenderPepperIncomeComponent extends LenderIncomeAbstractDirective implements OnInit, OnChanges {
InvoiceDate = new Date();
IncomeType = '';
Epoc = new Date('1900-01-01');
constructor() { super('Pepper'); }

ngOnInit(): void {
this.analysis.Pepper.forEach(v => {
v.matchedPayIn = this.matchPayIn(v);
this.IncomeType = v.IncomeType.toLowerCase();
this.InvoiceDate = v.InvoiceDate;
console.log(v.InvoiceDate, this.InvoiceDate);
this.data.push(new PayInPepperModel(v));
});
}

ngOnChanges(changes): void {
super.OnChanges(changes);
}
}

+ 6
- 0
src/app/upload-detail/upload-detail.component.html 查看文件

@@ -75,6 +75,12 @@
[newPayInUpdate]="newPayInUpdateSubject | async"
(Selected)="onSelected($event)">
</app-lender-resimac-pdf-income>
<app-lender-pepper-income *ngIf="LenderFormat === 'Pepper'"
[analysis]="ua"
[payIn]="payIn.gridData.data"
[newPayInUpdate]="newPayInUpdateSubject | async"
(Selected)="onSelected($event)">
</app-lender-pepper-income>
</div>

</ng-template>

Loading…
取消
儲存