ItEr35S17CUObtencionRequisitosEnProxectoPlanificacionItEr34S17 : Change the informative list hours group into orderLineGroup.
This commit is contained in:
parent
6c2f395627
commit
833e510e0c
6 changed files with 229 additions and 21 deletions
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue