From abe3dc55bc72d520b19d4095ef740206e94ab80c Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Wed, 31 Aug 2011 09:19:55 +0200 Subject: [PATCH 01/11] Change numHours to effort in WorkReportLine Now it's using EffortDuration to store hours, for the moment previous methods to manage numHours are kept and marked as deprecated. Based on a patch by Ignacio Diaz Teijido FEA: ItEr75S22WortReportsEffortDuration --- .../workreports/entities/WorkReportLine.java | 70 +++++++++++++------ .../src/main/resources/db.changelog-1.1.xml | 12 ++++ .../workreports/entities/WorkReports.hbm.xml | 2 +- 3 files changed, 60 insertions(+), 24 deletions(-) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/workreports/entities/WorkReportLine.java b/navalplanner-business/src/main/java/org/navalplanner/business/workreports/entities/WorkReportLine.java index 68b890646..7a5365549 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/workreports/entities/WorkReportLine.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/workreports/entities/WorkReportLine.java @@ -29,9 +29,9 @@ import org.apache.commons.lang.StringUtils; import org.hibernate.validator.AssertTrue; import org.hibernate.validator.NotNull; import org.hibernate.validator.Valid; -import org.joda.time.Hours; import org.joda.time.LocalDate; import org.joda.time.LocalTime; +import org.joda.time.Seconds; import org.navalplanner.business.common.IntegrationEntity; import org.navalplanner.business.common.Registry; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; @@ -40,6 +40,7 @@ import org.navalplanner.business.labels.entities.Label; import org.navalplanner.business.labels.entities.LabelType; import org.navalplanner.business.orders.entities.OrderElement; import org.navalplanner.business.resources.entities.Resource; +import org.navalplanner.business.workingday.EffortDuration; import org.navalplanner.business.workreports.daos.IWorkReportLineDAO; import org.navalplanner.business.workreports.valueobjects.DescriptionField; import org.navalplanner.business.workreports.valueobjects.DescriptionValue; @@ -56,13 +57,14 @@ public class WorkReportLine extends IntegrationEntity implements Comparable { return create(new WorkReportLine(workReport)); } - public static WorkReportLine create(Integer numHours, Resource resource, + public static WorkReportLine create(EffortDuration effort, + Resource resource, OrderElement orderElement, WorkReport workReport) { - return create(new WorkReportLine(numHours, resource, orderElement, + return create(new WorkReportLine(effort, resource, orderElement, workReport)); } - private Integer numHours; + private EffortDuration effort; private Date date; @@ -92,26 +94,26 @@ public class WorkReportLine extends IntegrationEntity implements Comparable { this.setWorkReport(workReport); } - private WorkReportLine(Integer numHours, Resource resource, + private WorkReportLine(EffortDuration effort, Resource resource, OrderElement orderElement, WorkReport workReport) { this(workReport); - this.numHours = numHours; + this.effort = effort; this.resource = resource; this.orderElement = orderElement; } - @NotNull(message = "number of hours not specified") - public Integer getNumHours() { - return numHours; + @NotNull(message = "effort not specified") + public EffortDuration getEffort() { + return effort; } - public void setNumHours(Integer numHours) { - this.numHours = numHours; + public void setEffort(EffortDuration effort) { + this.effort = effort; if ((workReport != null) && (workReport.getWorkReportType() != null) && (workReport.getWorkReportType().getHoursManagement() .equals(HoursManagementEnum.HOURS_CALCULATED_BY_CLOCK))) { - this.numHours = getDiferenceBetweenTimeStartAndFinish(); + this.effort = getDiferenceBetweenTimeStartAndFinish(); } } @@ -127,7 +129,7 @@ public class WorkReportLine extends IntegrationEntity implements Comparable { public void setClockFinish(LocalTime clockFinish) { this.clockFinish = clockFinish; - updateNumHours(); + updateEffort(); } public LocalTime getClockStart() { @@ -142,7 +144,7 @@ public class WorkReportLine extends IntegrationEntity implements Comparable { public void setClockStart(LocalTime clockStart) { this.clockStart = clockStart; - updateNumHours(); + updateEffort(); } @NotNull(message = "date not specified") @@ -216,8 +218,8 @@ public class WorkReportLine extends IntegrationEntity implements Comparable { // copy the required fields if these are shared by lines updatesAllSharedDataByLines(); - // update calculated hours - updateNumHours(); + // update calculated effort + updateEffort(); } @Valid @@ -260,7 +262,7 @@ public class WorkReportLine extends IntegrationEntity implements Comparable { return true; } - @AssertTrue(message = "closckFinish:the clockStart must be not null if number of hours is calcultate by clock") + @AssertTrue(message = "clockFinish:the clockStart must be not null if number of hours is calcultate by clock") public boolean checkConstraintClockFinishMustBeNotNullIfIsCalculatedByClock() { if (!firstLevelValidationsPassed()) { return true; @@ -375,18 +377,19 @@ public class WorkReportLine extends IntegrationEntity implements Comparable { } } - private void updateNumHours() { + private void updateEffort() { if ((workReport != null) && (workReport.getWorkReportType() != null) && workReport.getWorkReportType().getHoursManagement().equals( HoursManagementEnum.HOURS_CALCULATED_BY_CLOCK)) { - setNumHours(getDiferenceBetweenTimeStartAndFinish()); + setEffort(getDiferenceBetweenTimeStartAndFinish()); } } - private Integer getDiferenceBetweenTimeStartAndFinish() { + private EffortDuration getDiferenceBetweenTimeStartAndFinish() { if ((clockStart != null) && (clockFinish != null)) { - return Hours.hoursBetween(clockStart, clockFinish).getHours(); + return EffortDuration.seconds(Seconds.secondsBetween(clockStart, + clockFinish).getSeconds()); } return null; } @@ -429,7 +432,7 @@ public class WorkReportLine extends IntegrationEntity implements Comparable { if (workReport.getWorkReportType().getHoursManagement().equals( HoursManagementEnum.HOURS_CALCULATED_BY_CLOCK)) { - if (getDiferenceBetweenTimeStartAndFinish().compareTo(numHours) != 0) { + if (getDiferenceBetweenTimeStartAndFinish().compareTo(effort) != 0) { return false; } } @@ -438,7 +441,7 @@ public class WorkReportLine extends IntegrationEntity implements Comparable { private boolean firstLevelValidationsPassed() { return (workReport != null) && (typeOfWorkHours != null) - && (numHours != null) && (date != null) && (resource != null) + && (effort != null) && (date != null) && (resource != null) && (orderElement != null); } @@ -552,4 +555,25 @@ public class WorkReportLine extends IntegrationEntity implements Comparable { return getWorkReport() != null ? getWorkReport().isCodeAutogenerated() : false; } + + /** + * TODO remove this method in order to use + * {@link WorkReportLine#getEffort()} + * + * @deprecated Use {@link WorkReportLine#getEffort()} instead + */ + public Integer getNumHours() { + return (getEffort() == null) ? null : getEffort().getHours(); + } + + /** + * TODO remove this method in order to use + * {@link WorkReportLine#setEffort()} + * + * @deprecated Use {@link WorkReportLine#setEffort()} instead + */ + public void setNumHours(Integer hours) { + setEffort(EffortDuration.hours(hours)); + } + } diff --git a/navalplanner-business/src/main/resources/db.changelog-1.1.xml b/navalplanner-business/src/main/resources/db.changelog-1.1.xml index 8801fe23c..b47fedc89 100644 --- a/navalplanner-business/src/main/resources/db.changelog-1.1.xml +++ b/navalplanner-business/src/main/resources/db.changelog-1.1.xml @@ -230,4 +230,16 @@ + + Changing work_report_line numHours to effort + + + + + Updating numHours to effort (hours to seconds) + + UPDATE work_report_line + SET effort = effort*3600 + + diff --git a/navalplanner-business/src/main/resources/org/navalplanner/business/workreports/entities/WorkReports.hbm.xml b/navalplanner-business/src/main/resources/org/navalplanner/business/workreports/entities/WorkReports.hbm.xml index 48e1640dc..05c135843 100644 --- a/navalplanner-business/src/main/resources/org/navalplanner/business/workreports/entities/WorkReports.hbm.xml +++ b/navalplanner-business/src/main/resources/org/navalplanner/business/workreports/entities/WorkReports.hbm.xml @@ -119,7 +119,7 @@ - + From dfe97e140b28b6488c42e0c14b20ccf082c4254e Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Wed, 31 Aug 2011 09:51:05 +0200 Subject: [PATCH 02/11] Remove unused methods in WorkReportLine FEA: ItEr75S22WortReportsEffortDuration --- .../workreports/entities/WorkReportLine.java | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/workreports/entities/WorkReportLine.java b/navalplanner-business/src/main/java/org/navalplanner/business/workreports/entities/WorkReportLine.java index 7a5365549..33819f0c4 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/workreports/entities/WorkReportLine.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/workreports/entities/WorkReportLine.java @@ -57,13 +57,6 @@ public class WorkReportLine extends IntegrationEntity implements Comparable { return create(new WorkReportLine(workReport)); } - public static WorkReportLine create(EffortDuration effort, - Resource resource, - OrderElement orderElement, WorkReport workReport) { - return create(new WorkReportLine(effort, resource, orderElement, - workReport)); - } - private EffortDuration effort; private Date date; @@ -94,14 +87,6 @@ public class WorkReportLine extends IntegrationEntity implements Comparable { this.setWorkReport(workReport); } - private WorkReportLine(EffortDuration effort, Resource resource, - OrderElement orderElement, WorkReport workReport) { - this(workReport); - this.effort = effort; - this.resource = resource; - this.orderElement = orderElement; - } - @NotNull(message = "effort not specified") public EffortDuration getEffort() { return effort; From d3f8eed9b6bb97a1de31244e2c35130c62a34f2c Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Wed, 31 Aug 2011 10:11:14 +0200 Subject: [PATCH 03/11] Using EffortDurationPicker for work reports interface Based on a patch by Ignacio Diaz Teijido FEA: ItEr75S22WortReportsEffortDuration --- .../workreports/WorkReportCRUDController.java | 81 ++++++++++--------- 1 file changed, 42 insertions(+), 39 deletions(-) diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/WorkReportCRUDController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/WorkReportCRUDController.java index eb9688492..00de8b948 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/WorkReportCRUDController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/workreports/WorkReportCRUDController.java @@ -37,6 +37,7 @@ import org.navalplanner.business.labels.entities.Label; import org.navalplanner.business.labels.entities.LabelType; import org.navalplanner.business.orders.entities.OrderElement; import org.navalplanner.business.resources.entities.Resource; +import org.navalplanner.business.workingday.EffortDuration; import org.navalplanner.business.workreports.entities.HoursManagementEnum; import org.navalplanner.business.workreports.entities.WorkReport; import org.navalplanner.business.workreports.entities.WorkReportLabelTypeAssigment; @@ -50,6 +51,7 @@ import org.navalplanner.web.common.MessagesForUser; import org.navalplanner.web.common.OnlyOneVisible; import org.navalplanner.web.common.Util; import org.navalplanner.web.common.components.Autocomplete; +import org.navalplanner.web.common.components.EffortDurationPicker; import org.navalplanner.web.common.components.NewDataSortableColumn; import org.navalplanner.web.common.components.NewDataSortableGrid; import org.navalplanner.web.common.components.bandboxsearch.BandboxSearch; @@ -72,7 +74,6 @@ import org.zkoss.zul.Comboitem; import org.zkoss.zul.Constraint; import org.zkoss.zul.Datebox; import org.zkoss.zul.Grid; -import org.zkoss.zul.Intbox; import org.zkoss.zul.ListModel; import org.zkoss.zul.Listbox; import org.zkoss.zul.Listitem; @@ -405,22 +406,20 @@ public class WorkReportCRUDController extends GenericForwardComposer implements return false; } - if (workReportLine.getNumHours() == null) { - // Locate TextboxOrder - Intbox txtHours = getIntboxHours(row); - if (txtHours != null) { - String message = _("Hours cannot be null"); - showInvalidMessage(txtHours, message); + if (workReportLine.getEffort() == null) { + EffortDurationPicker effort = getEffortDurationPicker(row); + if (effort == null) { + String message = _("Effort cannot be null"); + showInvalidMessage(effort, message); } return false; } if (!workReportLine.checkConstraintHoursCalculatedByClock()) { - // Locate TextboxOrder - Intbox txtHours = getIntboxHours(row); - if (txtHours != null) { - String message = _("number of hours is not properly calculated based on clock"); - showInvalidMessage(txtHours, message); + EffortDurationPicker effort = getEffortDurationPicker(row); + if (effort != null) { + String message = _("effort is not properly calculated based on clock"); + showInvalidMessage(effort, message); } return false; } @@ -511,14 +510,15 @@ public class WorkReportCRUDController extends GenericForwardComposer implements } /** - * Locates {@link Intbox} Hours in {@link Row} + * Locates {@link EffortDurationPicker} effort in {@link Row} + * * @param row * @return */ - private Intbox getIntboxHours(Row row) { + private EffortDurationPicker getEffortDurationPicker(Row row) { try { int position = row.getChildren().size() - 4; - return (Intbox) row.getChildren().get(position); + return (EffortDurationPicker) row.getChildren().get(position); } catch (Exception e) { return null; } @@ -1039,7 +1039,7 @@ public class WorkReportCRUDController extends GenericForwardComposer implements Timebox timeFinish = (Timebox) getTimeboxFinish(row); if (timeFinish != null) { checkCannotBeHigher(timeStart, timeFinish); - updateNumHours(row); + updateEffort(row); } } }); @@ -1047,12 +1047,12 @@ public class WorkReportCRUDController extends GenericForwardComposer implements row.appendChild(timeStart); } - private void updateNumHours(final Row row) { + private void updateEffort(final Row row) { WorkReportLine line = (WorkReportLine) row.getValue(); - Intbox txtHours = getIntboxHours(row); - if (txtHours != null) { - txtHours.setValue(line.getNumHours()); - txtHours.invalidate(); + EffortDurationPicker effort = getEffortDurationPicker(row); + if (effort != null) { + effort.setValue(line.getEffort()); + effort.invalidate(); } } @@ -1100,7 +1100,7 @@ public class WorkReportCRUDController extends GenericForwardComposer implements Timebox timeStart = (Timebox) getTimeboxStart(row); if (timeStart != null) { checkCannotBeHigher(timeStart, timeFinish); - updateNumHours(row); + updateEffort(row); } } @@ -1124,21 +1124,20 @@ public class WorkReportCRUDController extends GenericForwardComposer implements } /** - * Append a {@link Intbox} numHours to {@link Row} + * Append a {@link EffortDurationPicker} effort to {@link Row} * * @param row */ - private void appendNumHours(Row row) { - Intbox intNumHours = new Intbox(); - intNumHours.setWidth("50px"); + private void appendEffortDuration(Row row) { + EffortDurationPicker effort = new EffortDurationPicker(); WorkReportLine workReportLine = (WorkReportLine) row.getValue(); - bindIntboxNumHours(intNumHours, workReportLine); + bindEffortDurationPicker(effort, workReportLine); if (getWorkReportType().getHoursManagement().equals( HoursManagementEnum.HOURS_CALCULATED_BY_CLOCK)) { - intNumHours.setReadonly(true); + effort.setDisabled(true); } - row.appendChild(intNumHours); + row.appendChild(effort); } /** @@ -1262,24 +1261,28 @@ public class WorkReportCRUDController extends GenericForwardComposer implements } /** - * Binds Intbox numHours to a {@link WorkReportLine} numHours - * @param intNumHours + * Binds EffortDurationPicker efffort to a {@link WorkReportLine} numHours + * + * @param effort * @param workReportLine */ - private void bindIntboxNumHours(final Intbox intNumHours, + private void bindEffortDurationPicker(final EffortDurationPicker effort, final WorkReportLine workReportLine) { - Util.bind(intNumHours, new Util.Getter() { + effort.bind(new Util.Getter() { @Override - public Integer get() { - return workReportLine.getNumHours(); + public EffortDuration get() { + if (workReportLine.getEffort() != null) { + return workReportLine.getEffort(); + } + return EffortDuration.zero(); } - }, new Util.Setter() { + }, new Util.Setter() { @Override - public void set(Integer value) { - workReportLine.setNumHours(value); + public void set(EffortDuration value) { + workReportLine.setEffort(value); } }); } @@ -1323,7 +1326,7 @@ public class WorkReportCRUDController extends GenericForwardComposer implements appendHourFinish(row); } - appendNumHours(row); + appendEffortDuration(row); appendHoursType(row); appendCode(row); appendDeleteButton(row); From 8dbc72d9a97d8e86f5c920d7aa1b40d7387373d9 Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Fri, 2 Sep 2011 08:14:16 +0200 Subject: [PATCH 04/11] Change to effort SumChargedHours now called SumChargedEffort * Change attributes inside SumChargedHours to use EffortDuration * Update database table and fields accordingly * Keep previous methods working with hours marked as deprecated FEA: ItEr75S22WortReportsEffortDuration --- .../orders/entities/OrderElement.java | 6 +- .../orders/entities/SumChargedEffort.java | 135 ++++++++++++++++++ .../orders/entities/SumChargedHours.java | 71 --------- .../src/main/resources/db.changelog-1.1.xml | 25 ++++ .../business/orders/entities/Orders.hbm.xml | 14 +- 5 files changed, 171 insertions(+), 80 deletions(-) create mode 100644 navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/SumChargedEffort.java delete mode 100644 navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/SumChargedHours.java 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 16d7442d2..76942a7ea 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 @@ -108,7 +108,7 @@ public abstract class OrderElement extends IntegrationEntity implements private Boolean dirtyLastAdvanceMeasurementForSpreading = true; - private SumChargedHours sumChargedHours = SumChargedHours.create(); + private SumChargedEffort sumChargedHours = SumChargedEffort.create(); public OrderElementTemplate getTemplate() { return template; @@ -1325,11 +1325,11 @@ public abstract class OrderElement extends IntegrationEntity implements dirtyLastAdvanceMeasurementForSpreading = true; } - public void setSumChargedHours(SumChargedHours sumChargedHours) { + public void setSumChargedHours(SumChargedEffort sumChargedHours) { this.sumChargedHours = sumChargedHours; } - public SumChargedHours getSumChargedHours() { + public SumChargedEffort getSumChargedHours() { return sumChargedHours; } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/SumChargedEffort.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/SumChargedEffort.java new file mode 100644 index 000000000..13f673a47 --- /dev/null +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/SumChargedEffort.java @@ -0,0 +1,135 @@ +/* + * This file is part of NavalPlan + * + * Copyright (C) 2009-2010 Fundación para o Fomento da Calidade Industrial e + * Desenvolvemento Tecnolóxico de Galicia + * Copyright (C) 2010-2011 Igalia, S.L. + * + * 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.business.orders.entities; + +import org.navalplanner.business.common.BaseEntity; +import org.navalplanner.business.workingday.EffortDuration; + +/** + * It represents the efforts charged to an {@link OrderElement}, avoiding the + * need to iterate among the work report lines to get this information. + * + * @author Jacobo Aragunde Pérez + * @author Manuel Rego Casasnovas + */ +public class SumChargedEffort extends BaseEntity { + + private EffortDuration directChargedEffort = EffortDuration.zero(); + + private EffortDuration indirectChargedEffort = EffortDuration.zero(); + + protected SumChargedEffort() {} + + public static SumChargedEffort create() { + return create(new SumChargedEffort()); + } + + public void setDirectChargedEffort(EffortDuration directChargedEffort) { + this.directChargedEffort = directChargedEffort; + } + + public void addDirectChargedEffort(EffortDuration directChargedEffort) { + this.directChargedEffort = this.directChargedEffort + .plus(directChargedEffort); + } + + public EffortDuration getDirectChargedEffort() { + return directChargedEffort; + } + + public void setIndirectChargedEffort(EffortDuration indirectChargedEffort) { + this.indirectChargedEffort = indirectChargedEffort; + } + + public void addIndirectChargedEffort(EffortDuration indirectChargedEffort) { + this.indirectChargedEffort = this.indirectChargedEffort + .plus(indirectChargedEffort); + } + + public EffortDuration getIndirectChargedEffort() { + return indirectChargedEffort; + } + + public EffortDuration getTotalChargedEffort() { + return directChargedEffort.plus(indirectChargedEffort); + } + + /** + * @deprecated Use + * {@link SumChargedEffort#setDirectChargedEffort(EffortDuration)} + * instead + */ + public void setDirectChargedHours(Integer directChargedHours) { + setDirectChargedEffort(EffortDuration.hours(directChargedHours)); + } + + /** + * @deprecated Use + * {@link SumChargedEffort#addDirectChargedEffort(EffortDuration)} + * instead + */ + public void addDirectChargedHours(Integer directChargedHours) { + addDirectChargedEffort(EffortDuration.hours(directChargedHours)); + } + + /** + * @deprecated Use {@link SumChargedEffort#getDirectChargedEffort()} + * instead + */ + public Integer getDirectChargedHours() { + return getDirectChargedEffort().getHours(); + } + + /** + * @deprecated Use + * {@link SumChargedEffort#setIndirectChargedEffort(EffortDuration)} + * instead + */ + public void setIndirectChargedHours(Integer indirectChargedHours) { + setIndirectChargedEffort(EffortDuration.hours(indirectChargedHours)); + } + + /** + * @deprecated Use + * {@link SumChargedEffort#addIndirectChargedEffort(EffortDuration)} + * instead + */ + public void addIndirectChargedHours(Integer indirectChargedHours) { + addIndirectChargedEffort(EffortDuration.hours(indirectChargedHours)); + } + + /** + * @deprecated Use {@link SumChargedEffort#getIndirectChargedEffort()} + * instead + */ + public Integer getIndirectChargedHours() { + return getIndirectChargedEffort().getHours(); + } + + /** + * @deprecated Use {@link SumChargedEffort#getTotalChargedEffort()} instead + */ + public Integer getTotalChargedHours() { + return getTotalChargedEffort().getHours(); + } + +} diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/SumChargedHours.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/SumChargedHours.java deleted file mode 100644 index eecf1aa32..000000000 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/SumChargedHours.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * This file is part of NavalPlan - * - * Copyright (C) 2009-2010 Fundación para o Fomento da Calidade Industrial e - * Desenvolvemento Tecnolóxico de Galicia - * Copyright (C) 2010-2011 Igalia, S.L. - * - * 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.business.orders.entities; - -import org.navalplanner.business.common.BaseEntity; - -/** - * It represents the hours charged to an {@link OrderElement}, avoiding the - * need to iterate among the work report lines to get this information.
- * @author Jacobo Aragunde Pérez - */ -public class SumChargedHours extends BaseEntity { - - private Integer directChargedHours = 0; - - private Integer indirectChargedHours = 0; - - protected SumChargedHours() {} - - public static SumChargedHours create() { - return create(new SumChargedHours()); - } - - public void setDirectChargedHours(Integer directChargedHours) { - this.directChargedHours = directChargedHours; - } - - public void addDirectChargedHours(Integer directChargedHours) { - this.directChargedHours += directChargedHours; - } - - public Integer getDirectChargedHours() { - return directChargedHours; - } - - public void setIndirectChargedHours(Integer indirectChargedHours) { - this.indirectChargedHours = indirectChargedHours; - } - - public void addIndirectChargedHours(Integer indirectChargedHours) { - this.indirectChargedHours += indirectChargedHours; - } - - public Integer getIndirectChargedHours() { - return indirectChargedHours; - } - - public Integer getTotalChargedHours() { - return directChargedHours + indirectChargedHours; - } - -} diff --git a/navalplanner-business/src/main/resources/db.changelog-1.1.xml b/navalplanner-business/src/main/resources/db.changelog-1.1.xml index b47fedc89..23a5cd271 100644 --- a/navalplanner-business/src/main/resources/db.changelog-1.1.xml +++ b/navalplanner-business/src/main/resources/db.changelog-1.1.xml @@ -242,4 +242,29 @@ SET effort = effort*3600 + + + Changing sum_charged_hours to sum_charged_effort + + + + + + + Updating effort values (hours to seconds) in sum_charged_effort table + + UPDATE sum_charged_effort + SET direct_charged_effort = direct_charged_effort*3600 + + + UPDATE sum_charged_effort + SET indirect_charged_effort = indirect_charged_effort*3600 + + + diff --git a/navalplanner-business/src/main/resources/org/navalplanner/business/orders/entities/Orders.hbm.xml b/navalplanner-business/src/main/resources/org/navalplanner/business/orders/entities/Orders.hbm.xml index ae0425553..50490aede 100644 --- a/navalplanner-business/src/main/resources/org/navalplanner/business/orders/entities/Orders.hbm.xml +++ b/navalplanner-business/src/main/resources/org/navalplanner/business/orders/entities/Orders.hbm.xml @@ -75,7 +75,7 @@ - + 100 @@ -244,10 +244,12 @@ - - + + From 281b59ba2bda2e80599a3080e250ce474054fe94 Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Fri, 2 Sep 2011 08:30:39 +0200 Subject: [PATCH 05/11] Rename attribute sumChargedHours to sumChargedEffort in OrderElement FEA: ItEr75S22WortReportsEffortDuration --- .../business/orders/daos/OrderElementDAO.java | 10 +++++----- .../business/orders/entities/OrderElement.java | 10 +++++----- .../src/main/resources/db.changelog-1.1.xml | 8 ++++++++ .../business/orders/entities/Orders.hbm.xml | 4 ++-- .../business/test/orders/daos/OrderElementDAOTest.java | 10 +++++----- .../web/orders/AssignedHoursToOrderElementModel.java | 2 +- .../navalplanner/web/planner/TaskElementAdapter.java | 8 ++++---- 7 files changed, 30 insertions(+), 22 deletions(-) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/OrderElementDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/OrderElementDAO.java index d54f94d58..30a977f0f 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/OrderElementDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/OrderElementDAO.java @@ -150,8 +150,8 @@ public class OrderElementDAO extends IntegrationEntityDAO @Override @Transactional(readOnly = true) public BigDecimal getHoursAdvancePercentage(OrderElement orderElement) { - final int totalChargedHours = orderElement.getSumChargedHours() != null ? orderElement - .getSumChargedHours().getTotalChargedHours() : 0; + final int totalChargedHours = orderElement.getSumChargedEffort() != null ? orderElement + .getSumChargedEffort().getTotalChargedHours() : 0; BigDecimal assignedHours = new BigDecimal(totalChargedHours).setScale(2); BigDecimal estimatedHours = new BigDecimal(orderElement.getWorkHours()) .setScale(2); @@ -461,7 +461,7 @@ public class OrderElementDAO extends IntegrationEntityDAO }); differenceOfHours = hours - oldNumHours; } - orderElement.getSumChargedHours().addDirectChargedHours(differenceOfHours); + orderElement.getSumChargedEffort().addDirectChargedHours(differenceOfHours); save(orderElement); updateIndirectChargedHoursRecursively(orderElement.getParent(),differenceOfHours, relationOrderElementIdAndIndirectChargedHours); @@ -480,7 +480,7 @@ public class OrderElementDAO extends IntegrationEntityDAO OrderElement orderElement = find(workReportLine.getOrderElement().getId()); Integer hours = workReportLine.getNumHours() * -1; - orderElement.getSumChargedHours().addDirectChargedHours(hours); + orderElement.getSumChargedEffort().addDirectChargedHours(hours); save(orderElement); updateIndirectChargedHoursRecursively(orderElement.getParent(), hours, relationOrderElementIdAndIndirectChargedHours); @@ -509,7 +509,7 @@ public class OrderElementDAO extends IntegrationEntityDAO for(Long id : relationOrderElementIdAndIndirectChargedHours.keySet()) { OrderElement orderElement = find(id); - orderElement.getSumChargedHours().addIndirectChargedHours( + orderElement.getSumChargedEffort().addIndirectChargedHours( relationOrderElementIdAndIndirectChargedHours.get(id)); save(orderElement); } 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 76942a7ea..5e257aecd 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 @@ -108,7 +108,7 @@ public abstract class OrderElement extends IntegrationEntity implements private Boolean dirtyLastAdvanceMeasurementForSpreading = true; - private SumChargedEffort sumChargedHours = SumChargedEffort.create(); + private SumChargedEffort sumChargedEffort = SumChargedEffort.create(); public OrderElementTemplate getTemplate() { return template; @@ -1325,12 +1325,12 @@ public abstract class OrderElement extends IntegrationEntity implements dirtyLastAdvanceMeasurementForSpreading = true; } - public void setSumChargedHours(SumChargedEffort sumChargedHours) { - this.sumChargedHours = sumChargedHours; + public void setSumChargedEffort(SumChargedEffort sumChargedHours) { + this.sumChargedEffort = sumChargedHours; } - public SumChargedEffort getSumChargedHours() { - return sumChargedHours; + public SumChargedEffort getSumChargedEffort() { + return sumChargedEffort; } public void updateAdvancePercentageTaskElement() { diff --git a/navalplanner-business/src/main/resources/db.changelog-1.1.xml b/navalplanner-business/src/main/resources/db.changelog-1.1.xml index 23a5cd271..51645ef73 100644 --- a/navalplanner-business/src/main/resources/db.changelog-1.1.xml +++ b/navalplanner-business/src/main/resources/db.changelog-1.1.xml @@ -267,4 +267,12 @@ + + Rename sum_charged_hours_id to sum_charged_effort_id in order_element + + + + diff --git a/navalplanner-business/src/main/resources/org/navalplanner/business/orders/entities/Orders.hbm.xml b/navalplanner-business/src/main/resources/org/navalplanner/business/orders/entities/Orders.hbm.xml index 50490aede..154ebe9ff 100644 --- a/navalplanner-business/src/main/resources/org/navalplanner/business/orders/entities/Orders.hbm.xml +++ b/navalplanner-business/src/main/resources/org/navalplanner/business/orders/entities/Orders.hbm.xml @@ -74,9 +74,9 @@ column="scheduling_state_for_version_id" /> - diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/daos/OrderElementDAOTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/daos/OrderElementDAOTest.java index 4a5d5b731..0a9d42f49 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/daos/OrderElementDAOTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/daos/OrderElementDAOTest.java @@ -420,16 +420,16 @@ public class OrderElementDAOTest { public void testSumChargedHoursRelation() throws InstanceNotFoundException { OrderLine orderLine = createValidOrderLine(); - orderLine.getSumChargedHours().setDirectChargedHours(8); - orderLine.getSumChargedHours().setIndirectChargedHours(10); + orderLine.getSumChargedEffort().setDirectChargedHours(8); + orderLine.getSumChargedEffort().setIndirectChargedHours(10); orderElementDAO.save(orderLine); OrderElement orderLineCopy = orderElementDAO.find(orderLine.getId()); - assertEquals(orderLine.getSumChargedHours().getId(), - orderLineCopy.getSumChargedHours().getId()); + assertEquals(orderLine.getSumChargedEffort().getId(), + orderLineCopy.getSumChargedEffort().getId()); - assertTrue(orderLineCopy.getSumChargedHours().getTotalChargedHours().equals(18)); + assertTrue(orderLineCopy.getSumChargedEffort().getTotalChargedHours().equals(18)); } } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedHoursToOrderElementModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedHoursToOrderElementModel.java index 01f0d7a14..7c9b110ab 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedHoursToOrderElementModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedHoursToOrderElementModel.java @@ -152,7 +152,7 @@ public class AssignedHoursToOrderElementModel implements if (orderElement == null) { return 0; } - return this.orderElement.getSumChargedHours().getTotalChargedHours(); + return this.orderElement.getSumChargedEffort().getTotalChargedHours(); } @Override diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/TaskElementAdapter.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/TaskElementAdapter.java index de8ced16b..80e3b5c22 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/TaskElementAdapter.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/TaskElementAdapter.java @@ -475,8 +475,8 @@ public class TaskElementAdapter implements ITaskElementAdapter { OrderElement orderElement = taskElement.getOrderElement(); Integer assignedHours = 0; - if (orderElement.getSumChargedHours() != null) { - assignedHours = orderElement.getSumChargedHours() + if (orderElement.getSumChargedEffort() != null) { + assignedHours = orderElement.getSumChargedEffort() .getTotalChargedHours(); } @@ -510,8 +510,8 @@ public class TaskElementAdapter implements ITaskElementAdapter { return BigDecimal.ZERO; } - int totalChargedHours = orderElement.getSumChargedHours() != null ? orderElement - .getSumChargedHours().getTotalChargedHours() : 0; + int totalChargedHours = orderElement.getSumChargedEffort() != null ? orderElement + .getSumChargedEffort().getTotalChargedHours() : 0; BigDecimal assignedHours = new BigDecimal(totalChargedHours).setScale(2); BigDecimal estimatedHours = new BigDecimal(taskElement.getSumOfHoursAllocated()) From b5e46192d746017939e040bf038625a26a1ec51f Mon Sep 17 00:00:00 2001 From: Ignacio Diaz Teijido Date: Fri, 2 Sep 2011 08:35:53 +0200 Subject: [PATCH 06/11] Fix imputed hours tab UI now using EffortDuration FEA: WorkReportLineDTO --- .../reports/dtos/WorkReportLineDTO.java | 27 ++++++----- .../workreports/daos/WorkReportLineDAO.java | 2 +- ...AssignedHoursToOrderElementController.java | 19 ++++---- .../AssignedHoursToOrderElementModel.java | 45 ++++++++++--------- .../IAssignedHoursToOrderElementModel.java | 13 ++++-- .../webapp/orders/_listOrderElementHours.zul | 12 ++--- 6 files changed, 66 insertions(+), 52 deletions(-) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/reports/dtos/WorkReportLineDTO.java b/navalplanner-business/src/main/java/org/navalplanner/business/reports/dtos/WorkReportLineDTO.java index 43349d988..336e70185 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/reports/dtos/WorkReportLineDTO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/reports/dtos/WorkReportLineDTO.java @@ -21,15 +21,18 @@ import java.util.Date; import org.joda.time.LocalDate; import org.navalplanner.business.costcategories.entities.TypeOfWorkHours; import org.navalplanner.business.resources.entities.Resource; +import org.navalplanner.business.workingday.EffortDuration; import org.navalplanner.business.workreports.entities.WorkReportLine; /** * DTO for {@link WorkReportLine} entity. + * * @author Susana Montes Pedreira + * @author Ignacio Diaz Teijido */ public class WorkReportLineDTO { - private Integer sumHours; + private EffortDuration sumEffort; private Date date; @@ -41,19 +44,11 @@ public class WorkReportLineDTO { } public WorkReportLineDTO(Resource resource, - TypeOfWorkHours typeOfWorkHours, Date date, Long numHours) { + TypeOfWorkHours typeOfWorkHours, Date date, Long effortDB) { this.setDate(date); this.setResource(resource); this.setTypeOfWorkHours(typeOfWorkHours); - this.setSumHours(new Integer(numHours.intValue())); - } - - public void setSumHours(Integer numHours) { - this.sumHours = numHours; - } - - public Integer getSumHours() { - return sumHours; + this.setSumEffort(EffortDuration.seconds(effortDB.intValue())); } public void setDate(Date date) { @@ -84,4 +79,12 @@ public class WorkReportLineDTO { return LocalDate.fromDateFields(getDate()); } -} \ No newline at end of file + public void setSumEffort(EffortDuration effort) { + this.sumEffort = effort; + } + + public EffortDuration getSumEffort() { + return sumEffort; + } + +} diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/workreports/daos/WorkReportLineDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/workreports/daos/WorkReportLineDAO.java index da5f41405..f16371a37 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/workreports/daos/WorkReportLineDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/workreports/daos/WorkReportLineDAO.java @@ -63,7 +63,7 @@ public class WorkReportLineDAO extends IntegrationEntityDAO public List findByOrderElementGroupByResourceAndHourTypeAndDate( OrderElement orderElement) { - String strQuery = "SELECT new org.navalplanner.business.reports.dtos.WorkReportLineDTO(wrl.resource, wrl.typeOfWorkHours, wrl.date, SUM(wrl.numHours)) " + String strQuery = "SELECT new org.navalplanner.business.reports.dtos.WorkReportLineDTO(wrl.resource, wrl.typeOfWorkHours, wrl.date, SUM(wrl.effort)) " + "FROM WorkReportLine wrl " + "LEFT OUTER JOIN wrl.orderElement orderElement " + "WHERE orderElement = :orderElement " diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedHoursToOrderElementController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedHoursToOrderElementController.java index 04e0195a8..21db0b3c8 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedHoursToOrderElementController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedHoursToOrderElementController.java @@ -52,21 +52,24 @@ public class AssignedHoursToOrderElementController extends return assignedHoursToOrderElementModel.getWorkReportLines(); } - public int getTotalAssignedDirectHours() { - return assignedHoursToOrderElementModel.getAssignedDirectHours(); + public String getTotalAssignedDirectEffort() { + return assignedHoursToOrderElementModel.getAssignedDirectEffort() + .toFormattedString(); } - public int getTotalAssignedHours() { - return assignedHoursToOrderElementModel.getTotalAssignedHours(); + public String getTotalAssignedEffort() { + return assignedHoursToOrderElementModel.getTotalAssignedEffort() + .toFormattedString(); } - public int getHoursChildren() { + public String getEffortChildren() { return assignedHoursToOrderElementModel - .getAssignedDirectHoursChildren(); + .getAssignedDirectEffortChildren().toFormattedString(); } - public int getEstimatedHours() { - return assignedHoursToOrderElementModel.getEstimatedHours(); + public String getEstimatedEffort() { + return assignedHoursToOrderElementModel.getEstimatedEffort() + .toFormattedString(); } public int getProgressWork() { diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedHoursToOrderElementModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedHoursToOrderElementModel.java index 7c9b110ab..df9de1592 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedHoursToOrderElementModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedHoursToOrderElementModel.java @@ -33,6 +33,7 @@ import org.joda.time.LocalDate; import org.navalplanner.business.orders.daos.IOrderElementDAO; import org.navalplanner.business.orders.entities.OrderElement; import org.navalplanner.business.reports.dtos.WorkReportLineDTO; +import org.navalplanner.business.workingday.EffortDuration; import org.navalplanner.business.workreports.daos.IWorkReportLineDAO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; @@ -44,6 +45,7 @@ import org.springframework.transaction.annotation.Transactional; * Service to show the asigned hours of a selected order element * * @author Susana Montes Pedreira + * @author Ignacio Díaz Teijido */ @Service @Scope(BeanDefinition.SCOPE_PROTOTYPE) @@ -56,7 +58,7 @@ public class AssignedHoursToOrderElementModel implements @Autowired private IOrderElementDAO orderElementDAO; - private int assignedDirectHours; + private EffortDuration assignedDirectEffort; private OrderElement orderElement; @@ -66,7 +68,7 @@ public class AssignedHoursToOrderElementModel implements public AssignedHoursToOrderElementModel(IWorkReportLineDAO workReportLineDAO) { Validate.notNull(workReportLineDAO); this.workReportLineDAO = workReportLineDAO; - this.assignedDirectHours = 0; + this.assignedDirectEffort = EffortDuration.zero(); } @Override @@ -76,7 +78,7 @@ public class AssignedHoursToOrderElementModel implements return new ArrayList(); } orderElementDAO.reattach(orderElement); - this.assignedDirectHours = 0; + this.assignedDirectEffort = EffortDuration.zero(); this.listWRL = workReportLineDAO .findByOrderElementGroupByResourceAndHourTypeAndDate(orderElement); @@ -86,8 +88,8 @@ public class AssignedHoursToOrderElementModel implements WorkReportLineDTO w = iterador.next(); w.getResource().getShortDescription(); w.getTypeOfWorkHours().getName(); - this.assignedDirectHours = this.assignedDirectHours - + w.getSumHours(); + this.assignedDirectEffort = this.assignedDirectEffort.plus(w + .getSumEffort()); } return sortByDate(listWRL); } @@ -128,8 +130,8 @@ public class AssignedHoursToOrderElementModel implements .equals(nextWRL.getTypeOfWorkHours().getId())) && (currentDate.compareTo(nextDate) == 0)) { // sum the number of hours to the next WorkReportLineDTO - currentWRL.setSumHours(currentWRL.getSumHours() - + nextWRL.getSumHours()); + currentWRL.setSumEffort(currentWRL.getSumEffort().plus( + nextWRL.getSumEffort())); } else { groupedByDateList.add(nextWRL); currentWRL = nextWRL; @@ -140,32 +142,32 @@ public class AssignedHoursToOrderElementModel implements } @Override - public int getAssignedDirectHours() { + public EffortDuration getAssignedDirectEffort() { if (orderElement == null) { - return 0; + return EffortDuration.zero(); } - return this.assignedDirectHours; + return this.assignedDirectEffort; } @Override - public int getTotalAssignedHours() { + public EffortDuration getTotalAssignedEffort() { if (orderElement == null) { - return 0; + return EffortDuration.zero(); } - return this.orderElement.getSumChargedEffort().getTotalChargedHours(); + return this.orderElement.getSumChargedEffort().getTotalChargedEffort(); } @Override @Transactional(readOnly = true) - public int getAssignedDirectHoursChildren() { + public EffortDuration getAssignedDirectEffortChildren() { if (orderElement == null) { - return 0; + return EffortDuration.zero(); } if (orderElement.getChildren().isEmpty()) { - return 0; + return EffortDuration.zero(); } - int assignedDirectChildren = getTotalAssignedHours() - - this.assignedDirectHours; + EffortDuration assignedDirectChildren = getTotalAssignedEffort().minus( + this.assignedDirectEffort); return assignedDirectChildren; } @@ -177,11 +179,12 @@ public class AssignedHoursToOrderElementModel implements @Override @Transactional(readOnly = true) - public int getEstimatedHours() { + public EffortDuration getEstimatedEffort() { if (orderElement == null) { - return 0; + return EffortDuration.zero(); } - return orderElement.getWorkHours(); + //TODO this must be changed when changing HoursGroup + return EffortDuration.hours(orderElement.getWorkHours()); } @Override diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IAssignedHoursToOrderElementModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IAssignedHoursToOrderElementModel.java index b049d86c1..e9f0837d5 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IAssignedHoursToOrderElementModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IAssignedHoursToOrderElementModel.java @@ -25,16 +25,21 @@ import java.util.List; import org.navalplanner.business.orders.entities.OrderElement; import org.navalplanner.business.reports.dtos.WorkReportLineDTO; +import org.navalplanner.business.workingday.EffortDuration; /** * @author Susana Montes Pedreira */ public interface IAssignedHoursToOrderElementModel{ public List getWorkReportLines(); - public int getAssignedDirectHours(); - public int getTotalAssignedHours(); - public int getAssignedDirectHoursChildren(); + + public EffortDuration getTotalAssignedEffort(); + + public EffortDuration getAssignedDirectEffortChildren(); public void initOrderElement(OrderElement orderElement); - public int getEstimatedHours(); + + public EffortDuration getEstimatedEffort(); public int getProgressWork(); + + public EffortDuration getAssignedDirectEffort(); } diff --git a/navalplanner-webapp/src/main/webapp/orders/_listOrderElementHours.zul b/navalplanner-webapp/src/main/webapp/orders/_listOrderElementHours.zul index 502e14e24..2fcd90f13 100644 --- a/navalplanner-webapp/src/main/webapp/orders/_listOrderElementHours.zul +++ b/navalplanner-webapp/src/main/webapp/orders/_listOrderElementHours.zul @@ -41,7 +41,7 @@