ItEr36S11CUCreacionUnidadesPlanificacionItEr35S12: Showing OrderElement's hours required information on a table
This commit is contained in:
parent
52b97dbd2a
commit
be479a5e54
4 changed files with 121 additions and 48 deletions
|
|
@ -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();
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue