From f7ea347eaaae6f3b53c139080d54dc4c8c0e0c12 Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Wed, 2 May 2018 17:57:30 -0400 Subject: [PATCH] LP#1775466 Billing type admin / misc. Signed-off-by: Bill Erickson --- .../src/app/share/fm-editor/fm-editor.component.ts | 5 +- .../src/app/share/grid/grid-body.component.html | 18 ------- .../eg2/src/app/share/grid/grid-body.component.ts | 31 ------------ .../src/app/share/grid/grid-column.component.ts | 2 + .../src/app/share/grid/grid-header.component.html | 3 +- .../src/eg2/src/app/share/grid/grid.component.html | 26 ++++++---- .../src/eg2/src/app/share/grid/grid.component.ts | 25 ++++++++-- .../src/eg2/src/app/share/grid/grid.service.ts | 18 +++++++ .../src/eg2/src/app/staff/admin/routing.module.ts | 9 ++-- .../server/config/billing_type.component.html | 10 ++++ .../admin/server/config/billing_type.component.ts | 55 ++++++++++++++++++++++ .../app/staff/admin/server/config/config.module.ts | 23 +++++++++ .../staff/admin/server/config/routing.module.ts | 15 ++++++ .../src/app/staff/admin/server/routing.module.ts | 14 ++++++ Open-ILS/src/eg2/src/app/staff/common.module.ts | 7 ++- .../eg2/src/app/staff/sandbox/sandbox.module.ts | 4 +- 16 files changed, 194 insertions(+), 71 deletions(-) delete mode 100644 Open-ILS/src/eg2/src/app/share/grid/grid-body.component.html delete mode 100644 Open-ILS/src/eg2/src/app/share/grid/grid-body.component.ts create mode 100644 Open-ILS/src/eg2/src/app/staff/admin/server/config/billing_type.component.html create mode 100644 Open-ILS/src/eg2/src/app/staff/admin/server/config/billing_type.component.ts create mode 100644 Open-ILS/src/eg2/src/app/staff/admin/server/config/config.module.ts create mode 100644 Open-ILS/src/eg2/src/app/staff/admin/server/config/routing.module.ts create mode 100644 Open-ILS/src/eg2/src/app/staff/admin/server/routing.module.ts diff --git a/Open-ILS/src/eg2/src/app/share/fm-editor/fm-editor.component.ts b/Open-ILS/src/eg2/src/app/share/fm-editor/fm-editor.component.ts index 82f39be290..ea4695356b 100644 --- a/Open-ILS/src/eg2/src/app/share/fm-editor/fm-editor.component.ts +++ b/Open-ILS/src/eg2/src/app/share/fm-editor/fm-editor.component.ts @@ -39,7 +39,10 @@ export class FmRecordEditorComponent // mode: 'create' for creating a new record, // 'update' for editing an existing record // 'view' for viewing an existing record without editing - @Input() mode: 'create' | 'update' | 'view' = 'create'; + mode: 'create' | 'update' | 'view' = 'create'; + @Input() editMode(mode: 'create' | 'update' | 'view') { + this.mode = mode; + } // Record ID to view/update. Value is dynamic. Records are not // fetched until .open() is called. diff --git a/Open-ILS/src/eg2/src/app/share/grid/grid-body.component.html b/Open-ILS/src/eg2/src/app/share/grid/grid-body.component.html deleted file mode 100644 index 7a86798668..0000000000 --- a/Open-ILS/src/eg2/src/app/share/grid/grid-body.component.html +++ /dev/null @@ -1,18 +0,0 @@ - -
- -
- -
-
- {{pager.rowNumber(idx)}} -
-
- {{getDisplayValue(row, col)}} -
- -
- diff --git a/Open-ILS/src/eg2/src/app/share/grid/grid-body.component.ts b/Open-ILS/src/eg2/src/app/share/grid/grid-body.component.ts deleted file mode 100644 index 364e21ec28..0000000000 --- a/Open-ILS/src/eg2/src/app/share/grid/grid-body.component.ts +++ /dev/null @@ -1,31 +0,0 @@ -import {Component, Input, OnInit, Host, TemplateRef} from '@angular/core'; -import {EgGridService, EgGridColumn, EgGridColumnSet} from './grid.service'; -import {EgGridDataSource} from './grid-data-source'; -import {Pager} from '@eg/share/util/pager'; - -@Component({ - selector: 'eg-grid-body', - templateUrl: 'grid-body.component.html' -}) - -export class EgGridBodyComponent implements OnInit { - - @Input() pager: Pager; - @Input() dataSource: EgGridDataSource; - @Input() columnSet: EgGridColumnSet; - @Input() selector: {[idx:number] : boolean}; - - constructor(private gridSvc: EgGridService) { } - - ngOnInit() { - - // fetch the first page of data - this.dataSource.requestPage(this.pager); - } - - getDisplayValue(row: any, col: EgGridColumn): string { - return this.gridSvc.getRowColumnValue(row, col); - } - -} - diff --git a/Open-ILS/src/eg2/src/app/share/grid/grid-column.component.ts b/Open-ILS/src/eg2/src/app/share/grid/grid-column.component.ts index 41d8d04f19..2bade603e1 100644 --- a/Open-ILS/src/eg2/src/app/share/grid/grid-column.component.ts +++ b/Open-ILS/src/eg2/src/app/share/grid/grid-column.component.ts @@ -16,6 +16,7 @@ export class EgGridColumnComponent implements OnInit { @Input() flex: number; @Input() hidden: boolean = false; @Input() cellTemplate: TemplateRef; + @Input() pkey: boolean; // get a reference to our container grid. constructor( @@ -36,6 +37,7 @@ export class EgGridColumnComponent implements OnInit { col.flex = this.flex || 2; col.hidden = this.hidden; col.cellTemplate = this.cellTemplate; + col.isPkey = this.pkey; this.grid.columnSet.add(col); } } diff --git a/Open-ILS/src/eg2/src/app/share/grid/grid-header.component.html b/Open-ILS/src/eg2/src/app/share/grid/grid-header.component.html index 2b8e4a8466..dc4176be6a 100644 --- a/Open-ILS/src/eg2/src/app/share/grid/grid-header.component.html +++ b/Open-ILS/src/eg2/src/app/share/grid/grid-header.component.html @@ -4,9 +4,8 @@
- # + #
-
{{col.label}} diff --git a/Open-ILS/src/eg2/src/app/share/grid/grid.component.html b/Open-ILS/src/eg2/src/app/share/grid/grid.component.html index 3d0434f316..4c5835c36d 100644 --- a/Open-ILS/src/eg2/src/app/share/grid/grid.component.html +++ b/Open-ILS/src/eg2/src/app/share/grid/grid.component.html @@ -1,13 +1,23 @@
- - + - - + +
+ +
+ +
+
+ {{pager.rowNumber(idx)}} +
+
+ {{getDisplayValue(row, col)}} +
+
diff --git a/Open-ILS/src/eg2/src/app/share/grid/grid.component.ts b/Open-ILS/src/eg2/src/app/share/grid/grid.component.ts index ff8dd86700..570b542d12 100644 --- a/Open-ILS/src/eg2/src/app/share/grid/grid.component.ts +++ b/Open-ILS/src/eg2/src/app/share/grid/grid.component.ts @@ -1,9 +1,10 @@ -import {Component, Input, OnInit, ViewEncapsulation} from '@angular/core'; +import {Component, Input, OnInit, EventEmitter, ViewEncapsulation} from '@angular/core'; import {EgGridDataSource} from './grid-data-source'; import {EgIdlService} from '@eg/core/idl.service'; import {EgOrgService} from '@eg/core/org.service'; import {Pager} from '@eg/share/util/pager'; -import {EgGridService, EgGridColumnSet} from '@eg/share/grid/grid.service'; +import {EgGridService, EgGridColumn, EgGridColumnSet} + from '@eg/share/grid/grid.service'; @Component({ selector: 'eg-grid', @@ -21,16 +22,34 @@ export class EgGridComponent implements OnInit { pager: Pager; columnSet: EgGridColumnSet; selector: {[idx:number] : boolean}; + onRowDblClick$: EventEmitter; constructor(private gridSvc: EgGridService) { this.pager = new Pager(); - this.pager.limit = 10; // TODO this.selector = {}; + this.pager.limit = 10; // TODO + this.onRowDblClick$ = new EventEmitter(); } ngOnInit() { this.columnSet = this.gridSvc.initializeColumnSet(this.idlClass); + this.dataSource.requestPage(this.pager); } + + reload() { + this.dataSource.data = []; + this.pager.offset = 0; + this.dataSource.requestPage(this.pager); + } + + getDisplayValue(row: any, col: EgGridColumn): string { + return this.gridSvc.getRowColumnValue(row, col); + } + + onRowDblClick(row: any) { + this.onRowDblClick$.emit(row); + } + } diff --git a/Open-ILS/src/eg2/src/app/share/grid/grid.service.ts b/Open-ILS/src/eg2/src/app/share/grid/grid.service.ts index ead30fabeb..41bd1bac8e 100644 --- a/Open-ILS/src/eg2/src/app/share/grid/grid.service.ts +++ b/Open-ILS/src/eg2/src/app/share/grid/grid.service.ts @@ -14,6 +14,12 @@ export class EgGridService { ) { } + getRowPkey(row: any, columnSet: EgGridColumnSet): any { + let col = columnSet.pkeyColumn; + if (!col) throw new Error('grid pkey column required'); + return this.getRowColumnValue(row, col); + } + getRowColumnValue(row: any, col: EgGridColumn): string { if (row[col.name] === undefined || row[col.name] === null) return ''; @@ -33,6 +39,12 @@ export class EgGridService { getRowColumnIdlValue(row: any, col: EgGridColumn): string { let val = row[col.name](); if (val === undefined || val === null) return ''; + + if (col.idlFieldDef.datatype == 'org_unit') { + let o = this.org.get(val); + if (o) return o.shortname(); + } + return val+''; } @@ -47,6 +59,8 @@ export class EgGridService { col.name = field.name; col.label = field.label || field.name; col.idlFieldDef = field; + if (field.name == this.idl.classes[idlClass].pkey) + col.isPkey = true; columnSet.add(col); }); } @@ -65,11 +79,13 @@ export class EgGridColumn { idlClass: string; idlFieldDef: any; cellTemplate: TemplateRef; + isPkey: boolean; } export class EgGridColumnSet { columns: EgGridColumn[]; + pkeyColumn: EgGridColumn; constructor() { this.columns = []; @@ -79,6 +95,8 @@ export class EgGridColumnSet { // avoid dupes if (this.columns.filter(c => c.name == col.name).length) return; + if (col.isPkey) this.pkeyColumn = col; + this.columns.push(col); } diff --git a/Open-ILS/src/eg2/src/app/staff/admin/routing.module.ts b/Open-ILS/src/eg2/src/app/staff/admin/routing.module.ts index 4e4ef09152..c74b2705b3 100644 --- a/Open-ILS/src/eg2/src/app/staff/admin/routing.module.ts +++ b/Open-ILS/src/eg2/src/app/staff/admin/routing.module.ts @@ -3,9 +3,12 @@ import {RouterModule, Routes} from '@angular/router'; const routes: Routes = [{ path: '', - children : [{ - path: 'workstation', - loadChildren: '@eg/staff/admin/workstation/routing.module#EgAdminWsRoutingModule' + children : [ + { path: 'workstation', + loadChildren: '@eg/staff/admin/workstation/routing.module#EgAdminWsRoutingModule' + }, { + path: 'server', + loadChildren: '@eg/staff/admin/server/routing.module#EgAdminServerRoutingModule' }] }]; diff --git a/Open-ILS/src/eg2/src/app/staff/admin/server/config/billing_type.component.html b/Open-ILS/src/eg2/src/app/staff/admin/server/config/billing_type.component.html new file mode 100644 index 0000000000..25023e77bb --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/admin/server/config/billing_type.component.html @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/Open-ILS/src/eg2/src/app/staff/admin/server/config/billing_type.component.ts b/Open-ILS/src/eg2/src/app/staff/admin/server/config/billing_type.component.ts new file mode 100644 index 0000000000..2fde658dff --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/admin/server/config/billing_type.component.ts @@ -0,0 +1,55 @@ +import {Component, OnInit, TemplateRef, ViewChild} from '@angular/core'; +import {EgGridDataSource} from '@eg/share/grid/grid-data-source'; +import {EgGridComponent} from '@eg/share/grid/grid.component'; +import {EgToastService} from '@eg/share/toast/toast.service'; +import {Pager} from '@eg/share/util/pager'; +import {EgPcrudService} from '@eg/core/pcrud.service'; +import {FmRecordEditorComponent} from '@eg/share/fm-editor/fm-editor.component'; + +@Component({ + templateUrl: './billing_type.component.html' +}) + +export class BillingTypeComponent implements OnInit { + + dataSource: EgGridDataSource; + @ViewChild('btGrid') btGrid: EgGridComponent; + @ViewChild('btEditDialog') btEditDialog: FmRecordEditorComponent; + + constructor( + private pcrud: EgPcrudService, + private toast: EgToastService + ) { + this.dataSource = new EgGridDataSource(); + } + + ngOnInit() { + + this.dataSource.getRows = (pager: Pager) => { + return this.pcrud.retrieveAll('cbt', { + offset: pager.offset, + limit: pager.limit, + order_by: {cbt: 'name'} + }); + } + + this.btGrid.onRowDblClick$.subscribe( + bt => { + this.btEditDialog.mode = 'update'; + this.btEditDialog.recId = bt.id(); + this.btEditDialog.open().then( + ok => { + // TODO: i18n + this.toast.success('Billing Type Update Succeeded'), + this.btGrid.reload() + }, + err => { + this.toast.warning('Billing Type Update Canceled') + } + ); + } + ); + } +} + + diff --git a/Open-ILS/src/eg2/src/app/staff/admin/server/config/config.module.ts b/Open-ILS/src/eg2/src/app/staff/admin/server/config/config.module.ts new file mode 100644 index 0000000000..6bca1db93e --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/admin/server/config/config.module.ts @@ -0,0 +1,23 @@ +import {NgModule} from '@angular/core'; +import {EgStaffCommonModule} from '@eg/staff/common.module'; +import {EgAdminServerConfigRoutingModule} from './routing.module'; +import {EgGridModule} from '@eg/share/grid/grid.module'; +import {BillingTypeComponent} from './billing_type.component'; + +@NgModule({ + declarations: [ + BillingTypeComponent + ], + imports: [ + EgStaffCommonModule, + EgAdminServerConfigRoutingModule, + EgGridModule + ], + providers: [ + ] +}) + +export class EgAdminServerConfigModule { +} + + diff --git a/Open-ILS/src/eg2/src/app/staff/admin/server/config/routing.module.ts b/Open-ILS/src/eg2/src/app/staff/admin/server/config/routing.module.ts new file mode 100644 index 0000000000..f8717f4365 --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/admin/server/config/routing.module.ts @@ -0,0 +1,15 @@ +import {NgModule} from '@angular/core'; +import {RouterModule, Routes} from '@angular/router'; +import {BillingTypeComponent} from './billing_type.component'; + +const routes: Routes = [{ + path: 'billing_type', + component: BillingTypeComponent +}]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) + +export class EgAdminServerConfigRoutingModule {} diff --git a/Open-ILS/src/eg2/src/app/staff/admin/server/routing.module.ts b/Open-ILS/src/eg2/src/app/staff/admin/server/routing.module.ts new file mode 100644 index 0000000000..79aa4ed8b0 --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/admin/server/routing.module.ts @@ -0,0 +1,14 @@ +import {NgModule} from '@angular/core'; +import {RouterModule, Routes} from '@angular/router'; + +const routes: Routes = [{ + path: 'config', + loadChildren: '@eg/staff/admin/server/config/config.module#EgAdminServerConfigModule' +}]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) + +export class EgAdminServerRoutingModule {} diff --git a/Open-ILS/src/eg2/src/app/staff/common.module.ts b/Open-ILS/src/eg2/src/app/staff/common.module.ts index 61094e4162..e269966194 100644 --- a/Open-ILS/src/eg2/src/app/staff/common.module.ts +++ b/Open-ILS/src/eg2/src/app/staff/common.module.ts @@ -14,6 +14,7 @@ import {EgToastService} from '@eg/share/toast/toast.service'; import {EgToastComponent} from '@eg/share/toast/toast.component'; import {EgStringComponent} from '@eg/share/string/string.component'; import {EgStringService} from '@eg/share/string/string.service'; +import {FmRecordEditorComponent} from '@eg/share/fm-editor/fm-editor.component'; /** * Imports the EG common modules and adds modules common to all staff UI's. @@ -31,7 +32,8 @@ import {EgStringService} from '@eg/share/string/string.service'; EgAccessKeyInfoComponent, EgToastComponent, EgStringComponent, - EgOpChangeComponent + EgOpChangeComponent, + FmRecordEditorComponent ], imports: [ EgCommonModule @@ -48,7 +50,8 @@ import {EgStringService} from '@eg/share/string/string.service'; EgAccessKeyInfoComponent, EgToastComponent, EgStringComponent, - EgOpChangeComponent + EgOpChangeComponent, + FmRecordEditorComponent ] }) diff --git a/Open-ILS/src/eg2/src/app/staff/sandbox/sandbox.module.ts b/Open-ILS/src/eg2/src/app/staff/sandbox/sandbox.module.ts index 6302e73996..ddfae2c8b9 100644 --- a/Open-ILS/src/eg2/src/app/staff/sandbox/sandbox.module.ts +++ b/Open-ILS/src/eg2/src/app/staff/sandbox/sandbox.module.ts @@ -2,13 +2,11 @@ import {NgModule} from '@angular/core'; import {EgStaffCommonModule} from '@eg/staff/common.module'; import {EgSandboxRoutingModule} from './routing.module'; import {EgSandboxComponent} from './sandbox.component'; -import {FmRecordEditorComponent} from '@eg/share/fm-editor/fm-editor.component'; import {EgGridModule} from '@eg/share/grid/grid.module'; @NgModule({ declarations: [ - EgSandboxComponent, - FmRecordEditorComponent + EgSandboxComponent ], imports: [ EgStaffCommonModule, -- 2.11.0