ItEr59S04ValidacionEProbasFuncionaisItEr58S04 : [Bug #476] Fixing Bug.
Adds and removes the advance 'Children' when is necessary.
This commit is contained in:
parent
3d73fbac63
commit
73fcd62264
3 changed files with 83 additions and 12 deletions
|
|
@ -48,16 +48,12 @@ public class Order extends OrderLineGroup {
|
|||
public static Order create() {
|
||||
Order order = new Order();
|
||||
order.setNewObject(true);
|
||||
|
||||
OrderLineGroup.setupOrderLineGroup(order);
|
||||
|
||||
return order;
|
||||
}
|
||||
|
||||
|
||||
public static Order createUnvalidated(String code) {
|
||||
Order order = create(new Order(), code);
|
||||
OrderLineGroup.setupOrderLineGroup(order);
|
||||
return order;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -396,6 +396,7 @@ public abstract class OrderElement extends IntegrationEntity implements
|
|||
if (this.getParent() != null) {
|
||||
this.getParent().removeIndirectAdvanceAssignment(
|
||||
advanceAssignment.getAdvanceType());
|
||||
removeChildrenAdvanceInParents(this.getParent());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -448,11 +449,41 @@ public abstract class OrderElement extends IntegrationEntity implements
|
|||
this.directAdvanceAssignments.add(newAdvanceAssignment);
|
||||
|
||||
if (this.getParent() != null) {
|
||||
addChildrenAdvanceInParents(this.getParent());
|
||||
this.getParent().addIndirectAdvanceAssignment(
|
||||
newAdvanceAssignment.createIndirectAdvanceFor(this.getParent()));
|
||||
}
|
||||
}
|
||||
|
||||
public void addChildrenAdvanceInParents(OrderLineGroup parent) {
|
||||
if ((parent != null) && (!parent.existChildrenAdvance())) {
|
||||
parent.addChildrenAdvanceOrderLineGroup();
|
||||
addChildrenAdvanceInParents(parent.getParent());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void removeChildrenAdvanceInParents(OrderLineGroup parent) {
|
||||
if ((parent != null) && (parent.existChildrenAdvance())
|
||||
&& (!itsChildsHasAdvances(parent))) {
|
||||
parent.removeChildrenAdvanceOrderLineGroup();
|
||||
removeChildrenAdvanceInParents(parent.getParent());
|
||||
}
|
||||
}
|
||||
|
||||
private boolean itsChildsHasAdvances(OrderElement orderElement) {
|
||||
for (OrderElement child : orderElement.getChildren()) {
|
||||
if ((!child.getIndirectAdvanceAssignments().isEmpty())
|
||||
|| (!child.getDirectAdvanceAssignments().isEmpty())) {
|
||||
return true;
|
||||
}
|
||||
if (itsChildsHasAdvances(child)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
protected void checkNoOtherGlobalAdvanceAssignment(
|
||||
DirectAdvanceAssignment newAdvanceAssignment)
|
||||
throws DuplicateValueTrueReportGlobalAdvanceException {
|
||||
|
|
|
|||
|
|
@ -103,25 +103,69 @@ public class OrderLineGroup extends OrderElement implements
|
|||
public static OrderLineGroup create() {
|
||||
OrderLineGroup result = new OrderLineGroup();
|
||||
result.setNewObject(true);
|
||||
|
||||
setupOrderLineGroup(result);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static OrderLineGroup createUnvalidated(String code) {
|
||||
OrderLineGroup orderLineGroup = create(new OrderLineGroup(), code);
|
||||
setupOrderLineGroup(orderLineGroup);
|
||||
return orderLineGroup;
|
||||
}
|
||||
|
||||
protected static void setupOrderLineGroup(OrderLineGroup result) {
|
||||
public void addChildrenAdvanceOrderLineGroup() {
|
||||
boolean spread = (getReportGlobalAdvanceAssignment() == null);
|
||||
IndirectAdvanceAssignment indirectAdvanceAssignment = IndirectAdvanceAssignment
|
||||
.create(true);
|
||||
.create(spread);
|
||||
AdvanceType advanceType = PredefinedAdvancedTypes.CHILDREN.getType();
|
||||
indirectAdvanceAssignment.setAdvanceType(advanceType);
|
||||
indirectAdvanceAssignment.setOrderElement(result);
|
||||
result.addIndirectAdvanceAssignment(indirectAdvanceAssignment);
|
||||
indirectAdvanceAssignment.setOrderElement(this);
|
||||
addIndirectAdvanceAssignment(indirectAdvanceAssignment);
|
||||
}
|
||||
|
||||
public void removeChildrenAdvanceOrderLineGroup() {
|
||||
for (IndirectAdvanceAssignment advance : getIndirectAdvanceAssignments()) {
|
||||
if (advance.getAdvanceType().getUnitName().equals(
|
||||
PredefinedAdvancedTypes.CHILDREN.getTypeName())) {
|
||||
indirectAdvanceAssignments.remove(advance);
|
||||
updateSpreadAdvance();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void updateSpreadAdvance(){
|
||||
if(getReportGlobalAdvanceAssignment() == null){
|
||||
AdvanceType type = PredefinedAdvancedTypes.PERCENTAGE.getType();
|
||||
DirectAdvanceAssignment advancePercentage = getAdvanceAssignmentByType(type);
|
||||
if(advancePercentage != null) {
|
||||
if(advancePercentage.isFake()){
|
||||
for (IndirectAdvanceAssignment each : getIndirectAdvanceAssignments()) {
|
||||
if (type != null && each.getAdvanceType().getId().equals(type.getId())) {
|
||||
each.setReportGlobalAdvance(true);
|
||||
}
|
||||
}
|
||||
}else{
|
||||
advancePercentage.setReportGlobalAdvance(true);
|
||||
}
|
||||
} else {
|
||||
for (DirectAdvanceAssignment advance : getDirectAdvanceAssignments()) {
|
||||
advance.setReportGlobalAdvance(true);
|
||||
return;
|
||||
}
|
||||
for (IndirectAdvanceAssignment advance : getIndirectAdvanceAssignments()) {
|
||||
advance.setReportGlobalAdvance(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public boolean existChildrenAdvance() {
|
||||
for (IndirectAdvanceAssignment advance : getIndirectAdvanceAssignments()) {
|
||||
if (advance.getAdvanceType().getUnitName().equals(
|
||||
PredefinedAdvancedTypes.CHILDREN.getTypeName())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private List<OrderElement> children = new ArrayList<OrderElement>();
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue