From: Jason Etheridge Date: Wed, 11 Jan 2012 03:15:31 +0000 (-0500) Subject: Make Delete User failure overridable X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=d8628fd6a202ad378be706e4bbedf59496a653ea;p=working%2FEvergreen.git Make Delete User failure overridable Make mrpeter's new ACTOR_USER_DELETE_OPEN_XACTS event overridable to preserve existing functionality (the delete user code will wipe out all transactions if allowed to, and will leave copy statuses as "Checked Out" if needed, which is okay in EG even if there aren't corresponding circ records--some libraries migrate data like this if the information available is sparse). So if you want to be able to do this without a super user, you'll need to create an ACTOR_USER_DELETE_OPEN_XACTS.override perm and assign it to perm groups and/or users. Signed-off-by: Jason Etheridge --- diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Actor.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Actor.pm index 895fc29237..9023ef0e2f 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Actor.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Actor.pm @@ -3507,6 +3507,12 @@ sub update_events { __PACKAGE__->register_method ( method => 'really_delete_user', + api_name => 'open-ils.actor.user.delete.override', + signature => q/@see open-ils.actor.user.delete/ +); + +__PACKAGE__->register_method ( + method => 'really_delete_user', api_name => 'open-ils.actor.user.delete', signature => q/ It anonymizes all personally identifiable information in actor.usr. By calling actor.usr_purge_data() @@ -3533,8 +3539,12 @@ sub really_delete_user { my $user = $e->retrieve_actor_user($user_id) or return $e->die_event; - # No deleting patrons with open billings or checked out copies - return $e->die_event(OpenILS::Event->new('ACTOR_USER_DELETE_OPEN_XACTS')) if @$open_bills; + # No deleting patrons with open billings or checked out copies, unless perm-enabled override + if (@$open_bills) { + return $e->die_event(OpenILS::Event->new('ACTOR_USER_DELETE_OPEN_XACTS')) + unless $self->api_name =~ /override/o + && $e->allowed('ACTOR_USER_DELETE_OPEN_XACTS.override', $user->home_ou); + } # No deleting yourself - UI is supposed to stop you first, though. return $e->die_event unless $e->requestor->id != $user->id; return $e->die_event unless $e->allowed('DELETE_USER', $user->home_ou); diff --git a/Open-ILS/xul/staff_client/server/locale/en-US/patron.properties b/Open-ILS/xul/staff_client/server/locale/en-US/patron.properties index 3bd00ce5c3..bd55f5922f 100644 --- a/Open-ILS/xul/staff_client/server/locale/en-US/patron.properties +++ b/Open-ILS/xul/staff_client/server/locale/en-US/patron.properties @@ -94,7 +94,7 @@ staff.patron.display.cmd_patron_delete.dest_user.default_value= staff.patron.display.cmd_patron_delete.dest_user.title=Destination User staff.patron.display.cmd_patron_delete.dest_user.failure=Failed to retrieve destination user. User deletion aborted. staff.patron.display.cmd_patron_delete.dest_user.self_reference_failure=Cannot specify the deleted user as the destination user. User deletion aborted. -staff.patron.display.cmd_patron_delete.open_xact=The user you have attempted to delete cannot be deleted because it has open circulations and/or unpaid bills. +staff.patron.display.cmd_patron_delete.override_prompt=Override patron deletion failure? staff.patron.display.spawn_editor.editing_related_patron=Editing Related Patron staff.patron.display.init.retrieving_patron=Retrieving Patron... staff.patron.display.init.retrieving=Retrieving... diff --git a/Open-ILS/xul/staff_client/server/patron/display.js b/Open-ILS/xul/staff_client/server/patron/display.js index f4da6f2533..97f23c0b49 100644 --- a/Open-ILS/xul/staff_client/server/patron/display.js +++ b/Open-ILS/xul/staff_client/server/patron/display.js @@ -123,12 +123,21 @@ patron.display.prototype = { } params.push( dest_usr.id() ); } - var robj = obj.network.simple_request( 'FM_AU_DELETE', params ); - alert(js2JSON(robj)); + var robj = obj.network.simple_request( + 'FM_AU_DELETE', + params, + null, + { + 'title' : document.getElementById('patronStrings').getString('staff.patron.display.cmd_patron_delete.override_prompt'), + 'overridable_events' : [ + 2004 /* ACTOR_USER_DELETE_OPEN_XACTS */ + ] + } + ); if (typeof robj.ilsevent != 'undefined') { switch(Number(robj.ilsevent)) { + /* already informed via override prompt */ case 2004 /* ACTOR_USER_DELETE_OPEN_XACTS */ : - alert(document.getElementById('patronStrings').getString('staff.patron.display.cmd_patron_delete.open_xact')); return; break; }