ItEr42S17CUGravacionModelosUnidadesTraballoItEr41S20: Extracting superclass from AssignedMaterialsToOrderElementModel.
This commit is contained in:
parent
a85669b7ca
commit
acc1b103b9
2 changed files with 277 additions and 175 deletions
|
|
@ -0,0 +1,245 @@
|
|||
/*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.navalplanner.web.orders.materials;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import org.navalplanner.business.materials.daos.IMaterialCategoryDAO;
|
||||
import org.navalplanner.business.materials.daos.IMaterialDAO;
|
||||
import org.navalplanner.business.materials.entities.Material;
|
||||
import org.navalplanner.business.materials.entities.MaterialCategory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.zkoss.ganttz.util.MutableTreeModel;
|
||||
import org.zkoss.zul.TreeModel;
|
||||
|
||||
/**
|
||||
* @author Óscar González Fernández <ogonzalez@igalia.com>
|
||||
*
|
||||
*/
|
||||
public abstract class AssignedMaterialsModel<T, A> {
|
||||
|
||||
@Autowired
|
||||
private IMaterialCategoryDAO categoryDAO;
|
||||
|
||||
@Autowired
|
||||
private IMaterialDAO materialDAO;
|
||||
|
||||
private MutableTreeModel<MaterialCategory> materialCategories = MutableTreeModel
|
||||
.create(MaterialCategory.class);
|
||||
|
||||
private MutableTreeModel<MaterialCategory> allMaterialCategories = MutableTreeModel
|
||||
.create(MaterialCategory.class);
|
||||
|
||||
private List<Material> matchingMaterials = new ArrayList<Material>();
|
||||
|
||||
@Transactional(readOnly = true)
|
||||
public void initEdit(T element) {
|
||||
assignAndReattach(element);
|
||||
materialCategories = MutableTreeModel.create(MaterialCategory.class);
|
||||
initializeMaterialAssigments();
|
||||
// Initialize matching materials
|
||||
matchingMaterials.clear();
|
||||
matchingMaterials.addAll(materialDAO.getAll());
|
||||
initializeMaterials(matchingMaterials);
|
||||
}
|
||||
|
||||
protected abstract void initializeMaterialAssigments();
|
||||
|
||||
protected abstract void assignAndReattach(T element);
|
||||
|
||||
private void initializeMaterials(Collection<Material> materials) {
|
||||
for (Material each : materials) {
|
||||
initializeMaterial(each);
|
||||
}
|
||||
}
|
||||
|
||||
protected void initializeMaterialCategories(
|
||||
Collection<MaterialCategory> materialCategories) {
|
||||
for (MaterialCategory each : materialCategories) {
|
||||
initializeMaterialCategory(each);
|
||||
}
|
||||
}
|
||||
|
||||
protected void initializeMaterialCategory(MaterialCategory materialCategory) {
|
||||
materialCategory.getName();
|
||||
initializeMaterials(materialCategory.getMaterials());
|
||||
initializeMaterialCategories(materialCategory.getSubcategories());
|
||||
}
|
||||
|
||||
private void initializeMaterial(Material material) {
|
||||
material.getDescription();
|
||||
material.getCategory().getName();
|
||||
}
|
||||
|
||||
@Transactional(readOnly = true)
|
||||
public MutableTreeModel<MaterialCategory> getMaterialCategories() {
|
||||
if (isInitialized() && materialCategories.isEmpty()) {
|
||||
feedTree(materialCategories, getAssignments());
|
||||
initializeMaterialCategories(materialCategories.asList());
|
||||
}
|
||||
return materialCategories;
|
||||
}
|
||||
|
||||
protected abstract List<A> getAssignments();
|
||||
|
||||
protected abstract Material getMaterial(A assignment);
|
||||
|
||||
private void feedTree(MutableTreeModel<MaterialCategory> tree,
|
||||
Collection<? extends A> materialAssignments) {
|
||||
for (A each : materialAssignments) {
|
||||
final Material material = getMaterial(each);
|
||||
addCategory(tree, material.getCategory());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds category to treeModel If category.parent is not in treeModel add it
|
||||
* to treeModel recursively.
|
||||
*/
|
||||
private void addCategory(
|
||||
MutableTreeModel<MaterialCategory> materialCategories,
|
||||
MaterialCategory materialCategory) {
|
||||
|
||||
categoryDAO.reattach(materialCategory);
|
||||
final MaterialCategory parent = materialCategory.getParent();
|
||||
if (parent == null) {
|
||||
if (!materialCategories.contains(parent, materialCategory)) {
|
||||
materialCategories.addToRoot(materialCategory);
|
||||
}
|
||||
} else {
|
||||
if (!materialCategories.contains(parent, materialCategory)) {
|
||||
addCategory(materialCategories, parent);
|
||||
materialCategories.add(parent, materialCategory);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional(readOnly = true)
|
||||
public TreeModel getAllMaterialCategories() {
|
||||
if (allMaterialCategories.isEmpty()) {
|
||||
feedTree(allMaterialCategories, categoryDAO.getAll());
|
||||
initializeMaterialCategories(allMaterialCategories.asList());
|
||||
}
|
||||
return allMaterialCategories;
|
||||
}
|
||||
|
||||
private void feedTree(MutableTreeModel<MaterialCategory> tree,
|
||||
List<MaterialCategory> materialCategories) {
|
||||
for (MaterialCategory each : materialCategories) {
|
||||
addCategory(tree, each);
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract boolean isInitialized();
|
||||
|
||||
public List<A> getAssignedMaterials(MaterialCategory materialCategory) {
|
||||
List<A> result = new ArrayList<A>();
|
||||
if (isInitialized()) {
|
||||
for (A each : getAssignments()) {
|
||||
final Material material = getMaterial(each);
|
||||
if (materialCategory == null
|
||||
|| materialCategory.getId().equals(
|
||||
material.getCategory().getId())) {
|
||||
result.add(each);
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Transactional(readOnly = true)
|
||||
public void searchMaterials(String text, MaterialCategory materialCategory) {
|
||||
matchingMaterials = materialDAO
|
||||
.findMaterialsInCategoryAndSubCategories(text, materialCategory);
|
||||
initializeMaterials(matchingMaterials);
|
||||
}
|
||||
|
||||
public List<Material> getMatchingMaterials() {
|
||||
return matchingMaterials;
|
||||
}
|
||||
|
||||
protected abstract void addMaterialAssignment(Material material);
|
||||
|
||||
@Transactional(readOnly = true)
|
||||
public void addMaterialAssignment(A materialAssignment) {
|
||||
MaterialCategory category = addAssignment(materialAssignment);
|
||||
addCategory(materialCategories, category);
|
||||
}
|
||||
|
||||
protected abstract MaterialCategory addAssignment(A materialAssignment);
|
||||
|
||||
protected abstract MaterialCategory removeAssignment(A materialAssignment);
|
||||
|
||||
public void removeMaterialAssignment(A materialAssignment) {
|
||||
MaterialCategory materialCategory = removeAssignment(materialAssignment);
|
||||
removeCategory(materialCategories, materialCategory);
|
||||
}
|
||||
|
||||
private void removeCategory(
|
||||
MutableTreeModel<MaterialCategory> materialCategories,
|
||||
MaterialCategory materialCategory) {
|
||||
|
||||
categoryDAO.reattach(materialCategory);
|
||||
final boolean canDelete = materialCategory.getSubcategories().isEmpty()
|
||||
&& getAssignedMaterials(materialCategory).isEmpty();
|
||||
if (canDelete) {
|
||||
materialCategories.remove(materialCategory);
|
||||
final MaterialCategory parent = materialCategory.getParent();
|
||||
if (parent != null) {
|
||||
removeCategory(materialCategories, parent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public double getUnits(MaterialCategory materialCategory) {
|
||||
double result = 0;
|
||||
if (isInitialized()) {
|
||||
for (A each : getAssignments()) {
|
||||
final Material material = getMaterial(each);
|
||||
if (materialCategory.equals(material.getCategory())) {
|
||||
result += getUnits(each);
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
protected abstract Double getUnits(A assigment);
|
||||
|
||||
public BigDecimal getPrice(MaterialCategory category) {
|
||||
BigDecimal result = new BigDecimal(0);
|
||||
if (isInitialized()) {
|
||||
for (A each : getAssignments()) {
|
||||
final Material material = getMaterial(each);
|
||||
if (category.equals(material.getCategory())) {
|
||||
result = result.add(getTotalPrice(each));
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
protected abstract BigDecimal getTotalPrice(A each);
|
||||
|
||||
}
|
||||
|
|
@ -22,12 +22,9 @@ package org.navalplanner.web.orders.materials;
|
|||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.navalplanner.business.materials.daos.IMaterialCategoryDAO;
|
||||
import org.navalplanner.business.materials.daos.IMaterialDAO;
|
||||
import org.navalplanner.business.materials.entities.Material;
|
||||
import org.navalplanner.business.materials.entities.MaterialAssignment;
|
||||
import org.navalplanner.business.materials.entities.MaterialCategory;
|
||||
|
|
@ -38,48 +35,30 @@ import org.springframework.beans.factory.config.BeanDefinition;
|
|||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.zkoss.ganttz.util.MutableTreeModel;
|
||||
import org.zkoss.zul.TreeModel;
|
||||
|
||||
/**
|
||||
* @author Diego Pino Garcia <dpino@igalia.com>
|
||||
*/
|
||||
@Service
|
||||
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
|
||||
public class AssignedMaterialsToOrderElementModel implements
|
||||
public class AssignedMaterialsToOrderElementModel extends
|
||||
AssignedMaterialsModel<OrderElement, MaterialAssignment> implements
|
||||
IAssignedMaterialsToOrderElementModel {
|
||||
|
||||
@Autowired
|
||||
private IMaterialCategoryDAO categoryDAO;
|
||||
|
||||
@Autowired
|
||||
private IMaterialDAO materialDAO;
|
||||
|
||||
@Autowired
|
||||
private IOrderElementDAO orderElementDAO;
|
||||
|
||||
private OrderElement orderElement;
|
||||
|
||||
private MutableTreeModel<MaterialCategory> materialCategories = MutableTreeModel
|
||||
.create(MaterialCategory.class);
|
||||
|
||||
private MutableTreeModel<MaterialCategory> allMaterialCategories = MutableTreeModel
|
||||
.create(MaterialCategory.class);
|
||||
|
||||
private List<Material> matchingMaterials = new ArrayList<Material>();
|
||||
@Override
|
||||
protected void assignAndReattach(OrderElement element) {
|
||||
this.orderElement = element;
|
||||
orderElementDAO.reattach(this.orderElement);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public void initEdit(OrderElement orderElement) {
|
||||
this.orderElement = orderElement;
|
||||
orderElementDAO.reattach(this.orderElement);
|
||||
materialCategories = MutableTreeModel.create(MaterialCategory.class);
|
||||
protected void initializeMaterialAssigments() {
|
||||
initializeMaterialAssigments(this.orderElement.getMaterialAssignments());
|
||||
|
||||
// Initialize matching materials
|
||||
matchingMaterials.clear();
|
||||
matchingMaterials.addAll(materialDAO.getAll());
|
||||
initializeMaterials(matchingMaterials);
|
||||
}
|
||||
|
||||
private void initializeMaterialAssigments(
|
||||
|
|
@ -90,123 +69,27 @@ public class AssignedMaterialsToOrderElementModel implements
|
|||
}
|
||||
}
|
||||
|
||||
@Transactional(readOnly = true)
|
||||
private void initializeMaterialCategories(
|
||||
Collection<MaterialCategory> materialCategories) {
|
||||
for (MaterialCategory each : materialCategories) {
|
||||
initializeMaterialCategory(each);
|
||||
}
|
||||
}
|
||||
|
||||
private void initializeMaterialCategory(MaterialCategory materialCategory) {
|
||||
materialCategory.getName();
|
||||
initializeMaterials(materialCategory.getMaterials());
|
||||
initializeMaterialCategories(materialCategory.getSubcategories());
|
||||
}
|
||||
|
||||
private void initializeMaterials(Collection<Material> materials) {
|
||||
for (Material each : materials) {
|
||||
initializeMaterial(each);
|
||||
}
|
||||
}
|
||||
|
||||
private void initializeMaterial(Material material) {
|
||||
material.getDescription();
|
||||
material.getCategory().getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public OrderElement getOrderElement() {
|
||||
return orderElement;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public MutableTreeModel<MaterialCategory> getMaterialCategories() {
|
||||
if (orderElement != null && materialCategories.isEmpty()) {
|
||||
feedTree(materialCategories, orderElement.getMaterialAssignments());
|
||||
initializeMaterialCategories(materialCategories.asList());
|
||||
}
|
||||
return materialCategories;
|
||||
}
|
||||
|
||||
private void feedTree(MutableTreeModel<MaterialCategory> tree,
|
||||
Set<MaterialAssignment> materialAssignments) {
|
||||
for (MaterialAssignment each : materialAssignments) {
|
||||
final Material material = (Material) each.getMaterial();
|
||||
addCategory(tree, material.getCategory());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds category to treeModel
|
||||
*
|
||||
* If category.parent is not in treeModel add it to treeModel recursively.
|
||||
*
|
||||
*/
|
||||
private void addCategory(
|
||||
MutableTreeModel<MaterialCategory> materialCategories,
|
||||
MaterialCategory materialCategory) {
|
||||
|
||||
categoryDAO.reattach(materialCategory);
|
||||
final MaterialCategory parent = materialCategory.getParent();
|
||||
if (parent == null) {
|
||||
if (!materialCategories.contains(parent, materialCategory)) {
|
||||
materialCategories.addToRoot(materialCategory);
|
||||
}
|
||||
} else {
|
||||
if (!materialCategories.contains(parent, materialCategory)) {
|
||||
addCategory(materialCategories, parent);
|
||||
materialCategories.add(parent, materialCategory);
|
||||
}
|
||||
}
|
||||
protected List<MaterialAssignment> getAssignments() {
|
||||
return new ArrayList<MaterialAssignment>(orderElement
|
||||
.getMaterialAssignments());
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public TreeModel getAllMaterialCategories() {
|
||||
if (allMaterialCategories.isEmpty()) {
|
||||
feedTree(allMaterialCategories, categoryDAO.getAll());
|
||||
initializeMaterialCategories(allMaterialCategories.asList());
|
||||
}
|
||||
return allMaterialCategories;
|
||||
}
|
||||
|
||||
private void feedTree(MutableTreeModel<MaterialCategory> tree,
|
||||
List<MaterialCategory> materialCategories) {
|
||||
for (MaterialCategory each : materialCategories) {
|
||||
addCategory(tree, each);
|
||||
}
|
||||
protected Material getMaterial(MaterialAssignment assignment) {
|
||||
return assignment.getMaterial();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MaterialAssignment> getAssignedMaterials(
|
||||
MaterialCategory materialCategory) {
|
||||
List<MaterialAssignment> result = new ArrayList<MaterialAssignment>();
|
||||
if (orderElement != null) {
|
||||
for (MaterialAssignment materialAssigment : orderElement
|
||||
.getMaterialAssignments()) {
|
||||
final Material material = materialAssigment.getMaterial();
|
||||
if (materialCategory == null
|
||||
|| materialCategory.getId().equals(material.getCategory().getId())) {
|
||||
result.add(materialAssigment);
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public void searchMaterials(String text, MaterialCategory materialCategory) {
|
||||
matchingMaterials = materialDAO
|
||||
.findMaterialsInCategoryAndSubCategories(text, materialCategory);
|
||||
initializeMaterials(matchingMaterials);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Material> getMatchingMaterials() {
|
||||
return matchingMaterials;
|
||||
protected MaterialCategory removeAssignment(
|
||||
MaterialAssignment materialAssignment) {
|
||||
orderElement.removeMaterialAssignment(materialAssignment);
|
||||
return materialAssignment.getMaterial().getCategory();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -219,51 +102,15 @@ public class AssignedMaterialsToOrderElementModel implements
|
|||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public void addMaterialAssignment(MaterialAssignment materialAssignment) {
|
||||
protected MaterialCategory addAssignment(
|
||||
MaterialAssignment materialAssignment) {
|
||||
orderElement.addMaterialAssignment(materialAssignment);
|
||||
// Add material category to materialCategories tree
|
||||
final MaterialCategory materialCategory = materialAssignment.getMaterial().getCategory();
|
||||
addCategory(materialCategories, materialCategory);
|
||||
return materialAssignment.getMaterial().getCategory();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public void removeMaterialAssignment(MaterialAssignment materialAssignment) {
|
||||
orderElement.removeMaterialAssignment(materialAssignment);
|
||||
// Remove material category from materialCategories tree
|
||||
final MaterialCategory materialCategory = materialAssignment.getMaterial().getCategory();
|
||||
removeCategory(materialCategories, materialCategory);
|
||||
}
|
||||
|
||||
private void removeCategory(
|
||||
MutableTreeModel<MaterialCategory> materialCategories,
|
||||
MaterialCategory materialCategory) {
|
||||
|
||||
categoryDAO.reattach(materialCategory);
|
||||
final boolean canDelete = materialCategory.getSubcategories().isEmpty() && getAssignedMaterials(materialCategory).isEmpty();
|
||||
if (canDelete) {
|
||||
materialCategories.remove(materialCategory);
|
||||
final MaterialCategory parent = materialCategory.getParent();
|
||||
if (parent != null) {
|
||||
removeCategory(materialCategories, parent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getUnits(MaterialCategory materialCategory) {
|
||||
double result = 0;
|
||||
if (orderElement != null) {
|
||||
for (MaterialAssignment materialAssignment : orderElement
|
||||
.getMaterialAssignments()) {
|
||||
final Material material = materialAssignment.getMaterial();
|
||||
if (materialCategory.equals(material.getCategory())) {
|
||||
result += materialAssignment.getUnits();
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
protected Double getUnits(MaterialAssignment assigment) {
|
||||
return assigment.getUnits();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -281,4 +128,14 @@ public class AssignedMaterialsToOrderElementModel implements
|
|||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected BigDecimal getTotalPrice(MaterialAssignment materialAssignment) {
|
||||
return materialAssignment.getTotalPrice();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isInitialized() {
|
||||
return orderElement != null;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue