cTask.setAssignedShifts(IDj);
cTask.setFinished(true);
M.remove(cTask);
// step 5/A
if (cTask.getResourceDemandNum() == 1) {
Shift efs = IDj.get(0);
efs.addAssignedTask(cTask);
efs.setDisengagingTime(l);
efs.setActualPlace(cTask.getPlace());
}
// step 5/B
if (cTask.getResourceDemandNum() > 1) {
for (int i = 0; i < IDj.size(); i++) {
Shift shift = IDj.get(i);
Shift al = new Shift();
al.setActualPlace(cTask.getPlace());
al.setBeginPlace(shift.getActualPlace());
al.setStandCost(shift.getStandCost());
al.setEndPlace(cTask.getPlace());
al.setId(model.getShiftContainer().getShiftNum()+1);
al.setResource(shift.getResource());
al.setTime(new TimeInterval(shift.getDisengagingTime(), (l - cTask.getNormTime())));
al.setParent(shift);
Shift fel = new Shift();
fel.setBeginPlace(cTask.getPlace());
fel.setStandCost(shift.getStandCost());
fel.setEndPlace(shift.getEndPlace());
fel.setId(model.getShiftContainer().getShiftNum()+2);
fel.setOvertime(shift.getOvertime());
fel.setOvertimeCost(shift.getOvertimeCost());
fel.setResource(shift.getResource());
fel.setTime(new TimeInterval(l, shift.getTime().getEnd()));
fel.setParent(shift);
model.getShiftContainer().putShift(al.getId(), al);
model.getShiftContainer().putShift(fel.getId(), fel);
shift.addAssignedTask(cTask);
shift.setNotUsable(true);
shift.getChilds().add(al);
shift.getChilds().add(fel);