grab all call number prefixes and suffixes from the database, filter them down based on owning library of the holding.
Do not permit editing of status when template value or holding are "magic". Do not allow a template to apply an alert_message.
Signed-off-by: Llewellyn Marshall <llewellyn.marshall@ncdcr.gov>
return changeSelection[disValue] === true;
}
+ copyChangePermitted(copy: IdlObject, field: string,
+ value: any) : boolean {
+ switch(field){
+ case 'status': {
+ return this.statusEditable([copy]) &&
+ !this.volcopy.copyStatIsMagic(value);
+ }
+ case 'alert_message': {
+ return false;
+ }
+ default: {
+ return true;
+ }
+ }
+ }
+
applyCopyValue(field: string, value?: any, changeSelection?: BatchChangeSelection) {
if (value === undefined) {
value = this.values[field];
return;
}
+ // prevent unpermitted changes from going through
+ if(!this.copyChangePermitted(copy, field, value)){
+ return;
+ }
+
copy[field](value);
copy.ischanged(true);
});
// May be a 'remote' location. Fetch as needed.
promise = this.volcopy.getLocation(value);
}
+
+ if ((field === 'cost' || field === 'price' || field === 'deposit_amount')){
+ // Make sure monetary fields are properly cast as numeric values
+ // and discard if no cast possible.
+ let n = Number(value);
+ if(isNaN(n) || value === ''){return;}
+ promise = Promise.resolve(n);
+ }
promise.then(val => {
this.applyCopyValue(field, val);
return def ? def.label : '';
}
- // Returns false if any items are in magic statuses
- statusEditable(): boolean {
- const copies = this.context.copyList();
- for (let idx = 0; idx < copies.length; idx++) {
- if (this.volcopy.copyStatIsMagic(copies[idx].status())) {
- return false;
- }
- }
+ // Returns false if status is in magic statuses
+ statusEditable(c?: IdlObject[]): boolean {
+ if(c === undefined || !c.length)
+ c = this.context.copyList();
+ for (let idx = 0; idx < c.length; idx++) {
+ if (this.volcopy.copyStatIsMagic(c[idx].status())) {
+ return false;
+ }
+ }
return true;
}
<div><label class="font-weight-bold" i18n>Prefix</label></div>
<div>
<eg-combobox [smallFormControl]="true" [(ngModel)]="batchVolPrefix">
- <eg-combobox-entry *ngFor="let pfx of volcopy.commonData.acn_prefix"
+ <eg-combobox-entry *ngFor="let pfx of batchPrefixes()"
[entryId]="pfx.id()" [entryLabel]="pfx.label()">
</eg-combobox-entry>
</eg-combobox>
<div><label class="font-weight-bold" i18n>Suffix</label></div>
<div>
<eg-combobox [smallFormControl]="true" [(ngModel)]="batchVolSuffix">
- <eg-combobox-entry *ngFor="let sfx of volcopy.commonData.acn_suffix"
+ <eg-combobox-entry *ngFor="let sfx of batchSuffixes()"
[entryId]="sfx.id()" [entryLabel]="sfx.label()">
</eg-combobox-entry>
</eg-combobox>
<eg-combobox-entry
[entryId]="-1" entryLabel="<None>" i18n-entryLabel>
</eg-combobox-entry>
- <eg-combobox-entry *ngFor="let pfx of volcopy.commonData.acn_prefix"
+ <eg-combobox-entry *ngFor="let pfx of orgPrefixes(orgNode.target.id())"
[entryId]="pfx.id()" [entryLabel]="pfx.label()">
</eg-combobox-entry>
</eg-combobox>
<eg-combobox-entry
[entryId]="-1" entryLabel="<None>" i18n-entryLabel>
</eg-combobox-entry>
- <eg-combobox-entry *ngFor="let sfx of volcopy.commonData.acn_suffix"
+ <eg-combobox-entry *ngFor="let sfx of orgSuffixes(orgNode.target.id())"
[entryId]="sfx.id()" [entryLabel]="sfx.label()">
</eg-combobox-entry>
</eg-combobox>
!this.volcopy.defaults.visible.batch_actions;
this.volcopy.saveDefaults();
}
+
+ // Retrieve call number prefixes for the work station OU
+ batchPrefixes(): IdlObject[]{
+ return this.orgPrefixes(this.auth.user().ws_ou());
+ }
+
+ // Retrieve call number suffixes for the work station OU
+ batchSuffixes(): IdlObject[]{
+ return this.orgSuffixes(this.auth.user().ws_ou());
+ }
+
+ // Given an org unit ID, find all call number prefixes belonging to
+ // the org unit, its ancestors, and its descendants
+ orgPrefixes(orgId: number): IdlObject[] {
+ let r = [];
+ this.org.fullPath(orgId,true).forEach( org => {
+ if(this.volcopy.callNumberPrefixMap[org])
+ this.volcopy.callNumberPrefixMap[org].forEach(prefix => r.push(prefix));
+ });
+ return r;
+ }
+
+ // Given an org unit ID, find all call number suffixes belonging to
+ // the org unit, its ancestors, and its descendants
+ orgSuffixes(orgId: number): IdlObject[] {
+ let r = [];
+ this.org.fullPath(orgId,true).forEach( org => {
+ if(this.volcopy.callNumberSuffixMap[org])
+ this.volcopy.callNumberSuffixMap[org].forEach(suffix => r.push(suffix));
+ });
+ return r;
+ }
}
currentContext: VolCopyContext;
statCatEntryMap: {[id: number]: IdlObject} = {}; // entry id => entry
+ callNumberPrefixMap: {[key: string]: IdlObject[]} = {};
+ callNumberSuffixMap: {[key: string]: IdlObject[]} = {};
templateNames: ComboboxEntry[] = [];
templates: any = {};
// specially in the markup.
this.commonData.acn_prefix =
this.commonData.acn_prefix.filter(pfx => pfx.id() !== -1);
-
+ // Map the call number prefixes by their owning libraries
+ this.commonData.acn_prefix.forEach(
+ pfx => {
+ let ol = pfx.owning_lib();
+ if (!this.callNumberPrefixMap[ol]) {
+ this.callNumberPrefixMap[ol] = [];
+ }
+ this.callNumberPrefixMap[ol].push(pfx);
+ }
+ );
+
this.commonData.acn_suffix =
this.commonData.acn_suffix.filter(sfx => sfx.id() !== -1);
-
+ // Map the call number suffixes by their owning libraries
+ this.commonData.acn_suffix.forEach(
+ sfx => {
+ let ol = sfx.owning_lib();
+ if (!this.callNumberSuffixMap[ol]) {
+ this.callNumberSuffixMap[ol] = [];
+ }
+ this.callNumberSuffixMap[ol].push(sfx);
+ }
+ );
+
this.commonData.acp_status.forEach(
stat => this.copyStatuses[stat.id()] = stat);
$client->respond({
acn_prefix => $e->search_asset_call_number_prefix([
- {owning_lib => $org_ids},
+ {id => {'!=' => undef}},
{order_by => {acnp => 'label_sortkey'}}
])
});
$client->respond({
acn_suffix => $e->search_asset_call_number_suffix([
- {owning_lib => $org_ids},
+ {id => {'!=' => undef}},
{order_by => {acns => 'label_sortkey'}}
])
});