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 2c6dbfcab..ba46549c5 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 @@ -30,6 +30,14 @@ import org.navalplanner.business.templates.entities.OrderElementTemplate; */ public class MaterialAssignmentTemplate extends BaseEntity { + public static MaterialAssignmentTemplate copyFrom( + MaterialAssignmentTemplate assignment) { + MaterialAssignmentTemplate result = new MaterialAssignmentTemplate(); + result.materialInfo = assignment.getMaterialInfo().copy(); + result.orderElementTemplate = assignment.getOrderElementTemplate(); + return BaseEntity.create(result); + } + public static MaterialAssignmentTemplate create() { return BaseEntity.create(new MaterialAssignmentTemplate()); } 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 bebc61460..bf647e4b8 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.math.BigDecimal; import java.util.Collection; import java.util.Collections; import java.util.Date; @@ -196,4 +197,22 @@ public abstract class OrderElementTemplate extends BaseEntity implements MaterialAssignmentTemplate materialAssignment) { materialAssignments.remove(materialAssignment); } + + public BigDecimal getTotalMaterialAssigmentPrice() { + BigDecimal result = BigDecimal.ZERO; + for (MaterialAssignmentTemplate each : materialAssignments) { + result = result.add(each.getTotalPrice()); + } + return result; + } + + public double getTotalMaterialAssigmentUnits() { + double result = 0; + for (MaterialAssignmentTemplate each : materialAssignments) { + if (each.getUnits() != null) { + result += each.getUnits(); + } + } + return result; + } } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/materials/MaterialAssignmentTemplateComponent.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/materials/MaterialAssignmentTemplateComponent.java new file mode 100644 index 000000000..232cd1d79 --- /dev/null +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/materials/MaterialAssignmentTemplateComponent.java @@ -0,0 +1,38 @@ +/* + * This file is part of ###PROJECT_NAME### + * + * Copyright (C) 2009 Fundación para o Fomento da Calidade Industrial e + * Desenvolvemento Tecnolóxico de Galicia + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +package org.navalplanner.web.templates.materials; + +import org.navalplanner.web.orders.materials.MaterialAssignmentsComponent; + +/** + * @author Óscar González Fernández + * + */ +public class MaterialAssignmentTemplateComponent extends + MaterialAssignmentsComponent { + + private TemplateMaterialsController controller = new TemplateMaterialsController(); + + @Override + public TemplateMaterialsController getController() { + return controller; + } + +} diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/materials/TemplateMaterialsController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/materials/TemplateMaterialsController.java new file mode 100644 index 000000000..9ef1e37eb --- /dev/null +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/templates/materials/TemplateMaterialsController.java @@ -0,0 +1,117 @@ +/* + * This file is part of ###PROJECT_NAME### + * + * Copyright (C) 2009 Fundación para o Fomento da Calidade Industrial e + * Desenvolvemento Tecnolóxico de Galicia + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +package org.navalplanner.web.templates.materials; + +import java.math.BigDecimal; +import java.math.RoundingMode; + +import org.navalplanner.business.materials.entities.Material; +import org.navalplanner.business.materials.entities.MaterialAssignmentTemplate; +import org.navalplanner.business.templates.entities.OrderElementTemplate; +import org.navalplanner.web.orders.materials.AssignedMaterialsController; +import org.zkoss.zk.ui.Component; +import org.zkoss.zul.TreeModel; + +/** + * @author Óscar González Fernández + * + */ +public class TemplateMaterialsController extends + AssignedMaterialsController { + + private IAssignedMaterialsToOrderElementTemplateModel assignedMaterialsToOrderElementTemplateModel; + + @Override + protected MaterialAssignmentTemplate copyFrom( + MaterialAssignmentTemplate assignment) { + return MaterialAssignmentTemplate.copyFrom(assignment); + } + + @Override + protected void createAssignmentsBoxComponent(Component parent) { + } + + @Override + public TreeModel getAllMaterialCategories() { + return assignedMaterialsToOrderElementTemplateModel + .getAllMaterialCategories(); + } + + @Override + protected Material getMaterial(MaterialAssignmentTemplate materialAssignment) { + return materialAssignment.getMaterial(); + } + + @Override + public TreeModel getMaterialCategories() { + return assignedMaterialsToOrderElementTemplateModel + .getMaterialCategories(); + } + + @Override + protected IAssignedMaterialsToOrderElementTemplateModel getModel() { + return assignedMaterialsToOrderElementTemplateModel; + } + + @Override + public BigDecimal getTotalPrice() { + OrderElementTemplate template = assignedMaterialsToOrderElementTemplateModel + .getTemplate(); + if (template == null) { + return BigDecimal.ZERO; + } + return template.getTotalMaterialAssigmentPrice().setScale(2, + RoundingMode.HALF_UP); + } + + @Override + protected Double getTotalPrice(MaterialAssignmentTemplate materialAssignment) { + return materialAssignment.getTotalPrice().doubleValue(); + } + + @Override + public double getTotalUnits() { + OrderElementTemplate template = assignedMaterialsToOrderElementTemplateModel + .getTemplate(); + if (template == null) { + return 0; + } + return template.getTotalMaterialAssigmentUnits(); + } + + @Override + protected double getUnits(MaterialAssignmentTemplate assignment) { + if (assignment.getUnits() == null) { + return 0; + } + return assignment.getUnits(); + } + + @Override + protected void initializeEdition(OrderElementTemplate template) { + assignedMaterialsToOrderElementTemplateModel.initEdit(template); + } + + @Override + protected void setUnits(MaterialAssignmentTemplate assignment, double units) { + assignment.setUnits(units); + } + +}