// 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));
}
+++ /dev/null
-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 {
-}
-
-
+++ /dev/null
-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 {}
+++ /dev/null
-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 {}
-
-
<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"
<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"
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,
+++ /dev/null
-<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>
+++ /dev/null
-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
- });
- };
- }
-}
-
-
+++ /dev/null
-<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>
-
+++ /dev/null
-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
- });
- };
- }
-}
-
-
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
}];
<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">
// 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;
createNew: () => void;
deleteSelected: (rows: EgIdlObject[]) => void;
+ contextOrg: EgIdlObject;
+ orgFieldLabel: string;
+
constructor(
private idl: EgIdlService,
private org: EgOrgService,
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) {
};
}
+ 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);
};
}
}