[Bug #947] check if not exists any indirect or direct advance when it changes advance type.
When it changes the advance type, the previous indirect advances in its ancestors are deleted and the new one is added if not exists any indirect or direct advance with the same type. ItEr73S04BugFixing
This commit is contained in:
parent
adebb0348b
commit
1e4dd5eb49
4 changed files with 38 additions and 31 deletions
|
|
@ -77,26 +77,19 @@ public abstract class AdvanceAssignment extends BaseEntity {
|
|||
return this.advanceType;
|
||||
}
|
||||
|
||||
public void changeAdvanceTypeInParents(AdvanceType oldType,
|
||||
public void changeAdvanceTypeInParents(final AdvanceType oldType,
|
||||
AdvanceType newType, AdvanceAssignment advance) {
|
||||
if (getOrderElement() != null) {
|
||||
OrderLineGroup parent = getOrderElement().getParent();
|
||||
while (parent != null) {
|
||||
|
||||
if (parent != null) {
|
||||
IndirectAdvanceAssignment oldIndirect = parent
|
||||
.getIndirectAdvanceAssignment(oldType);
|
||||
if (oldIndirect != null) {
|
||||
parent.removeIndirectAdvanceAssignment(oldType);
|
||||
}
|
||||
|
||||
if (!parent
|
||||
.existsIndirectAdvanceAssignmentWithTheSameType(newType)) {
|
||||
IndirectAdvanceAssignment newIndirect = advance
|
||||
.createIndirectAdvanceFor(parent);
|
||||
parent.addIndirectAdvanceAssignment(newIndirect);
|
||||
}
|
||||
|
||||
parent = parent.getParent();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -697,15 +697,13 @@ public abstract class OrderElement extends IntegrationEntity implements
|
|||
OrderElement orderElement,
|
||||
DirectAdvanceAssignment newAdvanceAssignment)
|
||||
throws DuplicateAdvanceAssignmentForOrderElementException {
|
||||
for (DirectAdvanceAssignment directAdvanceAssignment : orderElement
|
||||
.getDirectAdvanceAssignments()) {
|
||||
if (AdvanceType.equivalentInDB(directAdvanceAssignment
|
||||
.getAdvanceType(), newAdvanceAssignment.getAdvanceType())) {
|
||||
if (orderElement
|
||||
.existsDirectAdvanceAssignmentWithTheSameType(newAdvanceAssignment
|
||||
.getAdvanceType())) {
|
||||
throw new DuplicateAdvanceAssignmentForOrderElementException(
|
||||
_("Duplicate Progress Assignment For Task"),
|
||||
this,
|
||||
OrderElement.class);
|
||||
}
|
||||
}
|
||||
if (!orderElement.getChildren().isEmpty()) {
|
||||
for (OrderElement child : orderElement.getChildren()) {
|
||||
|
|
@ -715,6 +713,16 @@ public abstract class OrderElement extends IntegrationEntity implements
|
|||
}
|
||||
}
|
||||
|
||||
public boolean existsDirectAdvanceAssignmentWithTheSameType(AdvanceType type) {
|
||||
for (DirectAdvanceAssignment directAdvanceAssignment : directAdvanceAssignments) {
|
||||
if (AdvanceType.equivalentInDB(directAdvanceAssignment
|
||||
.getAdvanceType(), type)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public BigDecimal getAdvancePercentage() {
|
||||
if ((dirtyLastAdvanceMeasurementForSpreading == null)
|
||||
|| dirtyLastAdvanceMeasurementForSpreading) {
|
||||
|
|
|
|||
|
|
@ -824,8 +824,10 @@ public class OrderLineGroup extends OrderElement implements
|
|||
|
||||
public void addIndirectAdvanceAssignment(
|
||||
IndirectAdvanceAssignment indirectAdvanceAssignment) {
|
||||
if (!existsIndirectAdvanceAssignmentWithTheSameType(indirectAdvanceAssignment
|
||||
.getAdvanceType())) {
|
||||
if ((!existsIndirectAdvanceAssignmentWithTheSameType(indirectAdvanceAssignment
|
||||
.getAdvanceType()))
|
||||
&& (!existsDirectAdvanceAssignmentWithTheSameType(indirectAdvanceAssignment
|
||||
.getAdvanceType()))) {
|
||||
indirectAdvanceAssignments.add(indirectAdvanceAssignment);
|
||||
}
|
||||
if (parent != null) {
|
||||
|
|
|
|||
|
|
@ -362,6 +362,7 @@ public class ManageOrderElementAdvancesModel implements
|
|||
|
||||
@Override
|
||||
public void removeLineAdvanceAssignment(AdvanceAssignment advance) {
|
||||
advance.setOrderElement(null);
|
||||
this.listAdvanceAssignments.remove(advance);
|
||||
orderElement.removeAdvanceAssignment(advance);
|
||||
this.advanceAssignment = null;
|
||||
|
|
@ -685,21 +686,24 @@ public class ManageOrderElementAdvancesModel implements
|
|||
} else {
|
||||
directAdvanceAssignment = calculateFakeDirectAdvanceAssignment((IndirectAdvanceAssignment) each);
|
||||
}
|
||||
String title = getInfoAdvanceAssignment(directAdvanceAssignment);
|
||||
SortedSet<AdvanceMeasurement> listAdvanceMeasurements = directAdvanceAssignment
|
||||
.getAdvanceMeasurements();
|
||||
if (listAdvanceMeasurements.size() > 1) {
|
||||
for (AdvanceMeasurement advanceMeasurement : listAdvanceMeasurements) {
|
||||
BigDecimal value = advanceMeasurement.getValue();
|
||||
if ((selectedAdvances.size() > 1) && (value != null)) {
|
||||
BigDecimal maxValue = directAdvanceAssignment
|
||||
.getMaxValue();
|
||||
value = value.divide(maxValue, RoundingMode.DOWN);
|
||||
}
|
||||
LocalDate date = advanceMeasurement.getDate();
|
||||
if ((value != null) && (date != null)) {
|
||||
xymodel.addValue(title, Long.valueOf(date
|
||||
.toDateTimeAtStartOfDay().getMillis()), value);
|
||||
if (directAdvanceAssignment != null) {
|
||||
String title = getInfoAdvanceAssignment(directAdvanceAssignment);
|
||||
SortedSet<AdvanceMeasurement> listAdvanceMeasurements = directAdvanceAssignment
|
||||
.getAdvanceMeasurements();
|
||||
if (listAdvanceMeasurements.size() > 1) {
|
||||
for (AdvanceMeasurement advanceMeasurement : listAdvanceMeasurements) {
|
||||
BigDecimal value = advanceMeasurement.getValue();
|
||||
if ((selectedAdvances.size() > 1) && (value != null)) {
|
||||
BigDecimal maxValue = directAdvanceAssignment
|
||||
.getMaxValue();
|
||||
value = value.divide(maxValue, RoundingMode.DOWN);
|
||||
}
|
||||
LocalDate date = advanceMeasurement.getDate();
|
||||
if ((value != null) && (date != null)) {
|
||||
xymodel.addValue(title, Long.valueOf(date
|
||||
.toDateTimeAtStartOfDay().getMillis()),
|
||||
value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue