From: Bill Erickson Date: Tue, 24 Nov 2020 23:13:18 +0000 (+0000) Subject: LP1901930 SIP mediator continued X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=d830c164f67a6592a2bc6e1367573c8cd8c90adb;p=working%2FEvergreen.git LP1901930 SIP mediator continued Signed-off-by: Bill Erickson --- diff --git a/Open-ILS/src/eg2/src/app/staff/admin/server/admin-server-splash.component.html b/Open-ILS/src/eg2/src/app/staff/admin/server/admin-server-splash.component.html index de399d6517..42fb9e3174 100644 --- a/Open-ILS/src/eg2/src/app/staff/admin/server/admin-server-splash.component.html +++ b/Open-ILS/src/eg2/src/app/staff/admin/server/admin-server-splash.component.html @@ -90,6 +90,8 @@ routerLink="/staff/admin/server/config/remote_account"> + - - + + @@ -23,6 +21,7 @@ [fieldOptions]="{name:{isReadonly:true}}"> +
@@ -41,8 +40,8 @@ -
@@ -62,6 +61,7 @@
  • Save account changes before modifying settings.
  • Setting values must be entered as valid JSON.
  • +
  • The "Default Settings" settings group cannot be modified
diff --git a/Open-ILS/src/eg2/src/app/staff/admin/server/sip/account.component.ts b/Open-ILS/src/eg2/src/app/staff/admin/server/sip/account.component.ts index 1502667498..b37e38ae5d 100644 --- a/Open-ILS/src/eg2/src/app/staff/admin/server/sip/account.component.ts +++ b/Open-ILS/src/eg2/src/app/staff/admin/server/sip/account.component.ts @@ -9,7 +9,7 @@ import {PcrudService} from '@eg/core/pcrud.service'; import {ToastService} from '@eg/share/toast/toast.service'; import {StringComponent} from '@eg/share/string/string.component'; import {StringService} from '@eg/share/string/string.service'; -import {ConfirmDialogComponent} from '@eg/share/dialog/confirm.component'; +import {DialogComponent} from '@eg/share/dialog/dialog.component'; import {FmRecordEditorComponent} from '@eg/share/fm-editor/fm-editor.component'; import {ComboboxEntry, ComboboxComponent} from '@eg/share/combobox/combobox.component'; import {GridComponent} from '@eg/share/grid/grid.component'; @@ -33,7 +33,7 @@ export class SipAccountComponent implements OnInit { @ViewChild('cloneDialog') cloneDialog: FmRecordEditorComponent; @ViewChild('settingDialog') settingDialog: FmRecordEditorComponent; @ViewChild('settingGrid') settingGrid: GridComponent; - @ViewChild('confirmDelete') confirmDelete: ConfirmDialogComponent; + @ViewChild('deleteGroupDialog') deleteGroupDialog: DialogComponent; constructor( private route: ActivatedRoute, @@ -154,6 +154,14 @@ export class SipAccountComponent implements OnInit { } openDeleteDialog() { + + this.deleteGroupDialog.open().subscribe( + ok => { + console.log('group deleted'); + } + ); + + /* const grp = this.account.setting_group(); @@ -200,6 +208,9 @@ export class SipAccountComponent implements OnInit { } editSetting(row: any) { + // Default Settings group is read-only + if (row.setting_group() === 1) { return; } + this.settingDialog.record = this.idl.clone(row); this.settingDialog.open().subscribe( ok => { diff --git a/Open-ILS/src/eg2/src/app/staff/admin/server/sip/account.module.ts b/Open-ILS/src/eg2/src/app/staff/admin/server/sip/account.module.ts index 5ab590fc6b..d97d354c96 100644 --- a/Open-ILS/src/eg2/src/app/staff/admin/server/sip/account.module.ts +++ b/Open-ILS/src/eg2/src/app/staff/admin/server/sip/account.module.ts @@ -3,11 +3,13 @@ import {AdminCommonModule} from '@eg/staff/admin/common.module'; import {SipAccountRoutingModule} from './routing.module'; import {SipAccountListComponent} from './account-list.component'; import {SipAccountComponent} from './account.component'; +import {DeleteGroupDialogComponent} from './delete-group-dialog.component'; @NgModule({ declarations: [ SipAccountComponent, - SipAccountListComponent + SipAccountListComponent, + DeleteGroupDialogComponent ], imports: [ AdminCommonModule, diff --git a/Open-ILS/src/eg2/src/app/staff/admin/server/sip/delete-group-dialog.component.html b/Open-ILS/src/eg2/src/app/staff/admin/server/sip/delete-group-dialog.component.html new file mode 100644 index 0000000000..d1eb51bc5d --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/admin/server/sip/delete-group-dialog.component.html @@ -0,0 +1,37 @@ + + + + + diff --git a/Open-ILS/src/eg2/src/app/staff/admin/server/sip/delete-group-dialog.component.ts b/Open-ILS/src/eg2/src/app/staff/admin/server/sip/delete-group-dialog.component.ts new file mode 100644 index 0000000000..1912a99584 --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/admin/server/sip/delete-group-dialog.component.ts @@ -0,0 +1,53 @@ +import {Component, Input, ViewChild, OnInit} from '@angular/core'; +import {Observable, of} from 'rxjs'; +import {map, tap, switchMap, catchError} from 'rxjs/operators'; +import {IdlService, IdlObject} from '@eg/core/idl.service'; +import {OrgService} from '@eg/core/org.service'; +import {AuthService} from '@eg/core/auth.service'; +import {PcrudService} from '@eg/core/pcrud.service'; +import {NetService} from '@eg/core/net.service'; +import {ToastService} from '@eg/share/toast/toast.service'; +import {StringComponent} from '@eg/share/string/string.component'; +import {StringService} from '@eg/share/string/string.service'; +import {NgbModal, NgbModalRef, NgbModalOptions} from '@ng-bootstrap/ng-bootstrap'; +import {DialogComponent} from '@eg/share/dialog/dialog.component'; +import {FmRecordEditorComponent} from '@eg/share/fm-editor/fm-editor.component'; +import {ComboboxEntry, ComboboxComponent} from '@eg/share/combobox/combobox.component'; +import {GridComponent} from '@eg/share/grid/grid.component'; +import {GridDataSource} from '@eg/share/grid/grid'; +import {Pager} from '@eg/share/util/pager'; + +@Component({ + templateUrl: './delete-group-dialog.component.html', + selector: 'eg-sip-group-delete-dialog' +}) +export class DeleteGroupDialogComponent extends DialogComponent implements OnInit { + + @Input() group: IdlObject; + @Input() settingGroups: ComboboxEntry[]; + targetGroup = 1; // Default to the 'Default Settings' group. + trimmedSettingGroups: ComboboxEntry[]; + + constructor( + private modal: NgbModal, + private idl: IdlService, + private net: NetService + ) { + super(modal); + } + + ngOnInit() { + this.onOpen$.subscribe(_ => { + console.log('my group', this.group); + this.trimmedSettingGroups = this.settingGroups.filter( + entry => entry.id !== this.group.id()); + }); + } + + grpChanged(entry: ComboboxEntry) { + if (entry) { + this.targetGroup = entry.id; + } + } +} + diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/SIP2.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/SIP2.pm index 240ea7c0e3..2fce9f2106 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/SIP2.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/SIP2.pm @@ -18,6 +18,7 @@ use OpenILS::Application::SIP2::Patron; use OpenILS::Application::SIP2::Checkout; use OpenILS::Application::SIP2::Checkin; use OpenILS::Application::SIP2::Payment; +use OpenILS::Application::SIP2::Admin; my $U = 'OpenILS::Application::AppUtils'; my $SC = 'OpenILS::Application::SIP2::Common'; diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/SIP2/Admin.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/SIP2/Admin.pm new file mode 100644 index 0000000000..fc51337c9b --- /dev/null +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/SIP2/Admin.pm @@ -0,0 +1,66 @@ +package OpenILS::Application::SIP2::Admin; +use strict; use warnings; +use base 'OpenILS::Application'; +use OpenILS::Event; +use OpenILS::Application; +use OpenILS::Utils::Fieldmapper; +use OpenSRF::Utils::Logger qw(:logger); +use OpenILS::Utils::CStoreEditor qw/:funcs/; +use OpenILS::Application::AppUtils; + +my $U = 'OpenILS::Application::AppUtils'; + +__PACKAGE__->register_method( + method => 'delete_setting_group', + api_name => 'open-ils.sip2.setting_group.delete', + api_level => 1, + argc => 2, + signature => { + desc => q/ + Takes a SIP2 JSON message and handles the request/, + params => [{ + name => 'auth', + desc => 'Authtoken', + type => 'string' + }, { + name => 'del_grp_id', + desc => 'Setting group ID to delete', + type => 'number', + }, { + name => 'xfer_grp_id', + desc => q/Setting group ID to use as account transfer destination. + If no destination group is specified, defaults to setting + group ID 1 (Defaults)/, + type => 'number', + }], + return => { + desc => q/1 on success, Event on error/, + type => 'number | object' + } + } +); + +sub dispatch_sip2_request { + my ($self, $client, $auth, $del_grp_id, $xfer_grp_id) = @_; + $xfer_grp_id ||= 1; # Defaults Group + + my $e = new_editor(authtoken => $auth, xact => 1); + return $e->die_event unless $e->allowed('SIP_ADMIN'); + + return $e->die_event unless + my $grp = $e->retrieve_sip_setting_group($del_grp_id); + + my $accounts = $e->search_sip_account({setting_group => $del_grp_id}); + + for my $acc (@$accounts) { + $acc->setting_group($xfer_grp_id); + return $e->die_event unless $e->update_sip_account($acc); + } + + # note: sip.setting objects are deleted via cascade + return $e->die_event unless $e->delete_sip_setting_group($grp); + + return 1; +} + +1; diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.sip-config.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.sip-config.sql index ea6dde4833..3835e8f527 100644 --- a/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.sip-config.sql +++ b/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.sip-config.sql @@ -159,8 +159,7 @@ INSERT INTO actor.workstation (name, owning_lib) VALUES ('BR1-SIP2-Gateway', 4); INSERT INTO sip.account( setting_group, sip_username, sip_password, usr, workstation ) VALUES ( - (SELECT id FROM config.sip_setting_group WHERE institution = 'example'), - 'admin', + 1, 'admin', (SELECT id FROM actor.passwd WHERE usr = 1 AND passwd_type = 'sip2'), 1, (SELECT id FROM actor.workstation WHERE name = 'BR1-SIP2-Gateway')