Add Dashboard tab to left main menu.

Add mock up of pipeline window.
This commit is contained in:
Vova Perebykivskiy 2015-11-27 16:11:52 +02:00 committed by Vova Perebykivskiy
parent 3334b4359b
commit bc578530f7
5 changed files with 205 additions and 49 deletions

View file

@ -1,9 +1,18 @@
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.context.annotation.Scope;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.*;
import java.util.ArrayList;
import java.util.List;
/**
* Created
@ -14,8 +23,178 @@ import org.zkoss.zk.ui.util.GenericForwardComposer;
@org.springframework.stereotype.Component
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
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
public void doAfterCompose(Component component) throws Exception {
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;
}
}

View file

@ -1060,15 +1060,11 @@ span.perspective, span.perspective-active {
.perspective-active.montecarlo-simulation .z-button-cm {
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);
}
.perspective-active.global-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.order-dashboard .z-button-cm,
.perspective-active.order-dashboard .z-button-cm{
background-image: url(../img/ico_order-dashboard.png);
}

View file

@ -18,45 +18,22 @@
-->
<?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>
<div height="100%" style="overflow:visible">
<div height="30px" sclass="toolbar-box" />
<window self="@{define(content)}" vflex="1">
<window id="wnd" self="@{define(content)}" vflex="1">
<tabbox width="100%">
<tabs>
<tab label="${i18n:_('Pipeline')}"/>
</tabs>
<tabpanels>
<tabpanel>
<grid>
<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>
<pipeline/>
</tabpanel>
</tabpanels>
</tabbox>

View file

@ -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>

View file

@ -131,18 +131,5 @@
<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"/>
<grid style="margin:20px">
<columns>
<column>
<label value="Subject"/>
</column>
</columns>
<rows>
<row>
<label value="@{emailTemplateController.order}"/>
</row>
</rows>
</grid>
</window>
</zk>