LP#1626157 More admin ui consolidation
authorBill Erickson <berickxx@gmail.com>
Wed, 30 May 2018 22:17:38 +0000 (18:17 -0400)
committerBill Erickson <berickxx@gmail.com>
Wed, 30 May 2018 22:17:38 +0000 (18:17 -0400)
Signed-off-by: Bill Erickson <berickxx@gmail.com>
13 files changed:
Open-ILS/src/eg2/src/app/share/org-select/org-select.component.ts
Open-ILS/src/eg2/src/app/staff/admin/server/actor/actor.module.ts [deleted file]
Open-ILS/src/eg2/src/app/staff/admin/server/actor/routing.module.ts [deleted file]
Open-ILS/src/eg2/src/app/staff/admin/server/actor/stat_cat_sip_fields.component.ts [deleted file]
Open-ILS/src/eg2/src/app/staff/admin/server/admin-server-splash.component.html
Open-ILS/src/eg2/src/app/staff/admin/server/admin-server.module.ts
Open-ILS/src/eg2/src/app/staff/admin/server/config/billing_type.component.html [deleted file]
Open-ILS/src/eg2/src/app/staff/admin/server/config/billing_type.component.ts [deleted file]
Open-ILS/src/eg2/src/app/staff/admin/server/config/hard_due_date.component.html [deleted file]
Open-ILS/src/eg2/src/app/staff/admin/server/config/hard_due_date.component.ts [deleted file]
Open-ILS/src/eg2/src/app/staff/admin/server/routing.module.ts
Open-ILS/src/eg2/src/app/staff/share/admin-page/admin-page.component.html
Open-ILS/src/eg2/src/app/staff/share/admin-page/admin-page.component.ts

index 8144023..e996a51 100644 (file)
@@ -130,7 +130,7 @@ export class EgOrgSelectComponent implements OnInit {
     // TODO: this does not fire when the value is cleared :( -- implement
     // change detection on this.selected to look specifically for NULL.
     orgChanged(selEvent: NgbTypeaheadSelectItemEvent) {
-        console.log('change occurred ' + selEvent.item);
+        // console.debug('org unit change occurred ' + selEvent.item);
         this.onChange.emit(this.org.get(selEvent.item.id));
     }
 
diff --git a/Open-ILS/src/eg2/src/app/staff/admin/server/actor/actor.module.ts b/Open-ILS/src/eg2/src/app/staff/admin/server/actor/actor.module.ts
deleted file mode 100644 (file)
index eef2506..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-import {NgModule} from '@angular/core';
-import {EgAdminCommonModule} from '@eg/staff/admin/common.module';
-import {EgAdminServerActorRoutingModule} from './routing.module';
-import {StatCatSipFieldsComponent} from './stat_cat_sip_fields.component';
-
-@NgModule({
-  declarations: [
-      StatCatSipFieldsComponent
-  ],
-  imports: [
-    EgAdminCommonModule,
-    EgAdminServerActorRoutingModule
-  ],
-  providers: [
-  ]
-})
-
-export class EgAdminServerActorModule {
-}
-
-
diff --git a/Open-ILS/src/eg2/src/app/staff/admin/server/actor/routing.module.ts b/Open-ILS/src/eg2/src/app/staff/admin/server/actor/routing.module.ts
deleted file mode 100644 (file)
index 66acc97..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-import {NgModule} from '@angular/core';
-import {RouterModule, Routes} from '@angular/router';
-import {StatCatSipFieldsComponent} from './stat_cat_sip_fields.component';
-
-const routes: Routes = [{
-  path: 'stat_cat_sip_fields',
-  component: StatCatSipFieldsComponent
-}];
-
-@NgModule({
-  imports: [RouterModule.forChild(routes)],
-  exports: [RouterModule]
-})
-
-export class EgAdminServerActorRoutingModule {}
diff --git a/Open-ILS/src/eg2/src/app/staff/admin/server/actor/stat_cat_sip_fields.component.ts b/Open-ILS/src/eg2/src/app/staff/admin/server/actor/stat_cat_sip_fields.component.ts
deleted file mode 100644 (file)
index ae33053..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-import {Component, OnInit} from '@angular/core';
-
-@Component({
-    template: `
-      <eg-staff-banner bannerText="Actor Stat Cat SIP Fields Configuration" i18n-bannerText>
-      </eg-staff-banner>
-      <eg-admin-page idlClass="actscsf" sortField="name">
-      </eg-admin-page>
-    `
-})
-
-export class StatCatSipFieldsComponent {}
-
-
index c3cca04..c1b040e 100644 (file)
@@ -22,7 +22,7 @@
     <eg-link-table-link i18n-label label="Billing Types"  
       routerLink="/staff/admin/server/config/billing_type"></eg-link-table-link>
     <eg-link-table-link i18n-label label="Call Number Prefixes"  
-      url="/eg/staff/admin/server/config/acn_prefix"></eg-link-table-link>
+      routerLink="/staff/admin/server/asset/call_number_prefix"></eg-link-table-link>
     <eg-link-table-link i18n-label label="Call Number Suffixes"  
       url="/eg/staff/admin/server/config/acn_suffix"></eg-link-table-link>
     <eg-link-table-link i18n-label label="Circulation Duration Rules"  
@@ -82,7 +82,7 @@
     <eg-link-table-link i18n-label label="Permissions"  
       routerLink="/staff/admin/server/permission/perm_list"></eg-link-table-link>
     <eg-link-table-link i18n-label label="Remote Accounts"  
-      url="/eg/staff/admin/server/config/remote_account"></eg-link-table-link>
+      routerLink="/staff/admin/server/config/remote_account"></eg-link-table-link>
     <eg-link-table-link i18n-label label="SMS Carriers"  
       routerLink="/staff/admin/server/config/sms_carrier"></eg-link-table-link>
     <eg-link-table-link i18n-label label="User Activity Types"  
index 90fb9e6..7af4194 100644 (file)
@@ -3,14 +3,10 @@ import {EgStaffCommonModule} from '@eg/staff/common.module';
 import {EgAdminServerRoutingModule} from './routing.module';
 import {EgAdminCommonModule} from '@eg/staff/admin/common.module';
 import {AdminServerSplashComponent} from './admin-server-splash.component';
-import {BillingTypeComponent} from './config/billing_type.component';
-import {HardDueDateComponent} from './config/hard_due_date.component';
 
 @NgModule({
   declarations: [
-      AdminServerSplashComponent,
-      BillingTypeComponent,
-      HardDueDateComponent
+      AdminServerSplashComponent
   ],
   imports: [
     EgAdminCommonModule,
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
deleted file mode 100644 (file)
index bf2a988..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<eg-staff-banner bannerText="Billing Type Configuration" i18n-bannerText>
-</eg-staff-banner>
-
-<div class="row">
-  <div class="input-group">
-    <div class="input-group-prepend">
-      <span class="input-group-text" i18n>Owning Library</span>
-    </div>
-    <eg-org-select 
-      [initialOrg]="contextOrg"
-      (onChange)="orgOnChange($event)">
-    </eg-org-select>
-  </div>
-</div>
-
-<hr/>
-
-<eg-admin-page #adminPage idlClass="cbt" [dataSource]="dataSource">
-</eg-admin-page>
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
deleted file mode 100644 (file)
index ee920b9..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-import {Component, OnInit, TemplateRef, ViewChild} from '@angular/core';
-import {EgIdlObject} from '@eg/core/idl.service';
-import {EgGridDataSource} from '@eg/share/grid/grid';
-import {Pager} from '@eg/share/util/pager';
-import {EgPcrudService} from '@eg/core/pcrud.service';
-import {EgOrgService} from '@eg/core/org.service';
-import {EgAuthService} from '@eg/core/auth.service';
-import {EgAdminPageComponent} from '@eg/staff/share/admin-page/admin-page.component';
-
-@Component({
-    templateUrl: './billing_type.component.html'
-})
-
-export class BillingTypeComponent implements OnInit {
-
-    dataSource: EgGridDataSource;
-    contextOrg: EgIdlObject;
-    @ViewChild('adminPage') adminPage: EgAdminPageComponent;
-
-    constructor(
-        private org: EgOrgService,
-        private auth: EgAuthService,
-        private pcrud: EgPcrudService
-    ) {
-        this.dataSource = new EgGridDataSource();
-    }
-
-    orgOnChange(org: EgIdlObject) {
-        this.contextOrg = org;
-        this.adminPage.grid.reload();
-    }
-
-    ngOnInit() {
-        this.contextOrg = this.org.get(this.auth.user().ws_ou());
-
-        this.dataSource.getRows = (pager: Pager, sort: any[]) => {
-            const searchOrgs = this.org.fullPath(this.contextOrg, true);
-
-            const orderBy = {cbt: 'name'};
-            if (sort.length) {
-                orderBy.cbt = sort[0].name + ' ' + sort[0].dir;
-            }
-
-            return this.pcrud.search('cbt', {owner : searchOrgs}, {
-                offset: pager.offset,
-                limit: pager.limit,
-                order_by: orderBy
-            });
-        };
-    }
-}
-
-
diff --git a/Open-ILS/src/eg2/src/app/staff/admin/server/config/hard_due_date.component.html b/Open-ILS/src/eg2/src/app/staff/admin/server/config/hard_due_date.component.html
deleted file mode 100644 (file)
index 8eb19c4..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-<eg-staff-banner bannerText="Hard Due Date Configuration" i18n-bannerText>
-</eg-staff-banner>
-
-<div class="row">
-  <div class="input-group">
-    <div class="input-group-prepend">
-      <span class="input-group-text" i18n>Owning Library</span>
-    </div>
-    <eg-org-select 
-      [initialOrg]="contextOrg"
-      (onChange)="orgOnChange($event)">
-    </eg-org-select>
-  </div>
-</div>
-
-<hr/>
-
-<eg-admin-page #adminPage idlClass="chdd" [dataSource]="dataSource">
-</eg-admin-page>
-
diff --git a/Open-ILS/src/eg2/src/app/staff/admin/server/config/hard_due_date.component.ts b/Open-ILS/src/eg2/src/app/staff/admin/server/config/hard_due_date.component.ts
deleted file mode 100644 (file)
index 49c5ace..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-import {Component, OnInit, TemplateRef, ViewChild} from '@angular/core';
-import {EgIdlObject} from '@eg/core/idl.service';
-import {EgGridDataSource} from '@eg/share/grid/grid';
-import {Pager} from '@eg/share/util/pager';
-import {EgPcrudService} from '@eg/core/pcrud.service';
-import {EgOrgService} from '@eg/core/org.service';
-import {EgAuthService} from '@eg/core/auth.service';
-import {EgAdminPageComponent} from '@eg/staff/share/admin-page/admin-page.component';
-
-@Component({
-    templateUrl: './hard_due_date.component.html'
-})
-
-export class HardDueDateComponent implements OnInit {
-
-    dataSource: EgGridDataSource;
-    contextOrg: EgIdlObject;
-    @ViewChild('adminPage') adminPage: EgAdminPageComponent;
-
-    constructor(
-        private org: EgOrgService,
-        private auth: EgAuthService,
-        private pcrud: EgPcrudService
-    ) {
-        this.dataSource = new EgGridDataSource();
-    }
-
-    orgOnChange(org: EgIdlObject) {
-        this.contextOrg = org;
-        this.adminPage.grid.reload();
-    }
-
-    ngOnInit() {
-        this.contextOrg = this.org.get(this.auth.user().ws_ou());
-
-        this.dataSource.getRows = (pager: Pager, sort: any[]) => {
-            const searchOrgs = this.org.fullPath(this.contextOrg, true);
-
-            const orderBy = {chdd: 'name'};
-            if (sort.length) {
-                orderBy.chdd = sort[0].name + ' ' + sort[0].dir;
-            }
-
-            return this.pcrud.search('chdd', {owner : searchOrgs}, {
-                offset: pager.offset,
-                limit: pager.limit,
-                order_by: orderBy
-            });
-        };
-    }
-}
-
-
index 5b78eb2..b3d6487 100644 (file)
@@ -2,19 +2,11 @@ import {NgModule} from '@angular/core';
 import {RouterModule, Routes} from '@angular/router';
 import {AdminServerSplashComponent} from './admin-server-splash.component';
 import {EgBasicAdminPageComponent} from '@eg/staff/admin/basic-admin-page.component';
-import {BillingTypeComponent} from './config/billing_type.component';
-import {HardDueDateComponent} from './config/hard_due_date.component';
 
 const routes: Routes = [{
     path: 'splash',
     component: AdminServerSplashComponent
 }, {
-    path: 'config/billing_type',
-    component: BillingTypeComponent
-}, {
-    path: 'config/hard_due_date',
-    component: BillingTypeComponent
-}, {
     path: ':schema/:table',
     component: EgBasicAdminPageComponent
 }];
index b0b0012..4127981 100644 (file)
@@ -4,6 +4,21 @@
 <ng-template #createStrTmpl i18n>{{idlClassDef.label}} Succeessfully Created</ng-template>
 <eg-string #createString [template]="createStrTmpl"></eg-string>
 
+<ng-container *ngIf="orgField">
+  <div class="row">
+    <div class="input-group">
+      <div class="input-group-prepend">
+        <span class="input-group-text">{{orgFieldLabel}}</span>
+      </div>
+      <eg-org-select 
+        [initialOrg]="contextOrg"
+        (onChange)="orgOnChange($event)">
+      </eg-org-select>
+    </div>
+  </div>
+  <hr/>
+</ng-container>
+
 <eg-grid #grid idlClass="{{idlClass}}" [dataSource]="dataSource" 
     [isSortable]="true" persistKey="{{persistKey}}">
   <eg-grid-toolbar-button label="New {{idlClassDef.label}}" i18n-label [action]="createNew">
index 4d1cd29..debb823 100644 (file)
@@ -37,6 +37,13 @@ export class EgAdminPageComponent implements OnInit {
     // Size of create/edito dialog.  Uses large by default.
     @Input() dialogSize: 'sm' | 'lg' = 'lg';
 
+    // If an org unit field is specified, an org unit filter 
+    // is added to the top of the page.
+    @Input() orgField: string;
+
+    // Disable the auto-matic org unit field filter
+    @Input() disableOrgFilter: boolean;
+
     @ViewChild('grid') grid: EgGridComponent;
     @ViewChild('editDialog') editDialog: FmRecordEditorComponent;
     @ViewChild('successString') successString: EgStringComponent;
@@ -48,6 +55,9 @@ export class EgAdminPageComponent implements OnInit {
     createNew: () => void;
     deleteSelected: (rows: EgIdlObject[]) => void;
 
+    contextOrg: EgIdlObject;
+    orgFieldLabel: string;
+
     constructor(
         private idl: EgIdlService,
         private org: EgOrgService,
@@ -56,10 +66,35 @@ export class EgAdminPageComponent implements OnInit {
         private toast: EgToastService
     ) {}
 
+    applyOrgValues() {
+
+        if (this.disableOrgFilter) {
+            this.orgField = null;
+            return;
+        }
+
+        if (!this.orgField) {
+            // If no org unit field is specified, try to find one.
+            // If an object type has multiple org unit fields, the
+            // caller should specify one or disable org unit filter.
+            this.idlClassDef.fields.forEach(field => {
+                if (field['class'] === 'aou') {
+                    this.orgField = field.name;
+                }
+            });
+        }
+
+        if (this.orgField) {
+            this.orgFieldLabel = this.idlClassDef.field_map[this.orgField].label;
+            this.contextOrg = this.org.root();
+        }
+    }
+
     ngOnInit() {
         this.idlClassDef = this.idl.classes[this.idlClass];
         this.pkeyField = this.idlClassDef.pkey || 'id';
         this.persistKey = 'admin.' + this.idlClassDef.table;
+        this.applyOrgValues();
 
         // If the caller provides not data source, create a generic one.
         if (!this.dataSource) {
@@ -103,22 +138,42 @@ export class EgAdminPageComponent implements OnInit {
         };
     }
 
+    orgOnChange(org: EgIdlObject) {
+        this.contextOrg = org;
+        this.grid.reload();
+    }
+
     initDataSource() {
         this.dataSource = new EgGridDataSource();
 
         this.dataSource.getRows = (pager: Pager, sort: any[]) => {
             const orderBy: any = {};
+
             if (sort.length) {
+                // Sort specified from grid
                 orderBy[this.idlClass] = sort[0].name + ' ' + sort[0].dir;
+
             } else if (this.sortField) {
+                // Default sort field
                 orderBy[this.idlClass] = this.sortField;
             }
 
-            return this.pcrud.retrieveAll(this.idlClass, {
+            const searchOps = {
                 offset: pager.offset,
                 limit: pager.limit,
                 order_by: orderBy
-            });
+            };
+
+            if (this.contextOrg) {
+                // TODO: does the org path need to be configurable?
+                const search = {};
+                search[this.orgField] = 
+                    this.org.fullPath(this.contextOrg, true);
+                return this.pcrud.search(this.idlClass, search, searchOps);
+            }
+
+            // No org filter -- fetch all rows
+            return this.pcrud.retrieveAll(this.idlClass, searchOps);
         };
     }
 }