ItEr20S08CUProcuraPartesTraballoDadosAltaNoSistemaItEr19S13: WorkReport edition

This commit is contained in:
Diego Pino Garcia 2009-08-06 12:45:28 +02:00 committed by Javier Moran Rua
parent 329a417894
commit e2d074f453
7 changed files with 144 additions and 53 deletions

View file

@ -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")

View file

@ -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();
}

View file

@ -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<WorkReport> 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<WorkReportLine> 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<CriterionType> 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<CriterionType> 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<CriterionType> 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));
}

View file

@ -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<WorkReport> workReportValidator = new ClassValidator<WorkReport>(
@ -42,15 +51,6 @@ public class WorkReportModel implements IWorkReportModel {
private ClassValidator<WorkReportLine> workReportLineValidator = new ClassValidator<WorkReportLine>(
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<WorkReport> getWorkReports() {
List<WorkReport> result = new ArrayList<WorkReport>();
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;
}
}

View file

@ -31,14 +31,14 @@ public class WorkReportTypeModel implements IWorkReportTypeModel {
@Autowired
private ICriterionTypeService criterionTypeService;
@Autowired
private IWorkReportTypeDAO workReportTypeDAO;
private WorkReportType workReportType;
private ClassValidator<WorkReportType> workReportTypeValidator = new ClassValidator<WorkReportType>(
WorkReportType.class);
@Autowired
private IWorkReportTypeDAO workReportTypeDAO;
private boolean editing = false;
@Override

View file

@ -32,18 +32,7 @@
style="margin-top: -30px; margin-left: 2px" />
</hbox>
<listbox id="workReportLines"
model="@{controller.workReportLines}"
itemRenderer="@{controller.renderer}" mold="paging"
pageSize="10">
<listhead sizable="true">
<listheader label="Recurso" />
<listheader label="Código" />
<listheader label="Horas" />
<!-- Extra CriterionType columns are loaded loaded dynamically -->
</listhead>
<!-- List of rows is created or loaded dynamically -->
</listbox>
<listbox id="workReportLines"/>
<hbox>
<button onClick="controller.save();"

View file

@ -15,7 +15,7 @@
<label value="@{workReport.place}" />
<label value="@{workReport.workReportType.name}" />
<hbox>
<button label="Editar" />
<button label="Editar" onClick="controller.goToEditForm(self.parent.parent.value);" />
<button label="Eliminar" />
</hbox>
</row>