diff --git a/src/app/abstract/lender-income-abstract.directive.ts b/src/app/abstract/lender-income-abstract.directive.ts new file mode 100644 index 0000000..1e70e5b --- /dev/null +++ b/src/app/abstract/lender-income-abstract.directive.ts @@ -0,0 +1,62 @@ +import {Directive, EventEmitter, Injectable, Input, OnChanges, Output} from '@angular/core'; +import {UploadAnalysisModel} from '../models/upload.analysis.model'; +import {PayInModel} from '../models/pay-in.model'; +import {PayInAAARowModel} from '../models/Pay.In.AAA.Row.model'; +import {PayInLenderIncomeModel} from './pay-in-lender.income.model'; +import {CellCloseEvent} from '@progress/kendo-angular-grid'; + +@Directive() +export class LenderIncomeAbstractDirective { + @Input() public analysis = new UploadAnalysisModel({}); + @Input() newPayInUpdate: PayInModel; + @Output() Selected: EventEmitter = new EventEmitter(); + public data: PayInLenderIncomeModel[] = []; + @Input() payIn: PayInModel[] = []; + + constructor(protected AgencyName: string) { + } + + OnChanges(changes): void { + if (changes.newPayInUpdate) { + const piNew = changes.newPayInUpdate.currentValue as PayInModel; + this.onNewPayInUpdate(piNew); + } + if (changes.payIn){ + this.data.forEach( v => { + v.matchedPayIn = this.matchPayIn(v); + }); + } + } + + private onNewPayInUpdate(piNew: PayInModel): void { + this.data.forEach(value => { + const v = value as PayInLenderIncomeModel; + // remove old matches + if (v.matchedPayIn !== -1 && v.matchedPayIn.Id === piNew.Id) { + v.matchedPayIn = -1; + } + + // add new matches + if (this.isMatch(v, piNew)) { + v.matchedPayIn = piNew; + } + }); + } + + public onCellClick(event: CellCloseEvent): void{ + this.Selected.emit(event.dataItem.asPayIn()); + } + + protected matchPayIn(v: PayInLenderIncomeModel): PayInModel | -1 { + const idx = this.payIn.findIndex( pi => this.isMatch(v, pi) ); + if ( idx === -1 ) { return -1; } + return this.payIn[idx]; + } + + protected isMatch( v: PayInLenderIncomeModel, pi: PayInModel): boolean { + if ( v === null || pi === null ){ + return false; + } + return v.isMatch(pi); + } +} diff --git a/src/app/abstract/pay-in-lender.income.model.ts b/src/app/abstract/pay-in-lender.income.model.ts new file mode 100644 index 0000000..2e6c9dc --- /dev/null +++ b/src/app/abstract/pay-in-lender.income.model.ts @@ -0,0 +1,18 @@ +import {PayInModel} from '../models/pay-in.model'; + +export abstract class PayInLenderIncomeModel { + public matchedPayIn?: PayInModel | -1; + abstract convertToPayIn(): PayInModel; + abstract isMatch(pi: PayInModel): boolean; + protected constructor(protected AgencyName: string, payload: Partial){ + this.matchedPayIn = payload.matchedPayIn || -1; + } + + + public asPayIn(): PayInModel { + if (this.matchedPayIn !== undefined && this.matchedPayIn !== -1) { + return this.matchedPayIn; + } + return this.convertToPayIn(); + } +} diff --git a/src/app/models/Pay.In.AAA.Row.model.ts b/src/app/models/Pay.In.AAA.Row.model.ts index 663e419..b581d0a 100644 --- a/src/app/models/Pay.In.AAA.Row.model.ts +++ b/src/app/models/Pay.In.AAA.Row.model.ts @@ -1,8 +1,8 @@ import {PayInModel} from './pay-in.model'; +import {PayInLenderIncomeModel} from '../abstract/pay-in-lender.income.model'; -export class PayInAAARowModel { - private Lender = 'AAA'; +export class PayInAAARowModel extends PayInLenderIncomeModel { public Period: Date; public LoanNumber: string; public Settlement: Date; @@ -10,24 +10,21 @@ export class PayInAAARowModel { public Balance: number; public InTrail: number; - public matchedPayIn?: PayInModel | -1; + constructor(payload: Partial){ + super('AAA', payload); this.Period = new Date(payload.Period); this.LoanNumber = payload.LoanNumber || ''; this.Settlement = new Date(payload.Settlement); this.LoanFacility = payload.LoanFacility || 0; this.Balance = payload.Balance || -1; this.InTrail = payload.InTrail || 0; - this.matchedPayIn = payload.matchedPayIn || -1; } - public asPayIn(): PayInModel { - if ( this.matchedPayIn !== undefined && this.matchedPayIn !== -1 ) { - return this.matchedPayIn; - } + public convertToPayIn(): PayInModel { const pi = new PayInModel({}); - pi.Lender = this.Lender; + pi.Lender = this.AgencyName; pi.LoanNumber = this.LoanNumber; pi.Amount = this.LoanFacility; pi.Settlement = this.Settlement; @@ -36,13 +33,12 @@ export class PayInAAARowModel { pi.Balance = this.Balance; pi.OffsetBalance = -1; pi.Ts = this.Period; - return pi; } public isMatch(pi: PayInModel): boolean { return this.LoanNumber === pi.LoanNumber && this.LoanNumber !== '' && - this.Lender === pi.Lender && this.Lender !== '' && + this.AgencyName === pi.Lender && this.AgencyName !== '' && this.InTrail === pi.IncomeAmount && this.Balance === pi.Balance && 'Trail' === pi.IncomeType; diff --git a/src/app/models/dist/sample_product.js b/src/app/models/dist/sample_product.js deleted file mode 100644 index 0c39991..0000000 --- a/src/app/models/dist/sample_product.js +++ /dev/null @@ -1,1418 +0,0 @@ -"use strict"; -exports.__esModule = true; -exports.products = exports.sampleProducts = void 0; -exports.sampleProducts = [ - { - "ProductID": 1, - "ProductName": "Chai11", - "SupplierID": 1, - "CategoryID": 1, - "QuantityPerUnit": "10 boxes x 20 bags", - "UnitPrice": 18, - "UnitsInStock": 39, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - }, - "FirstOrderedOn": new Date(1996, 8, 20) - }, - { - "ProductID": 2, - "ProductName": "Chang", - "SupplierID": 1, - "CategoryID": 1, - "QuantityPerUnit": "24 - 12 oz bottles", - "UnitPrice": 19, - "UnitsInStock": 17, - "UnitsOnOrder": 40, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - }, - "FirstOrderedOn": new Date(1996, 7, 12) - }, - { - "ProductID": 3, - "ProductName": "Aniseed Syrup", - "SupplierID": 1, - "CategoryID": 2, - "QuantityPerUnit": "12 - 550 ml bottles", - "UnitPrice": 10, - "UnitsInStock": 13, - "UnitsOnOrder": 70, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 8, 26) - }, - { - "ProductID": 4, - "ProductName": "Chef Anton's Cajun Seasoning", - "SupplierID": 2, - "CategoryID": 2, - "QuantityPerUnit": "48 - 6 oz jars", - "UnitPrice": 22, - "UnitsInStock": 53, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 9, 19) - }, - { - "ProductID": 5, - "ProductName": "Chef Anton's Gumbo Mix", - "SupplierID": 2, - "CategoryID": 2, - "QuantityPerUnit": "36 boxes", - "UnitPrice": 21.35, - "UnitsInStock": 0, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 7, 17) - }, - { - "ProductID": 6, - "ProductName": "Grandma's Boysenberry Spread", - "SupplierID": 3, - "CategoryID": 2, - "QuantityPerUnit": "12 - 8 oz jars", - "UnitPrice": 25, - "UnitsInStock": 120, - "UnitsOnOrder": 0, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 9, 19) - }, - { - "ProductID": 7, - "ProductName": "Uncle Bob's Organic Dried Pears", - "SupplierID": 3, - "CategoryID": 7, - "QuantityPerUnit": "12 - 1 lb pkgs.", - "UnitPrice": 30, - "UnitsInStock": 15, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Category": { - "CategoryID": 7, - "CategoryName": "Produce", - "Description": "Dried fruit and bean curd" - }, - "FirstOrderedOn": new Date(1996, 7, 22) - }, - { - "ProductID": 8, - "ProductName": "Northwoods Cranberry Sauce", - "SupplierID": 3, - "CategoryID": 2, - "QuantityPerUnit": "12 - 12 oz jars", - "UnitPrice": 40, - "UnitsInStock": 6, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - "FirstOrderedOn": new Date(1996, 11, 1) - }, - { - "ProductID": 9, - "ProductName": "Mishi Kobe Niku", - "SupplierID": 4, - "CategoryID": 6, - "QuantityPerUnit": "18 - 500 g pkgs.", - "UnitPrice": 97, - "UnitsInStock": 29, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 6, - "CategoryName": "Meat/Poultry", - "Description": "Prepared meats" - }, - "FirstOrderedOn": new Date(1997, 1, 21) - }, - { - "ProductID": 10, - "ProductName": "Ikura", - "SupplierID": 4, - "CategoryID": 8, - "QuantityPerUnit": "12 - 200 ml jars", - "UnitPrice": 31, - "UnitsInStock": 31, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 8, - "CategoryName": "Seafood", - "Description": "Seaweed and fish" - }, - "FirstOrderedOn": new Date(1996, 8, 5) - } -]; -exports.products = [{ - "ProductID": 1, - "ProductName": "Chai", - "SupplierID": 1, - "CategoryID": 1, - "QuantityPerUnit": "10 boxes x 20 bags", - "UnitPrice": 18.0000, - "UnitsInStock": 39, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - } - }, { - "ProductID": 2, - "ProductName": "Chang", - "SupplierID": 1, - "CategoryID": 1, - "QuantityPerUnit": "24 - 12 oz bottles", - "UnitPrice": 19.0000, - "UnitsInStock": 17, - "UnitsOnOrder": 40, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - } - }, { - "ProductID": 3, - "ProductName": "Aniseed Syrup", - "SupplierID": 1, - "CategoryID": 2, - "QuantityPerUnit": "12 - 550 ml bottles", - "UnitPrice": 10.0000, - "UnitsInStock": 13, - "UnitsOnOrder": 70, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, { - "ProductID": 4, - "ProductName": "Chef Anton's Cajun Seasoning", - "SupplierID": 2, - "CategoryID": 2, - "QuantityPerUnit": "48 - 6 oz jars", - "UnitPrice": 22.0000, - "UnitsInStock": 53, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, { - "ProductID": 5, - "ProductName": "Chef Anton's Gumbo Mix", - "SupplierID": 2, - "CategoryID": 2, - "QuantityPerUnit": "36 boxes", - "UnitPrice": 21.3500, - "UnitsInStock": 0, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, { - "ProductID": 6, - "ProductName": "Grandma's Boysenberry Spread", - "SupplierID": 3, - "CategoryID": 2, - "QuantityPerUnit": "12 - 8 oz jars", - "UnitPrice": 25.0000, - "UnitsInStock": 120, - "UnitsOnOrder": 0, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, { - "ProductID": 7, - "ProductName": "Uncle Bob's Organic Dried Pears", - "SupplierID": 3, - "CategoryID": 7, - "QuantityPerUnit": "12 - 1 lb pkgs.", - "UnitPrice": 30.0000, - "UnitsInStock": 15, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Category": { - "CategoryID": 7, - "CategoryName": "Produce", - "Description": "Dried fruit and bean curd" - } - }, { - "ProductID": 8, - "ProductName": "Northwoods Cranberry Sauce", - "SupplierID": 3, - "CategoryID": 2, - "QuantityPerUnit": "12 - 12 oz jars", - "UnitPrice": 40.0000, - "UnitsInStock": 6, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, { - "ProductID": 9, - "ProductName": "Mishi Kobe Niku", - "SupplierID": 4, - "CategoryID": 6, - "QuantityPerUnit": "18 - 500 g pkgs.", - "UnitPrice": 97.0000, - "UnitsInStock": 29, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 6, - "CategoryName": "Meat/Poultry", - "Description": "Prepared meats" - } - }, { - "ProductID": 10, - "ProductName": "Ikura", - "SupplierID": 4, - "CategoryID": 8, - "QuantityPerUnit": "12 - 200 ml jars", - "UnitPrice": 31.0000, - "UnitsInStock": 31, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 8, - "CategoryName": "Seafood", - "Description": "Seaweed and fish" - } - }, { - "ProductID": 11, - "ProductName": "Queso Cabrales", - "SupplierID": 5, - "CategoryID": 4, - "QuantityPerUnit": "1 kg pkg.", - "UnitPrice": 21.0000, - "UnitsInStock": 22, - "UnitsOnOrder": 30, - "ReorderLevel": 30, - "Discontinued": false, - "Category": { - "CategoryID": 4, - "CategoryName": "Dairy Products", - "Description": "Cheeses" - } - }, { - "ProductID": 12, - "ProductName": "Queso Manchego La Pastora", - "SupplierID": 5, - "CategoryID": 4, - "QuantityPerUnit": "10 - 500 g pkgs.", - "UnitPrice": 38.0000, - "UnitsInStock": 86, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 4, - "CategoryName": "Dairy Products", - "Description": "Cheeses" - } - }, { - "ProductID": 13, - "ProductName": "Konbu", - "SupplierID": 6, - "CategoryID": 8, - "QuantityPerUnit": "2 kg box", - "UnitPrice": 6.0000, - "UnitsInStock": 24, - "UnitsOnOrder": 0, - "ReorderLevel": 5, - "Discontinued": false, - "Category": { - "CategoryID": 8, - "CategoryName": "Seafood", - "Description": "Seaweed and fish" - } - }, { - "ProductID": 14, - "ProductName": "Tofu", - "SupplierID": 6, - "CategoryID": 7, - "QuantityPerUnit": "40 - 100 g pkgs.", - "UnitPrice": 23.2500, - "UnitsInStock": 35, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 7, - "CategoryName": "Produce", - "Description": "Dried fruit and bean curd" - } - }, { - "ProductID": 15, - "ProductName": "Genen Shouyu", - "SupplierID": 6, - "CategoryID": 2, - "QuantityPerUnit": "24 - 250 ml bottles", - "UnitPrice": 15.5000, - "UnitsInStock": 39, - "UnitsOnOrder": 0, - "ReorderLevel": 5, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, { - "ProductID": 16, - "ProductName": "Pavlova", - "SupplierID": 7, - "CategoryID": 3, - "QuantityPerUnit": "32 - 500 g boxes", - "UnitPrice": 17.4500, - "UnitsInStock": 29, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Category": { - "CategoryID": 3, - "CategoryName": "Confections", - "Description": "Desserts, candies, and sweet breads" - } - }, { - "ProductID": 17, - "ProductName": "Alice Mutton", - "SupplierID": 7, - "CategoryID": 6, - "QuantityPerUnit": "20 - 1 kg tins", - "UnitPrice": 39.0000, - "UnitsInStock": 0, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 6, - "CategoryName": "Meat/Poultry", - "Description": "Prepared meats" - } - }, { - "ProductID": 18, - "ProductName": "Carnarvon Tigers", - "SupplierID": 7, - "CategoryID": 8, - "QuantityPerUnit": "16 kg pkg.", - "UnitPrice": 62.5000, - "UnitsInStock": 42, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 8, - "CategoryName": "Seafood", - "Description": "Seaweed and fish" - } - }, { - "ProductID": 19, - "ProductName": "Teatime Chocolate Biscuits", - "SupplierID": 8, - "CategoryID": 3, - "QuantityPerUnit": "10 boxes x 12 pieces", - "UnitPrice": 9.2000, - "UnitsInStock": 25, - "UnitsOnOrder": 0, - "ReorderLevel": 5, - "Discontinued": false, - "Category": { - "CategoryID": 3, - "CategoryName": "Confections", - "Description": "Desserts, candies, and sweet breads" - } - }, { - "ProductID": 20, - "ProductName": "Sir Rodney's Marmalade", - "SupplierID": 8, - "CategoryID": 3, - "QuantityPerUnit": "30 gift boxes", - "UnitPrice": 81.0000, - "UnitsInStock": 40, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 3, - "CategoryName": "Confections", - "Description": "Desserts, candies, and sweet breads" - } - }, { - "ProductID": 21, - "ProductName": "Sir Rodney's Scones", - "SupplierID": 8, - "CategoryID": 3, - "QuantityPerUnit": "24 pkgs. x 4 pieces", - "UnitPrice": 10.0000, - "UnitsInStock": 3, - "UnitsOnOrder": 40, - "ReorderLevel": 5, - "Discontinued": false, - "Category": { - "CategoryID": 3, - "CategoryName": "Confections", - "Description": "Desserts, candies, and sweet breads" - } - }, { - "ProductID": 22, - "ProductName": "Gustaf's Knäckebröd", - "SupplierID": 9, - "CategoryID": 5, - "QuantityPerUnit": "24 - 500 g pkgs.", - "UnitPrice": 21.0000, - "UnitsInStock": 104, - "UnitsOnOrder": 0, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 5, - "CategoryName": "Grains/Cereals", - "Description": "Breads, crackers, pasta, and cereal" - } - }, { - "ProductID": 23, - "ProductName": "Tunnbröd", - "SupplierID": 9, - "CategoryID": 5, - "QuantityPerUnit": "12 - 250 g pkgs.", - "UnitPrice": 9.0000, - "UnitsInStock": 61, - "UnitsOnOrder": 0, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 5, - "CategoryName": "Grains/Cereals", - "Description": "Breads, crackers, pasta, and cereal" - } - }, { - "ProductID": 24, - "ProductName": "Guaraná Fantástica", - "SupplierID": 10, - "CategoryID": 1, - "QuantityPerUnit": "12 - 355 ml cans", - "UnitPrice": 4.5000, - "UnitsInStock": 20, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - } - }, { - "ProductID": 25, - "ProductName": "NuNuCa Nuß-Nougat-Creme", - "SupplierID": 11, - "CategoryID": 3, - "QuantityPerUnit": "20 - 450 g glasses", - "UnitPrice": 14.0000, - "UnitsInStock": 76, - "UnitsOnOrder": 0, - "ReorderLevel": 30, - "Discontinued": false, - "Category": { - "CategoryID": 3, - "CategoryName": "Confections", - "Description": "Desserts, candies, and sweet breads" - } - }, { - "ProductID": 26, - "ProductName": "Gumbär Gummibärchen", - "SupplierID": 11, - "CategoryID": 3, - "QuantityPerUnit": "100 - 250 g bags", - "UnitPrice": 31.2300, - "UnitsInStock": 15, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 3, - "CategoryName": "Confections", - "Description": "Desserts, candies, and sweet breads" - } - }, { - "ProductID": 27, - "ProductName": "Schoggi Schokolade", - "SupplierID": 11, - "CategoryID": 3, - "QuantityPerUnit": "100 - 100 g pieces", - "UnitPrice": 43.9000, - "UnitsInStock": 49, - "UnitsOnOrder": 0, - "ReorderLevel": 30, - "Discontinued": false, - "Category": { - "CategoryID": 3, - "CategoryName": "Confections", - "Description": "Desserts, candies, and sweet breads" - } - }, { - "ProductID": 28, - "ProductName": "Rössle Sauerkraut", - "SupplierID": 12, - "CategoryID": 7, - "QuantityPerUnit": "25 - 825 g cans", - "UnitPrice": 45.6000, - "UnitsInStock": 26, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 7, - "CategoryName": "Produce", - "Description": "Dried fruit and bean curd" - } - }, { - "ProductID": 29, - "ProductName": "Thüringer Rostbratwurst", - "SupplierID": 12, - "CategoryID": 6, - "QuantityPerUnit": "50 bags x 30 sausgs.", - "UnitPrice": 123.7900, - "UnitsInStock": 0, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 6, - "CategoryName": "Meat/Poultry", - "Description": "Prepared meats" - } - }, { - "ProductID": 30, - "ProductName": "Nord-Ost Matjeshering", - "SupplierID": 13, - "CategoryID": 8, - "QuantityPerUnit": "10 - 200 g glasses", - "UnitPrice": 25.8900, - "UnitsInStock": 10, - "UnitsOnOrder": 0, - "ReorderLevel": 15, - "Discontinued": false, - "Category": { - "CategoryID": 8, - "CategoryName": "Seafood", - "Description": "Seaweed and fish" - } - }, { - "ProductID": 31, - "ProductName": "Gorgonzola Telino", - "SupplierID": 14, - "CategoryID": 4, - "QuantityPerUnit": "12 - 100 g pkgs", - "UnitPrice": 12.5000, - "UnitsInStock": 0, - "UnitsOnOrder": 70, - "ReorderLevel": 20, - "Discontinued": false, - "Category": { - "CategoryID": 4, - "CategoryName": "Dairy Products", - "Description": "Cheeses" - } - }, { - "ProductID": 32, - "ProductName": "Mascarpone Fabioli", - "SupplierID": 14, - "CategoryID": 4, - "QuantityPerUnit": "24 - 200 g pkgs.", - "UnitPrice": 32.0000, - "UnitsInStock": 9, - "UnitsOnOrder": 40, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 4, - "CategoryName": "Dairy Products", - "Description": "Cheeses" - } - }, { - "ProductID": 33, - "ProductName": "Geitost", - "SupplierID": 15, - "CategoryID": 4, - "QuantityPerUnit": "500 g", - "UnitPrice": 2.5000, - "UnitsInStock": 112, - "UnitsOnOrder": 0, - "ReorderLevel": 20, - "Discontinued": false, - "Category": { - "CategoryID": 4, - "CategoryName": "Dairy Products", - "Description": "Cheeses" - } - }, { - "ProductID": 34, - "ProductName": "Sasquatch Ale", - "SupplierID": 16, - "CategoryID": 1, - "QuantityPerUnit": "24 - 12 oz bottles", - "UnitPrice": 14.0000, - "UnitsInStock": 111, - "UnitsOnOrder": 0, - "ReorderLevel": 15, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - } - }, { - "ProductID": 35, - "ProductName": "Steeleye Stout", - "SupplierID": 16, - "CategoryID": 1, - "QuantityPerUnit": "24 - 12 oz bottles", - "UnitPrice": 18.0000, - "UnitsInStock": 20, - "UnitsOnOrder": 0, - "ReorderLevel": 15, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - } - }, { - "ProductID": 36, - "ProductName": "Inlagd Sill", - "SupplierID": 17, - "CategoryID": 8, - "QuantityPerUnit": "24 - 250 g jars", - "UnitPrice": 19.0000, - "UnitsInStock": 112, - "UnitsOnOrder": 0, - "ReorderLevel": 20, - "Discontinued": false, - "Category": { - "CategoryID": 8, - "CategoryName": "Seafood", - "Description": "Seaweed and fish" - } - }, { - "ProductID": 37, - "ProductName": "Gravad lax", - "SupplierID": 17, - "CategoryID": 8, - "QuantityPerUnit": "12 - 500 g pkgs.", - "UnitPrice": 26.0000, - "UnitsInStock": 11, - "UnitsOnOrder": 50, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 8, - "CategoryName": "Seafood", - "Description": "Seaweed and fish" - } - }, { - "ProductID": 38, - "ProductName": "Côte de Blaye", - "SupplierID": 18, - "CategoryID": 1, - "QuantityPerUnit": "12 - 75 cl bottles", - "UnitPrice": 263.5000, - "UnitsInStock": 17, - "UnitsOnOrder": 0, - "ReorderLevel": 15, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - } - }, { - "ProductID": 39, - "ProductName": "Chartreuse verte", - "SupplierID": 18, - "CategoryID": 1, - "QuantityPerUnit": "750 cc per bottle", - "UnitPrice": 18.0000, - "UnitsInStock": 69, - "UnitsOnOrder": 0, - "ReorderLevel": 5, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - } - }, { - "ProductID": 40, - "ProductName": "Boston Crab Meat", - "SupplierID": 19, - "CategoryID": 8, - "QuantityPerUnit": "24 - 4 oz tins", - "UnitPrice": 18.4000, - "UnitsInStock": 123, - "UnitsOnOrder": 0, - "ReorderLevel": 30, - "Discontinued": false, - "Category": { - "CategoryID": 8, - "CategoryName": "Seafood", - "Description": "Seaweed and fish" - } - }, { - "ProductID": 41, - "ProductName": "Jack's New England Clam Chowder", - "SupplierID": 19, - "CategoryID": 8, - "QuantityPerUnit": "12 - 12 oz cans", - "UnitPrice": 9.6500, - "UnitsInStock": 85, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Category": { - "CategoryID": 8, - "CategoryName": "Seafood", - "Description": "Seaweed and fish" - } - }, { - "ProductID": 42, - "ProductName": "Singaporean Hokkien Fried Mee", - "SupplierID": 20, - "CategoryID": 5, - "QuantityPerUnit": "32 - 1 kg pkgs.", - "UnitPrice": 14.0000, - "UnitsInStock": 26, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 5, - "CategoryName": "Grains/Cereals", - "Description": "Breads, crackers, pasta, and cereal" - } - }, { - "ProductID": 43, - "ProductName": "Ipoh Coffee", - "SupplierID": 20, - "CategoryID": 1, - "QuantityPerUnit": "16 - 500 g tins", - "UnitPrice": 46.0000, - "UnitsInStock": 17, - "UnitsOnOrder": 10, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - } - }, { - "ProductID": 44, - "ProductName": "Gula Malacca", - "SupplierID": 20, - "CategoryID": 2, - "QuantityPerUnit": "20 - 2 kg bags", - "UnitPrice": 19.4500, - "UnitsInStock": 27, - "UnitsOnOrder": 0, - "ReorderLevel": 15, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, { - "ProductID": 45, - "ProductName": "Rogede sild", - "SupplierID": 21, - "CategoryID": 8, - "QuantityPerUnit": "1k pkg.", - "UnitPrice": 9.5000, - "UnitsInStock": 5, - "UnitsOnOrder": 70, - "ReorderLevel": 15, - "Discontinued": false, - "Category": { - "CategoryID": 8, - "CategoryName": "Seafood", - "Description": "Seaweed and fish" - } - }, { - "ProductID": 46, - "ProductName": "Spegesild", - "SupplierID": 21, - "CategoryID": 8, - "QuantityPerUnit": "4 - 450 g glasses", - "UnitPrice": 12.0000, - "UnitsInStock": 95, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 8, - "CategoryName": "Seafood", - "Description": "Seaweed and fish" - } - }, { - "ProductID": 47, - "ProductName": "Zaanse koeken", - "SupplierID": 22, - "CategoryID": 3, - "QuantityPerUnit": "10 - 4 oz boxes", - "UnitPrice": 9.5000, - "UnitsInStock": 36, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 3, - "CategoryName": "Confections", - "Description": "Desserts, candies, and sweet breads" - } - }, { - "ProductID": 48, - "ProductName": "Chocolade", - "SupplierID": 22, - "CategoryID": 3, - "QuantityPerUnit": "10 pkgs.", - "UnitPrice": 12.7500, - "UnitsInStock": 15, - "UnitsOnOrder": 70, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 3, - "CategoryName": "Confections", - "Description": "Desserts, candies, and sweet breads" - } - }, { - "ProductID": 49, - "ProductName": "Maxilaku", - "SupplierID": 23, - "CategoryID": 3, - "QuantityPerUnit": "24 - 50 g pkgs.", - "UnitPrice": 20.0000, - "UnitsInStock": 10, - "UnitsOnOrder": 60, - "ReorderLevel": 15, - "Discontinued": false, - "Category": { - "CategoryID": 3, - "CategoryName": "Confections", - "Description": "Desserts, candies, and sweet breads" - } - }, { - "ProductID": 50, - "ProductName": "Valkoinen suklaa", - "SupplierID": 23, - "CategoryID": 3, - "QuantityPerUnit": "12 - 100 g bars", - "UnitPrice": 16.2500, - "UnitsInStock": 65, - "UnitsOnOrder": 0, - "ReorderLevel": 30, - "Discontinued": false, - "Category": { - "CategoryID": 3, - "CategoryName": "Confections", - "Description": "Desserts, candies, and sweet breads" - } - }, { - "ProductID": 51, - "ProductName": "Manjimup Dried Apples", - "SupplierID": 24, - "CategoryID": 7, - "QuantityPerUnit": "50 - 300 g pkgs.", - "UnitPrice": 53.0000, - "UnitsInStock": 20, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Category": { - "CategoryID": 7, - "CategoryName": "Produce", - "Description": "Dried fruit and bean curd" - } - }, { - "ProductID": 52, - "ProductName": "Filo Mix", - "SupplierID": 24, - "CategoryID": 5, - "QuantityPerUnit": "16 - 2 kg boxes", - "UnitPrice": 7.0000, - "UnitsInStock": 38, - "UnitsOnOrder": 0, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 5, - "CategoryName": "Grains/Cereals", - "Description": "Breads, crackers, pasta, and cereal" - } - }, { - "ProductID": 53, - "ProductName": "Perth Pasties", - "SupplierID": 24, - "CategoryID": 6, - "QuantityPerUnit": "48 pieces", - "UnitPrice": 32.8000, - "UnitsInStock": 0, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": true, - "Category": { - "CategoryID": 6, - "CategoryName": "Meat/Poultry", - "Description": "Prepared meats" - } - }, { - "ProductID": 54, - "ProductName": "Tourtière", - "SupplierID": 25, - "CategoryID": 6, - "QuantityPerUnit": "16 pies", - "UnitPrice": 7.4500, - "UnitsInStock": 21, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Category": { - "CategoryID": 6, - "CategoryName": "Meat/Poultry", - "Description": "Prepared meats" - } - }, { - "ProductID": 55, - "ProductName": "Pâté chinois", - "SupplierID": 25, - "CategoryID": 6, - "QuantityPerUnit": "24 boxes x 2 pies", - "UnitPrice": 24.0000, - "UnitsInStock": 115, - "UnitsOnOrder": 0, - "ReorderLevel": 20, - "Discontinued": false, - "Category": { - "CategoryID": 6, - "CategoryName": "Meat/Poultry", - "Description": "Prepared meats" - } - }, { - "ProductID": 56, - "ProductName": "Gnocchi di nonna Alice", - "SupplierID": 26, - "CategoryID": 5, - "QuantityPerUnit": "24 - 250 g pkgs.", - "UnitPrice": 38.0000, - "UnitsInStock": 21, - "UnitsOnOrder": 10, - "ReorderLevel": 30, - "Discontinued": false, - "Category": { - "CategoryID": 5, - "CategoryName": "Grains/Cereals", - "Description": "Breads, crackers, pasta, and cereal" - } - }, { - "ProductID": 57, - "ProductName": "Ravioli Angelo", - "SupplierID": 26, - "CategoryID": 5, - "QuantityPerUnit": "24 - 250 g pkgs.", - "UnitPrice": 19.5000, - "UnitsInStock": 36, - "UnitsOnOrder": 0, - "ReorderLevel": 20, - "Discontinued": false, - "Category": { - "CategoryID": 5, - "CategoryName": "Grains/Cereals", - "Description": "Breads, crackers, pasta, and cereal" - } - }, { - "ProductID": 58, - "ProductName": "Escargots de Bourgogne", - "SupplierID": 27, - "CategoryID": 8, - "QuantityPerUnit": "24 pieces", - "UnitPrice": 13.2500, - "UnitsInStock": 62, - "UnitsOnOrder": 0, - "ReorderLevel": 20, - "Discontinued": false, - "Category": { - "CategoryID": 8, - "CategoryName": "Seafood", - "Description": "Seaweed and fish" - } - }, { - "ProductID": 59, - "ProductName": "Raclette Courdavault", - "SupplierID": 28, - "CategoryID": 4, - "QuantityPerUnit": "5 kg pkg.", - "UnitPrice": 55.0000, - "UnitsInStock": 79, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 4, - "CategoryName": "Dairy Products", - "Description": "Cheeses" - } - }, { - "ProductID": 60, - "ProductName": "Camembert Pierrot", - "SupplierID": 28, - "CategoryID": 4, - "QuantityPerUnit": "15 - 300 g rounds", - "UnitPrice": 34.0000, - "UnitsInStock": 19, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 4, - "CategoryName": "Dairy Products", - "Description": "Cheeses" - } - }, { - "ProductID": 61, - "ProductName": "Sirop d'érable", - "SupplierID": 29, - "CategoryID": 2, - "QuantityPerUnit": "24 - 500 ml bottles", - "UnitPrice": 28.5000, - "UnitsInStock": 113, - "UnitsOnOrder": 0, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, { - "ProductID": 62, - "ProductName": "Tarte au sucre", - "SupplierID": 29, - "CategoryID": 3, - "QuantityPerUnit": "48 pies", - "UnitPrice": 49.3000, - "UnitsInStock": 17, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 3, - "CategoryName": "Confections", - "Description": "Desserts, candies, and sweet breads" - } - }, { - "ProductID": 63, - "ProductName": "Vegie-spread", - "SupplierID": 7, - "CategoryID": 2, - "QuantityPerUnit": "15 - 625 g jars", - "UnitPrice": 43.9000, - "UnitsInStock": 24, - "UnitsOnOrder": 0, - "ReorderLevel": 5, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, { - "ProductID": 64, - "ProductName": "Wimmers gute Semmelknödel", - "SupplierID": 12, - "CategoryID": 5, - "QuantityPerUnit": "20 bags x 4 pieces", - "UnitPrice": 33.2500, - "UnitsInStock": 22, - "UnitsOnOrder": 80, - "ReorderLevel": 30, - "Discontinued": false, - "Category": { - "CategoryID": 5, - "CategoryName": "Grains/Cereals", - "Description": "Breads, crackers, pasta, and cereal" - } - }, { - "ProductID": 65, - "ProductName": "Louisiana Fiery Hot Pepper Sauce", - "SupplierID": 2, - "CategoryID": 2, - "QuantityPerUnit": "32 - 8 oz bottles", - "UnitPrice": 21.0500, - "UnitsInStock": 76, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, { - "ProductID": 66, - "ProductName": "Louisiana Hot Spiced Okra", - "SupplierID": 2, - "CategoryID": 2, - "QuantityPerUnit": "24 - 8 oz jars", - "UnitPrice": 17.0000, - "UnitsInStock": 4, - "UnitsOnOrder": 100, - "ReorderLevel": 20, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }, { - "ProductID": 67, - "ProductName": "Laughing Lumberjack Lager", - "SupplierID": 16, - "CategoryID": 1, - "QuantityPerUnit": "24 - 12 oz bottles", - "UnitPrice": 14.0000, - "UnitsInStock": 52, - "UnitsOnOrder": 0, - "ReorderLevel": 10, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - } - }, { - "ProductID": 68, - "ProductName": "Scottish Longbreads", - "SupplierID": 8, - "CategoryID": 3, - "QuantityPerUnit": "10 boxes x 8 pieces", - "UnitPrice": 12.5000, - "UnitsInStock": 6, - "UnitsOnOrder": 10, - "ReorderLevel": 15, - "Discontinued": false, - "Category": { - "CategoryID": 3, - "CategoryName": "Confections", - "Description": "Desserts, candies, and sweet breads" - } - }, { - "ProductID": 69, - "ProductName": "Gudbrandsdalsost", - "SupplierID": 15, - "CategoryID": 4, - "QuantityPerUnit": "10 kg pkg.", - "UnitPrice": 36.0000, - "UnitsInStock": 26, - "UnitsOnOrder": 0, - "ReorderLevel": 15, - "Discontinued": false, - "Category": { - "CategoryID": 4, - "CategoryName": "Dairy Products", - "Description": "Cheeses" - } - }, { - "ProductID": 70, - "ProductName": "Outback Lager", - "SupplierID": 7, - "CategoryID": 1, - "QuantityPerUnit": "24 - 355 ml bottles", - "UnitPrice": 15.0000, - "UnitsInStock": 15, - "UnitsOnOrder": 10, - "ReorderLevel": 30, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - } - }, { - "ProductID": 71, - "ProductName": "Flotemysost", - "SupplierID": 15, - "CategoryID": 4, - "QuantityPerUnit": "10 - 500 g pkgs.", - "UnitPrice": 21.5000, - "UnitsInStock": 26, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 4, - "CategoryName": "Dairy Products", - "Description": "Cheeses" - } - }, { - "ProductID": 72, - "ProductName": "Mozzarella di Giovanni", - "SupplierID": 14, - "CategoryID": 4, - "QuantityPerUnit": "24 - 200 g pkgs.", - "UnitPrice": 34.8000, - "UnitsInStock": 14, - "UnitsOnOrder": 0, - "ReorderLevel": 0, - "Discontinued": false, - "Category": { - "CategoryID": 4, - "CategoryName": "Dairy Products", - "Description": "Cheeses" - } - }, { - "ProductID": 73, - "ProductName": "Röd Kaviar", - "SupplierID": 17, - "CategoryID": 8, - "QuantityPerUnit": "24 - 150 g jars", - "UnitPrice": 15.0000, - "UnitsInStock": 101, - "UnitsOnOrder": 0, - "ReorderLevel": 5, - "Discontinued": false, - "Category": { - "CategoryID": 8, - "CategoryName": "Seafood", - "Description": "Seaweed and fish" - } - }, { - "ProductID": 74, - "ProductName": "Longlife Tofu", - "SupplierID": 4, - "CategoryID": 7, - "QuantityPerUnit": "5 kg pkg.", - "UnitPrice": 10.0000, - "UnitsInStock": 4, - "UnitsOnOrder": 20, - "ReorderLevel": 5, - "Discontinued": false, - "Category": { - "CategoryID": 7, - "CategoryName": "Produce", - "Description": "Dried fruit and bean curd" - } - }, { - "ProductID": 75, - "ProductName": "Rhönbräu Klosterbier", - "SupplierID": 12, - "CategoryID": 1, - "QuantityPerUnit": "24 - 0.5 l bottles", - "UnitPrice": 7.7500, - "UnitsInStock": 125, - "UnitsOnOrder": 0, - "ReorderLevel": 25, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - } - }, { - "ProductID": 76, - "ProductName": "Lakkalikööri", - "SupplierID": 23, - "CategoryID": 1, - "QuantityPerUnit": "500 ml", - "UnitPrice": 18.0000, - "UnitsInStock": 57, - "UnitsOnOrder": 0, - "ReorderLevel": 20, - "Discontinued": false, - "Category": { - "CategoryID": 1, - "CategoryName": "Beverages", - "Description": "Soft drinks, coffees, teas, beers, and ales" - } - }, { - "ProductID": 77, - "ProductName": "Original Frankfurter grüne Soße", - "SupplierID": 12, - "CategoryID": 2, - "QuantityPerUnit": "12 boxes", - "UnitPrice": 13.0000, - "UnitsInStock": 32, - "UnitsOnOrder": 0, - "ReorderLevel": 15, - "Discontinued": false, - "Category": { - "CategoryID": 2, - "CategoryName": "Condiments", - "Description": "Sweet and savory sauces, relishes, spreads, and seasonings" - } - }]; diff --git a/src/app/models/pay-in-connective.model.ts b/src/app/models/pay-in-connective.model.ts index 81b0c6a..0109133 100644 --- a/src/app/models/pay-in-connective.model.ts +++ b/src/app/models/pay-in-connective.model.ts @@ -1,7 +1,8 @@ import {PayInModel} from './pay-in.model'; +import {PayInLenderIncomeModel} from '../abstract/pay-in-lender.income.model'; -export class PayInConnectiveModel { - private AgencyName = 'Connective'; +export class PayInConnectiveModel extends PayInLenderIncomeModel { + public Period: Date; public LoanAccount: string; public Name: string; public Settled: Date; @@ -16,20 +17,15 @@ export class PayInConnectiveModel { public GST: number; public Total: number; - public Period: Date; - - public matchedPayIn?: PayInModel | -1; constructor(payload: Partial){ + super('Connective', payload); this.Period = new Date(payload.Period); this.LoanAccount = payload.LoanAccount || ''; this.Name = payload.Name || ''; this.Settled = new Date(payload.Settled); this.Lender = payload.Lender || ''; - if ( this.Lender.indexOf(this.AgencyName) === -1 ){ - this.Lender += '_' + this.AgencyName; - } - + this.ensureLenderHasAgencyNameAppended(); this.LoanAmount = payload.LoanAmount || 0; this.Balance = payload.Balance || 0; this.Associate = payload.Associate || ''; @@ -42,10 +38,13 @@ export class PayInConnectiveModel { this.matchedPayIn = payload.matchedPayIn || -1; } - public asPayIn(): PayInModel { - if ( this.matchedPayIn !== undefined && this.matchedPayIn !== -1 ) { - return this.matchedPayIn; + private ensureLenderHasAgencyNameAppended(): void { + if ( this.Lender.indexOf(this.AgencyName) === -1 ){ + this.Lender += '_' + this.AgencyName; } + } + + public convertToPayIn(): PayInModel { const pi = new PayInModel({}); pi.Lender = this.Lender; pi.LoanNumber = this.LoanAccount; diff --git a/src/app/pay-in/lender-aaa-income/lender-aaa-income.component.ts b/src/app/pay-in/lender-aaa-income/lender-aaa-income.component.ts index 97d417c..344d92d 100644 --- a/src/app/pay-in/lender-aaa-income/lender-aaa-income.component.ts +++ b/src/app/pay-in/lender-aaa-income/lender-aaa-income.component.ts @@ -4,6 +4,9 @@ import {CellCloseEvent} from '@progress/kendo-angular-grid'; import {PayInAAARowModel} from '../../models/Pay.In.AAA.Row.model'; import {PayInModel} from '../../models/pay-in.model'; import {Subject} from 'rxjs'; +import {PayInLenderIncomeModel} from '../../abstract/pay-in-lender.income.model'; +import {LenderIncomeAbstractDirective} from '../../abstract/lender-income-abstract.directive'; +import {PayInConnectiveModel} from '../../models/pay-in-connective.model'; @Component({ @@ -11,68 +14,20 @@ import {Subject} from 'rxjs'; templateUrl: './lender-aaa-income.component.html', styleUrls: ['./lender-aaa-income.component.scss'] }) -export class LenderAaaIncomeComponent implements OnInit, OnChanges { - private Lender = 'AAA'; - @Input() public analysis = new UploadAnalysisModel({}); - @Input() newPayInUpdate: PayInModel; - @Output() Selected: EventEmitter = new EventEmitter(); - public data: PayInAAARowModel[] = []; - private payInCandidates: PayInModel[] = []; - constructor() { } +export class LenderAaaIncomeComponent extends LenderIncomeAbstractDirective implements OnInit, OnChanges { + + constructor() { super('AAA'); } ngOnInit(): void { - this.analysis.AAA.forEach(v => { + this.analysis[this.AgencyName].forEach(v => { v.matchedPayIn = this.matchPayIn(v); this.data.push(new PayInAAARowModel(v)); }); } ngOnChanges(changes): void { - if (changes.newPayInUpdate){ - const piNew = changes.newPayInUpdate.currentValue as PayInModel; - this.data.forEach(v => { - // remove old matches - if (v.matchedPayIn !== -1 && v.matchedPayIn.Id === piNew.Id){ - v.matchedPayIn = -1; - } - - // add new matches - if ( this.isMatch(v, changes.newPayInUpdate.currentValue) ){ - v.matchedPayIn = changes.newPayInUpdate.currentValue; - } - }); - } - } - - public onCellClick(event: CellCloseEvent): void{ - this.Selected.emit(event.dataItem.asPayIn()); - } - - private matchPayIn(v: PayInAAARowModel): PayInModel | -1 { - const idx = this.payInCandidates.findIndex( pi => this.isMatch(v, pi) ); - if ( idx === -1 ) { return -1; } - return this.payInCandidates[idx]; - } - - private isMatch( v: PayInAAARowModel, pi: PayInModel): boolean { - if ( v === null || pi === null ){ - return false; - } - return v.isMatch(pi); + super.OnChanges(changes); } - @Input() set payIn(pis: PayInModel[]) { - this.payInCandidates = []; - pis.forEach( v => this.payInCandidates.push(new PayInModel(v))); - - this.data.forEach( v => { - v.matchedPayIn = this.matchPayIn(v); - }); - - } - - get PayIn(): PayInModel[] { - return this.payInCandidates; - } } diff --git a/src/app/pay-in/lender-connective-income/lender-connective-income.component.html b/src/app/pay-in/lender-connective-income/lender-connective-income.component.html index 1891612..f7153af 100644 --- a/src/app/pay-in/lender-connective-income/lender-connective-income.component.html +++ b/src/app/pay-in/lender-connective-income/lender-connective-income.component.html @@ -5,7 +5,8 @@ Connective - + + @@ -19,7 +20,8 @@ - + + diff --git a/src/app/pay-in/lender-connective-income/lender-connective-income.component.ts b/src/app/pay-in/lender-connective-income/lender-connective-income.component.ts index f2f2e85..d1494f4 100644 --- a/src/app/pay-in/lender-connective-income/lender-connective-income.component.ts +++ b/src/app/pay-in/lender-connective-income/lender-connective-income.component.ts @@ -1,82 +1,31 @@ -import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core'; -import {UploadAnalysisModel} from '../../models/upload.analysis.model'; -import {PayInModel} from '../../models/pay-in.model'; -import {CellCloseEvent} from '@progress/kendo-angular-grid'; -import {PayInConnectiveModel} from '../../models/pay-in-connective.model'; +import {Component, EventEmitter, Input, OnChanges, OnInit, Output} from '@angular/core'; import {DataResult, GroupDescriptor, process} from '@progress/kendo-data-query'; +import {LenderIncomeAbstractDirective} from '../../abstract/lender-income-abstract.directive'; +import {PayInAAARowModel} from '../../models/Pay.In.AAA.Row.model'; +import {PayInConnectiveModel} from '../../models/pay-in-connective.model'; @Component({ selector: 'app-lender-connective-income', templateUrl: './lender-connective-income.component.html', styleUrls: ['./lender-connective-income.component.scss'] }) -export class LenderConnectiveIncomeComponent implements OnInit { - - private Lender = 'Connective'; - @Input() public analysis = new UploadAnalysisModel({}); - @Input() newPayInUpdate: PayInModel; - @Output() Selected: EventEmitter = new EventEmitter(); - public data: PayInConnectiveModel[] = []; - private payInCandidates: PayInModel[] = []; +export class LenderConnectiveIncomeComponent extends LenderIncomeAbstractDirective + implements OnInit, OnChanges { public groups: GroupDescriptor[] = [{ field: 'Lender' }]; public gridView: DataResult; - constructor() { } + constructor() { super('Connective'); } ngOnInit(): void { - this.analysis.Connective.forEach(v => { + this.analysis[this.AgencyName].forEach(v => { v.matchedPayIn = this.matchPayIn(v); this.data.push(new PayInConnectiveModel(v)); }); this.gridView = process(this.data, { group: this.groups }); } - ngOnChanges(changes): void { // Todo: build super class for common features - if (changes.newPayInUpdate){ - const piNew = changes.newPayInUpdate.currentValue as PayInModel; - this.data.forEach(v => { - // remove old matches - if (v.matchedPayIn !== -1 && v.matchedPayIn.Id === piNew.Id){ - v.matchedPayIn = -1; - } - - // add new matches - if ( this.isMatch(v, changes.newPayInUpdate.currentValue) ){ - v.matchedPayIn = changes.newPayInUpdate.currentValue; - } - }); - } - } - - public onCellClick(event: CellCloseEvent): void{ - this.Selected.emit(event.dataItem.asPayIn()); - } - - private matchPayIn(v: PayInConnectiveModel): PayInModel | -1 { - const idx = this.payInCandidates.findIndex( pi => this.isMatch(v, pi) ); - if ( idx === -1 ) { return -1; } - return this.payInCandidates[idx]; - } - - private isMatch( v: PayInConnectiveModel, pi: PayInModel): boolean { - if ( v === null || pi === null ){ - return false; - } - return v.isMatch(pi); + ngOnChanges(changes): void { + super.OnChanges(changes); } - - @Input() set payIn(pis: PayInModel[]) { - this.payInCandidates = []; - pis.forEach( v => this.payInCandidates.push(new PayInModel(v))); - - this.data.forEach( v => { - v.matchedPayIn = this.matchPayIn(v); - }); - - } - - get PayIn(): PayInModel[] { - return this.payInCandidates; - } }