ItEr41S20CUGravacionModelosUnidadesTraballoItEr40S25: Creating template from order element
This commit is contained in:
parent
f21c59eefa
commit
d30bad1994
12 changed files with 154 additions and 2 deletions
|
|
@ -60,4 +60,12 @@ public class InfoComponent {
|
|||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public InfoComponent copy() {
|
||||
InfoComponent result = new InfoComponent();
|
||||
result.setCode(getCode());
|
||||
result.setName(getName());
|
||||
result.setDescription(getDescription());
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
|
@ -33,6 +33,7 @@ import org.navalplanner.business.planner.entities.Task;
|
|||
import org.navalplanner.business.planner.entities.TaskElement;
|
||||
import org.navalplanner.business.planner.entities.TaskGroup;
|
||||
import org.navalplanner.business.resources.entities.Resource;
|
||||
import org.navalplanner.business.templates.entities.OrderTemplate;
|
||||
|
||||
/**
|
||||
* It represents an {@link Order} with its related information. <br />
|
||||
|
|
@ -233,4 +234,9 @@ public class Order extends OrderLineGroup {
|
|||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public OrderTemplate createTemplate() {
|
||||
return OrderTemplate.create(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -60,6 +60,7 @@ import org.navalplanner.business.requirements.entities.CriterionRequirement;
|
|||
import org.navalplanner.business.requirements.entities.DirectCriterionRequirement;
|
||||
import org.navalplanner.business.requirements.entities.IndirectCriterionRequirement;
|
||||
import org.navalplanner.business.resources.entities.Criterion;
|
||||
import org.navalplanner.business.templates.entities.OrderElementTemplate;
|
||||
|
||||
public abstract class OrderElement extends BaseEntity implements
|
||||
ICriterionRequirable {
|
||||
|
|
@ -342,6 +343,8 @@ public abstract class OrderElement extends BaseEntity implements
|
|||
return getInfoComponent().getCode();
|
||||
}
|
||||
|
||||
public abstract OrderElementTemplate createTemplate();
|
||||
|
||||
public abstract DirectAdvanceAssignment getReportGlobalAdvanceAssignment();
|
||||
|
||||
public Set<DirectAdvanceAssignment> getDirectAdvanceAssignments() {
|
||||
|
|
@ -928,7 +931,7 @@ public abstract class OrderElement extends BaseEntity implements
|
|||
}
|
||||
|
||||
@Valid
|
||||
private InfoComponent getInfoComponent() {
|
||||
public InfoComponent getInfoComponent() {
|
||||
if (infoComponent == null) {
|
||||
infoComponent = new InfoComponent();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@ import org.navalplanner.business.advance.entities.AdvanceType;
|
|||
import org.navalplanner.business.advance.entities.DirectAdvanceAssignment;
|
||||
import org.navalplanner.business.requirements.entities.CriterionRequirement;
|
||||
import org.navalplanner.business.requirements.entities.DirectCriterionRequirement;
|
||||
import org.navalplanner.business.templates.entities.OrderLineTemplate;
|
||||
|
||||
public class OrderLine extends OrderElement {
|
||||
|
||||
|
|
@ -529,4 +530,9 @@ public class OrderLine extends OrderElement {
|
|||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public OrderLineTemplate createTemplate() {
|
||||
return OrderLineTemplate.create(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -44,6 +44,8 @@ import org.navalplanner.business.advance.entities.DirectAdvanceAssignment;
|
|||
import org.navalplanner.business.advance.entities.IndirectAdvanceAssignment;
|
||||
import org.navalplanner.business.advance.exceptions.DuplicateAdvanceAssignmentForOrderElementException;
|
||||
import org.navalplanner.business.advance.exceptions.DuplicateValueTrueReportGlobalAdvanceException;
|
||||
import org.navalplanner.business.templates.entities.OrderElementTemplate;
|
||||
import org.navalplanner.business.templates.entities.OrderLineGroupTemplate;
|
||||
public class OrderLineGroup extends OrderElement implements IOrderLineGroup {
|
||||
|
||||
public static OrderLineGroup create() {
|
||||
|
|
@ -693,4 +695,9 @@ public class OrderLineGroup extends OrderElement implements IOrderLineGroup {
|
|||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public OrderElementTemplate createTemplate() {
|
||||
return OrderLineGroupTemplate.create(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,10 +19,17 @@
|
|||
*/
|
||||
package org.navalplanner.business.templates.entities;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.hibernate.validator.Min;
|
||||
import org.hibernate.validator.Valid;
|
||||
import org.joda.time.DateTime;
|
||||
import org.joda.time.Days;
|
||||
import org.navalplanner.business.common.BaseEntity;
|
||||
import org.navalplanner.business.orders.entities.InfoComponent;
|
||||
import org.navalplanner.business.orders.entities.Order;
|
||||
import org.navalplanner.business.orders.entities.OrderElement;
|
||||
|
||||
/**
|
||||
* @author Óscar González Fernández <ogonzalez@igalia.com>
|
||||
|
|
@ -30,6 +37,48 @@ import org.navalplanner.business.orders.entities.InfoComponent;
|
|||
*/
|
||||
public abstract class OrderElementTemplate extends BaseEntity {
|
||||
|
||||
public static <T extends OrderElementTemplate> T create(T beingBuilt,
|
||||
OrderElement origin) {
|
||||
InfoComponent infoComponentCopied = origin.getInfoComponent().copy();
|
||||
Order order = origin.getOrder();
|
||||
Days fromBeginningToStart = daysBetween(order.getInitDate(), origin
|
||||
.getInitDate());
|
||||
Days fromBeginningToEnd = daysBetween(order.getDeadline(), origin
|
||||
.getDeadline());
|
||||
return create(beingBuilt, infoComponentCopied,
|
||||
fromBeginningToStart, fromBeginningToEnd);
|
||||
}
|
||||
|
||||
private static <T extends OrderElementTemplate> T create(T beingBuilt,
|
||||
InfoComponent infoComponentCopied, Days fromBeginningToStart,
|
||||
Days fromBeginningToEnd) {
|
||||
Validate.isTrue(isNullOrPositive(fromBeginningToStart));
|
||||
Validate.isTrue(isNullOrPositive(fromBeginningToEnd));
|
||||
beingBuilt.infoComponent = infoComponentCopied;
|
||||
beingBuilt.startAsDaysFromBeginning = daysToInteger(fromBeginningToStart);
|
||||
beingBuilt.deadlineAsDaysFromBeginning = daysToInteger(fromBeginningToEnd);
|
||||
return create(beingBuilt);
|
||||
}
|
||||
|
||||
private static Days daysBetween(Date start, Date end) {
|
||||
if (start == null || end == null) {
|
||||
return null;
|
||||
}
|
||||
return Days.daysBetween(asDateTime(start), asDateTime(end));
|
||||
}
|
||||
|
||||
private static DateTime asDateTime(Date date) {
|
||||
return new DateTime(date);
|
||||
}
|
||||
|
||||
private static boolean isNullOrPositive(Days days) {
|
||||
return days == null || days.getDays() >= 0;
|
||||
}
|
||||
|
||||
private static Integer daysToInteger(Days days) {
|
||||
return days != null ? days.getDays() : null;
|
||||
}
|
||||
|
||||
private InfoComponent infoComponent;
|
||||
|
||||
private Integer startAsDaysFromBeginning;
|
||||
|
|
@ -38,6 +87,14 @@ public abstract class OrderElementTemplate extends BaseEntity {
|
|||
|
||||
private OrderLineGroupTemplate parent;
|
||||
|
||||
public OrderLineGroupTemplate getParent() {
|
||||
return parent;
|
||||
}
|
||||
|
||||
protected void setParent(OrderLineGroupTemplate parent) {
|
||||
this.parent = parent;
|
||||
}
|
||||
|
||||
@Valid
|
||||
private InfoComponent getInfoComponent() {
|
||||
if (infoComponent == null) {
|
||||
|
|
|
|||
|
|
@ -22,12 +22,38 @@ package org.navalplanner.business.templates.entities;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.navalplanner.business.orders.entities.OrderElement;
|
||||
import org.navalplanner.business.orders.entities.OrderLineGroup;
|
||||
|
||||
/**
|
||||
* @author Óscar González Fernández <ogonzalez@igalia.com>
|
||||
*
|
||||
*/
|
||||
public class OrderLineGroupTemplate extends OrderElementTemplate {
|
||||
|
||||
public static OrderLineGroupTemplate create(OrderLineGroup group) {
|
||||
return create(new OrderLineGroupTemplate(), group);
|
||||
}
|
||||
|
||||
protected static <T extends OrderLineGroupTemplate> T create(T beingBuilt,
|
||||
OrderLineGroup group) {
|
||||
List<OrderElementTemplate> result = buildChildrenTemplates(beingBuilt,
|
||||
group.getChildren());
|
||||
beingBuilt.children = result;
|
||||
return OrderElementTemplate.create(beingBuilt, group);
|
||||
}
|
||||
|
||||
private static List<OrderElementTemplate> buildChildrenTemplates(
|
||||
OrderLineGroupTemplate parent, List<OrderElement> children) {
|
||||
List<OrderElementTemplate> result = new ArrayList<OrderElementTemplate>();
|
||||
for (OrderElement each : children) {
|
||||
OrderElementTemplate template = each.createTemplate();
|
||||
template.setParent(parent);
|
||||
result.add(template);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private List<OrderElementTemplate> children = new ArrayList<OrderElementTemplate>();
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,10 +19,16 @@
|
|||
*/
|
||||
package org.navalplanner.business.templates.entities;
|
||||
|
||||
import org.navalplanner.business.orders.entities.OrderLine;
|
||||
|
||||
/**
|
||||
* @author Óscar González Fernández <ogonzalez@igalia.com>
|
||||
*
|
||||
*/
|
||||
public class OrderLineTemplate extends OrderElementTemplate {
|
||||
|
||||
public static OrderLineTemplate create(OrderLine orderLine) {
|
||||
return create(new OrderLineTemplate(), orderLine);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ package org.navalplanner.business.templates.entities;
|
|||
|
||||
import org.hibernate.validator.NotNull;
|
||||
import org.navalplanner.business.calendars.entities.BaseCalendar;
|
||||
import org.navalplanner.business.orders.entities.Order;
|
||||
|
||||
/**
|
||||
* @author Óscar González Fernández <ogonzalez@igalia.com>
|
||||
|
|
@ -28,6 +29,12 @@ import org.navalplanner.business.calendars.entities.BaseCalendar;
|
|||
*/
|
||||
public class OrderTemplate extends OrderLineGroupTemplate {
|
||||
|
||||
public static OrderTemplate create(Order order) {
|
||||
OrderTemplate beingBuilt = new OrderTemplate();
|
||||
beingBuilt.calendar = order.getCalendar();
|
||||
return create(beingBuilt, order);
|
||||
}
|
||||
|
||||
@NotNull(message = "order calendar not specified")
|
||||
private BaseCalendar calendar;
|
||||
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ package org.navalplanner.web.templates;
|
|||
|
||||
import java.util.List;
|
||||
|
||||
import org.navalplanner.business.orders.entities.OrderElement;
|
||||
import org.navalplanner.business.templates.entities.OrderElementTemplate;
|
||||
|
||||
/**
|
||||
|
|
@ -30,4 +31,6 @@ import org.navalplanner.business.templates.entities.OrderElementTemplate;
|
|||
public interface IOrderTemplatesModel {
|
||||
|
||||
List<OrderElementTemplate> getTemplates();
|
||||
|
||||
OrderElementTemplate createTemplateFrom(OrderElement orderElement);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ public class OrderTemplatesController extends GenericForwardComposer implements
|
|||
|
||||
@Override
|
||||
public void goToCreateTemplateFrom(OrderElement orderElement) {
|
||||
System.out.println("TODO: create template from " + orderElement);
|
||||
OrderElementTemplate template = model.createTemplateFrom(orderElement);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -21,12 +21,15 @@ package org.navalplanner.web.templates;
|
|||
|
||||
import java.util.List;
|
||||
|
||||
import org.navalplanner.business.orders.daos.IOrderElementDAO;
|
||||
import org.navalplanner.business.orders.entities.OrderElement;
|
||||
import org.navalplanner.business.templates.daos.IOrderElementTemplateDAO;
|
||||
import org.navalplanner.business.templates.entities.OrderElementTemplate;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
/**
|
||||
* @author Óscar González Fernández <ogonzalez@igalia.com>
|
||||
|
|
@ -36,6 +39,9 @@ import org.springframework.stereotype.Component;
|
|||
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
|
||||
public class OrderTemplatesModel implements IOrderTemplatesModel {
|
||||
|
||||
@Autowired
|
||||
private IOrderElementDAO orderElementDAO;
|
||||
|
||||
@Autowired
|
||||
private IOrderElementTemplateDAO dao;
|
||||
|
||||
|
|
@ -44,4 +50,21 @@ public class OrderTemplatesModel implements IOrderTemplatesModel {
|
|||
return dao.list(OrderElementTemplate.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public OrderElementTemplate createTemplateFrom(OrderElement orderElement) {
|
||||
loadParentsInOrderToAvoidProxies(orderElement);
|
||||
OrderElement reloaded = orderElementDAO
|
||||
.findExistingEntity(orderElement.getId());
|
||||
OrderElementTemplate result = reloaded.createTemplate();
|
||||
return result;
|
||||
}
|
||||
|
||||
private void loadParentsInOrderToAvoidProxies(OrderElement orderElement) {
|
||||
OrderElement current = orderElement;
|
||||
while (current != null) {
|
||||
current = orderElementDAO.findParent(current);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue