From 56d85592fc14dfb91dcf0d90e33caa46a0b7c842 Mon Sep 17 00:00:00 2001 From: Lorenzo Tilve Date: Thu, 17 Dec 2009 18:58:38 +0100 Subject: [PATCH] ItEr39S12RFSoporteRecursosVirtuais: Virtual worker groups management --- .../business/resources/daos/IResourceDAO.java | 4 + .../business/resources/daos/ResourceDAO.java | 25 ++++ .../business/resources/entities/Resource.java | 4 + .../resources/entities/VirtualWorker.java | 69 +++++++++ .../business/resources/entities/Worker.java | 8 ++ .../resources/entities/Resources.hbm.xml | 6 + .../web/common/CustomMenuController.java | 7 +- .../IWorkerCRUDControllerEntryPoints.java | 3 - .../web/resources/worker/IWorkerModel.java | 6 + .../worker/WorkerCRUDController.java | 136 ++++++++++-------- .../web/resources/worker/WorkerModel.java | 28 +++- .../main/webapp/resources/worker/_edition.zul | 24 +++- .../main/webapp/resources/worker/_list.zul | 2 +- .../resources/worker/_listVirtualWorkers.zul | 49 +++++++ .../resources/worker/virtualWorkers.zul | 42 ++++++ .../main/webapp/resources/worker/worker.zul | 11 -- 16 files changed, 336 insertions(+), 88 deletions(-) create mode 100644 navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/VirtualWorker.java create mode 100644 navalplanner-webapp/src/main/webapp/resources/worker/_listVirtualWorkers.zul create mode 100644 navalplanner-webapp/src/main/webapp/resources/worker/virtualWorkers.zul diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/IResourceDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/IResourceDAO.java index 60c53e484..b6a97564e 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/IResourceDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/IResourceDAO.java @@ -39,6 +39,10 @@ public interface IResourceDAO extends IGenericDAO { public List getWorkers(); + public List getRealWorkers(); + + public List getVirtualWorkers(); + /** * Returns all {@link Resource} which satisfy a set of {@link Criterion} */ diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/ResourceDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/ResourceDAO.java index a1926f212..3101b2d5b 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/ResourceDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/daos/ResourceDAO.java @@ -22,6 +22,7 @@ package org.navalplanner.business.resources.daos; import java.util.ArrayList; import java.util.Collection; +import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; @@ -54,6 +55,30 @@ public class ResourceDAO extends GenericDAOHibernate implements return list(Worker.class); } + @Override + public List getVirtualWorkers() { + List list = getWorkers(); + for (Iterator iterator = list.iterator(); iterator.hasNext();) { + Worker worker = iterator.next(); + if (worker.isReal()) { + iterator.remove(); + } + } + return list; + } + + @Override + public List getRealWorkers() { + List list = getWorkers(); + for (Iterator iterator = list.iterator(); iterator.hasNext();) { + Worker worker = iterator.next(); + if (worker.isVirtual()) { + iterator.remove(); + } + } + return list; + } + @Override public List findAllSatisfyingCriterions( Collection criterions) { diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Resource.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Resource.java index 91efa3848..eda7ebd4d 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Resource.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Resource.java @@ -784,4 +784,8 @@ public abstract class Resource extends BaseEntity{ } return false; } + + public boolean isVirtual() { + return false; + } } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/VirtualWorker.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/VirtualWorker.java new file mode 100644 index 000000000..6918166ba --- /dev/null +++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/VirtualWorker.java @@ -0,0 +1,69 @@ +/* + * This file is part of ###PROJECT_NAME### + * + * Copyright (C) 2009 Fundación para o Fomento da Calidade Industrial e + * Desenvolvemento Tecnolóxico de Galicia + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package org.navalplanner.business.resources.entities; + + +/** + * This class models a VirtualWorker. + * + * @author Lorenzo Tilve Álvaro + */ +public class VirtualWorker extends Worker { + + public static VirtualWorker create() { + VirtualWorker virtualWorker = new VirtualWorker(); + virtualWorker.setNewObject(true); + virtualWorker.setNif("[Virtual]"); + return virtualWorker; + } + + private String observations; + + /** + * Constructor for hibernate. Do not use! + */ + public VirtualWorker() { + + } + + @Override + public String getDescription(){ + return getFirstName()+" "+getSurname(); + } + + public String getName() { + return getFirstName() + " " + getSurname(); + } + + @Override + public boolean isVirtual() { + return true; + } + + public String getObservations() { + return observations; + } + + public void setObservations(String observations) { + this.observations = observations; + } + +} diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Worker.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Worker.java index 9a99b819c..c6e8f98f4 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Worker.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Worker.java @@ -103,4 +103,12 @@ public class Worker extends Resource { this.nif = nif; } + public boolean isVirtual() { + return false; + } + + public boolean isReal() { + return !isVirtual(); + } + } diff --git a/navalplanner-business/src/main/resources/org/navalplanner/business/resources/entities/Resources.hbm.xml b/navalplanner-business/src/main/resources/org/navalplanner/business/resources/entities/Resources.hbm.xml index 48b6b996f..0e26ad750 100644 --- a/navalplanner-business/src/main/resources/org/navalplanner/business/resources/entities/Resources.hbm.xml +++ b/navalplanner-business/src/main/resources/org/navalplanner/business/resources/entities/Resources.hbm.xml @@ -36,6 +36,12 @@ + + + + + + diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/CustomMenuController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/CustomMenuController.java index 630c85104..276955f26 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/CustomMenuController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/CustomMenuController.java @@ -194,7 +194,7 @@ public class CustomMenuController extends Div implements IMenuItemsRegister { public void initializeMenu() { topItem(_("Scheduling"), "/planner/index.zul", "01-introducion.html", - subItem( + subItem( _("Company view"), "/planner/index.zul;company_scheduling", "01-introducion.html"), subItem( _("General resource allocation"), @@ -208,7 +208,10 @@ public class CustomMenuController extends Div implements IMenuItemsRegister { _("Workers List"), "/resources/worker/worker.zul", "05-recursos.html#xesti-n-de-traballadores"), subItem( _("Machines List"), "/resources/machine/machines.zul", - "05-recursos.html#xesti-n-de-m-quinas")); + "05-recursos.html#xesti-n-de-m-quinas"), subItem( + _("Virtual worker groups"), + "/resources/worker/virtualWorkers.zul", + "05-recursos.html#xesti-n-de-traballadores")); topItem(_("Work reports"), "/workreports/workReportTypes.zul", "", subItem(_("Work report types"), diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/IWorkerCRUDControllerEntryPoints.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/IWorkerCRUDControllerEntryPoints.java index b64a0cf5f..e3c4c4df1 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/IWorkerCRUDControllerEntryPoints.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/IWorkerCRUDControllerEntryPoints.java @@ -34,9 +34,6 @@ public interface IWorkerCRUDControllerEntryPoints { @EntryPoint("edit") public abstract void goToEditForm(Worker worker); - @EntryPoint("workRelationships") - public abstract void goToWorkRelationshipsForm(Worker worker); - @EntryPoint("create") public abstract void goToCreateForm(); 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 e44139218..e5fee2bf5 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 @@ -84,10 +84,16 @@ public interface IWorkerModel { List getWorkers(); + List getRealWorkers(); + + List getVirtualWorkers(); + Worker getWorker(); void prepareForCreate(); + void prepareForCreate(boolean virtual); + void prepareEditFor(Worker worker); IMultipleCriterionActiveAssigner getLocalizationsAssigner(); 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 c43c8f1c8..119afd657 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 @@ -29,7 +29,7 @@ import java.util.List; import org.navalplanner.business.calendars.entities.BaseCalendar; import org.navalplanner.business.calendars.entities.ResourceCalendar; import org.navalplanner.business.common.exceptions.ValidationException; -import org.navalplanner.business.resources.entities.CriterionSatisfaction; +import org.navalplanner.business.resources.entities.VirtualWorker; import org.navalplanner.business.resources.entities.Worker; import org.navalplanner.web.calendars.BaseCalendarEditionController; import org.navalplanner.web.calendars.IBaseCalendarModel; @@ -54,6 +54,7 @@ import org.zkoss.zul.api.Window; /** * Controller for {@link Worker} resource
* @author Óscar González Fernández + * @author Lorenzo Tilve Álvaro */ public class WorkerCRUDController extends GenericForwardComposer implements IWorkerCRUDControllerEntryPoints { @@ -62,12 +63,6 @@ public class WorkerCRUDController extends GenericForwardComposer implements private Window editWindow; - private Window workRelationshipsWindow; - - private Window addWorkRelationshipWindow; - - private Window editWorkRelationshipWindow; - private IWorkerModel workerModel; private IURLHandlerRegistry URLHandlerRegistry; @@ -80,14 +75,10 @@ public class WorkerCRUDController extends GenericForwardComposer implements private CriterionsController criterionsController; - private WorkRelationshipsController addWorkRelationship; - private LocalizationsController localizationsForEditionController; private LocalizationsController localizationsForCreationController; - private WorkRelationshipsController editWorkRelationship; - private ResourcesCostCategoryAssignmentController resourcesCostCategoryAssignmentController; private IWorkerCRUDControllerEntryPoints workerCRUD; @@ -105,18 +96,13 @@ public class WorkerCRUDController extends GenericForwardComposer implements public WorkerCRUDController() { } - public WorkerCRUDController( Window listWindow, - Window editWindow, Window workRelationshipsWindow, - Window addWorkRelationshipWindow, - Window editWorkRelationshipWindow, Window editCalendarWindow, + public WorkerCRUDController(Window listWindow, Window editWindow, + Window editCalendarWindow, IWorkerModel workerModel, IMessagesForUser messages, IWorkerCRUDControllerEntryPoints workerCRUD) { this.listWindow = listWindow; this.editWindow = editWindow; - this.workRelationshipsWindow = workRelationshipsWindow; - this.addWorkRelationshipWindow = addWorkRelationshipWindow; - this.editWorkRelationshipWindow = editWorkRelationshipWindow; this.workerModel = workerModel; this.messages = messages; this.workerCRUD = workerCRUD; @@ -131,6 +117,14 @@ public class WorkerCRUDController extends GenericForwardComposer implements return workerModel.getWorkers(); } + public List getRealWorkers() { + return workerModel.getRealWorkers(); + } + + public List getVirtualWorkers() { + return workerModel.getVirtualWorkers(); + } + public LocalizationsController getLocalizations() { if (workerModel.isCreating()) { return localizationsForCreationController; @@ -186,7 +180,6 @@ public class WorkerCRUDController extends GenericForwardComposer implements } public void goToList() { - getBookmarker().goToList(); getVisibility().showOnly(listWindow); } @@ -201,9 +194,22 @@ public class WorkerCRUDController extends GenericForwardComposer implements editWindow.setTitle(_("Edit Worker")); getVisibility().showOnly(editWindow); Util.reloadBindings(editWindow); - } + public void goToEditVirtualWorkerForm(Worker worker) { + workerModel.prepareEditFor(worker); + resourcesCostCategoryAssignmentController.setResource(workerModel + .getWorker()); + if (isCalendarNotNull()) { + editCalendar(); + } + editAsignedCriterions(); + editWindow.setTitle(_("Edit virtual worker groups")); + getVisibility().showOnly(editWindow); + Util.reloadBindings(editWindow); + } + + public void goToEditForm() { if (isCalendarNotNull()) { editCalendar(); @@ -213,21 +219,6 @@ public class WorkerCRUDController extends GenericForwardComposer implements Util.reloadBindings(editWindow); } - public void goToWorkRelationshipsForm(Worker worker) { - getVisibility().showOnly(workRelationshipsWindow); - Util.reloadBindings(workRelationshipsWindow); - } - - public void goToWorkRelationshipsForm() { - getVisibility().showOnly(workRelationshipsWindow); - Util.reloadBindings(workRelationshipsWindow); - } - - public void goToAddWorkRelationshipForm() { - this.addWorkRelationship.prepareForCreate(); - getVisibility().showOnly(addWorkRelationshipWindow); - } - public void goToCreateForm() { getBookmarker().goToCreateForm(); workerModel.prepareForCreate(); @@ -238,11 +229,6 @@ public class WorkerCRUDController extends GenericForwardComposer implements Util.reloadBindings(editWindow); } - public void goToEditWorkRelationshipForm(CriterionSatisfaction satisfaction) { - this.editWorkRelationship.prepareForEdit(satisfaction); - getVisibility().showOnly(editWorkRelationshipWindow); - } - @Override public void doAfterCompose(Component comp) throws Exception { super.doAfterCompose(comp); @@ -258,14 +244,6 @@ public class WorkerCRUDController extends GenericForwardComposer implements throw new RuntimeException(_("MessagesContainer is needed")); } messages = new MessagesForUser(messagesContainer); - this.addWorkRelationship = new WorkRelationshipsController( - this.workerModel, this, messages); - setupWorkRelationshipController(this.addWorkRelationship, - this.addWorkRelationshipWindow); - setupWorkRelationshipController( - this.editWorkRelationship = new WorkRelationshipsController( - this.workerModel, this, messages), - editWorkRelationshipWindow); setupResourcesCostCategoryAssignmentController(comp); final URLHandler handler = URLHandlerRegistry @@ -310,14 +288,6 @@ public class WorkerCRUDController extends GenericForwardComposer implements return baseCalendarEditionController; } - private void setupWorkRelationshipController( - WorkRelationshipsController workRelationshipController, - Window workRelationshipWindow) throws Exception { - workRelationshipController.doAfterCompose(workRelationshipWindow); - workRelationshipWindow.setVariable("workRelationship", - workRelationshipController, true); - } - private LocalizationsController createLocalizationsController( Component comp, String localizationsContainerName) throws Exception { LocalizationsController localizationsController = new LocalizationsController( @@ -330,17 +300,11 @@ public class WorkerCRUDController extends GenericForwardComposer implements private OnlyOneVisible getVisibility() { if (visibility == null) { - visibility = new OnlyOneVisible(listWindow, editWindow, - workRelationshipsWindow,addWorkRelationshipWindow, - editWorkRelationshipWindow); + visibility = new OnlyOneVisible(listWindow, editWindow); } return visibility; } - public GenericForwardComposer getWorkRelationship() { - return this.addWorkRelationship; - } - private IWorkerCRUDControllerEntryPoints getBookmarker() { return workerCRUD; } @@ -467,7 +431,53 @@ public class WorkerCRUDController extends GenericForwardComposer implements BaseCalendar defaultCalendar = workerModel.getDefaultCalendar(); return defaultCalendar.getId().equals(calendar.getId()); } + } + public void goToCreateVirtualWorkerForm() { + workerModel.prepareForCreate(true); + createAsignedCriterions(); + resourcesCostCategoryAssignmentController.setResource(workerModel + .getWorker()); + editWindow.setTitle(_("Create virtual resource")); + getVisibility().showOnly(editWindow); + Util.reloadBindings(editWindow); + } + + public boolean isVirtualWorker() { + boolean isVirtual = false; + if (this.workerModel != null) { + if (this.workerModel.getWorker() != null ) { + isVirtual = this.workerModel.getWorker().isVirtual(); + } + } + return isVirtual; + } + + public boolean isRealWorker() { + return !isVirtualWorker(); + } + + public String getVirtualWorkerObservations() { + if (isVirtualWorker()) { + return ((VirtualWorker) this.workerModel.getWorker()) + .getObservations(); + } else { + return ""; + } + } + + public void setVirtualWorkerObservations(String observations) { + if (isVirtualWorker()) { + ((VirtualWorker) this.workerModel.getWorker()) + .setObservations(observations); + } + } + + public String getVirtualWorkerCapacity() { + return ""; + } + + public void setVirtualWorkerCapacity(String capacity) { } } 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 ef61ba15b..78cf0e720 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 @@ -51,6 +51,7 @@ import org.navalplanner.business.resources.entities.ICriterionType; import org.navalplanner.business.resources.entities.Interval; import org.navalplanner.business.resources.entities.PredefinedCriterionTypes; import org.navalplanner.business.resources.entities.Resource; +import org.navalplanner.business.resources.entities.VirtualWorker; import org.navalplanner.business.resources.entities.Worker; import org.navalplanner.web.calendars.IBaseCalendarModel; import org.springframework.beans.factory.annotation.Autowired; @@ -125,6 +126,18 @@ public class WorkerModel implements IWorkerModel { return resourceDAO.getWorkers(); } + @Override + @Transactional(readOnly = true) + public List getRealWorkers() { + return resourceDAO.getRealWorkers(); + } + + @Override + @Transactional(readOnly = true) + public List getVirtualWorkers() { + return resourceDAO.getVirtualWorkers(); + } + @Override public Worker getWorker() { return worker; @@ -133,12 +146,25 @@ public class WorkerModel implements IWorkerModel { @Override @Transactional(readOnly = true) public void prepareForCreate() { - worker = Worker.create(); + prepareForCreate(false); + } + + @Override + @Transactional(readOnly = true) + public void prepareForCreate(boolean virtual) { + + if (virtual) { + worker = VirtualWorker.create(); + worker.setFirstName("Virtual"); + } else { + worker = Worker.create(); + } localizationsAssigner = new MultipleCriterionActiveAssigner( criterionDAO, worker, PredefinedCriterionTypes.LOCATION_GROUP); } + @Override @Transactional(readOnly = true) public void prepareEditFor(Worker worker) { diff --git a/navalplanner-webapp/src/main/webapp/resources/worker/_edition.zul b/navalplanner-webapp/src/main/webapp/resources/worker/_edition.zul index 86010445f..21844c3dd 100644 --- a/navalplanner-webapp/src/main/webapp/resources/worker/_edition.zul +++ b/navalplanner-webapp/src/main/webapp/resources/worker/_edition.zul @@ -41,20 +41,33 @@ - + - + + + - + + + + + @@ -62,12 +75,9 @@ - - + diff --git a/navalplanner-webapp/src/main/webapp/resources/worker/_list.zul b/navalplanner-webapp/src/main/webapp/resources/worker/_list.zul index 63ac35662..75ed58c55 100644 --- a/navalplanner-webapp/src/main/webapp/resources/worker/_list.zul +++ b/navalplanner-webapp/src/main/webapp/resources/worker/_list.zul @@ -19,7 +19,7 @@ --> - diff --git a/navalplanner-webapp/src/main/webapp/resources/worker/_listVirtualWorkers.zul b/navalplanner-webapp/src/main/webapp/resources/worker/_listVirtualWorkers.zul new file mode 100644 index 000000000..f40c9d162 --- /dev/null +++ b/navalplanner-webapp/src/main/webapp/resources/worker/_listVirtualWorkers.zul @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/navalplanner-webapp/src/main/webapp/resources/worker/virtualWorkers.zul b/navalplanner-webapp/src/main/webapp/resources/worker/virtualWorkers.zul new file mode 100644 index 000000000..0302bd5fc --- /dev/null +++ b/navalplanner-webapp/src/main/webapp/resources/worker/virtualWorkers.zul @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/navalplanner-webapp/src/main/webapp/resources/worker/worker.zul b/navalplanner-webapp/src/main/webapp/resources/worker/worker.zul index 39ee8cf1b..bee8f0625 100644 --- a/navalplanner-webapp/src/main/webapp/resources/worker/worker.zul +++ b/navalplanner-webapp/src/main/webapp/resources/worker/worker.zul @@ -27,8 +27,6 @@ - - - - - -