Selaa lähdekoodia

pepper is ready

tags/2.037
Patrick Sun 4 vuotta sitten
vanhempi
commit
c5c11a8c68
15 muutettua tiedostoa jossa 236 lisäystä ja 12 poistoa
  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 Näytä tiedosto

import { LenderConnectiveIncomeComponent } from './pay-in/lender-connective-income/lender-connective-income.component'; 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 { 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 { 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';






LenderConnectiveIncomeComponent, LenderConnectiveIncomeComponent,
LenderResimacXlsIncomeComponent, LenderResimacXlsIncomeComponent,
LenderResimacPdfIncomeComponent, LenderResimacPdfIncomeComponent,
LenderPepperIncomeComponent,
], ],
imports: [ imports: [
BrowserModule, BrowserModule,

+ 2
- 1
src/app/list-all-loans/list-all-loans.component.html Näytä tiedosto

</kendo-grid-column-group> </kendo-grid-column-group>


<kendo-grid-column-group title="Loan Details" [columnMenu]="false" [headerClass]="'colGroupLoanDetails'"> <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> <ng-template kendoGridCellTemplate let-dataItem>
<app-biukop-rating <app-biukop-rating
[value]="dataItem.Rating" [value]="dataItem.Rating"

+ 1
- 1
src/app/list-all-rewards/list-all-rewards.component.ts Näytä tiedosto

public gridView: GridDataResult; public gridView: GridDataResult;
public state: State = { public state: State = {
skip: 0, skip: 0,
take: 10
take: 20
}; };
public loading = true; public loading = true;



+ 4
- 2
src/app/loan-edit/trail-income/trail-income.component.html Näytä tiedosto





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


<kendo-grid [data]="Loan.PayIn" <kendo-grid [data]="Loan.PayIn"
<kendo-grid-column field="Id" title="Id" width="50" editable="false"> <kendo-grid-column field="Id" title="Id" width="50" editable="false">
</kendo-grid-column> </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>


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

+ 6
- 3
src/app/loan-edit/trail-income/trail-income.component.ts Näytä tiedosto



const createFormGroup = dataItem => new FormGroup({ const createFormGroup = dataItem => new FormGroup({
Id: new FormControl({value: dataItem.Id, disabled: true}, Validators.required), 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), Ts: new FormControl(dataItem.Ts, Validators.required),
Balance: new FormControl(dataItem.Balance, Validators.required), Balance: new FormControl(dataItem.Balance, Validators.required),
OffsetBalance: new FormControl(dataItem.OffsetBalance, Validators.required), OffsetBalance: new FormControl(dataItem.OffsetBalance, Validators.required),


this.formGroup = createFormGroup({ this.formGroup = createFormGroup({
Id: 0, Id: 0,
Trail: 168,
IncomeAmount: 168,
IncomeType: 'Trail',
Ts: new Date(), Ts: new Date(),
Balance: balance, Balance: balance,
OffsetBalance: offsetBalance, OffsetBalance: offsetBalance,
pi.LoanNumber = this.Loan.LenderLoanNumber; pi.LoanNumber = this.Loan.LenderLoanNumber;
pi.OffsetBalance = v.OffsetBalance; pi.OffsetBalance = v.OffsetBalance;
pi.Settlement = this.Loan.Settlement; 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.Ts = new Date(v.Ts);
pi.UploadId = v.UploadId; pi.UploadId = v.UploadId;



+ 0
- 3
src/app/main-menu-items.ts Näytä tiedosto

{ text: 'list income', icon: 'dollar', url: './#list-income' }, { text: 'list income', icon: 'dollar', url: './#list-income' },
{ text: '--', separator: 'true' }, { text: '--', separator: 'true' },
{ text: 'Uploads', icon: 'dollar', url: './#lender-uploads' }, { 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 Näytä tiedosto

this.Balance = payload.Balance || 0; this.Balance = payload.Balance || 0;
this.Associate = payload.Associate || ''; this.Associate = payload.Associate || '';
this.Comm = payload.Comm || 0; this.Comm = payload.Comm || 0;
this.Type = payload.Type || '';
this.Type = this.mapIncomeType(payload.Type || '');
this.Percent = payload.Percent || 0; this.Percent = payload.Percent || 0;
this.Paid = payload.Paid || 0; this.Paid = payload.Paid || 0;
this.GST = payload.GST || 0; this.GST = payload.GST || 0;
this.matchedPayIn = payload.matchedPayIn || -1; 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 { private ensureLenderHasAgencyNameAppended(): void {
if ( this.Lender.indexOf(this.AgencyName) === -1 ){ if ( this.Lender.indexOf(this.AgencyName) === -1 ){
this.Lender += '_' + this.AgencyName; this.Lender += '_' + this.AgencyName;

+ 98
- 0
src/app/models/pay-in-pepper.model.ts Näytä tiedosto

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 Näytä tiedosto

import {PayInConnectiveModel} from './pay-in-connective.model'; import {PayInConnectiveModel} from './pay-in-connective.model';
import {PayInResimacXlsModel} from './pay-in-resimac-xls.mode'; import {PayInResimacXlsModel} from './pay-in-resimac-xls.mode';
import {PayInResimacPdfModel} from './pay-in-resimac-pdf.model'; import {PayInResimacPdfModel} from './pay-in-resimac-pdf.model';
import {PayInPepperModel} from './pay-in-pepper.model';






public Connective?: PayInConnectiveModel[]; public Connective?: PayInConnectiveModel[];
public ResimacXls?: PayInResimacXlsModel[]; public ResimacXls?: PayInResimacXlsModel[];
public ResimacPdf?: PayInResimacPdfModel[]; public ResimacPdf?: PayInResimacPdfModel[];
public Pepper?: PayInPepperModel[];


public IsDuplicate: boolean; public IsDuplicate: boolean;
public Uid?: string; // client side unique id when upload public Uid?: string; // client side unique id when upload
if (Array.isArray(payload.ResimacPdf)){ if (Array.isArray(payload.ResimacPdf)){
payload.ResimacPdf.forEach( v => { this.ResimacPdf.push(new PayInResimacPdfModel(v)); }); 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.IsDuplicate = payload.IsDuplicate || false;
this.Uid = payload.Uid || '' ; this.Uid = payload.Uid || '' ;

+ 1
- 1
src/app/pay-in/lender-connective-income/lender-connective-income.component.html Näytä tiedosto

<kendo-grid-column field="Balance" format='{0:c}' width="150" > </kendo-grid-column> <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="Associate" width="150"> </kendo-grid-column>
<kendo-grid-column field="Comm" format='{0:c}'> </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="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="Paid" format='{0:c}' width="150"> </kendo-grid-column>
<kendo-grid-column field="GST" 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 Näytä tiedosto

<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 Näytä tiedosto

kendo-grid{
height: 100%;
}

+ 25
- 0
src/app/pay-in/lender-pepper-income/lender-pepper-income.component.spec.ts Näytä tiedosto

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 Näytä tiedosto

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 Näytä tiedosto

[newPayInUpdate]="newPayInUpdateSubject | async" [newPayInUpdate]="newPayInUpdateSubject | async"
(Selected)="onSelected($event)"> (Selected)="onSelected($event)">
</app-lender-resimac-pdf-income> </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> </div>


</ng-template> </ng-template>

Loading…
Peruuta
Tallenna