From 314fd2b537ee824024e535d6843eb622676311aa Mon Sep 17 00:00:00 2001 From: Abhay Chawla Date: Tue, 7 Aug 2018 00:48:02 +0530 Subject: [PATCH] feat(provisioning-entries): view journal entries Add view provisioning journal entries component. Also, add feature to create provisioning journal entries and recreate provisioning. --- .../accounting/accounting-routing.module.ts | 12 ++++ src/app/accounting/accounting.module.ts | 4 +- src/app/accounting/accounting.service.ts | 15 ++++ .../provisioning-entries.component.html | 17 +++-- .../provisioning-entries.component.ts | 22 +++++- .../view-provisioning-entry.component.html | 6 ++ .../view-provisioning-entry.component.ts | 18 +++-- ...rovisioning-journal-entries.component.html | 72 +++++++++++++++++++ ...rovisioning-journal-entries.component.scss | 3 + ...isioning-journal-entries.component.spec.ts | 25 +++++++ ...-provisioning-journal-entries.component.ts | 51 +++++++++++++ 11 files changed, 234 insertions(+), 11 deletions(-) create mode 100644 src/app/accounting/provisioning-entries/view-provisioning-journal-entries/view-provisioning-journal-entries.component.html create mode 100644 src/app/accounting/provisioning-entries/view-provisioning-journal-entries/view-provisioning-journal-entries.component.scss create mode 100644 src/app/accounting/provisioning-entries/view-provisioning-journal-entries/view-provisioning-journal-entries.component.spec.ts create mode 100644 src/app/accounting/provisioning-entries/view-provisioning-journal-entries/view-provisioning-journal-entries.component.ts diff --git a/src/app/accounting/accounting-routing.module.ts b/src/app/accounting/accounting-routing.module.ts index 0de73dfca..377f72e36 100644 --- a/src/app/accounting/accounting-routing.module.ts +++ b/src/app/accounting/accounting-routing.module.ts @@ -34,6 +34,7 @@ import { PeriodicAccrualsComponent } from './periodic-accruals/periodic-accruals import { ProvisioningEntriesComponent } from './provisioning-entries/provisioning-entries.component'; import { CreateProvisioningEntryComponent } from './provisioning-entries/create-provisioning-entry/create-provisioning-entry.component'; import { ViewProvisioningEntryComponent } from './provisioning-entries/view-provisioning-entry/view-provisioning-entry.component'; +import { ViewProvisioningJournalEntriesComponent } from './provisioning-entries/view-provisioning-journal-entries/view-provisioning-journal-entries.component'; const routes: Routes = [ Route.withShell([ @@ -227,6 +228,17 @@ const routes: Routes = [ path: 'view/:id', component: ViewProvisioningEntryComponent, data: { title: extract('View Provisioning Entry'), routeParamBreadcrumb: 'id' } + }, + { + path: 'journal-entries', + data: { title: extract('View Provisioning Journal Entry'), breadcrumb: 'Journal Entries', addBreadcrumbLink: false }, + children: [ + { + path: 'view/:id', + component: ViewProvisioningJournalEntriesComponent, + data: { title: extract('View Provisioning Journal Entry'), routeParamBreadcrumb: 'id' } + } + ] } ] } diff --git a/src/app/accounting/accounting.module.ts b/src/app/accounting/accounting.module.ts index 28b2e6ea6..41dd5f260 100644 --- a/src/app/accounting/accounting.module.ts +++ b/src/app/accounting/accounting.module.ts @@ -32,6 +32,7 @@ import { PeriodicAccrualsComponent } from './periodic-accruals/periodic-accruals import { ProvisioningEntriesComponent } from './provisioning-entries/provisioning-entries.component'; import { CreateProvisioningEntryComponent } from './provisioning-entries/create-provisioning-entry/create-provisioning-entry.component'; import { ViewProvisioningEntryComponent } from './provisioning-entries/view-provisioning-entry/view-provisioning-entry.component'; +import { ViewProvisioningJournalEntriesComponent } from './provisioning-entries/view-provisioning-journal-entries/view-provisioning-journal-entries.component'; @NgModule({ imports: [ @@ -68,7 +69,8 @@ import { ViewProvisioningEntryComponent } from './provisioning-entries/view-prov PeriodicAccrualsComponent, ProvisioningEntriesComponent, CreateProvisioningEntryComponent, - ViewProvisioningEntryComponent + ViewProvisioningEntryComponent, + ViewProvisioningJournalEntriesComponent ], entryComponents: [ RevertTransactionComponent, diff --git a/src/app/accounting/accounting.service.ts b/src/app/accounting/accounting.service.ts index 7bc813362..0be4a20ce 100644 --- a/src/app/accounting/accounting.service.ts +++ b/src/app/accounting/accounting.service.ts @@ -194,4 +194,19 @@ export class AccountingService { return this.http.get('/provisioningentries/entries', { params: httpParams }); } + getProvisioningJournalEntries(entryId: string) { + const httpParams = new HttpParams().set('entryId', entryId); + return this.http.get('/journalentries/provisioning', { params: httpParams }); + } + + createProvisioningJournalEntries(provisioningEntryId: string) { + const httpParams = new HttpParams().set('command', 'createjournalentry'); + return this.http.post(`/provisioningentries/${provisioningEntryId}`, {}, { params: httpParams }); + } + + recreateProvisioningEntries(provisioningEntryId: string) { + const httpParams = new HttpParams().set('command', 'recreateprovisioningentry'); + return this.http.post(`/provisioningentries/${provisioningEntryId}`, {}, { params: httpParams }); + } + } diff --git a/src/app/accounting/provisioning-entries/provisioning-entries.component.html b/src/app/accounting/provisioning-entries/provisioning-entries.component.html index 75fa9eaab..5c76edaad 100644 --- a/src/app/accounting/provisioning-entries/provisioning-entries.component.html +++ b/src/app/accounting/provisioning-entries/provisioning-entries.component.html @@ -28,27 +28,36 @@ Journal Entry Created - {{ provisioningEntry.journalEntry }} + + + View Report - + Recreate Provisioning - + View Journal Entry - + diff --git a/src/app/accounting/provisioning-entries/provisioning-entries.component.ts b/src/app/accounting/provisioning-entries/provisioning-entries.component.ts index 19dac5d51..642299dbd 100644 --- a/src/app/accounting/provisioning-entries/provisioning-entries.component.ts +++ b/src/app/accounting/provisioning-entries/provisioning-entries.component.ts @@ -1,5 +1,6 @@ import { Component, OnInit, ViewChild } from '@angular/core'; import { MatSort, MatPaginator, MatTableDataSource } from '@angular/material'; +import { Router } from '@angular/router'; import { AccountingService } from '../accounting.service'; @@ -16,7 +17,8 @@ export class ProvisioningEntriesComponent implements OnInit { @ViewChild(MatPaginator) paginator: MatPaginator; @ViewChild(MatSort) sort: MatSort; - constructor(private accountingService: AccountingService) { } + constructor(private accountingService: AccountingService, + private router: Router) { } ngOnInit() { this.getProvisioningEntries(); @@ -34,4 +36,22 @@ export class ProvisioningEntriesComponent implements OnInit { this.dataSource.filter = filterValue.trim().toLowerCase(); } + viewReport($event: any, provisioningEntryId: number) { + // Tenant Customizable + $event.stopPropagation(); + } + + recreateProvisioning($event: any, provisioningEntryId: string) { + this.accountingService.recreateProvisioningEntries(provisioningEntryId) + .subscribe((response: any) => { + this.router.navigate(['/accounting/provisioning-entries/view', response.resourceId]); + }); + $event.stopPropagation(); + } + + viewJournalEntry($event: any, provisioningEntryId: number) { + this.router.navigate(['/accounting/provisioning-entries/journal-entries/view', provisioningEntryId]); + $event.stopPropagation(); + } + } diff --git a/src/app/accounting/provisioning-entries/view-provisioning-entry/view-provisioning-entry.component.html b/src/app/accounting/provisioning-entries/view-provisioning-entry/view-provisioning-entry.component.html index c492cb4a2..5df7b031a 100644 --- a/src/app/accounting/provisioning-entries/view-provisioning-entry/view-provisioning-entry.component.html +++ b/src/app/accounting/provisioning-entries/view-provisioning-entry/view-provisioning-entry.component.html @@ -1,5 +1,11 @@
+
+ +
+ diff --git a/src/app/accounting/provisioning-entries/view-provisioning-entry/view-provisioning-entry.component.ts b/src/app/accounting/provisioning-entries/view-provisioning-entry/view-provisioning-entry.component.ts index bc4625b1e..ab88e9f6c 100644 --- a/src/app/accounting/provisioning-entries/view-provisioning-entry/view-provisioning-entry.component.ts +++ b/src/app/accounting/provisioning-entries/view-provisioning-entry/view-provisioning-entry.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit, ViewChild, AfterViewInit } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; +import { ActivatedRoute, Router } from '@angular/router'; import { FormControl } from '@angular/forms'; import { MatPaginator, MatSort, MatTableDataSource } from '@angular/material'; @@ -26,7 +26,7 @@ export class ViewProvisioningEntryComponent implements OnInit, AfterViewInit { officeName = new FormControl(); officeData: any; - filteredOfficeData: any + filteredOfficeData: any; loanProduct = new FormControl(); loanProductData: any; @@ -37,6 +37,7 @@ export class ViewProvisioningEntryComponent implements OnInit, AfterViewInit { filteredProvisioningCategoryData: any; constructor(private route: ActivatedRoute, + private router: Router, private accountingService: AccountingService) { } ngOnInit() { @@ -84,9 +85,9 @@ export class ViewProvisioningEntryComponent implements OnInit, AfterViewInit { } filterPredicate(data: any, filterValue: any) { - return data.officeName.toLowerCase().indexOf(filterValue['officeName']) != -1 - && data.productName.toLowerCase().indexOf(filterValue['productName']) != -1 - && data.categoryName.toLowerCase().indexOf(filterValue['categoryName']) != -1; + return data.officeName.toLowerCase().indexOf(filterValue['officeName']) !== -1 + && data.productName.toLowerCase().indexOf(filterValue['productName']) !== -1 + && data.categoryName.toLowerCase().indexOf(filterValue['categoryName']) !== -1; } applyFilter(filterValue: string, property: string) { @@ -159,4 +160,11 @@ export class ViewProvisioningEntryComponent implements OnInit, AfterViewInit { return provisioningCategoryData.filter((provisioningCategory: any) => provisioningCategory.categoryName.toLowerCase().includes(provisioningCategoryName.toLocaleLowerCase())); } + createProvisioningJournalEntries() { + this.accountingService.createProvisioningJournalEntries(this.provisioningEntryId) + .subscribe((response: any) => { + this.router.navigate(['/accounting/provisioning-entries/journal-entries/view', response.resourceId]); + }); + } + } diff --git a/src/app/accounting/provisioning-entries/view-provisioning-journal-entries/view-provisioning-journal-entries.component.html b/src/app/accounting/provisioning-entries/view-provisioning-journal-entries/view-provisioning-journal-entries.component.html new file mode 100644 index 000000000..3c3fa137e --- /dev/null +++ b/src/app/accounting/provisioning-entries/view-provisioning-journal-entries/view-provisioning-journal-entries.component.html @@ -0,0 +1,72 @@ +
+ +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Entry ID {{ provisioningJournalEntry.id }} Office {{ provisioningJournalEntry.officeName }} Transaction Date {{ provisioningJournalEntry.transactionDate }} Transaction ID {{ provisioningJournalEntry.transactionId }} Type {{ provisioningJournalEntry.glAccountType.value }} Type {{ provisioningJournalEntry.createdByUserName }} Account Code {{ provisioningJournalEntry.glAccountCode }} Account Name {{ provisioningJournalEntry.glAccountName }} Debit {{ (provisioningJournalEntry.currency.displaySymbol || provisioningJournalEntry.currency.code) + ' ' + provisioningJournalEntry.amount }} Credit {{ (provisioningJournalEntry.currency.displaySymbol || provisioningJournalEntry.currency.code) + ' ' + provisioningJournalEntry.amount }}
+ + + +
+ +
diff --git a/src/app/accounting/provisioning-entries/view-provisioning-journal-entries/view-provisioning-journal-entries.component.scss b/src/app/accounting/provisioning-entries/view-provisioning-journal-entries/view-provisioning-journal-entries.component.scss new file mode 100644 index 000000000..1922e7ffa --- /dev/null +++ b/src/app/accounting/provisioning-entries/view-provisioning-journal-entries/view-provisioning-journal-entries.component.scss @@ -0,0 +1,3 @@ +table { + width: 100%; +} diff --git a/src/app/accounting/provisioning-entries/view-provisioning-journal-entries/view-provisioning-journal-entries.component.spec.ts b/src/app/accounting/provisioning-entries/view-provisioning-journal-entries/view-provisioning-journal-entries.component.spec.ts new file mode 100644 index 000000000..649e634c6 --- /dev/null +++ b/src/app/accounting/provisioning-entries/view-provisioning-journal-entries/view-provisioning-journal-entries.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ViewProvisioningJournalEntriesComponent } from './view-provisioning-journal-entries.component'; + +describe('ViewProvisioningJournalEntriesComponent', () => { + let component: ViewProvisioningJournalEntriesComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ ViewProvisioningJournalEntriesComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ViewProvisioningJournalEntriesComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/accounting/provisioning-entries/view-provisioning-journal-entries/view-provisioning-journal-entries.component.ts b/src/app/accounting/provisioning-entries/view-provisioning-journal-entries/view-provisioning-journal-entries.component.ts new file mode 100644 index 000000000..af35f3e28 --- /dev/null +++ b/src/app/accounting/provisioning-entries/view-provisioning-journal-entries/view-provisioning-journal-entries.component.ts @@ -0,0 +1,51 @@ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { MatPaginator, MatSort, MatTableDataSource } from '@angular/material'; + +import { AccountingService } from '../../accounting.service'; + +@Component({ + selector: 'mifosx-view-provisioning-journal-entries', + templateUrl: './view-provisioning-journal-entries.component.html', + styleUrls: ['./view-provisioning-journal-entries.component.scss'] +}) +export class ViewProvisioningJournalEntriesComponent implements OnInit { + + provisioningEntryId: string; + + displayedColumns: string[] = ['id', 'officeName', 'transactionDate', 'transactionId', 'glAccountType', 'createdByUserName', 'glAccountCode', 'glAccountName', 'debit', 'credit']; + dataSource: any; + + @ViewChild(MatPaginator) paginator: MatPaginator; + @ViewChild(MatSort) sort: MatSort; + + constructor(private route: ActivatedRoute, + private accountingService: AccountingService) { } + + ngOnInit() { + this.provisioningEntryId = this.route.snapshot.paramMap.get('id'); + this.getProvisioningJournalEntry(); + } + + getProvisioningJournalEntry() { + this.accountingService.getProvisioningJournalEntries(this.provisioningEntryId) + .subscribe((provisioningJournalEntryData: any) => { + this.dataSource = new MatTableDataSource(provisioningJournalEntryData.pageItems); + this.dataSource.paginator = this.paginator; + this.dataSource.sortingDataAccessor = (transaction: any, property: any) => { + switch (property) { + case 'glAccountType': return transaction.glAccountType.value; + case 'debit': return transaction.amount; + case 'credit': return transaction.amount; + default: return transaction[property]; + } + }; + this.dataSource.sort = this.sort; + }); + } + + applyFilter(filterValue: string) { + this.dataSource.filter = filterValue.trim().toLowerCase(); + } + +}