diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/Planner.java b/ganttzk/src/main/java/org/zkoss/ganttz/Planner.java
index 342d3117a..1181eab65 100644
--- a/ganttzk/src/main/java/org/zkoss/ganttz/Planner.java
+++ b/ganttzk/src/main/java/org/zkoss/ganttz/Planner.java
@@ -380,23 +380,27 @@ public class Planner extends HtmlMacroComponent {
public void showAllLabels() {
Button showAllLabelsButton = (Button) getFellow("showAllLabels");
- if (showAllLabelsButton.getSclass().equals("planner-command")) {
+ if (showAllLabelsButton.getSclass().equals(
+ "planner-command show-labels")) {
Clients.evalJavaScript("zkTasklist.showAllTooltips();");
- showAllLabelsButton.setSclass("planner-command clicked");
+ showAllLabelsButton
+ .setSclass("planner-command show-labels clicked");
} else {
Clients.evalJavaScript("zkTasklist.hideAllTooltips();");
- showAllLabelsButton.setSclass("planner-command");
+ showAllLabelsButton.setSclass("planner-command show-labels");
}
}
public void showAllResources() {
Button showAllLabelsButton = (Button) getFellow("showAllResources");
- if (showAllLabelsButton.getSclass().equals("planner-command")) {
+ if (showAllLabelsButton.getSclass().equals(
+ "planner-command show-resources")) {
Clients.evalJavaScript("zkTasklist.showResourceTooltips();");
- showAllLabelsButton.setSclass("planner-command clicked");
+ showAllLabelsButton
+ .setSclass("planner-command show-resources clicked");
} else {
Clients.evalJavaScript("zkTasklist.hideResourceTooltips();");
- showAllLabelsButton.setSclass("planner-command");
+ showAllLabelsButton.setSclass("planner-command show-resources");
}
}
diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/data/TaskContainer.java b/ganttzk/src/main/java/org/zkoss/ganttz/data/TaskContainer.java
index 29ccb7f65..8f529b447 100644
--- a/ganttzk/src/main/java/org/zkoss/ganttz/data/TaskContainer.java
+++ b/ganttzk/src/main/java/org/zkoss/ganttz/data/TaskContainer.java
@@ -28,6 +28,7 @@ import java.util.List;
import org.zkoss.ganttz.util.WeakReferencedListeners;
import org.zkoss.ganttz.util.WeakReferencedListeners.IListenerNotification;
+import org.zkoss.zk.ui.util.Clients;
/**
* This class contains the information of a task container. It can be modified
@@ -174,6 +175,13 @@ public class TaskContainer extends Task {
}
});
}
+ refreshTooltips();
+ }
+
+ private void refreshTooltips() {
+ // Could be optimized asking planner for tooltips display state to
+ // create expanded elements with the proper state
+ Clients.evalJavaScript("zkTasklist.refreshTooltips();");
}
@Override
diff --git a/ganttzk/src/main/resources/web/ganttz/task.dsp b/ganttzk/src/main/resources/web/ganttz/task.dsp
index ff95d6b4f..546f07cd6 100644
--- a/ganttzk/src/main/resources/web/ganttz/task.dsp
+++ b/ganttzk/src/main/resources/web/ganttz/task.dsp
@@ -11,7 +11,9 @@
onMouseover="zkTasklist.showTooltip('tasktooltip${self.uuid}');"
onMouseOut="zkTasklist.hideTooltip('tasktooltip${self.uuid}');">
${self.labelsText}
- ${self.resourcesText}
+
+
${self.resourcesText}
+
${self.tooltipText}
diff --git a/ganttzk/src/main/resources/web/ganttz/taskcontainer.dsp b/ganttzk/src/main/resources/web/ganttz/taskcontainer.dsp
index c2199969d..1c5b7b0ca 100644
--- a/ganttzk/src/main/resources/web/ganttz/taskcontainer.dsp
+++ b/ganttzk/src/main/resources/web/ganttz/taskcontainer.dsp
@@ -8,12 +8,16 @@
${self.labelsText}
-
${self.resourcesText}
-
+
+
${self.resourcesText}
+
+
-
-
+
+
diff --git a/ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul b/ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul
index 7b6c5217a..d133530e8 100644
--- a/ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul
+++ b/ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul
@@ -33,10 +33,10 @@ planner = self;
label="${i18n:_('Critical path')}" />
+ label="${i18n:_('Show all labels')}" sclass="planner-command show-labels" />
+ label="${i18n:_('Show all resources')}" sclass="planner-command show-resources" />
diff --git a/ganttzk/src/main/resources/web/js/ganttz/tasklist.js b/ganttzk/src/main/resources/web/js/ganttz/tasklist.js
index e340ca323..4715dea77 100644
--- a/ganttzk/src/main/resources/web/js/ganttz/tasklist.js
+++ b/ganttzk/src/main/resources/web/js/ganttz/tasklist.js
@@ -85,6 +85,19 @@ zkTasklist.hideResourceTooltips = function(elem) {
}
}
+/* Refreshes
+ * Can be optimized creating the new tasks with
+ */
+zkTasklist.refreshTooltips = function(elem) {
+ var resourcesButton = YAHOO.util.Selector.query('.show-resources')[0];
+ if (resourcesButton.className.indexOf("clicked") != -1 ) {
+ zkTasklist.showResourceTooltips();
+ }
+ var resourcesButton = YAHOO.util.Selector.query('.show-labels')[0];
+ if (resourcesButton.className.indexOf("clicked") != -1 ) {
+ zkTasklist.showAllTooltips();
+ }
+}
zkTasklist.hideTooltip = function(elem) {
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/daos/IResourceAllocationDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/daos/IResourceAllocationDAO.java
index 45a0ac61f..521904296 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/daos/IResourceAllocationDAO.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/daos/IResourceAllocationDAO.java
@@ -55,4 +55,7 @@ public interface IResourceAllocationDAO extends
Map> findGenericAllocationsByCriterionFor(
List task);
+ List findCriterionByResourceAllocation(
+ ResourceAllocation allocation);
+
}
\ No newline at end of file
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/daos/ResourceAllocationDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/daos/ResourceAllocationDAO.java
index b904834ca..2d5195ac5 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/daos/ResourceAllocationDAO.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/daos/ResourceAllocationDAO.java
@@ -123,6 +123,20 @@ public class ResourceAllocationDAO extends
return stripAllocationsWithoutAssignations(byCriterion(results));
}
+ @SuppressWarnings("unchecked")
+ @Override
+ public List findCriterionByResourceAllocation(
+ ResourceAllocation allocation) {
+ List results = getSession()
+ .createQuery(
+ "select criterion "
+ + "from GenericResourceAllocation as generic "
+ + "join generic.criterions as criterion where generic in(:allocation)")
+ .setParameter("allocation", allocation)
+ .list();
+ return results;
+ }
+
@SuppressWarnings("unchecked")
@Override
public Map> findGenericAllocationsByCriterionFor(
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/TaskElementAdapter.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/TaskElementAdapter.java
index 8eaca99cc..7c024dfdc 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/TaskElementAdapter.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/TaskElementAdapter.java
@@ -43,10 +43,12 @@ import org.navalplanner.business.labels.entities.Label;
import org.navalplanner.business.orders.daos.IOrderElementDAO;
import org.navalplanner.business.orders.entities.Order;
import org.navalplanner.business.orders.entities.OrderElement;
+import org.navalplanner.business.planner.daos.IResourceAllocationDAO;
import org.navalplanner.business.planner.daos.ITaskElementDAO;
import org.navalplanner.business.planner.entities.Dependency;
import org.navalplanner.business.planner.entities.DerivedAllocation;
import org.navalplanner.business.planner.entities.ResourceAllocation;
+import org.navalplanner.business.planner.entities.SpecificResourceAllocation;
import org.navalplanner.business.planner.entities.StartConstraintType;
import org.navalplanner.business.planner.entities.Task;
import org.navalplanner.business.planner.entities.TaskElement;
@@ -54,6 +56,7 @@ import org.navalplanner.business.planner.entities.TaskMilestone;
import org.navalplanner.business.planner.entities.TaskStartConstraint;
import org.navalplanner.business.planner.entities.Dependency.Type;
import org.navalplanner.business.resources.daos.IResourceDAO;
+import org.navalplanner.business.resources.entities.Criterion;
import org.navalplanner.business.resources.entities.Machine;
import org.navalplanner.business.resources.entities.MachineWorkersConfigurationUnit;
import org.navalplanner.business.resources.entities.Resource;
@@ -112,6 +115,9 @@ public class TaskElementAdapter implements ITaskElementAdapter {
@Autowired
private IResourceDAO resourceDAO;
+ @Autowired
+ private IResourceAllocationDAO resourceAllocationDAO;
+
private List listeners = new ArrayList();
@Override
@@ -419,23 +425,36 @@ public class TaskElementAdapter implements ITaskElementAdapter {
private String buildResourcesText() {
StringBuilder result = new StringBuilder();
List foundResources = new ArrayList();
-
if (taskElement.getResourceAllocations() != null) {
for (ResourceAllocation each : taskElement.getResourceAllocations()) {
- List list = each.getAssociatedResources();
-
- if (!list.isEmpty()) {
- for (Resource r : list) {
- if (!foundResources.contains(r)) {
- result.append(r.getName()).append(",");
- foundResources.add(r);
+ if (each instanceof SpecificResourceAllocation) {
+ List list = each.getAssociatedResources();
+ if (!list.isEmpty()) {
+ for (Resource r : list) {
+ if (!foundResources.contains(r)) {
+ result.append(r.getName()).append(", ");
+ foundResources.add(r);
+ }
}
}
+ } else {
+ List listCriterions = resourceAllocationDAO
+ .findCriterionByResourceAllocation(each);
+ result.append("[");
+ if (!listCriterions.isEmpty()) {
+ for (Criterion r : listCriterions) {
+ result.append(r.getName()).append(", ");
+ }
+ } else {
+ result.append(_("All workers")).append(", ");
+ }
+ result.delete(result.length() - 2, result.length());
+ result.append("], ");
+ }
}
- }
if (result.length() > 1) {
- result.delete(result.length() - 1, result.length());
+ result.delete(result.length() - 2, result.length());
}
}
return result.toString();
diff --git a/navalplanner-webapp/src/main/webapp/planner/css/ganttzk.css b/navalplanner-webapp/src/main/webapp/planner/css/ganttzk.css
index 4e0488275..e3bf4d993 100644
--- a/navalplanner-webapp/src/main/webapp/planner/css/ganttzk.css
+++ b/navalplanner-webapp/src/main/webapp/planner/css/ganttzk.css
@@ -181,7 +181,6 @@ min-width:200px;
}
.taskgroup_start,.taskgroup_end {
- position: relative;
top: -12px; /* zkTasklist.HEIGHT_PER_TASK */
}
@@ -209,7 +208,7 @@ min-width:200px;
width: 10px;
position:absolute;
right:0;
- top:-1px;
+ top:0;
}
.taskgroup,.row .expanded {
@@ -220,9 +219,15 @@ min-width:200px;
background-color: transparent !important;
}
-.box.expanded, .box.closed {
+.border-container {
overflow:hidden;
padding-right:2px;
+ heigth: 12px !important;
+ position: relative;
+ top: -12px;
+ left:10;
+ display: block;
+ clear: both;
}
.milestone_end {
@@ -599,9 +604,15 @@ div.z-tree {
left: 10px;
z-index: 6;
background-color: rgb(255, 202, 135);
- background-color: rgba(255, 202, 135, 0.75);
+ background-color: rgba(255, 202, 135, 0.9);
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
+ padding: 0 3px;
+}
+
+.box.expanded .task-labels,
+.box.expanded .task-resources {
+ display: none !important;
}
.task-labels span {
@@ -611,17 +622,19 @@ div.z-tree {
.task-resources {
display: none;
float: right;
- white-space: nowrap;
- font-size: 9px;
position: relative;
- color: #FFFFFF;
- top: 8px;
+ top: -2px;
left: 10px;
z-index: 6;
- background-color: rgb(170, 128, 213);
- background-color: rgba(170, 128, 213, 0.75);
- -moz-border-radius: 2px;
- -webkit-border-radius: 2px;
+}
+
+.task-resources-inner {
+ position: absolute;
+ left: 0px;
+ font-size: 9px;
+ white-space: nowrap;
+ color: #000000;
+ padding: 1px 3px;
}
.task-resources span {