</button>
</a>
+<eg-confirm-dialog #confirmDelete
+ i18n-dialogTitle i18n-dialogBody
+ dialogTitle="Confirm Delete"
+ dialogBody="Delete Setting Group
+ {{account.setting_group() ? account.setting_group().label() : ''}}?">
+</eg-confirm-dialog>
+
<eg-fm-record-editor #cloneDialog idlClass="sipsetg" mode="create"
hiddenFields="id" fieldOrder="label,institution">
</eg-fm-record-editor>
</eg-fm-record-editor>
<div class="row mt-2" *ngIf="account">
- <div class="col-lg-6">
+ <div class="col-lg-7">
<ng-template #usrTemplate>
<eg-combobox #usrCbox [entries]="usrCboxEntries" required="true"
[selectedId]="account.setting_group() ? account.setting_group().id() : null"
[entries]="settingGroups" (onChange)="grpChanged($event)">
</eg-combobox>
- <button class="btn btn-outline-dark ml-2"
- (click)="openCloneDialog()" i18n>Clone</button>
+ <button class="btn btn-outline-info ml-2"
+ [disabled]="!account.setting_group()" (click)="openCloneDialog()"
+ i18n>Clone</button>
+ <button class="btn btn-outline-danger ml-2"
+ [disabled]="!account.setting_group()" (click)="openDeleteDialog()"
+ i18n>Delete</button>
</div>
</ng-template>
(recordSaved)="accountSaved()" [recordId]="accountId">
</eg-fm-record-editor>
</div>
- <div class="col-lg-6">
+ <div class="col-lg-5">
<ul>
- <li i18n>Apply changes to the account before modifying settings</li>
+ <li i18n>Save account changes before modifying settings.</li>
<li i18n>Setting values must be entered as valid JSON.</li>
</ul>
</div>
settingGroups: ComboboxEntry[];
usrId: number;
settingsSource: GridDataSource = new GridDataSource();
+ deleteGroupAccounts: IdlObject[] = [];
@ViewChild('cloneDialog') cloneDialog: FmRecordEditorComponent;
@ViewChild('settingDialog') settingDialog: FmRecordEditorComponent;
@ViewChild('settingGrid') settingGrid: GridComponent;
+ @ViewChild('confirmDelete') confirmDelete: ConfirmDialogComponent;
constructor(
private route: ActivatedRoute,
}
grpChanged(entry: ComboboxEntry) {
- if (!entry) { return; }
+
+ if (!entry) {
+ this.account.setting_group(null);
+ return;
+ }
this.pcrud.retrieve('sipsetg', entry.id,
{flesh: 1, flesh_fields: {sipsetg: ['settings']}})
});
}
+ openDeleteDialog() {
+ const grp = this.account.setting_group();
+
+ // Find accounts that use this group
+ this.pcrud.search('sipacc', {setting_group: grp.id()}, {atomic: true})
+
+ // Confirm deletion
+ .pipe(switchMap(accounts => {
+ this.deleteGroupAccounts = accounts;
+ return this.confirmDelete.open();
+ })
+
+ // Modify accounts that use this group so the delete can continue
+ .pipe(switchMap(approved => {
+ if (!approved) { return of(); }
+
+ // Clone the accounts so we can avoid modifying the currently
+ // edited account, which can lead to fleshing-related JS errors
+ const clones = accounts.map(acc => {
+ const one = this.idl.clone(acc);
+ one.setting_group(1); // defaults
+ return one;
+ });
+
+ return this.pcrud.update(clones);
+ })
+ .pipe(switchMap(result => {
+ if (!result) { return of(); }
+ return this.pcrud.remove(grp);
+ })
+ .pipe(tap(result => {
+ if (result)
+ }
+
accountSaved() {
this.loadAccount();
}
INSERT INTO actor.passwd_type (code, name, login, crypt_algo, iter_count)
VALUES ('sip2', 'SIP2 Client Password', FALSE, 'bf', 5);
-INSERT INTO sip.setting_group (label, institution)
- VALUES ('Example Setting Group', 'example');
+-- ID 1 is magic.
+INSERT INTO sip.setting_group (id, label, institution)
+ VALUES (1, 'Default Settings', 'example');
+
+-- carve space for other canned setting groups
+SELECT SETVAL('sip.setting_group_id_seq'::TEXT, 1000);
INSERT INTO sip.setting (setting_group, description, name, value)
VALUES (
- (SELECT id FROM config.sip_setting_group WHERE institution = 'example'),
+ 1,
+ oils_i18n_gettext(
+ 'eg.staffcat.exclude_electronic',
+ 'Staff Catalog "Exclude Electronic Resources" Option',
+ 'cwst', 'label'
+ )
+
'Monetary amounts are reported in this currency',
'currency', '"USD"'
), (
- (SELECT id FROM config.sip_setting_group WHERE institution = 'example'),
+ 1,
'AV Format. Options: eg_legacy, 3m, swyer_a, swyer_b',
'av_format', '"eg_legacy"'
), (
- (SELECT id FROM config.sip_setting_group WHERE institution = 'example'),
+ 1,
'Allow clients to request the SIP server status before login (message 99)',
'allow_sc_status_before_login', 'true'
), (
- (SELECT id FROM config.sip_setting_group WHERE institution = 'example'),
+ 1,
'Due date uses 18-char date format (YYYYMMDDZZZZHHMMSS). Otherwise "YYYY-MM-DD HH:MM:SS',
'due_date_use_sip_date_format', 'false'
), (
- (SELECT id FROM config.sip_setting_group WHERE institution = 'example'),
+ 1,
'Checkout and renewal are allowed even when penalties blocking these actions exist',
'patron_status_permit_loans', 'false'
), (
- (SELECT id FROM config.sip_setting_group WHERE institution = 'example'),
+ 1,
'Holds, checkouts, and renewals allowed regardless of blocking penalties',
'patron_status_permit_all', 'false'
), (
- (SELECT id FROM config.sip_setting_group WHERE institution = 'example'),
+ 1,
'Patron holds data may be returned as either "title" or "barcode"',
'default_activity_who', 'null'
), (
- (SELECT id FROM config.sip_setting_group WHERE institution = 'example'),
+ 1,
'Patron circulation data may be returned as either "title" or "barcode"',
'msg64_summary_datatype', '"title"'
), (
- (SELECT id FROM config.sip_setting_group WHERE institution = 'example'),
+ 1,
'Patron holds data may be returned as either "title" or "barcode"',
'msg64_hold_items_available', '"title"'
), (
- (SELECT id FROM config.sip_setting_group WHERE institution = 'example'),
+ 1,
'Checkout override copy alert message',
'checkout.override.COPY_ALERT_MESSAGE', 'true'
), (
- (SELECT id FROM config.sip_setting_group WHERE institution = 'example'),
+ 1,
'Checkin override copy alert message',
'checkin.override.COPY_ALERT_MESSAGE', 'true'
), (
- (SELECT id FROM config.sip_setting_group WHERE institution = 'example'),
+ 1,
'Checkin override bad copy status',
'checkin.override.COPY_BAD_STATUS', 'true'
), (
- (SELECT id FROM config.sip_setting_group WHERE institution = 'example'),
+ 1,
'Checkin override copy status missing',
'checkin.override.COPY_STATUS_MISSING', 'true'
), (
- (SELECT id FROM config.sip_setting_group WHERE institution = 'example'),
+ 1,
'Checkin local holds as transits',
'checkin_hold_as_transit', 'false'
);