Add start/end date constraints.

Update NEWS file.
Resolve minor errors.
This commit is contained in:
Vova Perebykivskyi 2016-06-21 16:14:09 +03:00 committed by Dgray16
parent 455c0f53b0
commit fbdaf8f31f
7 changed files with 136 additions and 45 deletions

View file

@ -93,6 +93,44 @@ Changes
* Code refactoring
Version 1.5.0 (? 2016)
---------------------------
Summary
~~~~~~~
* Bug fixing
* Email notification feature
* Risk and Issue Log feature
* Documents feature
* Global Dashboard feature
Contributors
~~~~~~~~~~~~
Thanks to all the contributors to this new version:
* Jeroen Baten
* Vova Perebykivkyi
* Bodgan Bodnarjuk
* Misha Gozda
Changes
~~~~~~~
* Add Email notification feature (notification + template)
* Add new strings to i18n
* Add Risk&Issue Log feature
* Add Documents uploading/downloading feature
* Add test for documents feature
* Changes to LibrePlan version check
* Add Global Dashboard page
* Update MPXJ library
* Code refactoring
Version 1.4.2 (2015)
---------------------------

View file

@ -24,8 +24,7 @@
<addColumn tableName="configuration">
<column name="automatic_budget_enabled" type="BOOLEAN" />
</addColumn>
<addDefaultValue tableName="configuration" columnName="automatic_budget_enabled"
defaultValueBoolean="FALSE" />
<addDefaultValue tableName="configuration" columnName="automatic_budget_enabled" defaultValueBoolean="FALSE" />
</changeSet>
<changeSet id="add-automatic_budget_type_of_work_hours-to-configuration" author="ltilve">
@ -43,7 +42,7 @@
<changeSet id="adding-limits" author="vova/jeroen">
<createTable tableName="limits">
<column name="id" type="BIGINT" autoIncrement="true">
<column name="id" type="BIGINT">
<constraints primaryKey="true" nullable="false" primaryKeyName="limits_pkey"/>
</column>

View file

@ -2,9 +2,9 @@
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.libreplan.business.email.entities" default-access="field">
<hibernate-mapping package="org.libreplan.business.common.entities" default-access="field">
<class name="org.libreplan.business.common.entities.Limits" abstract="true" table="limits">
<class name="Limits" abstract="true" table="limits">
<id name="id" access="property" type="long">
<generator class="increment" >

View file

@ -24,25 +24,33 @@ package org.libreplan.web.orders;
import org.libreplan.business.orders.entities.OrderElement;
import org.libreplan.web.common.Util;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.WrongValueException;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.Constraint;
import org.zkoss.zul.api.Datebox;
import java.util.Date;
import static org.libreplan.web.I18nHelper._;
/**
* Controller for {@link OrderElement} details
* Controller for {@link OrderElement} details.
*
* @author Diego Pino García <dpino@igalia.com>
*
* @author Vova Perebykivskyi <vova@libreplan-enterprise.com>
*/
public class DetailsOrderElementController extends
GenericForwardComposer {
public class DetailsOrderElementController extends GenericForwardComposer {
private IOrderElementModel orderElementModel;
private Datebox initDate;
private Datebox deadline;
@Override
public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp);
// TODO resolve deprecated
comp.setVariable("detailsController", this, true);
}
@ -89,10 +97,45 @@ public class DetailsOrderElementController extends
return true;
}
OrderElement orderElement = orderElementModel.getOrderElement();
if (orderElement == null) {
return false;
}
return orderElement.isJiraIssue();
return orderElement != null && orderElement.isJiraIssue();
}
public Constraint checkConstraintStartDate() {
return new Constraint() {
@Override
public void validate(Component comp, Object value) throws WrongValueException {
Date startDate = (Date) value;
Date year2010 = new Date(1262296800000L);
boolean startBefore2010 = (startDate != null) && startDate.before(year2010);
if ( startBefore2010 ) {
initDate.setValue(null);
getOrderElement().setInitDate(null);
throw new WrongValueException(comp, _("Must be after 2010!"));
}
}
};
}
public Constraint checkConstraintFinishDate() {
return new Constraint() {
@Override
public void validate(Component comp, Object value) throws WrongValueException {
Date finishDate = (Date) value;
boolean deadlineBeforeStart = (finishDate != null) &&
(initDate.getValue() != null) &&
(finishDate.compareTo(initDate.getValue()) < 0);
if ( deadlineBeforeStart ) {
deadline.setValue(null);
getOrderElement().setDeadline(null);
throw new WrongValueException(comp, _("must be after starting date"));
}
}
};
}
}

View file

