diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/MaterialAssignment.java b/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/MaterialAssignment.java index 1fdd7cdfd..f3578d521 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/MaterialAssignment.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/MaterialAssignment.java @@ -69,7 +69,7 @@ public class MaterialAssignment extends BaseEntity implements Comparable { } @Valid - private MaterialInfo getMaterialInfo() { + public MaterialInfo getMaterialInfo() { if (materialInfo == null) { materialInfo = new MaterialInfo(); } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/MaterialAssignmentTemplate.java b/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/MaterialAssignmentTemplate.java index 1cd0e8081..4e42bc70e 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/MaterialAssignmentTemplate.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/MaterialAssignmentTemplate.java @@ -48,6 +48,14 @@ public class MaterialAssignmentTemplate extends BaseEntity { return result; } + public static MaterialAssignmentTemplate copyFrom( + MaterialAssignment assignment, OrderElementTemplate destination) { + MaterialAssignmentTemplate result = new MaterialAssignmentTemplate(); + result.materialInfo = assignment.getMaterialInfo().copy(); + result.orderElementTemplate = destination; + return result; + } + private MaterialInfo materialInfo = new MaterialInfo(); private OrderElementTemplate orderElementTemplate; @@ -67,11 +75,6 @@ public class MaterialAssignmentTemplate extends BaseEntity { return orderElementTemplate; } - public void setOrderElementTemplate( - OrderElementTemplate orderElementTemplate) { - this.orderElementTemplate = orderElementTemplate; - } - public Material getMaterial() { return getMaterialInfo().getMaterial(); } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/MaterialInfo.java b/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/MaterialInfo.java index f8a3feac6..a216f3d1c 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/MaterialInfo.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/materials/entities/MaterialInfo.java @@ -62,4 +62,12 @@ public class MaterialInfo { this.unitPrice = unitPrice; } + public MaterialInfo copy() { + MaterialInfo result = new MaterialInfo(); + result.setMaterial(getMaterial()); + result.setUnits(getUnits()); + result.setUnitPrice(getUnitPrice()); + return result; + } + } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/templates/entities/OrderElementTemplate.java b/navalplanner-business/src/main/java/org/navalplanner/business/templates/entities/OrderElementTemplate.java index 9fd14221d..8ae2d0995 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/templates/entities/OrderElementTemplate.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/templates/entities/OrderElementTemplate.java @@ -19,6 +19,7 @@ */ package org.navalplanner.business.templates.entities; +import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.HashSet; @@ -31,6 +32,7 @@ import org.hibernate.validator.Valid; import org.joda.time.DateTime; import org.joda.time.Days; import org.navalplanner.business.common.BaseEntity; +import org.navalplanner.business.materials.entities.MaterialAssignment; import org.navalplanner.business.materials.entities.MaterialAssignmentTemplate; import org.navalplanner.business.orders.entities.InfoComponent; import org.navalplanner.business.orders.entities.Order; @@ -52,10 +54,21 @@ public abstract class OrderElementTemplate extends BaseEntity implements .getInitDate()); Days fromBeginningToEnd = daysBetween(order.getDeadline(), origin .getDeadline()); + beingBuilt.materialAssignments = copyMaterialAssignmentsFrom(beingBuilt, origin + .getMaterialAssignments()); return create(beingBuilt, infoComponentCopied, fromBeginningToStart, fromBeginningToEnd); } + private static Set copyMaterialAssignmentsFrom(OrderElementTemplate beingBuilt, + Collection assignments) { + Set result = new HashSet(); + for (MaterialAssignment each : assignments) { + result.add(MaterialAssignmentTemplate.copyFrom(each, beingBuilt)); + } + return result; + } + private static T create(T beingBuilt, InfoComponent infoComponentCopied, Days fromBeginningToStart, Days fromBeginningToEnd) {