From 88920249ec650761685134b0cffc184be2ed444e Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Wed, 9 May 2012 08:53:32 +0200 Subject: [PATCH] Add option to remove bound user too when removing a resource If the bound user is not an administrator, a question is asked to the user to decide if he wants to remove or not the bound user. FEA: ItEr76S27ResourceBinding --- .../web/resources/worker/IWorkerModel.java | 5 +++- .../worker/WorkerCRUDController.java | 29 ++++++++++++++----- .../web/resources/worker/WorkerModel.java | 24 ++++++++++++++- 3 files changed, 48 insertions(+), 10 deletions(-) diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/resources/worker/IWorkerModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/resources/worker/IWorkerModel.java index 7d6518dea..fbcceee94 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/resources/worker/IWorkerModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/resources/worker/IWorkerModel.java @@ -134,7 +134,8 @@ public interface IWorkerModel extends IIntegrationEntityModel { boolean canRemove(Worker worker); - void confirmRemove(Worker worker) throws InstanceNotFoundException; + void confirmRemove(Worker worker, boolean removeBoundUser) + throws InstanceNotFoundException; void removeCalendar(); @@ -144,4 +145,6 @@ public interface IWorkerModel extends IIntegrationEntityModel { void setBoundUser(User user); + User getBoundUserFromDB(Worker worker); + } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/resources/worker/WorkerCRUDController.java b/libreplan-webapp/src/main/java/org/libreplan/web/resources/worker/WorkerCRUDController.java index 59898d478..36706808a 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/resources/worker/WorkerCRUDController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/resources/worker/WorkerCRUDController.java @@ -947,20 +947,33 @@ public class WorkerCRUDController extends GenericForwardComposer implements public void confirmRemove(Worker worker) { try { + if (!workerModel.canRemove(worker)) { + messages.showMessage( + Level.WARNING, + _("This worker cannot be deleted because it has assignments to projects or imputed hours")); + return; + } + int status = Messagebox.show(_("Confirm deleting this worker. Are you sure?"), _("Delete"), Messagebox.OK | Messagebox.CANCEL, Messagebox.QUESTION); if (Messagebox.OK != status) { return; } - if(workerModel.canRemove(worker)) { - workerModel.confirmRemove(worker); - messages.showMessage(Level.INFO, _("Worker deleted")); - goToList(); - } - else { - messages.showMessage(Level.WARNING, - _("This worker cannot be deleted because it has assignments to projects or imputed hours")); + + boolean removeBoundUser = false; + User user = workerModel.getBoundUserFromDB(worker); + if (user != null && !user.isAdministrator()) { + removeBoundUser = Messagebox.show( + _("Do you want to remove bound user \"{0}\" too?", + user.getLoginName()), _("Delete bound user"), + Messagebox.YES | Messagebox.NO, Messagebox.QUESTION) == Messagebox.YES; } + + workerModel.confirmRemove(worker, removeBoundUser); + messages.showMessage(Level.INFO, + removeBoundUser ? _("Worker and bound user deleted") + : _("Worker deleted")); + goToList(); } catch (InterruptedException e) { messages.showMessage( Level.ERROR, e.getMessage()); diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/resources/worker/WorkerModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/resources/worker/WorkerModel.java index 3c3c282a7..002766479 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/resources/worker/WorkerModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/resources/worker/WorkerModel.java @@ -606,8 +606,12 @@ public class WorkerModel extends IntegrationEntityModel implements IWorkerModel @Override @Transactional - public void confirmRemove(Worker worker) throws InstanceNotFoundException { + public void confirmRemove(Worker worker, boolean removeBoundUser) + throws InstanceNotFoundException { resourceDAO.remove(worker.getId()); + if (removeBoundUser) { + userDAO.remove(worker.getUser()); + } } public EntityNameEnum getEntityName() { @@ -651,4 +655,22 @@ public class WorkerModel extends IntegrationEntityModel implements IWorkerModel } } + @Override + @Transactional(readOnly = true) + public User getBoundUserFromDB(Worker worker) { + if (worker != null) { + User user = worker.getUser(); + if (user != null) { + try { + User foundUser = userDAO.find(user.getId()); + foundUser.getAllRoles().size(); + return foundUser; + } catch (InstanceNotFoundException e) { + // Do nothing + } + } + } + return null; + } + }