@ -27,8 +27,6 @@ import java.util.Date;
import java.util.HashMap;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.joda.time.LocalDate;
import org.libreplan.business.calendars.entities.BaseCalendar;
import org.libreplan.business.externalcompanies.entities.ExternalCompany;
@ -38,7 +36,6 @@ import org.libreplan.business.templates.entities.OrderTemplate;
import org.libreplan.web.common.ConstraintChecker;
import org.libreplan.web.common.Util;
import org.libreplan.web.common.components.bandboxsearch.BandboxSearch;
import org.libreplan.web.planner.consolidations.AdvanceConsolidationController;
import org.libreplan.web.planner.tabs.MultipleTabsPlannerController;
import org.springframework.beans.factory.annotation.Autowired;
import org.zkoss.zk.ui.Component;
@ -56,17 +53,15 @@ import org.zkoss.zul.Textbox;
import org.zkoss.zul.Window;
/**
* Controller for the creation of an {@link order} with its principal
* properties.
* Controller for the creation of an {@link Order} with its principal properties.
*
* @author Susana Montes Pedreira <smontes@wirelessgailicia.com>
* @author Lorenzo Tilve Álvaro <ltilve@igalia.com>
* @author Vova Perebykivskyi <vova@libreplan-enterprise.com>
*/
public class ProjectDetailsController extends GenericForwardComposer {
private static final Log LOG = LogFactory.getLog(AdvanceConsolidationController.class);
private OrderCRUDController orderController;
private Grid gridProjectDetails;
@ -96,8 +91,8 @@ public class ProjectDetailsController extends GenericForwardComposer {
public ProjectDetailsController() {
Window window = (Window) Executions.createComponents("/orders/_projectDetails.zul", null,
new HashMap<String, String>());
Window window = (Window)
Executions.createComponents("/orders/_projectDetails.zul", null, new HashMap<String, String>());
try {
doAfterCompose(window);
} catch (Exception e) {
@ -109,6 +104,7 @@ public class ProjectDetailsController extends GenericForwardComposer {
public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp);
window = (Window) comp;
// TODO resolve deprecated
window.setVariable("projectController", this, true);
}
@ -122,9 +118,7 @@ public class ProjectDetailsController extends GenericForwardComposer {
Util.createBindingsFor(gridProjectDetails);
Util.reloadBindings(gridProjectDetails);
window.doModal();
} catch (SuspendNotAllowedException e) {
throw new RuntimeException(e);
} catch (InterruptedException e) {
} catch (SuspendNotAllowedException | InterruptedException e) {
throw new RuntimeException(e);
}
}
@ -170,8 +164,7 @@ public class ProjectDetailsController extends GenericForwardComposer {
}
private void showWrongName() {
throw new WrongValueException(txtName,
_("project name already being used"));
throw new WrongValueException(txtName, _("project name already being used"));
}
private void close() {
@ -210,8 +203,8 @@ public class ProjectDetailsController extends GenericForwardComposer {
private void clearProperties() {
Order order = orderController.getOrder();
order.setName(null);
// reset the code autogenerated property
if (isCodeAutogeneratedInit) {
/* Reset the code autogenerated property */
if ( isCodeAutogeneratedInit ) {
order.setCodeAutogenerated(true);
} else {
@ -227,15 +220,17 @@ public class ProjectDetailsController extends GenericForwardComposer {
public Constraint checkConstraintFinishDate() {
return new Constraint() {
@Override
public void validate(Component comp, Object value)
throws WrongValueException {
public void validate(Component comp, Object value) throws WrongValueException {
Date finishDate = (Date) value;
if ((finishDate != null) && (initDate.getValue() != null)
&& (finishDate.compareTo(initDate.getValue()) < 0)) {
boolean deadlineBeforeStart = (finishDate != null) &&
(initDate.getValue() != null) &&
(finishDate.compareTo(initDate.getValue()) < 0);
if ( deadlineBeforeStart ) {
deadline.setValue(null);
getOrder().setDeadline(null);
throw new WrongValueException(comp,
_("must be after start date"));
throw new WrongValueException(comp, _("must be after start date"));
}
}
};
@ -244,15 +239,26 @@ public class ProjectDetailsController extends GenericForwardComposer {
public Constraint checkConstraintStartDate() {
return new Constraint() {
@Override
public void validate(Component comp, Object value)
throws WrongValueException {
public void validate(Component comp, Object value) throws WrongValueException {
Date startDate = (Date) value;
if ((startDate != null) && (deadline.getValue() != null)
&& (startDate.compareTo(deadline.getValue()) > 0)) {
boolean startAfterDeadline = (startDate != null) &&
(deadline.getValue() != null) &&
(startDate.compareTo(deadline.getValue()) > 0);
if ( startAfterDeadline ) {
initDate.setValue(null);
getOrder().setInitDate(null);
throw new WrongValueException(comp,
_("must be lower than end date"));
throw new WrongValueException(comp, _("must be lower than end date"));
}
Date year2010 = new Date(1262296800000L);
boolean startBefore2010 = (startDate != null) && startDate.before(year2010);
if ( startBefore2010 ) {
initDate.setValue(null);
getOrder().setInitDate(null);
throw new WrongValueException(comp, _("Must be after 2010!"));
}
}
};

View file

@ -9411,8 +9411,11 @@ msgstr ""
msgid "Email: timesheet data missing"
msgstr ""
#: libreplan-webapp/src/main/java/org/libreplan/web/planner/taskedition/TaskPropertiesController.java:804
msgid "You cannot email user twice with the same info"
msgstr ""
#: libreplan-webapp/src/main/java/org/libreplan/web/orders/ProjectDetailsController.java:266
#: libreplan-webapp/src/main/java/org/libreplan/web/orders/DetailsOrderElement.java:110
msgid "Must be after 2010!"
msgstr ""

View file

@ -45,14 +45,16 @@
<label value="${i18n:_('Starting date')}" />
<hbox>
<datebox id="initDate"
value="@{detailsController.orderElement.initDate}" />
value="@{detailsController.orderElement.initDate}"
constraint="@{detailsController.checkConstraintStartDate}"/>
</hbox>
</row>
<row>
<label value="${i18n:_('Deadline')}" />
<hbox>
<datebox id="deadline"
value="@{detailsController.orderElement.deadline}" />
value="@{detailsController.orderElement.deadline}"
constraint="@{detailsController.checkConstraintFinishDate}"/>
</hbox>
</row>
<row>