ItEr35S17CUObtencionRequisitosEnProxectoPlanificacionItEr34S17 : Change the informative list hours group into orderLineGroup.

This commit is contained in:
Susana Montes Pedreira 2009-11-18 14:02:23 +01:00 committed by Javier Moran Rua
parent 6c2f395627
commit 833e510e0c
6 changed files with 229 additions and 21 deletions

View file

@ -149,9 +149,14 @@ public class HoursGroup extends BaseEntity implements Cloneable {
public Set<Criterion> getCriterions() {
Set<Criterion> criterions = new HashSet<Criterion>();
for(CriterionRequirement criterionRequirement: criterionRequirements){
for (CriterionRequirement criterionRequirement : getDirectCriterionRequirement()) {
criterions.add(criterionRequirement.getCriterion());
}
for (IndirectCriterionRequirement requirement : getIndirectCriterionRequirement()) {
if (requirement.isIsValid()) {
criterions.add(requirement.getCriterion());
}
}
return Collections.unmodifiableSet(criterions);
}

View file

@ -24,12 +24,18 @@ import static org.navalplanner.web.I18nHelper._;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.logging.LogFactory;
import org.navalplanner.business.orders.entities.HoursGroup;
import org.navalplanner.business.orders.entities.OrderElement;
import org.navalplanner.business.orders.entities.OrderLine;
import org.navalplanner.business.resources.entities.Criterion;
import org.navalplanner.business.resources.entities.CriterionType;
import org.navalplanner.business.resources.entities.CriterionWithItsType;
import org.navalplanner.business.resources.entities.ResourceEnum;
import org.navalplanner.business.workreports.entities.WorkReportLine;
@ -47,11 +53,15 @@ import org.zkoss.zul.Constraint;
import org.zkoss.zul.Grid;
import org.zkoss.zul.Hbox;
import org.zkoss.zul.Intbox;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.ListitemRenderer;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Panel;
import org.zkoss.zul.Row;
import org.zkoss.zul.Rows;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Vbox;
/**
@ -71,7 +81,9 @@ public class AssignedCriterionRequirementToOrderElementController extends
private IAssignedCriterionRequirementToOrderElementModel assignedCriterionRequirementToOrderElementModel;
private Vbox vbox;
private Vbox vboxCriterionRequirementsAndHoursGroups;
private Listbox hoursGroupsInOrderLineGroup;
List<ResourceEnum> listResourceTypes = new ArrayList<ResourceEnum>();
@ -86,7 +98,7 @@ public class AssignedCriterionRequirementToOrderElementController extends
super.doAfterCompose(comp);
messagesForUser = new MessagesForUser(messagesContainer);
comp.setVariable("assignedCriterionRequirementController", this, true);
vbox = (Vbox) comp;
vboxCriterionRequirementsAndHoursGroups = (Vbox) comp;
// init the resorcesType
listResourceTypes.add(ResourceEnum.MACHINE);
@ -97,6 +109,14 @@ public class AssignedCriterionRequirementToOrderElementController extends
return assignedCriterionRequirementToOrderElementModel.getOrderElement();
}
public IOrderModel getOrderModel() {
return assignedCriterionRequirementToOrderElementModel.getOrderModel();
}
public Set<CriterionType> getCriterionTypes() {
return assignedCriterionRequirementToOrderElementModel.getTypes();
}
public void setOrderElement(OrderElement orderElement) {
assignedCriterionRequirementToOrderElementModel.setOrderElement(orderElement);
}
@ -109,7 +129,7 @@ public class AssignedCriterionRequirementToOrderElementController extends
public void openWindow(OrderElement orderElement) {
assignedCriterionRequirementToOrderElementModel.init(orderElement);
Util.reloadBindings(vbox);
Util.reloadBindings(vboxCriterionRequirementsAndHoursGroups);
}
public boolean close() {
@ -229,10 +249,14 @@ setValidCriterionRequirementWrapper(requirement, true);
Util.reloadBindings(listHoursGroups);
}
private void reload() {
public void reload() {
Util.reloadBindings(listingRequirements);
Util.reloadBindings(orderElementTotalHours);
Util.reloadBindings(listHoursGroups);
if (isReadOnly()) {
Util.reloadBindings(hoursGroupsInOrderLineGroup);
} else {
Util.reloadBindings(listHoursGroups);
}
}
private boolean showInvalidValues() {
@ -359,7 +383,6 @@ setValidCriterionRequirementWrapper(requirement, true);
return assignedCriterionRequirementToOrderElementModel
.getHoursGroupsWrappers();
}
/**
* Adds a new {@link HoursGroup} to the current {@link OrderElement} The
* {@link OrderElement} should be a {@link OrderLine}
@ -514,4 +537,161 @@ setValidCriterionRequirementWrapper(requirement, true);
Util.reloadBindings(orderElementTotalHours);
}
/*Operations to return the agrouped list of hours Group */
/**
* Returns a {@link List} of {@link HoursGroup}. If the current element is
* an {@link OrderLine} this method just returns the {@link HoursGroup} of
* this {@link OrderLine}. Otherwise, this method gets all the
* {@link HoursGroup} of all the children {@link OrderElement}, and
* aggregates them if they have the same {@link Criterion}.
* @return The {@link HoursGroup} list of the current {@link OrderElement}
*/
public List<HoursGroup> getHoursGroups() {
if ((getOrderElement() == null)
|| (assignedCriterionRequirementToOrderElementModel == null)) {
return new ArrayList<HoursGroup>();
}
// Creates a map in order to join HoursGroup with the same
// Criterions.
Map<Map<ResourceEnum, Set<Criterion>>, HoursGroup> map = new HashMap<Map<ResourceEnum, Set<Criterion>>, HoursGroup>();
List<HoursGroup> hoursGroups = getOrderElement().getHoursGroups();
for (HoursGroup hoursGroup : hoursGroups) {
Map<ResourceEnum, Set<Criterion>> key = getKeyFor(hoursGroup);
HoursGroup hoursGroupAggregation = map.get(key);
if (hoursGroupAggregation == null) {
// This is not a real HoursGroup element, it's just an
// aggregation that join HoursGroup with the same Criterions
hoursGroupAggregation = new HoursGroup();
hoursGroupAggregation.setWorkingHours(hoursGroup
.getWorkingHours());
hoursGroupAggregation.setCriterionRequirements(hoursGroup
.getCriterionRequirements());
hoursGroupAggregation.setResourceType(hoursGroup
.getResourceType());
} else {
Integer newHours = hoursGroupAggregation.getWorkingHours()
+ hoursGroup.getWorkingHours();
hoursGroupAggregation.setWorkingHours(newHours);
}
map.put(key, hoursGroupAggregation);
}
return new ArrayList<HoursGroup>(map.values());
}
private Map<ResourceEnum, Set<Criterion>> getKeyFor(HoursGroup hoursGroup) {
Map<ResourceEnum, Set<Criterion>> keys = new HashMap<ResourceEnum, Set<Criterion>>();
ResourceEnum resourceType = hoursGroup.getResourceType();
Set<Criterion> criterions = getKeyCriterionsFor(hoursGroup);
keys.put(resourceType, criterions);
return keys;
}
private Set<Criterion> getKeyCriterionsFor(HoursGroup hoursGroup) {
Set<Criterion> key = new HashSet<Criterion>();
for (Criterion criterion : hoursGroup.getCriterions()) {
if (criterion != null) {
key.add(criterion);
}
}
return key;
}
private transient ListitemRenderer renderer = new HoursGroupListitemRender();
public ListitemRenderer getRenderer() {
return renderer;
}
public class HoursGroupListitemRender implements ListitemRenderer{
@Override
public void render(Listitem item, Object data) throws Exception {
final HoursGroup hoursGroup = (HoursGroup) data;
// Criterion Requirements hours Group
Listcell cellCriterionRequirements = new Listcell();
cellCriterionRequirements.setParent(item);
cellCriterionRequirements.appendChild( appendRequirements(hoursGroup));
// Type hours Group
Listcell cellType = new Listcell();
cellType.setParent(item);
cellType.appendChild(appendType(hoursGroup));
// Working hours
Listcell cellWorkingHours = new Listcell();
cellWorkingHours.setParent(item);
cellWorkingHours.appendChild(appendWorkingHours(hoursGroup));
}
}
private Textbox appendRequirements(final HoursGroup hoursGroup) {
Textbox requirementsTextbox = new Textbox();
requirementsTextbox.setReadonly(true);
requirementsTextbox.setRows(2);
requirementsTextbox.setWidth("550px");
return Util.bind(requirementsTextbox, new Util.Getter<String>() {
@Override
public String get() {
return getLabelRequirements(hoursGroup);
}
}, new Util.Setter<String>() {
@Override
public void set(String value) {
}
});
}
private Textbox appendType(final HoursGroup hoursGroup) {
Textbox type = new Textbox();
type.setHeight("15px");
type.setReadonly(true);
return Util.bind(type, new Util.Getter<String>() {
@Override
public String get() {
return hoursGroup.getResourceType().toString();
}
}, new Util.Setter<String>() {
@Override
public void set(String value) {
}
});
}
private Intbox appendWorkingHours(final HoursGroup hoursGroup) {
Intbox workingHoursBox = new Intbox();
workingHoursBox.setReadonly(true);
workingHoursBox.setHeight("15px");
workingHoursBox.setWidth("150px");
return Util.bind(workingHoursBox, new Util.Getter<Integer>() {
@Override
public Integer get() {
return hoursGroup.getWorkingHours();
}
}, new Util.Setter<Integer>() {
@Override
public void set(Integer value) {
}
});
}
private String getLabelRequirements(HoursGroup hoursGroup) {
String label = "";
for (Criterion criterion : hoursGroup.getCriterions()) {
if (!label.equals("")) {
label = label.concat(", ");
}
label = label.concat(criterion.getName());
}
if (!label.equals("")) {
label = label.concat(".");
}
return label;
}
}

View file

@ -66,6 +66,11 @@ public class AssignedCriterionRequirementToOrderElementModel implements
private List<HoursGroupWrapper> hoursGroupsWrappers = new ArrayList<HoursGroupWrapper>();
@Override
public IOrderModel getOrderModel() {
return orderModel;
}
@Override
public OrderElement getOrderElement() {
return orderElement;
@ -134,7 +139,8 @@ public class AssignedCriterionRequirementToOrderElementModel implements
}
}
private Set<CriterionType> getTypes(){
@Override
public Set<CriterionType> getTypes() {
return getMapCriterions().keySet();
}

View file

@ -6,9 +6,11 @@
package org.navalplanner.web.orders;
import java.util.List;
import java.util.Set;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.orders.entities.OrderElement;
import org.navalplanner.business.resources.entities.CriterionType;
import org.navalplanner.business.resources.entities.CriterionWithItsType;
/**
@ -16,8 +18,13 @@ import org.navalplanner.business.resources.entities.CriterionWithItsType;
* @author Susana Montes Pedreira <smontes@wirelessgalicia.com>
*/
public interface IAssignedCriterionRequirementToOrderElementModel {
IOrderModel getOrderModel();
OrderElement getOrderElement();
Set<CriterionType> getTypes();
void setOrderElement(OrderElement orderElement);
void init(OrderElement orderElement);

View file

@ -232,7 +232,7 @@ public class OrderCRUDController extends GenericForwardComposer {
public void reloadHoursGroupOrder() {
assignedCriterionRequirementController
.openWindow(getOrderElementModel());
Util.reloadBindings(editWindow);
assignedCriterionRequirementController.reload();
}
private void showWindow(Window window) {

View file

@ -109,11 +109,27 @@
<div id= "messagesContainer">
</div>
<!--Manage Hours Groups-->
<panel title="${i18n:_('Hours Group')}" border="normal" width="99%">
<!-- List Hours Groups in OrdeLineGroup -->
<panel title="${i18n:_('Hours group')}"
visible = "@{assignedCriterionRequirementController.readOnly}">
<panelchildren>
<listbox id="hoursGroupsInOrderLineGroup" multiple="true"
model="@{assignedCriterionRequirementController.hoursGroups}"
itemRenderer="@{assignedCriterionRequirementController.renderer}">
<listhead>
<listheader label="${i18n:_('Criterion Requirements')}"/>
<listheader label="${i18n:_('Type')}" align="center"/>
<listheader label="${i18n:_('Hours')}" align="center"/>
</listhead>
</listbox>
</panelchildren>
</panel>
<!--Manage Hours Groups in OrdeLine-->
<panel title="${i18n:_('Hours Group')}" border="normal" width="99%"
visible = "@{assignedCriterionRequirementController.editableHoursGroup}">
<panelchildren>
<hbox align="center"
visible = "@{assignedCriterionRequirementController.editableHoursGroup}">
<hbox align="center">
<separator bar="false" spacing="40px" orient="horizontal"/>
<separator bar="false" spacing="20px" orient="vertical"/>
<button id="buttonAddHoursGroup"
@ -130,8 +146,7 @@
<column label="Hours" width="120px" align="center"/>
<column label="%" width="100px" align="center"/>
<column label="Fixed %" width="50px" align="center"/>
<column label="Operations" align="center"
visible = "@{assignedCriterionRequirementController.editableHoursGroup}"/>
<column label="Operations" align="center"/>
</columns>
<rows>
<row self="@{each='hoursGroupWrapper'}" value="@{hoursGroupWrapper}">
@ -154,23 +169,18 @@
readonly ="@{hoursGroupWrapper.percentageReadOnly}"
onChange = "assignedCriterionRequirementController.recalculateHoursGroup()"/>
<checkbox checked="@{hoursGroupWrapper.fixedPercentage}"
disabled = "@{assignedCriterionRequirementController.readOnly}"
onCheck = "assignedCriterionRequirementController.recalculateHoursGroup()"/>
<hbox
visible = "@{assignedCriterionRequirementController.editableHoursGroup}">
<hbox>
<button id="buttonDeleteHoursGroup"
visible = "@{assignedCriterionRequirementController.editableHoursGroup}"
sclass="icono" image="/common/img/ico_borrar1.png"
hoverImage="/common/img/ico_borrar.png"
tooltiptext="${i18n:_('Delete')}"
onClick="assignedCriterionRequirementController.deleteHoursGroups(self)" />
<button id="buttonAddCriterion"
visible = "@{assignedCriterionRequirementController.editableHoursGroup}"
label="${i18n:_('Add Criterion')}"
onClick="assignedCriterionRequirementController.addCriterionToHoursGroup(self)" />
<button id="buttonAddException"
disabled = "@{hoursGroupWrapper.dontExistValidCriterions}"
visible = "@{assignedCriterionRequirementController.editableHoursGroup}"
label="${i18n:_('Add Exception')}"
onClick="assignedCriterionRequirementController.addExceptionToHoursGroups(self)" />
</hbox>