From 571f71192c735d64ed7b0820df7ea111770b745b Mon Sep 17 00:00:00 2001 From: Karan Takalkar Date: Tue, 28 Jul 2020 12:44:00 +0530 Subject: [PATCH] feat: view bulk imports page (#637) Fixes: #633 --- .../bulk-import/bulk-import-routing.module.ts | 30 --- src/app/bulk-import/bulk-import.module.ts | 25 --- src/app/centers/centers.component.html | 2 +- src/app/clients/clients.component.html | 2 +- src/app/groups/groups.component.html | 3 + .../bulk-import/bulk-import.component.html | 34 ++-- .../bulk-import/bulk-import.component.scss | 0 .../bulk-import/bulk-import.component.spec.ts | 0 .../bulk-import/bulk-import.component.ts | 5 +- .../bulk-import/bulk-import.resolver.ts | 46 +++++ .../view-bulk-import/bulk-imports.ts | 110 ++++++++++ .../view-bulk-import.component.html | 150 ++++++++++++++ .../view-bulk-import.component.scss | 17 ++ .../view-bulk-import.component.spec.ts | 25 +++ .../view-bulk-import.component.ts | 191 ++++++++++++++++++ .../organization-routing.module.ts | 28 ++- src/app/organization/organization.module.ts | 6 +- src/app/organization/organization.service.ts | 73 +++++++ 18 files changed, 664 insertions(+), 83 deletions(-) delete mode 100644 src/app/bulk-import/bulk-import-routing.module.ts delete mode 100644 src/app/bulk-import/bulk-import.module.ts rename src/app/{ => organization}/bulk-import/bulk-import.component.html (77%) rename src/app/{ => organization}/bulk-import/bulk-import.component.scss (100%) rename src/app/{ => organization}/bulk-import/bulk-import.component.spec.ts (100%) rename src/app/{ => organization}/bulk-import/bulk-import.component.ts (88%) create mode 100644 src/app/organization/bulk-import/bulk-import.resolver.ts create mode 100644 src/app/organization/bulk-import/view-bulk-import/bulk-imports.ts create mode 100644 src/app/organization/bulk-import/view-bulk-import/view-bulk-import.component.html create mode 100644 src/app/organization/bulk-import/view-bulk-import/view-bulk-import.component.scss create mode 100644 src/app/organization/bulk-import/view-bulk-import/view-bulk-import.component.spec.ts create mode 100644 src/app/organization/bulk-import/view-bulk-import/view-bulk-import.component.ts diff --git a/src/app/bulk-import/bulk-import-routing.module.ts b/src/app/bulk-import/bulk-import-routing.module.ts deleted file mode 100644 index bea83ec13..000000000 --- a/src/app/bulk-import/bulk-import-routing.module.ts +++ /dev/null @@ -1,30 +0,0 @@ -/** Angular Imports */ -import { NgModule } from '@angular/core'; -import { Routes, RouterModule } from '@angular/router'; - -/** Translation Imports */ -import { extract } from '../core/i18n/i18n.service'; - -/** Custom Components */ -import { BulkImportComponent } from './bulk-import.component'; - -/** Bulk Import Routes */ -const routes: Routes = [ - { - path: '', - data: { title: extract('Bulk Import'), breadcrumb: 'Bulk Import' }, - component: BulkImportComponent - } -]; - -/** - * Bulk Import Routing Module - * - * Configures the bulk import routes. - */ -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule], - providers: [ ] -}) -export class BulkImportRoutingModule { } diff --git a/src/app/bulk-import/bulk-import.module.ts b/src/app/bulk-import/bulk-import.module.ts deleted file mode 100644 index 1a8ef5782..000000000 --- a/src/app/bulk-import/bulk-import.module.ts +++ /dev/null @@ -1,25 +0,0 @@ -/** Angular Imports */ -import { NgModule } from '@angular/core'; - -/** Custom Modules */ -import { SharedModule } from '../shared/shared.module'; -import { BulkImportRoutingModule } from './bulk-import-routing.module'; - -/** Custom Components */ -import { BulkImportComponent } from './bulk-import.component'; - -/** - * Bulk Import Module - * - * All components related to bulk import functions should be declared here. - */ -@NgModule({ - imports: [ - SharedModule, - BulkImportRoutingModule - ], - declarations: [ - BulkImportComponent - ] -}) -export class BulkImportModule { } diff --git a/src/app/centers/centers.component.html b/src/app/centers/centers.component.html index 036b24b98..efa5e093b 100644 --- a/src/app/centers/centers.component.html +++ b/src/app/centers/centers.component.html @@ -11,7 +11,7 @@
-
-
+ diff --git a/src/app/bulk-import/bulk-import.component.html b/src/app/organization/bulk-import/bulk-import.component.html similarity index 77% rename from src/app/bulk-import/bulk-import.component.html rename to src/app/organization/bulk-import/bulk-import.component.html index 3bfa2ae89..3c78e33d6 100644 --- a/src/app/bulk-import/bulk-import.component.html +++ b/src/app/organization/bulk-import/bulk-import.component.html @@ -8,56 +8,56 @@ - +

Offices

- +

Users

- +

Groups

- +

Loan Accounts

- +

Savings Accounts

- +

Fixed Deposit Accounts

- +

Chart of Accounts

- + @@ -72,7 +72,7 @@ - + @@ -80,56 +80,56 @@ - +

Clients

- +

Centers

- +

Loan Repayments

- +

Savings Transactions

- +

Fixed Deposit Transactions

- +

Recurring Deposit Transactions

- +

Journal Entries

- + diff --git a/src/app/bulk-import/bulk-import.component.scss b/src/app/organization/bulk-import/bulk-import.component.scss similarity index 100% rename from src/app/bulk-import/bulk-import.component.scss rename to src/app/organization/bulk-import/bulk-import.component.scss diff --git a/src/app/bulk-import/bulk-import.component.spec.ts b/src/app/organization/bulk-import/bulk-import.component.spec.ts similarity index 100% rename from src/app/bulk-import/bulk-import.component.spec.ts rename to src/app/organization/bulk-import/bulk-import.component.spec.ts diff --git a/src/app/bulk-import/bulk-import.component.ts b/src/app/organization/bulk-import/bulk-import.component.ts similarity index 88% rename from src/app/bulk-import/bulk-import.component.ts rename to src/app/organization/bulk-import/bulk-import.component.ts index 5f0be7103..d101f8c5d 100644 --- a/src/app/bulk-import/bulk-import.component.ts +++ b/src/app/organization/bulk-import/bulk-import.component.ts @@ -11,9 +11,8 @@ import { Component, OnInit } from '@angular/core'; }) export class BulkImportComponent implements OnInit { - constructor() { } + constructor() {} - ngOnInit() { - } + ngOnInit() {} } diff --git a/src/app/organization/bulk-import/bulk-import.resolver.ts b/src/app/organization/bulk-import/bulk-import.resolver.ts new file mode 100644 index 000000000..167a3833f --- /dev/null +++ b/src/app/organization/bulk-import/bulk-import.resolver.ts @@ -0,0 +1,46 @@ +/** Angular Imports */ +import { Injectable } from '@angular/core'; +import { Resolve, ActivatedRouteSnapshot } from '@angular/router'; + +/** rxjs Imports */ +import { Observable } from 'rxjs'; + +/** Custom Services */ +import { OrganizationService } from '../organization.service'; + +/** Custom Imports */ +import { BulkImports } from './view-bulk-import/bulk-imports'; + +/** + * Bulk Imports data resolver. + */ +@Injectable() +export class BulkImportResolver implements Resolve { + + bulkImportsArray = BulkImports; + + /** + * @param {OrganizationService} organizationService Organization service. + */ + constructor(private organizationService: OrganizationService) { + } + + /** + * Gets bulk-import's entity name + * @param importName Bulk Import Name + */ + getEntityName(importName: string) { + const bulkImport = this.bulkImportsArray.find((entry: any) => importName === entry.name); + return bulkImport.entityType; + } + + /** + * Returns the imports data. + * @returns {Observable} + */ + resolve(route: ActivatedRouteSnapshot): Observable { + const entity = this.getEntityName(route.params['import-name']); + return this.organizationService.getImports(entity); + } + +} diff --git a/src/app/organization/bulk-import/view-bulk-import/bulk-imports.ts b/src/app/organization/bulk-import/view-bulk-import/bulk-imports.ts new file mode 100644 index 000000000..c7c908daf --- /dev/null +++ b/src/app/organization/bulk-import/view-bulk-import/bulk-imports.ts @@ -0,0 +1,110 @@ +export const BulkImports = [ + { + name: 'Offices', + entityType: 'offices', + urlSuffix: '/offices', + formFields: 0 + }, + { + name: 'Users', + entityType: 'users', + urlSuffix: '/users', + formFields: 2 + }, + { + name: 'Groups', + entityType: 'groups', + urlSuffix: '/groups', + formFields: 2 + }, + { + name: 'Centers', + entityType: 'centers', + urlSuffix: '/centers', + formFields: 2 + }, + { + name: 'Clients', + entityType: 'client', + urlSuffix: '/clients', + formFields: 3 + }, + { + name: 'Employees', + entityType: 'staff', + urlSuffix: '/staff', + formFields: 1 + }, + { + name: 'Guarantors', + entityType: 'guarantors', + urlSuffix: '/loans/1/guarantors', + formFields: 1 + }, + { + name: 'Journal Entries', + entityType: 'gljournalentries', + urlSuffix: '/journalentries', + formFields: 1 + }, + { + name: 'Loan Accounts', + entityType: 'loans', + urlSuffix: '/loans', + formFields: 2 + }, + { + name: 'Savings Accounts', + entityType: 'savingsaccount', + urlSuffix: '/savingsaccounts', + formFields: 2 + }, + { + name: 'Fixed Deposit Accounts', + entityType: 'fixeddepositaccounts', + urlSuffix: '/fixeddepositaccounts', + formFields: 2 + }, + { + name: 'Reccuring Deposit Accounts', + entityType: 'recurringdeposits', + urlSuffix: '/recurringdepositaccounts', + formFields: 2 + }, + { + name: 'Chart of Accounts', + entityType: 'chartofaccounts', + urlSuffix: '/glaccounts', + formFields: 2 + }, + { + name: 'Share Accounts', + entityType: 'shareaccounts', + urlSuffix: '/accounts/share', + formFields: 1 + }, + { + name: 'Loan Repayments', + entityType: 'loantransactions', + urlSuffix: '/loans/repayments', + formFields: 1 + }, + { + name: 'Savings Transactions', + entityType: 'savingstransactions', + urlSuffix: '/savingsaccounts/transactions', + formFields: 1 + }, + { + name: 'Fixed Deposit Transactions', + entityType: 'fixeddeposittransactions', + urlSuffix: '/fixeddepositaccounts/transaction', + formFields: 1 + }, + { + name: 'Recurring Deposit Transactions', + entityType: 'recurringdepositstransactions', + urlSuffix: '/recurringdepositaccounts/transactions', + formFields: 1 + }, + ]; diff --git a/src/app/organization/bulk-import/view-bulk-import/view-bulk-import.component.html b/src/app/organization/bulk-import/view-bulk-import/view-bulk-import.component.html new file mode 100644 index 000000000..9e1ad33bf --- /dev/null +++ b/src/app/organization/bulk-import/view-bulk-import/view-bulk-import.component.html @@ -0,0 +1,150 @@ +
+ +
+ + + +

{{bulkImport.name}} Template

+ +
+ + + +
+ + Office + + + {{ office.name }} + + + +
+ +
+ + Staff + + + {{ staff.displayName }} + + + +
+ +
+ + Legal Form + + Entity + Person + + +
+ +
+ +
+ +
+ +
+ +
+ + + +

{{bulkImport.name}}

+ +

Select Excel File

+ + + + Please retain the value Entity/Person in the filename. + +
+ +
+ +
+ +
+ +
+ + + +
+

Documents

+
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Name {{ import.name }} Import Time {{ import.importTime | date }} End Time {{ import.endTime | date }} Completed {{ import.completed }} Total Records {{ import.totalRecords }} Success Count {{ import.successCount }} Failure Count {{ import.failureCount }} Download + +
+ +
+ + + +
+ +
diff --git a/src/app/organization/bulk-import/view-bulk-import/view-bulk-import.component.scss b/src/app/organization/bulk-import/view-bulk-import/view-bulk-import.component.scss new file mode 100644 index 000000000..268a0c346 --- /dev/null +++ b/src/app/organization/bulk-import/view-bulk-import/view-bulk-import.component.scss @@ -0,0 +1,17 @@ +.imports-table { + overflow: auto; +} + +.documents { + margin: 0; +} + +.cover { + background-color: #f2f2f2; + margin-top: 1%; +} + +h4 { + font-weight: 400; + margin: 1% 0; +} diff --git a/src/app/organization/bulk-import/view-bulk-import/view-bulk-import.component.spec.ts b/src/app/organization/bulk-import/view-bulk-import/view-bulk-import.component.spec.ts new file mode 100644 index 000000000..b48b23143 --- /dev/null +++ b/src/app/organization/bulk-import/view-bulk-import/view-bulk-import.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ViewBulkImportComponent } from './view-bulk-import.component'; + +describe('ViewBulkImportComponent', () => { + let component: ViewBulkImportComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ ViewBulkImportComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ViewBulkImportComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/organization/bulk-import/view-bulk-import/view-bulk-import.component.ts b/src/app/organization/bulk-import/view-bulk-import/view-bulk-import.component.ts new file mode 100644 index 000000000..e155500dd --- /dev/null +++ b/src/app/organization/bulk-import/view-bulk-import/view-bulk-import.component.ts @@ -0,0 +1,191 @@ +/** Angular Imports */ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { MatPaginator, MatSort, MatTableDataSource, MatTable } from '@angular/material'; +import { FormGroup, FormBuilder} from '@angular/forms'; + +/** Custom Imports */ +import { OrganizationService } from '../../organization.service'; +import { BulkImports } from './bulk-imports'; + +/** + * View Bulk Imports Component + */ +@Component({ + selector: 'mifosx-view-bulk-import', + templateUrl: './view-bulk-import.component.html', + styleUrls: ['./view-bulk-import.component.scss'] +}) +export class ViewBulkImportComponent implements OnInit { + + /** offices Data */ + officeData: any; + /** staff Data */ + staffData: any; + /** Entity Template */ + template: File; + /** imports Data */ + importsData: any; + /** bulk-import form. */ + bulkImportForm: FormGroup; + /** array of deined bulk-imports */ + bulkImportsArray = BulkImports; + /** bulk-import which user navigated to */ + bulkImport: any = {}; + /** Data source for imports table. */ + dataSource = new MatTableDataSource(); + /** Columns to be displayed in imports table. */ + displayedColumns: string[] = + [ + 'name', + 'importTime', + 'endTime', + 'completed', + 'totalRecords', + 'successCount', + 'failureCount', + 'download' + ]; + + /** Paginator for imports table. */ + @ViewChild(MatPaginator) paginator: MatPaginator; + /** Sorter for imports table. */ + @ViewChild(MatSort) sort: MatSort; + /** Imports table reference */ + @ViewChild('importsTable') importsTableRef: MatTable; + + /** + * fetches offices and imports data from resolve + * @param {ActivatedRoute} route ActivatedRoute + * @param {FormBuilder} formBuilder FormBuilder + * @param {OrganizationService} organizationService OrganizationService + */ + constructor(private route: ActivatedRoute, + private formBuilder: FormBuilder, + private organizationService: OrganizationService, + ) { + this.bulkImport.name = this.route.snapshot.params['import-name']; + this.route.data.subscribe( (data: any) => { + this.officeData = data.offices; + this.importsData = data.imports; + }); + } + + /** + * Gets bulk import's properties. + */ + ngOnInit() { + this.bulkImport = this.bulkImportsArray.find( (entry) => entry.name === this.bulkImport.name); + this.createBulkImportForm(); + this.buildDependencies(); + this.setImports(); + } + + /** + * Creates the bulk import form. + */ + createBulkImportForm() { + this.bulkImportForm = this.formBuilder.group({ + 'officeId': [''], + 'staffId': [''], + 'legalForm': [''], + }); + } + + /** + * Subscribe to value changes and fetches select options accordingly. + */ + buildDependencies() { + this.bulkImportForm.get('officeId').valueChanges.subscribe((value: any) => { + if (this.bulkImport.formFields >= 2) { + this.organizationService.getStaff(value).subscribe( (data: any) => { + this.staffData = data; + }); + } + }); + } + + /** + * Initializes the data source, paginator and sorter for imports table. + */ + setImports() { + this.dataSource = new MatTableDataSource(this.importsData); + this.dataSource.paginator = this.paginator; + this.dataSource.sort = this.sort; + } + + /** + * Gets bulk import's downloadable template from API. + */ + downloadTemplate() { + const officeId = this.bulkImportForm.get('officeId').value; + const staffId = this.bulkImportForm.get('staffId').value; + let legalFormType = ''; + /** Only for Client Bulk Imports */ + switch (this.bulkImportForm.get('legalForm').value) { + case 'Person': + legalFormType = 'CLIENTS_PERSON'; + break; + case 'Entity': + legalFormType = 'CLIENTS_ENTTTY'; + break; + } + this.organizationService.getImportTemplate(this.bulkImport.urlSuffix, officeId, staffId, legalFormType).subscribe( (res: any) => { + const contentType = res.headers.get('Content-Type'); + const blob = new Blob([res.body], { type: contentType }); + const fileOfBlob = new File([blob], 'template.xls', { type: contentType }); + window.open(window.URL.createObjectURL(fileOfBlob)); + }); + } + + /** + * Sets file form control value. + * @param {any} $event file change event. + */ + onFileSelect($event: any) { + if ($event.target.files.length > 0) { + this.template = $event.target.files[0]; + } + } + + /** + * Upload excel file containing bulk import data. + */ + uploadTemplate() { + let legalFormType = ''; + /** Only for Client Bulk Imports */ + if (this.bulkImport.name === 'Clients') { + if (this.template.name.toLowerCase().includes('entity')) { + legalFormType = 'CLIENTS_ENTTTY'; + } else if (this.template.name.toLowerCase().includes('person')) { + legalFormType = 'CLIENTS_PERSON'; + } + } + this.organizationService.uploadImportDocument(this.template, this.bulkImport.urlSuffix, legalFormType).subscribe(() => {}); + } + + /** + * Reloads imports data table. + */ + refreshDocuments() { + this.organizationService.getImports(this.bulkImport.entityType).subscribe( (data: any) => { + this.dataSource = new MatTableDataSource(data); + this.importsTableRef.renderRows(); + }); + } + + /** + * Download import document. + * @param {string} name Import Name + * @param {any} id ImportID + */ + downloadDocument(name: string, id: any) { + this.organizationService.getImportDocument(id).subscribe( (res: any) => { + const contentType = res.headers.get('Content-Type'); + const blob = new Blob([res.body], { type: contentType }); + const fileOfBlob = new File([blob], name, { type: contentType }); + window.open(window.URL.createObjectURL(fileOfBlob)); + }); + } + +} diff --git a/src/app/organization/organization-routing.module.ts b/src/app/organization/organization-routing.module.ts index 9a6e857e4..f72a63ed7 100644 --- a/src/app/organization/organization-routing.module.ts +++ b/src/app/organization/organization-routing.module.ts @@ -49,6 +49,10 @@ import { EditCashierComponent } from './tellers/cashiers/edit-cashier/edit-cashi import { CreateCashierComponent } from './tellers/cashiers/create-cashier/create-cashier.component'; import { EditHolidayComponent } from './holidays/edit-holiday/edit-holiday.component'; import { EditAdhocQueryComponent } from './adhoc-query/edit-adhoc-query/edit-adhoc-query.component'; +import { EditOfficeComponent } from './offices/edit-office/edit-office.component'; +import { BulkImportComponent } from './bulk-import/bulk-import.component'; +import { ViewBulkImportComponent } from './bulk-import/view-bulk-import/view-bulk-import.component'; +import { ViewLoanProvisioningCriteriaComponent } from './loan-provisioning-criteria/view-loan-provisioning-criteria/view-loan-provisioning-criteria.component'; /** Custom Resolvers */ import { LoanProvisioningCriteriaResolver } from './loan-provisioning-criteria/loan-provisioning-criteria.resolver'; @@ -68,9 +72,7 @@ import { PasswordPreferencesTemplateResolver } from './password-preferences/pass import { EntityDataTableChecksResolver } from './entity-data-table-checks/entity-data-table-checks.resolver'; import { WorkingDaysResolver } from './working-days/working-days.resolver'; import { EditOfficeResolver } from './offices/common-resolvers/edit-office.resolver'; -import { EditOfficeComponent } from './offices/edit-office/edit-office.component'; import { AdhocQueryTemplateResolver } from './adhoc-query/adhoc-query-template.resolver'; -import { ViewLoanProvisioningCriteriaComponent } from './loan-provisioning-criteria/view-loan-provisioning-criteria/view-loan-provisioning-criteria.component'; import { LoanProvisioningCriteriasResolver } from './loan-provisioning-criteria/loan-provisioning-criterias.resolver'; import { CashierResolver } from './tellers/common-resolvers/cashier.resolver'; import { CashiersResolver } from './tellers/common-resolvers/cashiers.resolver'; @@ -84,6 +86,7 @@ import { CashierTransactionTemplateResolver } from './tellers/teller-transaction import { EditCashierResolver } from './tellers/common-resolvers/edit-cashier.resolver'; import { HolidayTemplateResolver } from './holidays/holiday-template.resolver'; import { AdhocQueryAndTemplateResolver } from './adhoc-query/common-resolvers/adhoc-query-and-template.resolver'; +import { BulkImportResolver } from './bulk-import/bulk-import.resolver'; /** Organization Routes */ const routes: Routes = [ @@ -107,7 +110,6 @@ const routes: Routes = [ loanProvisioningCriterias: LoanProvisioningCriteriasResolver } }, - { path: ':id', data: { title: extract('View Provisioning Criteria'), routeParamBreadcrumb: 'id' }, @@ -488,7 +490,22 @@ const routes: Routes = [ }, { path: 'bulk-import', - loadChildren: '../bulk-import/bulk-import.module#BulkImportModule' + data: { title: extract('Bulk Import'), breadcrumb: 'Bulk Import' }, + children: [ + { + path: '', + component: BulkImportComponent, + }, + { + path: ':import-name', + component: ViewBulkImportComponent, + data: { title: extract('View Bulk Import'), routeParamBreadcrumb: 'import-name' }, + resolve: { + offices: OfficesResolver, + imports: BulkImportResolver + } + } + ] }, { path: 'holidays', @@ -570,7 +587,8 @@ const routes: Routes = [ CashierTransactionTemplateResolver, EditCashierResolver, HolidayResolver, - HolidayTemplateResolver + HolidayTemplateResolver, + BulkImportResolver ] }) export class OrganizationRoutingModule { } diff --git a/src/app/organization/organization.module.ts b/src/app/organization/organization.module.ts index 42a9d98f3..923c11ec8 100644 --- a/src/app/organization/organization.module.ts +++ b/src/app/organization/organization.module.ts @@ -52,6 +52,8 @@ import { EditCashierComponent } from './tellers/cashiers/edit-cashier/edit-cashi import { CreateCashierComponent } from './tellers/cashiers/create-cashier/create-cashier.component'; import { EditHolidayComponent } from './holidays/edit-holiday/edit-holiday.component'; import { EditAdhocQueryComponent } from './adhoc-query/edit-adhoc-query/edit-adhoc-query.component'; +import { BulkImportComponent } from './/bulk-import/bulk-import.component'; +import { ViewBulkImportComponent } from './bulk-import/view-bulk-import/view-bulk-import.component'; /** * Organization Module @@ -109,7 +111,9 @@ import { EditAdhocQueryComponent } from './adhoc-query/edit-adhoc-query/edit-adh EditCashierComponent, CreateCashierComponent, EditHolidayComponent, - EditAdhocQueryComponent + EditAdhocQueryComponent, + BulkImportComponent, + ViewBulkImportComponent ] }) export class OrganizationModule { } diff --git a/src/app/organization/organization.service.ts b/src/app/organization/organization.service.ts index f409646a6..587a681b6 100644 --- a/src/app/organization/organization.service.ts +++ b/src/app/organization/organization.service.ts @@ -562,4 +562,77 @@ export class OrganizationService { return this.http.put(`/funds/${fundId}`, fundData); } + /* + * @param {any} officeId ID of office to retrieve staff from. + * @returns {Observable} Staff data. + */ + getStaff(officeId: any): Observable { + const httpParams = new HttpParams() + .set('officeId', officeId.toString()); + return this.http.get('/staff', { params: httpParams }); + } + + /** + * @param {string} entity Entity to get imports data for. + * @returns {Observable} Imports data. + */ + getImports(entity: string): Observable { + const httpParams = new HttpParams() + .set('entityType', entity); + return this.http.get('/imports', { params: httpParams } ); + } + + /** + * @param urlSuffix of Bulk-Import + * @param officeId Office ID for template retrieval + * @param staffId Staff ID for template retrieval + * @param legalFormType Legal Form type fortemplate retrieval + * @returns {Observable} Import Template + */ + getImportTemplate(urlSuffix: string, officeId: any, staffId: any, legalFormType: string): Observable { + let httpParams = new HttpParams() + .set('tenantIdentifier', 'default') + .set('locale', 'en') + .set('dateFormat', 'dd MMMM yyyy'); + if (officeId) { + httpParams = httpParams.set('officeId', officeId.toString()); + } + if (staffId) { + httpParams = httpParams.set('staffId', staffId.toString()); + } + if (legalFormType.length) { + httpParams = httpParams.set('legalFormType', legalFormType); + } + return this.http.get(`${urlSuffix}/downloadtemplate`, { params: httpParams, responseType: 'arraybuffer', observe: 'response'} ); + } + + /** + * @param {any} id Import ID for document retrieval + * @returns {Observable} Import Document + */ + getImportDocument(id: any): Observable { + const httpParams = new HttpParams() + .set('importDocumentId', id) + .set('tenantIdentifier', 'default' ); + return this.http.get('/imports/downloadOutputTemplate', { params: httpParams, responseType: 'arraybuffer', observe: 'response'}); + } + + /** + * @param {File} file File to be uploaded + * @param {string} urlSuffix URL suffix + * @param {string} legalFormType Legal Form type for file upload + * @returns {Observable} + */ + uploadImportDocument(file: File, urlSuffix: string, legalFormType: string): Observable { + let httpParams = new HttpParams(); + if (legalFormType.length) { + httpParams = httpParams.set('legalFormType', legalFormType); + } + const formData = new FormData(); + formData.append('file', file); + formData.append('locale', 'en'); + formData.append('datefFormat', 'dd MMMM yyyy'); + return this.http.post(`${urlSuffix}/uploadtemplate`, formData , { params: httpParams } ); + } + }