ItEr35S17CUObtencionRequisitosEnProxectoPlanificacionItEr34S17 : When it changes the type of an hours group, the indirect inherited criterion requirements have to be updated to be
This commit is contained in:
parent
687bd43327
commit
da8480fe3e
12 changed files with 124 additions and 27 deletions
|
|
@ -44,7 +44,7 @@ public class HoursGroup extends BaseEntity implements Cloneable {
|
|||
|
||||
private String name;
|
||||
|
||||
private ResourceEnum resourceType;
|
||||
private ResourceEnum resourceType = ResourceEnum.WORKER;
|
||||
|
||||
@NotNull
|
||||
private Integer workingHours = 0;
|
||||
|
|
@ -247,8 +247,9 @@ public class HoursGroup extends BaseEntity implements Cloneable {
|
|||
CriterionRequirement newRequirement) {
|
||||
Criterion criterion = newRequirement.getCriterion();
|
||||
for(CriterionRequirement requirement : getCriterionRequirements()){
|
||||
if (requirement.getCriterion().equals(criterion))
|
||||
if (requirement.getCriterion().equals(criterion)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,6 +20,8 @@
|
|||
|
||||
package org.navalplanner.business.orders.entities;
|
||||
|
||||
import static org.navalplanner.business.i18n.I18nHelper._;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
|
|
@ -45,6 +47,7 @@ public class OrderLine extends OrderElement {
|
|||
OrderLine result = create();
|
||||
HoursGroup hoursGroup = HoursGroup.create(result);
|
||||
result.addHoursGroup(hoursGroup);
|
||||
hoursGroup.setName(_("New hours group 0"));
|
||||
hoursGroup.setFixedPercentage(false);
|
||||
hoursGroup.setPercentage(new BigDecimal(1));
|
||||
hoursGroup.setWorkingHours(hours);
|
||||
|
|
|
|||
|
|
@ -59,6 +59,7 @@ import org.navalplanner.business.requirements.entities.CriterionRequirement;
|
|||
import org.navalplanner.business.requirements.entities.DirectCriterionRequirement;
|
||||
import org.navalplanner.business.resources.entities.Criterion;
|
||||
import org.navalplanner.business.resources.entities.CriterionType;
|
||||
import org.navalplanner.business.resources.entities.ResourceEnum;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
|
@ -190,6 +191,7 @@ public class OrderElementTest {
|
|||
fail("It not should throw an exception");
|
||||
}
|
||||
CriterionType type = CriterionType.create("", "");
|
||||
type.setResource(ResourceEnum.WORKER);
|
||||
Criterion criterion = Criterion.create(type);
|
||||
CriterionRequirement requirement = DirectCriterionRequirement
|
||||
.create(criterion);
|
||||
|
|
|
|||
|
|
@ -117,6 +117,30 @@ getCriterionRequirementWrappers();
|
|||
return assignedCriterionRequirementToOrderElementModel.getCriterionWithItsTypes();
|
||||
}
|
||||
|
||||
public List<CriterionWithItsType> getCriterionWithItsTypesWorker() {
|
||||
List<CriterionWithItsType> result = new ArrayList<CriterionWithItsType>();
|
||||
for (CriterionWithItsType criterionAndType : assignedCriterionRequirementToOrderElementModel
|
||||
.getCriterionWithItsTypes()) {
|
||||
if (!criterionAndType.getCriterion().getType().getResource()
|
||||
.equals(ResourceEnum.MACHINE)) {
|
||||
result.add(criterionAndType);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public List<CriterionWithItsType> getCriterionWithItsTypesMachine() {
|
||||
List<CriterionWithItsType> result = new ArrayList<CriterionWithItsType>();
|
||||
for (CriterionWithItsType criterionAndType : assignedCriterionRequirementToOrderElementModel
|
||||
.getCriterionWithItsTypes()) {
|
||||
if (!criterionAndType.getCriterion().getType().getResource()
|
||||
.equals(ResourceEnum.WORKER)) {
|
||||
result.add(criterionAndType);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public List<ResourceEnum> getResourceTypes() {
|
||||
return listResourceTypes;
|
||||
}
|
||||
|
|
@ -166,16 +190,20 @@ setValidCriterionRequirementWrapper(requirement, true);
|
|||
}
|
||||
}
|
||||
|
||||
public void selectResorceType(Combobox combobox)
|
||||
public void selectResourceType(Combobox combobox)
|
||||
throws InterruptedException {
|
||||
HoursGroupWrapper hoursGroupWrapper = (HoursGroupWrapper) ((Row) combobox
|
||||
.getParent()).getValue();
|
||||
|
||||
int result = Messagebox
|
||||
int result = 2;
|
||||
try {
|
||||
result = Messagebox
|
||||
.show(
|
||||
_("You are sure of change the resource type. You will lose the criterions with different resource type."),
|
||||
"Question", Messagebox.OK | Messagebox.CANCEL,
|
||||
"Question", Messagebox.OK | Messagebox.CANCEL,
|
||||
Messagebox.QUESTION);
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
if (result == 1) {
|
||||
ResourceEnum resource = (ResourceEnum) combobox.getSelectedItem()
|
||||
|
|
|
|||
|
|
@ -113,9 +113,8 @@ public class AssignedCriterionRequirementToOrderElementModel implements
|
|||
criterionRequirementWrappers = new ArrayList<CriterionRequirementWrapper>();
|
||||
for(CriterionRequirement requirement :
|
||||
orderElement.getCriterionRequirements()){
|
||||
CriterionRequirementWrapper Wrapper =
|
||||
new CriterionRequirementWrapper(
|
||||
requirement, false);
|
||||
CriterionRequirementWrapper Wrapper = new CriterionRequirementWrapper(
|
||||
requirement, null, false);
|
||||
criterionRequirementWrappers.add(Wrapper);
|
||||
}
|
||||
}
|
||||
|
|
@ -159,16 +158,17 @@ public class AssignedCriterionRequirementToOrderElementModel implements
|
|||
@Transactional(readOnly = true)
|
||||
public void assignCriterionRequirementWrapper() {
|
||||
if((orderModel != null) && (orderElement != null)){
|
||||
CriterionRequirementWrapper newRequirementWrapper = createCriterionRequirementWreapper();
|
||||
CriterionRequirementWrapper newRequirementWrapper = createCriterionRequirementWreapper(null);
|
||||
criterionRequirementWrappers.add(newRequirementWrapper);
|
||||
}
|
||||
}
|
||||
|
||||
private CriterionRequirementWrapper createCriterionRequirementWreapper() {
|
||||
private CriterionRequirementWrapper createCriterionRequirementWreapper(
|
||||
HoursGroupWrapper hoursGroupWrapper) {
|
||||
CriterionRequirement newRequirement = DirectCriterionRequirement
|
||||
.create();
|
||||
CriterionRequirementWrapper newRequirementWrapper = new CriterionRequirementWrapper(
|
||||
newRequirement, true);
|
||||
newRequirement, hoursGroupWrapper, true);
|
||||
return newRequirementWrapper;
|
||||
}
|
||||
|
||||
|
|
@ -350,7 +350,7 @@ public class AssignedCriterionRequirementToOrderElementModel implements
|
|||
public void addCriterionToHoursGroupWrapper(
|
||||
HoursGroupWrapper hoursGroupWrapper) {
|
||||
if ((orderModel != null) && (orderElement != null)) {
|
||||
CriterionRequirementWrapper requirement = createCriterionRequirementWreapper();
|
||||
CriterionRequirementWrapper requirement = createCriterionRequirementWreapper(hoursGroupWrapper);
|
||||
hoursGroupWrapper.assignCriterionRequirementWrapper(requirement);
|
||||
}
|
||||
}
|
||||
|
|
@ -371,9 +371,16 @@ public class AssignedCriterionRequirementToOrderElementModel implements
|
|||
private void selectCriterionToDirectRequirementWrapper(
|
||||
HoursGroupWrapper hoursGroupWrapper,
|
||||
CriterionRequirementWrapper direct,
|
||||
CriterionWithItsType criterionAndType) {
|
||||
direct.setCriterionWithItsType(criterionAndType);
|
||||
hoursGroupWrapper.selectCriterionToDirectRequirementWrapper(direct);
|
||||
CriterionWithItsType newCriterionAndType) {
|
||||
|
||||
CriterionWithItsType oldCriterionAndType = direct
|
||||
.getCriterionWithItsType();
|
||||
if ((oldCriterionAndType == null)
|
||||
|| (!oldCriterionAndType.equals(newCriterionAndType))) {
|
||||
hoursGroupWrapper.removeDirectCriterionRequirement(direct);
|
||||
direct.setCriterionWithItsType(newCriterionAndType);
|
||||
hoursGroupWrapper.addDirectCriterionToHoursGroup(direct);
|
||||
}
|
||||
}
|
||||
|
||||
public CriterionRequirementWrapper addExceptionToHoursGroupWrapper(
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ import org.navalplanner.business.requirements.entities.IndirectCriterionRequirem
|
|||
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;
|
||||
|
||||
/**
|
||||
* DTO represents the handled data in the form of assigning criterion requirement.
|
||||
|
|
@ -39,15 +40,20 @@ public class CriterionRequirementWrapper implements INewObject {
|
|||
|
||||
private CriterionWithItsType criterionWithItsType;
|
||||
|
||||
private HoursGroupWrapper hoursGroupWrapper;
|
||||
|
||||
public CriterionRequirementWrapper(String type) {
|
||||
this.newObject = true;
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public CriterionRequirementWrapper(CriterionRequirement criterionRequirement,
|
||||
public CriterionRequirementWrapper(
|
||||
CriterionRequirement criterionRequirement,
|
||||
HoursGroupWrapper hoursGroupWrapper,
|
||||
boolean isNewObject) {
|
||||
this.criterionAndType = "";
|
||||
this.criterionRequirement = criterionRequirement;
|
||||
this.hoursGroupWrapper = hoursGroupWrapper;
|
||||
this.initType(criterionRequirement);
|
||||
this.initValid(criterionRequirement);
|
||||
this.setNewObject(isNewObject);
|
||||
|
|
@ -133,6 +139,23 @@ public class CriterionRequirementWrapper implements INewObject {
|
|||
return (type.equals(DIRECT)) ? true : false;
|
||||
}
|
||||
|
||||
public ResourceEnum getResourceTypeHoursGroup() {
|
||||
if (hoursGroupWrapper != null) {
|
||||
return hoursGroupWrapper.getResourceType();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean isNewDirectAndItsHoursGroupIsWorker() {
|
||||
return ((isNewDirect()) && (getResourceTypeHoursGroup() != null) && (getResourceTypeHoursGroup()
|
||||
.equals(ResourceEnum.WORKER)));
|
||||
}
|
||||
|
||||
public boolean isNewDirectAndItsHoursGroupIsMachine() {
|
||||
return ((isNewDirect()) && (getResourceTypeHoursGroup() != null) && (getResourceTypeHoursGroup()
|
||||
.equals(ResourceEnum.MACHINE)));
|
||||
}
|
||||
|
||||
public boolean isIndirectValid(){
|
||||
return (!isDirect()) && (isValid());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -65,14 +65,14 @@ public class HoursGroupWrapper implements INewObject {
|
|||
for (CriterionRequirement requirement : hoursGroup
|
||||
.getDirectCriterionRequirement()) {
|
||||
CriterionRequirementWrapper wrapper = new CriterionRequirementWrapper(
|
||||
requirement, false);
|
||||
requirement, this, false);
|
||||
directRequirementWrappers.add(wrapper);
|
||||
}
|
||||
|
||||
exceptionRequirementWrappers = new ArrayList<CriterionRequirementWrapper>();
|
||||
for (CriterionRequirement requirement : getInvalidIndirectCriterionRequirement()) {
|
||||
CriterionRequirementWrapper wrapper = new CriterionRequirementWrapper(
|
||||
requirement, false);
|
||||
requirement, this, false);
|
||||
exceptionRequirementWrappers.add(wrapper);
|
||||
}
|
||||
}
|
||||
|
|
@ -193,7 +193,7 @@ public class HoursGroupWrapper implements INewObject {
|
|||
.getCriterionRequirement());
|
||||
}
|
||||
|
||||
public void selectCriterionToDirectRequirementWrapper(
|
||||
public void addDirectCriterionToHoursGroup(
|
||||
CriterionRequirementWrapper requirementWrapper) {
|
||||
hoursGroup.addCriterionRequirement(requirementWrapper
|
||||
.getCriterionRequirement());
|
||||
|
|
@ -216,12 +216,17 @@ public class HoursGroupWrapper implements INewObject {
|
|||
|
||||
public void removeDirectCriterionRequirementWrapper(
|
||||
CriterionRequirementWrapper directWrapper) {
|
||||
removeDirectCriterionRequirement(directWrapper);
|
||||
getDirectRequirementWrappers().remove(directWrapper);
|
||||
}
|
||||
|
||||
public void removeDirectCriterionRequirement(
|
||||
CriterionRequirementWrapper directWrapper) {
|
||||
if (directWrapper.getCriterionWithItsType() != null) {
|
||||
CriterionRequirement direct = directWrapper
|
||||
.getCriterionRequirement();
|
||||
hoursGroup.removeCriterionRequirement(direct);
|
||||
}
|
||||
getDirectRequirementWrappers().remove(directWrapper);
|
||||
}
|
||||
|
||||
public void removeExceptionCriterionRequirementWrapper(
|
||||
|
|
@ -246,7 +251,8 @@ public class HoursGroupWrapper implements INewObject {
|
|||
for (CriterionRequirement requirement : getInvalidIndirectCriterionRequirement()) {
|
||||
CriterionRequirementWrapper exception = findRequirementWrapperByRequirement(requirement);
|
||||
if (exception == null) {
|
||||
exception = new CriterionRequirementWrapper(requirement, false);
|
||||
exception = new CriterionRequirementWrapper(requirement, this,
|
||||
false);
|
||||
exceptionRequirementWrappers.add(exception);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -229,6 +229,12 @@ public class OrderCRUDController extends GenericForwardComposer {
|
|||
showWindow(listWindow);
|
||||
}
|
||||
|
||||
public void reloadHoursGroupOrder() {
|
||||
assignedCriterionRequirementController
|
||||
.openWindow(getOrderElementModel());
|
||||
Util.reloadBindings(editWindow);
|
||||
}
|
||||
|
||||
private void showWindow(Window window) {
|
||||
getVisibility().showOnly(window);
|
||||
Util.reloadBindings(window);
|
||||
|
|
|
|||
|
|
@ -33,7 +33,8 @@
|
|||
<tab label="${i18n:_('Assigned hours')}" />
|
||||
<tab id="tabAdvances" label="${i18n:_('Advances')}" />
|
||||
<tab label="${i18n:_('Label')}" />
|
||||
<tab id="tabRequirements" label="${i18n:_('Criterion Requirement')}"/>
|
||||
<tab id="tabRequirements" label="${i18n:_('Criterion Requirement')}"
|
||||
onClick = "controller.reloadHoursGroupOrder();"/>
|
||||
</tabs>
|
||||
<tabpanels>
|
||||
<tabpanel>
|
||||
|
|
|
|||
|
|
@ -31,11 +31,30 @@
|
|||
<row self="@{each='criterionRequirementWrapper'}" value="@{criterionRequirementWrapper}">
|
||||
<hbox>
|
||||
<bandbox width="500px"
|
||||
visible ="@{criterionRequirementWrapper.newDirect}"
|
||||
visible ="@{criterionRequirementWrapper.newDirectAndItsHoursGroupIsWorker}"
|
||||
value = "@{criterionRequirementWrapper.criterionAndType}">
|
||||
<bandpopup>
|
||||
<listbox width="500px" height="150px" fixedLayout="true"
|
||||
model="@{assignedCriterionRequirementController.criterionWithItsTypes}"
|
||||
model="@{assignedCriterionRequirementController.criterionWithItsTypesWorker}"
|
||||
onSelect="assignedCriterionRequirementController.selectCriterionToHoursGroup(self.selectedItem,
|
||||
self.parent.parent,self.parent.parent.parent.parent.value);">
|
||||
<listhead>
|
||||
<listheader label="Type" />
|
||||
<listheader label="Criterion" />
|
||||
</listhead>
|
||||
<listitem self="@{each='criterionWithItsType'}" value="@{criterionWithItsType}">
|
||||
<listcell label="@{criterionWithItsType.type.name}" />
|
||||
<listcell label="@{criterionWithItsType.nameHierarchy}" />
|
||||
</listitem>
|
||||
</listbox>
|
||||
</bandpopup>
|
||||
</bandbox>
|
||||
<bandbox width="500px"
|
||||
visible ="@{criterionRequirementWrapper.newDirectAndItsHoursGroupIsMachine}"
|
||||
value = "@{criterionRequirementWrapper.criterionAndType}">
|
||||
<bandpopup>
|
||||
<listbox width="500px" height="150px" fixedLayout="true"
|
||||
model="@{assignedCriterionRequirementController.criterionWithItsTypesMachine}"
|
||||
onSelect="assignedCriterionRequirementController.selectCriterionToHoursGroup(self.selectedItem,
|
||||
self.parent.parent,self.parent.parent.parent.parent.value);">
|
||||
<listhead>
|
||||
|
|
|
|||
|
|
@ -81,7 +81,6 @@
|
|||
label = "${i18n:_('Invalidate')}"
|
||||
onClick = "assignedCriterionRequirementController.invalidate(self.parent.parent.value);">
|
||||
</button>
|
||||
|
||||
</hbox>
|
||||
</row>
|
||||
</rows>
|
||||
|
|
@ -141,7 +140,7 @@
|
|||
readonly = "@{assignedCriterionRequirementController.readOnly}"/>
|
||||
<combobox id="comboboxTypeHoursGroup" width="80px"
|
||||
value = "@{hoursGroupWrapper.resourceType}"
|
||||
onSelect = "assignedCriterionRequirementController.selectResorceType(self);"
|
||||
onSelect = "assignedCriterionRequirementController.selectResourceType(self);"
|
||||
model = "@{assignedCriterionRequirementController.resourceTypes}"
|
||||
disabled = "@{assignedCriterionRequirementController.readOnly}">
|
||||
</combobox>
|
||||
|
|
|
|||
|
|
@ -67,6 +67,7 @@ import org.navalplanner.business.requirements.entities.DirectCriterionRequiremen
|
|||
import org.navalplanner.business.resources.daos.ICriterionTypeDAO;
|
||||
import org.navalplanner.business.resources.entities.Criterion;
|
||||
import org.navalplanner.business.resources.entities.CriterionType;
|
||||
import org.navalplanner.business.resources.entities.ResourceEnum;
|
||||
import org.navalplanner.web.resources.criterion.ICriterionsModel;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.test.annotation.NotTransactional;
|
||||
|
|
@ -437,6 +438,7 @@ public class OrderModelTest {
|
|||
public Criterion execute() {
|
||||
CriterionType criterionType = CriterionType.create(
|
||||
"test" + UUID.randomUUID(), "");
|
||||
criterionType.setResource(ResourceEnum.WORKER);
|
||||
criterionTypeDAO.save(criterionType);
|
||||
Criterion criterion = Criterion.create("Test"
|
||||
+ UUID.randomUUID(), criterionType);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue