Chorem-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
June 2013
- 5 participants
- 22 discussions
r355 - in trunk: chorem-entities/src/main/java/org/chorem chorem-entities/src/main/xmi chorem-webmotion/src/main/java/org/chorem/webmotion/actions
by bpoussin@users.chorem.org 29 Jun '13
by bpoussin@users.chorem.org 29 Jun '13
29 Jun '13
Author: bpoussin
Date: 2013-06-30 01:56:49 +0200 (Sun, 30 Jun 2013)
New Revision: 355
Url: http://chorem.org/projects/chorem/repository/revisions/355
Log:
Ajout de methode pour connaitre la Locale a utiliser pour l'utilisateur courant
Modified:
trunk/chorem-entities/src/main/java/org/chorem/ChoremClient.java
trunk/chorem-entities/src/main/xmi/chorem-model.properties
trunk/chorem-entities/src/main/xmi/chorem-model.zargo
trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/DashboardAction.java
Modified: trunk/chorem-entities/src/main/java/org/chorem/ChoremClient.java
===================================================================
--- trunk/chorem-entities/src/main/java/org/chorem/ChoremClient.java 2013-06-29 22:55:21 UTC (rev 354)
+++ trunk/chorem-entities/src/main/java/org/chorem/ChoremClient.java 2013-06-29 23:56:49 UTC (rev 355)
@@ -48,7 +48,9 @@
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
+import org.parboiled.common.StringUtils;
/**
* Proxy pour l'application. Certaines methodes specifiques pour l'application
@@ -343,4 +345,21 @@
WikittyQueryResult<Company> result = findAllByQuery(Company.class, q);
return result.getAll();
}
+
+ /**
+ * Retourne la locale preferee de l'utilisateur, si l'utilisateur n'a pas
+ * defini de locale, alors on prend celle du systeme.
+ *
+ * @return Ret
+ */
+ public Locale getUserLocale() {
+ Locale result = Locale.getDefault();
+ ChoremUser user = getUser(ChoremUser.class);
+ if (user != null && StringUtils.isNotEmpty(user.getDefaultLocale())) {
+ String l = user.getDefaultLocale();
+ result = Locale.forLanguageTag(l);
+ }
+
+ return result;
+ }
}
Modified: trunk/chorem-entities/src/main/xmi/chorem-model.properties
===================================================================
--- trunk/chorem-entities/src/main/xmi/chorem-model.properties 2013-06-29 22:55:21 UTC (rev 354)
+++ trunk/chorem-entities/src/main/xmi/chorem-model.properties 2013-06-29 23:56:49 UTC (rev 355)
@@ -54,7 +54,7 @@
#
# ChoremUser
#
-org.chorem.entities.ChoremUser.class.tagvalue.version=1.0
+org.chorem.entities.ChoremUser.class.tagvalue.version=2.0
org.chorem.entities.ChoremUser.class.tagvalue.toString=%WikittyUser.login|nologin$s
org.chorem.entities.ChoremUser.class.tagvalue.sortOrder=WikittyUser.login
#
Modified: trunk/chorem-entities/src/main/xmi/chorem-model.zargo
===================================================================
(Binary files differ)
Modified: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/DashboardAction.java
===================================================================
--- trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/DashboardAction.java 2013-06-29 22:55:21 UTC (rev 354)
+++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/DashboardAction.java 2013-06-29 23:56:49 UTC (rev 355)
@@ -1013,7 +1013,7 @@
}
if ("ascii".equalsIgnoreCase(type)) {
- InputStream out = computeAsciiTable(data);
+ InputStream out = computeAsciiTable(client, data);
return renderDownload(out, "budget.txt", "text/plain");
} else {
return renderView("dashboardBudget.jsp", "companyId", companyId,
@@ -1021,8 +1021,8 @@
}
}
- protected InputStream computeAsciiTable(BudgetData data) {
- NumberFormat currency = new DecimalFormat("#0.00");
+ protected InputStream computeAsciiTable(ChoremClient client, BudgetData data) {
+ NumberFormat currency = NumberFormat.getCurrencyInstance(client.getUserLocale());
TableFormatter tf = new SimpleTableFormatter(true);
1
0
r354 - in trunk: chorem-entities/src/main/java chorem-entities/src/main/java/com chorem-entities/src/main/java/com/inamik chorem-entities/src/main/java/com/inamik/utils chorem-webmotion/src/main/java/org/chorem/webmotion/actions chorem-webmotion/src/main/resources chorem-webmotion/src/main/webapp/WEB-INF/jsp
by bpoussin@users.chorem.org 29 Jun '13
by bpoussin@users.chorem.org 29 Jun '13
29 Jun '13
Author: bpoussin
Date: 2013-06-30 00:55:21 +0200 (Sun, 30 Jun 2013)
New Revision: 354
Url: http://chorem.org/projects/chorem/repository/revisions/354
Log:
Report Budget:
- on peut demande a ne voir que certain profondeur
- on peut exporter en ascii le tableau que l'on voit
Added:
trunk/chorem-entities/src/main/java/com/
trunk/chorem-entities/src/main/java/com/inamik/
trunk/chorem-entities/src/main/java/com/inamik/utils/
trunk/chorem-entities/src/main/java/com/inamik/utils/AbstractTableFormatter.java
trunk/chorem-entities/src/main/java/com/inamik/utils/SimpleTableFormatter.java
trunk/chorem-entities/src/main/java/com/inamik/utils/TableFormatter.java
Modified:
trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/DashboardAction.java
trunk/chorem-webmotion/src/main/resources/mapping
trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/dashboardBudget.jsp
Added: trunk/chorem-entities/src/main/java/com/inamik/utils/AbstractTableFormatter.java
===================================================================
--- trunk/chorem-entities/src/main/java/com/inamik/utils/AbstractTableFormatter.java (rev 0)
+++ trunk/chorem-entities/src/main/java/com/inamik/utils/AbstractTableFormatter.java 2013-06-29 22:55:21 UTC (rev 354)
@@ -0,0 +1,455 @@
+/*
+ * iNamik TableFormatter for Java
+ * Copyright (C) 2005-2012 David Farrell (davidpfarrell(a)yahoo.com)
+ *
+ * Licensed under MIT or GPLv3, see LICENSE.txt
+ */
+package com.inamik.utils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * AbstractTableFormatter
+ * Created on Oct 26, 2005
+ * @author Dave
+ */
+public abstract class AbstractTableFormatter implements TableFormatter
+{
+ protected class CellData
+ {
+ private List lines;
+ private int align;
+ private int valign;
+ private CellData() { super(); }
+ public CellData(int align, int valign)
+ {
+ this();
+ this.lines = new ArrayList();
+ this.align = align;
+ this.valign = valign;
+ }
+ public void addLine(String text) { lines.add(text); }
+ public int getLineCount() { return lines.size(); }
+ public List getLines () { return new ArrayList(lines); }
+ public int getAlign () { return align; }
+ public int getVAlign() { return valign; }
+ };
+
+ private int columnCount = 0;
+
+ private List maxColWidths = new ArrayList();
+ private List maxRowHeights = new ArrayList();
+
+ private List tableData = new ArrayList();
+
+ /**
+ * Constructor
+ */
+ protected AbstractTableFormatter()
+ {
+ super();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see com.inamik.utils.TableFormatter#addLine()
+ */
+ public final TableFormatter addLine()
+ {
+ return addLine(null);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see com.inamik.utils.TableFormatter#addLine(java.lang.String)
+ */
+ public final TableFormatter addLine(String text)
+ {
+ if (tableData.size() <= 0)
+ {
+ throw new IllegalStateException("tableData.size()");
+ }
+
+ // Get current (last) row
+ List row = (List)tableData.get(tableData.size() - 1);
+
+ if (row.size() <= 0)
+ {
+ throw new IllegalStateException("Cannot addLine() to empty row. Use nextCell() first.");
+ }
+
+ CellData cell = (CellData)row.get(row.size() - 1);
+
+ // Add line to cell
+ cell.addLine(text);
+
+ //
+ // Update max column width
+ //
+
+ if (maxColWidths.size() != columnCount)
+ {
+ throw new IllegalStateException("maxColWidths.size()");
+ }
+
+ int currentCol = row.size() - 1;
+
+ int maxColWidth = ((Integer)maxColWidths.get(currentCol)).intValue();
+
+ if (text != null && text.length() > maxColWidth)
+ {
+ maxColWidths.set(currentCol, new Integer(text.length()));
+ }
+
+ //
+ // Update max row height
+ //
+
+ if (maxRowHeights.size() != tableData.size())
+ {
+ throw new IllegalStateException("maxRowHeights.size()");
+ }
+
+ int currentRow = tableData.size() - 1;
+
+ int maxRowHeight = ((Integer)maxRowHeights.get(currentRow)).intValue();
+
+ if (cell.getLineCount() > maxRowHeight)
+ {
+ maxRowHeights.set(currentRow, new Integer(cell.getLineCount()));
+ }
+
+ return this;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see com.inamik.utils.TableFormatter#nextCell()
+ */
+ public final TableFormatter nextCell()
+ {
+ return nextCell(ALIGN_DEFAULT, VALIGN_DEFAULT);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see com.inamik.utils.TableFormatter#nextCell(int, int)
+ */
+ public final TableFormatter nextCell(int align, int valign)
+ {
+ if (
+ (align != ALIGN_DEFAULT)
+ && (align != ALIGN_LEFT )
+ && (align != ALIGN_CENTER )
+ && (align != ALIGN_RIGHT )
+ )
+ {
+ throw new IllegalArgumentException("align");
+ }
+
+ if (
+ (valign != VALIGN_DEFAULT)
+ && (valign != VALIGN_TOP )
+ && (valign != VALIGN_CENTER )
+ && (valign != VALIGN_BOTTOM )
+ )
+ {
+ throw new IllegalArgumentException("valign");
+ }
+
+ if (tableData.size() <= 0)
+ {
+ throw new IllegalStateException("tableData.size()");
+ }
+
+ List row = (List)tableData.get(tableData.size() - 1);
+
+ CellData cell = new CellData(align, valign);
+
+ row.add(cell);
+
+ // Update column count
+ if (row.size() > columnCount)
+ {
+ // Should only be off by 1
+ if ((row.size() - 1) != columnCount)
+ {
+ throw new IllegalStateException("columnCount");
+ }
+
+ columnCount = row.size();
+
+ maxColWidths.add(new Integer(0));
+ }
+
+ return this;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see com.inamik.utils.TableFormatter#nextRow()
+ */
+ public final TableFormatter nextRow()
+ {
+ tableData.add(new ArrayList(columnCount));
+
+ maxRowHeights.add(new Integer(0));
+
+ return this;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see com.inamik.utils.TableFormatter#getColumnCount()
+ */
+ public int getColumnCount()
+ {
+ return columnCount;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see com.inamik.utils.TableFormatter#getRowCount()
+ */
+ public final int getRowCount()
+ {
+ if (tableData.size() <= 0)
+ {
+ throw new IllegalStateException("tableData.size()");
+ }
+
+ return tableData.size();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see com.inamik.utils.TableFormatter#getColumnWidth(int)
+ */
+ public final int getColumnWidth(int columnIndex)
+ {
+ if (columnIndex < 0 || columnIndex >= columnCount)
+ {
+ throw new IllegalArgumentException("columnIndex");
+ }
+
+ return ((Integer)maxColWidths.get(columnIndex)).intValue();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see com.inamik.utils.TableFormatter#getRowHeight(int)
+ */
+ public final int getRowHeight(int rowIndex)
+ {
+ if (rowIndex < 0 || rowIndex >= tableData.size())
+ {
+ throw new IllegalArgumentException("rowIndex");
+ }
+
+ return ((Integer)maxRowHeights.get(rowIndex)).intValue();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see com.inamik.utils.TableFormatter#getFormattedCell(int, int)
+ */
+ public final String[] getFormattedCell(int rowIndex, int columnIndex)
+ {
+ if (rowIndex < 0 || rowIndex >= tableData.size())
+ {
+ throw new IllegalArgumentException("rowIndex");
+ }
+
+ if (columnIndex < 0 || columnIndex >= columnCount)
+ {
+ throw new IllegalArgumentException("columnIndex");
+ }
+
+ List lines;
+ int align;
+ int valign;
+
+ int cellWidth = getColumnWidth(columnIndex);
+ int cellHeight = getRowHeight(rowIndex);
+
+ List row = (List)tableData.get(rowIndex);
+
+ // Is there a cell at the specified row/col?
+ if (row.size() > columnIndex)
+ {
+ CellData cell = (CellData)row.get(columnIndex);
+
+ lines = cell.getLines();
+ align = cell.getAlign();
+ valign = cell.getVAlign();
+ }
+ else
+ {
+ lines = new ArrayList();
+ align = ALIGN_DEFAULT;
+ valign = VALIGN_DEFAULT;
+ }
+
+ int vpadding = cellHeight - lines.size();
+
+ int topPad;
+ int bottomPad;
+
+ switch (valign)
+ {
+ case VALIGN_CENTER :
+ {
+ int carry = vpadding % 2;
+
+ vpadding = vpadding - carry;
+
+ topPad = bottomPad = vpadding / 2;
+
+ bottomPad += carry;
+
+ break;
+ }
+ case VALIGN_BOTTOM:
+ {
+ topPad = vpadding;
+ bottomPad = 0;
+ break;
+ }
+ // Deafault - Top
+ default :
+ {
+ topPad = 0;
+ bottomPad = vpadding;
+ break;
+ }
+ }
+
+ List result = new ArrayList(cellHeight);
+
+ for (int i = 0; i < topPad; ++i)
+ {
+ result.add(getFormattedLine("", cellWidth, align));
+ }
+
+ for (int i = 0; i < lines.size(); ++i)
+ {
+ result.add(getFormattedLine((String)lines.get(i), cellWidth, align));
+ }
+
+ for (int i = 0; i < bottomPad; ++i)
+ {
+ result.add(getFormattedLine("", cellWidth, align));
+ }
+
+ if (result.size() != cellHeight)
+ {
+ throw new IllegalStateException("result.size()");
+ }
+
+ return (String[])result.toArray(new String[result.size()]);
+ }
+
+ /**
+ * getFormattedLine
+ */
+ private final String getFormattedLine(String text, int lineLength, int align)
+ {
+ if (text == null)
+ {
+ text = "";
+ }
+
+ int padding = lineLength - text.length();
+
+ int leftPad;
+ int rightPad;
+
+ switch (align)
+ {
+ case ALIGN_CENTER :
+ {
+ int carry = padding % 2;
+
+ padding = padding - carry;
+
+ leftPad = rightPad = padding / 2;
+
+ rightPad += carry;
+
+ break;
+ }
+ case ALIGN_RIGHT :
+ {
+ leftPad = padding;
+ rightPad = 0;
+ break;
+ }
+ // Deafault - Left
+ default :
+ {
+ leftPad = 0;
+ rightPad = padding;
+ break;
+ }
+ }
+
+ StringBuffer result = new StringBuffer();
+
+ for (int i = 0; i < leftPad; ++i)
+ {
+ result.append(' ');
+ }
+
+ result.append(text);
+
+ for (int i = 0; i < rightPad; ++i)
+ {
+ result.append(' ');
+ }
+
+ return result.toString();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see com.inamik.utils.TableFormatter#getTableWidth()
+ */
+ public int getTableWidth()
+ {
+ if (maxColWidths.size() != getColumnCount())
+ {
+ throw new IllegalStateException("maxColWidths.size()");
+ }
+
+ int width = 0;
+
+ for (int i = 0; i < columnCount; ++i)
+ {
+ width += ((Integer)maxColWidths.get(i)).intValue();
+ }
+
+ return width;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see com.inamik.utils.TableFormatter#getTableHeight()
+ */
+ public int getTableHeight()
+ {
+ if (maxRowHeights.size() != getRowCount())
+ {
+ throw new IllegalStateException("maxRowHeights.size()");
+ }
+
+ int height = 0;
+
+ for (int i = 0, size = maxRowHeights.size(); i < size; i++)
+ {
+ height += ((Integer)maxRowHeights.get(i)).intValue();
+ }
+
+ return height;
+ }
+}
Property changes on: trunk/chorem-entities/src/main/java/com/inamik/utils/AbstractTableFormatter.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: trunk/chorem-entities/src/main/java/com/inamik/utils/SimpleTableFormatter.java
===================================================================
--- trunk/chorem-entities/src/main/java/com/inamik/utils/SimpleTableFormatter.java (rev 0)
+++ trunk/chorem-entities/src/main/java/com/inamik/utils/SimpleTableFormatter.java 2013-06-29 22:55:21 UTC (rev 354)
@@ -0,0 +1,243 @@
+/*
+ * iNamik TableFormatter for Java
+ * Copyright (C) 2005-2012 David Farrell (davidpfarrell(a)yahoo.com)
+ *
+ * Licensed under MIT or GPLv3, see LICENSE.txt
+ */
+package com.inamik.utils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * SimpleTableFormatter
+ * Created on Oct 18, 2005
+ * @author Dave
+ */
+public final class SimpleTableFormatter extends AbstractTableFormatter implements TableFormatter
+{
+ private boolean border = false;
+
+ /**
+ * Constructor
+ */
+ public SimpleTableFormatter()
+ {
+ super();
+ }
+
+ /**
+ * Constructor
+ * @param border Print rows/tables with borders
+ */
+ public SimpleTableFormatter(boolean border)
+ {
+ this();
+
+ this.border = border;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see com.inamik.utils.TableFormatter#getTableWidth()
+ */
+ public int getTableWidth()
+ {
+ int width = super.getTableWidth();
+
+ if (border == true)
+ {
+ width += 2;
+
+ if (getColumnCount() > 1)
+ {
+ width += getColumnCount() - 1;
+ }
+ }
+
+ return width;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see com.inamik.utils.TableFormatter#getTableHeight()
+ */
+ public int getTableHeight()
+ {
+ int height = super.getTableHeight();
+
+ if (border == true)
+ {
+ height += 2;
+
+ if (getRowCount() > 1)
+ {
+ height += getRowCount() - 1;
+ }
+ }
+
+ return height;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see com.inamik.utils.TableFormatter#getFormattedRow(int)
+ */
+ public String[] getFormattedRow(int rowIndex)
+ {
+ if (rowIndex < 0 || rowIndex >= getRowCount())
+ {
+ throw new IllegalArgumentException("rowIndex");
+ }
+
+ int cellHeight = getRowHeight(rowIndex);
+
+ List rowLines = new ArrayList(cellHeight);
+
+ for (int i = 0; i < cellHeight; ++i)
+ {
+ StringBuffer buffer = new StringBuffer();
+
+ if (border == true)
+ {
+ buffer.append('|');
+ }
+
+ rowLines.add(buffer);
+ }
+
+ if (rowLines.size() != cellHeight)
+ {
+ throw new IllegalStateException("rowLines.size()");
+ }
+
+ for (int columnIndex = 0, columnCount = getColumnCount(); columnIndex < columnCount; ++columnIndex)
+ {
+ String[] cell = getFormattedCell(rowIndex, columnIndex);
+
+ if (cell.length != cellHeight)
+ {
+ throw new IllegalStateException("cell.size()");
+ }
+
+ for (int i = 0; i < cellHeight; ++i)
+ {
+ StringBuffer buffer = (StringBuffer)rowLines.get(i);
+
+ if (columnIndex > 0)
+ {
+ if (border == true)
+ {
+ buffer.append('|');
+ }
+// else
+// {
+// buffer.append(' ');
+// }
+ }
+
+ buffer.append(cell[i]);
+ }
+ }
+
+ if (border == true)
+ {
+ for (int i = 0; i < cellHeight; ++i)
+ {
+ StringBuffer buffer = (StringBuffer)rowLines.get(i);
+
+ buffer.append('|');
+ }
+ }
+
+ if (rowLines.size() != cellHeight)
+ {
+ throw new IllegalStateException("rowLines.size()");
+ }
+
+ List result = new ArrayList(cellHeight);
+
+ for (int i = 0; i < cellHeight; ++i)
+ {
+ StringBuffer buffer = (StringBuffer)rowLines.get(i);
+
+ result.add(buffer.toString());
+ }
+
+ if (result.size() != cellHeight)
+ {
+ throw new IllegalStateException("result.size()");
+ }
+
+ return (String[])result.toArray(new String[result.size()]);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see com.inamik.utils.TableFormatter#getFormattedTable()
+ */
+ public String[] getFormattedTable()
+ {
+ List result = new ArrayList();
+
+ String borderText = null;
+
+ if (border == true)
+ {
+ borderText = getFormattedBorder();
+ result.add(borderText);
+ }
+
+ for (int rowIndex = 0, rowCount = getRowCount(); rowIndex < rowCount; ++rowIndex)
+ {
+ if (rowIndex > 0)
+ {
+ if (border == true)
+ {
+ result.add(borderText);
+ }
+ }
+
+ String[] row = getFormattedRow(rowIndex);
+
+ for (int i = 0, size=row.length; i < size; ++i)
+ {
+ result.add(row[i]);
+ }
+ }
+
+ if (border == true)
+ {
+ result.add(borderText);
+ }
+
+ return (String[])result.toArray(new String[result.size()]);
+ }
+
+ /**
+ * getFormattedBorder
+ */
+ private String getFormattedBorder()
+ {
+ StringBuffer result = new StringBuffer();
+
+ result.append('+');
+
+ for (int columnIndex = 0, columnCount = getColumnCount(); columnIndex < columnCount; ++columnIndex)
+ {
+ if (columnIndex > 0)
+ {
+ result.append('+');
+ }
+
+ for (int i = 0; i < getColumnWidth(columnIndex); ++i)
+ {
+ result.append('-');
+ }
+ }
+
+ result.append('+');
+
+ return result.toString();
+ }
+}
Property changes on: trunk/chorem-entities/src/main/java/com/inamik/utils/SimpleTableFormatter.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: trunk/chorem-entities/src/main/java/com/inamik/utils/TableFormatter.java
===================================================================
--- trunk/chorem-entities/src/main/java/com/inamik/utils/TableFormatter.java (rev 0)
+++ trunk/chorem-entities/src/main/java/com/inamik/utils/TableFormatter.java 2013-06-29 22:55:21 UTC (rev 354)
@@ -0,0 +1,40 @@
+/*
+ * iNamik TableFormatter for Java
+ * Copyright (C) 2005-2012 David Farrell (davidpfarrell(a)yahoo.com)
+ *
+ * Licensed under MIT or GPLv3, see LICENSE.txt
+ */
+package com.inamik.utils;
+
+/**
+ * TableFormatter
+ * Created on Oct 18, 2005
+ * @author Dave
+ */
+public interface TableFormatter
+{
+ static final int ALIGN_DEFAULT = 0;
+ static final int ALIGN_LEFT = 1;
+ static final int ALIGN_CENTER = 2;
+ static final int ALIGN_RIGHT = 3;
+
+ static final int VALIGN_DEFAULT = 4;
+ static final int VALIGN_TOP = 5;
+ static final int VALIGN_CENTER = 6;
+ static final int VALIGN_BOTTOM = 7;
+
+ TableFormatter nextRow();
+ TableFormatter nextCell();
+ TableFormatter nextCell(int align, int valign);
+ TableFormatter addLine();
+ TableFormatter addLine(String text);
+ int getColumnCount();
+ int getRowCount();
+ int getColumnWidth(int columnIndex);
+ int getRowHeight(int rowIndex);
+ int getTableWidth();
+ int getTableHeight();
+ String[] getFormattedCell(int rowIndex, int columnIndex);
+ String[] getFormattedRow(int rowIndex);
+ String[] getFormattedTable();
+}
Property changes on: trunk/chorem-entities/src/main/java/com/inamik/utils/TableFormatter.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Modified: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/DashboardAction.java
===================================================================
--- trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/DashboardAction.java 2013-06-29 22:54:31 UTC (rev 353)
+++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/DashboardAction.java 2013-06-29 22:55:21 UTC (rev 354)
@@ -23,17 +23,26 @@
package org.chorem.webmotion.actions;
+import com.inamik.utils.SimpleTableFormatter;
+import com.inamik.utils.TableFormatter;
+import java.io.InputStream;
+import java.io.Reader;
+import java.io.StringReader;
+import java.text.DecimalFormat;
+import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.io.input.ReaderInputStream;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;
@@ -819,7 +828,7 @@
/**
* Prévisionnel entre deux dates en fonction des factures
*/
- public Render budget(ChoremClient client, Date start, Date end, String query) {
+ public Render budget(ChoremClient client, Integer depth, Date start, Date end, String query, String type) {
if (log.isDebugEnabled()) {
log.debug(String.format(
"budget for period '%s' to '%s' with filter '%s'",
@@ -978,13 +987,87 @@
data.add(false, i);
}
+ if (depth != null) {
+ // on supprime les profondeurs non demandees
+ Category lastCategory = null;
+ for (Iterator<WikittyQueryResultTreeNode<Category>> i=data.getCategoriesTree().iterator(); i.hasNext();) {
+ WikittyQueryResultTreeNode<Category> c = i.next();
+ if (c.getLevel() <= depth) {
+ lastCategory = c.getUserObject();
+ } else {
+ i.remove();
+ for (String d : data.getDates()) {
+ Category currentCategory = c.getUserObject();
+ double s = data.getAmount(d, currentCategory);
+ data.addAmount(d, lastCategory, s);
+ for (FinancialTransaction invoice : data.getInvoices(d, currentCategory)) {
+ data.addInvoice(d, lastCategory, invoice);
+ }
+ }
+ }
+ }
+ }
+
if (log.isDebugEnabled()) {
log.debug("budget data\n\t dates: " + data.getDates() + "\n\t rootTree: " + rootCategory + "\n\t categoriesTree: " + categoriesTree);
}
- return renderView("dashboardBudget.jsp", "companyId", companyId,
- "data", data);
+
+ if ("ascii".equalsIgnoreCase(type)) {
+ InputStream out = computeAsciiTable(data);
+ return renderDownload(out, "budget.txt", "text/plain");
+ } else {
+ return renderView("dashboardBudget.jsp", "companyId", companyId,
+ "data", data);
+ }
}
+ protected InputStream computeAsciiTable(BudgetData data) {
+ NumberFormat currency = new DecimalFormat("#0.00");
+
+ TableFormatter tf = new SimpleTableFormatter(true);
+
+ tf.nextRow();
+ tf.nextCell(TableFormatter.ALIGN_CENTER, TableFormatter.VALIGN_DEFAULT)
+ .addLine("Category");
+ for (String d : data.getDates()) {
+ tf.nextCell(TableFormatter.ALIGN_CENTER, TableFormatter.VALIGN_DEFAULT)
+ .addLine(d);
+ }
+ for (WikittyQueryResultTreeNode<Category> c : data.getCategoriesTree()) {
+
+ tf.nextRow().nextCell(TableFormatter.ALIGN_LEFT, TableFormatter.VALIGN_DEFAULT)
+ .addLine(StringUtils.repeat(" ", c.getLevel()) + c.getUserObject());
+ for (String d : data.getDates()) {
+ tf.nextCell(TableFormatter.ALIGN_RIGHT, TableFormatter.VALIGN_DEFAULT)
+ .addLine(currency.format(data.getAmount(d, c.getUserObject())));
+ }
+ }
+ tf.nextRow().nextCell().addLine("Sorties");
+ for (String d : data.getDates()) {
+ tf.nextCell(TableFormatter.ALIGN_RIGHT, TableFormatter.VALIGN_DEFAULT)
+ .addLine(currency.format(data.getDebt(d)));
+ }
+ tf.nextRow().nextCell().addLine("Entrées");
+ for (String d : data.getDates()) {
+ tf.nextCell(TableFormatter.ALIGN_RIGHT, TableFormatter.VALIGN_DEFAULT)
+ .addLine(currency.format(data.getIncome(d)));
+ }
+ tf.nextRow().nextCell().addLine("Total");
+ for (String d : data.getDates()) {
+ tf.nextCell(TableFormatter.ALIGN_RIGHT, TableFormatter.VALIGN_DEFAULT)
+ .addLine(currency.format(data.getTotal(d)));
+ }
+ tf.nextRow().nextCell().addLine("Total cumulé");
+ for (String d : data.getDates()) {
+ tf.nextCell(TableFormatter.ALIGN_RIGHT, TableFormatter.VALIGN_DEFAULT)
+ .addLine(currency.format(data.getFinances(d)));
+ }
+
+ String s = StringUtils.join(tf.getFormattedTable(), "\n");
+ Reader reader = new StringReader(s);
+ return new ReaderInputStream(reader);
+ }
+
/**
* Permet de collecter et representer les donnees pour le budget
*/
Modified: trunk/chorem-webmotion/src/main/resources/mapping
===================================================================
--- trunk/chorem-webmotion/src/main/resources/mapping 2013-06-29 22:54:31 UTC (rev 353)
+++ trunk/chorem-webmotion/src/main/resources/mapping 2013-06-29 22:55:21 UTC (rev 354)
@@ -10,7 +10,8 @@
* /wikitty-json/* DecoratorFilter.decorate wmDecoratorNo=true
* /fragment/* DecoratorFilter.decorate wmDecoratorNo=true
* /sales/funnel/json/* DecoratorFilter.decorate wmDecoratorNo=true
-* /project/json/* DecoratorFilter.decorate wmDecoratorNo=true
+* /project/json/* DecoratorFilter.decorate wmDecoratorNo=true
+* /ascii/* DecoratorFilter.decorate wmDecoratorNo=true
GET /* DecoratorFilter.decorate
* /* AuthenticationFilter.check
#####
@@ -52,6 +53,7 @@
* /admin/{method} action:AdminAction.{method}
* /contact view:contact.jsp
* /report view:report.jsp
+* /ascii/budget action:DashboardAction.budget type=ascii,report=budget
* /hr view:hr.jsp
* /hr/vacationRequest/edit/{id} action:HrAction.editVacationRequest
* /hr/vacationDiv/{ids} action:HrAction.editVacationDiv
Modified: trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/dashboardBudget.jsp
===================================================================
--- trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/dashboardBudget.jsp 2013-06-29 22:54:31 UTC (rev 353)
+++ trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/dashboardBudget.jsp 2013-06-29 22:55:21 UTC (rev 354)
@@ -23,10 +23,34 @@
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="f" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib uri="/WEB-INF/wikitty.tld" prefix="w"%>
<h1>Budget</h1>
+<form>
+ <input type="hidden" name="report" value="${report}"/>
+ <input type="hidden" name="useDate" value="${useDate}" />
+ <c:if test="${useDate != 'false'}">
+ <input type="hidden" name="start" value="${fn:escapeXml(start)}"/>
+ <input type="hidden" name="end" value="${fn:escapeXml(end)}"/>
+ </c:if>
+ <input type="hidden" name="query" value="${fn:escapeXml(query)}"/>
+
+ profondeur <input type="text" name="depth" value="${depth}"/>
+ <input type="submit" class="btn"/>
+</form>
+
+ <c:url var="asciireport" value="/ascii/budget">
+ <c:param name="useDate" value="${useDate}"/>
+ <c:param name="start" value="${start}"/>
+ <c:param name="end" value="${end}"/>
+ <c:param name="query" value="${query}"/>
+ <c:param name="depth" value="${depth}"/>
+ </c:url>
+
+ <a href="${asciireport}">export ascii</a>
+
<table class="table table-striped table-bordered table-condensed">
<thead>
<tr>
1
0
r353 - in trunk/chorem-webmotion/src/main/webapp: WEB-INF/jsp css
by bpoussin@users.chorem.org 29 Jun '13
by bpoussin@users.chorem.org 29 Jun '13
29 Jun '13
Author: bpoussin
Date: 2013-06-30 00:54:31 +0200 (Sun, 30 Jun 2013)
New Revision: 353
Url: http://chorem.org/projects/chorem/repository/revisions/353
Log:
essai de minimisation de la taille du menu Financial
Modified:
trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/decorator.jsp
trunk/chorem-webmotion/src/main/webapp/css/chorem.less
Modified: trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/decorator.jsp
===================================================================
--- trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/decorator.jsp 2013-06-28 14:53:52 UTC (rev 352)
+++ trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/decorator.jsp 2013-06-29 22:54:31 UTC (rev 353)
@@ -144,22 +144,23 @@
<b class="caret"></b>
</a>
<ul class="dropdown-menu">
- <li>Projected</li>
- <li><a href="<c:url value="/wikitty/Quotation/search"/>"><i class="icon-th-list icon-black"></i> All quotations</a></li>
- <li><a href="<c:url value="/wikitty/Quotation/edit/new"/>"><i class="icon-plus icon-black"></i> Add quotation</a></li>
+ <li>
+ <a href="<c:url value="/wikitty/Quotation/search"/>"><i class="icon-th-list icon-black"></i>Quotations</a>
+ <a href="<c:url value="/wikitty/Quotation/edit/new"/>"><i class="icon-plus icon-black"></i></a>
+ </li>
+ <li>
+ <a href="<c:url value="/wikitty/FinancialTransaction/search"/>"><i class="icon-th-list icon-black"></i>FinancialTransaction</a>
+ <a href="<c:url value="/wikitty/FinancialTransaction/edit/new"/>"><i class="icon-plus icon-black"></i></a>
+ </li>
+ <li>
+ <a href="<c:url value="/wikitty/Invoice/search"/>"><i class="icon-th-list icon-black"></i>Invoices</a>
+ <a href="<c:url value="/wikitty/Invoice/edit/new"/>"><i class="icon-plus icon-black"></i></a>
+ </li>
+ <li>
+ <a href="<c:url value="/wikitty/Category/search"/>"><i class="icon-th-list icon-black"></i>Categories</a>
+ <a href="<c:url value="/wikitty/Category/edit/new"/>"><i class="icon-plus icon-black"></i></a>
+ </li>
<li class="divider"></li>
- <li>FinancialTransaction</li>
- <li><a href="<c:url value="/wikitty/FinancialTransaction/search"/>"><i class="icon-th-list icon-black"></i> All financial transactions</a></li>
- <li><a href="<c:url value="/wikitty/FinancialTransaction/edit/new"/>"><i class="icon-plus icon-black"></i> Add financial transactions</a></li>
- <li class="divider"></li>
- <li>Invoice</li>
- <li><a href="<c:url value="/wikitty/Invoice/search"/>"><i class="icon-th-list icon-black"></i> All invoices</a></li>
- <li><a href="<c:url value="/wikitty/Invoice/edit/new"/>"><i class="icon-plus icon-black"></i> Add invoice</a></li>
- <li class="divider"></li>
- <li>Category</li>
- <li><a href="<c:url value="/wikitty/Category/search"/>"><i class="icon-th-list icon-black"></i> All categories</a></li>
- <li><a href="<c:url value="/wikitty/Category/edit/new"/>"><i class="icon-plus icon-black"></i> Add category</a></li>
- <li class="divider"></li>
<li>Report</li>
<li><a href="<c:url value="/report?report=vat"/>">TVA mensuel</a></li>
<li><a href="<c:url value="/report?report=invoiceDebt"/>">Debt</a></li>
Modified: trunk/chorem-webmotion/src/main/webapp/css/chorem.less
===================================================================
--- trunk/chorem-webmotion/src/main/webapp/css/chorem.less 2013-06-28 14:53:52 UTC (rev 352)
+++ trunk/chorem-webmotion/src/main/webapp/css/chorem.less 2013-06-29 22:54:31 UTC (rev 353)
@@ -13,6 +13,11 @@
padding: 0px;
}
+/* Pour que les menus avec un + soit sur une seul ligne */
+.dropdown-menu li > a {
+ display: inline;
+}
+
.ui-autocomplete {
max-height: 250px;
max-width: 500px;
1
0
See <http://ci.nuiton.org/jenkins/job/chorem/147/changes>
Changes:
[meynier] Changed Task.reestimatedEnd by Task.dayExtension
------------------------------------------
[...truncated 795 lines...]
[Fatal Error] accountSalesReport.jsp~:4:37: The prefix "jsp" for element "jsp:include" is not bound.
[ERROR] could not parse file <http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/src/main/…>
org.nuiton.i18n.plugin.parser.ParserException: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/i1…;> lineNumber: 4; columnNumber: 37; The prefix "jsp" for element "jsp:include" is not bound.
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:400)
at org.nuiton.i18n.plugin.parser.ParserExecutor$ParserTask.run(ParserExecutor.java:219)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/i1…;> lineNumber: 4; columnNumber: 37; The prefix "jsp" for element "jsp:include" is not bound.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:251)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:387)
... 4 more
[Fatal Error] hr.jsp~:9:71: The prefix "jsp" for element "jsp:include" is not bound.
[ERROR] could not parse file <http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/src/main/…>
org.nuiton.i18n.plugin.parser.ParserException: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/i1…;> lineNumber: 9; columnNumber: 71; The prefix "jsp" for element "jsp:include" is not bound.
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:400)
at org.nuiton.i18n.plugin.parser.ParserExecutor$ParserTask.run(ParserExecutor.java:219)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/i1…;> lineNumber: 9; columnNumber: 71; The prefix "jsp" for element "jsp:include" is not bound.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:251)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:387)
... 4 more
[Fatal Error] salesPerAccountReport.jsp~:4:37: The prefix "jsp" for element "jsp:include" is not bound.
[Fatal Error] dashboardVacationByEmployee.jsp~:5:63: The prefix "c" for element "c:forEach" is not bound.
[ERROR] could not parse file <http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/src/main/…>
[ERROR] org.nuiton.i18n.plugin.parser.ParserException: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/i1…;> lineNumber: 4; columnNumber: 37; The prefix "jsp" for element "jsp:include" is not bound.
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:400)
at org.nuiton.i18n.plugin.parser.ParserExecutor$ParserTask.run(ParserExecutor.java:219)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/i1…;> lineNumber: 4; columnNumber: 37; The prefix "jsp" for element "jsp:include" is not bound.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:251)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:387)
... 4 more
[Fatal Error] salesPerProjectReport.jsp~:4:37: The prefix "jsp" for element "jsp:include" is not bound.
[ERROR] could not parse file <http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/src/main/…>
org.nuiton.i18n.plugin.parser.ParserException: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/i1…;> lineNumber: 4; columnNumber: 37; The prefix "jsp" for element "jsp:include" is not bound.
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:400)
at org.nuiton.i18n.plugin.parser.ParserExecutor$ParserTask.run(ParserExecutor.java:219)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/i1…;> lineNumber: 4; columnNumber: 37; The prefix "jsp" for element "jsp:include" is not bound.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:251)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:387)
... 4 more
could not parse file <http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/src/main/…>
org.nuiton.i18n.plugin.parser.ParserException: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/i1…;> lineNumber: 5; columnNumber: 63; The prefix "c" for element "c:forEach" is not bound.
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:400)
at org.nuiton.i18n.plugin.parser.ParserExecutor$ParserTask.run(ParserExecutor.java:219)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/i1…;> lineNumber: 5; columnNumber: 63; The prefix "c" for element "c:forEach" is not bound.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:251)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:387)
... 4 more
[Fatal Error] sales.jsp~:2:43: The prefix "jsp" for element "jsp:include" is not bound.
[ERROR] could not parse file <http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/src/main/…>
org.nuiton.i18n.plugin.parser.ParserException: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/i1…;> lineNumber: 2; columnNumber: 43; The prefix "jsp" for element "jsp:include" is not bound.
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:400)
at org.nuiton.i18n.plugin.parser.ParserExecutor$ParserTask.run(ParserExecutor.java:219)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/i1…;> lineNumber: 2; columnNumber: 43; The prefix "jsp" for element "jsp:include" is not bound.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:251)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:387)
... 4 more
[Fatal Error] acceptedQuotation.jsp~:4:37: The prefix "jsp" for element "jsp:include" is not bound.
[ERROR] could not parse file <http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/src/main/…>
org.nuiton.i18n.plugin.parser.ParserException: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/i1…;> lineNumber: 4; columnNumber: 37; The prefix "jsp" for element "jsp:include" is not bound.
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:400)
at org.nuiton.i18n.plugin.parser.ParserExecutor$ParserTask.run(ParserExecutor.java:219)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/i1…;> lineNumber: 4; columnNumber: 37; The prefix "jsp" for element "jsp:include" is not bound.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:251)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:387)
... 4 more
[Fatal Error] sentQuotation.jsp~:4:37: The prefix "jsp" for element "jsp:include" is not bound.
[ERROR] could not parse file <http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/src/main/…>
org.nuiton.i18n.plugin.parser.ParserException: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/i1…;> lineNumber: 4; columnNumber: 37; The prefix "jsp" for element "jsp:include" is not bound.
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:400)
at org.nuiton.i18n.plugin.parser.ParserExecutor$ParserTask.run(ParserExecutor.java:219)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/i1…;> lineNumber: 4; columnNumber: 37; The prefix "jsp" for element "jsp:include" is not bound.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:251)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:387)
... 4 more
[Fatal Error] index.jsp~:6:50: The prefix "jsp" for element "jsp:include" is not bound.
[ERROR] could not parse file <http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/src/main/…>
org.nuiton.i18n.plugin.parser.ParserException: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/i1…;> lineNumber: 6; columnNumber: 50; The prefix "jsp" for element "jsp:include" is not bound.
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:400)
at org.nuiton.i18n.plugin.parser.ParserExecutor$ParserTask.run(ParserExecutor.java:219)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/i1…;> lineNumber: 6; columnNumber: 50; The prefix "jsp" for element "jsp:include" is not bound.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:251)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:387)
... 4 more
[Fatal Error] dashboardProfitability.jsp~:21:46: The prefix "c" for element "c:forEach" is not bound.
[ERROR] could not parse file <http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/src/main/…>
org.nuiton.i18n.plugin.parser.ParserException: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/i1…;> lineNumber: 21; columnNumber: 46; The prefix "c" for element "c:forEach" is not bound.
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:400)
at org.nuiton.i18n.plugin.parser.ParserExecutor$ParserTask.run(ParserExecutor.java:219)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/i1…;> lineNumber: 21; columnNumber: 46; The prefix "c" for element "c:forEach" is not bound.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:251)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:387)
... 4 more
[Fatal Error] report.jsp~:5:40: The prefix "c" for element "c:if" is not bound.
[ERROR] could not parse file <http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/src/main/…>
org.nuiton.i18n.plugin.parser.ParserException: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/i1…;> lineNumber: 5; columnNumber: 40; The prefix "c" for element "c:if" is not bound.
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:400)
at org.nuiton.i18n.plugin.parser.ParserExecutor$ParserTask.run(ParserExecutor.java:219)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/i1…;> lineNumber: 5; columnNumber: 40; The prefix "c" for element "c:if" is not bound.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:251)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:387)
... 4 more
[INFO]
[INFO] --- maven-i18n-plugin:2.3.1:get (get) @ chorem-webmotion ---
[INFO] Copying chorem-webmotion.properties to <http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/ge…>
[INFO] Copying chorem-webmotion.properties to <http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/ge…>
[INFO]
[INFO] --- maven-i18n-plugin:2.3.1:gen (gen-and-make-bundle) @ chorem-webmotion ---
[INFO] Copying chorem-webmotion_fr_FR.properties to <http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/src/main/…>
[INFO] Copying chorem-webmotion_en_GB.properties to <http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/src/main/…>
[INFO]
[INFO] --- maven-i18n-plugin:2.3.1:collect-i18n-artifacts (collect-i18n-artifacts) @ chorem-webmotion ---
Downloading: http://nexus.nuiton.org/nexus/content/groups/wikitty/org/nuiton/wikitty/3.1…
Downloading: http://nexus.nuiton.org/nexus/content/groups/wikitty/org/nuiton/wikitty/wik…
[INFO] collected 2 i18n artifacts for locale fr_FR stored in <http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/i1…>
[INFO] collected 2 i18n artifacts for locale en_GB stored in <http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/i1…>
[INFO]
[INFO] --- maven-i18n-plugin:2.3.1:bundle (gen-and-make-bundle) @ chorem-webmotion ---
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ chorem-webmotion ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 4 resources
[INFO] Copying 3 resources
[INFO]
[INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ chorem-webmotion ---
[INFO] Compiling 34 source files to <http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/cl…>
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] bootstrap class path not set in conjunction with -source 1.6
<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/pr…>:[155,7] error: cannot find symbol
[ERROR] symbol: method getReestimatedEnd()
location: variable t of type Task
<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/pr…>:[160,7] error: cannot find symbol
[ERROR] symbol: method getReestimatedEnd()
location: variable t of type Task
<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/pr…>:[161,38] error: cannot find symbol
[INFO] 3 errors
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] chorem ............................................ SUCCESS [3.233s]
[INFO] Chorem entities ................................... SUCCESS [12.621s]
[INFO] Chorem webmotion .................................. FAILURE [4.079s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 20.621s
[INFO] Finished at: Fri Jun 28 13:03:24 CEST 2013
[INFO] Final Memory: 34M/279M
[INFO] ------------------------------------------------------------------------
[JENKINS] Archiving disabled
[JENKINS] Archiving disabled
[JENKINS] Archiving disabled
Waiting for Jenkins to finish collecting data
mavenExecutionResult exceptions not empty
message : Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.5.1:compile (default-compile) on project chorem-webmotion: Compilation failure
cause : Compilation failure
Stack trace :
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.5.1:compile (default-compile) on project chorem-webmotion: Compilation failure
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:213)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
at org.jvnet.hudson.maven3.launcher.Maven3Launcher.main(Maven3Launcher.java:79)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchStandard(Launcher.java:329)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:239)
at org.jvnet.hudson.maven3.agent.Maven3Main.launch(Maven3Main.java:158)
at hudson.maven.Maven3Builder.call(Maven3Builder.java:100)
at hudson.maven.Maven3Builder.call(Maven3Builder.java:66)
at hudson.remoting.UserRequest.perform(UserRequest.java:118)
at hudson.remoting.UserRequest.perform(UserRequest.java:48)
at hudson.remoting.Request$2.run(Request.java:326)
at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: org.apache.maven.plugin.CompilationFailureException: Compilation failure
at org.apache.maven.plugin.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:729)
at org.apache.maven.plugin.CompilerMojo.execute(CompilerMojo.java:128)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
... 27 more
Sending e-mails to: chorem-commits(a)list.chorem.org
channel stopped
1
2
28 Jun '13
See <http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>
------------------------------------------
[...truncated 329 lines...]
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:387)
... 4 more
[Fatal Error] editQuotation.jsp~:4:1: Element type "link" must be followed by either attribute specifications, ">" or "/>".
[ERROR] could not parse file <http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>
org.nuiton.i18n.plugin.parser.ParserException: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…;> lineNumber: 4; columnNumber: 1; Element type "link" must be followed by either attribute specifications, ">" or "/>".
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:400)
at org.nuiton.i18n.plugin.parser.ParserExecutor$ParserTask.run(ParserExecutor.java:219)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…;> lineNumber: 4; columnNumber: 1; Element type "link" must be followed by either attribute specifications, ">" or "/>".
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:251)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:387)
... 4 more
[Fatal Error] account.jsp~:3:74: The element type "link" must be terminated by the matching end-tag "</link>".
[ERROR] could not parse file <http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>
org.nuiton.i18n.plugin.parser.ParserException: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…;> lineNumber: 3; columnNumber: 74; The element type "link" must be terminated by the matching end-tag "</link>".
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:400)
at org.nuiton.i18n.plugin.parser.ParserExecutor$ParserTask.run(ParserExecutor.java:219)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…;> lineNumber: 3; columnNumber: 74; The element type "link" must be terminated by the matching end-tag "</link>".
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:251)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:387)
... 4 more
[Fatal Error] salesReport.jsp~:4:37: The prefix "jsp" for element "jsp:include" is not bound.
[ERROR] could not parse file <http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>
org.nuiton.i18n.plugin.parser.ParserException: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…;> lineNumber: 4; columnNumber: 37; The prefix "jsp" for element "jsp:include" is not bound.
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:400)
at org.nuiton.i18n.plugin.parser.ParserExecutor$ParserTask.run(ParserExecutor.java:219)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…;> lineNumber: 4; columnNumber: 37; The prefix "jsp" for element "jsp:include" is not bound.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:251)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:387)
... 4 more
[Fatal Error] salesFunnel.jsp~:5:17: The element type "link" must be terminated by the matching end-tag "</link>".
[ERROR] could not parse file <http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>
org.nuiton.i18n.plugin.parser.ParserException: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…;> lineNumber: 5; columnNumber: 17; The element type "link" must be terminated by the matching end-tag "</link>".
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:400)
at org.nuiton.i18n.plugin.parser.ParserExecutor$ParserTask.run(ParserExecutor.java:219)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…;> lineNumber: 5; columnNumber: 17; The element type "link" must be terminated by the matching end-tag "</link>".
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:251)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:387)
... 4 more
[Fatal Error] accountSalesReport.jsp~:4:37: The prefix "jsp" for element "jsp:include" is not bound.
[ERROR] could not parse file <http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>
org.nuiton.i18n.plugin.parser.ParserException: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…;> lineNumber: 4; columnNumber: 37; The prefix "jsp" for element "jsp:include" is not bound.
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:400)
at org.nuiton.i18n.plugin.parser.ParserExecutor$ParserTask.run(ParserExecutor.java:219)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…;> lineNumber: 4; columnNumber: 37; The prefix "jsp" for element "jsp:include" is not bound.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:251)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:387)
... 4 more
[Fatal Error] hr.jsp~:9:71: The prefix "jsp" for element "jsp:include" is not bound.
[ERROR] could not parse file <http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>
org.nuiton.i18n.plugin.parser.ParserException: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…;> lineNumber: 9; columnNumber: 71; The prefix "jsp" for element "jsp:include" is not bound.
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:400)
at org.nuiton.i18n.plugin.parser.ParserExecutor$ParserTask.run(ParserExecutor.java:219)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…;> lineNumber: 9; columnNumber: 71; The prefix "jsp" for element "jsp:include" is not bound.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:251)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:387)
... 4 more
[Fatal Error] salesPerAccountReport.jsp~:4:37: The prefix "jsp" for element "jsp:include" is not bound.
[Fatal Error] dashboardVacationByEmployee.jsp~:5:63: The prefix "c" for element "c:forEach" is not bound.
[ERROR] could not parse file <http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>
[ERROR] org.nuiton.i18n.plugin.parser.ParserException: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…;> lineNumber: 4; columnNumber: 37; The prefix "jsp" for element "jsp:include" is not bound.
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:400)
at org.nuiton.i18n.plugin.parser.ParserExecutor$ParserTask.run(ParserExecutor.java:219)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…;> lineNumber: 4; columnNumber: 37; The prefix "jsp" for element "jsp:include" is not bound.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:251)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:387)
... 4 more
[Fatal Error] salesPerProjectReport.jsp~:4:37: The prefix "jsp" for element "jsp:include" is not bound.
[ERROR] could not parse file <http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>
org.nuiton.i18n.plugin.parser.ParserException: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…;> lineNumber: 4; columnNumber: 37; The prefix "jsp" for element "jsp:include" is not bound.
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:400)
at org.nuiton.i18n.plugin.parser.ParserExecutor$ParserTask.run(ParserExecutor.java:219)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…;> lineNumber: 4; columnNumber: 37; The prefix "jsp" for element "jsp:include" is not bound.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:251)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:387)
... 4 more
could not parse file <http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>
org.nuiton.i18n.plugin.parser.ParserException: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…;> lineNumber: 5; columnNumber: 63; The prefix "c" for element "c:forEach" is not bound.
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:400)
at org.nuiton.i18n.plugin.parser.ParserExecutor$ParserTask.run(ParserExecutor.java:219)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…;> lineNumber: 5; columnNumber: 63; The prefix "c" for element "c:forEach" is not bound.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:251)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:387)
... 4 more
[Fatal Error] sales.jsp~:2:43: The prefix "jsp" for element "jsp:include" is not bound.
[ERROR] could not parse file <http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>
org.nuiton.i18n.plugin.parser.ParserException: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…;> lineNumber: 2; columnNumber: 43; The prefix "jsp" for element "jsp:include" is not bound.
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:400)
at org.nuiton.i18n.plugin.parser.ParserExecutor$ParserTask.run(ParserExecutor.java:219)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…;> lineNumber: 2; columnNumber: 43; The prefix "jsp" for element "jsp:include" is not bound.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:251)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:387)
... 4 more
[Fatal Error] acceptedQuotation.jsp~:4:37: The prefix "jsp" for element "jsp:include" is not bound.
[ERROR] could not parse file <http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>
org.nuiton.i18n.plugin.parser.ParserException: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…;> lineNumber: 4; columnNumber: 37; The prefix "jsp" for element "jsp:include" is not bound.
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:400)
at org.nuiton.i18n.plugin.parser.ParserExecutor$ParserTask.run(ParserExecutor.java:219)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…;> lineNumber: 4; columnNumber: 37; The prefix "jsp" for element "jsp:include" is not bound.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:251)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:387)
... 4 more
[Fatal Error] sentQuotation.jsp~:4:37: The prefix "jsp" for element "jsp:include" is not bound.
[ERROR] could not parse file <http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>
org.nuiton.i18n.plugin.parser.ParserException: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…;> lineNumber: 4; columnNumber: 37; The prefix "jsp" for element "jsp:include" is not bound.
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:400)
at org.nuiton.i18n.plugin.parser.ParserExecutor$ParserTask.run(ParserExecutor.java:219)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…;> lineNumber: 4; columnNumber: 37; The prefix "jsp" for element "jsp:include" is not bound.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:251)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:387)
... 4 more
[Fatal Error] index.jsp~:6:50: The prefix "jsp" for element "jsp:include" is not bound.
[ERROR] could not parse file <http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>
org.nuiton.i18n.plugin.parser.ParserException: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…;> lineNumber: 6; columnNumber: 50; The prefix "jsp" for element "jsp:include" is not bound.
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:400)
at org.nuiton.i18n.plugin.parser.ParserExecutor$ParserTask.run(ParserExecutor.java:219)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…;> lineNumber: 6; columnNumber: 50; The prefix "jsp" for element "jsp:include" is not bound.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:251)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:387)
... 4 more
[Fatal Error] dashboardProfitability.jsp~:21:46: The prefix "c" for element "c:forEach" is not bound.
[ERROR] could not parse file <http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>
org.nuiton.i18n.plugin.parser.ParserException: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…;> lineNumber: 21; columnNumber: 46; The prefix "c" for element "c:forEach" is not bound.
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:400)
at org.nuiton.i18n.plugin.parser.ParserExecutor$ParserTask.run(ParserExecutor.java:219)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…;> lineNumber: 21; columnNumber: 46; The prefix "c" for element "c:forEach" is not bound.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:251)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:387)
... 4 more
[Fatal Error] report.jsp~:5:40: The prefix "c" for element "c:if" is not bound.
[ERROR] could not parse file <http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>
org.nuiton.i18n.plugin.parser.ParserException: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…;> lineNumber: 5; columnNumber: 40; The prefix "c" for element "c:if" is not bound.
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:400)
at org.nuiton.i18n.plugin.parser.ParserExecutor$ParserTask.run(ParserExecutor.java:219)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: org.xml.sax.SAXParseException; systemId: file://<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…;> lineNumber: 5; columnNumber: 40; The prefix "c" for element "c:if" is not bound.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:251)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)
at org.nuiton.i18n.plugin.parser.impl.AbstractParserXmlMojo$XmlFileParser.parseFile(AbstractParserXmlMojo.java:387)
... 4 more
[INFO]
[INFO] --- maven-i18n-plugin:2.3.1:get (get) @ chorem-webmotion ---
[INFO] Copying chorem-webmotion.properties to <http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>
[INFO] Copying chorem-webmotion.properties to <http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>
[INFO]
[INFO] --- maven-i18n-plugin:2.3.1:gen (gen-and-make-bundle) @ chorem-webmotion ---
[INFO] Copying chorem-webmotion_fr_FR.properties to <http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>
[INFO] Copying chorem-webmotion_en_GB.properties to <http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>
[INFO]
[INFO] --- maven-i18n-plugin:2.3.1:collect-i18n-artifacts (collect-i18n-artifacts) @ chorem-webmotion ---
Downloading: http://nexus.nuiton.org/nexus/content/groups/wikitty/org/nuiton/wikitty/3.1…
Downloading: http://nexus.nuiton.org/nexus/content/groups/wikitty/org/nuiton/wikitty/wik…
[INFO] collected 2 i18n artifacts for locale fr_FR stored in <http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>
[INFO] collected 2 i18n artifacts for locale en_GB stored in <http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>
[INFO]
[INFO] --- maven-i18n-plugin:2.3.1:bundle (gen-and-make-bundle) @ chorem-webmotion ---
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ chorem-webmotion ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 4 resources
[INFO] Copying 3 resources
[INFO]
[INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ chorem-webmotion ---
[INFO] Compiling 34 source files to <http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] bootstrap class path not set in conjunction with -source 1.6
<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>:[155,7] error: cannot find symbol
[ERROR] symbol: method getReestimatedEnd()
location: variable t of type Task
<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>:[160,7] error: cannot find symbol
[ERROR] symbol: method getReestimatedEnd()
location: variable t of type Task
<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>:[161,38] error: cannot find symbol
[INFO] 3 errors
[INFO] -------------------------------------------------------------
1
2
r352 - in trunk/chorem-webmotion/src/main: java/org/chorem/webmotion/actions/project resources webapp/WEB-INF/jsp webapp/js
by meynier@users.chorem.org 28 Jun '13
by meynier@users.chorem.org 28 Jun '13
28 Jun '13
Author: meynier
Date: 2013-06-28 16:53:52 +0200 (Fri, 28 Jun 2013)
New Revision: 352
Url: http://chorem.org/projects/chorem/repository/revisions/352
Log:
Corrected dashboard for new model and added the multi-project dashboard
Added:
trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/QuotationCalculation.java
trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/dashboardMultiProject.jsp
Modified:
trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/DashboardProjectAction.java
trunk/chorem-webmotion/src/main/resources/mapping
trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/decorator.jsp
trunk/chorem-webmotion/src/main/webapp/js/chorem.js
trunk/chorem-webmotion/src/main/webapp/js/jquery.fn.gantt.js
Modified: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/DashboardProjectAction.java
===================================================================
--- trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/DashboardProjectAction.java 2013-06-28 14:35:50 UTC (rev 351)
+++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/DashboardProjectAction.java 2013-06-28 14:53:52 UTC (rev 352)
@@ -19,6 +19,7 @@
import org.debux.webmotion.server.call.Call;
import org.debux.webmotion.server.render.Render;
import org.chorem.entities.Closed;
+import org.chorem.entities.Interval;
import org.chorem.entities.Quotation;
import org.chorem.entities.Project;
import org.chorem.entities.Task;
@@ -55,14 +56,14 @@
.end();
projectResult = client.findAllByQuery(Project.class, projectQuery);
-
+
//Fetch the quotations form the project (if there is one)
if(projectResult.size() != 0) {
for(Project project : projectResult.getAll()) {
WikittyQuery quotationQuery = null;
WikittyQueryMaker wqm = new WikittyQueryMaker();
-
-
+
+
if(quotationFilter.equals("Devis ouverts")) {
wqm.and()
.eq(Quotation.ELEMENT_FIELD_QUOTATION_PROJECT, project)
@@ -71,17 +72,17 @@
else {
wqm.eq(Quotation.ELEMENT_FIELD_QUOTATION_PROJECT, project);
}
-
+
quotationQuery = wqm.end();
-
+
quotationQuery.addSortDescending(Quotation.ELEMENT_FIELD_INTERVAL_BEGINDATE);
quotationResult = client.findAllByQuery(Quotation.class, quotationQuery);
-
-
+
+
}
-
+
}
-
+
//Fetch the tasks form the quotations (if there are some)
if(quotationResult != null) {
String customClass = "";
@@ -89,16 +90,16 @@
WikittyQuery taskQuery = new WikittyQueryMaker()
.eq(Task.ELEMENT_FIELD_TASK_QUOTATION, quote)
.end();
-
+
taskResult = client.findAllByQuery(Task.class, taskQuery);
taskMap.put(quote, taskResult.getAll());
-
+
}
-
+
}
-
+
}
-
+
if(projectResult == null) {
return renderView("dashboardSingleProject.jsp",
"title", "Tableau de bord projet", "projects", null,"quotations",null);
@@ -110,34 +111,69 @@
}
else {
return renderView("dashboardSingleProject.jsp",
- "title", "Tableau de bord projet", "projects", projectResult.getAll(),
- "quotations", quotationResult.getAll(), "taskMap", taskMap, "extensions",
- Extensions.extensions);
+ "title", "Tableau de bord projet", "projects", projectResult.getAll(),
+ "quotations", quotationResult.getAll(), "taskMap", taskMap, "extensions",
+ Extensions.extensions);
}
}
+ public Render multiProjectFilter(ChoremClient client, Date from, Date to) {
+ System.out.println(from + "," + to);
+ if(from != null && to != null) {
+ WikittyQueryMaker quotationQueryMaker = new WikittyQueryMaker();
+ WikittyQuery quotationQuery = quotationQueryMaker.or()
+ .bw(Interval.FQ_FIELD_INTERVAL_BEGINDATE, from, to)
+ .bw(Interval.FQ_FIELD_INTERVAL_ENDDATE, from, to)
+ .end();
+ WikittyQueryResult<Quotation> result =
+ client.findAllByQuery(Quotation.class, quotationQuery);
+
+ Collection<Quotation> quotations = result.getAll();
+
+ HashMap<Quotation, QuotationCalculation> calculations = new HashMap<Quotation, QuotationCalculation>();
+ for(Quotation q : quotations) {
+ calculations.put(q, new QuotationCalculation(q, client));
+ }
+
+ return renderView("dashboardMultiProject.jsp",
+ "title", "Tableau de bord projets",
+ "quotations", quotations,
+ "calculations", calculations);
+ }
+ else {
+ return renderView("dashboardMultiProject.jsp",
+ "title", "Tableau de bord projets");
+ }
+
+ }
+
+
+
public Render requestProject(ChoremClient client, String project_id, String quotationFilter) {
return projectFilter(client, project_id, quotationFilter);
}
-
+ public Render requestMultiProject(ChoremClient client, Date from, Date to) {
+ return multiProjectFilter(client, from, to);
+ }
+
public Render getGanttInfo(ChoremClient client, String id) {
Wikitty wikitty = client.restore(id);
- WikittyQuery quotationQuery = new WikittyQueryMaker()
+ WikittyQuery quotationQuery = new WikittyQueryMaker()
.ideq(id)
.end();
- Quotation quotation = client.findByQuery(Quotation.class, quotationQuery);
-
-
-
+ Quotation quotation = client.findByQuery(Quotation.class, quotationQuery);
+
+
+
WikittyQuery taskQuery = new WikittyQueryMaker()
.eq(Task.ELEMENT_FIELD_TASK_QUOTATION, quotation)
.end();
-
+
WikittyQueryResult<Task> taskResult = client.findAllByQuery(Task.class, taskQuery);
String customClass = "";
List<JTask> lTask = new ArrayList<JTask>();
for(Task t : taskResult.getAll()) {
-
+
if(t.getStatus().equals("SCHEDULED")) {
customClass = "ganttBlue";
}
@@ -150,25 +186,25 @@
else if(t.getStatus().equals("CLOSED")) {
customClass = "ganttGrey";
}
-
+
Values[] v = null;
- if(t.getReestimatedEnd() != null)
- v= new Values[2];
- else
+ //if(t.getReestimatedEnd() != null)
+ // v= new Values[2];
+ //else
v = new Values[1];
v[0] = new Values(t.getBeginDate(), t.getEndDate(), t.getName(), customClass);
- if(t.getReestimatedEnd() != null)
- v[1]= new Values(t.getEndDate(), t.getReestimatedEnd(), "Reestimated end", "ganttOrange");
-
- JTask jt = new JTask(t.getName(), t.getDescription(), v);
-
+ //if(t.getReestimatedEnd() != null)
+ // v[1]= new Values(t.getEndDate(), t.getReestimatedEnd(), "Reestimated end", "ganttOrange");
+
+ JTask jt = new JTask(t.getName(), t.getDescription(), t.getWikittyId(),t.getPrice(), t.getEstimatedDays(), v);
+
lTask.add(jt);
}
-
+
Collections.sort(lTask);
String dateStart = "/Date(" + quotation.getBeginDate().getTime() + ")/";
String dateEnd = "/Date(" + quotation.getEndDate().getTime() + ")/";
-
+
HashMap<String,String> dateMap = new HashMap<String,String>();
dateMap.put("sendingDate", "Draft");
dateMap.put("postedDate", "Sent");
@@ -180,7 +216,7 @@
dateMap.put("closedDate", "Closed");
dateMap.put("rejectedDate", "Rejected");
dateMap.put("cancelledDate", "Cancelled");
-
+
Iterator i = dateMap.entrySet().iterator();
HashMap<String,String> extDate = new HashMap<String,String>();
while(i.hasNext()) {
@@ -191,12 +227,12 @@
"/Date(" + ((Date) (wikitty.getFieldAsObject(me.getValue(), me.getKey()))).getTime() +")/");
}
}
-
+
JRender data = new JRender(lTask, extDate, dateStart, dateEnd);
- return renderJSON("data", data);
- }
-
-
+ return renderJSON("data", data);
+ }
+
+
private class JRender {
private List<JTask> source;
private String dateStart;
@@ -209,23 +245,29 @@
this.extDate = extDate;
}
}
-
+
private class JTask implements Comparable {
private String name;
private String desc;
private Values[] values;
private String status;
- public JTask(String name, String desc, Values[] values) {
+ private String wikittyId;
+ private float price;
+ private double estimatedDays;
+ public JTask(String name, String desc, String wikittyId,float price, double estimatedDays, Values[] values) {
this.name = name;
this.desc = desc;
this.values = values;
+ this.wikittyId = wikittyId;
+ this.price = price;
+ this.estimatedDays = estimatedDays;
}
@Override
public int compareTo(Object task) {
-
+
return values[0].compareTo(((JTask)task).values[0]);
}
-
+
}
private class Values implements Comparable{
private String from;
@@ -240,19 +282,19 @@
}
@Override
public int compareTo(Object o) {
-
+
return from.compareTo(((Values)o).from);
}
-
+
}
-
+
private class QuotationSorter<T> implements Comparator {
@Override
public int compare(Object q1, Object q2) {
-
+
return ((Quotation)q1).getBeginDate().compareTo(((Quotation)q2).getBeginDate());
}
-
+
}
}
Added: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/QuotationCalculation.java
===================================================================
--- trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/QuotationCalculation.java (rev 0)
+++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/QuotationCalculation.java 2013-06-28 14:53:52 UTC (rev 352)
@@ -0,0 +1,94 @@
+package org.chorem.webmotion.actions.project;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+
+import org.chorem.ChoremClient;
+import org.chorem.entities.Interval;
+import org.chorem.entities.Quotation;
+import org.chorem.entities.Task;
+import org.chorem.entities.Time;
+import org.nuiton.wikitty.query.WikittyQuery;
+import org.nuiton.wikitty.query.WikittyQueryMaker;
+import org.nuiton.wikitty.query.WikittyQueryResult;
+
+public class QuotationCalculation {
+
+ private Quotation q;
+ private ChoremClient client;
+ private static final int SEC_PER_HOUR = 3600;
+ private static final int WORKING_HOURS_PER_DAY = 7;
+
+ public QuotationCalculation(Quotation q, ChoremClient client) {
+ this.q = q;
+ this.client = client;
+ }
+ public double tjm() {
+ double amount = q.getAmount();
+ double nbDays = q.getEstimatedDays();
+
+ return amount/nbDays;
+
+ }
+
+ private double getSecondPeriod(Date start, Date end) {
+ return end.getTime()-start.getTime();
+ }
+
+ public double realDays() {
+ //test if quotation is finished
+ if(q.getExtensionNames().contains("Closed")) {
+ //TODO calcul grâce aux objets Time
+ WikittyQuery taskQuery = new WikittyQueryMaker()
+ .eq(Task.ELEMENT_FIELD_TASK_QUOTATION, q)
+ .end();
+
+ WikittyQueryResult<Task> result =
+ client.findAllByQuery(Task.class, taskQuery);
+ Collection<Time> times = new ArrayList<Time>();
+ for(Task t : result.getAll()) {
+ WikittyQuery timeQuery = new WikittyQueryMaker()
+ .eq(Time.ELEMENT_FIELD_TIME_TASK, q)
+ .end();
+ WikittyQueryResult timeResult = client.findAllByQuery(Time.class, timeQuery);
+ System.out.println("RESULT : " + timeResult);
+ times.addAll(timeResult.getAll());
+ }
+ System.out.println(times);
+ double totalTime = 0;
+ for(Time t : times) {
+ totalTime += getSecondPeriod(t.getBeginDate(), t.getEndDate());
+ }
+ return (totalTime / SEC_PER_HOUR) / WORKING_HOURS_PER_DAY;
+ }
+ else {
+ //nbDays + otherdays
+ WikittyQuery taskQuery = new WikittyQueryMaker()
+ .eq(Task.ELEMENT_FIELD_TASK_QUOTATION, q)
+ .end();
+
+ WikittyQueryResult<Task> result =
+ client.findAllByQuery(Task.class, taskQuery);
+
+ double totalDayExt = 0;
+ for(Task t : result.getAll()) {
+ totalDayExt += t.getDayExtension();
+ }
+ return q.getEstimatedDays() + totalDayExt;
+
+ }
+ }
+
+ public double deltaDays() {
+ return q.getEstimatedDays() - realDays();
+ }
+
+ public double realTjm() {
+ double amount = q.getAmount();
+ double nbDays = realDays();
+
+ return amount/nbDays;
+ }
+
+}
Modified: trunk/chorem-webmotion/src/main/resources/mapping
===================================================================
--- trunk/chorem-webmotion/src/main/resources/mapping 2013-06-28 14:35:50 UTC (rev 351)
+++ trunk/chorem-webmotion/src/main/resources/mapping 2013-06-28 14:53:52 UTC (rev 352)
@@ -69,6 +69,7 @@
* /sales/funnel/json/{method} action:sales.SalesAction.{method}
* /sales/funnel/json/{method}/{id} action:sales.SalesAction.{method}
* /project action:project.DashboardProjectAction.requestProject
+* /project/multi action:project.DashboardProjectAction.requestMultiProject
* /project/json/getExtension/{extensionName}/{id} action:project.QuotationStatusAction.getExtension
* /project/json/getGanttInfo/{id} action:project.DashboardProjectAction.getGanttInfo
* /crm/account/{id} action:crm.AccountAction.view
Added: trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/dashboardMultiProject.jsp
===================================================================
--- trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/dashboardMultiProject.jsp (rev 0)
+++ trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/dashboardMultiProject.jsp 2013-06-28 14:53:52 UTC (rev 352)
@@ -0,0 +1,97 @@
+<%--
+ #%L
+ Chorem webmotion
+ $Id:$
+ $HeadURL:$
+ %%
+ Copyright (C) 2011 - 2012 CodeLutin
+ %%
+ 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 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 <http://www.gnu.org/licenses/>.
+ #L%
+ --%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="f"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
+<%@ taglib uri="/WEB-INF/wikitty.tld" prefix="w"%>
+
+
+<link rel="stylesheet" href="<c:url value='/css/jquery.fn.gantt.css'/>" />
+<h1>${title}</h1>
+<form class="well form-inline" method="GET" id="projectSearch">
+
+ <div class="control-group">
+ <div class="controls" style="display: inline">
+<!--
+ <script>
+ $(function() {
+ $("#project_text")
+ .autocompleteByExtension(
+ {
+ source : "/chorem/wikitty-json/search?extension=Project",
+ minLength : 2,
+ select : function(event, ui) {
+ $("#project_text").val(
+ ui.item.label);
+ $("#project_hidden")
+ .val(ui.item.id);
+ $("#project_hidden").change()
+ return false;
+ }
+ });
+ });
+ </script>
+ -->
+ From : <input type="text" name="from" id="from" class="datepicker" />
+ to : <input type="text" name="to" id="to" class="datepicker" />
+ <input type="submit"/>
+ </div>
+ </div>
+
+</form>
+
+<table class="table table-striped table-bordered table-condensed">
+ <thead>
+ <tr>
+ <th>Client</th>
+ <th>Projet</th>
+ <th>Montant</th>
+ <th>NbJour</th>
+ <th>TJM</th>
+ <th>NbJourReel</th>
+ <th>delta jour</th>
+ <th>tjm reel</th>
+
+ </tr>
+ </thead>
+ <c:forEach var="q" items="${quotations}">
+ <tbody>
+ <tr>
+ <td><w:display wikitty="${q.wikitty}" fqfield="Quotation.customer" label=""/></td>
+ <td><w:display wikitty="${q.wikitty}" fqfield="Quotation.project" label=""/>
+ <a href="<c:url value="/wikitty/edit/${q.wikittyId}"/>"><i
+ class="icon-pencil icon-black"></i></a>
+ </td>
+ <td class="currency"><w:display wikitty="${q.wikitty}" fqfield="Quotation.amount" label=""/></td>
+ <td class="number"><w:display wikitty="${q.wikitty}" fqfield="Quotation.estimatedDays" label=""/></td>
+ <td class="number">${calculations[q].tjm()}</td>
+ <td class="number">${calculations[q].realDays()}</td>
+ <td class="number">${calculations[q].deltaDays()}</td>
+ <td class="number">${calculations[q].realTjm()}</td>
+ </tr>
+ </tbody>
+ </c:forEach>
+</table>
+
+
Modified: trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/decorator.jsp
===================================================================
--- trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/decorator.jsp 2013-06-28 14:35:50 UTC (rev 351)
+++ trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/decorator.jsp 2013-06-28 14:53:52 UTC (rev 352)
@@ -102,6 +102,7 @@
<li><a href="<c:url value="/wikitty/Project/search"/>"><i class="icon-th-list icon-black"></i> All projects</a></li>
<li><a href="<c:url value="/wikitty/Project/edit/new"/>"><i class="icon-plus icon-black"></i> Add project</a></li>
<li><a href="<c:url value="/project"/>"><i class="icon-th-list icon-black"></i> Dashboard project</a></li>
+ <li><a href="<c:url value="/project/multi"/>"><i class="icon-th-list icon-black"></i> Dashboard multi-project</a></li>
<li class="divider"></li>
<li>Propale</li>
<li><a href="<c:url value="/wikitty/Quotation/search"/>"><i class="icon-th-list icon-black"></i> All quotations</a></li>
Modified: trunk/chorem-webmotion/src/main/webapp/js/chorem.js
===================================================================
--- trunk/chorem-webmotion/src/main/webapp/js/chorem.js 2013-06-28 14:35:50 UTC (rev 351)
+++ trunk/chorem-webmotion/src/main/webapp/js/chorem.js 2013-06-28 14:53:52 UTC (rev 352)
@@ -775,7 +775,7 @@
minScale: "days",
itemsPerPage: 10,
onItemClick: function(data) {
- alert("Item clicked - show some details");
+ window.location ="wikitty/edit/" + this.source[0].wikittyId;
},
onAddClick: function(dt, rowId) {
alert("Empty space clicked - add an item!");
Modified: trunk/chorem-webmotion/src/main/webapp/js/jquery.fn.gantt.js
===================================================================
--- trunk/chorem-webmotion/src/main/webapp/js/jquery.fn.gantt.js 2013-06-28 14:35:50 UTC (rev 351)
+++ trunk/chorem-webmotion/src/main/webapp/js/jquery.fn.gantt.js 2013-06-28 14:53:52 UTC (rev 352)
@@ -45,6 +45,7 @@
waitText: "Please wait...",
onItemClick: function (data) { return; },
onAddClick: function (data) { return; },
+ onTaskClick: function (data) { return; },
onRender: function() { return; },
scrollToToday: true,
dateStart:null,
@@ -334,10 +335,12 @@
mover : function (e) {
console.log("hint");
var hint;
+ var str;
if($(this).attr("over") == 'text')
- hint = $('<div class="fn-gantt-hint"/>').html($(this).text());
+ str = $(this).text();
else
- hint = $('<div class="fn-gantt-hint"/>').html($(this).attr("over"));
+ str = $(this).attr("over");
+ hint = $('<div class="fn-gantt-hint"/>').html(str);
$("body").append(hint);
hint.css("left", e.pageX);
hint.css("top", e.pageY);
@@ -995,7 +998,7 @@
// **Progress Bar**
// Return an element representing a progress of position within
// the entire chart
- createProgressBar: function (days, cls, desc, label, dataObj) {
+ createProgressBar: function (days, cls, desc, label,price, estimatedDays, dataObj) {
var cellWidth = tools.getCellSize();
var barMarg = tools.getProgressBarMargin() || 0;
@@ -1007,10 +1010,21 @@
.data("dataObj", dataObj);
//if (desc) {
- bar.mouseover(core.mover)
+ bar.mouseover(function (e) {
+ console.log("hint");
+ var hint;
+ var str;
+
+ hint = $('<div class="fn-gantt-hint"/>').html(label + " :<br/>"
+ + desc + "<br/>Price : " + price + "<br />Estimated days : " + estimatedDays);
+ $("body").append(hint);
+ hint.css("left", e.pageX);
+ hint.css("top", e.pageY);
+ hint.show();
+ })
.mouseout(core.mout)
.mousemove(core.mmove)
- .attr('over', 'text');
+ .attr('over', 'task');
//}
bar.click(function (e) {
e.stopPropagation();
@@ -1156,6 +1170,8 @@
day.customClass ? day.customClass : "",
entry.desc ? entry.desc : "",
day.label ? day.label : "",
+ entry.price ? entry.price : "",
+ entry.estimatedDays ? entry.estimatedDays : "",
day.dataObj ? day.dataObj : null
);
@@ -1199,6 +1215,8 @@
day.customClass ? day.customClass : "",
entry.desc ? entry.desc : "",
day.label ? day.label : "",
+ ntry.price ? entry.price : "",
+ entry.estimatedDays ? entry.estimatedDays : "",
day.dataObj ? day.dataObj : null
);
@@ -1239,6 +1257,8 @@
day.customClass ? day.customClass : "",
entry.desc ? entry.desc : "",
day.label ? day.label : "",
+ entry.price ? entry.price : "",
+ entry.estimatedDays ? entry.estimatedDays : "",
day.dataObj ? day.dataObj : null
);
@@ -1265,6 +1285,8 @@
day.customClass ? day.customClass : "",
entry.desc ? entry.desc : "",
day.label ? day.label : "",
+ entry.price ? entry.price : "",
+ entry.estimatedDays ? entry.estimatedDays : "",
day.dataObj ? day.dataObj : null
);
1
0
28 Jun '13
Author: bpoussin
Date: 2013-06-28 16:35:50 +0200 (Fri, 28 Jun 2013)
New Revision: 351
Url: http://chorem.org/projects/chorem/repository/revisions/351
Log:
le CA est hors taxe
Modified:
trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/dashboardSummary.jsp
Modified: trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/dashboardSummary.jsp
===================================================================
--- trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/dashboardSummary.jsp 2013-06-28 14:35:23 UTC (rev 350)
+++ trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/dashboardSummary.jsp 2013-06-28 14:35:50 UTC (rev 351)
@@ -49,7 +49,7 @@
</ul>
<ul>
- <li>Chiffre d'affaire TTC:
+ <li>Chiffre d'affaire HT:
<strong>
<a href='<c:url value="/wikitty/search?query=${annualDebtIncome.get('incomesQuery')} or ${annualDebtIncome.get('extraIncomesQuery')} %23limit=2147483647"/>'>
<f:formatNumber type="currency" value="${annualDebtIncome.get('incomes') + annualDebtIncome.get('extraIncomes')}"/>
@@ -60,7 +60,7 @@
<f:formatNumber type="currency" value="${pastAnnualDebtIncome.get('incomes') + pastAnnualDebtIncome.get('extraIncomes')}"/>
</a>
</strong>)
- <li>Dépenses:
+ <li>Dépenses TTC:
<strong>
<a href='<c:url value="/wikitty/search?query=${annualDebtIncome.get('debtsQuery')} %23limit=2147483647"/>'>
<f:formatNumber type="currency" value="${annualDebtIncome.get('debtsTTC')}"/>
1
0
r350 - trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions
by bpoussin@users.chorem.org 28 Jun '13
by bpoussin@users.chorem.org 28 Jun '13
28 Jun '13
Author: bpoussin
Date: 2013-06-28 16:35:23 +0200 (Fri, 28 Jun 2013)
New Revision: 350
Url: http://chorem.org/projects/chorem/repository/revisions/350
Log:
on ne prend pas en compte les proposition rejetee
Modified:
trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/DashboardAction.java
Modified: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/DashboardAction.java
===================================================================
--- trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/DashboardAction.java 2013-06-28 10:20:50 UTC (rev 349)
+++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/DashboardAction.java 2013-06-28 14:35:23 UTC (rev 350)
@@ -52,6 +52,7 @@
import org.chorem.entities.Invoice;
import org.chorem.entities.InvoiceStatus;
import org.chorem.entities.Quotation;
+import org.chorem.entities.Rejected;
import org.chorem.entities.Sent;
import org.chorem.entities.Started;
import org.chorem.entities.Task;
@@ -471,7 +472,7 @@
*/
protected Render quotationFilter(ChoremClient client,
Date start, Date end, String query,
- String statusStart, String statusEnd, String jspRender,
+ String statusStart, String statusEnd, boolean excludeRejected, String jspRender,
String title, boolean computeTask) {
if (start == null) {
@@ -491,6 +492,10 @@
.parse(query)
.exteq(statusStart);
+ if (excludeRejected) {
+ quotationQueryMaker = quotationQueryMaker.extne(Rejected.EXT_REJECTED);
+ }
+
if (statusEnd != null){
quotationQueryMaker = quotationQueryMaker.extne(statusEnd);
}
@@ -596,21 +601,21 @@
Date start, Date end, String query) {
String jsp = "dashboardQuotation.jsp";
String title = "Les propositions en attente de réponse";
- return quotationFilter(client, start, end, query, Quotation.EXT_QUOTATION, Accepted.EXT_ACCEPTED, jsp, title, false);
+ return quotationFilter(client, start, end, query, Quotation.EXT_QUOTATION, Accepted.EXT_ACCEPTED, true, jsp, title, false);
}
public Render projectOpen(ChoremClient client,
Date start, Date end, String query) {
String jsp = "dashboardProject.jsp";
String title = "Les projets en cours";
- return quotationFilter(client, start, end, query, Accepted.EXT_ACCEPTED, Warranty.EXT_WARRANTY, jsp, title, true);
+ return quotationFilter(client, start, end, query, Accepted.EXT_ACCEPTED, Warranty.EXT_WARRANTY, true, jsp, title, true);
}
public Render projectClosed(ChoremClient client,
Date start, Date end, String query) {
String jsp = "dashboardProject.jsp";
String title = "Les projets clos";
- return quotationFilter(client, start, end, query, Warranty.EXT_WARRANTY, null, jsp, title, true);
+ return quotationFilter(client, start, end, query, Warranty.EXT_WARRANTY, null, true, jsp, title, true);
}
static public class TaskInfo implements Cloneable {
@@ -808,7 +813,7 @@
Date start, Date end, String query) {
String jsp = "dashboardProfitability.jsp";
String title = "Profitability";
- return quotationFilter(client, start, end, query, Started.EXT_STARTED, null, jsp, title, true);
+ return quotationFilter(client, start, end, query, Started.EXT_STARTED, null, true, jsp, title, true);
}
/**
1
0
r349 - in trunk/chorem-entities/src/main: java/org/chorem xmi
by meynier@users.chorem.org 28 Jun '13
by meynier@users.chorem.org 28 Jun '13
28 Jun '13
Author: meynier
Date: 2013-06-28 12:20:50 +0200 (Fri, 28 Jun 2013)
New Revision: 349
Url: http://chorem.org/projects/chorem/repository/revisions/349
Log:
Changed Task.reestimatedEnd by Task.dayExtension
Modified:
trunk/chorem-entities/src/main/java/org/chorem/ChoremAction.java
trunk/chorem-entities/src/main/xmi/chorem-model.properties
trunk/chorem-entities/src/main/xmi/chorem-model.zargo
Modified: trunk/chorem-entities/src/main/java/org/chorem/ChoremAction.java
===================================================================
--- trunk/chorem-entities/src/main/java/org/chorem/ChoremAction.java 2013-06-27 14:07:10 UTC (rev 348)
+++ trunk/chorem-entities/src/main/java/org/chorem/ChoremAction.java 2013-06-28 10:20:50 UTC (rev 349)
@@ -52,7 +52,7 @@
}
/**
- * Vide les objets qui porte une certaine extensions
+ * Vide les objets qui portent une certaine extension
* @param extensionName
*/
@ApplicationConfig.Action.Step(0)
Modified: trunk/chorem-entities/src/main/xmi/chorem-model.properties
===================================================================
--- trunk/chorem-entities/src/main/xmi/chorem-model.properties 2013-06-27 14:07:10 UTC (rev 348)
+++ trunk/chorem-entities/src/main/xmi/chorem-model.properties 2013-06-28 10:20:50 UTC (rev 349)
@@ -306,15 +306,16 @@
#
# Task
#
-org.chorem.entities.Task.class.tagvalue.version=10.0
+org.chorem.entities.Task.class.tagvalue.version=11.0
org.chorem.entities.Task.class.tagvalue.toString=%Task.name|noname$s - %Task.quotation$s
org.chorem.entities.Task.class.tagvalue.sortOrder=Task.name
org.chorem.entities.Task.class.tagvalue.preload=Task.quotation
org.chorem.entities.Task.attribute.description.tagvalue.help=R\u00e9sum\u00e9 de ce qu'il devra \u00eatre fait durant cette t\u00e2che
org.chorem.entities.Task.attribute.description.tagvalue.subtype=text/rst
org.chorem.entities.Task.attribute.price.tagvalue.help=Montant HT de cette t\u00e2che
-org.chorem.entities.Task.attribute.reestimatedEnd.tagvalue.help=Date estim\u00e9e de fin de t\u00e2che
+#org.chorem.entities.Task.attribute.reestimatedEnd.tagvalue.help=Date estim\u00e9e de fin de t\u00e2che
org.chorem.entities.Task.attribute.estimatedDays.tagvalue.help=Le nombre de jours estim\u00e9s pour cette t\u00e2che
+org.chorem.entities.Task.attributes.dayExtension.tagvalue.help=Jours supplementaires estimes pour la tache
org.chorem.entities.Task.attribute.name.tagvalue.help=Nom de la t\u00e2che ou N\u00b0 dans le devis
org.chorem.entities.Task.attribute.status.tagvalue.help=\u00c9tat actuel de la t\u00e2che
org.chorem.entities.Task.attribute.status.tagvalue.allowed=SCHEDULED,STARTED,FINISHED,CLOSED
Modified: trunk/chorem-entities/src/main/xmi/chorem-model.zargo
===================================================================
(Binary files differ)
1
0
r348 - in trunk/chorem-webmotion/src/main: java/org/chorem/webmotion/actions/project resources webapp/WEB-INF/jsp webapp/css webapp/js
by meynier@users.chorem.org 27 Jun '13
by meynier@users.chorem.org 27 Jun '13
27 Jun '13
Author: meynier
Date: 2013-06-27 16:07:10 +0200 (Thu, 27 Jun 2013)
New Revision: 348
Url: http://chorem.org/projects/chorem/repository/revisions/348
Log:
Project dashboard : UI changes + filter for the quotations
Modified:
trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/DashboardProjectAction.java
trunk/chorem-webmotion/src/main/resources/mapping
trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/dashboardSingleProject.jsp
trunk/chorem-webmotion/src/main/webapp/css/jquery.fn.gantt.css
trunk/chorem-webmotion/src/main/webapp/js/chorem.js
trunk/chorem-webmotion/src/main/webapp/js/jquery.fn.gantt.js
Modified: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/DashboardProjectAction.java
===================================================================
--- trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/DashboardProjectAction.java 2013-06-26 09:30:51 UTC (rev 347)
+++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/DashboardProjectAction.java 2013-06-27 14:07:10 UTC (rev 348)
@@ -2,9 +2,13 @@
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.TreeMap;
import org.apache.commons.logging.Log;
@@ -14,9 +18,12 @@
import org.chorem.ChoremUtil;
import org.debux.webmotion.server.call.Call;
import org.debux.webmotion.server.render.Render;
+import org.chorem.entities.Closed;
import org.chorem.entities.Quotation;
import org.chorem.entities.Project;
import org.chorem.entities.Task;
+import org.chorem.entities.TaskStatus;
+import org.nuiton.wikitty.entities.Wikitty;
import org.nuiton.wikitty.entities.WikittyExtension;
import org.nuiton.wikitty.query.WikittyQuery;
import org.nuiton.wikitty.query.WikittyQueryMaker;
@@ -32,14 +39,13 @@
/** to use log facility, just put in your code: log.info(\"...\"); */
static private Log log = LogFactory.getLog(DashboardProjectAction.class);
- public Render projectFilter(ChoremClient client, String id) {
+ public Render projectFilter(ChoremClient client, String id, String quotationFilter) {
WikittyQueryResult<Project> projectResult = null;
WikittyQueryResult<Quotation> quotationResult = null;
WikittyQueryResult<Task> taskResult = null;
HashMap<Quotation, List<Task>> taskMap = new HashMap<Quotation, List<Task>>();
- HashMap<Quotation, String> jSonTaskMap = new HashMap<Quotation, String>();
//HashMap<Quotation, String> extMap = new HashMap<Quotation, String>();
//Fetch the project form the name (if it has been requested)
@@ -53,10 +59,22 @@
//Fetch the quotations form the project (if there is one)
if(projectResult.size() != 0) {
for(Project project : projectResult.getAll()) {
- WikittyQuery quotationQuery = new WikittyQueryMaker()
- .eq(Quotation.ELEMENT_FIELD_QUOTATION_PROJECT, project)
- .end();
+ WikittyQuery quotationQuery = null;
+ WikittyQueryMaker wqm = new WikittyQueryMaker();
+
+ if(quotationFilter.equals("Devis ouverts")) {
+ wqm.and()
+ .eq(Quotation.ELEMENT_FIELD_QUOTATION_PROJECT, project)
+ .extne(Closed.EXT_CLOSED);
+ }
+ else {
+ wqm.eq(Quotation.ELEMENT_FIELD_QUOTATION_PROJECT, project);
+ }
+
+ quotationQuery = wqm.end();
+
+ quotationQuery.addSortDescending(Quotation.ELEMENT_FIELD_INTERVAL_BEGINDATE);
quotationResult = client.findAllByQuery(Quotation.class, quotationQuery);
@@ -66,6 +84,7 @@
//Fetch the tasks form the quotations (if there are some)
if(quotationResult != null) {
+ String customClass = "";
for(Quotation quote : quotationResult.getAll()) {
WikittyQuery taskQuery = new WikittyQueryMaker()
.eq(Task.ELEMENT_FIELD_TASK_QUOTATION, quote)
@@ -73,22 +92,12 @@
taskResult = client.findAllByQuery(Task.class, taskQuery);
taskMap.put(quote, taskResult.getAll());
- List<JTask> lTask = new ArrayList<JTask>();
- for(Task t : taskResult.getAll()) {
- Values[] v = new Values[1];
- v[0] = new Values(t.getBeginDate(), t.getEndDate(), t.getName(), "ganttRed");
- JTask jt = new JTask(t.getName(), t.getDescription(), v);
-
- lTask.add(jt);
- }
- Gson g = new Gson();
- jSonTaskMap.put(quote, g.toJson(lTask));
+
}
}
}
- System.out.println(taskMap);
if(projectResult == null) {
return renderView("dashboardSingleProject.jsp",
@@ -102,51 +111,123 @@
else {
return renderView("dashboardSingleProject.jsp",
"title", "Tableau de bord projet", "projects", projectResult.getAll(),
- "quotations", quotationResult.getAll(), "taskMap", taskMap,"jSonTaskMap",jSonTaskMap, "extensions",
+ "quotations", quotationResult.getAll(), "taskMap", taskMap, "extensions",
Extensions.extensions);
}
}
- public Render requestProject(ChoremClient client, String project_id) {
- return projectFilter(client, project_id);
+ public Render requestProject(ChoremClient client, String project_id, String quotationFilter) {
+ return projectFilter(client, project_id, quotationFilter);
}
-
- /*
- private String getNextExtension(ChoremClient client,Quotation object) {
- Collection<String> extensions = object.getExtensionNames();
+ public Render getGanttInfo(ChoremClient client, String id) {
+ Wikitty wikitty = client.restore(id);
+ WikittyQuery quotationQuery = new WikittyQueryMaker()
+ .ideq(id)
+ .end();
+ Quotation quotation = client.findByQuery(Quotation.class, quotationQuery);
+
+
+
+ WikittyQuery taskQuery = new WikittyQueryMaker()
+ .eq(Task.ELEMENT_FIELD_TASK_QUOTATION, quotation)
+ .end();
+ WikittyQueryResult<Task> taskResult = client.findAllByQuery(Task.class, taskQuery);
+ String customClass = "";
+ List<JTask> lTask = new ArrayList<JTask>();
+ for(Task t : taskResult.getAll()) {
+
+ if(t.getStatus().equals("SCHEDULED")) {
+ customClass = "ganttBlue";
+ }
+ else if(t.getStatus().equals("STARTED")) {
+ customClass = "ganttGreen";
+ }
+ else if(t.getStatus().equals("FINISHED")) {
+ customClass = "ganttRed";
+ }
+ else if(t.getStatus().equals("CLOSED")) {
+ customClass = "ganttGrey";
+ }
+
+ Values[] v = null;
+ if(t.getReestimatedEnd() != null)
+ v= new Values[2];
+ else
+ v = new Values[1];
+ v[0] = new Values(t.getBeginDate(), t.getEndDate(), t.getName(), customClass);
+ if(t.getReestimatedEnd() != null)
+ v[1]= new Values(t.getEndDate(), t.getReestimatedEnd(), "Reestimated end", "ganttOrange");
+
+ JTask jt = new JTask(t.getName(), t.getDescription(), v);
+
+ lTask.add(jt);
+ }
- if(extensions.contains("Closed")) return null;
+ Collections.sort(lTask);
+ String dateStart = "/Date(" + quotation.getBeginDate().getTime() + ")/";
+ String dateEnd = "/Date(" + quotation.getEndDate().getTime() + ")/";
+
+ HashMap<String,String> dateMap = new HashMap<String,String>();
+ dateMap.put("sendingDate", "Draft");
+ dateMap.put("postedDate", "Sent");
+ dateMap.put("acceptedDate", "Accepted");
+ dateMap.put("startedDate", "Started");
+ dateMap.put("deliveryDate", "Delivered");
+ dateMap.put("rsvStart", "RSV");
+ dateMap.put("warrantyStart", "Warranty");
+ dateMap.put("closedDate", "Closed");
+ dateMap.put("rejectedDate", "Rejected");
+ dateMap.put("cancelledDate", "Cancelled");
- TreeMap<Integer, String> extMap = new TreeMap<Integer, String>();
-
-
-
- //reverse loop
- for(int i = exts.length-1; i>=0; i--) {
- if(extensions.contains(exts[i])) {
- WikittyExtension ret = client.restoreExtensionLastVersion(exts[i+1]);
- return ret;
+ Iterator i = dateMap.entrySet().iterator();
+ HashMap<String,String> extDate = new HashMap<String,String>();
+ while(i.hasNext()) {
+ Map.Entry<String, String> me = (Map.Entry<String, String>)i.next();
+ if(wikitty.hasExtension(me.getValue())) {
+ extDate.put(
+ me.getValue() + " " + me.getKey(),
+ "/Date(" + ((Date) (wikitty.getFieldAsObject(me.getValue(), me.getKey()))).getTime() +")/");
}
-
}
- return null;
- }*/
+ JRender data = new JRender(lTask, extDate, dateStart, dateEnd);
+ return renderJSON("data", data);
+ }
- private class JTask {
+
+ private class JRender {
+ private List<JTask> source;
+ private String dateStart;
+ private String dateEnd;
+ private HashMap<String,String> extDate;
+ public JRender(List<JTask> source,HashMap<String,String> extDate,String dateStart,String dateEnd) {
+ this.source = source;
+ this.dateStart = dateStart;
+ this.dateEnd = dateEnd;
+ this.extDate = extDate;
+ }
+ }
+
+ private class JTask implements Comparable {
private String name;
private String desc;
private Values[] values;
+ private String status;
public JTask(String name, String desc, Values[] values) {
this.name = name;
this.desc = desc;
this.values = values;
}
+ @Override
+ public int compareTo(Object task) {
+
+ return values[0].compareTo(((JTask)task).values[0]);
+ }
}
- private class Values{
+ private class Values implements Comparable{
private String from;
private String to;
private String label;
@@ -157,6 +238,21 @@
this.label = label;
this.customClass = customClass;
}
+ @Override
+ public int compareTo(Object o) {
+
+ return from.compareTo(((Values)o).from);
+ }
}
+
+ private class QuotationSorter<T> implements Comparator {
+
+ @Override
+ public int compare(Object q1, Object q2) {
+
+ return ((Quotation)q1).getBeginDate().compareTo(((Quotation)q2).getBeginDate());
+ }
+
+ }
}
Modified: trunk/chorem-webmotion/src/main/resources/mapping
===================================================================
--- trunk/chorem-webmotion/src/main/resources/mapping 2013-06-26 09:30:51 UTC (rev 347)
+++ trunk/chorem-webmotion/src/main/resources/mapping 2013-06-27 14:07:10 UTC (rev 348)
@@ -69,6 +69,7 @@
* /sales/funnel/json/{method} action:sales.SalesAction.{method}
* /sales/funnel/json/{method}/{id} action:sales.SalesAction.{method}
* /project action:project.DashboardProjectAction.requestProject
-* /project/json/{method}/{extensionName}/{id} action:project.QuotationStatusAction.{method}
+* /project/json/getExtension/{extensionName}/{id} action:project.QuotationStatusAction.getExtension
+* /project/json/getGanttInfo/{id} action:project.DashboardProjectAction.getGanttInfo
* /crm/account/{id} action:crm.AccountAction.view
* /crm/quotation/edit/{id} action:crm.QuotationAction.edit
Modified: trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/dashboardSingleProject.jsp
===================================================================
--- trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/dashboardSingleProject.jsp 2013-06-26 09:30:51 UTC (rev 347)
+++ trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/dashboardSingleProject.jsp 2013-06-27 14:07:10 UTC (rev 348)
@@ -56,7 +56,14 @@
<input type="text" id="project_text" name="project_name"
value="${param.project_name}" placeholder="project name" /> <input
- type="hidden" id="project_hidden" name="project_id" value="" />
+ type="hidden" id="project_hidden" name="project_id"
+ value="${param.project_id}" /> <select class="filterBox"
+ name="quotationFilter" id="quotationFilter">
+ <option name="open">Devis ouverts</option>
+ <option name="all"
+ <c:if test='${param.quotationFilter=="Tous les devis" }'>selected</c:if>>Tous
+ les devis</option>
+ </select>
</div>
</div>
@@ -64,20 +71,38 @@
<c:choose>
<c:when test="${projects.size() >= 1}">
-
<c:forEach var="p" items="${projects}">
- <h2>${p.name}</h2>
+ <h2 style="display: inline;">${p.name}</h2>
+ <a href="<c:url value="/wikitty/edit/${param.project_id}"/>"><i
+ class="icon-pencil icon-black"></i><small>edit</small></a>
<p>${p.description}</p>
</c:forEach>
-<script>var ganttData = new Array();</script>
<c:forEach var="q" items="${quotations}">
+
+ <h3 style="display: inline;">
+ <w:display wikitty="${q.wikitty}" fqfield="Quotation.description"
+ label="" />
+ </h3>
+ <a href="<c:url value="/wikitty/edit/${q.wikittyId}"/>"><i
+ class="icon-pencil icon-black"></i><small>edit</small></a>
+ <p>
+ Du <w:display wikitty="${q.wikitty}" fqfield="Interval.beginDate"
+ label="" pattern="dd/MM/yyyy"/>
+ au <w:display wikitty="${q.wikitty}" fqfield="Interval.beginDate"
+ label="" pattern="dd/MM/yyyy" />
+ <br />Statut :
+ ${q.wikitty.extensionNames.toArray()[q.wikitty.extensionNames.size()
+ -1]}
+ </p>
+
+
+
<table class="table table-striped table-bordered table-condensed">
<thead>
<tr>
- <th>Devis</th>
<th>Responsable Code Lutin</th>
<th>Responsable entreprise</th>
<th>Estimated days</th>
@@ -90,9 +115,8 @@
<tbody>
<tr>
+
<td><w:display wikitty="${q.wikitty}"
- fqfield="Quotation.description" label="" /></td>
- <td><w:display wikitty="${q.wikitty}"
fqfield="Quotation.supplier" label="" /></td>
<td><w:display wikitty="${q.wikitty}"
fqfield="Quotation.customer" label="" /></td>
@@ -108,48 +132,12 @@
</tbody>
</table>
+
+ <div class="gantt gantt-${q.wikittyId}" wikittyId = "${q.wikittyId}" data=''>
+ Pas de tâche</div>
+<!--
- <p>
- Début : ${q.beginDate}<br /> Fin :
- <w:display wikitty="${q.wikitty}" fqfield="Interval.endDate"
- label="" />
- </p>
- <a class="ganttinit" wikittyId="${q.wikittyId}" href="#">Afficher Gantt</a>
- <div class="gantt-${q.wikittyId}" data =''></div>
-
- <c:set var="script" value="ganttData['${q.wikittyId}'] = {src:${jSonTaskMap[q]},
- startDate:'/Date(${q.beginDate.time})/',
- endDate:'/Date(${q.endDate.time})/'
- "/>
-
- <%
- java.util.HashMap<String,String> dateMap = new java.util.HashMap<String,String>();
- dateMap.put("sendingDate", "Draft");
- dateMap.put("postedDate", "Sent");
- dateMap.put("acceptedDate", "Accepted");
- dateMap.put("startedDate", "Started");
- dateMap.put("deliveryDate", "Delivered");
- dateMap.put("rsvStart", "RSV");
- dateMap.put("warrantyStart", "Warranty");
- dateMap.put("closedDate", "Closed");
- dateMap.put("rejectedDate", "Rejected");
- dateMap.put("cancelledDate", "Cancelled");
- pageContext.setAttribute("dateMap", dateMap);
- %>
-
- <c:forEach items="${dateMap}" var="entry">
- <c:if test='${q.wikitty.hasExtension(entry.value)}'>
- <c:set var="script" value="${script},${entry.key} :'/Date(${q.wikitty.getFieldAsObject(entry.value, entry.key).time})/'"/>
- </c:if>
- </c:forEach>
-
- <c:set var="script" value="${script}};"/>
-
- <script>
- ${script}
- </script>
-
<p>Liste des tâches :</p>
<c:forEach items="${taskMap}" var="entry">
<c:if test="${entry.key.equals(q)}">
@@ -182,8 +170,8 @@
</select>
</p>
<div id="upgradeFields-${q.wikittyId}"></div>
+-->
-
</c:forEach>
</c:when>
Modified: trunk/chorem-webmotion/src/main/webapp/css/jquery.fn.gantt.css
===================================================================
--- trunk/chorem-webmotion/src/main/webapp/css/jquery.fn.gantt.css 2013-06-26 09:30:51 UTC (rev 347)
+++ trunk/chorem-webmotion/src/main/webapp/css/jquery.fn.gantt.css 2013-06-27 14:07:10 UTC (rev 348)
@@ -248,7 +248,13 @@
color: #714715 !important;
}
+.fn-gantt .ganttBlue {
+ background-color: #88ccff;
+}
+.fn-gantt .ganttGrey {
+ background-color: #cccccc;
+}
/* === BOTTOM NAVIGATION === */
.fn-gantt .bottom {
Modified: trunk/chorem-webmotion/src/main/webapp/js/chorem.js
===================================================================
--- trunk/chorem-webmotion/src/main/webapp/js/chorem.js 2013-06-26 09:30:51 UTC (rev 347)
+++ trunk/chorem-webmotion/src/main/webapp/js/chorem.js 2013-06-27 14:07:10 UTC (rev 348)
@@ -97,38 +97,38 @@
/*********** SALES FUNNEL FUNCTIONS**********************/
function leadToDraft(){
- var id = $(this).attr('wikittyId');
- var oldQuotation = $(this).parent();
- $("#lead-wikittyId").val(id);
- $("#dialog-form-leadToDraft" ).data("oldQuotation", oldQuotation).dialog( "open" );
+ var id = $(this).attr('wikittyId');
+ var oldQuotation = $(this).parent();
+ $("#lead-wikittyId").val(id);
+ $("#dialog-form-leadToDraft" ).data("oldQuotation", oldQuotation).dialog( "open" );
};
function draftToSent(){
- var id = $(this).attr('wikittyId');
- var oldQuotation = $(this).parent();
- $("#draft-wikittyId").val(id);
- $("#dialog-form-draftToSent" ).data("oldQuotation", oldQuotation).dialog( "open" );
+ var id = $(this).attr('wikittyId');
+ var oldQuotation = $(this).parent();
+ $("#draft-wikittyId").val(id);
+ $("#dialog-form-draftToSent" ).data("oldQuotation", oldQuotation).dialog( "open" );
};
function sentToAccepted(){
- var id = $(this).attr('wikittyId');
- var oldQuotation = $(this).parent();
- $("#sent-wikittyId").val(id);
- $("#dialog-form-sentToAccepted" ).data("oldQuotation", oldQuotation).dialog( "open" );
+ var id = $(this).attr('wikittyId');
+ var oldQuotation = $(this).parent();
+ $("#sent-wikittyId").val(id);
+ $("#dialog-form-sentToAccepted" ).data("oldQuotation", oldQuotation).dialog( "open" );
};
function sentToRejected(){
- var id = $(this).attr('wikittyId');
- var oldQuotation = $(this).parent();
- $("#rejected-wikittyId").val(id);
- $("#dialog-form-sentToRejected" ).data("oldQuotation", oldQuotation).dialog( "open" );
+ var id = $(this).attr('wikittyId');
+ var oldQuotation = $(this).parent();
+ $("#rejected-wikittyId").val(id);
+ $("#dialog-form-sentToRejected" ).data("oldQuotation", oldQuotation).dialog( "open" );
};
function toCancelled(){
- var id = $(this).attr('wikittyId');
- var oldQuotation = $(this).parent();
- $("#cancelled-wikittyId").val(id);
- $("#dialog-form-toCancelled" ).data("oldQuotation", oldQuotation).dialog( "open" );
+ var id = $(this).attr('wikittyId');
+ var oldQuotation = $(this).parent();
+ $("#cancelled-wikittyId").val(id);
+ $("#dialog-form-toCancelled" ).data("oldQuotation", oldQuotation).dialog( "open" );
};
//ajout ble
@@ -270,447 +270,447 @@
// * SALES FUNNEL *
// ********************************************************************
-
- //Passage d'un lead -> draft
- $("a.lead").click(leadToDraft);
- $( "#dialog-form-leadToDraft" ).dialog({
- autoOpen: false,
- height: 300,
- width: 350,
- modal: true,
- buttons: {
- Ok: function() {
+ //Passage d'un lead -> draft
+ $("a.lead").click(leadToDraft);
- var reference = $("#reference").val();
- var sendingDate = $("#sendingDate").val();
- var id = $("#lead-wikittyId").val();
- var oldQuotation = $(this).data('oldQuotation');
- var allFields = $([]).add($("#reference")).add($("#sendingDate")).add($("#lead-wikittyId"))
+ $( "#dialog-form-leadToDraft" ).dialog({
+ autoOpen: false,
+ height: 300,
+ width: 350,
+ modal: true,
+ buttons: {
+ Ok: function() {
- var dialog = $( this );
+ var reference = $("#reference").val();
+ var sendingDate = $("#sendingDate").val();
+ var id = $("#lead-wikittyId").val();
+ var oldQuotation = $(this).data('oldQuotation');
+ var allFields = $([]).add($("#reference")).add($("#sendingDate")).add($("#lead-wikittyId"))
- $.post(createUrl("/sales/funnel/json/answer/", id,"?sendingDate=", sendingDate, "&reference=",reference),
- function(data){
- //success
- var wikittyId = data.meta.id;
- var wikitty = data.data;
+ var dialog = $( this );
- var li = $("<li></li>").addClass("salesFunnelItem draft");
+ $.post(createUrl("/sales/funnel/json/answer/", id,"?sendingDate=", sendingDate, "&reference=",reference),
+ function(data){
+ //success
+ var wikittyId = data.meta.id;
+ var wikitty = data.data;
- //leftDiv
- var leftDiv = $("<div></div>").addClass("pull-left");
- var aIconEdit = $("<a></a>")
- .attr("href", createUrl("/wikitty/edit/", wikittyId));
- var iconEdit = $("<i></i>").addClass("icon-edit");
- aIconEdit.append(iconEdit);
- leftDiv.append(aIconEdit);
- var smallAccount = $("<small></small>");
- if (wikitty["Quotation.customer"]!=null){
- var customer = data.preloaded[wikitty["Quotation.customer"]];
- var firstName = customer.preloaded[customer.data["Employee.person"]].data["Person.firstName"];
- var lastName = customer.preloaded[customer.data["Employee.person"]].data["Person.lastName"];
- var company = customer.preloaded[customer.data["Employee.company"]].data["Company.name"];
- }
- var aAccount = $("<a></a>")
- .text(firstName + " " + lastName + " (" + company + ")")
- .attr("href",createUrl("/wikitty/Employee/view/", wikitty["Quotation.customer"]));
- smallAccount.append(aAccount);
- leftDiv.append(smallAccount);
- var leftP = $("<p> - </p>");
- var itemTitleSpan = $('<span></span>').addClass('salesFunnelItemTitle');
+ var li = $("<li></li>").addClass("salesFunnelItem draft");
- if (wikitty["Quotation.project"]!=null) {
- var aProject = $("<a/>")
- .addClass("nameLink")
- .attr("href" , createUrl("/wikitty/Project/view/", wikitty["Quotation.project"]))
- .text(data.preloaded[wikitty["Quotation.project"]].data["Project.name"]);
- }
- itemTitleSpan.append(aProject);
- var descriptionSmall = $('<small/>').text(wikitty["Quotation.description"]);
- leftP.append(descriptionSmall);
- leftP.prepend(itemTitleSpan);
- leftDiv.append(leftP);
+ //leftDiv
+ var leftDiv = $("<div></div>").addClass("pull-left");
+ var aIconEdit = $("<a></a>")
+ .attr("href", createUrl("/wikitty/edit/", wikittyId));
+ var iconEdit = $("<i></i>").addClass("icon-edit");
+ aIconEdit.append(iconEdit);
+ leftDiv.append(aIconEdit);
+ var smallAccount = $("<small></small>");
+ if (wikitty["Quotation.customer"]!=null){
+ var customer = data.preloaded[wikitty["Quotation.customer"]];
+ var firstName = customer.preloaded[customer.data["Employee.person"]].data["Person.firstName"];
+ var lastName = customer.preloaded[customer.data["Employee.person"]].data["Person.lastName"];
+ var company = customer.preloaded[customer.data["Employee.company"]].data["Company.name"];
+ }
+ var aAccount = $("<a></a>")
+ .text(firstName + " " + lastName + " (" + company + ")")
+ .attr("href",createUrl("/wikitty/Employee/view/", wikitty["Quotation.customer"]));
+ smallAccount.append(aAccount);
+ leftDiv.append(smallAccount);
+ var leftP = $("<p> - </p>");
+ var itemTitleSpan = $('<span></span>').addClass('salesFunnelItemTitle');
- //button
- var aSend = $('<a/>')
- .attr('wikittyId', wikittyId)
- .addClass("btn btn-success pull-right salesFunnelItemButton draft")
- .text("Envoyer")
- .click(draftToSent);
+ if (wikitty["Quotation.project"]!=null) {
+ var aProject = $("<a/>")
+ .addClass("nameLink")
+ .attr("href" , createUrl("/wikitty/Project/view/", wikitty["Quotation.project"]))
+ .text(data.preloaded[wikitty["Quotation.project"]].data["Project.name"]);
+ }
+ itemTitleSpan.append(aProject);
+ var descriptionSmall = $('<small/>').text(wikitty["Quotation.description"]);
+ leftP.append(descriptionSmall);
+ leftP.prepend(itemTitleSpan);
+ leftDiv.append(leftP);
- var aCancelled = $('<a/>')
- .attr('wikittyId', wikittyId)
- .addClass("btn btn-warning pull-right salesFunnelItemButton toCancelled")
- .text("Annuler")
- .click(toCancelled);
+ //button
+ var aSend = $('<a/>')
+ .attr('wikittyId', wikittyId)
+ .addClass("btn btn-success pull-right salesFunnelItemButton draft")
+ .text("Envoyer")
+ .click(draftToSent);
- //rightDiv
- var rightDiv = $("<div>").addClass("pull-right");
- var rightP = $("<p>").addClass("salesFunnelItemTitle").text(wikitty["Quotation.amount"] +" €");
- if (wikitty["Quotation.category"] != null) {
- var smallInfo = $("<small>")
- .text(data.preloaded[wikitty["Quotation.category"]].data["WikittyTreeNode.name"]
- + ' - ' + wikitty["Quotation.estimatedDays"] + 'j - ' +
- wikitty["Quotation.conversionHope"] + "%");
- }
- rightDiv.append(rightP);
- rightDiv.append(smallInfo);
+ var aCancelled = $('<a/>')
+ .attr('wikittyId', wikittyId)
+ .addClass("btn btn-warning pull-right salesFunnelItemButton toCancelled")
+ .text("Annuler")
+ .click(toCancelled);
- //clear:both
- var clearBoth=$("<div style='clear:both;'/>")
+ //rightDiv
+ var rightDiv = $("<div>").addClass("pull-right");
+ var rightP = $("<p>").addClass("salesFunnelItemTitle").text(wikitty["Quotation.amount"] +" €");
+ if (wikitty["Quotation.category"] != null) {
+ var smallInfo = $("<small>")
+ .text(data.preloaded[wikitty["Quotation.category"]].data["WikittyTreeNode.name"]
+ + ' - ' + wikitty["Quotation.estimatedDays"] + 'j - ' +
+ wikitty["Quotation.conversionHope"] + "%");
+ }
+ rightDiv.append(rightP);
+ rightDiv.append(smallInfo);
- li.append(leftDiv);
- li.append(aSend);
- li.append(aCancelled);
- li.append(rightDiv);
- li.append(clearBoth);
+ //clear:both
+ var clearBoth=$("<div style='clear:both;'/>")
- var drafts = $(".drafts");
- drafts.append(li);
- oldQuotation.slideUp();
+ li.append(leftDiv);
+ li.append(aSend);
+ li.append(aCancelled);
+ li.append(rightDiv);
+ li.append(clearBoth);
- //update draftAmount and draftAmountHope
- var draftAmount = parseInt($("#draftAmount").text()) + wikitty["Quotation.amount"];
- var amountHope = wikitty["Quotation.amount"]*wikitty["Quotation.conversionHope"]/100;
- var draftAmountHope = parseInt($("#draftAmountHope").text()) + amountHope;
- $("#draftAmount").text(draftAmount);
- $("#draftAmountHope").text(draftAmountHope);
+ var drafts = $(".drafts");
+ drafts.append(li);
+ oldQuotation.slideUp();
- //update leadAmount and leadAmountHope
- var leadAmount = parseInt($("#leadAmount").text()) - wikitty["Quotation.amount"];
- var leadAmountHope = parseInt($("#leadAmountHope").text()) - amountHope;
- $("#leadAmount").text(leadAmount);
- $("#leadAmountHope").text(leadAmountHope);
+ //update draftAmount and draftAmountHope
+ var draftAmount = parseInt($("#draftAmount").text()) + wikitty["Quotation.amount"];
+ var amountHope = wikitty["Quotation.amount"]*wikitty["Quotation.conversionHope"]/100;
+ var draftAmountHope = parseInt($("#draftAmountHope").text()) + amountHope;
+ $("#draftAmount").text(draftAmount);
+ $("#draftAmountHope").text(draftAmountHope);
- allFields.val("");
+ //update leadAmount and leadAmountHope
+ var leadAmount = parseInt($("#leadAmount").text()) - wikitty["Quotation.amount"];
+ var leadAmountHope = parseInt($("#leadAmountHope").text()) - amountHope;
+ $("#leadAmount").text(leadAmount);
+ $("#leadAmountHope").text(leadAmountHope);
- dialog.dialog( "close" );
+ allFields.val("");
- }).fail(function(){
- //fail
- //TODO JC20130212 retour utilisateur
- dialog.dialog( "close" );
- });
- },
- Cancel: function() {
- $( this ).dialog( "close" );
- }
- },
- close: function() {
- },
- open: function(event, ui) {
- var date = new Date();
- $("#sendingDate").val(date.getDate() + "/" + (date.getMonth()+1)+"/"+date.getFullYear());
- }
- });
+ dialog.dialog( "close" );
- //Passage d'un draft -> sent
- $("a.draft").click(draftToSent);
+ }).fail(function(){
+ //fail
+ //TODO JC20130212 retour utilisateur
+ dialog.dialog( "close" );
+ });
+ },
+ Cancel: function() {
+ $( this ).dialog( "close" );
+ }
+ },
+ close: function() {
+ },
+ open: function(event, ui) {
+ var date = new Date();
+ $("#sendingDate").val(date.getDate() + "/" + (date.getMonth()+1)+"/"+date.getFullYear());
+ }
+ });
- $( "#dialog-form-draftToSent" ).dialog({
- autoOpen: false,
- height: 300,
- width: 350,
- modal: true,
- buttons: {
- Ok: function() {
+ //Passage d'un draft -> sent
+ $("a.draft").click(draftToSent);
- var sendingDate = $("#sendDate").val();
- var id = $("#draft-wikittyId").val();
- var oldQuotation = $(this).data('oldQuotation');
- var allFields = $([]).add($("#sendDate")).add($("#draft-wikittyId"))
+ $( "#dialog-form-draftToSent" ).dialog({
+ autoOpen: false,
+ height: 300,
+ width: 350,
+ modal: true,
+ buttons: {
+ Ok: function() {
- var dialog = $( this );
+ var sendingDate = $("#sendDate").val();
+ var id = $("#draft-wikittyId").val();
+ var oldQuotation = $(this).data('oldQuotation');
+ var allFields = $([]).add($("#sendDate")).add($("#draft-wikittyId"))
- $.post(createUrl("/sales/funnel/json/send/", id,"?sendingDate=", sendingDate),
- function(data){
- //success
+ var dialog = $( this );
- var wikittyId = data.meta.id;
- var wikitty = data.data;
+ $.post(createUrl("/sales/funnel/json/send/", id,"?sendingDate=", sendingDate),
+ function(data){
+ //success
- var li = $("<li></li>").addClass("salesFunnelItem draft");
+ var wikittyId = data.meta.id;
+ var wikitty = data.data;
- //leftDiv
- var leftDiv = $("<div></div>").addClass("pull-left");
- var aIconEdit = $("<a></a>")
- .attr("href",createUrl("/wikitty/edit/", wikittyId));
- var iconEdit = $("<i></i>").addClass("icon-edit");
- aIconEdit.append(iconEdit);
- leftDiv.append(aIconEdit);
- var smallAccount = $("<small></small>");
- if (wikitty["Quotation.customer"]!=null){
- var customer = data.preloaded[wikitty["Quotation.customer"]];
- var firstName = customer.preloaded[customer.data["Employee.person"]].data["Person.firstName"];
- var lastName = customer.preloaded[customer.data["Employee.person"]].data["Person.lastName"];
- var company = customer.preloaded[customer.data["Employee.company"]].data["Company.name"];
- }
- var aAccount = $("<a></a>")
- .text(firstName + " " + lastName + " (" + company + ")")
- .attr("href", createUrl("/wikitty/Employee/view/", wikitty["Quotation.customer"]));
- smallAccount.append(aAccount);
- leftDiv.append(smallAccount);
- var leftP = $("<p> - </p>");
- var itemTitleSpan = $('<span></span>').addClass('salesFunnelItemTitle');
+ var li = $("<li></li>").addClass("salesFunnelItem draft");
- if (wikitty["Quotation.project"]!=null) {
- var aProject = $("<a/>")
- .addClass("nameLink")
- .attr("href" , createUrl("/wikitty/Project/view/", wikitty["Quotation.project"]))
- .text(data.preloaded[wikitty["Quotation.project"]].data["Project.name"]);
- }
- itemTitleSpan.append(aProject);
- var descriptionSmall = $('<small/>').text(wikitty["Quotation.description"]);
- leftP.append(descriptionSmall);
- leftP.prepend(itemTitleSpan);
- leftDiv.append(leftP);
+ //leftDiv
+ var leftDiv = $("<div></div>").addClass("pull-left");
+ var aIconEdit = $("<a></a>")
+ .attr("href",createUrl("/wikitty/edit/", wikittyId));
+ var iconEdit = $("<i></i>").addClass("icon-edit");
+ aIconEdit.append(iconEdit);
+ leftDiv.append(aIconEdit);
+ var smallAccount = $("<small></small>");
+ if (wikitty["Quotation.customer"]!=null){
+ var customer = data.preloaded[wikitty["Quotation.customer"]];
+ var firstName = customer.preloaded[customer.data["Employee.person"]].data["Person.firstName"];
+ var lastName = customer.preloaded[customer.data["Employee.person"]].data["Person.lastName"];
+ var company = customer.preloaded[customer.data["Employee.company"]].data["Company.name"];
+ }
+ var aAccount = $("<a></a>")
+ .text(firstName + " " + lastName + " (" + company + ")")
+ .attr("href", createUrl("/wikitty/Employee/view/", wikitty["Quotation.customer"]));
+ smallAccount.append(aAccount);
+ leftDiv.append(smallAccount);
+ var leftP = $("<p> - </p>");
+ var itemTitleSpan = $('<span></span>').addClass('salesFunnelItemTitle');
- //button
- var aAccepted = $('<a/>')
- .attr('wikittyId', wikittyId)
- .addClass("btn btn-success pull-right salesFunnelItemButton sent toAccepted")
- .text("Accepté")
- .click(sentToAccepted);
- var aRejected = $('<a/>')
- .attr('wikittyId', wikittyId)
- .addClass("btn btn-danger pull-right salesFunnelItemButton sent toRejected")
- .text("Rejeté")
- .click(sentToRejected);
- var aCancelled = $('<a/>')
- .attr('wikittyId', wikittyId)
- .addClass("btn btn-warning pull-right salesFunnelItemButton sent toCancelled")
- .text("Annuler")
- .click(toCancelled);
+ if (wikitty["Quotation.project"]!=null) {
+ var aProject = $("<a/>")
+ .addClass("nameLink")
+ .attr("href" , createUrl("/wikitty/Project/view/", wikitty["Quotation.project"]))
+ .text(data.preloaded[wikitty["Quotation.project"]].data["Project.name"]);
+ }
+ itemTitleSpan.append(aProject);
+ var descriptionSmall = $('<small/>').text(wikitty["Quotation.description"]);
+ leftP.append(descriptionSmall);
+ leftP.prepend(itemTitleSpan);
+ leftDiv.append(leftP);
- //rightDiv
- var rightDiv = $("<div>").addClass("pull-right");
- var rightP = $("<p>").addClass("salesFunnelItemTitle").text(wikitty["Quotation.amount"] +" €");
- if (wikitty["Quotation.category"] != null) {
- var smallInfo = $("<small>")
- .text(data.preloaded[wikitty["Quotation.category"]].data["WikittyTreeNode.name"]
- + ' - ' + wikitty["Quotation.estimatedDays"] + 'j - ' +
- wikitty["Quotation.conversionHope"] + "%");
- }
- rightDiv.append(rightP);
- rightDiv.append(smallInfo);
+ //button
+ var aAccepted = $('<a/>')
+ .attr('wikittyId', wikittyId)
+ .addClass("btn btn-success pull-right salesFunnelItemButton sent toAccepted")
+ .text("Accepté")
+ .click(sentToAccepted);
+ var aRejected = $('<a/>')
+ .attr('wikittyId', wikittyId)
+ .addClass("btn btn-danger pull-right salesFunnelItemButton sent toRejected")
+ .text("Rejeté")
+ .click(sentToRejected);
+ var aCancelled = $('<a/>')
+ .attr('wikittyId', wikittyId)
+ .addClass("btn btn-warning pull-right salesFunnelItemButton sent toCancelled")
+ .text("Annuler")
+ .click(toCancelled);
- //clear:both
- var clearBoth=$("<div style='clear:both;'/>")
+ //rightDiv
+ var rightDiv = $("<div>").addClass("pull-right");
+ var rightP = $("<p>").addClass("salesFunnelItemTitle").text(wikitty["Quotation.amount"] +" €");
+ if (wikitty["Quotation.category"] != null) {
+ var smallInfo = $("<small>")
+ .text(data.preloaded[wikitty["Quotation.category"]].data["WikittyTreeNode.name"]
+ + ' - ' + wikitty["Quotation.estimatedDays"] + 'j - ' +
+ wikitty["Quotation.conversionHope"] + "%");
+ }
+ rightDiv.append(rightP);
+ rightDiv.append(smallInfo);
- li.append(leftDiv);
- li.append(aAccepted);
- li.append(aRejected);
- li.append(aCancelled);
- li.append(rightDiv);
- li.append(clearBoth);
+ //clear:both
+ var clearBoth=$("<div style='clear:both;'/>")
- var sents = $(".sents");
- sents.append(li);
- oldQuotation.slideUp();
+ li.append(leftDiv);
+ li.append(aAccepted);
+ li.append(aRejected);
+ li.append(aCancelled);
+ li.append(rightDiv);
+ li.append(clearBoth);
- //update draftAmount and draftAmountHope
- var draftAmount = parseInt($("#draftAmount").text()) - wikitty["Quotation.amount"];
- var amountHope = wikitty["Quotation.amount"]*wikitty["Quotation.conversionHope"]/100;
- var draftAmountHope = parseInt($("#draftAmountHope").text()) - amountHope;
- $("#draftAmount").text(draftAmount);
- $("#draftAmountHope").text(draftAmountHope);
+ var sents = $(".sents");
+ sents.append(li);
+ oldQuotation.slideUp();
- //update sentAmount and sentAmountHope
- var sentAmount = parseInt($("#sentAmount").text()) + wikitty["Quotation.amount"];
- var sentAmountHope = parseInt($("#sentAmountHope").text()) + amountHope;
- $("#sentAmount").text(sentAmount);
- $("#sentAmountHope").text(sentAmountHope);
+ //update draftAmount and draftAmountHope
+ var draftAmount = parseInt($("#draftAmount").text()) - wikitty["Quotation.amount"];
+ var amountHope = wikitty["Quotation.amount"]*wikitty["Quotation.conversionHope"]/100;
+ var draftAmountHope = parseInt($("#draftAmountHope").text()) - amountHope;
+ $("#draftAmount").text(draftAmount);
+ $("#draftAmountHope").text(draftAmountHope);
- allFields.val("");
+ //update sentAmount and sentAmountHope
+ var sentAmount = parseInt($("#sentAmount").text()) + wikitty["Quotation.amount"];
+ var sentAmountHope = parseInt($("#sentAmountHope").text()) + amountHope;
+ $("#sentAmount").text(sentAmount);
+ $("#sentAmountHope").text(sentAmountHope);
- dialog.dialog( "close" );
+ allFields.val("");
- }).fail(function(){
- //fail
- //TODO JC20130212 retour utilisateur
- dialog.dialog( "close" );
- });
+ dialog.dialog( "close" );
- },
- Cancel: function() {
- $( this ).dialog( "close" );
- }
- },
- close: function() {
- },
- open: function(event, ui) {
- var date = new Date();
- $("#sendDate").val(date.getDate() + "/" + (date.getMonth()+1)+"/"+date.getFullYear());
- }
- });
+ }).fail(function(){
+ //fail
+ //TODO JC20130212 retour utilisateur
+ dialog.dialog( "close" );
+ });
- //Passage d'un sent vers accepted
- $("a.toAccepted").click(sentToAccepted);
+ },
+ Cancel: function() {
+ $( this ).dialog( "close" );
+ }
+ },
+ close: function() {
+ },
+ open: function(event, ui) {
+ var date = new Date();
+ $("#sendDate").val(date.getDate() + "/" + (date.getMonth()+1)+"/"+date.getFullYear());
+ }
+ });
- $( "#dialog-form-sentToAccepted" ).dialog({
- autoOpen: false,
- height: 300,
- width: 350,
- modal: true,
- buttons: {
- Ok: function() {
+ //Passage d'un sent vers accepted
+ $("a.toAccepted").click(sentToAccepted);
- var acceptedDate = $("#acceptedDate").val();
- var id = $("#sent-wikittyId").val();
- var oldQuotation = $(this).data('oldQuotation');
- var allFields = $([]).add($("#acceptedDate")).add($("#sent-wikittyId"))
+ $( "#dialog-form-sentToAccepted" ).dialog({
+ autoOpen: false,
+ height: 300,
+ width: 350,
+ modal: true,
+ buttons: {
+ Ok: function() {
- var dialog = $( this );
+ var acceptedDate = $("#acceptedDate").val();
+ var id = $("#sent-wikittyId").val();
+ var oldQuotation = $(this).data('oldQuotation');
+ var allFields = $([]).add($("#acceptedDate")).add($("#sent-wikittyId"))
- $.post(createUrl("/sales/funnel/json/accept/", id,"?acceptedDate=", acceptedDate),
- function(data){
- //success
- oldQuotation.slideUp();
+ var dialog = $( this );
- var wikitty = data.data;
+ $.post(createUrl("/sales/funnel/json/accept/", id,"?acceptedDate=", acceptedDate),
+ function(data){
+ //success
+ oldQuotation.slideUp();
- //update sentAmount and sentAmountHope
- var sentAmount = parseInt($("#sentAmount").text()) - wikitty["Quotation.amount"];
- var amountHope = wikitty["Quotation.amount"]*wikitty["Quotation.conversionHope"]/100;
- var sentAmountHope = parseInt($("#sentAmountHope").text()) - amountHope;
- $("#sentAmount").text(sentAmount);
- $("#sentAmountHope").text(sentAmountHope);
+ var wikitty = data.data;
- allFields.val("");
+ //update sentAmount and sentAmountHope
+ var sentAmount = parseInt($("#sentAmount").text()) - wikitty["Quotation.amount"];
+ var amountHope = wikitty["Quotation.amount"]*wikitty["Quotation.conversionHope"]/100;
+ var sentAmountHope = parseInt($("#sentAmountHope").text()) - amountHope;
+ $("#sentAmount").text(sentAmount);
+ $("#sentAmountHope").text(sentAmountHope);
- dialog.dialog( "close" );
+ allFields.val("");
- }).fail(function(){
- //fail
- //TODO JC20130212 retour utilisateur
- dialog.dialog( "close" );
- });
+ dialog.dialog( "close" );
- },
- Cancel: function() {
- $( this ).dialog( "close" );
- }
- },
- close: function() {
- },
- open: function(event, ui) {
- var date = new Date();
- $("#acceptedDate").val(date.getDate() + "/" + (date.getMonth()+1)+"/"+date.getFullYear());
- }
- });
+ }).fail(function(){
+ //fail
+ //TODO JC20130212 retour utilisateur
+ dialog.dialog( "close" );
+ });
- //Passage d'un sent vers rejected
- $("a.toRejected").click(sentToRejected);
+ },
+ Cancel: function() {
+ $( this ).dialog( "close" );
+ }
+ },
+ close: function() {
+ },
+ open: function(event, ui) {
+ var date = new Date();
+ $("#acceptedDate").val(date.getDate() + "/" + (date.getMonth()+1)+"/"+date.getFullYear());
+ }
+ });
- $( "#dialog-form-sentToRejected" ).dialog({
- autoOpen: false,
- height: 300,
- width: 350,
- modal: true,
- buttons: {
- Ok: function() {
+ //Passage d'un sent vers rejected
+ $("a.toRejected").click(sentToRejected);
- var rejectedDate = $("#rejectedDate").val();
- var id = $("#rejected-wikittyId").val();
- var oldQuotation = $(this).data('oldQuotation');
- var allFields = $([]).add($("#rejectedDate")).add($("#rejected-wikittyId"))
+ $( "#dialog-form-sentToRejected" ).dialog({
+ autoOpen: false,
+ height: 300,
+ width: 350,
+ modal: true,
+ buttons: {
+ Ok: function() {
- var dialog = $( this );
+ var rejectedDate = $("#rejectedDate").val();
+ var id = $("#rejected-wikittyId").val();
+ var oldQuotation = $(this).data('oldQuotation');
+ var allFields = $([]).add($("#rejectedDate")).add($("#rejected-wikittyId"))
- $.post(createUrl("/sales/funnel/json/reject/", id,"?rejectedDate=", rejectedDate),
- function(data){
- //success
- oldQuotation.slideUp();
+ var dialog = $( this );
- var wikitty = data.data;
+ $.post(createUrl("/sales/funnel/json/reject/", id,"?rejectedDate=", rejectedDate),
+ function(data){
+ //success
+ oldQuotation.slideUp();
- //update sentAmount and sentAmountHope
- var sentAmount = parseInt($("#sentAmount").text()) - wikitty["Quotation.amount"];
- var amountHope = wikitty["Quotation.amount"]*wikitty["Quotation.conversionHope"]/100;
- var sentAmountHope = parseInt($("#sentAmountHope").text()) - amountHope;
- $("#sentAmount").text(sentAmount);
- $("#sentAmountHope").text(sentAmountHope);
+ var wikitty = data.data;
- allFields.val("");
+ //update sentAmount and sentAmountHope
+ var sentAmount = parseInt($("#sentAmount").text()) - wikitty["Quotation.amount"];
+ var amountHope = wikitty["Quotation.amount"]*wikitty["Quotation.conversionHope"]/100;
+ var sentAmountHope = parseInt($("#sentAmountHope").text()) - amountHope;
+ $("#sentAmount").text(sentAmount);
+ $("#sentAmountHope").text(sentAmountHope);
- dialog.dialog( "close" );
+ allFields.val("");
- }).fail(function(){
- //fail
- //TODO JC20130212 retour utilisateur
- dialog.dialog( "close" );
- });
+ dialog.dialog( "close" );
- },
- Cancel: function() {
- $( this ).dialog( "close" );
- }
- },
- close: function() {
- },
- open: function(event, ui) {
- var date = new Date();
- $("#rejectedDate").val(date.getDate() + "/" + (date.getMonth()+1)+"/"+date.getFullYear());
- }
- });
+ }).fail(function(){
+ //fail
+ //TODO JC20130212 retour utilisateur
+ dialog.dialog( "close" );
+ });
- //Passage vers cancelled
- $("a.toCancelled").click(toCancelled);
+ },
+ Cancel: function() {
+ $( this ).dialog( "close" );
+ }
+ },
+ close: function() {
+ },
+ open: function(event, ui) {
+ var date = new Date();
+ $("#rejectedDate").val(date.getDate() + "/" + (date.getMonth()+1)+"/"+date.getFullYear());
+ }
+ });
- $( "#dialog-form-toCancelled" ).dialog({
- autoOpen: false,
- height: 300,
- width: 350,
- modal: true,
- buttons: {
- Ok: function() {
+ //Passage vers cancelled
+ $("a.toCancelled").click(toCancelled);
- var cancelledDate = $("#cancelledDate").val();
- var reason = $("#cancelledReason").val();
- var id = $("#cancelled-wikittyId").val();
- var oldQuotation = $(this).data('oldQuotation');
- var allFields = $([]).add($("#cancelledDate")).add($("#cancelled-wikittyId")).add($("#cancelledReason"));
+ $( "#dialog-form-toCancelled" ).dialog({
+ autoOpen: false,
+ height: 300,
+ width: 350,
+ modal: true,
+ buttons: {
+ Ok: function() {
- var dialog = $( this );
+ var cancelledDate = $("#cancelledDate").val();
+ var reason = $("#cancelledReason").val();
+ var id = $("#cancelled-wikittyId").val();
+ var oldQuotation = $(this).data('oldQuotation');
+ var allFields = $([]).add($("#cancelledDate")).add($("#cancelled-wikittyId")).add($("#cancelledReason"));
- $.post(createUrl("/sales/funnel/json/cancel/", id,"?cancelledDate=", cancelledDate,"&reason=",reason),
- function(data){
- //success
- oldQuotation.slideUp();
+ var dialog = $( this );
- var wikitty = data.data;
+ $.post(createUrl("/sales/funnel/json/cancel/", id,"?cancelledDate=", cancelledDate,"&reason=",reason),
+ function(data){
+ //success
+ oldQuotation.slideUp();
- //TODO JC20130527 update amounts
- //update sentAmount and sentAmountHope
- //var sentAmount = parseInt($("#sentAmount").text()) - wikitty["Quotation.amount"];
- //var amountHope = wikitty["Quotation.amount"]*wikitty["Quotation.conversionHope"]/100;
- //var sentAmountHope = parseInt($("#sentAmountHope").text()) - amountHope;
- //$("#sentAmount").text(sentAmount);
- //$("#sentAmountHope").text(sentAmountHope);
+ var wikitty = data.data;
- allFields.val("");
- dialog.dialog( "close" );
+ //TODO JC20130527 update amounts
+ //update sentAmount and sentAmountHope
+ //var sentAmount = parseInt($("#sentAmount").text()) - wikitty["Quotation.amount"];
+ //var amountHope = wikitty["Quotation.amount"]*wikitty["Quotation.conversionHope"]/100;
+ //var sentAmountHope = parseInt($("#sentAmountHope").text()) - amountHope;
+ //$("#sentAmount").text(sentAmount);
+ //$("#sentAmountHope").text(sentAmountHope);
- }).fail(function(){
- //fail
- //TODO JC20130212 retour utilisateur
- dialog.dialog( "close" );
- });
+ allFields.val("");
+ dialog.dialog( "close" );
- },
- Cancel: function() {
- $( this ).dialog( "close" );
- }
- },
- close: function() {
- },
- open: function(event, ui) {
- var date = new Date();
- $("#cancelledDate").val(date.getDate() + "/" + (date.getMonth()+1)+"/"+date.getFullYear());
- }
- });
+ }).fail(function(){
+ //fail
+ //TODO JC20130212 retour utilisateur
+ dialog.dialog( "close" );
+ });
+ },
+ Cancel: function() {
+ $( this ).dialog( "close" );
+ }
+ },
+ close: function() {
+ },
+ open: function(event, ui) {
+ var date = new Date();
+ $("#cancelledDate").val(date.getDate() + "/" + (date.getMonth()+1)+"/"+date.getFullYear());
+ }
+ });
+
// ********************************************************************
// * PROJECT DASHBOARD *
// ********************************************************************
@@ -724,87 +724,82 @@
function displayFields() {
var id = $(this).attr('wikittyId');
-
+ $("#upgradeFields-" + id).slideUp();
if(this.selectedIndex == 0) {
$("#upgradeFields-" + id).text("");
}
else
{
- $("#upgradeFields-" + id ).text("Loading fields for " + this.item(this.selectedIndex).label + "...");
+
var extensionName = this.item(this.selectedIndex).label;
-
$.get(createUrl("/project/json/getExtension/", extensionName, "/" + $(this).attr('wikittyId')),
function(data){
- //success
- var $jData = $(data);
-
-
- $("#upgradeFields-" + id).html($jData[0].outerHTML);//.innerHTML);
- initFields();
+ //success
+ var $jData = $(data);
+
+ $("#upgradeFields-" + id).html($jData[0].outerHTML);//.innerHTML);
+ initFields();
+ $("#upgradeFields-" + id).slideDown();
+
});
}
}
$("a.upgrade").click(upgradeQuotation);
$("select.extBox").change(displayFields);
+
$("#project_hidden").change(function() {
$("#projectSearch").submit();
});
- function initgantt() {
-
- var id = $(this).attr('wikittyId');
-
-
- "use strict";
-
-
-
- $(".gantt-"+id).gantt({
- source: ganttData[id]['src'],
- dateStart: ganttData[id]['startDate'],
- dateEnd:ganttData[id]['endDate'],
- extDate : {
- "Draft sent" : ganttData[id]['sendingDate'],
- "Sent" : ganttData[id]['postedDate'],
- "Accepted" : ganttData[id]['acceptedDate'],
- "Started" : ganttData[id]['startedDate'],
- "Delivered" : ganttData[id]['deliveryDate'],
- "RSV started" : ganttData[id]['rsvStart'],
- "Warranty Started" : ganttData[id]['warrantyStart'],
- "Closed" : ganttData[id]['closedDate'],
- "Rejected" : ganttData[id]['rejectedDate'],
- "Cancelled" : ganttData[id]['cancelledDate']
- },
- draftSent:ganttData[id]['draftSent'],
- navigate: "scroll",
- scale: "days",
- maxScale: "months",
- minScale: "days",
- itemsPerPage: 10,
- onItemClick: function(data) {
- alert("Item clicked - show some details");
- },
- onAddClick: function(dt, rowId) {
- alert("Empty space clicked - add an item!");
- },
- onRender: function() {
- if (window.console && typeof console.log === "function") {
- console.log("chart rendered");
+ $("#quotationFilter").change(function() {
+ if($("#project_hidden").val() != "")
+ $("#projectSearch").submit();
+ });
+ function initgantt(id) {
+ "use strict";
+ $.get(createUrl("/project/json/getGanttInfo/",id),
+ function(ret){
+ var data = ret['data'];
+ console.log(data);
+ if(data['source'].length != 0) {
+ $(".gantt-"+id).gantt({
+ source: data['source'],
+ dateStart: data['dateStart'],
+ dateEnd:data['dateEnd'],
+ extDate : data['extDate'],
+ navigate: "scroll",
+ scale: "days",
+ maxScale: "months",
+ minScale: "days",
+ itemsPerPage: 10,
+ onItemClick: function(data) {
+ alert("Item clicked - show some details");
+ },
+ onAddClick: function(dt, rowId) {
+ alert("Empty space clicked - add an item!");
+ },
+ onRender: function() {
+ if (window.console && typeof console.log === "function") {
+ console.log("chart rendered");
+
+ }
}
- }
- });
-
-
-
-
- prettyPrint();
- }
+ });
+ }
+ });
- $("a.ganttinit").click(initgantt);
-
+ }
+ for(var i = 0; i < $('.gantt').length; i++) {
+ var div = $('.gantt')[i];
+ console.log(div);
+ initgantt(div.attributes.wikittyid.nodeValue);
+ }
+
+
+
});
\ No newline at end of file
Modified: trunk/chorem-webmotion/src/main/webapp/js/jquery.fn.gantt.js
===================================================================
--- trunk/chorem-webmotion/src/main/webapp/js/jquery.fn.gantt.js 2013-06-26 09:30:51 UTC (rev 347)
+++ trunk/chorem-webmotion/src/main/webapp/js/jquery.fn.gantt.js 2013-06-27 14:07:10 UTC (rev 348)
@@ -1027,24 +1027,88 @@
var cd = Date.parse(new Date());
cd = (Math.floor(cd / 36400000) * 36400000);
$(element).find(':findweek("' + cd + '")').removeClass('wd').addClass('today');
+
+ var str = "";
+
+ var start = $(element).find(':findweek("' + Date.parse(tools.dateDeserialize(settings.dateStart)) + '")');
+ if(start.attr('over') != null)
+ str = start.attr("over") + "<br />";
+ str += "Project start";
+ start.removeClass('wd').addClass('begin').attr('over',str);
+ str="";
+ var end = $(element).find(':findweek("' + Date.parse(tools.dateDeserialize(settings.dateEnd)) + '")');
+ if(end.attr('over') != null)
+ str = end.attr("over") + "<br />";
+ str += "Project end";
+ end.removeClass('wd').addClass('end').attr('over',str);
+
+ for(var key in settings.extDate) {
+ if(settings.extDate[key] != undefined) {
+ str="";
+ var event = $(element).find(':findweek("' + Date.parse(tools.dateDeserialize(settings.extDate[key])) + '")');
+ if(event.attr('over') != null)
+ str = event.attr("over") + "<br />";
+ str += key;
+ event.removeClass('wd').addClass('event').attr('over',str);
+ }
+ }
break;
case "months":
$(element).find(':findmonth("' + new Date().getTime() + '")').removeClass('wd').addClass('today');
+
+ var str = "";
+
+ var start = $(element).find(':findmonth("' + Date.parse(tools.dateDeserialize(settings.dateStart)) + '")');
+ if(start.attr('over') != null)
+ str = start.attr("over") + "<br />";
+ str += "Project start";
+ start.removeClass('wd').addClass('begin').attr('over',str);
+ str="";
+ var end = $(element).find(':findmonth("' + Date.parse(tools.dateDeserialize(settings.dateEnd)) + '")');
+ if(end.attr('over') != null)
+ str = end.attr("over") + "<br />";
+ str += "Project end";
+ end.removeClass('wd').addClass('end').attr('over',str);
+
+ for(var key in settings.extDate) {
+
+ if(settings.extDate[key] != undefined) {
+ str="";
+ var event = $(element).find(':findmonth("' + Date.parse(tools.dateDeserialize(settings.extDate[key])) + '")');
+ if(event.attr('over') != null)
+ str = event.attr("over") + "<br />";
+ str += key;
+ event.removeClass('wd').addClass('event').attr('over',str);
+ }
+ }
break;
default:
var cd = Date.parse(new Date());
cd = (Math.floor(cd / 36400000) * 36400000);
$(element).find(':findday("' + cd + '")').removeClass('wd').addClass('today');
- var bd = Date.parse(tools.dateDeserialize(settings.dateStart));
- //bd = (Math.floor(bd / 36400000) * 36400000);
- $(element).find(':findday("' + bd + '")').removeClass('wd').addClass('begin').attr('over',"Project start");
+ var str = "";
- $(element).find(':findday("' + Date.parse(tools.dateDeserialize(settings.dateEnd)) + '")').removeClass('wd').addClass('end').attr('over',"Project end");
- console.log(settings.extDate);
+ var start = $(element).find(':findday("' + Date.parse(tools.dateDeserialize(settings.dateStart)) + '")');
+ if(start.attr('over') != null)
+ str = start.attr("over") + "<br />";
+ str += "Project start";
+ start.removeClass('wd').addClass('begin').attr('over',str);
+ str="";
+ var end = $(element).find(':findday("' + Date.parse(tools.dateDeserialize(settings.dateEnd)) + '")');
+ if(end.attr('over') != null)
+ str = end.attr("over") + "<br />";
+ str += "Project end";
+ end.removeClass('wd').addClass('end').attr('over',str);
+
for(var key in settings.extDate) {
- console.log("passe");
- if(settings.extDate[key] != undefined)
- $(element).find(':findday("' + Date.parse(tools.dateDeserialize(settings.extDate[key])) + '")').removeClass('wd').addClass('event').attr('over',key);
+ if(settings.extDate[key] != undefined) {
+ str="";
+ var event = $(element).find(':findday("' + Date.parse(tools.dateDeserialize(settings.extDate[key])) + '")');
+ if(event.attr('over') != null)
+ str = event.attr("over") + "<br />";
+ str += key;
+ event.removeClass('wd').addClass('event').attr('over',str);
+ }
}
break;
}
1
0