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
July 2013
- 3 participants
- 26 discussions
r368 - in trunk/chorem-entities/src/main: java/org/chorem java/org/chorem/project xmi
by meynier@users.chorem.org 18 Jul '13
by meynier@users.chorem.org 18 Jul '13
18 Jul '13
Author: meynier
Date: 2013-07-18 15:28:33 +0200 (Thu, 18 Jul 2013)
New Revision: 368
Url: http://chorem.org/projects/chorem/repository/revisions/368
Log:
Updated model. Removed Contract, put needed attributes in EmployeeHR and created CompanyHR
Modified:
trunk/chorem-entities/src/main/java/org/chorem/ChoremClient.java
trunk/chorem-entities/src/main/java/org/chorem/ChoremUtil.java
trunk/chorem-entities/src/main/java/org/chorem/project/Calculation.java
trunk/chorem-entities/src/main/java/org/chorem/project/QuotationCalculation.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/ChoremClient.java
===================================================================
--- trunk/chorem-entities/src/main/java/org/chorem/ChoremClient.java 2013-07-17 14:34:12 UTC (rev 367)
+++ trunk/chorem-entities/src/main/java/org/chorem/ChoremClient.java 2013-07-18 13:28:33 UTC (rev 368)
@@ -172,7 +172,7 @@
exts.addAll(org.chorem.entities.CompanyAbstract.extensions);
exts.addAll(org.chorem.entities.ConfigurationAbstract.extensions);
exts.addAll(org.chorem.entities.ContactDetailsAbstract.extensions);
- exts.addAll(org.chorem.entities.ContractAbstract.extensions);
+ exts.addAll(org.chorem.entities.CompanyHRAbstract.extensions);
exts.addAll(org.chorem.entities.DeliveredAbstract.extensions);
exts.addAll(org.chorem.entities.DraftAbstract.extensions);
exts.addAll(org.chorem.entities.EmployeeAbstract.extensions);
@@ -396,13 +396,13 @@
//Code commented before confirmation or modification of the contract implementation
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- //Wikitty w = this.restore(e.getWikittyId());
- //if(w.hasExtension("Contract") && w.getFieldAsDouble("Contract", "dailyReturn") != 0) {
- // return w.getFieldAsDouble("Contract", "dailyReturn");
- //}
- //else {
+ Wikitty w = this.restore(e.getWikittyId());
+ if(w.hasExtension("Contract") && w.getFieldAsDouble("Contract", "dailyReturn") != 0) {
+ return w.getFieldAsDouble("Contract", "dailyReturn");
+ }
+ else {
return this.getConfiguration().getDailyReturn();
- //}
+ }
}
/**
* Returns the daily hours worked of the given empoyee
@@ -414,13 +414,12 @@
//Code commented before confirmation or modification of the contract implementation
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- //Wikitty w = this.restore(e.getWikittyId());
- //Divide the hours by the daily hours worked (default if it's not specified)
- //if(w.hasExtension("Contract") && w.getFieldAsDouble("Contract", "dailyHoursWorked") != 0) {
- // return w.getFieldAsDouble("Contract", "dailyHoursWorked");
- //}
- //else {
+ Wikitty w = this.restore(e.getWikittyId());
+ if(w.hasExtension("Contract") && w.getFieldAsDouble("Contract", "dailyHoursWorked") != 0) {
+ return w.getFieldAsDouble("Contract", "dailyHoursWorked");
+ }
+ else {
return this.getConfiguration().getDailyHoursWorked();
- //}
+ }
}
}
Modified: trunk/chorem-entities/src/main/java/org/chorem/ChoremUtil.java
===================================================================
--- trunk/chorem-entities/src/main/java/org/chorem/ChoremUtil.java 2013-07-17 14:34:12 UTC (rev 367)
+++ trunk/chorem-entities/src/main/java/org/chorem/ChoremUtil.java 2013-07-18 13:28:33 UTC (rev 368)
@@ -3,7 +3,9 @@
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Calendar;
import java.util.Date;
+import java.util.GregorianCalendar;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
@@ -67,4 +69,19 @@
return getPeriodInSeconds(start, end)/3600;
}
+ public static int getWorkingDays(Date begin, Date end) {
+ GregorianCalendar gBegin = new GregorianCalendar();
+ GregorianCalendar gEnd = new GregorianCalendar();
+ gBegin.setTime(begin);
+ gEnd.setTime(end);
+ int days = 0;
+ while(gBegin.before(gEnd)) {
+ if(gBegin.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY
+ && gBegin.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY) {
+ days++;
+ }
+ gBegin.add(Calendar.DAY_OF_YEAR, 1);
+ }
+ return days;
+ }
}
Modified: trunk/chorem-entities/src/main/java/org/chorem/project/Calculation.java
===================================================================
--- trunk/chorem-entities/src/main/java/org/chorem/project/Calculation.java 2013-07-17 14:34:12 UTC (rev 367)
+++ trunk/chorem-entities/src/main/java/org/chorem/project/Calculation.java 2013-07-18 13:28:33 UTC (rev 368)
@@ -36,8 +36,8 @@
private Double expectedProfit = null;
private Double lossOrProfit = null;
private Double resultPerDay = null;
- private Double avgSrp = null;
- private Double realSrp = null;
+ private Double avgReturn = null;
+ private Double realReturn = null;
/**
@@ -66,8 +66,8 @@
this.expectedProfit = expectedProfit();
this.lossOrProfit = lossOrProfit();
this.resultPerDay = resultPerDay();
- this.avgSrp = avgSrp();
- this.realSrp = realSrp();
+ this.avgReturn = avgReturn();
+ this.realReturn = realReturn();
}
/**
@@ -105,10 +105,10 @@
return timePercentages;
}
/**
- * Return the average Srp for all the employees, ponderated by the percentages
+ * Return the average Return for all the employees, ponderated by the percentages
* @return
*/
- public double avgSrp() {
+ public double avgReturn() {
//Fetch the percentages per employee
HashMap<Employee, Double> percentages = getPercentages();
@@ -116,38 +116,37 @@
return client.getConfiguration().getDailyReturn();
}
Set<Employee> keySet = percentages.keySet();
- double avgSrp = 0;
+ double avgReturn = 0;
for(Employee key : keySet) {
- avgSrp += client.getDailyReturn(key)*(percentages.get(key)/100);
- System.out.println("RETOUR JOURNALIER DE " + key + ": " + client.getDailyReturn(key));
+ avgReturn += client.getDailyReturn(key)*(percentages.get(key)/100);
}
- return avgSrp;
+ return avgReturn;
}
/**
* Calculates the real daily return from the different times object and the daily return of the employees.
* @return
*/
- public double realSrp() {
+ public double realReturn() {
HashMap<Employee, Double> times = getTimes();
if(times.size() == 0) {
return client.getConfiguration().getDailyReturn();
}
- double realSrp = 0;
+ double realReturn = 0;
Set<Employee> keySet = times.keySet();
for(Employee key : keySet) {
double srp = client.getDailyReturn(key);
- double hoursPerDay = client.getConfiguration().getDailyHoursWorked();
+ double hoursPerDay = client.getDailyHoursWorked(key);
//TODO :Find a way to use the different work hours
//}
- realSrp += srp* ( times.get(key) / hoursPerDay ) ;
+ realReturn += srp* ( times.get(key) / hoursPerDay ) ;
}
- realSrp = realSrp/getRealDays();
+ realReturn = realReturn/getRealDays();
- return realSrp;
+ return realReturn;
}
/**
@@ -183,7 +182,7 @@
* @return
*/
public double expectedProfit() {
- return amount - (nbDays*getAvgSrp());
+ return amount - (nbDays*getAvgReturn());
}
/**
@@ -191,7 +190,7 @@
* @return
*/
public double lossOrProfit() {
- return amount - (getRealDays() * getRealSrp());
+ return amount - (getRealDays() * getRealReturn());
}
/**
@@ -213,58 +212,49 @@
public double getAdr() {
if(adr == null)
- return adr();
- else
- return adr;
+ adr = adr();
+ return adr;
}
public double getRealDays() {
if(realDays == null)
- return realDays();
- else
- return realDays;
+ realDays = realDays();
+ return realDays;
}
public double getDeltaDays() {
if(deltaDays == null)
- return deltaDays;
- else
- return deltaDays;
+ deltaDays = deltaDays();
+ return deltaDays;
}
public double getRealAdr() {
if(realAdr == null)
- return realAdr();
- else
- return realAdr;
+ realAdr = realAdr();
+ return realAdr;
}
public double getExpectedProfit() {
if(expectedProfit == null)
- return expectedProfit();
- else
- return expectedProfit;
+ expectedProfit = expectedProfit();
+ return expectedProfit;
}
public double getLossOrProfit() {
if(lossOrProfit == null)
- return lossOrProfit();
- else
- return lossOrProfit;
+ lossOrProfit = lossOrProfit();
+ return lossOrProfit;
}
public double getResultPerDay() {
if(resultPerDay == null)
- return resultPerDay();
- else
- return resultPerDay;
+ resultPerDay = resultPerDay();
+ return resultPerDay;
}
- public double getAvgSrp() {
- if(avgSrp == null)
- return avgSrp();
- else
- return avgSrp;
+ public double getAvgReturn() {
+ if(avgReturn == null)
+ avgReturn = avgReturn();
+ return avgReturn;
}
- public double getRealSrp() {
- if(realSrp == null)
- return realSrp();
- else
- return realSrp;
+ public double getRealReturn() {
+ if(realReturn == null)
+ realReturn = realReturn();
+ return realReturn;
}
public T getObject() {
Modified: trunk/chorem-entities/src/main/java/org/chorem/project/QuotationCalculation.java
===================================================================
--- trunk/chorem-entities/src/main/java/org/chorem/project/QuotationCalculation.java 2013-07-17 14:34:12 UTC (rev 367)
+++ trunk/chorem-entities/src/main/java/org/chorem/project/QuotationCalculation.java 2013-07-18 13:28:33 UTC (rev 368)
@@ -33,27 +33,32 @@
@Override
public HashMap<Employee, Double> getPercentages() {
HashMap<Employee, Double> percentages = new HashMap<Employee, Double>();
+ double totalDays = 0;
+ for(Task t : tasks)
+ totalDays += t.getEstimatedDays();
+
List<Task> tasks = getTasks();
for(Task t : tasks) {
HashMap<Employee, Double> taskPercentages = new TaskCalculation(t, client).getPercentages();
for(Employee emp : taskPercentages.keySet()) {
+ double rate = (t.getEstimatedDays()/totalDays);
if(percentages.containsKey(emp)) {
//We temporaly put the sum in the map.
- percentages.put(emp, percentages.get(emp) + taskPercentages.get(emp));
+ percentages.put(emp, percentages.get(emp) + taskPercentages.get(emp)*rate);
}
else {
- percentages.put(emp, taskPercentages.get(emp));
+ percentages.put(emp, taskPercentages.get(emp)*rate);
}
}
}
//Caluculate the average for each employee
- Set<Employee> keySet = percentages.keySet();
+ /*Set<Employee> keySet = percentages.keySet();
for(Employee emp : keySet) {
percentages.put(emp, percentages.get(emp)/tasks.size());
- }
+ }*/
return percentages;
}
Modified: trunk/chorem-entities/src/main/xmi/chorem-model.properties
===================================================================
--- trunk/chorem-entities/src/main/xmi/chorem-model.properties 2013-07-17 14:34:12 UTC (rev 367)
+++ trunk/chorem-entities/src/main/xmi/chorem-model.properties 2013-07-18 13:28:33 UTC (rev 368)
@@ -67,6 +67,11 @@
org.chorem.entities.Company.attribute.type.tagvalue.help=type de la soci\u00e9t\u00e9 (SARL, SA, SAS, ...)
org.chorem.entities.Company.attribute.type.tagvalue.choiceQuery=SELECT Company.type WHERE extension=Company
#
+# CompanyHR
+#
+org.chorem.entities.Company.class.tagvalue.version=1.0
+org.chorem.entities.Company.class.tagvalue.toString=%Company.name|noname$s
+#
# Configuration
#
org.chorem.entities.Configuration.class.tagvalue.version=3.0
@@ -93,17 +98,11 @@
org.chorem.entities.Employee.attribute.description.tagvalue.subtype=text/rst
org.chorem.entities.Employee.attribute.person.tagvalue.help=Autocompl\u00e8tion possible
org.chorem.entities.Employee.attribute.company.tagvalue.help=Autocompl\u00e8tion possible
+
#
-# Contract
-#
-org.chorem.entities.Contract.class.tagvalue.version=2.0
-org.chorem.entities.Contract.class.tagvalue.toString=%Employee.person$s - %Contract.dailyReturn$s (%Contract.salary$s)
-org.chorem.entities.Contract.class.tagvalue.sortOrder=Contract.salary,Contract.dailyReturn
-org.chorem.entities.Contract.attribute.dailyReturn.tagvalue.help=Seuil rentabilit\u00e8 productif
-#
# EmployeeHR
#
-org.chorem.entities.EmployeeHR.class.tagvalue.version=2.0
+org.chorem.entities.EmployeeHR.class.tagvalue.version=3.0
org.chorem.entities.EmployeeHR.class.tagvalue.toString=%Employee.person$s (%Employee.company$s) HR
org.chorem.entities.EmployeeHR.attribute.type.tagvalue.help=Le type de contrat de travail (CDI, CDD, Stage, ...)
org.chorem.entities.EmployeeHR.attribute.type.tagvalue.choiceQuery=SELECT EmployeeHR.type WHERE extension=EmployeeHR
@@ -112,6 +111,9 @@
org.chorem.entities.EmployeeHR.attribute.otherLeave.tagvalue.help=Le nombre de jours de cong\u00e9s de diverses natures attribu\u00e9s (maternit\u00e9s, anciennet\u00e9s, sans-solde, autres...)
org.chorem.entities.EmployeeHR.attribute.salary.tagvalue.help=Le salaire brut mensuel
org.chorem.entities.EmployeeHR.attribute.workingTime.tagvalue.help=Le temps de travail mensuel
+org.chorem.entities.EmployeeHR.attribute.dailyReturn.tagvalue.help=Seuil de rentabilite productif
+org.chorem.entities.EmployeeHR.attribute.productivityRate.tagvalue.help=Taux de productivité
+org.chorem.entities.EmployeeHR.attribute.partialTime.tagvalue.help=Taux de travail (temps complet:100, mi-temps:50)
#
# Evaluation (a mettre ici)
#
Modified: trunk/chorem-entities/src/main/xmi/chorem-model.zargo
===================================================================
(Binary files differ)
1
0
See <http://ci.nuiton.org/jenkins/job/chorem/157/changes>
Changes:
[meynier] Added task calculations and enhanced alerts
------------------------------------------
[...truncated 904 lines...]
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
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
[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
[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
[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: 33; The prefix "f" for element "f:setLocale" 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: 33; The prefix "f" for element "f:setLocale" 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 35 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…>:[14,42] error: cannot find symbol
[ERROR] symbol: class Calculation
<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/pr…>:[71,22] error: type argument QuotationCalculation is not within bounds of type-variable V
[ERROR] where V is a type-variable:
V extends Object declared in class HashMap
<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/pr…>:[71,82] error: type argument QuotationCalculation is not within bounds of type-variable V
[ERROR] where V is a type-variable:
V extends Object declared in class HashMap
<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/pr…>:[72,17] error: cannot find symbol
[ERROR] symbol: class TaskCalculation
location: class DashboardProjectAction
<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/pr…>:[72,63] error: cannot find symbol
[ERROR] symbol: class TaskCalculation
location: class DashboardProjectAction
<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/pr…>:[82,4] error: cannot find symbol
[ERROR] symbol: class TaskCalculation
location: class DashboardProjectAction
<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/pr…>:[82,29] error: cannot find symbol
[ERROR] symbol: class TaskCalculation
location: class DashboardProjectAction
<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/pr…>:[90,7] error: cannot find symbol
[ERROR] symbol: method setSrp(double)
location: variable calc of type QuotationCalculation
<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/pr…>:[91,7] error: cannot find symbol
[ERROR] symbol: method calculate()
location: variable calc of type QuotationCalculation
<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/pr…>:[124,21] error: type argument QuotationCalculation is not within bounds of type-variable V
[ERROR] where V is a type-variable:
V extends Object declared in class HashMap
<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/pr…>:[124,81] error: type argument QuotationCalculation is not within bounds of type-variable V
[ERROR] where V is a type-variable:
V extends Object declared in class HashMap
<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/pr…>:[125,16] error: cannot find symbol
[ERROR] symbol: class TaskCalculation
location: class DashboardProjectAction
<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/pr…>:[125,62] error: cannot find symbol
[ERROR] symbol: class TaskCalculation
location: class DashboardProjectAction
<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/pr…>:[170,7] error: cannot find symbol
[ERROR] symbol: class TaskCalculation
location: class DashboardProjectAction
<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/pr…>:[170,32] error: cannot find symbol
[ERROR] symbol: class TaskCalculation
location: class DashboardProjectAction
<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/pr…>:[179,10] error: cannot find symbol
[ERROR] symbol: method setSrp(double)
location: variable calc of type QuotationCalculation
<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/pr…>:[180,10] error: cannot find symbol
[ERROR] symbol: method calculate()
location: variable calc of type QuotationCalculation
<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/pr…>:[280,21] error: type argument QuotationCalculation is not within bounds of type-variable V
[ERROR] where V is a type-variable:
V extends Object declared in class HashMap
<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/pr…>:[280,81] error: type argument QuotationCalculation is not within bounds of type-variable V
[ERROR] where V is a type-variable:
V extends Object declared in class HashMap
<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/pr…>:[283,7] error: cannot find symbol
[ERROR] symbol: method setSrp(double)
location: variable calc of type QuotationCalculation
<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/pr…>:[284,7] error: cannot find symbol
[ERROR] symbol: method calculate()
location: variable calc of type QuotationCalculation
<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/pr…>:[23,5] error: cannot find symbol
[ERROR] symbol: variable e
location: class QuotationCalculation
<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/pr…>:[26,42] error: cannot find symbol
[ERROR] symbol: variable e
location: class QuotationCalculation
<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/pr…>:[30,5] error: cannot find symbol
[ERROR] symbol: variable client
location: class QuotationCalculation
<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/pr…>:[36,42] error: cannot find symbol
[ERROR] symbol: variable client
location: class QuotationCalculation
<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/pr…>:[42,6] error: cannot find symbol
[ERROR] symbol: method getPeriodInSeconds(Date,Date)
location: class QuotationCalculation
<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/pr…>:[42,59] error: cannot find symbol
[ERROR] symbol: variable SEC_PER_HOUR
location: class QuotationCalculation
<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/pr…>:[43,17] error: cannot find symbol
[ERROR] symbol: method getPeriodInSeconds(Date,Date)
location: class QuotationCalculation
<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/pr…>:[45,23] error: cannot find symbol
[ERROR] symbol: variable SEC_PER_HOUR
location: class QuotationCalculation
<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/pr…>:[45,39] error: cannot find symbol
[ERROR] symbol: variable WORKING_HOURS_PER_DAY
location: class QuotationCalculation
<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/pr…>:[50,42] error: cannot find symbol
[ERROR] symbol: variable e
location: class QuotationCalculation
<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/pr…>:[54,5] error: cannot find symbol
[ERROR] symbol: variable client
location: class QuotationCalculation
<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/pr…>:[60,10] error: cannot find symbol
[ERROR] symbol: variable nbDays
location: class QuotationCalculation
<http://ci.nuiton.org/jenkins/job/chorem/ws/trunk/chorem-webmotion/target/pr…>:[20,1] error: method does not override or implement a method from a supertype
[INFO] 34 errors
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] chorem ............................................ SUCCESS [3.047s]
[INFO] Chorem entities ................................... SUCCESS [9.776s]
[INFO] Chorem webmotion .................................. FAILURE [3.230s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 16.727s
[INFO] Finished at: Wed Jul 03 18:02:28 CEST 2013
[INFO] Final Memory: 35M/288M
[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
10
17 Jul '13
See <http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-entities/1…>
Changes:
[meynier] Add method to get all the takss from a quotation
------------------------------------------
[...truncated 85 lines...]
WARN [pool-1-thread-1] (ObjectModelReader.java:472) loadTagValue - Invalid tag value [org.chorem.entities.Company.class.tagvalue.version] : this tagvalue 'version' can not be apply on the given type 'class'.
WARN [pool-1-thread-1] (ObjectModelReader.java:472) loadTagValue - Invalid tag value [org.chorem.entities.Configuration.class.tagvalue.version] : this tagvalue 'version' can not be apply on the given type 'class'.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.ContactDetails.attribute.name.tagvalue.choiceQuery] : this tagvalue 'choiceQuery' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.ContactDetails.attribute.name.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.ContactDetails.attribute.target.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.ContactDetails.attribute.type.tagvalue.choiceQuery] : this tagvalue 'choiceQuery' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.ContactDetails.attribute.type.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.ContactDetails.attribute.value.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.ContactDetails.class.tagvalue.sortOrder] : this tagvalue 'sortOrder' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.ContactDetails.class.tagvalue.toString] : this tagvalue 'toString' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:472) loadTagValue - Invalid tag value [org.chorem.entities.ContactDetails.class.tagvalue.version] : this tagvalue 'version' can not be apply on the given type 'class'.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Delivered.attribute.deliveryDate.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Delivered.class.tagvalue.toString] : this tagvalue 'toString' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:472) loadTagValue - Invalid tag value [org.chorem.entities.Delivered.class.tagvalue.version] : this tagvalue 'version' can not be apply on the given type 'class'.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Draft.attribute.reference.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Draft.attribute.sendingDate.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Draft.class.tagvalue.toString] : this tagvalue 'toString' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:472) loadTagValue - Invalid tag value [org.chorem.entities.Draft.class.tagvalue.version] : this tagvalue 'version' can not be apply on the given type 'class'.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Employee.attribute.company.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Employee.attribute.description.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Employee.attribute.description.tagvalue.subtype] : this tagvalue 'subtype' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Employee.attribute.person.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Employee.class.tagvalue.preload] : this tagvalue 'preload' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Employee.class.tagvalue.sortOrder] : this tagvalue 'sortOrder' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Employee.class.tagvalue.toString] : this tagvalue 'toString' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:472) loadTagValue - Invalid tag value [org.chorem.entities.Employee.class.tagvalue.version] : this tagvalue 'version' can not be apply on the given type 'class'.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.EmployeeHR.attribute.otherLeave.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.EmployeeHR.attribute.paidLeave.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.EmployeeHR.attribute.rtt.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.EmployeeHR.attribute.salary.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.EmployeeHR.attribute.type.tagvalue.choiceQuery] : this tagvalue 'choiceQuery' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.EmployeeHR.attribute.type.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.EmployeeHR.attribute.workingTime.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.EmployeeHR.class.tagvalue.toString] : this tagvalue 'toString' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:472) loadTagValue - Invalid tag value [org.chorem.entities.EmployeeHR.class.tagvalue.version] : this tagvalue 'version' can not be apply on the given type 'class'.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Evaluation.class.tagvalue.preload] : this tagvalue 'preload' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Evaluation.class.tagvalue.sortOrder] : this tagvalue 'sortOrder' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Evaluation.class.tagvalue.toString] : this tagvalue 'toString' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:472) loadTagValue - Invalid tag value [org.chorem.entities.Evaluation.class.tagvalue.version] : this tagvalue 'version' can not be apply on the given type 'class'.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.ExpenseClaim.attribute.kind.tagvalue.choiceQuery] : this tagvalue 'choiceQuery' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.ExpenseClaim.attribute.kind.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.ExpenseClaim.attribute.status.tagvalue.allowed] : this tagvalue 'allowed' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.ExpenseClaim.attribute.status.tagvalue.default] : this tagvalue 'default' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.ExpenseClaim.attribute.status.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:472) loadTagValue - Invalid tag value [org.chorem.entities.ExpenseClaim.class.tagvalue.version] : this tagvalue 'version' can not be apply on the given type 'class'.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.FinancialTransaction.attribute.VAT.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.FinancialTransaction.attribute.amount.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.FinancialTransaction.attribute.amount.tagvalue.subtype] : this tagvalue 'subtype' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.FinancialTransaction.attribute.beneficiary.tagvalue.allowed] : this tagvalue 'allowed' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.FinancialTransaction.attribute.beneficiary.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.FinancialTransaction.attribute.category.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.FinancialTransaction.attribute.description.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.FinancialTransaction.attribute.description.tagvalue.subtype] : this tagvalue 'subtype' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.FinancialTransaction.attribute.emittedDate.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.FinancialTransaction.attribute.expectedDate.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.FinancialTransaction.attribute.payer.tagvalue.allowed] : this tagvalue 'allowed' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.FinancialTransaction.attribute.payer.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.FinancialTransaction.attribute.paymentDate.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.FinancialTransaction.attribute.reference.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.FinancialTransaction.attribute.reference.tagvalue.notNull] : this tagvalue 'notNull' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.FinancialTransaction.attribute.target.tagvalue.allowed] : this tagvalue 'allowed' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.FinancialTransaction.attribute.target.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.FinancialTransaction.class.tagvalue.preload] : this tagvalue 'preload' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.FinancialTransaction.class.tagvalue.sortOrder] : this tagvalue 'sortOrder' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.FinancialTransaction.class.tagvalue.toString] : this tagvalue 'toString' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:472) loadTagValue - Invalid tag value [org.chorem.entities.FinancialTransaction.class.tagvalue.version] : this tagvalue 'version' can not be apply on the given type 'class'.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Goal.class.tagvalue.sortOrder] : this tagvalue 'sortOrder' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Goal.class.tagvalue.toString] : this tagvalue 'toString' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:472) loadTagValue - Invalid tag value [org.chorem.entities.Goal.class.tagvalue.version] : this tagvalue 'version' can not be apply on the given type 'class'.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Interval.attribute.beginDate.tagvalue.subtype] : this tagvalue 'subtype' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Interval.attribute.endDate.tagvalue.subtype] : this tagvalue 'subtype' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Interval.class.tagvalue.sortOrder] : this tagvalue 'sortOrder' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Interval.class.tagvalue.toString] : this tagvalue 'toString' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:472) loadTagValue - Invalid tag value [org.chorem.entities.Interval.class.tagvalue.version] : this tagvalue 'version' can not be apply on the given type 'class'.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Interview.class.tagvalue.preload] : this tagvalue 'preload' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Interview.class.tagvalue.sortOrder] : this tagvalue 'sortOrder' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Interview.class.tagvalue.toString] : this tagvalue 'toString' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:472) loadTagValue - Invalid tag value [org.chorem.entities.Interview.class.tagvalue.version] : this tagvalue 'version' can not be apply on the given type 'class'.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Invoice.attribute.status.tagvalue.allowed] : this tagvalue 'allowed' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Invoice.attribute.status.tagvalue.default] : this tagvalue 'default' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Invoice.attribute.status.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Invoice.class.tagvalue.toString] : this tagvalue 'toString' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:472) loadTagValue - Invalid tag value [org.chorem.entities.Invoice.class.tagvalue.version] : this tagvalue 'version' can not be apply on the given type 'class'.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Mission.class.tagvalue.preload] : this tagvalue 'preload' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Mission.class.tagvalue.sortOrder] : this tagvalue 'sortOrder' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Mission.class.tagvalue.toString] : this tagvalue 'toString' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:472) loadTagValue - Invalid tag value [org.chorem.entities.Mission.class.tagvalue.version] : this tagvalue 'version' can not be apply on the given type 'class'.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Note.attribute.content.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Note.attribute.content.tagvalue.subtype] : this tagvalue 'subtype' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Note.attribute.date.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Note.attribute.target.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Note.attribute.title.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Note.class.tagvalue.sortOrder] : this tagvalue 'sortOrder' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Note.class.tagvalue.toString] : this tagvalue 'toString' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:472) loadTagValue - Invalid tag value [org.chorem.entities.Note.class.tagvalue.version] : this tagvalue 'version' can not be apply on the given type 'class'.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Person.attribute.diploma.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Person.class.tagvalue.sortOrder] : this tagvalue 'sortOrder' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Person.class.tagvalue.toString] : this tagvalue 'toString' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:472) loadTagValue - Invalid tag value [org.chorem.entities.Person.class.tagvalue.version] : this tagvalue 'version' can not be apply on the given type 'class'.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.PersonSkill.class.tagvalue.preload] : this tagvalue 'preload' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.PersonSkill.class.tagvalue.sortOrder] : this tagvalue 'sortOrder' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.PersonSkill.class.tagvalue.toString] : this tagvalue 'toString' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:472) loadTagValue - Invalid tag value [org.chorem.entities.PersonSkill.class.tagvalue.version] : this tagvalue 'version' can not be apply on the given type 'class'.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Project.attribute.description.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Project.attribute.description.tagvalue.subtype] : this tagvalue 'subtype' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Project.attribute.name.tagvalue.fieldIndex] : this tagvalue 'fieldIndex' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Project.attribute.name.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Project.class.tagvalue.sortOrder] : this tagvalue 'sortOrder' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Project.class.tagvalue.toString] : this tagvalue 'toString' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:472) loadTagValue - Invalid tag value [org.chorem.entities.Project.class.tagvalue.version] : this tagvalue 'version' can not be apply on the given type 'class'.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Quotation.attribute.VAT.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Quotation.attribute.VAT.tagvalue.subtype] : this tagvalue 'subtype' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Quotation.attribute.amount.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Quotation.attribute.amount.tagvalue.subtype] : this tagvalue 'subtype' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Quotation.attribute.category.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Quotation.attribute.conversionHope.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Quotation.attribute.conversionHope.tagvalue.max] : this tagvalue 'max' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Quotation.attribute.conversionHope.tagvalue.min] : this tagvalue 'min' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Quotation.attribute.conversionHope.tagvalue.subtype] : this tagvalue 'subtype' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Quotation.attribute.customer.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Quotation.attribute.description.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Quotation.attribute.description.tagvalue.subtype] : this tagvalue 'subtype' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Quotation.attribute.estimatedDays.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Quotation.attribute.postedDate.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:580) getObjectElements - Invalid tagvalue [org.chorem.entities.Quotation.attribute.postedDate.tagvalue.help] : Element 'postedDate' of type 'attribute' on classifier 'org.chorem.entities.Quotation' is null.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Quotation.attribute.project.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Quotation.attribute.supplier.tagvalue.allowedQuery] : this tagvalue 'allowedQuery' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Quotation.attribute.supplier.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Quotation.class.tagvalue.preload] : this tagvalue 'preload' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Quotation.class.tagvalue.sortOrder] : this tagvalue 'sortOrder' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Quotation.class.tagvalue.toString] : this tagvalue 'toString' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:472) loadTagValue - Invalid tag value [org.chorem.entities.Quotation.class.tagvalue.version] : this tagvalue 'version' can not be apply on the given type 'class'.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.RSV.attribute.rsvPeriod.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.RSV.attribute.rsvPeriod.tagvalue.subtype] : this tagvalue 'subtype' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.RSV.attribute.rsvStart.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.RSV.class.tagvalue.toString] : this tagvalue 'toString' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:472) loadTagValue - Invalid tag value [org.chorem.entities.RSV.class.tagvalue.version] : this tagvalue 'version' can not be apply on the given type 'class'.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.ReferenceYear.attribute.differLeave.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.ReferenceYear.attribute.leavePaidDays.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:472) loadTagValue - Invalid tag value [org.chorem.entities.ReferenceYear.class.tagvalue.version] : this tagvalue 'version' can not be apply on the given type 'class'.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Rejected.attribute.rejectedDate.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Rejected.class.tagvalue.toString] : this tagvalue 'toString' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:472) loadTagValue - Invalid tag value [org.chorem.entities.Rejected.class.tagvalue.version] : this tagvalue 'version' can not be apply on the given type 'class'.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Sent.attribute.postedDate.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Sent.class.tagvalue.toString] : this tagvalue 'toString' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:472) loadTagValue - Invalid tag value [org.chorem.entities.Sent.class.tagvalue.version] : this tagvalue 'version' can not be apply on the given type 'class'.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Skill.class.tagvalue.sortOrder] : this tagvalue 'sortOrder' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Skill.class.tagvalue.toString] : this tagvalue 'toString' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:472) loadTagValue - Invalid tag value [org.chorem.entities.Skill.class.tagvalue.version] : this tagvalue 'version' can not be apply on the given type 'class'.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Started.attribute.startedDate.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Started.class.tagvalue.toString] : this tagvalue 'toString' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:472) loadTagValue - Invalid tag value [org.chorem.entities.Started.class.tagvalue.version] : this tagvalue 'version' can not be apply on the given type 'class'.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Task.attribute.description.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Task.attribute.description.tagvalue.subtype] : this tagvalue 'subtype' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Task.attribute.estimatedDays.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Task.attribute.name.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Task.attribute.price.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Task.attribute.quotation.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Task.attribute.status.tagvalue.allowed] : this tagvalue 'allowed' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Task.attribute.status.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:430) loadTagValue - Invalid tag value [org.chorem.entities.Task.attributes.dayExtension.tagvalue.help] : syntax is not correct.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Task.class.tagvalue.preload] : this tagvalue 'preload' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Task.class.tagvalue.sortOrder] : this tagvalue 'sortOrder' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Task.class.tagvalue.toString] : this tagvalue 'toString' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:472) loadTagValue - Invalid tag value [org.chorem.entities.Task.class.tagvalue.version] : this tagvalue 'version' can not be apply on the given type 'class'.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Time.attribute.employee.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Time.attribute.task.tagvalue.fieldIndex] : this tagvalue 'fieldIndex' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Time.attribute.task.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Time.class.tagvalue.preload] : this tagvalue 'preload' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Time.class.tagvalue.toString] : this tagvalue 'toString' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:472) loadTagValue - Invalid tag value [org.chorem.entities.Time.class.tagvalue.version] : this tagvalue 'version' can not be apply on the given type 'class'.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Touch.attribute.digest.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Touch.attribute.digest.tagvalue.subtype] : this tagvalue 'subtype' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Touch.attribute.goal.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Touch.attribute.goal.tagvalue.subtype] : this tagvalue 'subtype' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Touch.attribute.link.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Touch.attribute.participant.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Touch.attribute.type.tagvalue.choiceQuery] : this tagvalue 'choiceQuery' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Touch.attribute.type.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Touch.class.tagvalue.preload] : this tagvalue 'preload' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Touch.class.tagvalue.sortOrder] : this tagvalue 'sortOrder' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Touch.class.tagvalue.toString] : this tagvalue 'toString' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:472) loadTagValue - Invalid tag value [org.chorem.entities.Touch.class.tagvalue.version] : this tagvalue 'version' can not be apply on the given type 'class'.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Vacation.attribute.amount.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Vacation.attribute.typeLeave.tagvalue.allowed] : this tagvalue 'allowed' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Vacation.attribute.typeLeave.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Vacation.class.tagvalue.sortOrder] : this tagvalue 'sortOrder' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Vacation.class.tagvalue.toString] : this tagvalue 'toString' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:472) loadTagValue - Invalid tag value [org.chorem.entities.Vacation.class.tagvalue.version] : this tagvalue 'version' can not be apply on the given type 'class'.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.VacationRequest.attribute.commentAnswer.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.VacationRequest.attribute.commentRequest.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.VacationRequest.attribute.dateAnswer.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.VacationRequest.attribute.dateRequest.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.VacationRequest.attribute.employeeAnswer.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.VacationRequest.attribute.employeeRequest.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.VacationRequest.attribute.employeeWriter.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.VacationRequest.attribute.statusRequest.tagvalue.allowed] : this tagvalue 'allowed' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.VacationRequest.attribute.statusRequest.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.VacationRequest.class.tagvalue.toString] : this tagvalue 'toString' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:472) loadTagValue - Invalid tag value [org.chorem.entities.VacationRequest.class.tagvalue.version] : this tagvalue 'version' can not be apply on the given type 'class'.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Warranty.attribute.warrantyPeriod.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Warranty.attribute.warrantyPeriod.tagvalue.subtype] : this tagvalue 'subtype' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Warranty.attribute.warrantyStart.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Warranty.class.tagvalue.toString] : this tagvalue 'toString' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:472) loadTagValue - Invalid tag value [org.chorem.entities.Warranty.class.tagvalue.version] : this tagvalue 'version' can not be apply on the given type 'class'.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.WikittyTreeNode.attribute.attachment.tagvalue.visible] : this tagvalue 'visible' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:534) getClassifier - Invalid tagvalue [org.chorem.entities.WikittyTreeNode.attribute.attachment.tagvalue.visible] : Could not find classifier for org.chorem.entities.WikittyTreeNode
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.WikittyTreeNode.attribute.name.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:534) getClassifier - Invalid tagvalue [org.chorem.entities.WikittyTreeNode.attribute.name.tagvalue.help] : Could not find classifier for org.chorem.entities.WikittyTreeNode
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.WikittyTreeNode.attribute.parent.tagvalue.allowed] : this tagvalue 'allowed' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:534) getClassifier - Invalid tagvalue [org.chorem.entities.WikittyTreeNode.attribute.parent.tagvalue.allowed] : Could not find classifier for org.chorem.entities.WikittyTreeNode
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.WikittyTreeNode.attribute.parent.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:534) getClassifier - Invalid tagvalue [org.chorem.entities.WikittyTreeNode.attribute.parent.tagvalue.help] : Could not find classifier for org.chorem.entities.WikittyTreeNode
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Worker.attribute.percentage.tagvalue.fieldIndex] : this tagvalue 'fieldIndex' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Worker.attribute.percentage.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Worker.attribute.percentage.tagvalue.subtype] : this tagvalue 'subtype' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Worker.attribute.person.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Worker.attribute.task.tagvalue.help] : this tagvalue 'help' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Worker.class.tagvalue.preload] : this tagvalue 'preload' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Worker.class.tagvalue.sortOrder] : this tagvalue 'sortOrder' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:462) loadTagValue - Invalid tag value [org.chorem.entities.Worker.class.tagvalue.toString] : this tagvalue 'toString' is unkown.
WARN [pool-1-thread-1] (ObjectModelReader.java:472) loadTagValue - Invalid tag value [org.chorem.entities.Worker.class.tagvalue.version] : this tagvalue 'version' can not be apply on the given type 'class'.
INFO [pool-1-thread-1] (ObjectModelReader.java:273) loadModelProperties - 242 tag values were succesfull imported from <http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-entities/w…>
[INFO] Apply generator WikittyMetaTransformer
WARN [pool-1-thread-1] (WikittyMetaTransformer.java:89) validateModel - org.nuiton.wikitty.entities.WikittyHook misses a "version" tagValue
WARN [pool-1-thread-1] (WikittyMetaTransformer.java:89) validateModel - org.chorem.entities.WorkingDays misses a "version" tagValue
WARN [pool-1-thread-1] (WikittyMetaTransformer.java:89) validateModel - org.nuiton.wikitty.entities.Wikitty misses a "version" tagValue
WARN [pool-1-thread-1] (WikittyMetaTransformer.java:89) validateModel - org.nuiton.wikitty.entities.void misses a "version" tagValue
INFO [pool-1-thread-1] (WikittyContractGenerator.java:76) transformFromModel - 51 classes to process
WARN [pool-1-thread-1] (WikittyAbstractGenerator.java:270) addConstants - no version specified in model for org.nuiton.wikitty.entities.WikittyHook using 1.0
INFO [pool-1-thread-1] (WikittyImplementationGenerator.java:93) isGenerateImpl - Will not generate [org.nuiton.wikitty.entities.WikittyI18nImpl], there is some operations to manually implement
[INFO] No file generated.
[INFO] Add compile source root : <http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-entities/w…>
[INFO] Add resource root :Resource {targetPath: null, filtering: false, FileSet {directory: <http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-entities/w…,> PatternSet [includes: {}, excludes: {**/*.java}]}}
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ chorem-entities ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 2 resources
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ chorem-entities ---
[INFO] Compiling 216 source files to <http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-entities/w…>
[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-entities/w…>:[174,51] error: cannot find symbol
[INFO] 1 error
[INFO] -------------------------------------------------------------
1
7
Author: meynier
Date: 2013-07-17 16:34:12 +0200 (Wed, 17 Jul 2013)
New Revision: 367
Url: http://chorem.org/projects/chorem/repository/revisions/367
Log:
Updated model
Modified:
trunk/chorem-entities/src/main/xmi/chorem-model.properties
trunk/chorem-entities/src/main/xmi/chorem-model.zargo
Modified: trunk/chorem-entities/src/main/xmi/chorem-model.properties
===================================================================
--- trunk/chorem-entities/src/main/xmi/chorem-model.properties 2013-07-17 14:12:16 UTC (rev 366)
+++ trunk/chorem-entities/src/main/xmi/chorem-model.properties 2013-07-17 14:34:12 UTC (rev 367)
@@ -94,9 +94,16 @@
org.chorem.entities.Employee.attribute.person.tagvalue.help=Autocompl\u00e8tion possible
org.chorem.entities.Employee.attribute.company.tagvalue.help=Autocompl\u00e8tion possible
#
+# Contract
+#
+org.chorem.entities.Contract.class.tagvalue.version=2.0
+org.chorem.entities.Contract.class.tagvalue.toString=%Employee.person$s - %Contract.dailyReturn$s (%Contract.salary$s)
+org.chorem.entities.Contract.class.tagvalue.sortOrder=Contract.salary,Contract.dailyReturn
+org.chorem.entities.Contract.attribute.dailyReturn.tagvalue.help=Seuil rentabilit\u00e8 productif
+#
# EmployeeHR
#
-org.chorem.entities.EmployeeHR.class.tagvalue.version=1.0
+org.chorem.entities.EmployeeHR.class.tagvalue.version=2.0
org.chorem.entities.EmployeeHR.class.tagvalue.toString=%Employee.person$s (%Employee.company$s) HR
org.chorem.entities.EmployeeHR.attribute.type.tagvalue.help=Le type de contrat de travail (CDI, CDD, Stage, ...)
org.chorem.entities.EmployeeHR.attribute.type.tagvalue.choiceQuery=SELECT EmployeeHR.type WHERE extension=EmployeeHR
@@ -370,12 +377,12 @@
#
# Worker
#
-org.chorem.entities.Worker.class.tagvalue.version=8.0
-org.chorem.entities.Worker.class.tagvalue.toString=%Worker.person$s - %Worker.task$s - %Worker.percentage|nopercentage$s
+org.chorem.entities.Worker.class.tagvalue.version=9.0
+org.chorem.entities.Worker.class.tagvalue.toString=%Worker.employee$s - %Worker.task$s - %Worker.percentage|nopercentage$s
org.chorem.entities.Worker.class.tagvalue.sortOrder=Worker.percentage
-org.chorem.entities.Worker.class.tagvalue.preload=Worker.person;Work.task
+org.chorem.entities.Worker.class.tagvalue.preload=Worker.employee;Work.task
org.chorem.entities.Worker.attribute.task.tagvalue.help=La t\u00e2che auquel on assigne quelqu'un
-org.chorem.entities.Worker.attribute.person.tagvalue.help=La personne \u00e0 ajouter en tant que travaillant sur cette t\u00e2che
+org.chorem.entities.Worker.attribute.employee.tagvalue.help=La personne \u00e0 ajouter en tant que travaillant sur cette t\u00e2che
org.chorem.entities.Worker.attribute.percentage.tagvalue.help=Le pourcentage de temps de la personne sur cette t\u00e2che
org.chorem.entities.Worker.attribute.percentage.tagvalue.fieldIndex=10
org.chorem.entities.Worker.attribute.percentage.tagvalue.subtype=percent
Modified: trunk/chorem-entities/src/main/xmi/chorem-model.zargo
===================================================================
(Binary files differ)
1
0
r366 - in trunk: chorem-entities/src/main/java/org/chorem chorem-entities/src/main/java/org/chorem/project chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project
by meynier@users.chorem.org 17 Jul '13
by meynier@users.chorem.org 17 Jul '13
17 Jul '13
Author: meynier
Date: 2013-07-17 16:12:16 +0200 (Wed, 17 Jul 2013)
New Revision: 366
Url: http://chorem.org/projects/chorem/repository/revisions/366
Log:
Reorganized some classes and corrected some bugs in the calculation
Added:
trunk/chorem-entities/src/main/java/org/chorem/project/
trunk/chorem-entities/src/main/java/org/chorem/project/Calculation.java
trunk/chorem-entities/src/main/java/org/chorem/project/QuotationCalculation.java
trunk/chorem-entities/src/main/java/org/chorem/project/TaskCalculation.java
Removed:
trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/Calculation.java
trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/QuotationCalculation.java
trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/TaskCalculation.java
Modified:
trunk/chorem-entities/src/main/java/org/chorem/ChoremClient.java
trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/DashboardProjectAction.java
trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/QuotationData.java
trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/TaskData.java
Modified: trunk/chorem-entities/src/main/java/org/chorem/ChoremClient.java
===================================================================
--- trunk/chorem-entities/src/main/java/org/chorem/ChoremClient.java 2013-07-17 12:11:46 UTC (rev 365)
+++ trunk/chorem-entities/src/main/java/org/chorem/ChoremClient.java 2013-07-17 14:12:16 UTC (rev 366)
@@ -398,10 +398,10 @@
//Wikitty w = this.restore(e.getWikittyId());
//if(w.hasExtension("Contract") && w.getFieldAsDouble("Contract", "dailyReturn") != 0) {
- // return w.getFieldAsDouble("Contract", "dailyHoursWorked");
+ // return w.getFieldAsDouble("Contract", "dailyReturn");
//}
//else {
- return this.getConfiguration().getDailyHoursWorked();
+ return this.getConfiguration().getDailyReturn();
//}
}
/**
Copied: trunk/chorem-entities/src/main/java/org/chorem/project/Calculation.java (from rev 365, trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/Calculation.java)
===================================================================
--- trunk/chorem-entities/src/main/java/org/chorem/project/Calculation.java (rev 0)
+++ trunk/chorem-entities/src/main/java/org/chorem/project/Calculation.java 2013-07-17 14:12:16 UTC (rev 366)
@@ -0,0 +1,273 @@
+package org.chorem.project;
+
+import java.util.HashMap;
+import java.util.Set;
+
+import org.chorem.ChoremClient;
+import org.chorem.entities.Employee;
+
+/**
+ * Unit to calculate various elements for a Quotation or a Task.
+ * May be extended for other extensions (Project, for example), but it's not the original purpose.
+ * @author gwenn
+ *
+ * @param <T> Type of element (Task or Quotation)
+ */
+public abstract class Calculation<T> {
+
+ /**Main object (Task or Quotation)*/
+ protected T e;
+ /** Chorme client */
+ protected ChoremClient client;
+ /** Total price of the object */
+ protected double amount;
+ /** Estimated number of days */
+ protected double nbDays;
+
+ protected static final int SEC_PER_HOUR = 3600;
+ protected static final int WORKING_HOURS_PER_DAY = 7;
+ /* Seuil de rentabilite productif */
+
+ //attributes to store the calculations
+ private Double adr = null;
+ private Double realDays = null;
+ private Double deltaDays = null;
+ private Double realAdr = null;
+ private Double expectedProfit = null;
+ private Double lossOrProfit = null;
+ private Double resultPerDay = null;
+ private Double avgSrp = null;
+ private Double realSrp = null;
+
+
+ /**
+ *
+ * @param e Element that will serve for the calculations
+ * @param amount Amount of this element
+ * @param nbDays Estimated number of days for this element
+ * @param client Instance of ChoremClient
+ */
+ public Calculation(T e, double amount, double nbDays, ChoremClient client) {
+ this.e = e;
+ this.client = client;
+ this.amount = amount;
+ this.nbDays = nbDays;
+ }
+
+ /**
+ * Makes all the calcuations and store them into the attributes
+ */
+ public void calculate() {
+
+ this.adr = adr();
+ this.realDays = realDays();
+ this.deltaDays = deltaDays();
+ this.realAdr = realAdr();
+ this.expectedProfit = expectedProfit();
+ this.lossOrProfit = lossOrProfit();
+ this.resultPerDay = resultPerDay();
+ this.avgSrp = avgSrp();
+ this.realSrp = realSrp();
+ }
+
+ /**
+ * Calculates the real number of days from the Time objects.
+ * @return
+ */
+ public abstract double realDays();
+
+
+ /**
+ * Return the times (in hour) per employee for the current object
+ * @return
+ */
+ protected abstract HashMap<Employee, Double> getTimes();
+
+ /**
+ * Return the percentages for the current object
+ * @return
+ */
+ protected abstract HashMap<Employee, Double> getPercentages();
+
+ public HashMap<Employee, Double> getTimePercentages() {
+ HashMap<Employee, Double> times = getTimes();
+ HashMap<Employee, Double> timePercentages = new HashMap<Employee, Double>();
+ double sum = 0;
+ Set<Employee> keySet = times.keySet();
+ for (Employee key : keySet) {
+ sum+= times.get(key);
+ }
+ for (Employee key : keySet) {
+ timePercentages.put(key, (times.get(key)/sum)*100);
+ }
+
+
+ return timePercentages;
+ }
+ /**
+ * Return the average Srp for all the employees, ponderated by the percentages
+ * @return
+ */
+ public double avgSrp() {
+
+ //Fetch the percentages per employee
+ HashMap<Employee, Double> percentages = getPercentages();
+ if(percentages.size() == 0) {
+ return client.getConfiguration().getDailyReturn();
+ }
+ Set<Employee> keySet = percentages.keySet();
+ double avgSrp = 0;
+ for(Employee key : keySet) {
+ avgSrp += client.getDailyReturn(key)*(percentages.get(key)/100);
+ System.out.println("RETOUR JOURNALIER DE " + key + ": " + client.getDailyReturn(key));
+ }
+
+ return avgSrp;
+ }
+
+ /**
+ * Calculates the real daily return from the different times object and the daily return of the employees.
+ * @return
+ */
+ public double realSrp() {
+ HashMap<Employee, Double> times = getTimes();
+ if(times.size() == 0) {
+ return client.getConfiguration().getDailyReturn();
+ }
+ double realSrp = 0;
+ Set<Employee> keySet = times.keySet();
+ for(Employee key : keySet) {
+ double srp = client.getDailyReturn(key);
+ double hoursPerDay = client.getConfiguration().getDailyHoursWorked();
+
+ //TODO :Find a way to use the different work hours
+
+ //}
+ realSrp += srp* ( times.get(key) / hoursPerDay ) ;
+ }
+ realSrp = realSrp/getRealDays();
+
+ return realSrp;
+ }
+
+ /**
+ * Returns the average daily rate, which is the amount divided by the estimated number of days.
+ * @return the ADR
+ */
+ public double adr() {
+ return amount/nbDays;
+ }
+
+
+
+ /**
+ * Gives the difference between the real number of days and the estimated value
+ * @return
+ */
+ public double deltaDays() {
+ return getRealDays() - nbDays;
+ }
+
+ /**
+ * Calculates the real ADR from the real number of days.
+ * @return
+ */
+ public double realAdr() {
+ double realDays = getRealDays();
+
+ return amount/realDays;
+ }
+
+ /**
+ * Profit calculated from the estimated ADR and the estimated numer of days
+ * @return
+ */
+ public double expectedProfit() {
+ return amount - (nbDays*getAvgSrp());
+ }
+
+ /**
+ * Real profit (or loss) done when the quotation is closed.
+ * @return
+ */
+ public double lossOrProfit() {
+ return amount - (getRealDays() * getRealSrp());
+ }
+
+ /**
+ * Average profit/loss per day
+ * @return
+ */
+ public double resultPerDay() {
+ return getLossOrProfit() / getRealDays();
+ }
+
+
+
+ /* ##########################################################################################
+ * ######################### GETTERS #######################################################
+ * ##########################################################################################
+ *
+ * The getters returns the attributes if it has been calculated and calculates directly the value otherwise
+ */
+
+ public double getAdr() {
+ if(adr == null)
+ return adr();
+ else
+ return adr;
+ }
+ public double getRealDays() {
+ if(realDays == null)
+ return realDays();
+ else
+ return realDays;
+ }
+ public double getDeltaDays() {
+ if(deltaDays == null)
+ return deltaDays;
+ else
+ return deltaDays;
+ }
+ public double getRealAdr() {
+ if(realAdr == null)
+ return realAdr();
+ else
+ return realAdr;
+ }
+ public double getExpectedProfit() {
+ if(expectedProfit == null)
+ return expectedProfit();
+ else
+ return expectedProfit;
+ }
+ public double getLossOrProfit() {
+ if(lossOrProfit == null)
+ return lossOrProfit();
+ else
+ return lossOrProfit;
+ }
+ public double getResultPerDay() {
+ if(resultPerDay == null)
+ return resultPerDay();
+ else
+ return resultPerDay;
+ }
+
+ public double getAvgSrp() {
+ if(avgSrp == null)
+ return avgSrp();
+ else
+ return avgSrp;
+ }
+ public double getRealSrp() {
+ if(realSrp == null)
+ return realSrp();
+ else
+ return realSrp;
+ }
+
+ public T getObject() {
+ return e;
+ }
+}
Copied: trunk/chorem-entities/src/main/java/org/chorem/project/QuotationCalculation.java (from rev 365, trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/QuotationCalculation.java)
===================================================================
--- trunk/chorem-entities/src/main/java/org/chorem/project/QuotationCalculation.java (rev 0)
+++ trunk/chorem-entities/src/main/java/org/chorem/project/QuotationCalculation.java 2013-07-17 14:12:16 UTC (rev 366)
@@ -0,0 +1,89 @@
+package org.chorem.project;
+
+import java.util.HashMap;
+import java.util.List;
+
+import org.chorem.ChoremClient;
+import org.chorem.entities.Employee;
+import org.chorem.entities.Quotation;
+import org.chorem.entities.Task;
+import java.util.Set;
+
+public class QuotationCalculation extends Calculation<Quotation> {
+
+
+ private List<Task> tasks = null;
+
+ public QuotationCalculation(Quotation q, ChoremClient client) {
+ super(q, q.getAmount(), q.getEstimatedDays(), client);
+ }
+
+ @Override
+ public double realDays() {
+ double totalTime = 0;
+ //For each task
+ for(Task t : client.getTasks(e)) {
+ //Sum the real days of the tasks objects
+ totalTime+=new TaskCalculation(t, client).getRealDays();
+ }
+ return totalTime;
+
+ }
+
+ @Override
+ public HashMap<Employee, Double> getPercentages() {
+ HashMap<Employee, Double> percentages = new HashMap<Employee, Double>();
+ List<Task> tasks = getTasks();
+ for(Task t : tasks) {
+
+ HashMap<Employee, Double> taskPercentages = new TaskCalculation(t, client).getPercentages();
+ for(Employee emp : taskPercentages.keySet()) {
+ if(percentages.containsKey(emp)) {
+ //We temporaly put the sum in the map.
+ percentages.put(emp, percentages.get(emp) + taskPercentages.get(emp));
+ }
+ else {
+ percentages.put(emp, taskPercentages.get(emp));
+ }
+
+ }
+ }
+
+ //Caluculate the average for each employee
+ Set<Employee> keySet = percentages.keySet();
+ for(Employee emp : keySet) {
+ percentages.put(emp, percentages.get(emp)/tasks.size());
+ }
+ return percentages;
+ }
+
+
+ @Override
+ public HashMap<Employee, Double> getTimes() {
+ HashMap<Employee, Double> times = new HashMap<Employee, Double>();
+
+ for(Task t : getTasks()) {
+
+ HashMap<Employee, Double> taskPercentages = new TaskCalculation(t, client).getTimes();
+ for(Employee emp : taskPercentages.keySet()) {
+ if(times.containsKey(emp)) {
+ times.put(emp, times.get(emp) + taskPercentages.get(emp));
+ }
+ else {
+ times.put(emp, taskPercentages.get(emp));
+ }
+
+ }
+
+ }
+
+ return times;
+ }
+
+ public List<Task> getTasks() {
+ if(tasks == null)
+ tasks = client.getTasks(e);
+ return tasks;
+
+ }
+}
Copied: trunk/chorem-entities/src/main/java/org/chorem/project/TaskCalculation.java (from rev 364, trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/TaskCalculation.java)
===================================================================
--- trunk/chorem-entities/src/main/java/org/chorem/project/TaskCalculation.java (rev 0)
+++ trunk/chorem-entities/src/main/java/org/chorem/project/TaskCalculation.java 2013-07-17 14:12:16 UTC (rev 366)
@@ -0,0 +1,99 @@
+package org.chorem.project;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+
+import org.chorem.ChoremClient;
+import org.chorem.ChoremUtil;
+import org.chorem.entities.Employee;
+import org.chorem.entities.Task;
+import org.chorem.entities.Time;
+import org.chorem.entities.Worker;
+import org.nuiton.wikitty.query.WikittyQuery;
+import org.nuiton.wikitty.query.WikittyQueryMaker;
+import org.nuiton.wikitty.query.WikittyQueryResult;
+
+public class TaskCalculation extends Calculation<Task> {
+ public TaskCalculation(Task t, ChoremClient client) {
+ super(t, t.getPrice(), t.getEstimatedDays(), client);
+ }
+
+ @Override
+ public double realDays() {
+ //test if task is finished
+ if(e.getStatus().equalsIgnoreCase("Closed")) {
+ //Calculate the days from the times objects
+ Collection<Time> times = new ArrayList<Time>();
+
+ //Fetch the time objects linked to this task
+ WikittyQuery timeQuery = new WikittyQueryMaker()
+ .eq(Time.ELEMENT_FIELD_TIME_TASK, e)
+ .end();
+ WikittyQueryResult<Time> timeResult = client.findAllByQuery(Time.class, timeQuery);
+ times.addAll(timeResult.getAll());
+
+ double totalTime = 0;
+ //For each time object
+ for(Time t : times) {
+ //Get the number of hours worked
+ Double hours = ChoremUtil.getPeriodInHours(t.getBeginDate(), t.getEndDate());
+
+ Double days = hours / client.getDailyHoursWorked(t.getEmployee(false));
+
+ totalTime += days;
+ }
+ return totalTime;
+ }
+ else {
+ //estimated days + day extension
+ return nbDays + e.getDayExtension();
+
+ }
+ }
+
+ @Override
+ protected HashMap<Employee, Double> getPercentages() {
+ HashMap<Employee, Double> pct = new HashMap<Employee, Double>();
+ //get all the Worker objects
+ WikittyQuery workerQuery = new WikittyQueryMaker()
+ .eq(Worker.ELEMENT_FIELD_WORKER_TASK, e)
+ .end();
+ WikittyQueryResult<Worker> workerResult = client.findAllByQuery(Worker.class, workerQuery);
+
+ //For each worker, get the percentages assigned on the task
+ for(Worker w : workerResult.getAll()) {
+ if(w.getEmployee() != null) {
+ pct.put(w.getEmployee(false), (double)w.getPercentage());
+ }
+ }
+
+ return pct;
+ }
+
+ @Override
+ protected HashMap<Employee, Double> getTimes() {
+ HashMap<Employee, Double> times = new HashMap<Employee, Double>();
+
+ //Feth the time objects from the task
+ WikittyQuery timeQuery = new WikittyQueryMaker()
+ .eq(Time.ELEMENT_FIELD_TIME_TASK, e)
+ .end();
+ WikittyQueryResult<Time> timeResult = client.findAllByQuery(Time.class, timeQuery);
+
+ for(Time t : timeResult.getAll()) {
+ Employee emp = t.getEmployee(false);
+ if(emp != null) {
+ if(times.containsKey(emp)) {
+ times.put(emp, times.get(emp) + (ChoremUtil.getPeriodInHours(t.getBeginDate(), t.getEndDate())) );
+ }
+ else {
+ times.put(emp,ChoremUtil.getPeriodInHours(t.getBeginDate(), t.getEndDate()));
+ }
+ }
+
+ }
+
+ return times;
+ }
+}
Deleted: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/Calculation.java
===================================================================
--- trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/Calculation.java 2013-07-17 12:11:46 UTC (rev 365)
+++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/Calculation.java 2013-07-17 14:12:16 UTC (rev 366)
@@ -1,272 +0,0 @@
-package org.chorem.webmotion.actions.project;
-
-import java.util.HashMap;
-import java.util.Set;
-
-import org.chorem.ChoremClient;
-import org.chorem.entities.Employee;
-
-/**
- * Unit to calculate various elements for a Quotation or a Task.
- * May be extended for other extensions (Project, for example), but it's not the original purpose.
- * @author gwenn
- *
- * @param <T> Type of element (Task or Quotation)
- */
-public abstract class Calculation<T> {
-
- /**Main object (Task or Quotation)*/
- protected T e;
- /** Chorme client */
- protected ChoremClient client;
- /** Total price of the object */
- protected double amount;
- /** Estimated number of days */
- protected double nbDays;
-
- protected static final int SEC_PER_HOUR = 3600;
- protected static final int WORKING_HOURS_PER_DAY = 7;
- /* Seuil de rentabilite productif */
-
- //attributes to store the calculations
- private Double adr = null;
- private Double realDays = null;
- private Double deltaDays = null;
- private Double realAdr = null;
- private Double expectedProfit = null;
- private Double lossOrProfit = null;
- private Double resultPerDay = null;
- private Double avgSrp = null;
- private Double realSrp = null;
-
-
- /**
- *
- * @param e Element that will serve for the calculations
- * @param amount Amount of this element
- * @param nbDays Estimated number of days for this element
- * @param client Instance of ChoremClient
- */
- public Calculation(T e, double amount, double nbDays, ChoremClient client) {
- this.e = e;
- this.client = client;
- this.amount = amount;
- this.nbDays = nbDays;
- }
-
- /**
- * Makes all the calcuations and store them into the attributes
- */
- public void calculate() {
-
- this.adr = adr();
- this.realDays = realDays();
- this.deltaDays = deltaDays();
- this.realAdr = realAdr();
- this.expectedProfit = expectedProfit();
- this.lossOrProfit = lossOrProfit();
- this.resultPerDay = resultPerDay();
- this.avgSrp = avgSrp();
- this.realSrp = realSrp();
- }
-
- /**
- * Calculates the real number of days from the Time objects.
- * @return
- */
- public abstract double realDays();
-
-
- /**
- * Return the times (in hour) per employee for the current object
- * @return
- */
- protected abstract HashMap<Employee, Double> getTimes();
-
- /**
- * Return the percentages for the current object
- * @return
- */
- protected abstract HashMap<Employee, Double> getPercentages();
-
- public HashMap<Employee, Double> getTimePercentages() {
- HashMap<Employee, Double> times = getTimes();
- HashMap<Employee, Double> timePercentages = new HashMap<Employee, Double>();
- double sum = 0;
- Set<Employee> keySet = times.keySet();
- for (Employee key : keySet) {
- sum+= times.get(key);
- }
- for (Employee key : keySet) {
- timePercentages.put(key, (times.get(key)/sum)*100);
- }
-
-
- return timePercentages;
- }
- /**
- * Return the average Srp for all the employees, ponderated by the percentages
- * @return
- */
- public double avgSrp() {
-
- //Fetch the percentages per employee
- HashMap<Employee, Double> percentages = getPercentages();
- if(percentages.size() == 0) {
- return client.getConfiguration().getDailyReturn();
- }
- Set<Employee> keySet = percentages.keySet();
- double avgSrp = 0;
- for(Employee key : keySet) {
- avgSrp += client.getDailyReturn(key)*(percentages.get(key)/100);
- }
-
- return avgSrp;
- }
-
- /**
- * Calculates the real daily return from the different times object and the daily return of the employees.
- * @return
- */
- public double realSrp() {
- HashMap<Employee, Double> times = getTimes();
- if(times.size() == 0) {
- return client.getConfiguration().getDailyReturn();
- }
- double realSrp = 0;
- Set<Employee> keySet = times.keySet();
- for(Employee key : keySet) {
- double srp = client.getDailyReturn(key);
- double hoursPerDay = client.getConfiguration().getDailyHoursWorked();
-
- //TODO :Find a way to use the different work hours
-
- //}
- realSrp += srp* ( times.get(key) / hoursPerDay ) ;
- }
- realSrp = realSrp/getRealDays();
-
- return realSrp;
- }
-
- /**
- * Returns the average daily rate, which is the amount divided by the estimated number of days.
- * @return the ADR
- */
- public double adr() {
- return amount/nbDays;
- }
-
-
-
- /**
- * Gives the difference between the real number of days and the estimated value
- * @return
- */
- public double deltaDays() {
- return getRealDays() - nbDays;
- }
-
- /**
- * Calculates the real ADR from the real number of days.
- * @return
- */
- public double realAdr() {
- double realDays = getRealDays();
-
- return amount/realDays;
- }
-
- /**
- * Profit calculated from the estimated ADR and the estimated numer of days
- * @return
- */
- public double expectedProfit() {
- return amount - (nbDays*getAvgSrp());
- }
-
- /**
- * Real profit (or loss) done when the quotation is closed.
- * @return
- */
- public double lossOrProfit() {
- return amount - (getRealDays() * getRealSrp());
- }
-
- /**
- * Average profit/loss per day
- * @return
- */
- public double resultPerDay() {
- return getLossOrProfit() / getRealDays();
- }
-
-
-
- /* ##########################################################################################
- * ######################### GETTERS #######################################################
- * ##########################################################################################
- *
- * The getters returns the attributes if it has been calculated and calculates directly the value otherwise
- */
-
- public double getAdr() {
- if(adr == null)
- return adr();
- else
- return adr;
- }
- public double getRealDays() {
- if(realDays == null)
- return realDays();
- else
- return realDays;
- }
- public double getDeltaDays() {
- if(deltaDays == null)
- return deltaDays;
- else
- return deltaDays;
- }
- public double getRealAdr() {
- if(realAdr == null)
- return realAdr();
- else
- return realAdr;
- }
- public double getExpectedProfit() {
- if(expectedProfit == null)
- return expectedProfit();
- else
- return expectedProfit;
- }
- public double getLossOrProfit() {
- if(lossOrProfit == null)
- return lossOrProfit();
- else
- return lossOrProfit;
- }
- public double getResultPerDay() {
- if(resultPerDay == null)
- return resultPerDay();
- else
- return resultPerDay;
- }
-
- public double getAvgSrp() {
- if(avgSrp == null)
- return avgSrp();
- else
- return avgSrp;
- }
- public double getRealSrp() {
- if(realSrp == null)
- return realSrp();
- else
- return realSrp;
- }
-
- public T getObject() {
- return e;
- }
-}
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-07-17 12:11:46 UTC (rev 365)
+++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/DashboardProjectAction.java 2013-07-17 14:12:16 UTC (rev 366)
@@ -1,47 +1,36 @@
package org.chorem.webmotion.actions.project;
-import java.io.ObjectInputStream.GetField;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Calendar;
import java.util.Collection;
-import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.List;
-import java.util.Map;
import java.util.Set;
-import java.util.TreeMap;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.debux.webmotion.server.WebMotionController;
import org.chorem.ChoremClient;
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.Configuration;
import org.chorem.entities.Employee;
import org.chorem.entities.Interval;
import org.chorem.entities.Quotation;
import org.chorem.entities.Project;
import org.chorem.entities.Task;
-import org.chorem.entities.TaskStatus;
import org.chorem.entities.Time;
import org.chorem.entities.Worker;
+import org.chorem.project.QuotationCalculation;
import org.nuiton.wikitty.entities.Wikitty;
-import org.nuiton.wikitty.entities.WikittyExtension;
import org.nuiton.wikitty.query.WikittyQuery;
import org.nuiton.wikitty.query.WikittyQueryMaker;
import org.nuiton.wikitty.query.WikittyQueryResult;
-import com.google.common.collect.Iterables;
-import com.google.gson.*;
/**
*
* @author meynier
Deleted: 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 2013-07-17 12:11:46 UTC (rev 365)
+++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/QuotationCalculation.java 2013-07-17 14:12:16 UTC (rev 366)
@@ -1,88 +0,0 @@
-package org.chorem.webmotion.actions.project;
-
-import java.util.HashMap;
-import java.util.List;
-
-import org.chorem.ChoremClient;
-import org.chorem.entities.Employee;
-import org.chorem.entities.Quotation;
-import org.chorem.entities.Task;
-import java.util.Set;
-
-public class QuotationCalculation extends Calculation<Quotation> {
-
- private List<Task> tasks = null;
-
- public QuotationCalculation(Quotation q, ChoremClient client) {
- super(q, q.getAmount(), q.getEstimatedDays(), client);
- }
-
- @Override
- public double realDays() {
- double totalTime = 0;
- //For each task
- for(Task t : client.getTasks(e)) {
- //Sum the real days of the tasks objects
- totalTime+=new TaskCalculation(t, client).getRealDays();
- }
- return totalTime;
-
- }
-
- @Override
- public HashMap<Employee, Double> getPercentages() {
- HashMap<Employee, Double> percentages = new HashMap<Employee, Double>();
- List<Task> tasks = getTasks();
- for(Task t : tasks) {
-
- HashMap<Employee, Double> taskPercentages = new TaskCalculation(t, client).getPercentages();
- for(Employee emp : taskPercentages.keySet()) {
- if(percentages.containsKey(emp)) {
- //We temporaly put the sum in the map.
- percentages.put(emp, percentages.get(emp) + taskPercentages.get(emp));
- }
- else {
- percentages.put(emp, taskPercentages.get(emp));
- }
-
- }
- }
-
- //Caluculate the average for each employee
- Set<Employee> keySet = percentages.keySet();
- for(Employee emp : keySet) {
- percentages.put(emp, percentages.get(emp)/tasks.size());
- }
- return percentages;
- }
-
-
- @Override
- public HashMap<Employee, Double> getTimes() {
- HashMap<Employee, Double> times = new HashMap<Employee, Double>();
-
- for(Task t : getTasks()) {
-
- HashMap<Employee, Double> taskPercentages = new TaskCalculation(t, client).getTimes();
- for(Employee emp : taskPercentages.keySet()) {
- if(times.containsKey(emp)) {
- times.put(emp, times.get(emp) + taskPercentages.get(emp));
- }
- else {
- times.put(emp, taskPercentages.get(emp));
- }
-
- }
-
- }
-
- return times;
- }
-
- public List<Task> getTasks() {
- if(tasks == null)
- tasks = client.getTasks(e);
- return tasks;
-
- }
-}
Modified: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/QuotationData.java
===================================================================
--- trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/QuotationData.java 2013-07-17 12:11:46 UTC (rev 365)
+++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/QuotationData.java 2013-07-17 14:12:16 UTC (rev 366)
@@ -8,6 +8,7 @@
import org.chorem.ChoremClient;
import org.chorem.entities.Task;
import org.chorem.entities.Quotation;
+import org.chorem.project.QuotationCalculation;
public class QuotationData extends QuotationCalculation {
@@ -18,7 +19,7 @@
super(q, client);
tasksData = new ArrayList<TaskData>();
- for(Task t : getTasks()) {
+ for(Task t : this.getTasks()) {
tasksData.add(new TaskData(t, client));
}
this.calculate();
@@ -50,7 +51,7 @@
}
}
else if(t.getStatus().equalsIgnoreCase("Finished")) {
-
+
if(t.getEndDate().after(now.getTime())) {
alert = true;
str += "Task " + t.getName() + " has been finished in advance";
@@ -68,7 +69,7 @@
public TaskData getTaskData(Task t) {
for(TaskData td : tasksData) {
- if(td.e == t) {
+ if(td.getObject() == t) {
return td;
}
}
Deleted: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/TaskCalculation.java
===================================================================
--- trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/TaskCalculation.java 2013-07-17 12:11:46 UTC (rev 365)
+++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/TaskCalculation.java 2013-07-17 14:12:16 UTC (rev 366)
@@ -1,99 +0,0 @@
-package org.chorem.webmotion.actions.project;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-
-import org.chorem.ChoremClient;
-import org.chorem.ChoremUtil;
-import org.chorem.entities.Employee;
-import org.chorem.entities.Task;
-import org.chorem.entities.Time;
-import org.chorem.entities.Worker;
-import org.nuiton.wikitty.query.WikittyQuery;
-import org.nuiton.wikitty.query.WikittyQueryMaker;
-import org.nuiton.wikitty.query.WikittyQueryResult;
-
-public class TaskCalculation extends Calculation<Task> {
- public TaskCalculation(Task t, ChoremClient client) {
- super(t, t.getPrice(), t.getEstimatedDays(), client);
- }
-
- @Override
- public double realDays() {
- //test if task is finished
- if(e.getStatus().equalsIgnoreCase("Closed")) {
- //Calculate the days from the times objects
- Collection<Time> times = new ArrayList<Time>();
-
- //Fetch the time objects linked to this task
- WikittyQuery timeQuery = new WikittyQueryMaker()
- .eq(Time.ELEMENT_FIELD_TIME_TASK, e)
- .end();
- WikittyQueryResult<Time> timeResult = client.findAllByQuery(Time.class, timeQuery);
- times.addAll(timeResult.getAll());
-
- double totalTime = 0;
- //For each time object
- for(Time t : times) {
- //Get the number of hours worked
- Double hours = ChoremUtil.getPeriodInHours(t.getBeginDate(), t.getEndDate());
-
- Double days = hours / client.getDailyHoursWorked(t.getEmployee(false));
-
- totalTime += days;
- }
- return totalTime;
- }
- else {
- //estimated days + day extension
- return nbDays + e.getDayExtension();
-
- }
- }
-
- @Override
- protected HashMap<Employee, Double> getPercentages() {
- HashMap<Employee, Double> pct = new HashMap<Employee, Double>();
- //get all the Worker objects
- WikittyQuery workerQuery = new WikittyQueryMaker()
- .eq(Worker.ELEMENT_FIELD_WORKER_TASK, e)
- .end();
- WikittyQueryResult<Worker> workerResult = client.findAllByQuery(Worker.class, workerQuery);
-
- //For each worker, get the percentages assigned on the task
- for(Worker w : workerResult.getAll()) {
- if(w.getEmployee() != null) {
- pct.put(w.getEmployee(false), (double)w.getPercentage());
- }
- }
-
- return pct;
- }
-
- @Override
- protected HashMap<Employee, Double> getTimes() {
- HashMap<Employee, Double> times = new HashMap<Employee, Double>();
-
- //Feth the time objects from the task
- WikittyQuery timeQuery = new WikittyQueryMaker()
- .eq(Time.ELEMENT_FIELD_TIME_TASK, e)
- .end();
- WikittyQueryResult<Time> timeResult = client.findAllByQuery(Time.class, timeQuery);
-
- for(Time t : timeResult.getAll()) {
- Employee emp = t.getEmployee(false);
- if(emp != null) {
- if(times.containsKey(emp)) {
- times.put(emp, times.get(emp) + (ChoremUtil.getPeriodInHours(t.getBeginDate(), t.getEndDate())) );
- }
- else {
- times.put(emp,ChoremUtil.getPeriodInHours(t.getBeginDate(), t.getEndDate()));
- }
- }
-
- }
-
- return times;
- }
-}
Modified: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/TaskData.java
===================================================================
--- trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/TaskData.java 2013-07-17 12:11:46 UTC (rev 365)
+++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/TaskData.java 2013-07-17 14:12:16 UTC (rev 366)
@@ -1,10 +1,9 @@
package org.chorem.webmotion.actions.project;
-import java.util.List;
import org.chorem.ChoremClient;
import org.chorem.entities.Task;
-import org.chorem.entities.Quotation;
+import org.chorem.project.TaskCalculation;
public class TaskData extends TaskCalculation {
1
0
r365 - in trunk/chorem-webmotion/src/main: java/org/chorem/webmotion/actions/project resources webapp/WEB-INF/jsp
by meynier@users.chorem.org 17 Jul '13
by meynier@users.chorem.org 17 Jul '13
17 Jul '13
Author: meynier
Date: 2013-07-17 14:11:46 +0200 (Wed, 17 Jul 2013)
New Revision: 365
Url: http://chorem.org/projects/chorem/repository/revisions/365
Log:
Added Employee dashboard and enhanced project dashboard with new data organisation
Added:
trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/GanttAction.java
trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/QuotationData.java
trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/TaskData.java
trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/dashboardEmployee.jsp
Modified:
trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/Calculation.java
trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/DashboardProjectAction.java
trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/QuotationCalculation.java
trunk/chorem-webmotion/src/main/resources/mapping
trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/dashboardMultiProject.jsp
trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/dashboardSingleProject.jsp
trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/decorator.jsp
Modified: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/Calculation.java
===================================================================
--- trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/Calculation.java 2013-07-16 15:41:06 UTC (rev 364)
+++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/Calculation.java 2013-07-17 12:11:46 UTC (rev 365)
@@ -78,7 +78,7 @@
/**
- * Return the percentages for the current object
+ * Return the times (in hour) per employee for the current object
* @return
*/
protected abstract HashMap<Employee, Double> getTimes();
@@ -265,4 +265,8 @@
else
return realSrp;
}
+
+ public T getObject() {
+ return e;
+ }
}
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-07-16 15:41:06 UTC (rev 364)
+++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/DashboardProjectAction.java 2013-07-17 12:11:46 UTC (rev 365)
@@ -1,6 +1,8 @@
package org.chorem.webmotion.actions.project;
+import java.io.ObjectInputStream.GetField;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Calendar;
import java.util.Collection;
import java.util.Collections;
@@ -8,9 +10,11 @@
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.TreeMap;
import org.apache.commons.logging.Log;
@@ -22,11 +26,14 @@
import org.debux.webmotion.server.render.Render;
import org.chorem.entities.Closed;
import org.chorem.entities.Configuration;
+import org.chorem.entities.Employee;
import org.chorem.entities.Interval;
import org.chorem.entities.Quotation;
import org.chorem.entities.Project;
import org.chorem.entities.Task;
import org.chorem.entities.TaskStatus;
+import org.chorem.entities.Time;
+import org.chorem.entities.Worker;
import org.nuiton.wikitty.entities.Wikitty;
import org.nuiton.wikitty.entities.WikittyExtension;
import org.nuiton.wikitty.query.WikittyQuery;
@@ -57,49 +64,25 @@
//Fetch the quotation from the filter
WikittyQuery quotationQuery = new WikittyQueryMaker().ideq(quotationFilter).end();
WikittyQueryResult<Quotation> quotationResult = client.findAllByQuery(Quotation.class, quotationQuery);
+
+ HashMap<Project, List<QuotationData>> projectData = new HashMap<Project, List<QuotationData>>();
//If some quotation has been found
- if(quotationResult != null) {
+ if(quotationResult != null && quotationResult.size() != 0) {
Quotation quotation = quotationResult.get(0);
+
//Fetch the quotation's project
WikittyQuery projectQuery = new WikittyQueryMaker().ideq(quotation.getProject()).end();
WikittyQueryResult<Project> projectResult = client.findAllByQuery(Project.class, projectQuery);
-
- HashMap<Project, List<Quotation>> quotations = new HashMap<Project, List<Quotation>>();
- HashMap<Quotation, List<Task>> taskMap = new HashMap<Quotation, List<Task>>();
- HashMap<Task, String> alertsMap = new HashMap<Task, String>();
- HashMap<Quotation, QuotationCalculation> calculations = new HashMap<Quotation, QuotationCalculation>();
- HashMap<Task, TaskCalculation> taskCalc = new HashMap<Task, TaskCalculation>();
-
- quotations.put(projectResult.get(0), quotationResult.getAll());
- Configuration config = client.findAllByQuery(Configuration.class,
- (new WikittyQueryMaker()).exteq(Configuration.EXT_CONFIGURATION).end()
- ).get(0);
-
- List<Task> tasks = fetchTasks(quotation, client);
- taskMap.put(quotation, tasks);
- //Make the calculations for the tasks
- for(Task t : tasks) {
- TaskCalculation tc = new TaskCalculation(t, client);
- tc.setSrp(config.getDailyReturn());
- tc.calculate();
- taskCalc.put(t, tc);
- }
- taskMap.put(quotation, tasks);
- alertsMap.putAll(getAlerts(client, quotation));
- QuotationCalculation calc = new QuotationCalculation(quotation, client);
- calc.setSrp(config.getDailyReturn());
- calc.calculate();
- calculations.put(quotation, calc);
-
-
+ List<QuotationData> q = new ArrayList<QuotationData>();
+ q.add(new QuotationData(quotation, client));
+ projectData.put(projectResult.get(0), q);
- return renderView("dashboardSingleProject.jsp", "locale", client.getUserLocale(),
- "title", "Tableau de bord projet", "projects", projectResult.getAll(),
- "quotations", quotations, "taskMap", taskMap, "extensions",
- Extensions.extensions, "alerts", alertsMap, "calculations", calculations,
- "taskCalc", taskCalc);
+ return renderView("dashboardSingleProject.jsp",
+ "locale", client.getUserLocale(),
+ "title", "Tableau de bord projet",
+ "projects", projectData);
}
else {
@@ -115,16 +98,13 @@
* @return
*/
public Render projectFilter(ChoremClient client, String id, String quotationFilter) {
-
+
WikittyQueryResult<Project> projectResult = null;
WikittyQueryResult<Quotation> quotationResult = null;
- WikittyQueryResult<Task> taskResult = null;
- HashMap<Project, List<Quotation>> quotations = new HashMap<Project, List<Quotation>>();
- HashMap<Quotation, List<Task>> taskMap = new HashMap<Quotation, List<Task>>();
- HashMap<Task, String> alertsMap = new HashMap<Task, String>();
- HashMap<Quotation, QuotationCalculation> calculations = new HashMap<Quotation, QuotationCalculation>();
- HashMap<Task, TaskCalculation> taskCalc = new HashMap<Task, TaskCalculation>();
+
+ HashMap<Project, List<QuotationData>> projectData = new HashMap<Project, List<QuotationData>>();
+
//Fetch the projects from the id or the filter
WikittyQueryMaker projectQueryMaker = new WikittyQueryMaker();
if(id != null && !id.equals(""))
@@ -134,10 +114,6 @@
WikittyQuery projectQuery = projectQueryMaker.end();
projectResult = client.findAllByQuery(Project.class, projectQuery);
-
- Configuration config = client.findAllByQuery(Configuration.class,
- (new WikittyQueryMaker()).exteq(Configuration.EXT_CONFIGURATION).end()
- ).get(0);
//Fetch the quotations from the projects
if(projectResult.size() != 0) {
@@ -160,100 +136,28 @@
quotationQuery.setLimit(20);
quotationQuery.addSortDescending(Quotation.ELEMENT_FIELD_INTERVAL_BEGINDATE);
quotationResult = client.findAllByQuery(Quotation.class, quotationQuery);
- quotations.put(project, quotationResult.getAll());
//Fetch the tasks form the quotations (if there are some)
- if(quotationResult != null) {
+ if(quotationResult != null && quotationResult.size() != 0) {
+ List<QuotationData> quotation = new ArrayList<QuotationData>();
for(Quotation quote : quotationResult.getAll()) {
- List<Task> tasks = fetchTasks(quote, client);
- taskMap.put(quote, tasks);
- for(Task t : tasks) {
- TaskCalculation tc = new TaskCalculation(t, client);
- tc.setSrp(config.getDailyReturn());
- tc.calculate();
- taskCalc.put(t, tc);
- }
-
- alertsMap.putAll(getAlerts(client, quote));
-
- QuotationCalculation calc = new QuotationCalculation(quote, client);
- calc.setSrp(config.getDailyReturn());
- calc.calculate();
- calculations.put(quote, calc);
+ quotation.add(new QuotationData(quote, client));
}
+ projectData.put(project, quotation);
}
}
}
- return renderView("dashboardSingleProject.jsp", "locale", client.getUserLocale(),
- "title", "Tableau de bord projet", "projects", projectResult.getAll(),
- "quotations", quotations, "taskMap", taskMap, "extensions",
- Extensions.extensions, "alerts", alertsMap, "calculations", calculations,
- "taskCalc", taskCalc);
+ return renderView("dashboardSingleProject.jsp",
+ "locale", client.getUserLocale(),
+ "title", "Tableau de bord projet",
+ "projects", projectData);
}
- /**
- * Fetch the task from the given quotation
- * Simple wikitty query
- * @param q Quotation
- * @param client chorem client
- * @return list of task from the quotation
- */
- private List<Task> fetchTasks(Quotation q, ChoremClient client) {
- WikittyQuery taskQuery = new WikittyQueryMaker()
- .eq(Task.ELEMENT_FIELD_TASK_QUOTATION, q)
- .end();
-
- taskQuery.addSortAscending(Quotation.ELEMENT_FIELD_INTERVAL_BEGINDATE);
- WikittyQueryResult taskResult = client.findAllByQuery(Task.class, taskQuery);
- return taskResult.getAll();
- }
+
- private HashMap<Task, String> getAlerts(ChoremClient client, Quotation q) {
- List<Task> tasks = fetchTasks(q, client);
- Calendar now = new GregorianCalendar();
- HashMap<Task, String> messages = new HashMap<Task, String>();
- for(Task t : tasks) {
- if(t.getBeginDate() != null && t.getEndDate() != null) {
- String str = "<h4>Warning</h4>";
- boolean alert = false;
- //Test if the statuses are correct
- if(t.getStatus().equalsIgnoreCase("Scheduled")) {
- if(t.getBeginDate().before(now.getTime())) {
- alert = true;
- str += "Task " + t.getName() + " should be started";
- }
- }
- else if(t.getStatus().equalsIgnoreCase("Started")) {
- if(t.getBeginDate().after(now.getTime())) {
- alert = true;
- str += "Task " + t.getName() + " has been started in advance";
- }
- else if(t.getEndDate().before(now.getTime())) {
- alert = true;
- str += "Task " + t.getName() + " should have ended by now";
- }
- }
- else if(t.getStatus().equalsIgnoreCase("Finished")) {
-
- if(t.getEndDate().after(now.getTime())) {
- alert = true;
- str += "Task " + t.getName() + " has been finished in advance";
- }
- }
- if(alert) {
- messages.put(t,str);
- }
-
- }
-
- }
-
- return messages;
- }
-
public Render multiProjectFilter(ChoremClient client, Date from, Date to) {
System.out.println(from + "," + to);
if(from == null || to == null) {
@@ -267,12 +171,7 @@
}
- Configuration config = client.findAllByQuery(Configuration.class,
- (new WikittyQueryMaker()).exteq(Configuration.EXT_CONFIGURATION).end()
- ).get(0);
-
-
WikittyQueryMaker quotationQueryMaker = new WikittyQueryMaker();
WikittyQuery quotationQuery = quotationQueryMaker.or()
.bw(Interval.FQ_FIELD_INTERVAL_BEGINDATE, from, to)
@@ -289,7 +188,6 @@
HashMap<Quotation, QuotationCalculation> calculations = new HashMap<Quotation, QuotationCalculation>();
for(Quotation q : quotations) {
QuotationCalculation calc = new QuotationCalculation(q, client);
- calc.setSrp(config.getDailyReturn());
calc.calculate();
calculations.put(q, calc);
}
@@ -304,163 +202,149 @@
}
-
-
- public Render requestProject(ChoremClient client, String project_name, String project_id, String quotationFilter) {
- if(quotationFilter == null)
- quotationFilter = "open";
- if(project_name == null || project_name.equals(""))
- project_id = "";
- if(quotationFilter.equals("open") || quotationFilter.equals("all")) {
- return projectFilter(client, project_id, quotationFilter);
+ public Render employeeFilter(ChoremClient client, String id, Date from, Date to) {
+
+ //If no field has been set, sets the date to the actual month
+ if(from == null || to == null) {
+ Calendar now = new GregorianCalendar();
+ Calendar gFrom = new GregorianCalendar(now.get(Calendar.YEAR), now.get(Calendar.MONTH)
+ , now.getActualMinimum(Calendar.DAY_OF_MONTH));
+ Calendar gTo = new GregorianCalendar(now.get(Calendar.YEAR), now.get(Calendar.MONTH)
+ , now.getActualMaximum(Calendar.DAY_OF_MONTH));
+ from = gFrom.getTime();
+ to = gTo.getTime();
}
+
+ //Fetch the total list of employee (or just the chosen one
+ WikittyQueryMaker employeeQueryMaker = new WikittyQueryMaker();
+ if(id != null && !id.equals(""))
+ employeeQueryMaker.ideq(id);
else {
- return singleQuotationFilter(client, project_id, quotationFilter);
+ employeeQueryMaker.exteq("Employee");
}
- }
- 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()
- .ideq(id)
- .end();
- Quotation quotation = client.findByQuery(Quotation.class, quotationQuery);
-
-
-
+ WikittyQueryResult<Employee> employeeResult = client.findAllByQuery(Employee.class,employeeQueryMaker.end());
+ List<Employee> employeeList = employeeResult.getAll();
+
+ //Fetch all the tasks on the interval
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.getBeginDate() != null && t.getEndDate() != null) {
- if(t.getStatus().equals("SCHEDULED")) {
- customClass = "ganttBlue";
+ .and()
+ .exteq("Task")
+ .or()
+ .bw(Interval.FQ_FIELD_INTERVAL_BEGINDATE, from, to)
+ .bw(Interval.FQ_FIELD_INTERVAL_ENDDATE, from, to)
+ .and()
+ .le(Interval.FQ_FIELD_INTERVAL_BEGINDATE, from)
+ .ge(Interval.FQ_FIELD_INTERVAL_ENDDATE, to)
+ .end();
+ List<Task> taskList = client.findAllByQuery(Task.class,taskQuery).getAll();
+ //Fetch the employee's workers on those tasks
+
+
+
+ //----------------------------------------
+ //Fetch the real time spent on each project/quotation
+ HashMap<Employee, Double> timeTotals = new HashMap<Employee, Double>();
+ HashMap<Employee, HashMap<Quotation, Double>> timePerQuotation = new HashMap<Employee, HashMap<Quotation, Double>>();
+ for(Task task : taskList) {
+
+ WikittyQueryMaker timeQueryMaker = new WikittyQueryMaker().and()
+ .eq(Time.ELEMENT_FIELD_TIME_TASK, task);
+ if(employeeList.size() == 1)
+ timeQueryMaker.eq(Time.ELEMENT_FIELD_TIME_EMPLOYEE, employeeList.get(0));
+ WikittyQuery timeQuery = timeQueryMaker.end();
+ WikittyQueryResult<Time> timeResult = client.findAllByQuery(Time.class, timeQuery);
+
+
+
+ for(Time time : timeResult.getAll()) {
+ Employee emp = time.getEmployee(false);
+
+ //TOTAL TIMES
+ if(timeTotals.containsKey(emp))
+ timeTotals.put(emp, timeTotals.get(emp) + ChoremUtil.getPeriodInHours(time.getBeginDate(), time.getEndDate()));
+ else
+ timeTotals.put(emp, ChoremUtil.getPeriodInHours(time.getBeginDate(), time.getEndDate()));
+
+ HashMap<Quotation, Double> timeQ = null;
+ //TIME PER QUOTATION
+ if(timePerQuotation.containsKey(emp)) {
+ timeQ = timePerQuotation.get(emp);
}
- else if(t.getStatus().equals("STARTED")) {
- customClass = "ganttGreen";
+ else {
+ timeQ = new HashMap<Quotation, Double>();
+ timePerQuotation.put(emp, timeQ);
}
- else if(t.getStatus().equals("FINISHED")) {
- customClass = "ganttRed";
+ Quotation qKey = task.getQuotation(false);
+ if(timeQ.containsKey(qKey)) {
+ timeQ.put(qKey, timeQ.get(qKey) +
+ ChoremUtil.getPeriodInHours(time.getBeginDate(), time.getEndDate()));
}
- else if(t.getStatus().equals("CLOSED")) {
- customClass = "ganttGrey";
+ else {
+ timeQ.put(qKey,
+ ChoremUtil.getPeriodInHours(time.getBeginDate(), time.getEndDate()));
}
-
- Values[] v = null;
- if(t.getDayExtension() != 0)
- v= new Values[2];
- else
- v = new Values[1];
- v[0] = new Values(t.getBeginDate(), t.getEndDate(), t.getName(), customClass, t.getWikittyId());
- if(t.getDayExtension() != 0) {
- GregorianCalendar newEnd = new GregorianCalendar();
- newEnd.setTime(t.getEndDate());
- newEnd.add(Calendar.DAY_OF_YEAR, (int) t.getDayExtension());
- v[1]= new Values(t.getEndDate(), newEnd.getTime(), "Reestimated end", "ganttOrange", t.getWikittyId());
- }
- 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");
- 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");
-
- 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())) {
- Date date = ((Date) (wikitty.getFieldAsObject(me.getValue(), me.getKey())));
- if(date != null)
- extDate.put(me.getValue() + " " + me.getKey(), "/Date(" + date.getTime() +")/");
+ Set<Employee> kSet = timePerQuotation.keySet();
+ Set<Quotation> quotations = new HashSet<Quotation>();
+ for(Employee e : kSet) {
+ quotations.addAll(timePerQuotation.get(e).keySet());
+ }
+
+ HashMap<Employee, HashMap<Quotation, Double>> percentages = new HashMap<Employee, HashMap<Quotation, Double>>();
+
+ for(Employee e : kSet) {
+ Set<Quotation> qSet = timePerQuotation.get(e).keySet();
+ HashMap<Quotation, Double> p = new HashMap<Quotation, Double>();
+ for(Quotation q : qSet) {
+
+ p.put(q, ( timePerQuotation.get(e).get(q) / timeTotals.get(e) ) *100 );
+
}
+ percentages.put(e, p);
}
-
- JRender data = new JRender(lTask, extDate, dateStart, dateEnd);
- return renderJSON("data", data);
+
+ //Calculates the average working time
+
+ Calendar gFrom = new GregorianCalendar();
+ Calendar gTo = new GregorianCalendar();
+ gFrom.setTime(from);
+ gTo.setTime(to);
+
+ return renderView("dashboardEmployee.jsp",
+ "title", "Tableau de bord employé",
+ "locale", client.getUserLocale(),
+ "timePerQuotation", timePerQuotation,
+ "quotations", quotations,
+ "percentages", percentages,
+ "timeTotals", timeTotals);
+
}
- 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;
+ public Render requestProject(ChoremClient client, String project_name, String project_id, String quotationFilter) {
+ if(quotationFilter == null)
+ quotationFilter = "open";
+ if(project_name == null || project_name.equals(""))
+ project_id = "";
+ if(quotationFilter.equals("open") || quotationFilter.equals("all")) {
+ return projectFilter(client, project_id, quotationFilter);
}
- }
-
- private class JTask implements Comparable {
- private String name;
- private String desc;
- private Values[] values;
- private String status;
- 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;
+ else {
+ return singleQuotationFilter(client, project_id, quotationFilter);
}
- @Override
- public int compareTo(Object task) {
-
- return values[0].compareTo(((JTask)task).values[0]);
- }
-
}
- private class Values implements Comparable{
- private String from;
- private String to;
- private String label;
- private String customClass;
- private String dataObj;
- public Values(Date from, Date to, String label, String customClass, String dataObj) {
- this.from = "/Date(" + from.getTime() + ")/";
- this.to = "/Date(" + to.getTime() + ")/";
- this.label = label;
- this.customClass = customClass;
- this.dataObj = dataObj;
- }
- @Override
- public int compareTo(Object o) {
-
- return from.compareTo(((Values)o).from);
- }
-
+ public Render requestMultiProject(ChoremClient client, Date from, Date to) {
+ return multiProjectFilter(client, from, to);
}
+
+ public Render requestEmployee(ChoremClient client, String id, Date from, Date to) {
+
+ return employeeFilter(client, id, from, to);
+ }
+
private class IntervalSorter<T extends Interval> implements Comparator {
@Override
Added: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/GanttAction.java
===================================================================
--- trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/GanttAction.java (rev 0)
+++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/GanttAction.java 2013-07-17 12:11:46 UTC (rev 365)
@@ -0,0 +1,169 @@
+package org.chorem.webmotion.actions.project;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.chorem.ChoremClient;
+import org.chorem.entities.Quotation;
+import org.chorem.entities.Task;
+import org.debux.webmotion.server.WebMotionController;
+import org.debux.webmotion.server.render.Render;
+import org.nuiton.wikitty.entities.Wikitty;
+import org.nuiton.wikitty.query.WikittyQuery;
+import org.nuiton.wikitty.query.WikittyQueryMaker;
+import org.nuiton.wikitty.query.WikittyQueryResult;
+
+public class GanttAction extends WebMotionController {
+
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ static private Log log = LogFactory.getLog(GanttAction.class);
+
+
+ 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.getBeginDate() != null && t.getEndDate() != null) {
+ 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.getDayExtension() != 0)
+ v= new Values[2];
+ else
+ v = new Values[1];
+ v[0] = new Values(t.getBeginDate(), t.getEndDate(), t.getName(), customClass, t.getWikittyId());
+ if(t.getDayExtension() != 0) {
+ GregorianCalendar newEnd = new GregorianCalendar();
+ newEnd.setTime(t.getEndDate());
+ newEnd.add(Calendar.DAY_OF_YEAR, (int) t.getDayExtension());
+ v[1]= new Values(t.getEndDate(), newEnd.getTime(), "Reestimated end", "ganttOrange", t.getWikittyId());
+ }
+ 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");
+ 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");
+
+ Iterator<Map.Entry<String,String>> 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())) {
+ Date date = ((Date) (wikitty.getFieldAsObject(me.getValue(), me.getKey())));
+ if(date != null)
+ extDate.put(me.getValue() + " " + me.getKey(), "/Date(" + date.getTime() +")/");
+ }
+ }
+
+ JRender data = new JRender(lTask, extDate, dateStart, dateEnd);
+ return renderJSON("data", data);
+ }
+
+
+ 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;
+ 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;
+ private String to;
+ private String label;
+ private String customClass;
+ private String dataObj;
+ public Values(Date from, Date to, String label, String customClass, String dataObj) {
+ this.from = "/Date(" + from.getTime() + ")/";
+ this.to = "/Date(" + to.getTime() + ")/";
+ this.label = label;
+ this.customClass = customClass;
+ this.dataObj = dataObj;
+ }
+ @Override
+ public int compareTo(Object o) {
+
+ return from.compareTo(((Values)o).from);
+ }
+
+ }
+}
Modified: 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 2013-07-16 15:41:06 UTC (rev 364)
+++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/QuotationCalculation.java 2013-07-17 12:11:46 UTC (rev 365)
@@ -11,6 +11,8 @@
public class QuotationCalculation extends Calculation<Quotation> {
+ private List<Task> tasks = null;
+
public QuotationCalculation(Quotation q, ChoremClient client) {
super(q, q.getAmount(), q.getEstimatedDays(), client);
}
@@ -30,7 +32,7 @@
@Override
public HashMap<Employee, Double> getPercentages() {
HashMap<Employee, Double> percentages = new HashMap<Employee, Double>();
- List<Task> tasks = client.getTasks(e);
+ List<Task> tasks = getTasks();
for(Task t : tasks) {
HashMap<Employee, Double> taskPercentages = new TaskCalculation(t, client).getPercentages();
@@ -59,7 +61,7 @@
public HashMap<Employee, Double> getTimes() {
HashMap<Employee, Double> times = new HashMap<Employee, Double>();
- for(Task t : client.getTasks(e)) {
+ for(Task t : getTasks()) {
HashMap<Employee, Double> taskPercentages = new TaskCalculation(t, client).getTimes();
for(Employee emp : taskPercentages.keySet()) {
@@ -76,4 +78,11 @@
return times;
}
+
+ public List<Task> getTasks() {
+ if(tasks == null)
+ tasks = client.getTasks(e);
+ return tasks;
+
+ }
}
Added: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/QuotationData.java
===================================================================
--- trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/QuotationData.java (rev 0)
+++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/QuotationData.java 2013-07-17 12:11:46 UTC (rev 365)
@@ -0,0 +1,85 @@
+package org.chorem.webmotion.actions.project;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+import java.util.List;
+
+import org.chorem.ChoremClient;
+import org.chorem.entities.Task;
+import org.chorem.entities.Quotation;
+
+public class QuotationData extends QuotationCalculation {
+
+
+ private List<TaskData> tasksData;
+
+ public QuotationData(Quotation q, ChoremClient client) {
+ super(q, client);
+ tasksData = new ArrayList<TaskData>();
+
+ for(Task t : getTasks()) {
+ tasksData.add(new TaskData(t, client));
+ }
+ this.calculate();
+ getAlerts();
+ }
+
+ private void getAlerts() {
+ Calendar now = new GregorianCalendar();
+ for(TaskData td : tasksData) {
+ Task t = td.getObject();
+ if(t.getBeginDate() != null && t.getEndDate() != null) {
+ String str = "<h4>Warning</h4>";
+ boolean alert = false;
+ //Test if the statuses are correct
+ if(t.getStatus().equalsIgnoreCase("Scheduled")) {
+ if(t.getBeginDate().before(now.getTime())) {
+ alert = true;
+ str += "Task " + t.getName() + " should be started";
+ }
+ }
+ else if(t.getStatus().equalsIgnoreCase("Started")) {
+ if(t.getBeginDate().after(now.getTime())) {
+ alert = true;
+ str += "Task " + t.getName() + " has been started in advance";
+ }
+ else if(t.getEndDate().before(now.getTime())) {
+ alert = true;
+ str += "Task " + t.getName() + " should have ended by now";
+ }
+ }
+ else if(t.getStatus().equalsIgnoreCase("Finished")) {
+
+ if(t.getEndDate().after(now.getTime())) {
+ alert = true;
+ str += "Task " + t.getName() + " has been finished in advance";
+ }
+ }
+ if(alert) {
+ td.setAlert(str);
+ }
+
+ }
+
+ }
+
+ }
+
+ public TaskData getTaskData(Task t) {
+ for(TaskData td : tasksData) {
+ if(td.e == t) {
+ return td;
+ }
+ }
+ return null;
+ }
+
+
+
+ public List<TaskData> getTasksData() {
+ return tasksData;
+ }
+
+
+}
Added: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/TaskData.java
===================================================================
--- trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/TaskData.java (rev 0)
+++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/TaskData.java 2013-07-17 12:11:46 UTC (rev 365)
@@ -0,0 +1,26 @@
+package org.chorem.webmotion.actions.project;
+
+import java.util.List;
+
+import org.chorem.ChoremClient;
+import org.chorem.entities.Task;
+import org.chorem.entities.Quotation;
+
+public class TaskData extends TaskCalculation {
+
+
+ private String alert;
+
+ public TaskData(Task t, ChoremClient client) {
+ super(t, client);
+ this.calculate();
+ }
+
+ public void setAlert(String a) {
+ alert = a;
+ }
+
+ public String getAlert() {
+ return alert;
+ }
+}
Modified: trunk/chorem-webmotion/src/main/resources/mapping
===================================================================
--- trunk/chorem-webmotion/src/main/resources/mapping 2013-07-16 15:41:06 UTC (rev 364)
+++ trunk/chorem-webmotion/src/main/resources/mapping 2013-07-17 12:11:46 UTC (rev 365)
@@ -73,6 +73,7 @@
* /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
+* /project/json/getGanttInfo/{id} action:project.GanttAction.getGanttInfo
+* /project/employee action:project.DashboardProjectAction.requestEmployee
* /crm/account/{id} action:crm.AccountAction.view
* /crm/quotation/edit/{id} action:crm.QuotationAction.edit
Added: trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/dashboardEmployee.jsp
===================================================================
--- trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/dashboardEmployee.jsp (rev 0)
+++ trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/dashboardEmployee.jsp 2013-07-17 12:11:46 UTC (rev 365)
@@ -0,0 +1,88 @@
+<%--
+ #%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"%>
+
+<f:setLocale value="${locale}"/>
+
+
+
+<h1>${title}</h1>
+<form class="well form-inline" method="GET" id="projectSearch">
+
+ <div class="control-group">
+ <div class="controls" style="display: inline">
+
+ From : <input type="text" name="from" id="from" class="datepicker" value='${param.from}' />
+ to : <input type="text" name="to" id="to" class="datepicker" value="${param.to}" />
+ <select class="filterBox" name="id" id="employeeFilter">
+ <option value="">Tous les employés</option>
+ <c:forEach items="${timeTotals}" var="entry">
+ <option value="${entry.key.wikittyId}"><w:display wikitty="${entry.key.wikitty}"
+ fqfield="Employee.person" label="" /></option>
+ </c:forEach>
+ </select>
+ <input type="submit"/>
+ </div>
+ </div>
+
+</form>
+
+<table class="table table-striped table-bordered table-condensed">
+ <thead>
+ <th>Employé</th>
+ <c:forEach items="${quotations}" var="q">
+ <th>${q.getProject(false).name} :<a href="<c:url value="/project?quotationFilter=${q.wikittyId}" />"> ${q.description}</a></th>
+ </c:forEach>
+ <th>Total</th>
+ </thead>
+ <tbody>
+ <c:forEach items="${timePerQuotation}" var="entry">
+ <tr>
+ <td><w:display wikitty="${entry.key.wikitty}"
+ fqfield="Employee.person" label="" /></td>
+ <c:forEach items="${quotations}" var="q">
+ <td>
+ <c:if test="${not empty entry.value[q]}">
+ <f:formatNumber type="number"
+ maxFractionDigits="2" value="${percentages[entry.key][q]}" /> %
+ (<f:formatNumber type="number"
+ maxFractionDigits="2" value="${entry.value[q]}" /> heures)
+ </c:if>
+ </td>
+
+
+ </c:forEach>
+ <td><f:formatNumber type="number"
+ maxFractionDigits="2" value="${timeTotals[entry.key]}" /> heures</td>
+ </tr>
+
+ </c:forEach>
+ </tbody>
+</table>
+
+
+
Modified: trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/dashboardMultiProject.jsp
===================================================================
--- trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/dashboardMultiProject.jsp 2013-07-16 15:41:06 UTC (rev 364)
+++ trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/dashboardMultiProject.jsp 2013-07-17 12:11:46 UTC (rev 365)
@@ -56,6 +56,8 @@
<th><abbr title="Taux journalier moyen">TJM</abbr> reel</th>
<th>Gain attendu</th>
<th>Perte/gain</th>
+ <th>Average SRP</th>
+ <th>Real SRP</th>
</tr>
</thead>
<c:forEach var="q" items="${quotations}">
@@ -82,6 +84,10 @@
maxFractionDigits="2" value="${calculations[q].getExpectedProfit()}" /></td>
<td class="currency"> <f:formatNumber type="currency"
maxFractionDigits="2" value="${calculations[q].getLossOrProfit()}" /></td>
+ <td> <f:formatNumber type="number"
+ maxFractionDigits="2" value="${calculations[q].getAvgSrp()}" /></td>
+ <td> <f:formatNumber type="number"
+ maxFractionDigits="2" value="${calculations[q].getRealSrp()}" /></td>
</tr>
</tbody>
Modified: trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/dashboardSingleProject.jsp
===================================================================
--- trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/dashboardSingleProject.jsp 2013-07-16 15:41:06 UTC (rev 364)
+++ trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/dashboardSingleProject.jsp 2013-07-17 12:11:46 UTC (rev 365)
@@ -41,11 +41,11 @@
<option value="all"
<c:if test='${param.quotationFilter=="all"}'>selected</c:if>>Tous
les devis</option>
- <c:forEach var="p" items="${projects}">
- <c:forEach var="q" items="${quotations[p]}">
- <option value="${q.wikittyId}"
- <c:if test='${param.quotationFilter.equals(q.wikittyId)}'>selected</c:if>>${p.name}
- - ${q.description}</option>
+ <c:forEach var="entry" items="${projects}">
+ <c:forEach var="q" items="${entry.value}">
+ <option value="${q.object.wikittyId}"
+ <c:if test='${param.quotationFilter.equals(q.object.wikittyId)}'>selected</c:if>>${entry.key.name}
+ - ${q.object.description}</option>
</c:forEach>
</c:forEach>
</select>
@@ -78,8 +78,8 @@
</form>
-<c:forEach var="p" items="${projects}">
- <c:if test="${not empty quotations[p]}">
+<c:forEach var="entry" items="${projects}">
+ <c:set var="p" value="${entry.key}"/>
<h2 style="display: inline;">${p.name}</h2>
<a href="<c:url value="/wikitty/edit/${p.wikittyId}"/>"><i
class="icon-pencil icon-black"></i><small>edit</small></a>
@@ -88,23 +88,23 @@
- <c:forEach var="q" items="${quotations[p]}">
+ <c:forEach var="q" items="${entry.value}">
<h3 style="display: inline;">
- <w:display wikitty="${q.wikitty}" fqfield="Quotation.description"
+ <w:display wikitty="${q.object.wikitty}" fqfield="Quotation.description"
label="" />
</h3>
- <a href="<c:url value="/wikitty/edit/${q.wikittyId}"/>"><i
+ <a href="<c:url value="/wikitty/edit/${q.object.wikittyId}"/>"><i
class="icon-pencil icon-black"></i><small>edit</small></a>
<p>
Du
- <w:display wikitty="${q.wikitty}" fqfield="Interval.beginDate"
+ <w:display wikitty="${q.object.wikitty}" fqfield="Interval.beginDate"
label="" pattern="dd/MM/yyyy" />
au
- <w:display wikitty="${q.wikitty}" fqfield="Interval.endDate"
+ <w:display wikitty="${q.object.wikitty}" fqfield="Interval.endDate"
label="" pattern="dd/MM/yyyy" />
<br />Statut :
- ${q.wikitty.extensionNames.toArray()[q.wikitty.extensionNames.size()
+ ${q.object.wikitty.extensionNames.toArray()[q.object.wikitty.extensionNames.size()
-1]}
</p>
@@ -115,6 +115,7 @@
<th>Responsable Code Lutin</th>
<th>Responsable entreprise</th>
<th>Jours estimés</th>
+ <th>Jours réels</th>
<th>TJM estimé</th>
<th>TJM réel</th>
<th>Montant</th>
@@ -124,21 +125,23 @@
<tbody>
<tr>
- <td><w:display wikitty="${q.wikitty}"
+ <td><w:display wikitty="${q.object.wikitty}"
fqfield="Quotation.supplier" label="" /></td>
- <td><w:display wikitty="${q.wikitty}"
+ <td><w:display wikitty="${q.object.wikitty}"
fqfield="Quotation.customer" label="" /></td>
- <td class="number"><w:display wikitty="${q.wikitty}"
+ <td class="number"><w:display wikitty="${q.object.wikitty}"
fqfield="Quotation.estimatedDays" label="" /></td>
+ <td class="number"><f:formatNumber type="number"
+ maxFractionDigits="2" value="${q.getRealDays()}" /></td>
<td class="currency"><f:formatNumber type="currency"
- maxFractionDigits="2" value="${calculations[q].getAdr()}" /></td>
+ maxFractionDigits="2" value="${q.getAdr()}" /></td>
<td class="currency"><f:formatNumber type="currency"
- maxFractionDigits="2" value="${calculations[q].getRealAdr()}" /></td>
- <td class="currency"><w:display wikitty="${q.wikitty}"
+ maxFractionDigits="2" value="${q.getRealAdr()}" /></td>
+ <td class="currency"><w:display wikitty="${q.object.wikitty}"
fqfield="Quotation.amount" label="" /></td>
<td class="currency"><f:formatNumber type="currency"
maxFractionDigits="2"
- value="${calculations[q].getLossOrProfit()}" /></td>
+ value="${q.getLossOrProfit()}" /></td>
</tr>
</tbody>
</table>
@@ -147,9 +150,9 @@
- <div class="gantt gantt-${q.wikittyId}" wikittyId="${q.wikittyId}"
+ <div class="gantt gantt-${q.object.wikittyId}" wikittyId="${q.object.wikittyId}"
data=''>Pas de tâche</div>
- <c:if test="${taskMap[q].size() != 0}">
+ <c:if test="${q.tasks.size() != 0}">
<table class="table table-striped table-bordered table-condensed">
<thead>
<tr>
@@ -162,40 +165,46 @@
<th>TJM réel</th>
<th>Gain attendu</th>
<th>Gain/perte</th>
+ <th>SRP moyen</th>
+ <th>SRP réel</th>
</tr>
</thead>
<tbody>
- <c:forEach items="${taskMap[q]}" var="task">
- <tr id="taskrow-${task.wikittyId}">
- <td <c:if test="${not empty alerts[task]}">class="task-alert"</c:if>><a
- href="<c:url value="/wikitty/view/${task.wikittyId}"/>"> <w:display
- wikitty="${task.wikitty}" fqfield="Task.name" label="" /></a>
- <c:if test="${not empty alerts[task]}">
- <i class="icon-warning-sign" title="${alerts[task]}"></i>
+ <c:forEach items="${q.tasksData}" var="task">
+ <tr id="taskrow-${task.object.wikittyId}">
+ <td <c:if test="${not empty task.alert}">class="task-alert"</c:if>><a
+ href="<c:url value="/wikitty/view/${task.object.wikittyId}"/>"> <w:display
+ wikitty="${task.object.wikitty}" fqfield="Task.name" label="" /></a>
+ <c:if test="${not empty task.alert}">
+ <i class="icon-warning-sign" title="${task.alert}"></i>
</c:if>
- <td><w:display wikitty="${task.wikitty}"
+ <td><w:display wikitty="${task.object.wikitty}"
fqfield="Task.price" label="" /></td>
- <td class="number"><w:display wikitty="${task.wikitty}"
+ <td class="number"><w:display wikitty="${task.object.wikitty}"
fqfield="Task.estimatedDays" label="" /></td>
<td class="number"><f:formatNumber type="number"
- maxFractionDigits="2" value="${taskCalc[task].getRealDays()}" /></td>
+ maxFractionDigits="2" value="${task.getRealDays()}" /></td>
<td class="number"><f:formatNumber type="number"
- maxFractionDigits="2" value="${taskCalc[task].getDeltaDays()}" /></td>
+ maxFractionDigits="2" value="${task.getDeltaDays()}" /></td>
<td class="number"><f:formatNumber type="number"
- maxFractionDigits="2" value="${taskCalc[task].getAdr()}" /></td>
+ maxFractionDigits="2" value="${task.getAdr()}" /></td>
<td class="number"><f:formatNumber type="number"
- maxFractionDigits="2" value="${taskCalc[task].getRealAdr()}" /></td>
+ maxFractionDigits="2" value="${task.getRealAdr()}" /></td>
<td class="currency"><f:formatNumber type="currency"
maxFractionDigits="2"
- value="${taskCalc[task].getExpectedProfit()}" /></td>
+ value="${task.getExpectedProfit()}" /></td>
<td class="currency"><f:formatNumber type="currency"
maxFractionDigits="2"
- value="${taskCalc[task].getLossOrProfit()}" /></td>
+ value="${task.getLossOrProfit()}" /></td>
+ <td class="number"><f:formatNumber type="number"
+ maxFractionDigits="2" value="${task.getAvgSrp()}" /></td>
+ <td class="number"><f:formatNumber type="number"
+ maxFractionDigits="2" value="${task.getRealSrp()}" /></td>
</tr>
@@ -203,9 +212,34 @@
</tbody>
</table>
</c:if>
+
+ <table class="table table-striped table-bordered table-condensed">
+ <thead>
+ <th>Employé</th>
+ <th>Pourcentage estimé</th>
+ <th>Temps passé réel</th>
+ </thead>
+ <tbody>
+ <c:forEach items="${q.getPercentages()}" var="entry">
+ <tr>
+ <td>${entry.key}</td>
+ <td class="number"><f:formatNumber type="number"
+ maxFractionDigits="2" value="${entry.value}"/>%</td>
+ <td class="number"><f:formatNumber type="number"
+ maxFractionDigits="2"
+ value="${q.getTimePercentages()[entry.key]}" />%
+ (
+ <f:formatNumber type="number"
+ maxFractionDigits="2"
+ value="${q.getTimes()[entry.key]}" />
+ heures )</td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
</c:forEach>
- </c:if>
+
</c:forEach>
Modified: trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/decorator.jsp
===================================================================
--- trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/decorator.jsp 2013-07-16 15:41:06 UTC (rev 364)
+++ trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/decorator.jsp 2013-07-17 12:11:46 UTC (rev 365)
@@ -115,6 +115,7 @@
<li>Worker</li>
<li><a href="<c:url value="/wikitty/Worker/search"/>"><i class="icon-th-list icon-black"></i> All workers</a></li>
<li><a href="<c:url value="/wikitty/Worker/edit/new"/>"><i class="icon-plus icon-black"></i> Add worker</a></li>
+ <li><a href="<c:url value="/project/employee"/>"><i class="icon-plus icon-black"></i> Employee dashboard</a></li>
<li class="divider"></li>
<li>Time</li>
<li><a href="<c:url value="/wikitty/Time/search"/>"><i class="icon-th-list icon-black"></i> All times</a></li>
1
0
r364 - trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project
by meynier@users.chorem.org 16 Jul '13
by meynier@users.chorem.org 16 Jul '13
16 Jul '13
Author: meynier
Date: 2013-07-16 17:41:06 +0200 (Tue, 16 Jul 2013)
New Revision: 364
Url: http://chorem.org/projects/chorem/repository/revisions/364
Log:
Added avgSrp and realSrp calculations (which also needs the new methods getTimes and getPercentages) and enhanced some calculations
Added:
trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/Calculation.java
trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/TaskCalculation.java
Modified:
trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/QuotationCalculation.java
Added: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/Calculation.java
===================================================================
--- trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/Calculation.java (rev 0)
+++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/Calculation.java 2013-07-16 15:41:06 UTC (rev 364)
@@ -0,0 +1,268 @@
+package org.chorem.webmotion.actions.project;
+
+import java.util.HashMap;
+import java.util.Set;
+
+import org.chorem.ChoremClient;
+import org.chorem.entities.Employee;
+
+/**
+ * Unit to calculate various elements for a Quotation or a Task.
+ * May be extended for other extensions (Project, for example), but it's not the original purpose.
+ * @author gwenn
+ *
+ * @param <T> Type of element (Task or Quotation)
+ */
+public abstract class Calculation<T> {
+
+ /**Main object (Task or Quotation)*/
+ protected T e;
+ /** Chorme client */
+ protected ChoremClient client;
+ /** Total price of the object */
+ protected double amount;
+ /** Estimated number of days */
+ protected double nbDays;
+
+ protected static final int SEC_PER_HOUR = 3600;
+ protected static final int WORKING_HOURS_PER_DAY = 7;
+ /* Seuil de rentabilite productif */
+
+ //attributes to store the calculations
+ private Double adr = null;
+ private Double realDays = null;
+ private Double deltaDays = null;
+ private Double realAdr = null;
+ private Double expectedProfit = null;
+ private Double lossOrProfit = null;
+ private Double resultPerDay = null;
+ private Double avgSrp = null;
+ private Double realSrp = null;
+
+
+ /**
+ *
+ * @param e Element that will serve for the calculations
+ * @param amount Amount of this element
+ * @param nbDays Estimated number of days for this element
+ * @param client Instance of ChoremClient
+ */
+ public Calculation(T e, double amount, double nbDays, ChoremClient client) {
+ this.e = e;
+ this.client = client;
+ this.amount = amount;
+ this.nbDays = nbDays;
+ }
+
+ /**
+ * Makes all the calcuations and store them into the attributes
+ */
+ public void calculate() {
+
+ this.adr = adr();
+ this.realDays = realDays();
+ this.deltaDays = deltaDays();
+ this.realAdr = realAdr();
+ this.expectedProfit = expectedProfit();
+ this.lossOrProfit = lossOrProfit();
+ this.resultPerDay = resultPerDay();
+ this.avgSrp = avgSrp();
+ this.realSrp = realSrp();
+ }
+
+ /**
+ * Calculates the real number of days from the Time objects.
+ * @return
+ */
+ public abstract double realDays();
+
+
+ /**
+ * Return the percentages for the current object
+ * @return
+ */
+ protected abstract HashMap<Employee, Double> getTimes();
+
+ /**
+ * Return the percentages for the current object
+ * @return
+ */
+ protected abstract HashMap<Employee, Double> getPercentages();
+
+ public HashMap<Employee, Double> getTimePercentages() {
+ HashMap<Employee, Double> times = getTimes();
+ HashMap<Employee, Double> timePercentages = new HashMap<Employee, Double>();
+ double sum = 0;
+ Set<Employee> keySet = times.keySet();
+ for (Employee key : keySet) {
+ sum+= times.get(key);
+ }
+ for (Employee key : keySet) {
+ timePercentages.put(key, (times.get(key)/sum)*100);
+ }
+
+
+ return timePercentages;
+ }
+ /**
+ * Return the average Srp for all the employees, ponderated by the percentages
+ * @return
+ */
+ public double avgSrp() {
+
+ //Fetch the percentages per employee
+ HashMap<Employee, Double> percentages = getPercentages();
+ if(percentages.size() == 0) {
+ return client.getConfiguration().getDailyReturn();
+ }
+ Set<Employee> keySet = percentages.keySet();
+ double avgSrp = 0;
+ for(Employee key : keySet) {
+ avgSrp += client.getDailyReturn(key)*(percentages.get(key)/100);
+ }
+
+ return avgSrp;
+ }
+
+ /**
+ * Calculates the real daily return from the different times object and the daily return of the employees.
+ * @return
+ */
+ public double realSrp() {
+ HashMap<Employee, Double> times = getTimes();
+ if(times.size() == 0) {
+ return client.getConfiguration().getDailyReturn();
+ }
+ double realSrp = 0;
+ Set<Employee> keySet = times.keySet();
+ for(Employee key : keySet) {
+ double srp = client.getDailyReturn(key);
+ double hoursPerDay = client.getConfiguration().getDailyHoursWorked();
+
+ //TODO :Find a way to use the different work hours
+
+ //}
+ realSrp += srp* ( times.get(key) / hoursPerDay ) ;
+ }
+ realSrp = realSrp/getRealDays();
+
+ return realSrp;
+ }
+
+ /**
+ * Returns the average daily rate, which is the amount divided by the estimated number of days.
+ * @return the ADR
+ */
+ public double adr() {
+ return amount/nbDays;
+ }
+
+
+
+ /**
+ * Gives the difference between the real number of days and the estimated value
+ * @return
+ */
+ public double deltaDays() {
+ return getRealDays() - nbDays;
+ }
+
+ /**
+ * Calculates the real ADR from the real number of days.
+ * @return
+ */
+ public double realAdr() {
+ double realDays = getRealDays();
+
+ return amount/realDays;
+ }
+
+ /**
+ * Profit calculated from the estimated ADR and the estimated numer of days
+ * @return
+ */
+ public double expectedProfit() {
+ return amount - (nbDays*getAvgSrp());
+ }
+
+ /**
+ * Real profit (or loss) done when the quotation is closed.
+ * @return
+ */
+ public double lossOrProfit() {
+ return amount - (getRealDays() * getRealSrp());
+ }
+
+ /**
+ * Average profit/loss per day
+ * @return
+ */
+ public double resultPerDay() {
+ return getLossOrProfit() / getRealDays();
+ }
+
+
+
+ /* ##########################################################################################
+ * ######################### GETTERS #######################################################
+ * ##########################################################################################
+ *
+ * The getters returns the attributes if it has been calculated and calculates directly the value otherwise
+ */
+
+ public double getAdr() {
+ if(adr == null)
+ return adr();
+ else
+ return adr;
+ }
+ public double getRealDays() {
+ if(realDays == null)
+ return realDays();
+ else
+ return realDays;
+ }
+ public double getDeltaDays() {
+ if(deltaDays == null)
+ return deltaDays;
+ else
+ return deltaDays;
+ }
+ public double getRealAdr() {
+ if(realAdr == null)
+ return realAdr();
+ else
+ return realAdr;
+ }
+ public double getExpectedProfit() {
+ if(expectedProfit == null)
+ return expectedProfit();
+ else
+ return expectedProfit;
+ }
+ public double getLossOrProfit() {
+ if(lossOrProfit == null)
+ return lossOrProfit();
+ else
+ return lossOrProfit;
+ }
+ public double getResultPerDay() {
+ if(resultPerDay == null)
+ return resultPerDay();
+ else
+ return resultPerDay;
+ }
+
+ public double getAvgSrp() {
+ if(avgSrp == null)
+ return avgSrp();
+ else
+ return avgSrp;
+ }
+ public double getRealSrp() {
+ if(realSrp == null)
+ return realSrp();
+ else
+ return realSrp;
+ }
+}
Modified: 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 2013-07-16 15:13:01 UTC (rev 363)
+++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/QuotationCalculation.java 2013-07-16 15:41:06 UTC (rev 364)
@@ -1,65 +1,79 @@
package org.chorem.webmotion.actions.project;
-import java.util.ArrayList;
-import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
import org.chorem.ChoremClient;
+import org.chorem.entities.Employee;
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;
+import java.util.Set;
public class QuotationCalculation extends Calculation<Quotation> {
public QuotationCalculation(Quotation q, ChoremClient client) {
super(q, q.getAmount(), q.getEstimatedDays(), client);
}
-
+
@Override
public double realDays() {
- //test if quotation is finished
- if(e.getExtensionNames().contains("Closed")) {
- //Calculate the days from the times objects
- WikittyQuery taskQuery = new WikittyQueryMaker()
- .eq(Task.ELEMENT_FIELD_TASK_QUOTATION, e)
- .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, t)
- .end();
- WikittyQueryResult<Time> timeResult = client.findAllByQuery(Time.class, timeQuery);
- times.addAll(timeResult.getAll());
+ double totalTime = 0;
+ //For each task
+ for(Task t : client.getTasks(e)) {
+ //Sum the real days of the tasks objects
+ totalTime+=new TaskCalculation(t, client).getRealDays();
+ }
+ return totalTime;
+
+ }
+
+ @Override
+ public HashMap<Employee, Double> getPercentages() {
+ HashMap<Employee, Double> percentages = new HashMap<Employee, Double>();
+ List<Task> tasks = client.getTasks(e);
+ for(Task t : tasks) {
+
+ HashMap<Employee, Double> taskPercentages = new TaskCalculation(t, client).getPercentages();
+ for(Employee emp : taskPercentages.keySet()) {
+ if(percentages.containsKey(emp)) {
+ //We temporaly put the sum in the map.
+ percentages.put(emp, percentages.get(emp) + taskPercentages.get(emp));
+ }
+ else {
+ percentages.put(emp, taskPercentages.get(emp));
+ }
+
}
- double totalTime = 0;
- for(Time t : times) {
- System.out.println("HEURE TRAVAILLEES : "
- + (getPeriodInSeconds(t.getBeginDate(), t.getEndDate())/SEC_PER_HOUR) );
- totalTime += getPeriodInSeconds(t.getBeginDate(), t.getEndDate());
- }
- return (totalTime / SEC_PER_HOUR) / WORKING_HOURS_PER_DAY;
}
- else {
- //nbDays + day extensions from tasks
- WikittyQuery taskQuery = new WikittyQueryMaker()
- .eq(Task.ELEMENT_FIELD_TASK_QUOTATION, e)
- .end();
-
- WikittyQueryResult<Task> result =
- client.findAllByQuery(Task.class, taskQuery);
-
- double totalDayExt = 0;
- for(Task t : result.getAll()) {
- totalDayExt += t.getDayExtension();
+
+ //Caluculate the average for each employee
+ Set<Employee> keySet = percentages.keySet();
+ for(Employee emp : keySet) {
+ percentages.put(emp, percentages.get(emp)/tasks.size());
+ }
+ return percentages;
+ }
+
+
+ @Override
+ public HashMap<Employee, Double> getTimes() {
+ HashMap<Employee, Double> times = new HashMap<Employee, Double>();
+
+ for(Task t : client.getTasks(e)) {
+
+ HashMap<Employee, Double> taskPercentages = new TaskCalculation(t, client).getTimes();
+ for(Employee emp : taskPercentages.keySet()) {
+ if(times.containsKey(emp)) {
+ times.put(emp, times.get(emp) + taskPercentages.get(emp));
+ }
+ else {
+ times.put(emp, taskPercentages.get(emp));
+ }
+
}
- return nbDays + totalDayExt;
-
+
}
+
+ return times;
}
-
}
Added: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/TaskCalculation.java
===================================================================
--- trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/TaskCalculation.java (rev 0)
+++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/TaskCalculation.java 2013-07-16 15:41:06 UTC (rev 364)
@@ -0,0 +1,99 @@
+package org.chorem.webmotion.actions.project;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+
+import org.chorem.ChoremClient;
+import org.chorem.ChoremUtil;
+import org.chorem.entities.Employee;
+import org.chorem.entities.Task;
+import org.chorem.entities.Time;
+import org.chorem.entities.Worker;
+import org.nuiton.wikitty.query.WikittyQuery;
+import org.nuiton.wikitty.query.WikittyQueryMaker;
+import org.nuiton.wikitty.query.WikittyQueryResult;
+
+public class TaskCalculation extends Calculation<Task> {
+ public TaskCalculation(Task t, ChoremClient client) {
+ super(t, t.getPrice(), t.getEstimatedDays(), client);
+ }
+
+ @Override
+ public double realDays() {
+ //test if task is finished
+ if(e.getStatus().equalsIgnoreCase("Closed")) {
+ //Calculate the days from the times objects
+ Collection<Time> times = new ArrayList<Time>();
+
+ //Fetch the time objects linked to this task
+ WikittyQuery timeQuery = new WikittyQueryMaker()
+ .eq(Time.ELEMENT_FIELD_TIME_TASK, e)
+ .end();
+ WikittyQueryResult<Time> timeResult = client.findAllByQuery(Time.class, timeQuery);
+ times.addAll(timeResult.getAll());
+
+ double totalTime = 0;
+ //For each time object
+ for(Time t : times) {
+ //Get the number of hours worked
+ Double hours = ChoremUtil.getPeriodInHours(t.getBeginDate(), t.getEndDate());
+
+ Double days = hours / client.getDailyHoursWorked(t.getEmployee(false));
+
+ totalTime += days;
+ }
+ return totalTime;
+ }
+ else {
+ //estimated days + day extension
+ return nbDays + e.getDayExtension();
+
+ }
+ }
+
+ @Override
+ protected HashMap<Employee, Double> getPercentages() {
+ HashMap<Employee, Double> pct = new HashMap<Employee, Double>();
+ //get all the Worker objects
+ WikittyQuery workerQuery = new WikittyQueryMaker()
+ .eq(Worker.ELEMENT_FIELD_WORKER_TASK, e)
+ .end();
+ WikittyQueryResult<Worker> workerResult = client.findAllByQuery(Worker.class, workerQuery);
+
+ //For each worker, get the percentages assigned on the task
+ for(Worker w : workerResult.getAll()) {
+ if(w.getEmployee() != null) {
+ pct.put(w.getEmployee(false), (double)w.getPercentage());
+ }
+ }
+
+ return pct;
+ }
+
+ @Override
+ protected HashMap<Employee, Double> getTimes() {
+ HashMap<Employee, Double> times = new HashMap<Employee, Double>();
+
+ //Feth the time objects from the task
+ WikittyQuery timeQuery = new WikittyQueryMaker()
+ .eq(Time.ELEMENT_FIELD_TIME_TASK, e)
+ .end();
+ WikittyQueryResult<Time> timeResult = client.findAllByQuery(Time.class, timeQuery);
+
+ for(Time t : timeResult.getAll()) {
+ Employee emp = t.getEmployee(false);
+ if(emp != null) {
+ if(times.containsKey(emp)) {
+ times.put(emp, times.get(emp) + (ChoremUtil.getPeriodInHours(t.getBeginDate(), t.getEndDate())) );
+ }
+ else {
+ times.put(emp,ChoremUtil.getPeriodInHours(t.getBeginDate(), t.getEndDate()));
+ }
+ }
+
+ }
+
+ return times;
+ }
+}
1
0
16 Jul '13
Author: meynier
Date: 2013-07-16 17:13:01 +0200 (Tue, 16 Jul 2013)
New Revision: 363
Url: http://chorem.org/projects/chorem/repository/revisions/363
Log:
Add useful methods for project module in ChoremClient and ChoremUtil (temporary methods for dailyReturn and dailyHoursWorked)
Modified:
trunk/chorem-entities/src/main/java/org/chorem/ChoremClient.java
trunk/chorem-entities/src/main/java/org/chorem/ChoremUtil.java
Modified: trunk/chorem-entities/src/main/java/org/chorem/ChoremClient.java
===================================================================
--- trunk/chorem-entities/src/main/java/org/chorem/ChoremClient.java 2013-07-10 12:09:21 UTC (rev 362)
+++ trunk/chorem-entities/src/main/java/org/chorem/ChoremClient.java 2013-07-16 15:13:01 UTC (rev 363)
@@ -41,6 +41,7 @@
import org.nuiton.wikitty.WikittyService;
import org.nuiton.wikitty.WikittyServiceFactory;
import org.nuiton.wikitty.WikittyUtil;
+import org.nuiton.wikitty.entities.Wikitty;
import org.nuiton.wikitty.entities.WikittyExtension;
import org.nuiton.wikitty.query.WikittyQuery;
import org.nuiton.wikitty.query.WikittyQueryMaker;
@@ -384,4 +385,42 @@
WikittyQueryResult<Task> taskResult = findAllByQuery(Task.class, taskQuery);
return taskResult.getAll();
}
+
+ /**
+ * Returns the daily return of the given empoyee
+ * @param e
+ * @return
+ */
+ public double getDailyReturn(Employee e) {
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ //Code commented before confirmation or modification of the contract implementation
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+ //Wikitty w = this.restore(e.getWikittyId());
+ //if(w.hasExtension("Contract") && w.getFieldAsDouble("Contract", "dailyReturn") != 0) {
+ // return w.getFieldAsDouble("Contract", "dailyHoursWorked");
+ //}
+ //else {
+ return this.getConfiguration().getDailyHoursWorked();
+ //}
+ }
+ /**
+ * Returns the daily hours worked of the given empoyee
+ * @param e
+ * @return
+ */
+ public double getDailyHoursWorked(Employee e) {
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ //Code commented before confirmation or modification of the contract implementation
+ //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+ //Wikitty w = this.restore(e.getWikittyId());
+ //Divide the hours by the daily hours worked (default if it's not specified)
+ //if(w.hasExtension("Contract") && w.getFieldAsDouble("Contract", "dailyHoursWorked") != 0) {
+ // return w.getFieldAsDouble("Contract", "dailyHoursWorked");
+ //}
+ //else {
+ return this.getConfiguration().getDailyHoursWorked();
+ //}
+ }
}
Modified: trunk/chorem-entities/src/main/java/org/chorem/ChoremUtil.java
===================================================================
--- trunk/chorem-entities/src/main/java/org/chorem/ChoremUtil.java 2013-07-10 12:09:21 UTC (rev 362)
+++ trunk/chorem-entities/src/main/java/org/chorem/ChoremUtil.java 2013-07-16 15:13:01 UTC (rev 363)
@@ -3,6 +3,7 @@
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Date;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
@@ -45,4 +46,25 @@
}
return result;
}
+
+ /**
+ * Returns the number of seconds between the two given dates
+ * @param start Start date
+ * @param end End date
+ * @return period in seconds
+ */
+ public static double getPeriodInSeconds(Date start, Date end) {
+ return (end.getTime()-start.getTime())/1000;
+ }
+
+ /**
+ * Returns the number of hours between the two given dates
+ * @param start Start date
+ * @param end End date
+ * @return period in hours
+ */
+ public static double getPeriodInHours(Date start, Date end) {
+ return getPeriodInSeconds(start, end)/3600;
+ }
+
}
1
0
10 Jul '13
Author: meynier
Date: 2013-07-10 14:09:21 +0200 (Wed, 10 Jul 2013)
New Revision: 362
Url: http://chorem.org/projects/chorem/repository/revisions/362
Log:
Add method to get all the takss from a quotation
Modified:
trunk/chorem-entities/src/main/java/org/chorem/ChoremClient.java
Modified: trunk/chorem-entities/src/main/java/org/chorem/ChoremClient.java
===================================================================
--- trunk/chorem-entities/src/main/java/org/chorem/ChoremClient.java 2013-07-08 16:19:24 UTC (rev 361)
+++ trunk/chorem-entities/src/main/java/org/chorem/ChoremClient.java 2013-07-10 12:09:21 UTC (rev 362)
@@ -35,6 +35,7 @@
import org.chorem.entities.Quotation;
import org.chorem.entities.Quotation18Migration;
import org.chorem.entities.QuotationMigration;
+import org.chorem.entities.Task;
import org.nuiton.util.ApplicationConfig;
import org.nuiton.wikitty.WikittyClient;
import org.nuiton.wikitty.WikittyService;
@@ -170,6 +171,7 @@
exts.addAll(org.chorem.entities.CompanyAbstract.extensions);
exts.addAll(org.chorem.entities.ConfigurationAbstract.extensions);
exts.addAll(org.chorem.entities.ContactDetailsAbstract.extensions);
+ exts.addAll(org.chorem.entities.ContractAbstract.extensions);
exts.addAll(org.chorem.entities.DeliveredAbstract.extensions);
exts.addAll(org.chorem.entities.DraftAbstract.extensions);
exts.addAll(org.chorem.entities.EmployeeAbstract.extensions);
@@ -363,4 +365,23 @@
return result;
}
+
+
+ /**
+ * Fetch the task from the given quotation
+ * Simple wikitty query
+ * @param q Quotation
+ * @param client chorem client
+ * @return unmodifiable list of task from the quotation
+ */
+ public List<Task> getTasks(Quotation q) {
+ WikittyQuery taskQuery = new WikittyQueryMaker()
+ .eq(Task.ELEMENT_FIELD_TASK_QUOTATION, q)
+ .end();
+
+ taskQuery.addSortAscending(Quotation.ELEMENT_FIELD_INTERVAL_BEGINDATE);
+
+ WikittyQueryResult<Task> taskResult = findAllByQuery(Task.class, taskQuery);
+ return taskResult.getAll();
+ }
}
1
0
08 Jul '13
See <http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>
Changes:
[meynier] Added task calculations and enhanced alerts
------------------------------------------
[...truncated 435 lines...]
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] 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/…>
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] dashboardMultiProject.jsp~:2:33: The prefix "f" for element "f:setLocale" is not bound.
[Fatal Error] report.jsp~:5:40: The prefix "c" for element "c:if" is not bound.
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)
[Fatal Error] hr.jsp~:9:71: The prefix "jsp" for element "jsp:include" is not bound.
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)[Fatal Error] dashboardProfitability.jsp~:21:46: The prefix "c" for element "c:forEach" is not bound.
... 4 more
[ERROR] could not parse file <http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>
[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
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
[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
[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
[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: 33; The prefix "f" for element "f:setLocale" 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: 33; The prefix "f" for element "f:setLocale" 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 35 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/…>:[14,42] error: cannot find symbol
[ERROR] symbol: class Calculation
<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>:[71,22] error: type argument QuotationCalculation is not within bounds of type-variable V
[ERROR] where V is a type-variable:
V extends Object declared in class HashMap
<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>:[71,82] error: type argument QuotationCalculation is not within bounds of type-variable V
[ERROR] where V is a type-variable:
V extends Object declared in class HashMap
<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>:[72,17] error: cannot find symbol
[ERROR] symbol: class TaskCalculation
location: class DashboardProjectAction
<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>:[72,63] error: cannot find symbol
[ERROR] symbol: class TaskCalculation
location: class DashboardProjectAction
<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>:[82,4] error: cannot find symbol
[ERROR] symbol: class TaskCalculation
location: class DashboardProjectAction
<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>:[82,29] error: cannot find symbol
[ERROR] symbol: class TaskCalculation
location: class DashboardProjectAction
<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>:[90,7] error: cannot find symbol
[ERROR] symbol: method setSrp(double)
location: variable calc of type QuotationCalculation
<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>:[91,7] error: cannot find symbol
[ERROR] symbol: method calculate()
location: variable calc of type QuotationCalculation
<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>:[124,21] error: type argument QuotationCalculation is not within bounds of type-variable V
[ERROR] where V is a type-variable:
V extends Object declared in class HashMap
<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>:[124,81] error: type argument QuotationCalculation is not within bounds of type-variable V
[ERROR] where V is a type-variable:
V extends Object declared in class HashMap
<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>:[125,16] error: cannot find symbol
[ERROR] symbol: class TaskCalculation
location: class DashboardProjectAction
<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>:[125,62] error: cannot find symbol
[ERROR] symbol: class TaskCalculation
location: class DashboardProjectAction
<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>:[170,7] error: cannot find symbol
[ERROR] symbol: class TaskCalculation
location: class DashboardProjectAction
<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>:[170,32] error: cannot find symbol
[ERROR] symbol: class TaskCalculation
location: class DashboardProjectAction
<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>:[179,10] error: cannot find symbol
[ERROR] symbol: method setSrp(double)
location: variable calc of type QuotationCalculation
<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>:[180,10] error: cannot find symbol
[ERROR] symbol: method calculate()
location: variable calc of type QuotationCalculation
<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>:[280,21] error: type argument QuotationCalculation is not within bounds of type-variable V
[ERROR] where V is a type-variable:
V extends Object declared in class HashMap
<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>:[280,81] error: type argument QuotationCalculation is not within bounds of type-variable V
[ERROR] where V is a type-variable:
V extends Object declared in class HashMap
<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>:[283,7] error: cannot find symbol
[ERROR] symbol: method setSrp(double)
location: variable calc of type QuotationCalculation
<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>:[284,7] error: cannot find symbol
[ERROR] symbol: method calculate()
location: variable calc of type QuotationCalculation
<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>:[23,5] error: cannot find symbol
[ERROR] symbol: variable e
location: class QuotationCalculation
<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>:[26,42] error: cannot find symbol
[ERROR] symbol: variable e
location: class QuotationCalculation
<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>:[30,5] error: cannot find symbol
[ERROR] symbol: variable client
location: class QuotationCalculation
<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>:[36,42] error: cannot find symbol
[ERROR] symbol: variable client
location: class QuotationCalculation
<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>:[42,6] error: cannot find symbol
[ERROR] symbol: method getPeriodInSeconds(Date,Date)
location: class QuotationCalculation
<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>:[42,59] error: cannot find symbol
[ERROR] symbol: variable SEC_PER_HOUR
location: class QuotationCalculation
<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>:[43,17] error: cannot find symbol
[ERROR] symbol: method getPeriodInSeconds(Date,Date)
location: class QuotationCalculation
<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>:[45,23] error: cannot find symbol
[ERROR] symbol: variable SEC_PER_HOUR
location: class QuotationCalculation
<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>:[45,39] error: cannot find symbol
[ERROR] symbol: variable WORKING_HOURS_PER_DAY
location: class QuotationCalculation
<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>:[50,42] error: cannot find symbol
[ERROR] symbol: variable e
location: class QuotationCalculation
<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>:[54,5] error: cannot find symbol
[ERROR] symbol: variable client
location: class QuotationCalculation
<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>:[60,10] error: cannot find symbol
[ERROR] symbol: variable nbDays
location: class QuotationCalculation
<http://ci.nuiton.org/jenkins/job/chorem/org.chorem.chorem$chorem-webmotion/…>:[20,1] error: method does not override or implement a method from a supertype
[INFO] 34 errors
[INFO] -------------------------------------------------------------
1
2