diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/advance/daos/AdvanceTypeDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/advance/daos/AdvanceTypeDAO.java index a022808d6..6f936cb96 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/advance/daos/AdvanceTypeDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/advance/daos/AdvanceTypeDAO.java @@ -24,6 +24,7 @@ import java.util.Collection; import java.util.List; import org.hibernate.criterion.Restrictions; +import org.navalplanner.business.advance.entities.AdvanceAssignment; import org.navalplanner.business.advance.entities.AdvanceType; import org.navalplanner.business.common.daos.GenericDAOHibernate; import org.springframework.beans.factory.config.BeanDefinition; @@ -61,4 +62,11 @@ public class AdvanceTypeDAO extends GenericDAOHibernate public Collection getAll() { return list(AdvanceType.class); } + + @Override + public boolean isAlreadyInUse(AdvanceType advanceType) { + return !getSession().createCriteria(AdvanceAssignment.class).add( + Restrictions.eq("advanceType", advanceType)).list().isEmpty(); + } + } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/advance/daos/IAdvanceTypeDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/advance/daos/IAdvanceTypeDAO.java index 37a1dfbcf..67497e365 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/advance/daos/IAdvanceTypeDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/advance/daos/IAdvanceTypeDAO.java @@ -40,4 +40,6 @@ public interface IAdvanceTypeDAO extends IGenericDAO{ public Collection getAll(); + public boolean isAlreadyInUse(AdvanceType advanceType); + } \ No newline at end of file diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/advance/AdvanceTypeCRUDController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/advance/AdvanceTypeCRUDController.java index 7a07273ea..ec9ded9fd 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/advance/AdvanceTypeCRUDController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/advance/AdvanceTypeCRUDController.java @@ -35,9 +35,17 @@ import org.navalplanner.web.common.OnlyOneVisible; import org.navalplanner.web.common.Util; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.WrongValueException; +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.Button; +import org.zkoss.zul.Checkbox; import org.zkoss.zul.Constraint; -import org.zkoss.zul.api.Window; +import org.zkoss.zul.Hbox; +import org.zkoss.zul.Label; +import org.zkoss.zul.Messagebox; +import org.zkoss.zul.Row; +import org.zkoss.zul.RowRenderer; /** * Controller for CRUD actions over a {@link AdvanceType} @@ -58,10 +66,6 @@ public class AdvanceTypeCRUDController extends GenericForwardComposer { private Component listWindow; - private Window confirmRemove; - - private boolean confirmingRemove = false; - private IAdvanceTypeModel advanceTypeModel; private OnlyOneVisible visibility; @@ -168,43 +172,23 @@ public class AdvanceTypeCRUDController extends GenericForwardComposer { } public void confirmRemove(AdvanceType advanceType) { - advanceTypeModel.prepareForRemove(advanceType); - showConfirmingWindow(); - } - - public void cancelRemove() { - confirmingRemove = false; - confirmRemove.setVisible(false); - Util.reloadBindings(confirmRemove); - } - - public boolean isConfirmingRemove() { - return confirmingRemove; - } - - private void hideConfirmingWindow() { - confirmingRemove = false; - Util.reloadBindings(confirmRemove); - } - - private void showConfirmingWindow() { - confirmingRemove = true; try { - Util.reloadBindings(confirmRemove); - confirmRemove.doModal(); - } catch (Exception e) { + int status = Messagebox.show(_( + "Confirm deleting {0}. Are you sure?", advanceType + .getUnitName()), "Remove", Messagebox.OK + | Messagebox.CANCEL, Messagebox.QUESTION); + if (Messagebox.OK == status) { + advanceTypeModel.prepareForRemove(advanceType); + advanceTypeModel.remove(advanceType); + } + Util.reloadBindings(listWindow); + messagesForUser.showMessage(Level.INFO, _("Removed {0}", + advanceType.getUnitName())); + } catch (InterruptedException e) { throw new RuntimeException(e); } } - public void remove(AdvanceType advanceType) { - advanceTypeModel.remove(advanceType); - hideConfirmingWindow(); - Util.reloadBindings(listWindow); - messagesForUser.showMessage( - Level.INFO, _("Removed {0}", advanceType.getUnitName())); - } - public void goToCreateForm() { advanceTypeModel.prepareForCreate(); getVisibility().showOnly(createWindow); @@ -264,4 +248,69 @@ public class AdvanceTypeCRUDController extends GenericForwardComposer { return advanceTypeModel.isImmutable(); } + public boolean isImmutableOrAlreadyInUse(AdvanceType advanceType) { + return advanceTypeModel.isImmutableOrAlreadyInUse(advanceType); + } + + public RowRenderer getAdvanceTypeRenderer() { + return new RowRenderer() { + + @Override + public void render(Row row, Object data) throws Exception { + AdvanceType advanceType = (AdvanceType) data; + + appendLabelName(row, advanceType); + appendCheckboxEnabled(row, advanceType); + appendCheckboxPredefined(row, advanceType); + appendOperations(row, advanceType); + } + + private void appendLabelName(Row row, AdvanceType advanceType) { + row.appendChild(new Label(advanceType.getUnitName())); + } + + private void appendCheckboxEnabled(Row row, AdvanceType advanceType) { + Checkbox checkbox = new Checkbox(); + checkbox.setChecked(advanceType.getActive()); + checkbox.setDisabled(true); + row.appendChild(checkbox); + } + + private void appendCheckboxPredefined(Row row, + AdvanceType advanceType) { + Checkbox checkbox = new Checkbox(); + checkbox.setChecked(advanceType.isImmutable()); + checkbox.setDisabled(true); + row.appendChild(checkbox); + } + + private void appendOperations(Row row, final AdvanceType advanceType) { + Hbox hbox = new Hbox(); + + hbox.appendChild(Util.createEditButton(new EventListener() { + + @Override + public void onEvent(Event event) throws Exception { + goToEditForm(advanceType); + } + })); + + Button removeButton = Util + .createRemoveButton(new EventListener() { + + @Override + public void onEvent(Event event) throws Exception { + confirmRemove(advanceType); + } + }); + removeButton.setDisabled(advanceTypeModel + .isImmutableOrAlreadyInUse(advanceType)); + hbox.appendChild(removeButton); + + row.appendChild(hbox); + } + + }; + } + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/advance/AdvanceTypeModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/advance/AdvanceTypeModel.java index 0bbbca1f2..256d78066 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/advance/AdvanceTypeModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/advance/AdvanceTypeModel.java @@ -184,4 +184,17 @@ public class AdvanceTypeModel implements IAdvanceTypeModel { return advanceType.isImmutable(); } + @Override + @Transactional(readOnly = true) + public boolean isImmutableOrAlreadyInUse(AdvanceType advanceType) { + if (advanceType == null) { + return false; + } + if (advanceType.isImmutable()) { + return true; + } + + return advanceTypeDAO.isAlreadyInUse(advanceType); + } + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/advance/IAdvanceTypeModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/advance/IAdvanceTypeModel.java index 28fe83afb..9505e606f 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/advance/IAdvanceTypeModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/advance/IAdvanceTypeModel.java @@ -125,4 +125,6 @@ public interface IAdvanceTypeModel { Boolean getPercentage(); boolean isImmutable(); + + boolean isImmutableOrAlreadyInUse(AdvanceType advanceType); } diff --git a/navalplanner-webapp/src/main/webapp/advance/_listAdvanceTypes.zul b/navalplanner-webapp/src/main/webapp/advance/_listAdvanceTypes.zul index 93a3eeb4e..c263bf1d2 100644 --- a/navalplanner-webapp/src/main/webapp/advance/_listAdvanceTypes.zul +++ b/navalplanner-webapp/src/main/webapp/advance/_listAdvanceTypes.zul @@ -20,32 +20,14 @@ + pageSize="10" fixedLayout="true" + rowRenderer="@{controller.advanceTypeRenderer}" > - - - - -