Option to delete a user pending in the interface of user list

FEA: ItEr75S04BugFixing
This commit is contained in:
Cristina Alvarino 2011-07-08 09:17:53 +02:00 committed by Manuel Rego Casasnovas
parent 8f35436f26
commit 55f8d95e10
6 changed files with 78 additions and 1 deletions

View file

@ -26,6 +26,7 @@ import java.util.List;
import org.navalplanner.business.common.daos.IGenericDAO;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.scenarios.entities.Scenario;
import org.navalplanner.business.users.entities.OrderAuthorization;
import org.navalplanner.business.users.entities.User;
/**
@ -80,4 +81,5 @@ public interface IUserDAO extends IGenericDAO<User, Long>{
public List<User> findByLastConnectedScenario(Scenario scenario);
List<OrderAuthorization> getOrderAuthorizationsByUser(User user);
}

View file

@ -28,7 +28,9 @@ import org.hibernate.criterion.Restrictions;
import org.navalplanner.business.common.daos.GenericDAOHibernate;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.scenarios.entities.Scenario;
import org.navalplanner.business.users.entities.OrderAuthorization;
import org.navalplanner.business.users.entities.User;
import org.navalplanner.business.users.entities.UserOrderAuthorization;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
@ -117,4 +119,11 @@ public class UserDAO extends GenericDAOHibernate<User, Long>
return c.list();
}
@Override
public List<OrderAuthorization> getOrderAuthorizationsByUser(User user) {
List orderAuthorizations = getSession()
.createCriteria(UserOrderAuthorization.class)
.add(Restrictions.eq("user", user)).list();
return orderAuthorizations;
}
}

View file

@ -23,6 +23,7 @@ package org.navalplanner.web.users;
import java.util.List;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.users.entities.Profile;
import org.navalplanner.business.users.entities.User;
@ -125,4 +126,6 @@ public interface IUserModel {
boolean hasChangedDefaultPasswordOrDisabled(MandatoryUser admin);
void confirmRemove(User user) throws InstanceNotFoundException;
}

View file

@ -25,6 +25,8 @@ import static org.navalplanner.web.I18nHelper._;
import java.util.List;
import org.apache.commons.logging.LogFactory;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.users.entities.Profile;
import org.navalplanner.business.users.entities.User;
@ -46,6 +48,7 @@ import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Constraint;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.api.Window;
@ -58,6 +61,8 @@ import org.zkoss.zul.api.Window;
public class UserCRUDController extends GenericForwardComposer implements
IUserCRUDController {
private static final org.apache.commons.logging.Log LOG = LogFactory.getLog(UserCRUDController.class);
private Window createWindow;
private Window listWindow;
@ -277,4 +282,35 @@ public class UserCRUDController extends GenericForwardComposer implements
listWindow)
: visibility;
}
public void confirmRemove(User user) {
int result = showConfirmDeleteUser(user);
if (result == Messagebox.OK) {
try {
userModel.confirmRemove(user);
goToList();
} catch (InstanceNotFoundException e) {
messagesForUser
.showMessage(
Level.ERROR,
_("Cannot delete user: it does not exist anymore"));
LOG.error(_("Error removing element: ", user.getId()), e);
}
}
}
private int showConfirmDeleteUser(User user) {
try {
return Messagebox.show(
_("Confirm deleting this User. Are you sure?"),
_("Delete"), Messagebox.OK | Messagebox.CANCEL,
Messagebox.QUESTION);
} catch (InterruptedException e) {
LOG.error(
_("Error on showing removing element: ", user.getId()),
e);
}
return Messagebox.CANCEL;
}
}

View file

@ -26,10 +26,11 @@ import java.util.List;
import org.apache.commons.lang.Validate;
import org.navalplanner.business.common.Configuration;
import org.navalplanner.business.common.Registry;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.users.daos.IOrderAuthorizationDAO;
import org.navalplanner.business.users.daos.IUserDAO;
import org.navalplanner.business.users.entities.OrderAuthorization;
import org.navalplanner.business.users.entities.Profile;
import org.navalplanner.business.users.entities.User;
import org.navalplanner.business.users.entities.UserRole;
@ -55,6 +56,9 @@ public class UserModel extends PasswordUtil implements IUserModel {
@Autowired
private IUserDAO userDAO;
@Autowired
private IOrderAuthorizationDAO orderAuthorizationDAO;
@Autowired
private IDBPasswordEncoderService dbPasswordEncoderService;
@ -221,4 +225,22 @@ public class UserModel extends PasswordUtil implements IUserModel {
return user.hasChangedDefaultPasswordOrDisabled();
}
@Override
@Transactional
public void confirmRemove(User user)
throws InstanceNotFoundException {
List<OrderAuthorization> orderAuthorizations = getReferencedByOtherEntities(user);
if (!orderAuthorizations.isEmpty()) {
for (OrderAuthorization orderAuthorization : orderAuthorizations) {
orderAuthorizationDAO.remove(orderAuthorization.getId());
}
}
userDAO.remove(user.getId());
}
@Transactional(readOnly = true)
public List<OrderAuthorization> getReferencedByOtherEntities(User user){
return userDAO.getOrderAuthorizationsByUser(user);
}
}

View file

@ -39,6 +39,11 @@
tooltiptext="${i18n:_('Edit')}"
onClick="controller.goToEditForm(self.parent.parent.value);">
</button>
<button sclass="icono" image="/common/img/ico_borrar1.png"
hoverImage="/common/img/ico_borrar.png"
tooltiptext="${i18n:_('Delete')}"
onClick="controller.confirmRemove(self.parent.parent.value);">
</button>
</hbox>
</row>
</rows>