diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/consolidations/AdvanceConsolidationController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/consolidations/AdvanceConsolidationController.java index f2a68945e..4677a2a25 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/consolidations/AdvanceConsolidationController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/consolidations/AdvanceConsolidationController.java @@ -128,4 +128,9 @@ public class AdvanceConsolidationController extends GenericForwardComposer { } return ""; } + + public boolean isUnitType() { + return advanceConsolidationModel.isUnitType(); + } + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/consolidations/AdvanceConsolidationDTO.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/consolidations/AdvanceConsolidationDTO.java index 7deb0614a..59c267012 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/consolidations/AdvanceConsolidationDTO.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/consolidations/AdvanceConsolidationDTO.java @@ -21,12 +21,15 @@ package org.navalplanner.web.planner.consolidations; import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.List; +import org.navalplanner.business.advance.entities.AdvanceAssignment; import org.navalplanner.business.advance.entities.AdvanceMeasurement; +import org.navalplanner.business.advance.entities.DirectAdvanceAssignment; import org.navalplanner.business.planner.entities.consolidations.ConsolidatedValue; /** @@ -48,7 +51,9 @@ public class AdvanceConsolidationDTO { private Date date; - private BigDecimal value; + private BigDecimal units; + + private BigDecimal percentage; private boolean consolidated; @@ -82,7 +87,8 @@ public class AdvanceConsolidationDTO { this.setConsolidatedValue(consolidatedValue); initConsolidated(); initDate(); - initValue(); + initPercentage(); + initUnits(); } private void initConsolidated() { @@ -99,11 +105,19 @@ public class AdvanceConsolidationDTO { } } - private void initValue() { + private void initPercentage() { if (consolidatedValue != null) { - this.value = this.consolidatedValue.getValue(); + this.percentage = this.consolidatedValue.getValue(); } else if (advanceMeasurement != null) { - this.value = this.advanceMeasurement.getValue(); + this.percentage = calculatePercentageAdvanceMeasurement(advanceMeasurement); + } + } + + private void initUnits(){ + if (advanceMeasurement != null) { + this.units = advanceMeasurement.getValue(); + } else { + this.units = BigDecimal.ZERO; } } @@ -174,8 +188,8 @@ public class AdvanceConsolidationDTO { return date; } - public BigDecimal getValue() { - return value; + public BigDecimal getPercentage() { + return percentage; } public static void setAllReadOnly(boolean allReadOnly) { @@ -186,4 +200,47 @@ public class AdvanceConsolidationDTO { return allReadOnly; } + private BigDecimal calculatePercentageAdvanceMeasurement( + AdvanceMeasurement advanceMeasurement) { + AdvanceAssignment assignment = advanceMeasurement + .getAdvanceAssignment(); + if (assignment == null) { + return BigDecimal.ZERO; + } + + BigDecimal maxValue = ((DirectAdvanceAssignment) assignment) + .getMaxValue(); + + if (maxValue.compareTo(BigDecimal.ZERO) <= 0) { + return BigDecimal.ZERO; + } + + BigDecimal value = advanceMeasurement.getValue(); + if (value == null) { + return BigDecimal.ZERO; + } + + return value.setScale(2).divide(maxValue, RoundingMode.DOWN).multiply( + new BigDecimal(100)); + } + + public String getLabelPercentage() { + if (getPercentage() != null) { + return getPercentage().toString() + " %"; + } else { + return (BigDecimal.ZERO).toString() + " %"; + } + } + + public BigDecimal getUnits() { + return units; + } + + public String getLabelUnits() { + if (getUnits() != null) { + return getUnits().toString(); + } else { + return (BigDecimal.ZERO).toString(); + } + } } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/consolidations/AdvanceConsolidationModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/consolidations/AdvanceConsolidationModel.java index 0d8570bc9..84a9ffe53 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/consolidations/AdvanceConsolidationModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/consolidations/AdvanceConsolidationModel.java @@ -34,6 +34,7 @@ import org.joda.time.LocalDate; import org.navalplanner.business.advance.entities.AdvanceMeasurement; import org.navalplanner.business.advance.entities.DirectAdvanceAssignment; import org.navalplanner.business.advance.entities.IndirectAdvanceAssignment; +import org.navalplanner.business.orders.daos.IOrderElementDAO; import org.navalplanner.business.orders.entities.OrderElement; import org.navalplanner.business.planner.daos.ITaskElementDAO; import org.navalplanner.business.planner.entities.DayAssignment; @@ -67,6 +68,9 @@ public class AdvanceConsolidationModel implements IAdvanceConsolidationModel { @Autowired private ITaskElementDAO taskElementDAO; + @Autowired + private IOrderElementDAO orderElementDAO; + private Task task; private PlanningState planningState; @@ -77,6 +81,8 @@ public class AdvanceConsolidationModel implements IAdvanceConsolidationModel { private DirectAdvanceAssignment spreadAdvance; + private boolean isUnitType = false; + private OrderElement orderElement; private Date firstConsolidatedDate; @@ -261,11 +267,12 @@ public class AdvanceConsolidationModel implements IAdvanceConsolidationModel { if (consolidation.isCalculated()) { return CalculatedConsolidatedValue.create(LocalDate - .fromDateFields(dto.getDate()), dto.getValue(), + .fromDateFields(dto.getDate()), dto.getPercentage(), LocalDate.fromDateFields(task.getEndDate())); } else { return NonCalculatedConsolidatedValue.create(LocalDate - .fromDateFields(dto.getDate()), dto.getValue(), dto + .fromDateFields(dto.getDate()), dto.getPercentage(), + dto .getAdvanceMeasurement(), LocalDate.fromDateFields(task .getEndDate())); } @@ -354,13 +361,17 @@ public class AdvanceConsolidationModel implements IAdvanceConsolidationModel { private void initAdvanceConsolidationsDTOs(Task task) { orderElement = task.getOrderElement(); + orderElementDAO.reattachUnmodifiedEntity(orderElement); + spreadAdvance = orderElement.getReportGlobalAdvanceAssignment(); + consolidation = task.getConsolidation(); if (consolidation != null) { consolidation.getConsolidatedValues().size(); } if (spreadAdvance != null) { + isUnitType = (!spreadAdvance.getAdvanceType().getPercentage()); createAdvanceConsolidationDTOs(); initConsolidatedDates(); addNonConsolidatedAdvances(); @@ -482,4 +493,8 @@ public class AdvanceConsolidationModel implements IAdvanceConsolidationModel { AdvanceConsolidationDTO.setAllReadOnly(hasLimitingResourceAllocation()); } + public boolean isUnitType() { + return this.isUnitType; + } + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/consolidations/IAdvanceConsolidationModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/consolidations/IAdvanceConsolidationModel.java index a8f3e4a4b..95b6c56d4 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/consolidations/IAdvanceConsolidationModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/consolidations/IAdvanceConsolidationModel.java @@ -49,6 +49,8 @@ public interface IAdvanceConsolidationModel { boolean isVisibleMessages(); + boolean isUnitType(); + List getConsolidationDTOs(); String infoMessages(); diff --git a/navalplanner-webapp/src/main/webapp/planner/order.zul b/navalplanner-webapp/src/main/webapp/planner/order.zul index ab498025e..6386abc26 100644 --- a/navalplanner-webapp/src/main/webapp/planner/order.zul +++ b/navalplanner-webapp/src/main/webapp/planner/order.zul @@ -86,7 +86,7 @@ @@ -110,13 +110,16 @@ fixedLayout="true" sclass="@{advanceController.readOnlySclass}"> - + + -