diff --git a/src/app/admin-reward-by-broker/admin-reward-by-broker.component.html b/src/app/admin-reward-by-broker/admin-reward-by-broker.component.html
new file mode 100644
index 0000000..0f696bd
--- /dev/null
+++ b/src/app/admin-reward-by-broker/admin-reward-by-broker.component.html
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+ {{ dataItem.First +' ' + dataItem.Last}}
+
+
+
+
+
+
+
diff --git a/src/app/admin-reward-by-broker/admin-reward-by-broker.component.scss b/src/app/admin-reward-by-broker/admin-reward-by-broker.component.scss
new file mode 100644
index 0000000..8ea8c2b
--- /dev/null
+++ b/src/app/admin-reward-by-broker/admin-reward-by-broker.component.scss
@@ -0,0 +1,27 @@
+.broker-photo {
+ display: inline-block;
+ width: 256px;
+ height: 256px;
+ border-radius: 50%;
+ background-size: 256px 256px;
+ background-position: center center;
+ vertical-align: middle;
+ line-height: 132px;
+ margin-left: 5px;
+ margin-bottom: 10px;
+ background-repeat: no-repeat;
+ box-shadow: 1px 1px 10px black;
+}
+
+
+kendo-combobox {
+ width:100%;
+}
+
+.contact-image {
+ width: 32px;
+ height: 32px;
+ margin-right: 8px;
+ border-radius: 50%;
+}
+
diff --git a/src/app/admin-reward-by-broker/admin-reward-by-broker.component.spec.ts b/src/app/admin-reward-by-broker/admin-reward-by-broker.component.spec.ts
new file mode 100644
index 0000000..f00a023
--- /dev/null
+++ b/src/app/admin-reward-by-broker/admin-reward-by-broker.component.spec.ts
@@ -0,0 +1,25 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { AdminRewardByBrokerComponent } from './admin-reward-by-broker.component';
+
+describe('AdminRewardByBrokerComponent', () => {
+ let component: AdminRewardByBrokerComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ declarations: [ AdminRewardByBrokerComponent ]
+ })
+ .compileComponents();
+ });
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(AdminRewardByBrokerComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/admin-reward-by-broker/admin-reward-by-broker.component.ts b/src/app/admin-reward-by-broker/admin-reward-by-broker.component.ts
new file mode 100644
index 0000000..b867e43
--- /dev/null
+++ b/src/app/admin-reward-by-broker/admin-reward-by-broker.component.ts
@@ -0,0 +1,64 @@
+import {Component, OnInit, ViewChild} from '@angular/core';
+import {BrokerModel} from '../models/broker.model';
+import {PeopleService} from '../service/people.service';
+import {AuthService} from '../service/auth.service';
+import {ClonerService} from '../service/clone.service';
+import {BrokerRewardComponent} from '../broker-reward/broker-reward.component';
+import {ComboBoxComponent} from '@progress/kendo-angular-dropdowns';
+
+@Component({
+ selector: 'app-admin-reward-by-broker',
+ templateUrl: './admin-reward-by-broker.component.html',
+ styleUrls: ['./admin-reward-by-broker.component.scss']
+})
+export class AdminRewardByBrokerComponent implements OnInit {
+ public AllBrokers: BrokerModel[] = [];
+ public filteredBroker: BrokerModel[] = [];
+ public brokerSelected: BrokerModel = BrokerModel.EmptyNew();
+ public avatarUrl = '';
+
+ @ViewChild('selectBroker', {static: true}) sb: ComboBoxComponent;
+ @ViewChild('brokerReward', {static: true}) br: BrokerRewardComponent;
+
+ constructor(private ps: PeopleService, private auth: AuthService, private dcs: ClonerService) { }
+
+ ngOnInit(): void {
+ this.ps.getBrokerList('').subscribe(
+ resp => {
+ this.AllBrokers = resp.List;
+ this.onFilterBroker('');
+ this.sb.toggle(true);
+ }
+ );
+ }
+
+ public getContactImageUrl(contactId: string): string {
+ return this.auth.getUrl('avatar/' + contactId);
+ }
+
+ public onFilterBroker(hint: string): void {
+ if ( hint === undefined || hint.length === 0 ) {
+ this.filteredBroker = this.AllBrokers.slice(0);
+ }else {
+ this.filteredBroker = this.AllBrokers.filter(
+ v => v.Display.toLowerCase().includes(hint.toLowerCase())
+ );
+ }
+ }
+
+ public onBrokerSelected(broker: BrokerModel): void {
+ if ( broker === undefined) {
+ this.avatarUrl = '';
+ this.br.ShowBroker('some-broker-that-not-exist');
+ this.sb.toggle(true);
+ }else {
+ this.avatarUrl = 'url(' + this.auth.getUrl('avatar/' + broker.Id) + ')';
+ this.br.ShowBroker(broker.Id);
+ }
+ }
+
+ public validBrokerSelected(): boolean{
+ return this.brokerSelected !== undefined && this.brokerSelected.Id !== '';
+ }
+}
+
diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts
index e4ff375..2bdcbee 100644
--- a/src/app/app-routing.module.ts
+++ b/src/app/app-routing.module.ts
@@ -15,6 +15,10 @@ import {ClientLoanListComponent} from './client-loan-list/client-loan-list.compo
import {ClientProfileComponent} from './client-profile/client-profile.component';
import {E403Component} from './e403/e403.component';
import {ListAllRewardsComponent} from './list-all-rewards/list-all-rewards.component';
+import {AdminRewardByBrokerComponent} from './admin-reward-by-broker/admin-reward-by-broker.component';
+import {RewardOverviewComponent} from './reward-overview/reward-overview.component';
+import {RewardPaidComponent} from './reward-paid/reward-paid.component';
+import {RewardUnpaidComponent} from './reward-unpaid/reward-unpaid.component';
const routes: Routes = [
@@ -34,6 +38,10 @@ const routes: Routes = [
{path : 'client-loan-list', component: ClientLoanListComponent, canActivate: [AuthGuard] },
{path : 'client-profile', component: ClientProfileComponent, canActivate: [AuthGuard] },
{path : 'list-all-rewards', component: ListAllRewardsComponent, canActivate: [AuthGuard] },
+ {path : 'list-reward-by-broker', component: AdminRewardByBrokerComponent , canActivate: [AuthGuard] },
+ {path : 'reward-overview', component: RewardOverviewComponent, canActivate: [AuthGuard] },
+ {path : 'reward-paid', component: RewardPaidComponent, canActivate: [AuthGuard] },
+ {path : 'reward-unpaid', component: RewardUnpaidComponent, canActivate: [AuthGuard] },
{path : 'e403', component: E403Component, },
];
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index aa670dc..8dff6ed 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -72,6 +72,10 @@ import { ClientProfileComponent } from './client-profile/client-profile.componen
import { E403Component } from './e403/e403.component';
import {FileSelectModule, UploadModule} from '@progress/kendo-angular-upload';
import { ListAllRewardsComponent } from './list-all-rewards/list-all-rewards.component';
+import { AdminRewardByBrokerComponent } from './admin-reward-by-broker/admin-reward-by-broker.component';
+import { RewardOverviewComponent } from './reward-overview/reward-overview.component';
+import { RewardUnpaidComponent } from './reward-unpaid/reward-unpaid.component';
+import { RewardPaidComponent } from './reward-paid/reward-paid.component';
@@ -114,7 +118,11 @@ import { ListAllRewardsComponent } from './list-all-rewards/list-all-rewards.com
ClientLoanListComponent,
ClientProfileComponent,
E403Component,
- ListAllRewardsComponent
+ ListAllRewardsComponent,
+ AdminRewardByBrokerComponent,
+ RewardOverviewComponent,
+ RewardUnpaidComponent,
+ RewardPaidComponent
],
imports: [
BrowserModule,
diff --git a/src/app/broker-reward/broker-reward.component.html b/src/app/broker-reward/broker-reward.component.html
index d38a67b..55fb525 100644
--- a/src/app/broker-reward/broker-reward.component.html
+++ b/src/app/broker-reward/broker-reward.component.html
@@ -1,6 +1,7 @@
diff --git a/src/app/broker-reward/broker-reward.component.ts b/src/app/broker-reward/broker-reward.component.ts
index 6e6b4d4..7c20404 100644
--- a/src/app/broker-reward/broker-reward.component.ts
+++ b/src/app/broker-reward/broker-reward.component.ts
@@ -1,4 +1,4 @@
-import { Component, OnInit } from '@angular/core';
+import {Component, Input, OnInit} from '@angular/core';
import {HttpClient} from '@angular/common/http';
import {AuthService} from '../service/auth.service';
import {RewardByUserModel} from '../models/reward-by-user.model';
@@ -11,7 +11,9 @@ import {DataResult, GroupDescriptor, process} from '@progress/kendo-data-query';
})
export class BrokerRewardComponent implements OnInit {
+ @Input() selectedBrokerId = '';
public gridData: RewardByUserModel[] = [] ;
+ public loading = false;
public groups: GroupDescriptor[] = [{ field: 'Description' }, { field: 'Item' } ];
public gridView: DataResult;
@@ -19,13 +21,27 @@ export class BrokerRewardComponent implements OnInit {
constructor(private http: HttpClient, private auth: AuthService ) { }
ngOnInit(): void {
+ this.loading = true;
+ this.loadBrokerReward();
+ }
+
+ private loadBrokerReward(): void {
this.gridData = [];
- this.http.get(this.auth.getUrl('user-reward/')).subscribe(
+
+ // avoid loading everything when used with admin user
+ if ( this.auth.loggedIn.role === 'admin' && this.selectedBrokerId === '' ) {
+ this.loading = false;
+ return ;
+ }
+
+ // load a single user
+ this.http.get(this.auth.getUrl('user-reward/' + this.selectedBrokerId )).subscribe(
rsp => {
rsp.forEach(v => {
this.gridData.push(new RewardByUserModel(v));
});
this.loadRewards();
+ this.loading = false;
}
);
}
@@ -36,7 +52,20 @@ export class BrokerRewardComponent implements OnInit {
}
private loadRewards(): void {
+ this.loading = true;
this.gridView = process(this.gridData, { group: this.groups });
+ this.loading = false;
}
+ public ShowBroker(id: string): void {
+ if (id === 'some-broker-that-not-exist' ) {
+ this.gridView.data = [];
+ this.gridView.total = 0;
+ return;
+ }
+
+ this.loading = true;
+ this.selectedBrokerId = id;
+ this.loadBrokerReward();
+ }
}
diff --git a/src/app/list-all-rewards/list-all-rewards.component.html b/src/app/list-all-rewards/list-all-rewards.component.html
index 81a6f83..d9568dc 100644
--- a/src/app/list-all-rewards/list-all-rewards.component.html
+++ b/src/app/list-all-rewards/list-all-rewards.component.html
@@ -1,19 +1,112 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ dataItem.Amount | currency }}
+
+
+
+
+
+
+
+
+
+ {{ dataItem.ToDisplay }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{dataItem.Status}}
+
+
+
+
+
+
+
+
+
+
+ {{ dataItem.Ts | date: 'yyyy-MM-dd' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/list-all-rewards/list-all-rewards.component.scss b/src/app/list-all-rewards/list-all-rewards.component.scss
index f1f735b..a0aebbc 100644
--- a/src/app/list-all-rewards/list-all-rewards.component.scss
+++ b/src/app/list-all-rewards/list-all-rewards.component.scss
@@ -1,3 +1,32 @@
-kendo-chart {
- height: 600px;
+.box {
+ display: flex;
+ flex-flow: column;
+ height: calc(100vh - 48px);
+}
+
+
+kendo-grid{
+ flex: 0 1 auto;
+}
+
+
+.customer-photo{
+ display: inline-block;
+ width: 32px;
+ height: 32px;
+ border-radius: 50%;
+ background-size: 32px 35px;
+ background-position: center center;
+ vertical-align: middle;
+ line-height: 32px;
+ box-shadow: inset 0 0 1px #999, inset 0 0 10px rgba(0,0,0,.2);
+ margin-left: 5px;
+ margin-bottom: 10px;
+}
+
+.customer-name {
+ display: inline-block;
+ vertical-align: middle;
+ line-height: 32px;
+ padding-left: 10px;
}
diff --git a/src/app/list-all-rewards/list-all-rewards.component.ts b/src/app/list-all-rewards/list-all-rewards.component.ts
index f4db5fc..919431b 100644
--- a/src/app/list-all-rewards/list-all-rewards.component.ts
+++ b/src/app/list-all-rewards/list-all-rewards.component.ts
@@ -1,8 +1,9 @@
import { Component, OnInit } from '@angular/core';
import {AuthService} from '../service/auth.service';
import {HttpClient} from '@angular/common/http';
-import {RewardVsIncomeModel} from '../models/reward-vs-incom.model';
-import {SeriesLabels} from '@progress/kendo-angular-charts';
+import {RewardByUserModel} from '../models/reward-by-user.model';
+import {DataStateChangeEvent, GridDataResult,} from '@progress/kendo-angular-grid';
+import {State, process} from '@progress/kendo-data-query';
@Component({
selector: 'app-list-all-rewards',
@@ -11,20 +12,47 @@ import {SeriesLabels} from '@progress/kendo-angular-charts';
})
export class ListAllRewardsComponent implements OnInit {
- public rvi: RewardVsIncomeModel = new RewardVsIncomeModel();
- public seriesLabels: SeriesLabels = {
- visible: true, // Note that visible defaults to false
- padding: 3,
- font: 'bold 9px Arial, sans-serif',
- format: 'c0'
+
+ public gridData: RewardByUserModel[] = [] ;
+ public gridView: GridDataResult;
+ public state: State = {
+ skip: 0,
+ take: 10
};
+ public loading = true;
constructor(private auth: AuthService, private http: HttpClient) { }
ngOnInit(): void {
- this.http.get(this.auth.getUrl('chart/reward-vs-income-monthly')).subscribe(
- resp => { console.log(resp); this.rvi = resp; }
+ this.loadInitRewardGrid();
+ }
+
+
+ public loadInitRewardGrid(): void {
+ this.loading = true;
+ this.gridData = [];
+ this.http.get(this.auth.getUrl('user-reward/')).subscribe(
+ rsp => {
+ this.loading = false;
+ rsp.forEach(v => {
+ this.gridData.push(new RewardByUserModel(v));
+ });
+ this.loadRewards();
+ }
);
}
+ private loadRewards(): void {
+ this.gridView = process(this.gridData, this.state);
+ }
+
+ public dataStateChange(state: DataStateChangeEvent): void {
+ this.state = state;
+ this.loadRewards();
+ }
+
+ private photoURL(peopleId: any): string {
+ const url = this.auth.getUrl('avatar/') + peopleId;
+ return 'url("' + url + '")';
+ }
}
diff --git a/src/app/main-menu-items.ts b/src/app/main-menu-items.ts
index e1fcb26..9f0a7c1 100644
--- a/src/app/main-menu-items.ts
+++ b/src/app/main-menu-items.ts
@@ -15,44 +15,38 @@ export const mainMenuItems: any[] = [
icon: 'dollar',
items: [
{ text: 'Start New Loan', icon: 'plus', url: './#edit-loan/' },
- { text: 'List All New', icon: 'table' , url: './#list-all-loans' },
+ { text: 'List All', icon: 'table' , url: './#list-all-loans' },
+ { text: '--', separator: 'true' },
+ { text: 'Income', icon: 'dollar', url: './#income' },
+ { text: '--', separator: 'true' },
+ { text: 'Uploads', icon: 'dollar', url: './#loan-uploads' },
]
},
{
text: 'Reward',
icon: 'percent',
items: [
- { text: 'Overview', icon: 'table', url: './#list-all-rewards#' },
+ { text: 'Overview', icon: 'table', url: './#reward-overview' },
+ { text: 'List All', icon: 'table', url: './#list-all-rewards' },
+ { text: '--', separator: 'true' },
{ text: 'By Broker', icon: 'table', url: './#list-reward-by-broker' },
{ text: '--', separator: 'true' },
- { text: 'Lender Monthly Uploads', icon: 'attachment' , url: './#uploads'}
+ { text: 'Not Paid', icon: 'attachment' , url: './#reward-unpaid'},
+ { text: 'Paid', icon: 'attachment' , url: './#reward-paid'},
]
},
{
- text: 'Clients',
+ text: 'People',
icon: 'user',
items: [
- { text: 'Add ', icon: 'plus', url: './#add-client' },
+ { text: 'Add ', icon: 'plus', url: './#add-people' },
{ text: 'List All', fa: faIdCard , url: './#list-all-client'},
{ text: '--', separator: 'true' },
{ text: 'Broadcast', icon: 'email', url: './#send-to-all-client'},
+ { text: '--', separator: 'true' },
+ { text: 'Broadcast', icon: 'email', url: './#send-to-all-client'},
]
},
-
- {
- text: 'Brokers',
- fa: faUserCircle,
- items: [
- { text: 'Add ', icon: 'plus', url: '#' },
- { text: 'List All', fa: faIdCardAlt},
- { text: '--', separator: 'true' },
- { text: 'Search' , icon: 'search'},
- { text: '--', separator: 'true' },
- { text: 'Broadcast' , icon : 'email'},
- { text: '--', separator: 'true' },
- { text: 'UnPaid', fa : faMoneyCheck },
- ]
- }
];
diff --git a/src/app/models/reward-vs-incom.model.ts b/src/app/models/reward-vs-incom.model.ts
index 9ed9ccb..e034104 100644
--- a/src/app/models/reward-vs-incom.model.ts
+++ b/src/app/models/reward-vs-incom.model.ts
@@ -2,5 +2,11 @@
export class RewardVsIncomeModel {
Categories: string[];
- Data: number[][2];
+ Data: number[][];
+ constructor() {
+ this.Data = new Array(3);
+ for (let i = 0; i <= 2 ; i++){
+ this.Data[i] = [];
+ }
+ }
}
diff --git a/src/app/reward-overview/reward-overview.component.html b/src/app/reward-overview/reward-overview.component.html
new file mode 100644
index 0000000..a08aef1
--- /dev/null
+++ b/src/app/reward-overview/reward-overview.component.html
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/reward-overview/reward-overview.component.scss b/src/app/reward-overview/reward-overview.component.scss
new file mode 100644
index 0000000..872c0cc
--- /dev/null
+++ b/src/app/reward-overview/reward-overview.component.scss
@@ -0,0 +1,4 @@
+kendo-chart {
+ height: calc(100vh - 48px);
+ flex: 0 1 auto;
+}
diff --git a/src/app/reward-overview/reward-overview.component.spec.ts b/src/app/reward-overview/reward-overview.component.spec.ts
new file mode 100644
index 0000000..4cdab6d
--- /dev/null
+++ b/src/app/reward-overview/reward-overview.component.spec.ts
@@ -0,0 +1,25 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { RewardOverviewComponent } from './reward-overview.component';
+
+describe('RewardOverviewComponent', () => {
+ let component: RewardOverviewComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ declarations: [ RewardOverviewComponent ]
+ })
+ .compileComponents();
+ });
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(RewardOverviewComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/reward-overview/reward-overview.component.ts b/src/app/reward-overview/reward-overview.component.ts
new file mode 100644
index 0000000..efa9f45
--- /dev/null
+++ b/src/app/reward-overview/reward-overview.component.ts
@@ -0,0 +1,42 @@
+import { Component, OnInit } from '@angular/core';
+import {RewardVsIncomeModel} from '../models/reward-vs-incom.model';
+import {SeriesLabels} from '@progress/kendo-angular-charts';
+import {AuthService} from '../service/auth.service';
+import {HttpClient} from '@angular/common/http';
+
+@Component({
+ selector: 'app-reward-overview',
+ templateUrl: './reward-overview.component.html',
+ styleUrls: ['./reward-overview.component.scss']
+})
+export class RewardOverviewComponent implements OnInit {
+ public rvi: RewardVsIncomeModel = new RewardVsIncomeModel();
+ public seriesLabels: SeriesLabels = {
+ visible: true, // Note that visible defaults to false
+ padding: 3,
+ font: 'bold 9px Arial, sans-serif',
+ format: 'c0'
+ };
+
+ constructor(private auth: AuthService, private http: HttpClient) { }
+
+ ngOnInit(): void {
+ this.loadInitialRewardOverviewChart();
+ }
+
+ public loadInitialRewardOverviewChart(): void{
+ this.http.get(this.auth.getUrl('chart/reward-vs-income-monthly')).subscribe(
+ resp => {
+ this.rvi.Categories = resp.Categories;
+ this.rvi.Data[2] = [];
+ for (let i = 0; i < 12; i++){
+ this.rvi.Data[0] = resp.Data[0];
+ this.rvi.Data[1] = resp.Data[1];
+ this.rvi.Data[2][i] = this.rvi.Data[1][i] - this.rvi.Data[0][i];
+ }
+ }
+ );
+ }
+
+
+}
diff --git a/src/app/reward-paid/reward-paid.component.html b/src/app/reward-paid/reward-paid.component.html
new file mode 100644
index 0000000..4b0bef9
--- /dev/null
+++ b/src/app/reward-paid/reward-paid.component.html
@@ -0,0 +1 @@
+reward-paid works!
diff --git a/src/app/reward-paid/reward-paid.component.scss b/src/app/reward-paid/reward-paid.component.scss
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/reward-paid/reward-paid.component.spec.ts b/src/app/reward-paid/reward-paid.component.spec.ts
new file mode 100644
index 0000000..18bac03
--- /dev/null
+++ b/src/app/reward-paid/reward-paid.component.spec.ts
@@ -0,0 +1,25 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { RewardPaidComponent } from './reward-paid.component';
+
+describe('RewardPaidComponent', () => {
+ let component: RewardPaidComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ declarations: [ RewardPaidComponent ]
+ })
+ .compileComponents();
+ });
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(RewardPaidComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/reward-paid/reward-paid.component.ts b/src/app/reward-paid/reward-paid.component.ts
new file mode 100644
index 0000000..710cdfd
--- /dev/null
+++ b/src/app/reward-paid/reward-paid.component.ts
@@ -0,0 +1,15 @@
+import { Component, OnInit } from '@angular/core';
+
+@Component({
+ selector: 'app-reward-paid',
+ templateUrl: './reward-paid.component.html',
+ styleUrls: ['./reward-paid.component.scss']
+})
+export class RewardPaidComponent implements OnInit {
+
+ constructor() { }
+
+ ngOnInit(): void {
+ }
+
+}
diff --git a/src/app/reward-unpaid/reward-unpaid.component.html b/src/app/reward-unpaid/reward-unpaid.component.html
new file mode 100644
index 0000000..e7e9ce5
--- /dev/null
+++ b/src/app/reward-unpaid/reward-unpaid.component.html
@@ -0,0 +1 @@
+reward-unpaid works!
diff --git a/src/app/reward-unpaid/reward-unpaid.component.scss b/src/app/reward-unpaid/reward-unpaid.component.scss
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/reward-unpaid/reward-unpaid.component.spec.ts b/src/app/reward-unpaid/reward-unpaid.component.spec.ts
new file mode 100644
index 0000000..b3e350a
--- /dev/null
+++ b/src/app/reward-unpaid/reward-unpaid.component.spec.ts
@@ -0,0 +1,25 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { RewardUnpaidComponent } from './reward-unpaid.component';
+
+describe('RewardUnpaidComponent', () => {
+ let component: RewardUnpaidComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ declarations: [ RewardUnpaidComponent ]
+ })
+ .compileComponents();
+ });
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(RewardUnpaidComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/reward-unpaid/reward-unpaid.component.ts b/src/app/reward-unpaid/reward-unpaid.component.ts
new file mode 100644
index 0000000..ce77452
--- /dev/null
+++ b/src/app/reward-unpaid/reward-unpaid.component.ts
@@ -0,0 +1,15 @@
+import { Component, OnInit } from '@angular/core';
+
+@Component({
+ selector: 'app-reward-unpaid',
+ templateUrl: './reward-unpaid.component.html',
+ styleUrls: ['./reward-unpaid.component.scss']
+})
+export class RewardUnpaidComponent implements OnInit {
+
+ constructor() { }
+
+ ngOnInit(): void {
+ }
+
+}