From b83936d2ff61714dc92016832aeac8fee2d1d2e1 Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Wed, 30 Dec 2009 21:18:51 +0100 Subject: [PATCH] ItEr41S23CUImportarTraballoRealizadoPorSubcontrata: Added information about advance on order elements importation. --- .../entities/DirectAdvanceAssignment.java | 19 +++++++ .../orders/entities/OrderElement.java | 29 +++++++++++ .../ws/orders/impl/OrderElementConverter.java | 50 +++++++++++++++++++ 3 files changed, 98 insertions(+) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/advance/entities/DirectAdvanceAssignment.java b/navalplanner-business/src/main/java/org/navalplanner/business/advance/entities/DirectAdvanceAssignment.java index 94d72b05b..f8feab600 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/advance/entities/DirectAdvanceAssignment.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/advance/entities/DirectAdvanceAssignment.java @@ -134,4 +134,23 @@ public class DirectAdvanceAssignment extends AdvanceAssignment { RoundingMode.DOWN); } + public void addAdvanceMeasurements(AdvanceMeasurement advanceMeasurement) { + this.advanceMeasurements.add(advanceMeasurement); + advanceMeasurement.setAdvanceAssignment(this); + } + + public AdvanceMeasurement getAdvanceMeasurementAtExactDate(LocalDate date) { + if (advanceMeasurements.isEmpty()) { + return null; + } + + for (AdvanceMeasurement advanceMeasurement : advanceMeasurements) { + if (advanceMeasurement.getDate().equals(date)) { + return advanceMeasurement; + } + } + + return null; + } + } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java index 71ad0df61..ac03faf1a 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java @@ -36,6 +36,7 @@ import org.hibernate.validator.InvalidValue; import org.hibernate.validator.NotEmpty; import org.hibernate.validator.Valid; import org.joda.time.LocalDate; +import org.navalplanner.business.advance.bootstrap.PredefinedAdvancedTypes; import org.navalplanner.business.advance.entities.AdvanceAssignment; import org.navalplanner.business.advance.entities.AdvanceType; import org.navalplanner.business.advance.entities.DirectAdvanceAssignment; @@ -885,4 +886,32 @@ public abstract class OrderElement extends BaseEntity { return null; } + public DirectAdvanceAssignment getDirectAdvanceAssignmentSubcontractor() { + for (DirectAdvanceAssignment directAdvanceAssignment : directAdvanceAssignments) { + if (directAdvanceAssignment.getAdvanceType().getUnitName().equals( + PredefinedAdvancedTypes.SUBCONTRACTOR.getTypeName())) { + return directAdvanceAssignment; + } + } + + return null; + } + + public DirectAdvanceAssignment addSubcontractorAdvanceAssignment() + throws DuplicateValueTrueReportGlobalAdvanceException, + DuplicateAdvanceAssignmentForOrderElementException { + boolean reportGlobalAdvance = false; + if (getReportGlobalAdvanceAssignment() == null) { + reportGlobalAdvance = true; + } + + DirectAdvanceAssignment directAdvanceAssignment = DirectAdvanceAssignment + .create(reportGlobalAdvance, new BigDecimal(100)); + directAdvanceAssignment + .setAdvanceType(PredefinedAdvancedTypes.SUBCONTRACTOR.getType()); + + addAdvanceAssignment(directAdvanceAssignment); + return directAdvanceAssignment; + } + } \ No newline at end of file diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/ws/orders/impl/OrderElementConverter.java b/navalplanner-webapp/src/main/java/org/navalplanner/ws/orders/impl/OrderElementConverter.java index ef8f493b4..7fbf1707a 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/ws/orders/impl/OrderElementConverter.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/ws/orders/impl/OrderElementConverter.java @@ -31,8 +31,11 @@ import java.util.List; import java.util.Set; import org.hibernate.NonUniqueResultException; +import org.joda.time.LocalDate; import org.navalplanner.business.advance.entities.AdvanceMeasurement; import org.navalplanner.business.advance.entities.DirectAdvanceAssignment; +import org.navalplanner.business.advance.exceptions.DuplicateAdvanceAssignmentForOrderElementException; +import org.navalplanner.business.advance.exceptions.DuplicateValueTrueReportGlobalAdvanceException; import org.navalplanner.business.calendars.entities.BaseCalendar; import org.navalplanner.business.common.Registry; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; @@ -232,6 +235,8 @@ public final class OrderElementConverter { orderElement.addMaterialAssignment(toEntity(materialAssignmentDTO)); } + addAdvanceMeasurements(orderElement, orderElementDTO); + return orderElement; } @@ -375,6 +380,8 @@ public final class OrderElementConverter { } } + addAdvanceMeasurements(orderElement, orderElementDTO); + if (orderElementDTO.name != null) { orderElement.setName(orderElementDTO.name); } @@ -429,4 +436,47 @@ public final class OrderElementConverter { } } + private static void addAdvanceMeasurements(OrderElement orderElement, + OrderElementDTO orderElementDTO) { + if (!orderElementDTO.advanceMeasurements.isEmpty()) { + DirectAdvanceAssignment directAdvanceAssignment = getDirectAdvanceAssignmentSubcontractor(orderElement); + + for (AdvanceMeasurementDTO advanceMeasurementDTO : orderElementDTO.advanceMeasurements) { + AdvanceMeasurement advanceMeasurement = null; + LocalDate date = null; + if (advanceMeasurementDTO.date != null) { + date = new LocalDate(advanceMeasurementDTO.date); + advanceMeasurement = directAdvanceAssignment + .getAdvanceMeasurementAtExactDate(date); + } + + if (advanceMeasurement == null) { + advanceMeasurement = AdvanceMeasurement.create(date, + advanceMeasurementDTO.value); + directAdvanceAssignment + .addAdvanceMeasurements(advanceMeasurement); + } else { + advanceMeasurement.setValue(advanceMeasurementDTO.value); + } + } + } + } + + private static DirectAdvanceAssignment getDirectAdvanceAssignmentSubcontractor( + OrderElement orderElement) { + DirectAdvanceAssignment directAdvanceAssignment = orderElement + .getDirectAdvanceAssignmentSubcontractor(); + if (directAdvanceAssignment == null) { + try { + directAdvanceAssignment = orderElement + .addSubcontractorAdvanceAssignment(); + } catch (DuplicateValueTrueReportGlobalAdvanceException e) { + throw new RuntimeException(e); + } catch (DuplicateAdvanceAssignmentForOrderElementException e) { + throw new RuntimeException(e); + } + } + return directAdvanceAssignment; + } + } \ No newline at end of file