From 37858bb4912aec82972d28a3a889d5908027d234 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lorenzo=20Tilve=20=C3=81lvaro?= Date: Mon, 17 Jun 2013 19:44:19 +0200 Subject: [PATCH] Implemented method to obtain criterion cost on HourCostDAO FEA: ItEr77S17AutomaticBudgeting Several components were using Criteria collections not initialized on the planning state, so when adding dinamically new CriterionRequirements or HourGroups the group hours were not attached. --- .../costcategories/daos/HourCostDAO.java | 16 +++++++++ .../costcategories/daos/IHourCostDAO.java | 2 ++ .../orders/entities/OrderElement.java | 33 ++++++++----------- 3 files changed, 32 insertions(+), 19 deletions(-) diff --git a/libreplan-business/src/main/java/org/libreplan/business/costcategories/daos/HourCostDAO.java b/libreplan-business/src/main/java/org/libreplan/business/costcategories/daos/HourCostDAO.java index 7a576a373..a8d5ba94f 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/costcategories/daos/HourCostDAO.java +++ b/libreplan-business/src/main/java/org/libreplan/business/costcategories/daos/HourCostDAO.java @@ -27,8 +27,10 @@ import org.hibernate.Query; import org.joda.time.LocalDate; import org.libreplan.business.common.daos.IntegrationEntityDAO; import org.libreplan.business.common.exceptions.InstanceNotFoundException; +import org.libreplan.business.costcategories.entities.CostCategory; import org.libreplan.business.costcategories.entities.HourCost; import org.libreplan.business.costcategories.entities.TypeOfWorkHours; +import org.libreplan.business.resources.entities.Criterion; import org.libreplan.business.resources.entities.Resource; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; @@ -78,4 +80,18 @@ public class HourCostDAO extends IntegrationEntityDAO implements return (BigDecimal) query.uniqueResult(); } + @Override + @Transactional(readOnly = true) + public BigDecimal getPriceCostFromCriterionAndType(CostCategory category, + TypeOfWorkHours type) { + + String strQuery = "SELECT priceCost " + "FROM HourCost " + + "WHERE category = :category" + " AND type = :type "; + Query query = getSession().createQuery(strQuery); + query.setParameter("category", category); + query.setParameter("type", type); + + return (BigDecimal) query.uniqueResult(); + } + } \ No newline at end of file diff --git a/libreplan-business/src/main/java/org/libreplan/business/costcategories/daos/IHourCostDAO.java b/libreplan-business/src/main/java/org/libreplan/business/costcategories/daos/IHourCostDAO.java index e631d9636..60bf4684b 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/costcategories/daos/IHourCostDAO.java +++ b/libreplan-business/src/main/java/org/libreplan/business/costcategories/daos/IHourCostDAO.java @@ -60,4 +60,6 @@ public interface IHourCostDAO extends IIntegrationEntityDAO { BigDecimal getPriceCostFromResourceDateAndType(Resource resource, LocalDate date, TypeOfWorkHours type); + public BigDecimal getPriceCostFromCriterionAndType( + CostCategory category, TypeOfWorkHours type); } diff --git a/libreplan-business/src/main/java/org/libreplan/business/orders/entities/OrderElement.java b/libreplan-business/src/main/java/org/libreplan/business/orders/entities/OrderElement.java index 1c7f75689..6c1730427 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/orders/entities/OrderElement.java +++ b/libreplan-business/src/main/java/org/libreplan/business/orders/entities/OrderElement.java @@ -57,6 +57,7 @@ import org.libreplan.business.common.entities.Configuration; import org.libreplan.business.common.entities.PredefinedConnectorProperties; import org.libreplan.business.common.exceptions.InstanceNotFoundException; import org.libreplan.business.common.exceptions.ValidationException; +import org.libreplan.business.costcategories.daos.IHourCostDAO; import org.libreplan.business.costcategories.entities.CostCategory; import org.libreplan.business.costcategories.entities.TypeOfWorkHours; import org.libreplan.business.labels.entities.Label; @@ -72,6 +73,7 @@ import org.libreplan.business.qualityforms.entities.TaskQualityForm; import org.libreplan.business.requirements.entities.CriterionRequirement; import org.libreplan.business.requirements.entities.DirectCriterionRequirement; import org.libreplan.business.requirements.entities.IndirectCriterionRequirement; +import org.libreplan.business.resources.daos.ICriterionDAO; import org.libreplan.business.resources.entities.Criterion; import org.libreplan.business.scenarios.entities.OrderVersion; import org.libreplan.business.scenarios.entities.Scenario; @@ -1705,8 +1707,7 @@ public abstract class OrderElement extends IntegrationEntity implements public BigDecimal getResourcesBudget() { BigDecimal result = new BigDecimal(0); - Configuration configuration = Registry - .getConfigurationDAO() + Configuration configuration = Registry.getConfigurationDAO() .getConfiguration(); if (configuration == null) { return result; @@ -1736,23 +1737,20 @@ public abstract class OrderElement extends IntegrationEntity implements return totalBudget; } - // FIXME: This workarounds LazyException when adding new - // criteria but disables the refresh on changes BigDecimal costPerHour = new BigDecimal(0); BigDecimal hours = new BigDecimal(0); for (CriterionRequirement requirement : getCriterionRequirements()) { hours = new BigDecimal(getWorkHours()); - try { if (requirement.getCriterion().getCostCategory() != null) { - costPerHour = requirement.getCriterion().getCostCategory() - .getHourCostByCode(typeofWorkHours.getCode()) - .getPriceCost(); + + IHourCostDAO hourCostDAO = Registry.getHourCostDAO(); + costPerHour = hourCostDAO.getPriceCostFromCriterionAndType( + requirement.getCriterion().getCostCategory(), + typeofWorkHours); + totalBudget = totalBudget.add(costPerHour.multiply(hours)); } - } catch (InstanceNotFoundException e) { - // Nothing to do, the budget is kept to 0 - } } for (HoursGroup hoursGroup : getHoursGroups()) { @@ -1763,14 +1761,11 @@ public abstract class OrderElement extends IntegrationEntity implements CostCategory costcat = crit.getCriterion().getCostCategory(); if (costcat != null) { - try { - costPerHour = costcat - .getPriceCostByTypeOfWorkHour(typeofWorkHours - .getCode()); - } catch (InstanceNotFoundException e) { - // Default values to 0 - costPerHour = new BigDecimal(0); - } + + IHourCostDAO hourCostDAO = Registry.getHourCostDAO(); + costPerHour = hourCostDAO.getPriceCostFromCriterionAndType( + costcat, typeofWorkHours); + } totalBudget = totalBudget.add(costPerHour.multiply(hours)); }