ItEr36S11CUCreacionUnidadesPlanificacionItEr35S12: Showing OrderElement's hours required information on a table

This commit is contained in:
Óscar González Fernández 2009-11-23 10:33:11 +01:00
parent 52b97dbd2a
commit be479a5e54
4 changed files with 121 additions and 48 deletions

View file

@ -20,8 +20,10 @@
package org.navalplanner.web.planner.allocation;
import java.util.List;
import java.util.Set;
import org.navalplanner.business.orders.entities.AggregatedHoursGroup;
import org.navalplanner.business.planner.entities.GenericResourceAllocation;
import org.navalplanner.business.planner.entities.ResourceAllocation;
import org.navalplanner.business.planner.entities.SpecificResourceAllocation;
@ -85,4 +87,8 @@ public interface IResourceAllocationModel {
void accept(AllocationResult modifiedAllocationResult);
List<AggregatedHoursGroup> getHoursAggregatedByCriterions();
Integer getOrderHours();
}

View file

@ -25,20 +25,17 @@ import static org.navalplanner.web.I18nHelper._;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.Validate;
import org.joda.time.LocalDate;
import org.navalplanner.business.orders.entities.AggregatedHoursGroup;
import org.navalplanner.business.planner.entities.AggregateOfResourceAllocations;
import org.navalplanner.business.planner.entities.CalculatedValue;
import org.navalplanner.business.planner.entities.ResourceAllocation;
import org.navalplanner.business.planner.entities.ResourcesPerDay;
import org.navalplanner.business.planner.entities.SpecificResourceAllocation;
import org.navalplanner.business.planner.entities.Task;
import org.navalplanner.business.resources.entities.Criterion;
import org.navalplanner.business.resources.entities.Resource;
import org.navalplanner.business.resources.entities.Worker;
import org.navalplanner.web.common.IMessagesForUser;
@ -53,6 +50,8 @@ import org.navalplanner.web.planner.allocation.AdvancedAllocationController.Rest
import org.navalplanner.web.planner.order.PlanningState;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
import org.zkoss.ganttz.timetracker.ICellForDetailItemRenderer;
import org.zkoss.ganttz.timetracker.OnColumnsRowRenderer;
import org.zkoss.ganttz.util.OnZKDesktopRegistry;
import org.zkoss.ganttz.util.script.IScriptsRegister;
import org.zkoss.zk.ui.Component;
@ -63,14 +62,17 @@ import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.Button;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.Decimalbox;
import org.zkoss.zul.Grid;
import org.zkoss.zul.Intbox;
import org.zkoss.zul.Label;
import org.zkoss.zul.ListModelList;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.ListitemRenderer;
import org.zkoss.zul.Radio;
import org.zkoss.zul.Radiogroup;
import org.zkoss.zul.RowRenderer;
import org.zkoss.zul.SimpleConstraint;
import org.zkoss.zul.Tab;
import org.zkoss.zul.api.Window;
@ -88,6 +90,8 @@ public class ResourceAllocationController extends GenericForwardComposer {
private IResourceAllocationModel resourceAllocationModel;
private Grid orderElementHoursGrid;
private ResourceAllocationRenderer resourceAllocationRenderer = new ResourceAllocationRenderer();
private Component messagesContainer;
@ -156,9 +160,51 @@ public class ResourceAllocationController extends GenericForwardComposer {
.from(formBinder.getCalculatedValue());
calculationTypeRadio.doTheSelectionOn(calculationTypeSelector);
tbResourceAllocation.setSelected(true);
orderElementHoursGrid.setModel(new ListModelList(
resourceAllocationModel.getHoursAggregatedByCriterions()));
orderElementHoursGrid.setRowRenderer(createOrderElementHoursRenderer());
showWindow();
}
public enum HoursRendererColumn {
CRITERIONS {
@Override
public Component cell(HoursRendererColumn column,
AggregatedHoursGroup data) {
return new Label(data.getCriterionsJoinedByComma());
}
},
HOURS {
@Override
public Component cell(HoursRendererColumn column,
AggregatedHoursGroup data) {
Intbox result = new Intbox(data.getHours());
result.setDisabled(true);
return result;
}
};
public abstract Component cell(HoursRendererColumn column,
AggregatedHoursGroup data);
}
private static final ICellForDetailItemRenderer<HoursRendererColumn, AggregatedHoursGroup> hoursCellRenderer = new ICellForDetailItemRenderer<HoursRendererColumn, AggregatedHoursGroup>() {
@Override
public Component cellFor(
HoursRendererColumn column,
AggregatedHoursGroup data) {
return column.cell(column, data);
}
};
private RowRenderer createOrderElementHoursRenderer() {
return OnColumnsRowRenderer
.create(
hoursCellRenderer, Arrays.asList(HoursRendererColumn.values()));
}
private void showWindow() {
Util.reloadBindings(window);
try {
@ -321,25 +367,8 @@ public class ResourceAllocationController extends GenericForwardComposer {
.setCalculatedValue(calculationTypeRadio.getCalculatedValue());
}
/**
* Returns list of {@link Criterion} separated by comma
* @return
*/
public String getTaskCriterions() {
Set<String> criterionNames = new HashSet<String>();
Set<Criterion> criterions = resourceAllocationModel.getCriterions();
for (Criterion criterion : criterions) {
criterionNames.add(criterion.getName());
}
return StringUtils.join(criterionNames, ",");
}
public String getOrderHours() {
Task task = resourceAllocationModel.getTask();
return (task != null && task.getHoursSpecifiedAtOrder() != null) ? task
.getHoursSpecifiedAtOrder().toString() : "";
public Integer getOrderHours() {
return resourceAllocationModel.getOrderHours();
}
public List<AllocationDTO> getResourceAllocations() {

View file

@ -28,8 +28,11 @@ import java.util.Set;
import org.hibernate.Hibernate;
import org.joda.time.LocalDate;
import org.navalplanner.business.orders.daos.IHoursGroupDAO;
import org.navalplanner.business.orders.entities.AggregatedHoursGroup;
import org.navalplanner.business.orders.entities.HoursGroup;
import org.navalplanner.business.orders.entities.TaskSource;
import org.navalplanner.business.planner.daos.ITaskElementDAO;
import org.navalplanner.business.planner.daos.ITaskSourceDAO;
import org.navalplanner.business.planner.entities.DayAssignment;
import org.navalplanner.business.planner.entities.GenericResourceAllocation;
import org.navalplanner.business.planner.entities.ResourceAllocation;
@ -65,6 +68,9 @@ public class ResourceAllocationModel implements IResourceAllocationModel {
@Autowired
private IHoursGroupDAO hoursGroupDAO;
@Autowired
private ITaskSourceDAO taskSourceDAO;
private Task task;
private org.zkoss.ganttz.data.Task ganttTask;
@ -148,6 +154,7 @@ public class ResourceAllocationModel implements IResourceAllocationModel {
this.planningState = planningState;
planningState.reassociateResourcesWithSession(resourceDAO);
taskElementDAO.reattach(this.task);
reattachTaskSource();
hoursGroupDAO.reattach(this.task.getHoursGroup());
loadCriterionsOfGenericAllocations();
reattachHoursGroup(this.task.getHoursGroup());
@ -172,6 +179,7 @@ public class ResourceAllocationModel implements IResourceAllocationModel {
}
private void reattachHoursGroup(HoursGroup hoursGroup) {
hoursGroupDAO.reattachUnmodifiedEntity(hoursGroup);
hoursGroup.getPercentage();
}
@ -181,6 +189,18 @@ public class ResourceAllocationModel implements IResourceAllocationModel {
}
}
private void reattachTaskSource() {
TaskSource taskSource = task.getTaskSource();
taskSourceDAO.reattach(taskSource);
Set<HoursGroup> hoursGroups = taskSource.getHoursGroups();
for (HoursGroup hoursGroup : hoursGroups) {
reattachHoursGroup(hoursGroup);
}
for (AggregatedHoursGroup each : taskSource.getAggregatedByCriterions()) {
Hibernate.initialize(each);
}
}
private void reattachCriterion(Criterion criterion) {
criterion.getName();
reattachCriterionType(criterion.getType());
@ -227,4 +247,17 @@ public class ResourceAllocationModel implements IResourceAllocationModel {
return dtos;
}
@Override
public List<AggregatedHoursGroup> getHoursAggregatedByCriterions() {
return task.getAggregatedByCriterions();
}
@Override
public Integer getOrderHours() {
if (task == null) {
return 0;
}
return AggregatedHoursGroup.sum(task.getAggregatedByCriterions());
}
}

View file

@ -92,12 +92,42 @@
</tabs>
<tabpanels>
<tabpanel>
<grid id="orderElementHoursGrid">
<columns>
<column width="200px" label="${i18n:_('Criteria')}"/>
<column label="${i18n:_('Hours')}" />
</columns>
</grid>
<grid>
<columns>
<column width="200px" />
<column />
</columns>
<rows>
<row>
<label value="${i18n:_('Total Estimated hours')}:" />
<intbox value="@{allocationController.orderHours}" disabled="${true}" />
</row>
<row>
<label value="${i18n:_('Start')}" />
<datebox id="taskStartDateBox" />
</row>
<row>
<label value="${i18n:_('Elapsed Days')}" />
<intbox id="taskElapsedDays" width="300px" />
</row>
</rows>
</grid>
<grid>
<columns>
<column width="200px" />
<column />
</columns>
<rows>
<row>
<label value="${i18n:_('Assigned hours')}:" />
<intbox id="assignedHoursComponent" width="300px" />
</row>
<!-- Calculation type -->
<row>
<label value="${i18n:_('Calculation type')}:" />
@ -114,31 +144,6 @@
</grid>
</radiogroup>
</row>
<!-- Duration -->
<row>
<label value="${i18n:_('Duration')}:" />
<vbox>
<label value="${i18n:_('Start')}" />
<datebox id="taskStartDateBox" />
<label value="${i18n:_('Elapsed Days')}" />
<intbox id="taskElapsedDays" width="300px" />
</vbox>
</row>
<!-- Required criteria -->
<row>
<label value="${i18n:_('Required criteria')}:" />
<label value="@{allocationController.taskCriterions}" />
</row>
<!-- Total order hours -->
<row>
<label value="${i18n:_('Total order hours')}:" />
<label value="@{allocationController.orderHours}" />
</row>
<!-- Assigned hours -->
<row>
<label value="${i18n:_('Assigned hours')}:" />
<intbox id="assignedHoursComponent" width="300px" />
</row>
</rows>
</grid>