ItEr35S12CUCreacionUnidadesPlanificacionItEr34S12: Removing old scheduling mechanism
This commit is contained in:
parent
aefacfdace
commit
43860ce5f9
5 changed files with 2 additions and 336 deletions
|
|
@ -22,12 +22,12 @@ package org.navalplanner.web.orders;
|
|||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.navalplanner.business.common.exceptions.ValidationException;
|
||||
import org.navalplanner.business.labels.entities.Label;
|
||||
import org.navalplanner.business.orders.entities.IOrderLineGroup;
|
||||
import org.navalplanner.business.orders.entities.Order;
|
||||
import org.navalplanner.business.orders.entities.OrderElement;
|
||||
import org.navalplanner.business.planner.entities.TaskElement;
|
||||
import org.navalplanner.business.resources.entities.Criterion;
|
||||
import org.navalplanner.business.resources.entities.CriterionType;
|
||||
|
||||
|
|
@ -46,10 +46,6 @@ public interface IOrderModel {
|
|||
*/
|
||||
void addLabel(Label label);
|
||||
|
||||
TaskElement convertToInitialSchedule(OrderElement order);
|
||||
|
||||
void convertToScheduleAndSave(Order order);
|
||||
|
||||
/**
|
||||
* Returns a list of {@link Label}
|
||||
*
|
||||
|
|
@ -78,8 +74,6 @@ public interface IOrderModel {
|
|||
|
||||
List<Order> getOrders();
|
||||
|
||||
boolean isAlreadyScheduled(Order order);
|
||||
|
||||
void initEdit(Order order);
|
||||
|
||||
void prepareForCreate();
|
||||
|
|
@ -88,8 +82,6 @@ public interface IOrderModel {
|
|||
|
||||
void save() throws ValidationException;
|
||||
|
||||
void schedule(Order order);
|
||||
|
||||
void setOrder(Order order);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -272,29 +272,7 @@ public class OrderCRUDController extends GenericForwardComposer {
|
|||
messagesForUser.showMessage(Level.INFO, _("Removed {0}", order.getName()));
|
||||
}
|
||||
|
||||
public void confirmSchedule(Order order) {
|
||||
if (orderModel.isAlreadyScheduled(order)) {
|
||||
goToShedulingView(order);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
int status = Messagebox.show(_("Confirm scheduling {0}. Are you sure?", order.getName()), "Schedule",
|
||||
Messagebox.OK | Messagebox.CANCEL, Messagebox.QUESTION);
|
||||
if (Messagebox.OK == status) {
|
||||
schedule(order);
|
||||
}
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void schedule(Order order) {
|
||||
orderModel.schedule(order);
|
||||
goToShedulingView(order);
|
||||
}
|
||||
|
||||
private void goToShedulingView(Order order) {
|
||||
planningControllerEntryPoints.goToScheduleOf(order);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -32,7 +32,6 @@ import java.util.Map;
|
|||
import java.util.Set;
|
||||
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.joda.time.LocalDate;
|
||||
import org.navalplanner.business.advance.entities.AdvanceMeasurement;
|
||||
import org.navalplanner.business.advance.entities.DirectAdvanceAssignment;
|
||||
import org.navalplanner.business.advance.entities.IndirectAdvanceAssignment;
|
||||
|
|
@ -46,12 +45,7 @@ import org.navalplanner.business.orders.entities.HoursGroup;
|
|||
import org.navalplanner.business.orders.entities.IOrderLineGroup;
|
||||
import org.navalplanner.business.orders.entities.Order;
|
||||
import org.navalplanner.business.orders.entities.OrderElement;
|
||||
import org.navalplanner.business.orders.entities.OrderLine;
|
||||
import org.navalplanner.business.orders.entities.OrderLineGroup;
|
||||
import org.navalplanner.business.planner.daos.ITaskElementDAO;
|
||||
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.requirements.entities.DirectCriterionRequirement;
|
||||
import org.navalplanner.business.resources.daos.ICriterionDAO;
|
||||
import org.navalplanner.business.resources.daos.ICriterionTypeDAO;
|
||||
|
|
@ -91,9 +85,6 @@ public class OrderModel implements IOrderModel {
|
|||
@Autowired
|
||||
private ICriterionDAO criterionDAO;
|
||||
|
||||
@Autowired
|
||||
private ITaskElementDAO taskElementDAO;
|
||||
|
||||
@Autowired
|
||||
private ILabelDAO labelDAO;
|
||||
|
||||
|
|
@ -325,18 +316,6 @@ public class OrderModel implements IOrderModel {
|
|||
return orderElementModel;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void schedule(Order order) {
|
||||
convertToScheduleAndSave(getFromDB(order));
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public boolean isAlreadyScheduled(Order order) {
|
||||
return getFromDB(order).isSomeTaskElementScheduled();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Criterion> getCriterionsFor(CriterionType criterionType) {
|
||||
return mapCriterions.get(criterionType);
|
||||
|
|
@ -347,64 +326,4 @@ public class OrderModel implements IOrderModel {
|
|||
this.order = order;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TaskElement convertToInitialSchedule(OrderElement order) {
|
||||
TaskElement result;
|
||||
if (order instanceof OrderLineGroup) {
|
||||
OrderLineGroup group = (OrderLineGroup) order;
|
||||
result = convertToTaskGroup(group);
|
||||
} else {
|
||||
OrderLine line = (OrderLine) order;
|
||||
if (line.getHoursGroups().isEmpty()) {
|
||||
throw new IllegalArgumentException(_(
|
||||
"The line must have at least one {0} associated",
|
||||
HoursGroup.class.getSimpleName()));
|
||||
}
|
||||
result = line.getHoursGroups().size() > 1 ? convertToTaskGroup(line)
|
||||
: convertToTask(line);
|
||||
}
|
||||
if (order.getDeadline() != null) {
|
||||
result.setDeadline(new LocalDate(order.getDeadline()));
|
||||
}
|
||||
if (result instanceof Task) {
|
||||
order.applyStartConstraintIfNeededTo((Task) result);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private TaskGroup convertToTaskGroup(OrderLine line) {
|
||||
TaskGroup result = TaskGroup.create();
|
||||
result.setOrderElement(line);
|
||||
for (HoursGroup hoursGroup : line.getHoursGroups()) {
|
||||
result.addTaskElement(taskFrom(line, hoursGroup));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private Task convertToTask(OrderLine line) {
|
||||
HoursGroup hoursGroup = line.getHoursGroups().get(0);
|
||||
return taskFrom(line, hoursGroup);
|
||||
}
|
||||
|
||||
private Task taskFrom(OrderLine line, HoursGroup hoursGroup) {
|
||||
Task result = Task.createTask(hoursGroup);
|
||||
result.setOrderElement(line);
|
||||
return result;
|
||||
}
|
||||
|
||||
private TaskGroup convertToTaskGroup(OrderLineGroup group) {
|
||||
TaskGroup result = TaskGroup.create();
|
||||
result.setOrderElement(group);
|
||||
for (OrderElement orderElement : group.getChildren()) {
|
||||
result.addTaskElement(convertToInitialSchedule(orderElement));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void convertToScheduleAndSave(Order order) {
|
||||
taskElementDAO.save(convertToInitialSchedule(order));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@
|
|||
image="/common/img/ico_planificador1.png"
|
||||
hoverImage="/common/img/ico_planificador.png"
|
||||
tooltiptext="${i18n:_('Schedule')}"
|
||||
onClick="controller.confirmSchedule(self.parent.parent.value);" />
|
||||
onClick="controller.schedule(self.parent.parent.value);" />
|
||||
</hbox>
|
||||
</row>
|
||||
</rows>
|
||||
|
|
|
|||
|
|
@ -21,10 +21,7 @@
|
|||
package org.navalplanner.web.orders;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.equalTo;
|
||||
import static org.hamcrest.CoreMatchers.is;
|
||||
import static org.hamcrest.CoreMatchers.not;
|
||||
import static org.hamcrest.CoreMatchers.notNullValue;
|
||||
import static org.hamcrest.CoreMatchers.nullValue;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertThat;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
|
@ -42,10 +39,8 @@ import javax.annotation.Resource;
|
|||
|
||||
import org.hibernate.Session;
|
||||
import org.hibernate.SessionFactory;
|
||||
import org.joda.time.LocalDate;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.matchers.JUnitMatchers;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.navalplanner.business.IDataBootstrap;
|
||||
import org.navalplanner.business.common.IAdHocTransactionService;
|
||||
|
|
@ -58,10 +53,6 @@ import org.navalplanner.business.orders.entities.Order;
|
|||
import org.navalplanner.business.orders.entities.OrderElement;
|
||||
import org.navalplanner.business.orders.entities.OrderLine;
|
||||
import org.navalplanner.business.orders.entities.OrderLineGroup;
|
||||
import org.navalplanner.business.planner.entities.StartConstraintType;
|
||||
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.requirements.entities.CriterionRequirement;
|
||||
import org.navalplanner.business.requirements.entities.DirectCriterionRequirement;
|
||||
import org.navalplanner.business.resources.daos.ICriterionTypeDAO;
|
||||
|
|
@ -175,51 +166,6 @@ public class OrderModelTest {
|
|||
assertFalse(orderDAO.exists(order.getId()));
|
||||
}
|
||||
|
||||
@Test
|
||||
@NotTransactional
|
||||
public void removingOrderWithAssociatedTasksDeletesThem()
|
||||
throws ValidationException, InstanceNotFoundException {
|
||||
final Long orderId = adHocTransaction
|
||||
.runOnTransaction(new IOnTransaction<Long>() {
|
||||
|
||||
@Override
|
||||
public Long execute() {
|
||||
Order order = createValidOrder();
|
||||
OrderLine orderLine = OrderLine.create();
|
||||
orderLine.setName("bla");
|
||||
orderLine.setCode("00000000");
|
||||
orderLine.setWorkHours(10);
|
||||
order.add(orderLine);
|
||||
orderModel.setOrder(order);
|
||||
try {
|
||||
orderModel.save();
|
||||
} catch (ValidationException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
orderModel.convertToScheduleAndSave(order);
|
||||
getSession().flush();
|
||||
return order.getId();
|
||||
}
|
||||
});
|
||||
adHocTransaction.runOnTransaction(new IOnTransaction<Void>() {
|
||||
|
||||
@Override
|
||||
public Void execute() {
|
||||
try {
|
||||
Order reloaded = orderDAO.find(orderId);
|
||||
OrderElement e = reloaded.getOrderElements().iterator()
|
||||
.next();
|
||||
assertThat(e.getTaskElements().size(), equalTo(1));
|
||||
orderModel.remove(reloaded);
|
||||
assertFalse(orderDAO.exists(orderId));
|
||||
return null;
|
||||
} catch (InstanceNotFoundException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Test(expected = ValidationException.class)
|
||||
public void shouldSendValidationExceptionIfEndDateIsBeforeThanStartingDate()
|
||||
throws ValidationException {
|
||||
|
|
@ -467,179 +413,10 @@ public class OrderModelTest {
|
|||
orderModel.save();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void aOrderLineGroupIsConvertedToATaskGroup() {
|
||||
OrderLineGroup orderLineGroup = OrderLineGroup.create();
|
||||
orderLineGroup.setName("foo");
|
||||
orderLineGroup.setCode("000000000");
|
||||
TaskElement task = orderModel.convertToInitialSchedule(orderLineGroup);
|
||||
assertThat(task, is(TaskGroup.class));
|
||||
|
||||
TaskGroup group = (TaskGroup) task;
|
||||
assertThat(group.getOrderElement(),
|
||||
equalTo((OrderElement) orderLineGroup));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void aOrderLineWithOneHourGroupIsConvertedToATask() {
|
||||
OrderLine orderLine = OrderLine.create();
|
||||
orderLine.setName("bla");
|
||||
orderLine.setCode("000000000");
|
||||
final int hours = 30;
|
||||
HoursGroup hoursGroup = createHoursGroup(hours);
|
||||
orderLine.addHoursGroup(hoursGroup);
|
||||
TaskElement taskElement = orderModel
|
||||
.convertToInitialSchedule(orderLine);
|
||||
assertThat(taskElement, is(Task.class));
|
||||
|
||||
Task group = (Task) taskElement;
|
||||
assertThat(group.getOrderElement(), equalTo((OrderElement) orderLine));
|
||||
assertThat(group.getHoursGroup(), equalTo(hoursGroup));
|
||||
assertThat(taskElement.getWorkHours(), equalTo(hours));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void theDeadlineIsCopied() {
|
||||
OrderLine orderLine = OrderLine.create();
|
||||
orderLine.setName("bla");
|
||||
orderLine.setCode("000000000");
|
||||
final int hours = 30;
|
||||
HoursGroup hoursGroup = createHoursGroup(hours);
|
||||
orderLine.addHoursGroup(hoursGroup);
|
||||
orderLine.setDeadline(year(2007));
|
||||
TaskElement task = orderModel.convertToInitialSchedule(orderLine);
|
||||
assertThat(task.getDeadline(), equalTo(new LocalDate(year(2007))));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void ifNoParentWithStartDateTheStartConstraintIsSoonAsPossible() {
|
||||
OrderLine orderLine = OrderLine.create();
|
||||
orderLine.setName("bla");
|
||||
orderLine.setCode("000000000");
|
||||
HoursGroup hoursGroup = createHoursGroup(30);
|
||||
orderLine.addHoursGroup(hoursGroup);
|
||||
Task task = (Task) orderModel
|
||||
.convertToInitialSchedule(orderLine);
|
||||
assertThat(task.getStartConstraint().getStartConstraintType(),
|
||||
equalTo(StartConstraintType.AS_SOON_AS_POSSIBLE));
|
||||
assertThat(task.getStartConstraint().getConstraintDate(), nullValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void ifSomeParentHasInitDateTheStartConstraintIsNotEarlierThan() {
|
||||
OrderLine orderLine = OrderLine.create();
|
||||
orderLine.setName("bla");
|
||||
orderLine.setCode("000000000");
|
||||
final Date initDate = year(2008);
|
||||
orderLine.setInitDate(initDate);
|
||||
HoursGroup hoursGroup = createHoursGroup(30);
|
||||
orderLine.addHoursGroup(hoursGroup);
|
||||
Task task = (Task) orderModel
|
||||
.convertToInitialSchedule(orderLine);
|
||||
assertThat(task.getStartConstraint().getStartConstraintType(),
|
||||
equalTo(StartConstraintType.START_NOT_EARLIER_THAN));
|
||||
assertThat(task.getStartConstraint().getConstraintDate(),
|
||||
equalTo(initDate));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void unlessTheOnlyParentWithInitDateNotNullIsTheOrder() {
|
||||
Order order = Order.create();
|
||||
final Date initDate = year(2008);
|
||||
order.setInitDate(initDate);
|
||||
OrderLine orderLine = OrderLine.create();
|
||||
order.add(orderLine);
|
||||
orderLine.setName("bla");
|
||||
orderLine.setCode("000000000");
|
||||
HoursGroup hoursGroup = createHoursGroup(30);
|
||||
orderLine.addHoursGroup(hoursGroup);
|
||||
Task task = (Task) orderModel.convertToInitialSchedule(orderLine);
|
||||
assertThat(task.getStartConstraint().getStartConstraintType(),
|
||||
equalTo(StartConstraintType.AS_SOON_AS_POSSIBLE));
|
||||
assertThat(task.getStartConstraint().getConstraintDate(), nullValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void theSublinesOfAnOrderLineGroupAreConverted() {
|
||||
OrderLineGroup orderLineGroup = OrderLineGroup.create();
|
||||
orderLineGroup.setName("foo");
|
||||
orderLineGroup.setCode("000000000");
|
||||
OrderLine orderLine = OrderLine.create();
|
||||
orderLine.setName("bla");
|
||||
orderLine.setCode("000000000");
|
||||
HoursGroup hoursGroup = createHoursGroup(30);
|
||||
orderLine.addHoursGroup(hoursGroup);
|
||||
orderLineGroup.add(orderLine);
|
||||
TaskElement task = orderModel.convertToInitialSchedule(orderLineGroup);
|
||||
assertThat(task, is(TaskGroup.class));
|
||||
|
||||
TaskGroup group = (TaskGroup) task;
|
||||
|
||||
assertThat(group.getOrderElement(),
|
||||
equalTo((OrderElement) orderLineGroup));
|
||||
assertThat(group.getChildren().size(), equalTo(1));
|
||||
assertThat(group.getChildren().get(0).getOrderElement(),
|
||||
equalTo((OrderElement) orderLine));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void theWorkHoursOfATaskGroupAreTheSameThanTheTaskElement() {
|
||||
OrderLineGroup orderLineGroup = OrderLineGroup.create();
|
||||
orderLineGroup.setName("foo");
|
||||
orderLineGroup.setCode("000000000");
|
||||
OrderLine orderLine = OrderLine.create();
|
||||
orderLine.setName("bla");
|
||||
orderLine.setCode("000000000");
|
||||
orderLine.addHoursGroup(createHoursGroup(20));
|
||||
orderLine.addHoursGroup(createHoursGroup(30));
|
||||
orderLineGroup.add(orderLine);
|
||||
TaskElement task = orderModel.convertToInitialSchedule(orderLineGroup);
|
||||
assertThat(task.getWorkHours(), equalTo(orderLineGroup.getWorkHours()));
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void aOrderLineWithNoHoursIsRejected() {
|
||||
OrderLine orderLine = OrderLine.create();
|
||||
orderLine.setName("bla");
|
||||
orderLine.setCode("000000000");
|
||||
orderModel.convertToInitialSchedule(orderLine);
|
||||
}
|
||||
|
||||
private HoursGroup createHoursGroup(int hours) {
|
||||
HoursGroup result = new HoursGroup();
|
||||
result.setWorkingHours(hours);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void aOrderLineWithMoreThanOneHourIsConvertedToATaskGroup() {
|
||||
OrderLine orderLine = OrderLine.create();
|
||||
orderLine.setName("bla");
|
||||
orderLine.setCode("000000000");
|
||||
HoursGroup hours1 = createHoursGroup(30);
|
||||
orderLine.addHoursGroup(hours1);
|
||||
HoursGroup hours2 = createHoursGroup(10);
|
||||
orderLine.addHoursGroup(hours2);
|
||||
TaskElement taskElement = orderModel
|
||||
.convertToInitialSchedule(orderLine);
|
||||
assertThat(taskElement, is(TaskGroup.class));
|
||||
|
||||
TaskGroup group = (TaskGroup) taskElement;
|
||||
assertThat(group.getOrderElement(), equalTo((OrderElement) orderLine));
|
||||
assertThat(group.getChildren().size(), equalTo(2));
|
||||
|
||||
Task child1 = (Task) group.getChildren().get(0);
|
||||
Task child2 = (Task) group.getChildren().get(1);
|
||||
|
||||
assertThat(child1.getOrderElement(), equalTo((OrderElement) orderLine));
|
||||
assertThat(child2.getOrderElement(), equalTo((OrderElement) orderLine));
|
||||
|
||||
assertThat(child1.getHoursGroup(), not(equalTo(child2.getHoursGroup())));
|
||||
|
||||
assertThat(child1.getHoursGroup(), JUnitMatchers
|
||||
.either(equalTo(hours1)).or(equalTo(hours2)));
|
||||
assertThat(child2.getHoursGroup(), JUnitMatchers
|
||||
.either(equalTo(hours1)).or(equalTo(hours2)));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue