diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/IWorkerModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/IWorkerModel.java index 40161fa70..70b531228 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/IWorkerModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/IWorkerModel.java @@ -144,4 +144,6 @@ public interface IWorkerModel extends IIntegrationEntityModel { void confirmRemove(Worker worker) throws InstanceNotFoundException; + void removeCalendar(); + } \ No newline at end of file diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/WorkerCRUDController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/WorkerCRUDController.java index a1b0b53d1..90372a83a 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/WorkerCRUDController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/WorkerCRUDController.java @@ -506,8 +506,8 @@ public class WorkerCRUDController extends GenericForwardComposer implements @Override public void cancel() { + workerModel.removeCalendar(); resourceCalendarModel.cancel(); - workerModel.setCalendar(null); reloadCurrentWindow(); } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/WorkerModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/WorkerModel.java index 660b1445e..4d086baa2 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/WorkerModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/WorkerModel.java @@ -33,6 +33,7 @@ import java.util.Map; import java.util.Set; import org.apache.commons.lang.Validate; +import org.apache.commons.logging.LogFactory; import org.joda.time.LocalDate; import org.navalplanner.business.calendars.daos.IBaseCalendarDAO; import org.navalplanner.business.calendars.entities.BaseCalendar; @@ -73,12 +74,16 @@ import org.springframework.transaction.annotation.Transactional; * Model for worker
* @author Óscar González Fernández * @author Fernando Bellas Permuy + * @author Diego Pino García */ @Service @Scope(BeanDefinition.SCOPE_PROTOTYPE) @OnConcurrentModification(goToPage = "/resources/worker/worker.zul") public class WorkerModel extends IntegrationEntityModel implements IWorkerModel { + private static final org.apache.commons.logging.Log LOG = LogFactory + .getLog(WorkerModel.class); + @Autowired private IResourceDAO resourceDAO; @@ -88,8 +93,11 @@ public class WorkerModel extends IntegrationEntityModel implements IWorkerModel private final ICriterionType[] laboralRelatedTypes = { PredefinedCriterionTypes.LEAVE, PredefinedCriterionTypes.WORK_RELATIONSHIP }; + private Worker worker; + private ResourceCalendar calendarToRemove = null; + private final ICriterionDAO criterionDAO; private IMultipleCriterionActiveAssigner localizationsAssigner; @@ -126,6 +134,7 @@ public class WorkerModel extends IntegrationEntityModel implements IWorkerModel @Override @Transactional public void save() throws ValidationException { + removeCalendarIfNeeded(); resourceDAO.save(worker); if (worker.getCalendar() != null) { baseCalendarModel.checkInvalidValuesCalendar(worker.getCalendar()); @@ -137,6 +146,18 @@ public class WorkerModel extends IntegrationEntityModel implements IWorkerModel localizationsAssigner = null; } + private void removeCalendarIfNeeded() { + if (calendarToRemove != null) { + try { + resourceDAO.reattach(worker); + baseCalendarDAO.remove(calendarToRemove.getId()); + calendarToRemove = null; + } catch (InstanceNotFoundException e) { + LOG.error("Couldn't remove calendar"); + } + } + } + @Override @Transactional(readOnly = true) public List getWorkers() { @@ -599,4 +620,10 @@ public class WorkerModel extends IntegrationEntityModel implements IWorkerModel return this.worker; } + @Override + public void removeCalendar() { + calendarToRemove = worker.getCalendar(); + worker.setCalendar(null); + } + }