diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/expensesheet/ExpenseSheetModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/expensesheet/ExpenseSheetModel.java index 74b9c6730..412f70087 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/expensesheet/ExpenseSheetModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/expensesheet/ExpenseSheetModel.java @@ -248,17 +248,15 @@ public class ExpenseSheetModel extends IntegrationEntityModel implements IExpens @Override @Transactional - public void removeExpenseSheet(ExpenseSheet expenseSheet) { + public void removeExpenseSheet(ExpenseSheet expenseSheet) + throws InstanceNotFoundException { Validate.notNull(expenseSheet); expenseSheet = getFromDB(expenseSheet); - try { - sumExpensesDAO.updateRelatedSumExpensesWithDeletedExpenseSheetLineSet(expenseSheet - .getExpenseSheetLines()); - expenseSheetDAO.remove(expenseSheet.getId()); - } catch (InstanceNotFoundException e) { - throw new RuntimeException(e); - } + sumExpensesDAO + .updateRelatedSumExpensesWithDeletedExpenseSheetLineSet(expenseSheet + .getExpenseSheetLines()); + expenseSheetDAO.remove(expenseSheet.getId()); } @Override diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/expensesheet/IExpenseSheetModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/expensesheet/IExpenseSheetModel.java index d08f1a25d..11889f91b 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/expensesheet/IExpenseSheetModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/expensesheet/IExpenseSheetModel.java @@ -22,6 +22,7 @@ package org.libreplan.web.expensesheet; import java.util.List; import java.util.SortedSet; +import org.libreplan.business.common.exceptions.InstanceNotFoundException; import org.libreplan.business.expensesheet.entities.ExpenseSheet; import org.libreplan.business.expensesheet.entities.ExpenseSheetLine; import org.libreplan.business.orders.entities.Order; @@ -47,7 +48,8 @@ public interface IExpenseSheetModel extends IIntegrationEntityModel { List getExpenseSheets(); - void removeExpenseSheet(ExpenseSheet expenseSheet); + void removeExpenseSheet(ExpenseSheet expenseSheet) + throws InstanceNotFoundException; ExpenseSheet getExpenseSheet(); diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/ExpensesAreaController.java b/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/ExpensesAreaController.java index b524767e2..bc6d95482 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/ExpensesAreaController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/ExpensesAreaController.java @@ -19,17 +19,26 @@ package org.libreplan.web.users.dashboard; +import static org.libreplan.web.I18nHelper._; + import java.util.List; import javax.annotation.Resource; +import org.libreplan.business.common.exceptions.InstanceNotFoundException; import org.libreplan.business.expensesheet.entities.ExpenseSheet; +import org.libreplan.web.common.IMessagesForUser; +import org.libreplan.web.common.Level; +import org.libreplan.web.common.MessagesForUser; import org.libreplan.web.common.Util; import org.libreplan.web.expensesheet.IExpenseSheetCRUDController; +import org.libreplan.web.expensesheet.IExpenseSheetModel; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.util.GenericForwardComposer; +import org.zkoss.zul.Grid; +import org.zkoss.zul.Messagebox; import org.zkoss.zul.Row; import org.zkoss.zul.RowRenderer; @@ -46,6 +55,12 @@ public class ExpensesAreaController extends GenericForwardComposer { private IExpensesAreaModel expensesAreaModel; + private IExpenseSheetModel expenseSheetModel; + + private IMessagesForUser messagesForUser; + + private Grid expenseSheetsList; + private RowRenderer expenseSheetsRenderer = new RowRenderer() { @Override @@ -66,7 +81,35 @@ public class ExpensesAreaController extends GenericForwardComposer { expenseSheetCRUDController .goToEditPersonalExpenseSheet(expenseSheet); } - }, null); + }, new EventListener() { + + @Override + public void onEvent(Event event) throws Exception { + try { + if (Messagebox + .show(_("Delete expense sheet \"{0}\". Are you sure?", + expenseSheet.getHumanId()), + _("Confirm"), Messagebox.OK + | Messagebox.CANCEL, + Messagebox.QUESTION) == Messagebox.OK) { + expenseSheetModel.removeExpenseSheet(expenseSheet); + messagesForUser.showMessage( + Level.INFO, + _("Expense sheet \"{0}\" deleted", + expenseSheet.getHumanId())); + Util.reloadBindings(expenseSheetsList); + } + } catch (InterruptedException e) { + throw new RuntimeException(e); + } catch (InstanceNotFoundException ie) { + messagesForUser + .showMessage( + Level.ERROR, + _("Expense sheet \"{1}\" could not be deleted, it was already removed", + expenseSheet.getHumanId())); + } + } + }); } }; @@ -74,6 +117,9 @@ public class ExpensesAreaController extends GenericForwardComposer { public void doAfterCompose(Component comp) throws Exception { super.doAfterCompose(comp); comp.setAttribute("controller", this); + + messagesForUser = new MessagesForUser( + comp.getFellow("messagesContainer")); } public void newExpenseSheet() { diff --git a/libreplan-webapp/src/main/webapp/myaccount/_expensesArea.zul b/libreplan-webapp/src/main/webapp/myaccount/_expensesArea.zul index 691d71ed4..3cb4da221 100644 --- a/libreplan-webapp/src/main/webapp/myaccount/_expensesArea.zul +++ b/libreplan-webapp/src/main/webapp/myaccount/_expensesArea.zul @@ -21,7 +21,8 @@ -