diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/IWorkReportCRUDControllerEntryPoints.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/IWorkReportCRUDControllerEntryPoints.java index a85c410c6..ffd775505 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/IWorkReportCRUDControllerEntryPoints.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/IWorkReportCRUDControllerEntryPoints.java @@ -9,6 +9,9 @@ import org.navalplanner.web.common.entrypoints.EntryPoints; public interface IWorkReportCRUDControllerEntryPoints { @EntryPoint("edit") + public abstract void goToEditForm(WorkReport workReport); + + @EntryPoint("create") public abstract void goToCreateForm(WorkReportType workReportType); @EntryPoint("list") diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/IWorkReportModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/IWorkReportModel.java index f81c5ac26..1a1c10b14 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/IWorkReportModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/IWorkReportModel.java @@ -8,6 +8,7 @@ import org.navalplanner.business.orders.entities.OrderElement; import org.navalplanner.business.resources.entities.Resource; import org.navalplanner.business.resources.entities.Worker; import org.navalplanner.business.workreports.entities.WorkReport; +import org.navalplanner.business.workreports.entities.WorkReportLine; import org.navalplanner.business.workreports.entities.WorkReportType; /** @@ -94,4 +95,10 @@ public interface IWorkReportModel { String getDistinguishedCode(OrderElement orderElement) throws InstanceNotFoundException; + /** + * Add new {@link WorkReportLine} to {@link WorkReport} + * + * @return + */ + WorkReportLine addWorkReportLine(); } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/WorkReportCRUDController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/WorkReportCRUDController.java index e69e20564..2f9d3d32b 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/WorkReportCRUDController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/WorkReportCRUDController.java @@ -9,7 +9,6 @@ import org.hibernate.validator.InvalidValue; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.common.exceptions.ValidationException; import org.navalplanner.business.orders.entities.Order; -import org.navalplanner.business.orders.entities.OrderElement; import org.navalplanner.business.resources.entities.Criterion; import org.navalplanner.business.resources.entities.CriterionType; import org.navalplanner.business.resources.entities.Resource; @@ -31,12 +30,14 @@ import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.util.GenericForwardComposer; import org.zkoss.zul.Datebox; import org.zkoss.zul.Intbox; +import org.zkoss.zul.ListModel; import org.zkoss.zul.Listbox; import org.zkoss.zul.Listcell; import org.zkoss.zul.Listhead; import org.zkoss.zul.Listheader; import org.zkoss.zul.Listitem; import org.zkoss.zul.ListitemRenderer; +import org.zkoss.zul.SimpleListModel; import org.zkoss.zul.Textbox; import org.zkoss.zul.api.Window; @@ -68,6 +69,17 @@ public class WorkReportCRUDController extends GenericForwardComposer implements public final static String ID_WORK_REPORT_LINES = "workReportLines"; + private final static String RESOURCE = "Recurso"; + + private final static String CODE = "Código"; + + private final static String NUM_HOURS = "Horas"; + + private final static String MOLD = "paging"; + + private final static int PAGING = 10; + + public List getWorkReports() { return workReportModel.getWorkReports(); } @@ -221,7 +233,7 @@ public class WorkReportCRUDController extends GenericForwardComposer implements public void cancel() { if (workReportModel.isEditing()) { - + goToList(); } else { workReportTypeCRUD.goToList(); } @@ -229,11 +241,104 @@ public class WorkReportCRUDController extends GenericForwardComposer implements public void goToCreateForm(WorkReportType workReportType) { workReportModel.prepareForCreate(workReportType); - appendCriterionTypesToHeader(getCriterionTypes()); + prepareWorkReportList(); getVisibility().showOnly(createWindow); Util.reloadBindings(createWindow); } + public void goToEditForm(WorkReport workReport) { + workReportModel.prepareEditFor(workReport); + prepareWorkReportList(); + getVisibility().showOnly(createWindow); + Util.reloadBindings(createWindow); + } + + /** + * {@link WorkReportLine} list is finally constructed dynamically + * + * It seems there are some problems when a list of data is rendered, + * modified (the data model changes), and it's rendered again. Deleting + * previous settings and re-establishing the settings again each time the + * list is rendered, solve those problems. + * + */ + private void prepareWorkReportList() { + Listbox listbox = (Listbox) createWindow + .getFellow(ID_WORK_REPORT_LINES); + + // The only way to clean the listhead, is to clean all its attributes + // and children + // The paging component cannot be removed manually. It is removed automatically when changing the mold + listbox.setMold(null); + listbox.getChildren().clear(); + + // Set ListModel + Set setWorkReportLines = getWorkReportLines(); + WorkReportLine workReportLines[] = setWorkReportLines + .toArray(new WorkReportLine[setWorkReportLines.size()]); + ListModel listModel = new SimpleListModel(workReportLines); + listbox.setModel(listModel); + + // Set Renderer + // listbox.setItemRenderer((ListitemRenderer) null); + listbox.setItemRenderer(getRenderer()); + + // Set mold and pagesize + listbox.setMold(MOLD); + listbox.setPageSize(PAGING); + + appendListHead(listbox); + } + + /** + * Appends list headers to {@link WorkReportLine} list + * + * @param listBox + */ + private void appendListHead(Listbox listBox) { + + Listhead listHead = listBox.getListhead(); + // Create listhead first time is rendered + if (listHead == null) { + listHead = new Listhead(); + } + // Delete all headers + listHead.getChildren().clear(); + listHead.setSizable(true); + + // Add static headers + Listheader listHeadResource = new Listheader(RESOURCE); + listHead.appendChild(listHeadResource); + Listheader listHeadCode = new Listheader(CODE); + listHead.appendChild(listHeadCode); + Listheader listHeadNumHours = new Listheader(NUM_HOURS); + listHead.appendChild(listHeadNumHours); + + // Add dynamic headers + appendCriterionTypesToListHead(getCriterionTypes(), listHead); + + listHead.setParent(listBox); + } + + /** + * Appends a set of {@link CriterionType} to {@link Listhead} + */ + private void appendCriterionTypesToListHead( + Set criterionTypes, Listhead listHead) { + for (CriterionType criterionType : criterionTypes) { + appendCriterionTypeToListHead(criterionType, listHead); + } + } + + /** + * Appends a {@link CriterionType} to {@link Listhead} + */ + private void appendCriterionTypeToListHead(CriterionType criterionType, + Listhead listHead) { + Listheader listHeader = new Listheader(criterionType.getName()); + listHeader.setParent(listHead); + } + private Set getCriterionTypes() { return getWorkReportType().getCriterionTypes(); } @@ -246,33 +351,13 @@ public class WorkReportCRUDController extends GenericForwardComposer implements return workReportModel.getWorkReport(); } - /** - * Appends a set of {@link CriterionType} to columns header - */ - private void appendCriterionTypesToHeader(Set criterionTypes) { - Listbox grid = (Listbox) createWindow.getFellow(ID_WORK_REPORT_LINES); - for (CriterionType criterionType : criterionTypes) { - appendCriterionTypeToColumns(criterionType, grid.getListhead()); - } - } - - /** - * Appends a new {@link CriterionType} to columns header - */ - private void appendCriterionTypeToColumns(CriterionType criterionType, - Listhead columns) { - Listheader listHeader = new Listheader(criterionType.getName()); - listHeader.setParent(columns); - } - /** * Adds a new {@link WorkReportLine} to the list of rows * * @param rows */ public void addWorkReportLine(Listbox listBox) { - WorkReportLine workReportLine = new WorkReportLine(); - getWorkReportLines().add(workReportLine); + WorkReportLine workReportLine = workReportModel.addWorkReportLine(); listBox.appendChild(createListItem(workReportLine)); } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/WorkReportModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/WorkReportModel.java index 1a55cdb08..56ece4387 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/WorkReportModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/WorkReportModel.java @@ -8,9 +8,9 @@ import org.hibernate.validator.ClassValidator; import org.hibernate.validator.InvalidValue; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.common.exceptions.ValidationException; -import org.navalplanner.business.orders.daos.OrderElementDAO; +import org.navalplanner.business.orders.daos.IOrderElementDAO; import org.navalplanner.business.orders.entities.OrderElement; -import org.navalplanner.business.resources.daos.WorkerDAO; +import org.navalplanner.business.resources.daos.IWorkerDAO; import org.navalplanner.business.resources.entities.Criterion; import org.navalplanner.business.resources.entities.CriterionType; import org.navalplanner.business.resources.entities.Resource; @@ -34,6 +34,15 @@ import org.springframework.transaction.annotation.Transactional; @Scope(BeanDefinition.SCOPE_PROTOTYPE) public class WorkReportModel implements IWorkReportModel { + @Autowired + private IWorkReportDAO workReportDAO; + + @Autowired + private IOrderElementDAO orderElementDAO; + + @Autowired + private IWorkerDAO workerDAO; + private WorkReport workReport; private ClassValidator workReportValidator = new ClassValidator( @@ -42,15 +51,6 @@ public class WorkReportModel implements IWorkReportModel { private ClassValidator workReportLineValidator = new ClassValidator( WorkReportLine.class); - @Autowired - private IWorkReportDAO workReportDAO; - - @Autowired - private OrderElementDAO orderElementDAO; - - @Autowired - private WorkerDAO workerDAO; - private boolean editing = false; @Override @@ -71,7 +71,7 @@ public class WorkReportModel implements IWorkReportModel { public void prepareEditFor(WorkReport workReport) { editing = true; Validate.notNull(workReport); - workReport = getFromDB(workReport); + this.workReport = getFromDB(workReport); } @Transactional(readOnly = true) @@ -178,7 +178,7 @@ public class WorkReportModel implements IWorkReportModel { public List getWorkReports() { List result = new ArrayList(); for (WorkReport workReport : workReportDAO.list(WorkReport.class)) { - workReport.getWorkReportType().getId(); + workReport.getWorkReportType().getName(); result.add(workReport); } return result; @@ -195,4 +195,11 @@ public class WorkReportModel implements IWorkReportModel { orderElementDAO.save(orderElement); return orderElementDAO.getDistinguishedCode(orderElement); } + + @Override + public WorkReportLine addWorkReportLine() { + WorkReportLine workReportLine = new WorkReportLine(); + workReport.getWorkReportLines().add(workReportLine); + return workReportLine; + } } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/WorkReportTypeModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/WorkReportTypeModel.java index 1f5c29efc..f35a525cc 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/WorkReportTypeModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/WorkReportTypeModel.java @@ -31,14 +31,14 @@ public class WorkReportTypeModel implements IWorkReportTypeModel { @Autowired private ICriterionTypeService criterionTypeService; + @Autowired + private IWorkReportTypeDAO workReportTypeDAO; + private WorkReportType workReportType; private ClassValidator workReportTypeValidator = new ClassValidator( WorkReportType.class); - @Autowired - private IWorkReportTypeDAO workReportTypeDAO; - private boolean editing = false; @Override diff --git a/navalplanner-webapp/src/main/webapp/workreports/_editWorkReport.zul b/navalplanner-webapp/src/main/webapp/workreports/_editWorkReport.zul index ab5b39ef6..b27883a0c 100644 --- a/navalplanner-webapp/src/main/webapp/workreports/_editWorkReport.zul +++ b/navalplanner-webapp/src/main/webapp/workreports/_editWorkReport.zul @@ -32,18 +32,7 @@ style="margin-top: -30px; margin-left: 2px" /> - - - - - - - - - +