Add Dashboard tab to left main menu.
Add mock up of pipeline window.
This commit is contained in:
parent
3334b4359b
commit
bc578530f7
5 changed files with 205 additions and 49 deletions
|
|
@ -1,9 +1,18 @@
|
||||||
package org.libreplan.web.dashboard;
|
package org.libreplan.web.dashboard;
|
||||||
|
|
||||||
|
|
||||||
|
import org.libreplan.business.orders.entities.Order;
|
||||||
|
|
||||||
|
import org.libreplan.web.orders.IOrderModel;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.config.BeanDefinition;
|
import org.springframework.beans.factory.config.BeanDefinition;
|
||||||
import org.springframework.context.annotation.Scope;
|
import org.springframework.context.annotation.Scope;
|
||||||
import org.zkoss.zk.ui.Component;
|
import org.zkoss.zk.ui.Component;
|
||||||
import org.zkoss.zk.ui.util.GenericForwardComposer;
|
import org.zkoss.zk.ui.util.GenericForwardComposer;
|
||||||
|
import org.zkoss.zul.*;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created
|
* Created
|
||||||
|
|
@ -14,8 +23,178 @@ import org.zkoss.zk.ui.util.GenericForwardComposer;
|
||||||
@org.springframework.stereotype.Component
|
@org.springframework.stereotype.Component
|
||||||
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
|
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
|
||||||
public class DashboardControllerGlobal extends GenericForwardComposer {
|
public class DashboardControllerGlobal extends GenericForwardComposer {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IOrderModel orderModel;
|
||||||
|
|
||||||
|
private Grid pipelineGrid;
|
||||||
|
|
||||||
|
// TODO make archived checkbox
|
||||||
|
// TODO highlited cell when hover?
|
||||||
|
|
||||||
|
private List<Order> preSalesOrders = new ArrayList<Order>();
|
||||||
|
private List<Order> offeredOrders = new ArrayList<Order>();
|
||||||
|
private List<Order> outsorcedOrders = new ArrayList<Order>();
|
||||||
|
private List<Order> acceptedOrders = new ArrayList<Order>();
|
||||||
|
private List<Order> startedOrders = new ArrayList<Order>();
|
||||||
|
private List<Order> onHoldOrders = new ArrayList<Order>();
|
||||||
|
private List<Order> finishedOrders = new ArrayList<Order>();
|
||||||
|
private List<Order> cancelledOrders = new ArrayList<Order>();
|
||||||
|
private List<Order> storedOrders = new ArrayList<Order>();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void doAfterCompose(Component component) throws Exception {
|
public void doAfterCompose(Component component) throws Exception {
|
||||||
super.doAfterCompose(component);
|
super.doAfterCompose(component);
|
||||||
|
component.setVariable("dashboardControllerGlobal", this, true);
|
||||||
|
fillOrderLists();
|
||||||
|
setupPipelineGrid();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Order> getOrders(){
|
||||||
|
return orderModel.getOrders();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void fillOrderLists() {
|
||||||
|
List<Order> orderList = new ArrayList<Order>();
|
||||||
|
for (Order orderItem : getOrders()){
|
||||||
|
switch (orderItem.getState()){
|
||||||
|
case PRE_SALES: {
|
||||||
|
preSalesOrders.add(orderItem);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case OFFERED: {
|
||||||
|
offeredOrders.add(orderItem);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case OUTSOURCED: {
|
||||||
|
outsorcedOrders.add(orderItem);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ACCEPTED: {
|
||||||
|
acceptedOrders.add(orderItem);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case STARTED: {
|
||||||
|
startedOrders.add(orderItem);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ON_HOLD: {
|
||||||
|
onHoldOrders.add(orderItem);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case FINISHED: {
|
||||||
|
finishedOrders.add(orderItem);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case CANCELLED: {
|
||||||
|
cancelledOrders.add(orderItem);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case STORED: {
|
||||||
|
storedOrders.add(orderItem);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setupPipelineGrid(){
|
||||||
|
int rowsCount = findMaxList(preSalesOrders.size(), offeredOrders.size(), outsorcedOrders.size(), acceptedOrders.size(),
|
||||||
|
startedOrders.size(), onHoldOrders.size(), finishedOrders.size(), cancelledOrders.size(), storedOrders.size());
|
||||||
|
|
||||||
|
Rows rows = new Rows();
|
||||||
|
for (int i = 0; i < rowsCount; i++){
|
||||||
|
Row row = new Row();
|
||||||
|
for (int columns = 0; columns < 9; columns++) row.appendChild(new Label());
|
||||||
|
rows.appendChild(row);
|
||||||
|
}
|
||||||
|
|
||||||
|
pipelineGrid.appendChild(rows);
|
||||||
|
|
||||||
|
// Fill data into first column and so on with other columns devided by Enter in code...
|
||||||
|
|
||||||
|
for (int i = 0; i < preSalesOrders.size(); i++){
|
||||||
|
( (Label) pipelineGrid.getCell(i, 0) ).setValue(preSalesOrders.get(i).getName());
|
||||||
|
String tooltipText = "Start date: " + preSalesOrders.get(i).getInitDate() +
|
||||||
|
"\n" + "End date: " + preSalesOrders.get(i).getDeadline() +
|
||||||
|
"\n" + "Progress: ";
|
||||||
|
( (Label) pipelineGrid.getCell(i, 0) ).setTooltiptext(tooltipText);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < offeredOrders.size(); i++){
|
||||||
|
( (Label) pipelineGrid.getCell(i, 1) ).setValue(offeredOrders.get(i).getName());
|
||||||
|
String tooltipText = "Start date: " + offeredOrders.get(i).getInitDate() +
|
||||||
|
"\n" + "End date: " + offeredOrders.get(i).getDeadline() +
|
||||||
|
"\n" + "Progress: ";
|
||||||
|
( (Label) pipelineGrid.getCell(i, 1) ).setTooltiptext(tooltipText);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < outsorcedOrders.size(); i++){
|
||||||
|
( (Label) pipelineGrid.getCell(i, 2) ).setValue(outsorcedOrders.get(i).getName());
|
||||||
|
String tooltipText = "Start date: " + outsorcedOrders.get(i).getInitDate() +
|
||||||
|
"\n" + "End date: " + outsorcedOrders.get(i).getDeadline() +
|
||||||
|
"\n" + "Progress: ";
|
||||||
|
( (Label) pipelineGrid.getCell(i, 2) ).setTooltiptext(tooltipText);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < acceptedOrders.size(); i++){
|
||||||
|
( (Label) pipelineGrid.getCell(i, 3) ).setValue(acceptedOrders.get(i).getName());
|
||||||
|
String tooltipText = "Start date: " + acceptedOrders.get(i).getInitDate() +
|
||||||
|
"\n" + "End date: " + acceptedOrders.get(i).getDeadline() +
|
||||||
|
"\n" + "Progress: ";
|
||||||
|
( (Label) pipelineGrid.getCell(i, 3) ).setTooltiptext(tooltipText);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < startedOrders.size(); i++){
|
||||||
|
( (Label) pipelineGrid.getCell(i, 4) ).setValue(startedOrders.get(i).getName());
|
||||||
|
String tooltipText = "Start date: " + startedOrders.get(i).getInitDate() +
|
||||||
|
"\n" + "End date: " + startedOrders.get(i).getDeadline() +
|
||||||
|
"\n" + "Progress: ";
|
||||||
|
( (Label) pipelineGrid.getCell(i, 4) ).setTooltiptext(tooltipText);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < onHoldOrders.size(); i++){
|
||||||
|
( (Label) pipelineGrid.getCell(i, 5) ).setValue(onHoldOrders.get(i).getName());
|
||||||
|
String tooltipText = "Start date: " + onHoldOrders.get(i).getInitDate() +
|
||||||
|
"\n" + "End date: " + onHoldOrders.get(i).getDeadline() +
|
||||||
|
"\n" + "Progress: ";
|
||||||
|
( (Label) pipelineGrid.getCell(i, 5) ).setTooltiptext(tooltipText);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < finishedOrders.size(); i++){
|
||||||
|
( (Label) pipelineGrid.getCell(i, 6) ).setValue(finishedOrders.get(i).getName());
|
||||||
|
String tooltipText = "Start date: " + finishedOrders.get(i).getInitDate() +
|
||||||
|
"\n" + "End date: " + finishedOrders.get(i).getDeadline() +
|
||||||
|
"\n" + "Progress: ";
|
||||||
|
( (Label) pipelineGrid.getCell(i, 6) ).setTooltiptext(tooltipText);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < cancelledOrders.size(); i++){
|
||||||
|
( (Label) pipelineGrid.getCell(i, 7) ).setValue(cancelledOrders.get(i).getName());
|
||||||
|
String tooltipText = "Start date: " + cancelledOrders.get(i).getInitDate() +
|
||||||
|
"\n" + "End date: " + cancelledOrders.get(i).getDeadline() +
|
||||||
|
"\n" + "Progress: ";
|
||||||
|
( (Label) pipelineGrid.getCell(i, 7) ).setTooltiptext(tooltipText);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < storedOrders.size(); i++){
|
||||||
|
( (Label) pipelineGrid.getCell(i, 8) ).setValue(storedOrders.get(i).getName());
|
||||||
|
String tooltipText = "Start date: " + storedOrders.get(i).getInitDate() +
|
||||||
|
"\n" + "End date: " + storedOrders.get(i).getDeadline() +
|
||||||
|
"\n" + "Progress: ";
|
||||||
|
( (Label) pipelineGrid.getCell(i, 8) ).setTooltiptext(tooltipText);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private int findMaxList(int preSales, int offered, int outsorced, int accepted, int started, int onHold, int finished,
|
||||||
|
int cancelled, int stored){
|
||||||
|
|
||||||
|
int[] sizes = {preSales, offered, outsorced, accepted, started, onHold, finished, cancelled, stored};
|
||||||
|
int max = sizes[0];
|
||||||
|
|
||||||
|
for (int i = 1; i < sizes.length; i++)
|
||||||
|
if ( sizes[i] > max ) max = sizes[i];
|
||||||
|
|
||||||
|
return max;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1060,15 +1060,11 @@ span.perspective, span.perspective-active {
|
||||||
.perspective-active.montecarlo-simulation .z-button-cm {
|
.perspective-active.montecarlo-simulation .z-button-cm {
|
||||||
background-image: url(../img/ico_montecarlo-simulation.png);
|
background-image: url(../img/ico_montecarlo-simulation.png);
|
||||||
}
|
}
|
||||||
.perspective.global-dashboard .z-button-cm{
|
.perspective.global-dashboard .z-button-cm,
|
||||||
|
.perspective-active.global-dashboard .z-button-cm {
|
||||||
background-image: url(../img/ico_global-dashboard.png);
|
background-image: url(../img/ico_global-dashboard.png);
|
||||||
}
|
}
|
||||||
.perspective-active.global-dashboard .z-button-cm{
|
.perspective.order-dashboard .z-button-cm,
|
||||||
background-image: url(../img/ico_global-dashboard.png);
|
|
||||||
}
|
|
||||||
.perspective.order-dashboard .z-button-cm{
|
|
||||||
background-image: url(../img/ico_order-dashboard.png);
|
|
||||||
}
|
|
||||||
.perspective-active.order-dashboard .z-button-cm{
|
.perspective-active.order-dashboard .z-button-cm{
|
||||||
background-image: url(../img/ico_order-dashboard.png);
|
background-image: url(../img/ico_order-dashboard.png);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,45 +18,22 @@
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<?taglib uri="/WEB-INF/tld/i18n.tld" prefix="i18n"?>
|
<?taglib uri="/WEB-INF/tld/i18n.tld" prefix="i18n"?>
|
||||||
|
<?component name="pipeline" inline="true" macroURI="_pipeline.zul"?>
|
||||||
|
<?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" root="./wnd" ?>
|
||||||
|
|
||||||
|
|
||||||
<zk>
|
<zk>
|
||||||
<div height="100%" style="overflow:visible">
|
<div height="100%" style="overflow:visible">
|
||||||
<div height="30px" sclass="toolbar-box" />
|
<div height="30px" sclass="toolbar-box" />
|
||||||
|
|
||||||
<window self="@{define(content)}" vflex="1">
|
<window id="wnd" self="@{define(content)}" vflex="1">
|
||||||
<tabbox width="100%">
|
<tabbox width="100%">
|
||||||
<tabs>
|
<tabs>
|
||||||
<tab label="${i18n:_('Pipeline')}"/>
|
<tab label="${i18n:_('Pipeline')}"/>
|
||||||
</tabs>
|
</tabs>
|
||||||
<tabpanels>
|
<tabpanels>
|
||||||
<tabpanel>
|
<tabpanel>
|
||||||
<grid>
|
<pipeline/>
|
||||||
<columns>
|
|
||||||
<column label="${i18n:_('PRE-SALES')}"/>
|
|
||||||
<column label="${i18n:_('OFFERED')}"/>
|
|
||||||
<column label="${i18n:_('OUTSOURCED')}"/>
|
|
||||||
<column label="${i18n:_('ACCEPTED')}"/>
|
|
||||||
<column label="${i18n:_('STARTED')}"/>
|
|
||||||
<column label="${i18n:_('ON HOLD')}"/>
|
|
||||||
<column label="${i18n:_('FINISHED')}"/>
|
|
||||||
<column label="${i18n:_('CANCELLED')}"/>
|
|
||||||
<column label="${i18n:_('STORED')}"/>
|
|
||||||
</columns>
|
|
||||||
<rows>
|
|
||||||
<row>
|
|
||||||
<label value="Project 1"/>
|
|
||||||
<label value="Project 2"/>
|
|
||||||
<label value="Project 3"/>
|
|
||||||
<label value="Project 4"/>
|
|
||||||
<label value="Project 5"/>
|
|
||||||
<label value="Project 6"/>
|
|
||||||
<label value="Project 7"/>
|
|
||||||
<label value="Project 8"/>
|
|
||||||
<label value="Project 9"/>
|
|
||||||
</row>
|
|
||||||
</rows>
|
|
||||||
|
|
||||||
</grid>
|
|
||||||
</tabpanel>
|
</tabpanel>
|
||||||
</tabpanels>
|
</tabpanels>
|
||||||
</tabbox>
|
</tabbox>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
<window apply="org.libreplan.web.dashboard.DashboardControllerGlobal" contentStyle="overflow:auto;">
|
||||||
|
<grid id="pipelineGrid">
|
||||||
|
<columns>
|
||||||
|
<column label="${i18n:_('PRE-SALES')}"/>
|
||||||
|
<column label="${i18n:_('OFFERED')}"/>
|
||||||
|
<column label="${i18n:_('OUTSOURCED')}"/>
|
||||||
|
<column label="${i18n:_('ACCEPTED')}"/>
|
||||||
|
<column label="${i18n:_('STARTED')}"/>
|
||||||
|
<column label="${i18n:_('ON HOLD')}"/>
|
||||||
|
<column label="${i18n:_('FINISHED')}"/>
|
||||||
|
<column label="${i18n:_('CANCELLED')}"/>
|
||||||
|
<column label="${i18n:_('STORED')}"/>
|
||||||
|
</columns>
|
||||||
|
</grid>
|
||||||
|
</window>
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -131,18 +131,5 @@
|
||||||
<button onClick="emailTemplateController.save()" autodisable="self" label="${i18n:_('Save')}" sclass="save-button global-action"/>
|
<button onClick="emailTemplateController.save()" autodisable="self" label="${i18n:_('Save')}" sclass="save-button global-action"/>
|
||||||
<button onClick="emailTemplateController.cancel()" label="${i18n:_('Cancel')}" sclass="cancel-button global-action"/>
|
<button onClick="emailTemplateController.cancel()" label="${i18n:_('Cancel')}" sclass="cancel-button global-action"/>
|
||||||
|
|
||||||
<grid style="margin:20px">
|
|
||||||
<columns>
|
|
||||||
<column>
|
|
||||||
<label value="Subject"/>
|
|
||||||
</column>
|
|
||||||
</columns>
|
|
||||||
<rows>
|
|
||||||
<row>
|
|
||||||
<label value="@{emailTemplateController.order}"/>
|
|
||||||
</row>
|
|
||||||
</rows>
|
|
||||||
</grid>
|
|
||||||
|
|
||||||
</window>
|
</window>
|
||||||
</zk>
|
</zk>
|
||||||
Loading…
Add table
Reference in a new issue