2020-11-25 08:57:17 +01:00
|
|
|
<!-- Begin page -->
|
|
|
|
<div class="wrapper">
|
|
|
|
<app-sidebar></app-sidebar>
|
|
|
|
|
|
|
|
<!-- ============================================================== -->
|
|
|
|
<!-- Start Page Content here -->
|
|
|
|
<!-- ============================================================== -->
|
|
|
|
|
|
|
|
<div id="content">
|
|
|
|
<app-topbar></app-topbar>
|
|
|
|
<!-- Start Content-->
|
2021-03-06 07:28:29 +01:00
|
|
|
<div class="container-fluid" appMenuSelection>
|
2020-12-05 07:30:30 +01:00
|
|
|
<nav aria-label="breadcrumb">
|
|
|
|
<ol class="breadcrumb">
|
|
|
|
<li class="breadcrumb-item"><a routerLink="/home">Home</a></li>
|
|
|
|
<li class="breadcrumb-item"><a routerLink="/accounts">Accounts</a></li>
|
2021-03-06 07:28:29 +01:00
|
|
|
<!-- <li *ngIf="account" class="breadcrumb-item active" aria-current="page">{{account?.fn[0].value}}</li>-->
|
2020-12-05 07:30:30 +01:00
|
|
|
</ol>
|
|
|
|
</nav>
|
|
|
|
<div *ngIf="!account" class="text-center">
|
|
|
|
<div class="spinner-grow text-primary m-1" role="status" style="width: 3rem; height: 3rem;">
|
|
|
|
<span class="sr-only">Loading...</span>
|
|
|
|
</div>
|
|
|
|
<div class="spinner-grow text-primary m-1" role="status" style="width: 3rem; height: 3rem;">
|
|
|
|
<span class="sr-only">Loading...</span>
|
|
|
|
</div>
|
|
|
|
<div class="spinner-grow text-primary m-1" role="status" style="width: 3rem; height: 3rem;">
|
|
|
|
<span class="sr-only">Loading...</span>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div *ngIf="account" class="card mt-3 mb-3">
|
2021-03-10 10:47:01 +01:00
|
|
|
<div class="card mb-3">
|
|
|
|
<div class="row card-body">
|
|
|
|
<h3>
|
|
|
|
<strong> {{account?.vcard?.fn[0].value}} </strong>
|
|
|
|
</h3>
|
|
|
|
<span class="ml-auto"><strong>Balance:</strong> {{accountBalance}} RCU</span>
|
|
|
|
<span class="ml-2"><strong>Created:</strong> {{account?.date_registered | date}}</span>
|
|
|
|
<span class="ml-2"><strong>Address:</strong><a href="{{bloxbergLink}}" target="_blank"> {{account?.identities.evm['bloxberg:8996']}} </a></span>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<app-disbursement *ngIf="isDisbursing" (cancelDisbursmentEvent)="addTransfer()" [account]="account">
|
|
|
|
</app-disbursement>
|
2020-11-25 08:57:17 +01:00
|
|
|
<mat-card-title class="card-header">
|
|
|
|
<div class="row">
|
|
|
|
DETAILS
|
2021-02-08 12:47:07 +01:00
|
|
|
<button mat-raised-button color="primary" type="button" class="btn btn-outline-primary ml-auto"
|
|
|
|
(click)="addTransfer()"> NEW TRANSFER </button>
|
2020-11-25 08:57:17 +01:00
|
|
|
</div>
|
|
|
|
</mat-card-title>
|
|
|
|
<div class="card-body">
|
2021-02-08 12:47:07 +01:00
|
|
|
<form [formGroup]="accountInfoForm" (ngSubmit)="saveInfo()">
|
2020-11-25 08:57:17 +01:00
|
|
|
<div class="row form-inline">
|
|
|
|
<div class="col-md-6 col-lg-4">
|
|
|
|
<mat-form-field appearance="outline">
|
|
|
|
<mat-label> STATUS </mat-label>
|
2021-02-08 12:47:07 +01:00
|
|
|
<mat-select id="status" [(value)]="account.status" formControlName="status"
|
|
|
|
[errorStateMatcher]="matcher">
|
2021-02-23 13:32:02 +01:00
|
|
|
<mat-option value="blocked">Blocked</mat-option>
|
|
|
|
<mat-option value="active">Active</mat-option>
|
2020-11-25 08:57:17 +01:00
|
|
|
</mat-select>
|
2021-02-08 12:47:07 +01:00
|
|
|
<mat-error *ngIf="submitted && accountInfoFormStub.status.errors">Status is required.</mat-error>
|
2020-11-25 08:57:17 +01:00
|
|
|
</mat-form-field>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="col-md-6 col-lg-4">
|
|
|
|
<mat-form-field appearance="outline">
|
|
|
|
<mat-label>Name(s): *</mat-label>
|
2021-02-08 12:47:07 +01:00
|
|
|
<input matInput type="text" id="givenNames" placeholder="{{account?.name}}" value="{{account?.name}}"
|
|
|
|
formControlName="name" [errorStateMatcher]="matcher">
|
|
|
|
<mat-error *ngIf="submitted && accountInfoFormStub.name.errors">Name is required.</mat-error>
|
2020-11-25 08:57:17 +01:00
|
|
|
</mat-form-field>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="col-md-6 col-lg-4">
|
|
|
|
<mat-form-field appearance="outline">
|
|
|
|
<mat-label>Phone Number: </mat-label>
|
2021-02-08 12:47:07 +01:00
|
|
|
<input matInput type="text" id="phoneNumber" placeholder="{{account?.phone}}"
|
|
|
|
value="{{account?.phone}}" formControlName="phoneNumber" [errorStateMatcher]="matcher">
|
|
|
|
<mat-error *ngIf="submitted && accountInfoFormStub.phoneNumber.errors">Phone Number is required.</mat-error>
|
2020-11-25 08:57:17 +01:00
|
|
|
</mat-form-field>
|
|
|
|
</div>
|
|
|
|
|
2021-02-23 13:32:02 +01:00
|
|
|
<div class="col-md-6 col-lg-4">
|
|
|
|
<mat-form-field appearance="outline">
|
|
|
|
<mat-label>Age: </mat-label>
|
|
|
|
<input matInput type="text" id="age" placeholder="{{account?.age}}"
|
|
|
|
value="{{account?.age}}" formControlName="age" [errorStateMatcher]="matcher">
|
|
|
|
<mat-error *ngIf="submitted && accountInfoFormStub.age.errors">Age is required.</mat-error>
|
|
|
|
</mat-form-field>
|
|
|
|
</div>
|
|
|
|
|
2020-11-25 08:57:17 +01:00
|
|
|
<div class="col-md-6 col-lg-4">
|
|
|
|
<mat-form-field appearance="outline">
|
|
|
|
<mat-label> ACCOUNT TYPE: </mat-label>
|
2021-02-08 12:47:07 +01:00
|
|
|
<mat-select id="accountType" [(value)]="account.type" formControlName="type"
|
|
|
|
[errorStateMatcher]="matcher">
|
2020-11-25 08:57:17 +01:00
|
|
|
<mat-option value="user"> USER </mat-option>
|
|
|
|
<mat-option value="cashier"> CASHIER </mat-option>
|
|
|
|
<mat-option value="vendor"> VENDOR </mat-option>
|
|
|
|
<mat-option value="tokenAgent"> TOKENAGENT </mat-option>
|
|
|
|
<mat-option value="group"> GROUPACCOUNT </mat-option>
|
|
|
|
</mat-select>
|
2021-02-08 12:47:07 +01:00
|
|
|
<mat-error *ngIf="submitted && accountInfoFormStub.type.errors">Type is required.</mat-error>
|
2020-11-25 08:57:17 +01:00
|
|
|
</mat-form-field>
|
|
|
|
</div>
|
|
|
|
|
2020-12-05 07:30:30 +01:00
|
|
|
<div class="col-md-6 col-lg-4">
|
|
|
|
<mat-form-field appearance="outline">
|
|
|
|
<mat-label> USER TOKEN: </mat-label>
|
2021-02-08 12:47:07 +01:00
|
|
|
<mat-select id="token" [(value)]="account.token" formControlName="token"
|
|
|
|
[errorStateMatcher]="matcher">
|
2020-12-05 07:30:30 +01:00
|
|
|
<mat-option value="RSV"> RESERVE </mat-option>
|
|
|
|
<mat-option value="ERN"> ERNIE </mat-option>
|
|
|
|
<mat-option value="BRT"> BERT </mat-option>
|
|
|
|
</mat-select>
|
2021-02-08 12:47:07 +01:00
|
|
|
<mat-error *ngIf="submitted && accountInfoFormStub.token.errors">Token is required.</mat-error>
|
2020-12-05 07:30:30 +01:00
|
|
|
</mat-form-field>
|
|
|
|
</div>
|
|
|
|
|
2020-11-25 08:57:17 +01:00
|
|
|
<div class="col-md-6 col-lg-4">
|
|
|
|
<mat-form-field appearance="outline">
|
|
|
|
<mat-label>Failed Pin Attempts: </mat-label>
|
2021-02-08 12:47:07 +01:00
|
|
|
<input matInput type="text" id="failedPinAttempts" placeholder="{{account?.failedPinAttempts}}"
|
|
|
|
value="{{account?.failedPinAttempts}}" formControlName="failedPinAttempts" required
|
|
|
|
[errorStateMatcher]="matcher">
|
|
|
|
<mat-error *ngIf="submitted && accountInfoFormStub.failedPinAttempts.errors">
|
|
|
|
Failed Pin Attempts is required.
|
|
|
|
</mat-error>
|
2020-11-25 08:57:17 +01:00
|
|
|
</mat-form-field>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="col-md-6 col-lg-4">
|
|
|
|
<mat-form-field appearance="outline">
|
|
|
|
<mat-label>Bio: </mat-label>
|
2021-02-08 12:47:07 +01:00
|
|
|
<input matInput type="text" id="bio" placeholder="{{account?.bio}}" value="{{account?.bio}}"
|
|
|
|
formControlName="bio" [errorStateMatcher]="matcher">
|
|
|
|
<mat-error *ngIf="submitted && accountInfoFormStub.bio.errors">Bio is required.</mat-error>
|
2020-11-25 08:57:17 +01:00
|
|
|
</mat-form-field>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="col-md-6 col-lg-4">
|
|
|
|
<mat-form-field appearance="outline">
|
|
|
|
<mat-label> GENDER: </mat-label>
|
2021-02-08 12:47:07 +01:00
|
|
|
<mat-select id="gender" [(value)]="account.gender" formControlName="gender"
|
|
|
|
[errorStateMatcher]="matcher">
|
2020-11-25 08:57:17 +01:00
|
|
|
<mat-option value="male"> MALE </mat-option>
|
|
|
|
<mat-option value="female"> FEMALE </mat-option>
|
|
|
|
<mat-option value="other"> OTHER </mat-option>
|
|
|
|
</mat-select>
|
2021-02-08 12:47:07 +01:00
|
|
|
<mat-error *ngIf="submitted && accountInfoFormStub.gender.errors">Gender is required.</mat-error>
|
2020-11-25 08:57:17 +01:00
|
|
|
</mat-form-field>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="col-md-6 col-lg-4">
|
|
|
|
<mat-form-field appearance="outline">
|
|
|
|
<mat-label> BUSINESS CATEGORY: </mat-label>
|
2021-02-08 12:47:07 +01:00
|
|
|
<mat-select id="businessCategory" [(value)]="account.category" formControlName="businessCategory"
|
|
|
|
[errorStateMatcher]="matcher">
|
2020-11-25 08:57:17 +01:00
|
|
|
<mat-option value="food/water">Food/Water</mat-option>
|
|
|
|
<mat-option value="fuel/energy">Fuel/Energy</mat-option>
|
|
|
|
<mat-option value="education">Education</mat-option>
|
|
|
|
<mat-option value="health">Health</mat-option>
|
|
|
|
<mat-option value="shop">Shop</mat-option>
|
|
|
|
<mat-option value="environment">Environment</mat-option>
|
|
|
|
<mat-option value="transport">Transport</mat-option>
|
|
|
|
<mat-option value="farming/labour">Farming/Labour</mat-option>
|
|
|
|
<mat-option value="savings">Savings Group</mat-option>
|
2020-12-05 07:30:30 +01:00
|
|
|
<mat-option value="other">Savings Group</mat-option>
|
2020-11-25 08:57:17 +01:00
|
|
|
</mat-select>
|
2021-02-08 12:47:07 +01:00
|
|
|
<mat-error *ngIf="submitted && accountInfoFormStub.businessCategory.errors">
|
|
|
|
Category is required.
|
|
|
|
</mat-error>
|
2020-11-25 08:57:17 +01:00
|
|
|
</mat-form-field>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="col-md-6 col-lg-4">
|
2020-12-05 07:30:30 +01:00
|
|
|
<mat-form-field appearance="outline">
|
|
|
|
<mat-label>User Location: </mat-label>
|
2021-02-08 12:47:07 +01:00
|
|
|
<input matInput type="text" id="userLocation" placeholder="{{account?.userLocation}}"
|
|
|
|
value="{{account?.userLocation}}" formControlName="userLocation" [errorStateMatcher]="matcher">
|
|
|
|
<mat-error *ngIf="submitted && accountInfoFormStub.userLocation.errors">
|
|
|
|
User Location is required.
|
|
|
|
</mat-error>
|
2020-12-05 07:30:30 +01:00
|
|
|
</mat-form-field>
|
2020-11-25 08:57:17 +01:00
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="col-md-6 col-lg-4">
|
2020-12-05 07:30:30 +01:00
|
|
|
<mat-form-field appearance="outline">
|
|
|
|
<mat-label> LOCATION: </mat-label>
|
2021-02-08 12:47:07 +01:00
|
|
|
<mat-select id="location" [(value)]="account.location" formControlName="location"
|
|
|
|
[errorStateMatcher]="matcher">
|
2020-12-05 07:30:30 +01:00
|
|
|
<div *ngFor="let county of locations">
|
|
|
|
<div *ngFor="let district of county.districts">
|
2021-02-08 12:47:07 +01:00
|
|
|
<mat-optgroup *ngFor="let location of district.locations" [label]="county.name + ' / ' +
|
|
|
|
district.name + ' / ' + location.name">
|
2020-12-05 07:30:30 +01:00
|
|
|
<mat-option *ngFor="let village of location.villages" [value]="village">
|
|
|
|
{{village}}
|
|
|
|
</mat-option>
|
|
|
|
</mat-optgroup>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</mat-select>
|
2021-02-08 12:47:07 +01:00
|
|
|
<mat-error *ngIf="submitted && accountInfoFormStub.location.errors">Location is required.</mat-error>
|
2020-12-05 07:30:30 +01:00
|
|
|
</mat-form-field>
|
|
|
|
</div>
|
|
|
|
|
2021-02-23 13:32:02 +01:00
|
|
|
<div class="col-md-6 col-lg-4">
|
|
|
|
<mat-form-field appearance="outline">
|
|
|
|
<mat-label> LOCATION TYPE: </mat-label>
|
|
|
|
<mat-select id="locationType" [(value)]="account.locationType" formControlName="locationType"
|
|
|
|
[errorStateMatcher]="matcher">
|
|
|
|
<mat-option value="Urban"> URBAN </mat-option>
|
|
|
|
<mat-option value="Periurban"> PERIURBAN </mat-option>
|
|
|
|
<mat-option value="Rural"> RURAL </mat-option>
|
|
|
|
<mat-option value="Other"> OTHER </mat-option>
|
|
|
|
</mat-select>
|
|
|
|
<mat-error *ngIf="submitted && accountInfoFormStub.locationType.errors">Location Type is required.</mat-error>
|
|
|
|
</mat-form-field>
|
|
|
|
</div>
|
|
|
|
|
2020-12-05 07:30:30 +01:00
|
|
|
<div class="col-md-6 col-lg-4">
|
|
|
|
<mat-form-field appearance="outline">
|
|
|
|
<mat-label>Referred By: </mat-label>
|
2021-02-08 12:47:07 +01:00
|
|
|
<input matInput type="text" id="referredBy" placeholder="{{account?.referrer}}" readonly
|
|
|
|
value="{{account?.referrer}}" formControlName="referrer" [errorStateMatcher]="matcher">
|
|
|
|
<mat-error *ngIf="submitted && accountInfoFormStub.referrer.errors">Referrer is required.</mat-error>
|
2020-12-05 07:30:30 +01:00
|
|
|
</mat-form-field>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="col-md-6 col-lg-4">
|
2021-02-08 12:47:07 +01:00
|
|
|
<button mat-raised-button color="primary" type="button" class="btn btn btn-outline-primary mb-3">
|
|
|
|
Add User KYC
|
|
|
|
</button>
|
2020-12-05 07:30:30 +01:00
|
|
|
</div>
|
|
|
|
|
|
|
|
<div *ngIf="account.failedPinAttempts != 0" class="col-md-6 col-lg-4">
|
2021-02-08 12:47:07 +01:00
|
|
|
<button mat-raised-button color="primary" type="button" class="btn btn btn-outline-success mb-3"
|
|
|
|
(click)="resetPin()">
|
|
|
|
Reset Pin
|
|
|
|
</button>
|
2020-11-25 08:57:17 +01:00
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="col-md-6 col-lg-4">
|
2021-02-17 11:00:38 +01:00
|
|
|
<button mat-raised-button color="warn" type="button" class="btn btn-outline-danger mb-3">
|
2021-02-08 12:47:07 +01:00
|
|
|
Delete User
|
|
|
|
</button>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="col-md-6 col-lg-4">
|
2021-02-17 11:00:38 +01:00
|
|
|
<button mat-raised-button color="primary" type="submit" class="btn btn-outline-primary">
|
|
|
|
SAVE DETAILS
|
2021-02-08 12:47:07 +01:00
|
|
|
</button>
|
2020-11-25 08:57:17 +01:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</form>
|
|
|
|
</div>
|
|
|
|
</div>
|
2020-12-05 07:30:30 +01:00
|
|
|
|
2020-11-25 08:57:17 +01:00
|
|
|
<div class="card mb-3">
|
|
|
|
<mat-card-title class="card-header">
|
|
|
|
USER
|
|
|
|
</mat-card-title>
|
|
|
|
<div class="card-body">
|
|
|
|
<div class="table-responsive">
|
|
|
|
<table class="table table-striped table-bordered table-hover">
|
|
|
|
<caption> 1 user </caption>
|
|
|
|
<thead class="thead-dark">
|
|
|
|
<tr>
|
|
|
|
<th scope="col">NAME</th>
|
|
|
|
<th scope="col">ACCOUNT TYPE</th>
|
|
|
|
<th scope="col">CREATED</th>
|
|
|
|
<th scope="col">STATUS</th>
|
|
|
|
</tr>
|
|
|
|
</thead>
|
|
|
|
<tbody>
|
2020-12-05 07:30:30 +01:00
|
|
|
<tr>
|
|
|
|
<td>{{account?.name}}</td>
|
|
|
|
<td>{{account?.type}}</td>
|
|
|
|
<td>{{account?.created}}</td>
|
|
|
|
<td>
|
2021-02-23 13:32:02 +01:00
|
|
|
<span *ngIf="account?.status === 'active'" class="badge badge-success badge-pill">
|
2021-02-08 12:47:07 +01:00
|
|
|
{{account?.status}}
|
|
|
|
</span>
|
2021-02-23 13:32:02 +01:00
|
|
|
<span *ngIf="account?.status === 'blocked'" class="badge badge-danger badge-pill">
|
2021-02-08 12:47:07 +01:00
|
|
|
{{account?.status}}
|
|
|
|
</span>
|
2020-12-05 07:30:30 +01:00
|
|
|
</td>
|
2020-11-25 08:57:17 +01:00
|
|
|
</tr>
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
2020-12-05 07:30:30 +01:00
|
|
|
<div class="card">
|
|
|
|
<mat-card-title class="card-header">
|
|
|
|
History
|
|
|
|
</mat-card-title>
|
2020-11-25 08:57:17 +01:00
|
|
|
<div class="card-body">
|
|
|
|
<mat-form-field appearance="outline">
|
|
|
|
<mat-label> Filter </mat-label>
|
2020-12-05 07:30:30 +01:00
|
|
|
<input matInput type="text" (keyup)="doHistoryFilter($event.target.value)" placeholder="Filter">
|
2020-11-25 08:57:17 +01:00
|
|
|
<mat-icon matSuffix>search</mat-icon>
|
|
|
|
</mat-form-field>
|
|
|
|
|
2020-12-05 07:30:30 +01:00
|
|
|
<mat-table class="mat-elevation-z10" [dataSource]="historyDataSource" matSort #HistoryTableSort="matSort"
|
|
|
|
matSortActive="sender" matSortDirection="asc" matSortDisableClear>
|
2020-11-25 08:57:17 +01:00
|
|
|
|
2020-12-05 07:30:30 +01:00
|
|
|
<ng-container matColumnDef="user">
|
|
|
|
<mat-header-cell *matHeaderCellDef mat-sort-header> User </mat-header-cell>
|
|
|
|
<mat-cell *matCellDef="let history"> {{history.userName}} </mat-cell>
|
2020-11-25 08:57:17 +01:00
|
|
|
</ng-container>
|
|
|
|
|
2020-12-05 07:30:30 +01:00
|
|
|
<ng-container matColumnDef="action">
|
|
|
|
<mat-header-cell *matHeaderCellDef mat-sort-header> Action </mat-header-cell>
|
|
|
|
<mat-cell *matCellDef="let history"> {{history.action}} </mat-cell>
|
2020-11-25 08:57:17 +01:00
|
|
|
</ng-container>
|
|
|
|
|
2020-12-05 07:30:30 +01:00
|
|
|
<ng-container matColumnDef="staff">
|
|
|
|
<mat-header-cell *matHeaderCellDef mat-sort-header> Staff </mat-header-cell>
|
|
|
|
<mat-cell *matCellDef="let history"> {{history.staff}} </mat-cell>
|
2020-11-25 08:57:17 +01:00
|
|
|
</ng-container>
|
|
|
|
|
2020-12-05 07:30:30 +01:00
|
|
|
<ng-container matColumnDef="timestamp">
|
|
|
|
<mat-header-cell *matHeaderCellDef mat-sort-header> Timestamp </mat-header-cell>
|
|
|
|
<mat-cell *matCellDef="let history"> {{history.timestamp | date}} </mat-cell>
|
2020-11-25 08:57:17 +01:00
|
|
|
</ng-container>
|
|
|
|
|
2020-12-05 07:30:30 +01:00
|
|
|
<mat-header-row *matHeaderRowDef="historyDisplayedColumns"></mat-header-row>
|
|
|
|
<mat-row *matRowDef="let history; columns: historyDisplayedColumns" matRipple></mat-row>
|
2020-11-25 08:57:17 +01:00
|
|
|
</mat-table>
|
|
|
|
|
2020-12-05 07:30:30 +01:00
|
|
|
<mat-paginator #HistoryTablePaginator="matPaginator" [pageSize]="10"
|
|
|
|
[pageSizeOptions]="[10, 20, 50, 100]" showFirstLastButtons></mat-paginator>
|
2020-11-25 08:57:17 +01:00
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
2020-12-05 07:30:30 +01:00
|
|
|
|
|
|
|
<mat-tab-group dynamicHeight mat-align-tabs="start">
|
|
|
|
<mat-tab label="Transactions">
|
|
|
|
<app-transaction-details [transaction]="transaction"></app-transaction-details>
|
|
|
|
<div class="card mt-1">
|
|
|
|
<div class="card-header">
|
|
|
|
<div class="row">
|
|
|
|
<mat-form-field appearance="outline">
|
|
|
|
<mat-label> TRANSACTION TYPE </mat-label>
|
|
|
|
<mat-select id="transferSelect" [(value)]="transactionsType" (selectionChange)="filterTransactions()">
|
|
|
|
<mat-option value="all">ALL TRANSFERS</mat-option>
|
|
|
|
<mat-option value="transaction">PAYMENTS</mat-option>
|
|
|
|
<mat-option value="conversion">CONVERSION</mat-option>
|
|
|
|
<mat-option value="disbursements">DISBURSEMENTS</mat-option>
|
|
|
|
<mat-option value="rewards">REWARDS</mat-option>
|
|
|
|
<mat-option value="reclamation">RECLAMATION</mat-option>
|
|
|
|
</mat-select>
|
|
|
|
</mat-form-field>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="card-body">
|
|
|
|
<mat-form-field appearance="outline">
|
|
|
|
<mat-label> Filter </mat-label>
|
|
|
|
<input matInput type="text" (keyup)="doTransactionFilter($event.target.value)" placeholder="Filter">
|
|
|
|
<mat-icon matSuffix>search</mat-icon>
|
|
|
|
</mat-form-field>
|
|
|
|
|
2021-02-08 12:47:07 +01:00
|
|
|
<mat-table class="mat-elevation-z10" [dataSource]="transactionsDataSource" matSort matSortActive="created"
|
|
|
|
#TransactionTableSort="matSort" matSortDirection="asc" matSortDisableClear>
|
2020-12-05 07:30:30 +01:00
|
|
|
|
|
|
|
<ng-container matColumnDef="view">
|
|
|
|
<mat-header-cell *matHeaderCellDef> View </mat-header-cell>
|
|
|
|
<mat-cell *matCellDef="let transaction" (click)="viewTransaction(transaction)">
|
|
|
|
<i class="fa fa-eye"></i>
|
|
|
|
</mat-cell>
|
|
|
|
</ng-container>
|
|
|
|
|
|
|
|
<ng-container matColumnDef="sender">
|
|
|
|
<mat-header-cell *matHeaderCellDef mat-sort-header> Sender </mat-header-cell>
|
|
|
|
<mat-cell *matCellDef="let transaction"> {{transaction.sender?.vcard.fn}} </mat-cell>
|
|
|
|
</ng-container>
|
|
|
|
|
|
|
|
<ng-container matColumnDef="senderLocation">
|
|
|
|
<mat-header-cell *matHeaderCellDef mat-sort-header> Sender Location </mat-header-cell>
|
|
|
|
<mat-cell *matCellDef="let transaction"> {{account.location}} </mat-cell>
|
|
|
|
</ng-container>
|
|
|
|
|
|
|
|
<ng-container matColumnDef="recipient">
|
|
|
|
<mat-header-cell *matHeaderCellDef mat-sort-header> Recipient </mat-header-cell>
|
|
|
|
<mat-cell *matCellDef="let transaction"> {{transaction.recipient?.vcard.fn}} </mat-cell>
|
|
|
|
</ng-container>
|
|
|
|
|
|
|
|
<ng-container matColumnDef="recipientLocation">
|
|
|
|
<mat-header-cell *matHeaderCellDef mat-sort-header> Recipient Location </mat-header-cell>
|
|
|
|
<mat-cell *matCellDef="let transaction"> {{account.location}} </mat-cell>
|
|
|
|
</ng-container>
|
|
|
|
|
|
|
|
<ng-container matColumnDef="token">
|
|
|
|
<mat-header-cell *matHeaderCellDef mat-sort-header> Token </mat-header-cell>
|
|
|
|
<mat-cell *matCellDef="let transaction">
|
|
|
|
<span *ngIf="transaction.type == 'transaction'">{{transaction.token.name}}</span>
|
|
|
|
<span *ngIf="transaction.type == 'conversion'">{{transaction.destinationToken.name}}</span>
|
|
|
|
</mat-cell>
|
|
|
|
</ng-container>
|
|
|
|
|
|
|
|
<ng-container matColumnDef="value">
|
|
|
|
<mat-header-cell *matHeaderCellDef mat-sort-header> Value </mat-header-cell>
|
|
|
|
<mat-cell *matCellDef="let transaction">
|
|
|
|
<span *ngIf="transaction.type == 'transaction'">{{transaction.value | tokenRatio}}</span>
|
|
|
|
<span *ngIf="transaction.type == 'conversion'">{{transaction.toValue | tokenRatio}}</span>
|
|
|
|
</mat-cell>
|
|
|
|
</ng-container>
|
|
|
|
|
|
|
|
<ng-container matColumnDef="created">
|
|
|
|
<mat-header-cell *matHeaderCellDef mat-sort-header> Created </mat-header-cell>
|
|
|
|
<mat-cell *matCellDef="let transaction"> {{transaction.tx.timestamp | date}} </mat-cell>
|
|
|
|
</ng-container>
|
|
|
|
|
|
|
|
<ng-container matColumnDef="type">
|
|
|
|
<mat-header-cell *matHeaderCellDef mat-sort-header> TYPE </mat-header-cell>
|
|
|
|
<mat-cell *matCellDef="let transaction">
|
|
|
|
<span class="badge badge-success badge-pill"> {{transaction.type}} </span>
|
|
|
|
</mat-cell>
|
|
|
|
</ng-container>
|
|
|
|
|
|
|
|
<mat-header-row *matHeaderRowDef="transactionsDisplayedColumns"></mat-header-row>
|
2021-02-08 12:47:07 +01:00
|
|
|
<mat-row *matRowDef="let transaction; columns: transactionsDisplayedColumns" matRipple
|
|
|
|
(click)="viewTransaction(transaction)"></mat-row>
|
2020-12-05 07:30:30 +01:00
|
|
|
</mat-table>
|
|
|
|
|
|
|
|
<mat-paginator #TransactionTablePaginator="matPaginator" [pageSize]="10"
|
|
|
|
[pageSizeOptions]="[10, 20, 50, 100]" showFirstLastButtons></mat-paginator>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</mat-tab>
|
|
|
|
|
|
|
|
<mat-tab label="Users">
|
|
|
|
<div class="card mt-1">
|
|
|
|
<mat-card-title class="card-header">
|
|
|
|
Accounts
|
|
|
|
</mat-card-title>
|
|
|
|
<div class="card-body">
|
|
|
|
<div class="row card-header">
|
|
|
|
<mat-form-field appearance="outline">
|
|
|
|
<mat-label> ACCOUNT TYPE </mat-label>
|
|
|
|
<mat-select id="typeSelect" [(value)]="accountsType" (selectionChange)="filterAccounts()">
|
|
|
|
<mat-option value="all">ALL</mat-option>
|
|
|
|
<mat-option value="user">USER</mat-option>
|
|
|
|
<mat-option value="cashier">CASHIER</mat-option>
|
|
|
|
<mat-option value="vendor">VENDOR</mat-option>
|
|
|
|
<mat-option value="tokenAgent">TOKENAGENT</mat-option>
|
|
|
|
<mat-option value="group">GROUPACCOUNT</mat-option>
|
|
|
|
</mat-select>
|
|
|
|
</mat-form-field>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<mat-form-field appearance="outline">
|
|
|
|
<mat-label> Filter </mat-label>
|
|
|
|
<input matInput type="text" (keyup)="doUserFilter($event.target.value)" placeholder="Filter">
|
|
|
|
<mat-icon matSuffix>search</mat-icon>
|
|
|
|
</mat-form-field>
|
|
|
|
|
|
|
|
<mat-table class="mat-elevation-z10" [dataSource]="userDataSource" matSort #UserTableSort="matSort"
|
|
|
|
matSortActive="created" matSortDirection="desc" matSortDisableClear>
|
|
|
|
|
|
|
|
<ng-container matColumnDef="name">
|
|
|
|
<mat-header-cell *matHeaderCellDef mat-sort-header> NAME </mat-header-cell>
|
|
|
|
<mat-cell *matCellDef="let user"> {{user.name}} </mat-cell>
|
|
|
|
</ng-container>
|
|
|
|
|
|
|
|
<ng-container matColumnDef="phone">
|
|
|
|
<mat-header-cell *matHeaderCellDef mat-sort-header> PHONE NUMBER </mat-header-cell>
|
|
|
|
<mat-cell *matCellDef="let user"> {{user.phone}} </mat-cell>
|
|
|
|
</ng-container>
|
|
|
|
|
|
|
|
<ng-container matColumnDef="created">
|
|
|
|
<mat-header-cell *matHeaderCellDef mat-sort-header> CREATED </mat-header-cell>
|
|
|
|
<mat-cell *matCellDef="let user"> {{user.created}} </mat-cell>
|
|
|
|
</ng-container>
|
|
|
|
|
|
|
|
<ng-container matColumnDef="balance">
|
|
|
|
<mat-header-cell *matHeaderCellDef mat-sort-header> BALANCE </mat-header-cell>
|
|
|
|
<mat-cell *matCellDef="let user"> {{user.balance}} </mat-cell>
|
|
|
|
</ng-container>
|
|
|
|
|
|
|
|
<ng-container matColumnDef="type">
|
|
|
|
<mat-header-cell *matHeaderCellDef mat-sort-header> TYPE </mat-header-cell>
|
|
|
|
<mat-cell *matCellDef="let user"> {{user.type}} </mat-cell>
|
|
|
|
</ng-container>
|
|
|
|
|
|
|
|
<ng-container matColumnDef="status">
|
|
|
|
<mat-header-cell *matHeaderCellDef mat-sort-header> STATUS </mat-header-cell>
|
|
|
|
<mat-cell *matCellDef="let user">
|
2021-02-08 12:47:07 +01:00
|
|
|
<span *ngIf="user.status === 'approved'" class="badge badge-success badge-pill">
|
|
|
|
{{user.status}}
|
|
|
|
</span>
|
|
|
|
<span *ngIf="user.status === 'unapproved'" class="badge badge-danger badge-pill">
|
|
|
|
{{user.status}}
|
|
|
|
</span>
|
2020-12-05 07:30:30 +01:00
|
|
|
</mat-cell>
|
|
|
|
</ng-container>
|
|
|
|
|
|
|
|
<ng-container matColumnDef="location">
|
|
|
|
<mat-header-cell *matHeaderCellDef mat-sort-header> LOCATION </mat-header-cell>
|
|
|
|
<mat-cell *matCellDef="let user"> {{user.location}} </mat-cell>
|
|
|
|
</ng-container>
|
|
|
|
|
|
|
|
<ng-container matColumnDef="failedPinAttempts">
|
|
|
|
<mat-header-cell *matHeaderCellDef mat-sort-header> FAILED PIN ATTEMPTS </mat-header-cell>
|
|
|
|
<mat-cell *matCellDef="let user"> {{user.failedPinAttempts}} </mat-cell>
|
|
|
|
</ng-container>
|
|
|
|
|
|
|
|
<mat-header-row *matHeaderRowDef=userDisplayedColumns></mat-header-row>
|
2021-02-08 12:47:07 +01:00
|
|
|
<mat-row *matRowDef="let account; columns: userDisplayedColumns" (click)="viewAccount(account)"
|
|
|
|
matRipple></mat-row>
|
2020-12-05 07:30:30 +01:00
|
|
|
</mat-table>
|
|
|
|
|
2021-02-08 12:47:07 +01:00
|
|
|
<mat-paginator #UserTablePaginator="matPaginator" [pageSize]="10" [pageSizeOptions]="[10, 20, 50, 100]"
|
|
|
|
showFirstLastButtons></mat-paginator>
|
2020-12-05 07:30:30 +01:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</mat-tab>
|
|
|
|
</mat-tab-group>
|
2020-11-25 08:57:17 +01:00
|
|
|
</div>
|
|
|
|
<app-footer appMenuSelection></app-footer>
|
|
|
|
</div>
|
|
|
|
<!-- ============================================================== -->
|
|
|
|
<!-- End Page content -->
|
|
|
|
<!-- ============================================================== -->
|
|
|
|
</div>
|