From f85fc260af6c44032950281c8c73cd24515dfd3a Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Wed, 3 Feb 2010 20:56:57 +0100 Subject: [PATCH] ItEr46S16CUCalculoAvancesConFormularioCalidadeItEr45S22: Reporting advances from quality forms. --- .../bootstrap/PredefinedAdvancedTypes.java | 21 +++-- .../advance/entities/AdvanceType.java | 49 ++++++++++-- .../orders/entities/OrderElement.java | 11 +++ .../business/orders/entities/OrderLine.java | 7 +- .../orders/entities/OrderLineGroup.java | 7 +- .../qualityforms/daos/QualityFormDAO.java | 29 +++++++ .../qualityforms/entities/QualityForm.java | 34 ++++++++ .../entities/TaskQualityForm.java | 18 ++++- .../business/advance/entities/Advance.hbm.xml | 2 + .../entities/QualityForms.hbm.xml | 9 +++ ...kQualityFormsToOrderElementController.java | 45 +++++++++++ ...edTaskQualityFormsToOrderElementModel.java | 79 +++++++++++++++++++ ...edTaskQualityFormsToOrderElementModel.java | 11 +++ .../IManageOrderElementAdvancesModel.java | 2 + .../ManageOrderElementAdvancesController.java | 22 ++++-- .../ManageOrderElementAdvancesModel.java | 23 ++++-- .../_listOrderElementTaskQualityForms.zul | 1 + .../webapp/qualityforms/_editQualityForm.zul | 4 + 18 files changed, 335 insertions(+), 39 deletions(-) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/advance/bootstrap/PredefinedAdvancedTypes.java b/navalplanner-business/src/main/java/org/navalplanner/business/advance/bootstrap/PredefinedAdvancedTypes.java index 0ad3227b2..942abe377 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/advance/bootstrap/PredefinedAdvancedTypes.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/advance/bootstrap/PredefinedAdvancedTypes.java @@ -29,19 +29,24 @@ import org.navalplanner.business.common.Registry; public enum PredefinedAdvancedTypes { - CHILDREN(_("children"), new BigDecimal(100), new BigDecimal(0.01), true), PERCENTAGE( - _("percentage"), new BigDecimal(100), new BigDecimal(0.01), true), UNITS( - _("units"), new BigDecimal(Integer.MAX_VALUE), new BigDecimal(1), - false), SUBCONTRACTOR(_("subcontractor"), new BigDecimal(100), - new BigDecimal(0.01), true); + CHILDREN(_("children"), new BigDecimal(100), new BigDecimal(0.01), true, + false), + PERCENTAGE(_("percentage"), new BigDecimal(100), + new BigDecimal(0.01), true, false), + UNITS(_("units"), + new BigDecimal(Integer.MAX_VALUE), new BigDecimal(1), false, false), + SUBCONTRACTOR( + _("subcontractor"), new BigDecimal(100), new BigDecimal(0.01), + true, false); private PredefinedAdvancedTypes(String name, BigDecimal defaultMaxValue, - BigDecimal precision, boolean percentage) { + BigDecimal precision, boolean percentage, boolean qualityForm) { this.name = name; this.defaultMaxValue = defaultMaxValue.setScale(4, BigDecimal.ROUND_HALF_UP); this.unitPrecision = precision.setScale(4, BigDecimal.ROUND_HALF_UP); this.percentage = percentage; + this.qualityForm = qualityForm; } private final String name; @@ -52,9 +57,11 @@ public enum PredefinedAdvancedTypes { private final boolean percentage; + private final boolean qualityForm; + public AdvanceType createType() { return AdvanceType.create(name, defaultMaxValue, false, unitPrecision, - true, percentage); + true, percentage, qualityForm); } public String getTypeName() { diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/advance/entities/AdvanceType.java b/navalplanner-business/src/main/java/org/navalplanner/business/advance/entities/AdvanceType.java index a2e89abda..cd4a7313d 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/advance/entities/AdvanceType.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/advance/entities/AdvanceType.java @@ -20,8 +20,12 @@ package org.navalplanner.business.advance.entities; +import static org.navalplanner.business.i18n.I18nHelper._; + import java.math.BigDecimal; +import org.apache.commons.lang.BooleanUtils; +import org.hibernate.validator.AssertTrue; import org.hibernate.validator.NotEmpty; import org.hibernate.validator.NotNull; import org.navalplanner.business.common.BaseEntity; @@ -42,10 +46,16 @@ public class AdvanceType extends BaseEntity { public static AdvanceType create(String unitName, BigDecimal defaultMaxValue, boolean updatable, BigDecimal unitPrecision, boolean active, boolean percentage) { - AdvanceType advanceType = new AdvanceType(unitName, defaultMaxValue, updatable, - unitPrecision, active, percentage); - advanceType.setNewObject(true); - return advanceType; + return create(unitName, defaultMaxValue, updatable, unitPrecision, + active, percentage, false); + } + + public static AdvanceType create(String unitName, + BigDecimal defaultMaxValue, boolean updatable, + BigDecimal unitPrecision, boolean active, boolean percentage, + boolean qualityForm) { + return create(new AdvanceType(unitName, defaultMaxValue, updatable, + unitPrecision, active, percentage, qualityForm)); } @NotEmpty @@ -66,6 +76,8 @@ public class AdvanceType extends BaseEntity { @NotNull private boolean percentage = false; + private Boolean qualityForm = false; + /** * Constructor for hibernate. Do not use! */ @@ -75,7 +87,7 @@ public class AdvanceType extends BaseEntity { private AdvanceType(String unitName, BigDecimal defaultMaxValue, boolean updatable, BigDecimal unitPrecision, boolean active, - boolean percentage) { + boolean percentage, boolean qualityForm) { this.unitName = unitName; this.percentage = percentage; setDefaultMaxValue(defaultMaxValue); @@ -84,6 +96,7 @@ public class AdvanceType extends BaseEntity { this.unitPrecision = unitPrecision; this.unitPrecision.setScale(4, BigDecimal.ROUND_HALF_UP); this.active = active; + this.qualityForm = qualityForm; } public void setUnitName(String unitName) { @@ -140,9 +153,12 @@ public class AdvanceType extends BaseEntity { public String getType() { if (isUpdatable()) { - return "De Usuario"; + return _("User"); } - return "Predefinido"; + if (isQualityForm()) { + return _("Quality form"); + } + return _("Predefined"); } public void doPropagateAdvaceToParent(OrderElement orderElement) { @@ -185,4 +201,23 @@ public class AdvanceType extends BaseEntity { return percentage; } + @NotNull(message = "quality form not specified") + public Boolean isQualityForm() { + return BooleanUtils.toBoolean(qualityForm); + } + + public void setQualityForm(Boolean qualityForm) { + this.qualityForm = BooleanUtils.toBoolean(qualityForm); + } + + @AssertTrue(message = "advance type marked as quality form but is updatable") + public boolean checkConstraintIfIsQualityFormIsNotUpdatable() { + if (isQualityForm()) { + if (isUpdatable()) { + return false; + } + } + return true; + } + } 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 e69b64437..c71de26cb 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 @@ -348,6 +348,16 @@ public abstract class OrderElement extends BaseEntity implements public abstract DirectAdvanceAssignment getAdvanceAssignmentByType(AdvanceType type); + public DirectAdvanceAssignment getDirectAdvanceAssignmentByType( + AdvanceType advanceType) { + for (DirectAdvanceAssignment directAdvanceAssignment : getDirectAdvanceAssignments()) { + if (directAdvanceAssignment.getAdvanceType().equals(advanceType)) { + return directAdvanceAssignment; + } + } + return null; + } + public Set getDirectAdvanceAssignments() { return Collections.unmodifiableSet(directAdvanceAssignments); } @@ -1035,4 +1045,5 @@ public abstract class OrderElement extends BaseEntity implements .multiply(new BigDecimal(100))); return (measuredProgress.compareTo(new BigDecimal(100)) == 0); } + } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java index 8ae69369b..0094966e1 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java @@ -505,12 +505,7 @@ public class OrderLine extends OrderElement { @Override public DirectAdvanceAssignment getAdvanceAssignmentByType(AdvanceType type) { - for (DirectAdvanceAssignment directAdvanceAssignment : getDirectAdvanceAssignments()) { - if (directAdvanceAssignment.getAdvanceType().equals(type)) { - return directAdvanceAssignment; - } - } - return null; + return getDirectAdvanceAssignmentByType(type); } public void incrementLastHoursGroupSequenceCode() { diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLineGroup.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLineGroup.java index bfca7a2ec..1a7254a71 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLineGroup.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLineGroup.java @@ -755,10 +755,9 @@ public class OrderLineGroup extends OrderElement implements } public DirectAdvanceAssignment getAdvanceAssignmentByType(AdvanceType type) { - for (DirectAdvanceAssignment each : getDirectAdvanceAssignments()) { - if (type != null && each.getAdvanceType().getId().equals(type.getId())) { - return each; - } + DirectAdvanceAssignment result = getDirectAdvanceAssignmentByType(type); + if (result != null) { + return result; } for (IndirectAdvanceAssignment each : getIndirectAdvanceAssignments()) { diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/daos/QualityFormDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/daos/QualityFormDAO.java index be42e5edb..2d117f5c0 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/daos/QualityFormDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/daos/QualityFormDAO.java @@ -20,16 +20,21 @@ package org.navalplanner.business.qualityforms.daos; +import java.math.BigDecimal; import java.util.List; import org.apache.commons.lang.Validate; import org.hibernate.Criteria; import org.hibernate.NonUniqueResultException; import org.hibernate.criterion.Restrictions; +import org.navalplanner.business.advance.daos.IAdvanceTypeDAO; +import org.navalplanner.business.advance.entities.AdvanceType; import org.navalplanner.business.common.daos.GenericDAOHibernate; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; +import org.navalplanner.business.common.exceptions.ValidationException; import org.navalplanner.business.qualityforms.entities.QualityForm; import org.navalplanner.business.qualityforms.entities.QualityFormType; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Repository; @@ -46,6 +51,9 @@ import org.springframework.transaction.annotation.Transactional; public class QualityFormDAO extends GenericDAOHibernate implements IQualityFormDAO { + @Autowired + private IAdvanceTypeDAO advanceTypeDAO; + @Override public List getAll() { return list(QualityForm.class); @@ -120,4 +128,25 @@ public class QualityFormDAO extends GenericDAOHibernate return existsOtherWorkReportTypeByName(qualityForm); } + @Override + public void save(QualityForm entity) throws ValidationException { + if (entity.isReportAdvance()) { + String name = QualityForm.ADVANCE_TYPE_PREFIX + entity.getName(); + + AdvanceType advanceType = entity.getAdvanceType(); + if (advanceType != null) { + advanceTypeDAO.save(advanceType); + advanceType.setUnitName(name); + } else { + advanceType = AdvanceType.create(name, new BigDecimal(100), + false, new BigDecimal(0.01), true, true, true); + advanceTypeDAO.save(advanceType); + + entity.setAdvanceType(advanceType); + } + } + + super.save(entity); + } + } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/QualityForm.java b/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/QualityForm.java index e5dcbbcdc..16303aab0 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/QualityForm.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/QualityForm.java @@ -28,12 +28,14 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import org.apache.commons.lang.BooleanUtils; import org.apache.commons.lang.Validate; import org.hibernate.NonUniqueResultException; import org.hibernate.validator.AssertTrue; import org.hibernate.validator.NotEmpty; import org.hibernate.validator.NotNull; import org.hibernate.validator.Valid; +import org.navalplanner.business.advance.entities.AdvanceType; import org.navalplanner.business.common.BaseEntity; import org.navalplanner.business.common.Registry; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; @@ -41,6 +43,8 @@ import org.navalplanner.business.qualityforms.daos.IQualityFormDAO; public class QualityForm extends BaseEntity { + public static final String ADVANCE_TYPE_PREFIX = "QF: "; + public static QualityForm create() { QualityForm qualityForm = new QualityForm(); qualityForm.setNewObject(true); @@ -70,6 +74,10 @@ public class QualityForm extends BaseEntity { private List qualityFormItems = new ArrayList(); + private Boolean reportAdvance = false; + + private AdvanceType advanceType; + @NotEmpty(message = "quality form name not specified") public String getName() { return name; @@ -375,4 +383,30 @@ public class QualityForm extends BaseEntity { return (position >= 0 && position < qualityFormItems.size()); } + @NotNull(message = "report advance not specified") + public Boolean isReportAdvance() { + return BooleanUtils.toBoolean(reportAdvance); + } + + public void setReportAdvance(Boolean reportAdvance) { + this.reportAdvance = BooleanUtils.toBoolean(reportAdvance); + } + + public AdvanceType getAdvanceType() { + return advanceType; + } + + public void setAdvanceType(AdvanceType advanceType) { + this.advanceType = advanceType; + } + + @AssertTrue(message = "advance type should not be null if report advance") + public boolean checkConstraintAdvanceTypeIsNotNullIfReportAdvance() { + if (advanceType == null) { + return !isReportAdvance(); + } else { + return isReportAdvance(); + } + } + } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/TaskQualityForm.java b/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/TaskQualityForm.java index 80cf86a0f..0133df036 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/TaskQualityForm.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/qualityforms/entities/TaskQualityForm.java @@ -5,6 +5,7 @@ import java.util.Collections; import java.util.Date; import java.util.List; +import org.apache.commons.lang.BooleanUtils; import org.apache.commons.lang.Validate; import org.hibernate.validator.AssertTrue; import org.hibernate.validator.NotNull; @@ -16,10 +17,7 @@ public class TaskQualityForm extends BaseEntity { public static TaskQualityForm create(OrderElement orderElement, QualityForm qualityForm) { - TaskQualityForm taskQualityForm = new TaskQualityForm(orderElement, - qualityForm); - taskQualityForm.setNewObject(true); - return taskQualityForm; + return create(new TaskQualityForm(orderElement, qualityForm)); } protected TaskQualityForm() { @@ -38,6 +36,8 @@ public class TaskQualityForm extends BaseEntity { private List taskQualityFormItems = new ArrayList(); + private Boolean reportAdvance = false; + @Valid public List getTaskQualityFormItems() { return Collections.unmodifiableList(taskQualityFormItems); @@ -146,4 +146,14 @@ public class TaskQualityForm extends BaseEntity { } return true; } + + @NotNull(message = "report advance not specified") + public Boolean isReportAdvance() { + return BooleanUtils.toBoolean(reportAdvance); + } + + public void setReportAdvance(Boolean reportAdvance) { + this.reportAdvance = BooleanUtils.toBoolean(reportAdvance); + } + } diff --git a/navalplanner-business/src/main/resources/org/navalplanner/business/advance/entities/Advance.hbm.xml b/navalplanner-business/src/main/resources/org/navalplanner/business/advance/entities/Advance.hbm.xml index 2cf962d2b..ce82461b8 100644 --- a/navalplanner-business/src/main/resources/org/navalplanner/business/advance/entities/Advance.hbm.xml +++ b/navalplanner-business/src/main/resources/org/navalplanner/business/advance/entities/Advance.hbm.xml @@ -17,6 +17,8 @@ + + diff --git a/navalplanner-business/src/main/resources/org/navalplanner/business/qualityforms/entities/QualityForms.hbm.xml b/navalplanner-business/src/main/resources/org/navalplanner/business/qualityforms/entities/QualityForms.hbm.xml index 0041b43f9..bfb325d62 100644 --- a/navalplanner-business/src/main/resources/org/navalplanner/business/qualityforms/entities/QualityForms.hbm.xml +++ b/navalplanner-business/src/main/resources/org/navalplanner/business/qualityforms/entities/QualityForms.hbm.xml @@ -29,6 +29,12 @@ + + + + + @@ -55,6 +61,9 @@ + + + diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedTaskQualityFormsToOrderElementController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedTaskQualityFormsToOrderElementController.java index 04a5cf2b3..ef94526ef 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedTaskQualityFormsToOrderElementController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedTaskQualityFormsToOrderElementController.java @@ -27,6 +27,8 @@ import java.util.List; import org.apache.commons.logging.LogFactory; import org.hibernate.validator.InvalidValue; +import org.navalplanner.business.advance.exceptions.DuplicateAdvanceAssignmentForOrderElementException; +import org.navalplanner.business.advance.exceptions.DuplicateValueTrueReportGlobalAdvanceException; import org.navalplanner.business.common.exceptions.ValidationException; import org.navalplanner.business.orders.entities.OrderElement; import org.navalplanner.business.qualityforms.entities.QualityForm; @@ -266,8 +268,50 @@ public class AssignedTaskQualityFormsToOrderElementController extends appendNewLabel(row, taskQualityForm.getQualityForm().getName()); appendNewLabel(row, taskQualityForm.getQualityForm() .getQualityFormType().toString()); + appendCheckboxReportAdvance(row, taskQualityForm); appendOperations(row); } + + private void appendCheckboxReportAdvance(Row row, + final TaskQualityForm taskQualityForm) { + final Checkbox tmpCheckbox = new Checkbox(); + Checkbox checkbox = Util.bind(tmpCheckbox, + new Util.Getter() { + @Override + public Boolean get() { + return taskQualityForm.isReportAdvance(); + } + }, new Util.Setter() { + @Override + public void set(Boolean value) { + try { + if (value) { + assignedTaskQualityFormsToOrderElementModel + .addAdvanceAssignmentIfNeeded(taskQualityForm); + } else { + assignedTaskQualityFormsToOrderElementModel + .removeAdvanceAssignmentIfNeeded(taskQualityForm); + } + + taskQualityForm.setReportAdvance(value); + } catch (DuplicateValueTrueReportGlobalAdvanceException e) { + throw new RuntimeException(e); + } catch (DuplicateAdvanceAssignmentForOrderElementException e) { + messages + .showMessage( + Level.ERROR, + _("Another order element in the same branch is already reporting advance for this quality form")); + tmpCheckbox.setChecked(false); + } + } + }); + + if (!taskQualityForm.getQualityForm().isReportAdvance()) { + checkbox.setDisabled(true); + } + + row.appendChild(checkbox); + } } private void appendDetails(Row row, TaskQualityForm taskQualityForm) { @@ -477,6 +521,7 @@ public class AssignedTaskQualityFormsToOrderElementController extends // Operations to confirm and validate public boolean confirm() { + assignedTaskQualityFormsToOrderElementModel.updateAdvancesIfNeeded(); validateConstraints(); return validate(); } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedTaskQualityFormsToOrderElementModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedTaskQualityFormsToOrderElementModel.java index fab5fdd35..f2caa24b3 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedTaskQualityFormsToOrderElementModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedTaskQualityFormsToOrderElementModel.java @@ -22,11 +22,20 @@ package org.navalplanner.web.orders; import static org.navalplanner.web.I18nHelper._; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.hibernate.validator.InvalidValue; +import org.joda.time.LocalDate; +import org.navalplanner.business.advance.daos.IAdvanceTypeDAO; +import org.navalplanner.business.advance.entities.AdvanceAssignment; +import org.navalplanner.business.advance.entities.AdvanceMeasurement; +import org.navalplanner.business.advance.entities.AdvanceType; +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.common.exceptions.ValidationException; import org.navalplanner.business.orders.daos.IOrderElementDAO; import org.navalplanner.business.orders.entities.OrderElement; @@ -58,6 +67,9 @@ public class AssignedTaskQualityFormsToOrderElementModel implements private IOrderModel orderModel; + @Autowired + private IAdvanceTypeDAO advanceTypeDAO; + @Override public OrderElement getOrderElement() { return orderElement; @@ -257,4 +269,71 @@ public class AssignedTaskQualityFormsToOrderElementModel implements } } + @Override + @Transactional(readOnly = true) + public void addAdvanceAssignmentIfNeeded(TaskQualityForm taskQualityForm) + throws DuplicateValueTrueReportGlobalAdvanceException, + DuplicateAdvanceAssignmentForOrderElementException { + AdvanceType advanceType = taskQualityForm.getQualityForm() + .getAdvanceType(); + advanceTypeDAO.reattach(advanceType); + AdvanceAssignment advanceAssignment = taskQualityForm.getOrderElement() + .getDirectAdvanceAssignmentByType(advanceType); + + if (advanceAssignment == null) { + DirectAdvanceAssignment newAdvanceAssignment = DirectAdvanceAssignment + .create(false, new BigDecimal(100)); + newAdvanceAssignment.setAdvanceType(advanceType); + taskQualityForm.getOrderElement().addAdvanceAssignment( + newAdvanceAssignment); + addAdvanceMeasurements(taskQualityForm, newAdvanceAssignment); + } + } + + private void addAdvanceMeasurements(TaskQualityForm taskQualityForm, + DirectAdvanceAssignment newAdvanceAssignment) { + for (TaskQualityFormItem taskQualityFormItem : taskQualityForm + .getTaskQualityFormItems()) { + if (taskQualityFormItem.getPassed() + && (taskQualityFormItem.getDate() != null)) { + LocalDate date = LocalDate + .fromDateFields(taskQualityFormItem.getDate()); + BigDecimal value = taskQualityFormItem.getPercentage(); + newAdvanceAssignment + .addAdvanceMeasurements(AdvanceMeasurement + .create(date, value)); + } + } + } + + @Override + @Transactional(readOnly = true) + public void removeAdvanceAssignmentIfNeeded(TaskQualityForm taskQualityForm) { + AdvanceType advanceType = taskQualityForm.getQualityForm() + .getAdvanceType(); + advanceTypeDAO.reattach(advanceType); + AdvanceAssignment advanceAssignment = taskQualityForm.getOrderElement() + .getDirectAdvanceAssignmentByType(advanceType); + + if (advanceAssignment != null) { + taskQualityForm.getOrderElement().removeAdvanceAssignment( + advanceAssignment); + } + } + + @Override + public void updateAdvancesIfNeeded() { + if (orderElement != null) { + for (TaskQualityForm taskQualityForm : getTaskQualityForms()) { + if (taskQualityForm.isReportAdvance()) { + DirectAdvanceAssignment advanceAssignment = orderElement + .getAdvanceAssignmentByType(taskQualityForm + .getQualityForm().getAdvanceType()); + advanceAssignment.getAdvanceMeasurements().clear(); + addAdvanceMeasurements(taskQualityForm, advanceAssignment); + } + } + } + } + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IAssignedTaskQualityFormsToOrderElementModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IAssignedTaskQualityFormsToOrderElementModel.java index e737a231e..44c3edbad 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IAssignedTaskQualityFormsToOrderElementModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IAssignedTaskQualityFormsToOrderElementModel.java @@ -22,6 +22,8 @@ package org.navalplanner.web.orders; import java.util.List; +import org.navalplanner.business.advance.exceptions.DuplicateAdvanceAssignmentForOrderElementException; +import org.navalplanner.business.advance.exceptions.DuplicateValueTrueReportGlobalAdvanceException; import org.navalplanner.business.orders.entities.OrderElement; import org.navalplanner.business.qualityforms.entities.QualityForm; import org.navalplanner.business.qualityforms.entities.QualityFormItem; @@ -123,4 +125,13 @@ public interface IAssignedTaskQualityFormsToOrderElementModel { * @param */ void validate(); + + void addAdvanceAssignmentIfNeeded(TaskQualityForm taskQualityForm) + throws DuplicateValueTrueReportGlobalAdvanceException, + DuplicateAdvanceAssignmentForOrderElementException; + + void removeAdvanceAssignmentIfNeeded(TaskQualityForm taskQualityForm); + + void updateAdvancesIfNeeded(); + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IManageOrderElementAdvancesModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IManageOrderElementAdvancesModel.java index 8131c134f..2a6d38dd7 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IManageOrderElementAdvancesModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IManageOrderElementAdvancesModel.java @@ -96,4 +96,6 @@ public interface IManageOrderElementAdvancesModel { public void refreshChangesFromOrderElement(); + public boolean isQualityForm(AdvanceAssignment advance); + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/ManageOrderElementAdvancesController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/ManageOrderElementAdvancesController.java index eb8f12dcd..3b55e2242 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/ManageOrderElementAdvancesController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/ManageOrderElementAdvancesController.java @@ -237,14 +237,21 @@ public class ManageOrderElementAdvancesController extends listItem.setDraggable("true"); listItem.setDroppable("true"); + boolean isQualityForm = false; + if (advance.getAdvanceType() != null) { + isQualityForm = manageOrderElementAdvancesModel + .isQualityForm(advance); + } + if ((advance instanceof DirectAdvanceAssignment) && ((DirectAdvanceAssignment) advance) - .getAdvanceMeasurements().isEmpty()) { + .getAdvanceMeasurements().isEmpty() + && !isQualityForm) { appendComboboxAdvancType(listItem); } else { appendLabelAdvanceType(listItem); } - appendDecimalBoxMaxValue(listItem); + appendDecimalBoxMaxValue(listItem, isQualityForm); appendDecimalBoxValue(listItem); appendLabelPercentage(listItem); appendDateBoxDate(listItem); @@ -263,7 +270,8 @@ public class ManageOrderElementAdvancesController extends .getPossibleAdvanceTypes(advance); for(AdvanceType advanceType : listAdvanceType){ if (!advanceType.getUnitName().equals( - PredefinedAdvancedTypes.CHILDREN.getTypeName())) { + PredefinedAdvancedTypes.CHILDREN.getTypeName()) + && !advanceType.isQualityForm()) { Comboitem comboItem = new Comboitem(); comboItem.setValue(advanceType); comboItem.setLabel(advanceType.getUnitName()); @@ -324,15 +332,19 @@ public class ManageOrderElementAdvancesController extends listItem.appendChild(listCell); } - private void appendDecimalBoxMaxValue(final Listitem listItem){ + private void appendDecimalBoxMaxValue(final Listitem listItem, + boolean isQualityForm) { AdvanceAssignment advanceAssignment = (AdvanceAssignment) listItem .getValue(); Decimalbox maxValue = new Decimalbox(); maxValue.setScale(2); final DirectAdvanceAssignment directAdvanceAssignment; - if (advanceAssignment instanceof IndirectAdvanceAssignment) { + if ((advanceAssignment instanceof IndirectAdvanceAssignment) + || isQualityForm) { maxValue.setDisabled(true); + } + if (advanceAssignment instanceof IndirectAdvanceAssignment) { directAdvanceAssignment = manageOrderElementAdvancesModel .calculateFakeDirectAdvanceAssignment((IndirectAdvanceAssignment) advanceAssignment); } else { diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/ManageOrderElementAdvancesModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/ManageOrderElementAdvancesModel.java index 14c4d912f..261269787 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/ManageOrderElementAdvancesModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/ManageOrderElementAdvancesModel.java @@ -136,12 +136,7 @@ public class ManageOrderElementAdvancesModel implements @Override public void refreshChangesFromOrderElement() { - for (IndirectAdvanceAssignment each : orderElement - .getIndirectAdvanceAssignments()) { - if (!listAdvanceAssignments.contains(each)) { - listAdvanceAssignments.add(each); - } - } + fillVariables(); } @Override @@ -288,6 +283,14 @@ public class ManageOrderElementAdvancesModel implements if (this.advanceAssignment == null) { return true; } + + AdvanceType advanceType = this.advanceAssignment.getAdvanceType(); + if (advanceType != null) { + if (advanceType.isQualityForm()) { + return true; + } + } + return this.isIndirectAdvanceAssignment; } @@ -551,4 +554,12 @@ public class ManageOrderElementAdvancesModel implements return xymodel; } + @Override + @Transactional(readOnly = true) + public boolean isQualityForm(AdvanceAssignment advance) { + AdvanceType advanceType = advance.getAdvanceType(); + advanceTypeDAO.reattach(advanceType); + return advanceType.isQualityForm(); + } + } diff --git a/navalplanner-webapp/src/main/webapp/orders/_listOrderElementTaskQualityForms.zul b/navalplanner-webapp/src/main/webapp/orders/_listOrderElementTaskQualityForms.zul index 019cb8e00..3b7da1136 100644 --- a/navalplanner-webapp/src/main/webapp/orders/_listOrderElementTaskQualityForms.zul +++ b/navalplanner-webapp/src/main/webapp/orders/_listOrderElementTaskQualityForms.zul @@ -45,6 +45,7 @@ + diff --git a/navalplanner-webapp/src/main/webapp/qualityforms/_editQualityForm.zul b/navalplanner-webapp/src/main/webapp/qualityforms/_editQualityForm.zul index f43ef15d0..469d69686 100644 --- a/navalplanner-webapp/src/main/webapp/qualityforms/_editQualityForm.zul +++ b/navalplanner-webapp/src/main/webapp/qualityforms/_editQualityForm.zul @@ -55,6 +55,10 @@ onSelect="controller.changeQualityFormType();" selectedItem="@{controller.qualityForm.qualityFormType}"/> + +