Jtimer-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
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
July 2014
- 1 participants
- 14 discussions
r3022 - in branches/ng-jtimer/src/main: java/org/chorem/jtimer/storage java/org/chorem/jtimer/utils webapp/js webapp/partials
by obruce@users.chorem.org 29 Jul '14
by obruce@users.chorem.org 29 Jul '14
29 Jul '14
Author: obruce
Date: 2014-07-29 10:40:59 +0200 (Tue, 29 Jul 2014)
New Revision: 3022
Url: http://forge.chorem.org/projects/jtimer/repository/revisions/3022
Log:
Report: ajout de la v?\195?\169rification si temps dans les enfants
Modified:
branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java
branches/ng-jtimer/src/main/java/org/chorem/jtimer/utils/ReportTask.java
branches/ng-jtimer/src/main/webapp/js/controllers.js
branches/ng-jtimer/src/main/webapp/partials/reportModal.html
Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java
===================================================================
--- branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java 2014-07-28 16:09:16 UTC (rev 3021)
+++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java 2014-07-29 08:40:59 UTC (rev 3022)
@@ -546,7 +546,7 @@
*/
public HashMap<String, ReportTask> getReportByProject(Long startDate, Long endDate, String[] toReport){
- HashMap<String, ReportTask> map = new HashMap();
+ HashMap<String, ReportTask> map = new HashMap<>();
PreparedStatement statement = null;
@@ -562,10 +562,9 @@
String name = rs.getString("name");
String taskId = rs.getString("taskId");
- String parent=rs.getString("parent");
long totalDuration = rs.getLong("totalduration");
- ReportTask task = new ReportTask(name,taskId,parent,totalDuration);
+ ReportTask task = new ReportTask(name,taskId,totalDuration);
map.put(taskId, task);
}
@@ -609,10 +608,9 @@
String name = rs.getString("name");
String taskId = rs.getString("taskId");
- String parent=rs.getString("parent");
long totalDuration = rs.getLong("totalduration");
- ReportTask task = new ReportTask(name,taskId,parent,totalDuration);
+ ReportTask task = new ReportTask(name,taskId,totalDuration);
//On ajoute le resultat: year, set de reportTask
res.get(period).add(task);
@@ -656,10 +654,9 @@
String name = rs.getString("name");
String taskId = rs.getString("taskId");
- String parent=rs.getString("parent");
long totalDuration = rs.getLong("totalduration");
- ReportTask task = new ReportTask(name,taskId,parent,totalDuration);
+ ReportTask task = new ReportTask(name,taskId,totalDuration);
//On ajoute le resultat: year, set de reportTask
res.get(period).add(task);
@@ -698,10 +695,9 @@
String name = rs.getString("name");
String taskId = rs.getString("taskId");
- String parent=rs.getString("parent");
long totalDuration = rs.getLong("totalduration");
- ReportTask task = new ReportTask(name,taskId,parent,totalDuration);
+ ReportTask task = new ReportTask(name,taskId,totalDuration);
//On ajoute le resultat: year, set de reportTask
res.get(period).add(task);
@@ -747,10 +743,9 @@
String name = rs.getString("name");
String taskId = rs.getString("taskId");
- String parent=rs.getString("parent");
long totalDuration = rs.getLong("totalduration");
- ReportTask task = new ReportTask(name,taskId,parent,totalDuration);
+ ReportTask task = new ReportTask(name,taskId,totalDuration);
//On ajoute le resultat: year, set de reportTask
res.get(year).add(task);
Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/utils/ReportTask.java
===================================================================
--- branches/ng-jtimer/src/main/java/org/chorem/jtimer/utils/ReportTask.java 2014-07-28 16:09:16 UTC (rev 3021)
+++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/utils/ReportTask.java 2014-07-29 08:40:59 UTC (rev 3022)
@@ -4,8 +4,6 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import java.util.ArrayList;
-
/**
* Created by olivia on 16/06/14.
* <p/>
@@ -20,31 +18,19 @@
/** Le nom de la tache*/
@Expose protected String name;
@Expose protected String taskId;
- @Expose protected String parentId;
- protected ReportTask rtParent; //to be omitted in serialization
-
@Expose protected long selftime;
- @Expose protected long childtime;
- @Expose protected ArrayList<ReportTask> subtasks;
-
/**
* Constructeur
* @param name le nom
* @param taskId l'identifiant
- * @param parent l'identifiant du parent
* @param selftime le temps
*/
- public ReportTask(String name, String taskId, String parent, long selftime){
+ public ReportTask(String name, String taskId, long selftime){
this.taskId = taskId;
this.name = name;
- this.parentId = parent;
this.selftime = selftime;
- this.childtime = 0;
- this.rtParent = null;
-
- this.subtasks = new ArrayList();
}
/**
@@ -54,45 +40,10 @@
public ReportTask(ReportTask other){
this.taskId = other.taskId;
this.name = other.name;
- this.parentId = other.parentId;
this.selftime = other.selftime;
- this.childtime = 0;
- this.rtParent = null;
-
- this.subtasks = new ArrayList();
}
- /** Ajout */
- public void addChild(ReportTask t){
- this.subtasks.add(t);
- }
-
- /**
- * Ajout de temps d'un enfant
- */
- public void addChildTime(long t){
-
- if(hasParent()) {
-
- rtParent.addChildTime(t);
- }
- this.childtime +=t;
- }
-
-
- /**
- * Ajout de temps d'un enfant
- */
- public void removeChildTime(long t){
-
- if(hasParent()) {
-
- rtParent.removeChildTime(t);
- }
- this.childtime -=t;
- }
-
/**Getter */
public String getTaskId() {
@@ -103,46 +54,16 @@
return name;
}
- public String getParentId() {
- return parentId;
- }
-
-
- public ReportTask getRtParent() {
- return rtParent;
- }
-
- public void setRtParent(ReportTask reportTask) {
- this.rtParent = reportTask;
- }
-
- public boolean hasParent(){ return this.rtParent != null;}
-
public long getSelftime() {
return selftime;
}
- public long getChildtime() {
- return childtime;
- }
-
- public ArrayList<ReportTask> getSubtasks() {
- return subtasks;
- }
-
- public void setSelfTime(long selfTime) {
- this.selftime = selfTime;
- }
-
@Override
public String toString() {
return "ReportTask{" +
"name='" + name + '\'' +
", taskId='" + taskId + '\'' +
- ", parent='" + parentId + '\'' +
", selftime=" + selftime +
- ", childtime=" + childtime +
- ", subtasks=" + subtasks +
'}';
}
@@ -152,13 +73,13 @@
int hash = 1;
hash = hash * 17 + name.hashCode();
hash = hash * 31 + taskId.hashCode();
- hash = hash * 13 + parentId.hashCode();
return hash;
}
@Override
public boolean equals(Object obj) {
+
return this.taskId.equals(((ReportTask)obj).getTaskId());
}
}
Modified: branches/ng-jtimer/src/main/webapp/js/controllers.js
===================================================================
--- branches/ng-jtimer/src/main/webapp/js/controllers.js 2014-07-28 16:09:16 UTC (rev 3021)
+++ branches/ng-jtimer/src/main/webapp/js/controllers.js 2014-07-29 08:40:59 UTC (rev 3022)
@@ -1363,6 +1363,27 @@
return res;
};
+ /**
+ *
+ */
+ $scope.hasSelfOrChildTime= function(collection, node, bool){
+
+ if(!bool){
+
+ if(collection[node.task.taskId]){
+ bool = true;
+ }else{
+ angular.forEach(node.children, function(child){
+ bool = $scope.hasSelfOrChildTime(collection, child, bool);
+ });
+ }
+
+ }
+
+ return bool;
+ };
+
+
/**
* Method that returns the total time for a task
*/
@@ -1431,6 +1452,8 @@
period=tmp;
}
+
+
if( $scope.modal.radioModel=='Day'){
var monthArray= ["", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
@@ -1439,6 +1462,7 @@
period = tmp[0] +" "+ monthArray[parseInt(tmp[2])] +" " +tmp[4];
}
+
$scope.taskData[period]={};
angular.forEach(array, function(task){
$scope.taskData[period][task.taskId]=task.selftime;
Modified: branches/ng-jtimer/src/main/webapp/partials/reportModal.html
===================================================================
--- branches/ng-jtimer/src/main/webapp/partials/reportModal.html 2014-07-28 16:09:16 UTC (rev 3021)
+++ branches/ng-jtimer/src/main/webapp/partials/reportModal.html 2014-07-29 08:40:59 UTC (rev 3022)
@@ -126,7 +126,7 @@
<br/>
</div>
- <div class="tr" ng-show="taskData[$node.task.taskId].selftime || ($node.task.isRoot() && getTotalProjectTime($node,0) != 0 )">
+ <div class="tr" ng-show="taskData[$node.task.taskId].selftime || hasSelfOrChildTime(taskData,$node,false) || ($node.task.isRoot() && getTotalProjectTime($node,0) != 0 )">
<div class="td" >
<span class="spacer level{{$level}}"></span>
@@ -162,7 +162,7 @@
wt-tree-repeat="tree | orderBy:'task.name'"
wt-force-open="true">
- <div class="tr" ng-show="taskData[period][$node.task.taskId] || ($node.task.isRoot() && getTotalPeriodTime($node,0, period) != 0 ) ">
+ <div class="tr" ng-show="hasSelfOrChildTime(taskData[period],$node,false) || ($node.task.isRoot() && getTotalPeriodTime($node,0, period) != 0 ) ">
<div class="td" >
<span class="spacer level{{$level}}"></span>
1
0
r3021 - in branches/ng-jtimer/src/main: java/org/chorem/jtimer/config java/org/chorem/jtimer/storage java/org/chorem/jtimer/web resources webapp/js webapp/partials
by obruce@users.chorem.org 28 Jul '14
by obruce@users.chorem.org 28 Jul '14
28 Jul '14
Author: obruce
Date: 2014-07-28 18:09:16 +0200 (Mon, 28 Jul 2014)
New Revision: 3021
Url: http://forge.chorem.org/projects/jtimer/repository/revisions/3021
Log:
Report: changement g?\195?\169n?\195?\169ral utilisation du path pour toutes les requetes
Modified:
branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfig.java
branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfigOption.java
branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java
branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/ReportResource.java
branches/ng-jtimer/src/main/resources/jtimer-default.properties
branches/ng-jtimer/src/main/webapp/js/controllers.js
branches/ng-jtimer/src/main/webapp/js/entities.js
branches/ng-jtimer/src/main/webapp/partials/reportModal.html
Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfig.java
===================================================================
--- branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfig.java 2014-07-23 15:46:46 UTC (rev 3020)
+++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfig.java 2014-07-28 16:09:16 UTC (rev 3021)
@@ -142,6 +142,27 @@
public String getStorageQuerySelectRemovedTaskTime(){
return appConfig.getOption(JtimerConfigOption.JTIMER_STORAGE_SELECT_REMOVED_TASKTIME.getKey());
}
+ /** New Report Function **/
+ public String getStorageQuerySelectReportByProject(){
+ return appConfig.getOption(JtimerConfigOption.JTIMER_STORAGE_SELECT_REPORT_BYPROJECT.getKey());
+ }
+
+ public String getStorageQuerySelectReportByYear(){
+ return appConfig.getOption(JtimerConfigOption.JTIMER_STORAGE_SELECT_REPORT_BYYEAR.getKey());
+ }
+
+ public String getStorageQuerySelectReportByMonth(){
+ return appConfig.getOption(JtimerConfigOption.JTIMER_STORAGE_SELECT_REPORT_BYMONTH.getKey());
+ }
+
+ public String getStorageQuerySelectReportByWeek(){
+ return appConfig.getOption(JtimerConfigOption.JTIMER_STORAGE_SELECT_REPORT_BYWEEK.getKey());
+ }
+
+ public String getStorageQuerySelectReportByDay(){
+ return appConfig.getOption(JtimerConfigOption.JTIMER_STORAGE_SELECT_REPORT_BYDAY.getKey());
+ }
+
public String getStorageQuerySelectReportTasks(){
return appConfig.getOption(JtimerConfigOption.JTIMER_STORAGE_SELECT_REPORT_TIMEDTASKS.getKey());
}
@@ -151,6 +172,12 @@
public String getStorageQuerySelectReportWeekTimedTasks(){
return appConfig.getOption(JtimerConfigOption.JTIMER_STORAGE_SELECT_REPORT_WEEK_TIMEDTASKS.getKey());
}
+ public String getStorageQuerySelectReportYearTimedTasks(){
+ return appConfig.getOption(JtimerConfigOption.JTIMER_STORAGE_SELECT_REPORT_YEAR_TIMEDTASKS.getKey());
+ }
+ public String getStorageQuerySelectReportMonthTimedTasks(){
+ return appConfig.getOption(JtimerConfigOption.JTIMER_STORAGE_SELECT_REPORT_MONTH_TIMEDTASKS.getKey());
+ }
public String getStorageQuerySelectAlarmOnDate(){
return appConfig.getOption(JtimerConfigOption.JTIMER_STORAGE_SELECT_ALARM_ONDATE.getKey());
}
Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfigOption.java
===================================================================
--- branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfigOption.java 2014-07-23 15:46:46 UTC (rev 3020)
+++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfigOption.java 2014-07-28 16:09:16 UTC (rev 3021)
@@ -148,6 +148,36 @@
"",
String.class
),
+ JTIMER_STORAGE_SELECT_REPORT_BYPROJECT(
+ "jtimer.storage.select.report.byProject",
+ "requête de selection des taches minutées entre deux bornes filtrer par projet",
+ "",
+ String.class
+ ),
+ JTIMER_STORAGE_SELECT_REPORT_BYYEAR(
+ "jtimer.storage.select.report.byYear",
+ "requête de selection des taches minutées entre deux bornes filtrer par year",
+ "",
+ String.class
+ ),
+ JTIMER_STORAGE_SELECT_REPORT_BYMONTH(
+ "jtimer.storage.select.report.byMonth",
+ "requête de selection des taches minutées entre deux bornes filtrer par month",
+ "",
+ String.class
+ ),
+ JTIMER_STORAGE_SELECT_REPORT_BYWEEK(
+ "jtimer.storage.select.report.byWeek",
+ "requête de selection des taches minutées entre deux bornes filtrer par semaine",
+ "",
+ String.class
+ ),
+ JTIMER_STORAGE_SELECT_REPORT_BYDAY(
+ "jtimer.storage.select.report.byDay",
+ "requête de selection des taches minutées entre deux bornes filtrer par jour",
+ "",
+ String.class
+ ),
JTIMER_STORAGE_SELECT_REPORT_TIMEDTASKS(
"jtimer.storage.select.report.timedtasks",
"requête de selection des taches minutées entre deux bornes",
@@ -166,6 +196,18 @@
"",
String.class
),
+ JTIMER_STORAGE_SELECT_REPORT_YEAR_TIMEDTASKS(
+ "jtimer.storage.select.report.year.timedtasks",
+ "requête de selection des taches minutees sur une annee",
+ "",
+ String.class
+ ),
+ JTIMER_STORAGE_SELECT_REPORT_MONTH_TIMEDTASKS(
+ "jtimer.storage.select.report.month.timedtasks",
+ "requête de selection des taches minutees sur un mois",
+ "",
+ String.class
+ ),
JTIMER_STORAGE_SELECT_ALARM_ONDATE(
"jtimer.storage.select.alarm.ondate",
"requête de selection des alarmes ",
Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java
===================================================================
--- branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java 2014-07-23 15:46:46 UTC (rev 3020)
+++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java 2014-07-28 16:09:16 UTC (rev 3021)
@@ -542,22 +542,23 @@
* Methode qui retourne les taches minutees entre deux bornes par projet
* @param startDate la borne inferieur
* @param endDate la borne superieur
- * @return un hashmap {key: parentId, value: array of task}
+ * @return un hashmap {key: Id, value: task}
*/
- public HashMap<String, Set<ReportTask>> getReportByProject(Long startDate, Long endDate){
+ public HashMap<String, ReportTask> getReportByProject(Long startDate, Long endDate, String[] toReport){
- Set<String> parentSet = new HashSet<String>(); //Set des parents pour eviter les doublons
- HashMap map = new HashMap();
+ HashMap<String, ReportTask> map = new HashMap();
+
PreparedStatement statement = null;
- PreparedStatement statement2 = null;
+
try{
- statement = connection.prepareStatement(config.getStorageQuerySelectReportTasks());
+ statement = connection.prepareStatement(config.getStorageQuerySelectReportByProject());
statement.setObject(1, new Date(startDate));
statement.setObject(2, new Date(endDate));
+ statement.setObject(3, toReport);
ResultSet rs = statement.executeQuery();
- while(rs.next()){
+ while(rs.next()) {
String name = rs.getString("name");
String taskId = rs.getString("taskId");
@@ -566,98 +567,91 @@
ReportTask task = new ReportTask(name,taskId,parent,totalDuration);
- if(!parent.equals("")) {
- parentSet.add(rs.getString("parent"));
- }
+ map.put(taskId, task);
+ }
- //Arraylist of reportask for the map
- Set tmp = new HashSet();
- if(map.containsKey(rs.getString("parent"))){
- tmp = (HashSet) map.get(rs.getString("parent"));
- }
- tmp.add(task);
+ }catch(SQLException ex) {
+ throw new StorageException("Can't get report", ex);
+ } finally {
+ closeStatement(statement);
+ }
- //add key: parentId value : the created reportTask
- map.put(rs.getString("parent"), tmp);
- }
- //Tant que tous les parents n'ont pas ete recupere on boucle
- while(!parentSet.isEmpty()) {
- //On va chercher les taches parent
- statement2 = connection.prepareStatement(config.getStorageQuerySelectParentTask());
- statement2.setObject(1, parentSet.toArray(new String[parentSet.size()]));
+ return map;
+ }
- //On vide le parentSet avant de verifier si les taches parentes ont des parents
- parentSet.clear();
+ /**
+ * Methode qui retourne les taches minutees entre deux bornes par jour
+ * @param startDate borne inferieur
+ * @param endDate la borne superieur
+ * @return un hashmap {key: parentId, value: array of task}
+ */
+ public HashMap<String,Set<ReportTask>> getReportByDay(Long startDate, Long endDate, String[] toReport){
+ HashMap<String,Set<ReportTask>> res = new HashMap<>();
+ PreparedStatement statement = null;
- //On execute la requete
- rs = statement2.executeQuery();
+ try{
+ statement = connection.prepareStatement(config.getStorageQuerySelectReportByDay());
+ // les bornes
+ statement.setObject(1, new Date(startDate));
+ statement.setObject(2, new Date(endDate));
+ statement.setObject(3, toReport);
- while (rs.next()) {
+ ResultSet rs = statement.executeQuery();
+ while(rs.next()) {
- String name = rs.getString("name");
- String taskId = rs.getString("taskId");
- String parent=rs.getString("parent");
- long totalDuration = (long) 0;
+ String period = rs.getString("day")+" - " +rs.getString("month") +" - "+ rs.getString("year");
- ReportTask task = new ReportTask(name,taskId,parent,totalDuration);
+ //Si le Year n'est pas présent
+ if(res.get(period)==null) {
+ res.put(period, new HashSet<ReportTask>());
+ }
- //On ajoute le parent de la tache au set
- if(!parent.equals("")) {
- parentSet.add(rs.getString("parent"));
- }
+ String name = rs.getString("name");
+ String taskId = rs.getString("taskId");
+ String parent=rs.getString("parent");
+ long totalDuration = rs.getLong("totalduration");
- Set tmp = new HashSet();
- if (map.containsKey(rs.getString("parent"))) {
- tmp = (HashSet) map.get(rs.getString("parent"));
- }
- tmp.add(task);
- map.put(rs.getString("parent"), tmp);
+ ReportTask task = new ReportTask(name,taskId,parent,totalDuration);
- }
+ //On ajoute le resultat: year, set de reportTask
+ res.get(period).add(task);
}
}catch(SQLException ex) {
throw new StorageException("Can't get report", ex);
} finally {
closeStatement(statement);
- closeStatement(statement2);
}
- return map;
+ return res;
}
-
/**
* Methode qui retourne les taches minutees entre deux bornes par semaine
* @param startDate borne inferieur
* @param endDate la borne superieur
* @return un hashmap {key: parentId, value: array of task}
*/
- public HashMap<Integer,HashMap<String, Set<ReportTask>>> getReportByWeek(Long startDate, Long endDate){
+ public HashMap<String,Set<ReportTask>> getReportByWeek(Long startDate, Long endDate, String[] toReport){
+ HashMap<String,Set<ReportTask>> res = new HashMap<>();
+ PreparedStatement statement = null;
- //Le resultat sous forme string parent, array de reportTask
- HashMap<Integer,HashMap<String, Set<ReportTask>>> res = new HashMap<>();
-
- HashMap<Integer, Set<String>> parentWeekHash = new HashMap<>();
-
- PreparedStatement statement = null;
- PreparedStatement statement2 = null;
try{
- //Les taches minutees sur les differentes semaines
- statement = connection.prepareStatement(config.getStorageQuerySelectReportWeekTimedTasks());
-
+ statement = connection.prepareStatement(config.getStorageQuerySelectReportByWeek());
+ // les bornes
statement.setObject(1, new Date(startDate));
statement.setObject(2, new Date(endDate));
+ statement.setObject(3, toReport);
ResultSet rs = statement.executeQuery();
-
while(rs.next()) {
- int week = rs.getInt("week");
- //Si la week n'est pas présent
- if(res.get(week)==null) {
- res.put(week, new HashMap<String, Set<ReportTask>>());
+ String period = rs.getString("week") +" - "+ rs.getString("year");
+
+ //Si le Year n'est pas présent
+ if(res.get(period)==null) {
+ res.put(period, new HashSet<ReportTask>());
}
String name = rs.getString("name");
@@ -667,83 +661,105 @@
ReportTask task = new ReportTask(name,taskId,parent,totalDuration);
- //On ajoute les elements au set du resultat
- Set tmp;
- if(res.containsKey(week) && res.get(week).containsKey(parent)){
- tmp = (Set)res.get(week).get(parent);
- }else{
- tmp=new HashSet<>();
- }
- tmp.add(task);
+ //On ajoute le resultat: year, set de reportTask
+ res.get(period).add(task);
+ }
- //On ajoute le resultat: week, set de reportTask
- res.get(week).put(parent, tmp);
+ }catch(SQLException ex) {
+ throw new StorageException("Can't get report", ex);
+ } finally {
+ closeStatement(statement);
+ }
- //On ajoute le parent pour le week au set de parent
- Set tmp2;
- if (parentWeekHash.containsKey(week)) {
- tmp2 = (Set)parentWeekHash.get(week);
- }else{
- tmp2=new HashSet<>();
+ return res;
+ }
+
+ public HashMap<String,Set<ReportTask>> getReportByMonth(Long startDate, Long endDate, String[] toReport){
+
+ HashMap<String,Set<ReportTask>> res = new HashMap<>();
+ PreparedStatement statement = null;
+
+ try{
+ statement = connection.prepareStatement(config.getStorageQuerySelectReportByMonth());
+ // les bornes
+ statement.setObject(1, new Date(startDate));
+ statement.setObject(2, new Date(endDate));
+ statement.setObject(3, toReport);
+
+ ResultSet rs = statement.executeQuery();
+ while(rs.next()) {
+
+ String period = rs.getString("month") +" - "+ rs.getString("year");
+
+ //Si le Year n'est pas présent
+ if(res.get(period)==null) {
+ res.put(period, new HashSet<ReportTask>());
}
- tmp2.add(parent);
- parentWeekHash.put(week,tmp2);
+ String name = rs.getString("name");
+ String taskId = rs.getString("taskId");
+ String parent=rs.getString("parent");
+ long totalDuration = rs.getLong("totalduration");
+ ReportTask task = new ReportTask(name,taskId,parent,totalDuration);
+
+ //On ajoute le resultat: year, set de reportTask
+ res.get(period).add(task);
}
- Set<Integer> keySet = parentWeekHash.keySet();
- // not timed tasks
- for(Integer key : keySet){
+ }catch(SQLException ex) {
+ throw new StorageException("Can't get report", ex);
+ } finally {
+ closeStatement(statement);
+ }
- //Tant que tous les parents n'ont pas ete recupere on boucle
- while(!parentWeekHash.get(key).isEmpty()) {
- //On va chercher les taches parent
- statement2 = connection.prepareStatement(config.getStorageQuerySelectParentTask());
- statement2.setObject(1, parentWeekHash.get(key).toArray(new String[parentWeekHash.get(key).size()]));
+ return res;
+ }
- //On vide le parentSet avant de verifier si les taches parentes ont des parents
- parentWeekHash.get(key).clear();
+ /**
+ * Method that returns the collection of timed tasks
+ * @param startDate the start date
+ * @param endDate the end date
+ * @param toReport task to be reported
+ * @return the collection of timed tasks
+ */
+ public HashMap<String,Set<ReportTask>> getReportByYear(Long startDate, Long endDate, String[] toReport){
- //On execute la requete
- rs = statement2.executeQuery();
+ HashMap<String,Set<ReportTask>> res = new HashMap<>();
+ PreparedStatement statement = null;
- while (rs.next()) {
+ try{
+ statement = connection.prepareStatement(config.getStorageQuerySelectReportByYear());
+ // les bornes
+ statement.setObject(1, new Date(startDate));
+ statement.setObject(2, new Date(endDate));
+ statement.setObject(3, toReport);
- String name = rs.getString("name");
- String taskId = rs.getString("taskId");
- String parent=rs.getString("parent");
- long totalDuration = (long) 0;
+ ResultSet rs = statement.executeQuery();
+ while(rs.next()) {
- ReportTask task = new ReportTask(name,taskId,parent,totalDuration);
+ String year = rs.getString("year");
- //On ajoute le parent de la tache au set
- if(!parent.equals("")) {
- parentWeekHash.get(key).add(rs.getString("parent"));
- }
+ //Si le Year n'est pas présent
+ if(res.get(year)==null) {
+ res.put(year, new HashSet<ReportTask>());
+ }
- //On ajoute les elements au set du resultat
- Set tmp;
- if (res.get(key).containsKey(parent)) {
- tmp = (Set)res.get(key).get(parent);
- }else{
- tmp=new HashSet<>();
- }
- tmp.add(task);
+ String name = rs.getString("name");
+ String taskId = rs.getString("taskId");
+ String parent=rs.getString("parent");
+ long totalDuration = rs.getLong("totalduration");
- //On ajoute le resultat: week, set de reportTask
- res.get(key).put(parent, tmp);
+ ReportTask task = new ReportTask(name,taskId,parent,totalDuration);
- }
- }
+ //On ajoute le resultat: year, set de reportTask
+ res.get(year).add(task);
}
-
}catch(SQLException ex) {
throw new StorageException("Can't get report", ex);
} finally {
closeStatement(statement);
- closeStatement(statement2);
}
return res;
Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/ReportResource.java
===================================================================
--- branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/ReportResource.java 2014-07-23 15:46:46 UTC (rev 3020)
+++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/ReportResource.java 2014-07-28 16:09:16 UTC (rev 3021)
@@ -6,7 +6,6 @@
import org.apache.commons.logging.LogFactory;
import org.chorem.jtimer.storage.Storage;
import org.chorem.jtimer.utils.ReportTask;
-import org.restlet.data.MediaType;
import org.restlet.representation.Representation;
import org.restlet.representation.StringRepresentation;
import org.restlet.resource.Post;
@@ -44,84 +43,72 @@
*/
@Post("json")
public Representation getReport(Representation representation) throws IOException {
- ArrayList toReport = new ArrayList();
+ // Les elements voulus par l'interface
+ String[] toReport;
- if(representation.isAvailable()) {
- String repr1 = representation.getText();
- Gson gson = new Gson();
- toReport = gson.fromJson(repr1, ArrayList.class);
- }
+ String repr1 = representation.getText();
+ Gson gson = new Gson();
+ toReport = gson.fromJson(repr1, String[].class);
- String json="[]";
+
+ String json="[No data]";
String type ="";
- long startDate = (long) 0;
- long endDate = Long.MAX_VALUE;
+ long startDate;
+ long endDate;
try {
type = String.valueOf(getQuery().getValues("type"));
log.info("type " +type);
} catch (Exception e) {
log.info("Rapport : type non present dans l'url" + e);
+
}
try {
startDate = Long.valueOf(getQuery().getValues("start_Date"));
log.info("start" +startDate);
} catch (Exception e) {
log.info("Rapport : startDate non present dans l'url" + e);
+ startDate = (long) 0;
}
try {
endDate = Long.valueOf(getQuery().getValues("end_Date"));
log.info("end" +endDate);
} catch (Exception e) {
log.info("Rapport : endDate non present dans l'url" + e);
+ endDate = Long.MAX_VALUE;
}
//On ne recupere que les elements interessants
- Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
+ gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
if(type.equals("Project")) {
- HashMap<String, Set<ReportTask>> storedTask = storage.getReportByProject(startDate, endDate);
- ArrayList<ReportTask> res = new ArrayList<>(); //l'arraylist de resultat
+ HashMap<String, ReportTask> storedTask = storage.getReportByProject(startDate, endDate,toReport);
+ json = gson.toJson(storedTask, HashMap.class);
- if(!storedTask.isEmpty()) {
- //On parcours le map récupérer de la base pour recéer l'arbre
- for (ReportTask rt : storedTask.get("")) {
- recursivSortTask(storedTask, rt, res);
- }
+ }else if(type.equals("Day")){
- //On enleve les éléments non voulus
- recursiveRemoveUnreportedTask(res, toReport);
+ HashMap storedTask = storage.getReportByDay(startDate, endDate, toReport);
+ json = gson.toJson(storedTask, HashMap.class);
- }
+ }else if(type.equals("Month")){
- json = gson.toJson(res, ArrayList.class);
+ HashMap storedTask = storage.getReportByMonth(startDate, endDate, toReport);
+ json = gson.toJson(storedTask, HashMap.class);
- }
+ }else if(type.equals("Week")){
- if(type.equals("Week")) {
- HashMap<Integer, HashMap<String, Set<ReportTask>>> storedTask = storage.getReportByWeek(startDate, endDate);
- HashMap<Integer, ArrayList<ReportTask>> res = new HashMap<>();
+ HashMap storedTask = storage.getReportByWeek(startDate, endDate, toReport);
+ json = gson.toJson(storedTask, HashMap.class);
- Iterator iter = storedTask.keySet().iterator();
- while (iter.hasNext()) {
- Integer key = (Integer) iter.next();
+ }else if(type.equals("Year")){
- ArrayList<ReportTask> tmp = new ArrayList<>();
+ HashMap storedTask = storage.getReportByYear(startDate, endDate,toReport);
+ json = gson.toJson(storedTask, HashMap.class);
- for (ReportTask rt : storedTask.get(key).get("")) {
- recursivSortTask(storedTask.get(key), rt, tmp);
- }
- recursiveRemoveUnreportedTask(tmp, (ArrayList<String>) toReport.clone());
-
- res.put(key, tmp);
- }
-
-
- json = gson.toJson(res, HashMap.class);
}
- return new StringRepresentation(json, MediaType.TEXT_HTML);
+ return new StringRepresentation(json);
}
/**
Modified: branches/ng-jtimer/src/main/resources/jtimer-default.properties
===================================================================
--- branches/ng-jtimer/src/main/resources/jtimer-default.properties 2014-07-23 15:46:46 UTC (rev 3020)
+++ branches/ng-jtimer/src/main/resources/jtimer-default.properties 2014-07-28 16:09:16 UTC (rev 3021)
@@ -2,7 +2,7 @@
# jTimer default properties
###
# jTimer storage path
-jtimer.storage.path=/home/olivia/Bureau/jtimer/jtimer/BDDNewDepart
+jtimer.storage.path=/home/olivia/Bureau/jtimer/jtimer/BDDNNe
###
# SQL properties
###
@@ -96,16 +96,76 @@
AND TI.creationDate BETWEEN ? AND ? \
AND TA.removed = 0 \
GROUP BY TA.taskId
+jtimer.storage.select.report.rootTask=SELECT TA.* AS totalduration \
+ FROM task TA \
+ WHERE TA.taskId = TI.taskid \
+ AND TI.creationDate BETWEEN ? AND ? \
+ AND ARRAY_LENGTH(TA.path) = 1 \
+ AND TA.removed = 0 \
+ GROUP BY TA.taskId
+jtimer.storage.select.report.byProject=SELECT TA.*, sum(TI.duration) AS totalduration \
+ FROM task TA, tasktime TI \
+ WHERE TA.taskId = TI.taskid \
+ AND TI.creationDate BETWEEN ? AND ? \
+ AND ARRAY_CONTAINS(?, TA.taskid) \
+ AND TA.removed = 0 \
+ GROUP BY TA.taskId
+jtimer.storage.select.report.byYear=SELECT YEAR(TI.creationDate) as year, TA.*, sum(TI.duration) AS totalduration \
+ FROM task TA, tasktime TI \
+ WHERE TA.taskId = TI.taskid \
+ AND TI.creationDate BETWEEN ? AND ? \
+ AND ARRAY_CONTAINS(TA.path, TA.taskid) \
+ AND ARRAY_CONTAINS(?, TA.taskid) \
+ AND TA.removed = 0 \
+ GROUP BY TA.taskId , year
+jtimer.storage.select.report.byMonth=SELECT MONTH(TI.creationDate) as month, YEAR(TI.creationDate) as year, TA.*, sum(TI.duration) AS totalduration \
+ FROM task TA, tasktime TI \
+ WHERE TA.taskId = TI.taskid \
+ AND TI.creationDate BETWEEN ? AND ? \
+ AND ARRAY_CONTAINS(TA.path, TA.taskid) \
+ AND ARRAY_CONTAINS(?, TA.taskid) \
+ AND TA.removed = 0 \
+ GROUP BY TA.taskId , month, year
+jtimer.storage.select.report.byWeek=SELECT WEEK(TI.creationDate) as week,YEAR(TI.creationDate) as year, TA.*, sum(TI.duration) AS totalduration \
+ FROM task TA, tasktime TI \
+ WHERE TA.taskId = TI.taskid \
+ AND TI.creationDate BETWEEN ? AND ? \
+ AND ARRAY_CONTAINS(TA.path, TA.taskid) \
+ AND ARRAY_CONTAINS(?, TA.taskid) \
+ AND TA.removed = 0 \
+ GROUP BY TA.taskId , week, year
+jtimer.storage.select.report.byDay=SELECT EXTRACT(DAY FROM TI.creationDate) as day,MONTH(TI.creationDate) as month,YEAR(TI.creationDate) as year, TA.*, sum(TI.duration) AS totalduration \
+ FROM task TA, tasktime TI \
+ WHERE TA.taskId = TI.taskid \
+ AND TI.creationDate BETWEEN ? AND ? \
+ AND ARRAY_CONTAINS(TA.path, TA.taskid) \
+ AND ARRAY_CONTAINS(?, TA.taskid) \
+ AND TA.removed = 0 \
+ GROUP BY TA.taskId , day, month, year
jtimer.storage.select.report.roottasks=SELECT * \
FROM task \
WHERE (taskId not in (SELECT taskid FROM tasktime) AND removed = 0 )
-jtimer.storage.select.report.week.timedtasks=SELECT WEEK(TI.creationDate) as week, TA.* , sum(TI.duration) AS totalduration \
+jtimer.storage.select.report.week.timedtasks=SELECT WEEK(TI.creationDate) as week, YEAR(TI.creationDate) as year, TA.* , sum(TI.duration) AS totalduration \
FROM task TA, tasktime TI \
WHERE TA.taskId = TI.taskid \
AND TI.creationDate BETWEEN ? AND ? \
AND TA.removed = 0 \
- GROUP BY TA.taskId, week \
+ GROUP BY TA.taskId, week, year \
ORDER BY TA.creationDate DESC
+jtimer.storage.select.report.year.timedtasks=SELECT YEAR(TI.creationDate) as year, TA.* , sum(TI.duration) AS totalduration \
+ FROM task TA, tasktime TI \
+ WHERE TA.taskId = TI.taskid \
+ AND TI.creationDate BETWEEN ? AND ? \
+ AND TA.removed = 0 \
+ GROUP BY TA.taskId, year \
+ ORDER BY TA.creationDate DESC
+jtimer.storage.select.report.month.timedtasks=SELECT MONTH(TI.creationDate) as month, YEAR(TI.creationDate) as year, TA.* , sum(TI.duration) AS totalduration \
+ FROM task TA, tasktime TI \
+ WHERE TA.taskId = TI.taskid \
+ AND TI.creationDate BETWEEN ? AND ? \
+ AND TA.removed = 0 \
+ GROUP BY TA.taskId, year, month \
+ ORDER BY TA.creationDate DESC
jtimer.storage.select.alarm.ondate= SELECT * \
FROM taskalarm \
WHERE modificationDate > ?
Modified: branches/ng-jtimer/src/main/webapp/js/controllers.js
===================================================================
--- branches/ng-jtimer/src/main/webapp/js/controllers.js 2014-07-23 15:46:46 UTC (rev 3020)
+++ branches/ng-jtimer/src/main/webapp/js/controllers.js 2014-07-28 16:09:16 UTC (rev 3021)
@@ -1268,10 +1268,13 @@
};
}
-
+/**
+ * Controller of the report modal instance
+ *
+ */
function ReportModalInstanceCtrl($scope, $modalInstance,$http, $sce, serverReportAccess, tree){
- $scope.modal={radioModel: "Project", showTime : true};
+ $scope.modal={radioModel: "Year", showTime : true};
$scope.tree = tree;
@@ -1281,18 +1284,22 @@
function getMonday(date) {
d = date;
var day = d.getDay(),
- diff = d.getDate() - day + (day == 0 ? -6:1); // adjust when day is sunday
+ diff = d.getDate() - day + (day == 0 ? -6:1);
return new Date(d.setDate(diff));
}
-
-
+ /** object to keep date */
$scope.obj={
startDate : getMonday(new Date()),
endDate : new Date()
};
+ /**
+ * Returns the previous week of the datepicker date
+ * @return the previous week
+ */
$scope.previousWeek = function(){
+
var beforeOneWeek = new Date($scope.obj.startDate.getTime() - 60 * 60 * 24 * 7 * 1000);
day = beforeOneWeek.getDay();
diffToMonday = beforeOneWeek.getDate() - day + (day === 0 ? -6 : 1);
@@ -1300,14 +1307,28 @@
// Updating scope date
$scope.obj.startDate = new Date(beforeOneWeek.setDate(diffToMonday));
$scope.obj.endDate = new Date(beforeOneWeek.setDate(diffToMonday + 6));
+
+ $scope.generateReport();
};
- $scope.currentWeek= function(){
+ /**
+ * Returns the current week of the datepicker date
+ * @return the current week
+ */
+ $scope.currentWeek= function()
+ {
$scope.obj.startDate = getMonday(new Date());
$scope.obj.endDate = new Date();
+
+ $scope.generateReport();
};
- $scope.nextWeek= function(){
+ /**
+ * Returns the next week of the datepicker date
+ * @return the next week
+ */
+ $scope.nextWeek= function()
+ {
var afterOneWeek = new Date($scope.obj.startDate.getTime() + 60 * 60 * 24 * 7 * 1000);
day = afterOneWeek.getDay();
diffToMonday = afterOneWeek.getDate() - day + (day === 0 ? -6 : 1);
@@ -1316,16 +1337,50 @@
$scope.obj.startDate = new Date(afterOneWeek.setDate(diffToMonday));
$scope.obj.endDate = new Date(afterOneWeek.setDate(diffToMonday + 6));
+ $scope.generateReport();
+
};
$scope.obj.endDate.setHours(23,59,59,999);
- $scope.htmlReport="Générer un rapport";
+ $scope.htmlReport="Générer un rapport";
- $scope.toHTML = function (data) {
- return $sce.trustAsHtml(data);
- }
+ /**
+ * Method that returns the total time for a task
+ */
+ $scope.getTotalProjectTime = function(node, res){
+ angular.forEach(node.children, function(child){
+
+ //if there is time on the child we add it, else we try to look on the child's child
+ if($scope.taskData[child.task.taskId]){
+ res+= $scope.taskData[child.task.taskId].selftime;
+ }else{
+ res+= $scope.getTotalProjectTime(child,0);
+ }
+ });
+
+ return res;
+ };
+
+ /**
+ * Method that returns the total time for a task
+ */
+ $scope.getTotalPeriodTime = function(node, res, period){
+
+ angular.forEach(node.children, function(child){
+
+ //if there is time on the child we add it, else we try to look on the child's child
+ if($scope.taskData[period][child.task.taskId]){
+ res+= $scope.taskData[period][child.task.taskId];
+ }else{
+ res+= $scope.getTotalPeriodTime(child,0, period);
+ }
+ });
+
+ return res;
+ };
+
/**
* Methode de generation du rapport
*
@@ -1346,6 +1401,7 @@
var recurseGenerateChildReport = function(child){
+ // On parcours les data pour maj
angular.forEach(child.children, function(childnode){recurseGenerateChildReport(childnode)});
if(child.task.isReported){
toReportTask.push(child.task.taskId);
@@ -1359,40 +1415,43 @@
.success(function(data){
if($scope.modal.radioModel=='Project'){
+ $scope.taskData = data;
+ }else{
- $scope.htmlReport = data;
- $scope.reportedTask=[];
- angular.forEach(data, function(d){
- $scope.reportedTask.push({
- name : d.name,
- selftime : d.selftime,
- childtime : d.childtime,
- subtasks : d.subtasks});
- });
- console.log($scope.reportedTask);
- }
+ console.log(data);
+ $scope.taskData={};
- if($scope.modal.radioModel=='Week'){
- $scope.htmlReport = data;
- //on l'envoi dans l'interface
- angular.forEach(data, function(array,week){
+ angular.forEach(data, function(array,period){
+ if( $scope.modal.radioModel=='Month'){
+ var monthArray= ["", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
- angular.forEach(array, function(rt){
- if(!$scope.reportWeek[week]){$scope.reportWeek[week]=[];}
- $scope.reportWeek[week].push({
- name : rt.name,
- selftime : rt.selftime,
- childtime : rt.childtime,
- subtasks : rt.subtasks});
+ //period format : "m - yyyy"
+ var tmp = monthArray[parseInt(period[0])] + " - " +period[4]+period[5]+period[6]+period[7];
+
+ period=tmp;
+ }
+ if( $scope.modal.radioModel=='Day'){
+ var monthArray= ["", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
+
+ //period format : "j - m - yyyy"
+ var tmp = period.split(" ");
+ period = tmp[0] +" "+ monthArray[parseInt(tmp[2])] +" " +tmp[4];
+ }
+
+ $scope.taskData[period]={};
+ angular.forEach(array, function(task){
+ $scope.taskData[period][task.taskId]=task.selftime;
});
-
});
- console.log($scope.reportWeek);
}
}
);
+
+ $scope.isGenerated=true;
}
+ //On force la premiere synchro
+ $scope.generateReport();
/**
* Methode qui check les box du parent jusqu'aux enfants
@@ -1411,17 +1470,23 @@
angular.forEach(node.children, function(child){
recurseReportChild(child)
});
+
+ $scope.generateReport();
}
/**Check all checkbox*/
$scope.checkAll= function(){
recurseChildEncapsulated(tree, true);
+ $scope.generateReport();
+
};
/**Uncheck all checkbox*/
$scope.uncheckAll= function(){
recurseChildEncapsulated(tree,false);
+
+ $scope.generateReport();
};
/**
Modified: branches/ng-jtimer/src/main/webapp/js/entities.js
===================================================================
--- branches/ng-jtimer/src/main/webapp/js/entities.js 2014-07-23 15:46:46 UTC (rev 3020)
+++ branches/ng-jtimer/src/main/webapp/js/entities.js 2014-07-28 16:09:16 UTC (rev 3021)
@@ -2,7 +2,8 @@
* Genere un UUID
* @returns {String}
*/
-function generateUUID(){
+function generateUUID()
+{
var d = Date.now();
var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = (d + Math.random()*16)%16 | 0;
@@ -16,7 +17,8 @@
* Retourne la date d'aujourd'hui sous la forme "2013-O7-25"
* @returns {String}
*/
-function today() {
+function today()
+{
var result = moment().format("YYYY-MM-DD");
return result;
}
@@ -28,16 +30,21 @@
* @param {ngAnimator} animate l'objet permettant de supprimer un noeud dans le DOM
* @returns {Cache}
*/
-var Cache = function(animate) {
+var Cache = function(animate)
+{
this.animate = animate;
};
-Cache.prototype.put = function(node, element, scope) {
+
+Cache.prototype.put = function(node, element, scope)
+{
var id = node.task.taskId;
this[id] = {node: node, element: element, scope: scope};
};
-Cache.prototype.get = function(nodeOrId) {
+
+Cache.prototype.get = function(nodeOrId)
+{
var id = nodeOrId;
- if (!angular.isString(nodeOrId)) {
+ if (!angular.isString(nodeOrId)){
id = nodeOrId.task.taskId;
}
var result = this[id];
@@ -45,13 +52,18 @@
return result;
};
-Cache.prototype.clear = function() {
- for (var key in this) {
- if (this.hasOwnProperty(key) && key !== "animate") {
+Cache.prototype.clear = function()
+{
+ for (var key in this){
+
+ if (this.hasOwnProperty(key) && key !== "animate"){
+
var entry = this[key];
this.animate.leave(entry.element);
entry.scope.$destroy();
+
}
+
}
};
@@ -59,7 +71,8 @@
* Toutes les donnees qui demandent d'etre traitees par le serveur
* @returns {tdListData}
*/
-var tdListData = function(){
+var tdListData = function()
+{
//Les timestamp de dernier acces
this.lastTimeAccess = 0;
this.lastTaskAccess = 0;
@@ -81,7 +94,8 @@
* Converti l'objet tdListData en Json
* @returns {JSON}
*/
-tdListData.prototype.toJson = function() {
+tdListData.prototype.toJson = function()
+{
var result = angular.toJson(this);
return result;
};
@@ -261,24 +275,29 @@
return task;
}
-
/**
* Ce retire de l'arbre
* @returns {undefined}
*/
-TreeNode.prototype.remove = function() {
+TreeNode.prototype.remove = function()
+{
if (this.parent) {
+
var brothers = this.parent.children;
var match = brothers.indexOf(this);
if (match > -1 ) {
+
brothers.splice(match, 1);
delete this.parent;
+
}
+
}
};
-TreeNode.prototype.addChild = function(node) {
+TreeNode.prototype.addChild = function(node)
+{
node.parent = this;
this.children.push(node);
};
@@ -288,7 +307,8 @@
* @param {TreeNode} node
* @returns {undefined}
*/
-TreeNode.prototype.copyState = function(node) {
+TreeNode.prototype.copyState = function(node)
+{
this.$$open = node.$$open;
};
@@ -298,7 +318,7 @@
* @param {Array of TaskTime} taskTimes
* @returns {undefined}
*/
-TreeNode.prototype.setTaskTimes = function(taskTimes) {
+TreeNode.prototype.setTaskTimes = function(taskTimes){
this.localTimes = taskTimes;
};
@@ -386,7 +406,8 @@
*/
var Task = function (name,taskId, parentTaskId) {
- if(taskId == undefined){
+ if(taskId == undefined)
+ {
this.taskId =generateUUID();
}else{
this.taskId = taskId;
@@ -395,7 +416,8 @@
this.modificationDate = Date.now();
this.removed = 0;
- if(parentTaskId == undefined){
+ if(parentTaskId == undefined)
+ {
this.parent = "";
}else{
this.parent = parentTaskId;
Modified: branches/ng-jtimer/src/main/webapp/partials/reportModal.html
===================================================================
--- branches/ng-jtimer/src/main/webapp/partials/reportModal.html 2014-07-23 15:46:46 UTC (rev 3020)
+++ branches/ng-jtimer/src/main/webapp/partials/reportModal.html 2014-07-28 16:09:16 UTC (rev 3021)
@@ -13,7 +13,7 @@
<div style="margin-left:2px;" ng-controller="ReportDatePickerCtrl" class="row">
<div class="col-md-6">
<p class="input-group medium_input">
- <input type="text" class="form-control" datepicker-popup="{{format}}" ng-model="obj.startDate" is-open="opened" min-date="minDate" max-date="obj.endDate" ng-required="true" close-text="Close" />
+ <input type="text" class="form-control" datepicker-popup="{{format}}" ng-model="obj.startDate" ng-change="generateReport()" is-open="opened" min-date="minDate" max-date="obj.endDate" ng-required="true" close-text="Close" />
<span class="input-group-btn">
<button type="button" class="btn btn-default" ng-click="open($event)"><i class="glyphicon glyphicon-calendar"></i></button>
</span>
@@ -25,7 +25,7 @@
<div style="margin-left:1px;margin-right:1px;" class="row" ng-controller="ReportDatePickerCtrl">
<div class="col-md-6">
<p class="input-group medium_input">
- <input type="text" class="form-control" datepicker-popup="{{format}}" ng-model="obj.endDate" is-open="opened" min-date="obj.startDate" max-date="maxDate" ng-required="true" close-text="Close" />
+ <input type="text" class="form-control" datepicker-popup="{{format}}" ng-model="obj.endDate" ng-change="generateReport()" is-open="opened" min-date="obj.startDate" max-date="maxDate" ng-required="true" close-text="Close" />
<span class="input-group-btn">
<button type="button" class="btn btn-default" ng-click="open($event)"><i class="glyphicon glyphicon-calendar"></i></button>
</span>
@@ -48,15 +48,15 @@
<h4>Group by :</h4>
<div style="margin-left:25px;" >
<div class="btn-group">
- <label class="btn btn-default" ng-model="modal.radioModel" btn-radio="'Project'">Project</label>
- <label class="btn btn-default" ng-model="modal.radioModel" disabled="true" btn-radio="'Day'">Day</label>
- <label class="btn btn-default" ng-model="modal.radioModel" btn-radio="'Week'">Week</label>
+ <label class="btn btn-default" ng-model="modal.radioModel" ng-change="generateReport()" btn-radio="'Project'">Project</label>
+ <label class="btn btn-default" ng-model="modal.radioModel" ng-change="generateReport()" btn-radio="'Day'">Day</label>
+ <label class="btn btn-default" ng-model="modal.radioModel" ng-change="generateReport()" btn-radio="'Week'">Week</label>
</div>
<br/>
<div style="margin-left:30px;" class="btn-group">
- <label class="btn btn-default" ng-model="modal.radioModel" disabled="true" btn-radio="'Month'">Month</label>
- <label class="btn btn-default" ng-model="modal.radioModel" disabled="true" btn-radio="'Year'">Year</label>
+ <label class="btn btn-default" ng-model="modal.radioModel" ng-change="generateReport()" btn-radio="'Month'">Month</label>
+ <label class="btn btn-default" ng-model="modal.radioModel" ng-change="generateReport()" btn-radio="'Year'">Year</label>
</div>
</div>
@@ -76,13 +76,11 @@
<!-- Div du body wt-tree-repeat Angular js directive in app.js-->
<div class="tbody"
- wt-tree-repeat="tree | orderBy:'task.name'"
- wt-force-open="query || forceExpanded">
+ wt-tree-repeat="tree | orderBy:'task.name'">
<div class="tr" ng-class="{'current-row' : ($node.task === currentTask), 'selected-row' : ($node.task === selectedTask)}">
- <!--ng-click="setSelectedTask($node.task)"
- ng-keydown="keyPressed($event)">ng-dblclick="timeTask($node.task)"-->
+
<div class="td">
<span class="spacer level{{$level}}"></span>
@@ -91,7 +89,7 @@
<i class="glyphicon glyphicon-plus-sign" ng-click="$toggleState()" ng-show="$state=='close'"></i>
<i class="glyphicon glyphicon-minus-sign" ng-click="$toggleState()" ng-show="$state=='open'"></i>
- <!--Project name visible and editable -->
+ <!--Project name-->
<input type="checkbox" ng-model="$node.task.isReported" ng-change="setChildrenCheckbox($node)">
<span>{{$node.task.name}} </span>
@@ -111,52 +109,87 @@
<div style="display : inline-block; vertical-align: top; width : 350px">
<alert type="info" >
- <span contenteditable="true" ng-show="!reportTask.length" >
- <h4><b>Generate Report :</b></h4>
+ <span contenteditable="true" ng-if="isGenerated" >
+ <h4><b>Report :</b></h4>
- <!--Report by Project -->
<div ng-if="modal.radioModel=='Project'">
- <div ng-repeat="task in reportedTask" >
- <b>Project : {{task.name}} </b>
- <div style="margin-left : 10px" ng-repeat="subtask in task.subtasks" ng-include="'./partials/reportNestedTask.html'">
+ <div>
+ <div class='table'>
+ <div class="tbody"
+ wt-tree-repeat="tree | orderBy:'task.name'"
+ wt-force-open="true">
+
+ <div ng-if="$node.task.isRoot()">
+
+ <br/>
+ </div>
+
+ <div class="tr" ng-show="taskData[$node.task.taskId].selftime || ($node.task.isRoot() && getTotalProjectTime($node,0) != 0 )">
+
+ <div class="td" >
+ <span class="spacer level{{$level}}"></span>
+ <b ng-if="$node.task.isRoot()">Projet : {{$node.task.name}}</b>
+ <span ng-if="!$node.task.isRoot()">{{$node.task.name}} </span>
+ </div >
+
+ <div class="td" ng-show="!$node.task.isRoot() && taskData[$node.task.taskId].selftime && modal.showTime" >
+ <span class="spacer level{{$level}}"></span>
+ <span>{{taskData[$node.task.taskId].selftime |time }} </span>
+
+ </div>
+
+ <div class="td" ng-show="$node.task.isRoot()" >
+ <span class="spacer level{{$level}}"></span>
+ <b> Total : {{getTotalProjectTime($node,0) |time }} </b>
+
+ </div>
+ </div>
+ </div>
</div>
- <br/>
- Temps total : {{task.childtime|time}}
- <hr/>
</div>
-
- <span ng-show="reportedTask.length == 0" >
- No timed tasks.
- </span>
</div>
+ <!--Report by week/year/month/day -->
+ <div ng-if="modal.radioModel=='Week' || modal.radioModel=='Year' || modal.radioModel=='Month'|| modal.radioModel=='Day'">
- <!--Report by week -->
- <div ng-if="modal.radioModel=='Week'">
- <div ng-repeat="(week,array) in reportWeek" >
- <b>
- Week {{week}} </b><br/>
- ==========
- <br/><br/>
+ <div ng-repeat="(period, tasks) in taskData">
+ <b> {{modal.radioModel}} : {{period}} </b>
+ <div class='table'>
- <div style="margin-left : 10px" ng-repeat="(index, task) in array" >
- <b>Project : {{task.name}} </b>
- <div style="margin-left : 10px" ng-repeat="subtask in task.subtasks" ng-include="'./partials/reportNestedTask.html'">
+ <div class="tbody"
+ wt-tree-repeat="tree | orderBy:'task.name'"
+ wt-force-open="true">
+ <div class="tr" ng-show="taskData[period][$node.task.taskId] || ($node.task.isRoot() && getTotalPeriodTime($node,0, period) != 0 ) ">
+
+ <div class="td" >
+ <span class="spacer level{{$level}}"></span>
+ <b ng-if="$node.task.isRoot()">Projet : {{$node.task.name}}</b>
+ <span ng-if="!$node.task.isRoot()">{{$node.task.name}} </span>
+ </div >
+
+ <div class="td" ng-show="!$node.task.isRoot() && taskData[period][$node.task.taskId] && modal.showTime" >
+ <span class="spacer level{{$level}}"></span>
+ <span>{{tasks[$node.task.taskId] |time }} </span>
+
+ </div>
+
+ <div class="td" ng-show="$node.task.isRoot()" >
+ <span class="spacer level{{$level}}"></span>
+ <b> Total : {{getTotalPeriodTime($node,0,period) |time }} </b>
+
+ </div>
+ </div>
</div>
- <br/>
- Temps total : {{task.childtime|time}}
- <hr/>
</div>
</div>
-
- <span ng-show="!reportWeek" >
- No timed tasks.
- </span>
</div>
</span >
+ <span ng-if="!taskData">
+ No timed task.
+ </span>
</alert>
</div>
1
0
r3020 - in branches/ng-jtimer/src/main: java/org/chorem/jtimer/storage resources webapp/js webapp/partials
by obruce@users.chorem.org 23 Jul '14
by obruce@users.chorem.org 23 Jul '14
23 Jul '14
Author: obruce
Date: 2014-07-23 17:46:46 +0200 (Wed, 23 Jul 2014)
New Revision: 3020
Url: http://forge.chorem.org/projects/jtimer/repository/revisions/3020
Log:
BDD, Storage: Changement long pour timestamp
Changement modal option de taches
Removed:
branches/ng-jtimer/src/main/webapp/partials/timeModal.html
Modified:
branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java
branches/ng-jtimer/src/main/resources/jtimer-default.properties
branches/ng-jtimer/src/main/webapp/js/app.js
branches/ng-jtimer/src/main/webapp/js/controllers.js
branches/ng-jtimer/src/main/webapp/partials/reportModal.html
branches/ng-jtimer/src/main/webapp/partials/task.html
Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java
===================================================================
--- branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java 2014-07-22 13:18:31 UTC (rev 3019)
+++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java 2014-07-23 15:46:46 UTC (rev 3020)
@@ -215,8 +215,8 @@
statement.setString(3, task.getTaskId());
statement.setBoolean(4, task.isClosed());
statement.setString(5, null /*project.getNote()*/);
- statement.setLong(6, task.getCreationDate().getTime());
- statement.setLong(7, task.getModificationDate().getTime());
+ statement.setObject(6, task.getCreationDate());
+ statement.setObject(7, task.getModificationDate());
statement.setLong(8,task.getRemoved());
statement.executeUpdate();
@@ -269,10 +269,10 @@
statement = connection.prepareStatement(config.getStorageQueryInsertTime());
statement.setString(1, task.getTaskId());
- statement.setLong(2, date.getTime());
+ statement.setObject(2, new Date());
statement.setString(3, uuid);
statement.setLong(4, duration);
- statement.setLong(5, new Date().getTime());
+ statement.setObject(5, new Date());
statement.setBoolean(6, false);
statement.executeUpdate();
} catch (SQLException ex) {
@@ -292,10 +292,10 @@
statement = connection.prepareStatement(config.getStorageQueryInsertTime());
statement.setString(1, time.getTaskId());
- statement.setLong(2, time.getCreationDate().getTime());
+ statement.setObject(2, time.getCreationDate());
statement.setString(3, time.getTimeId());
statement.setLong(4, time.getTime());
- statement.setLong(5, time.getModificationDate().getTime());
+ statement.setObject(5, time.getModificationDate());
statement.setLong(6, time.getRemoved());
statement.executeUpdate();
} catch (SQLException ex) {
@@ -325,7 +325,7 @@
statement.setInt(6, alarm.getLimitMin());
statement.setInt(7, alarm.getRemainingHour());
statement.setInt(8, alarm.getRemainingMin());
- statement.setLong(9, alarm.getModificationDate().getTime());
+ statement.setObject(9, alarm.getModificationDate());
statement.setLong(10, alarm.getRemoved());
statement.executeUpdate();
@@ -347,9 +347,8 @@
PreparedStatement statement = null;
try {
statement = connection.prepareStatement(config.getStorageQuerySelectTaskTimeWithDate());
+ statement.setObject(1, new Date(date));
- statement.setLong(1, date);
-
ResultSet rs = statement.executeQuery();
while (rs.next()) {
@@ -357,8 +356,8 @@
time.setTaskId(rs.getString("mytask"));
time.setTimeId(rs.getString("uuid"));
time.setTime(rs.getLong("duration"));
- time.setCreationDate(new java.util.Date(rs.getLong("date")));
- time.setModificationDate(new java.util.Date(rs.getLong("modificationDate")));
+ time.setCreationDate(new java.util.Date(rs.getTimestamp("creationDate").getTime()));
+ time.setModificationDate(new java.util.Date(rs.getTimestamp("modificationDate").getTime()));
time.setRemoved(rs.getLong("removed"));
times.add(time);
@@ -384,7 +383,7 @@
try {
statement = connection.prepareStatement(config.getStorageQuerySelectTimedTask());
- statement.setLong(1, date);
+ statement.setObject(1, new Date(date));
log.debug(statement.toString());
@@ -399,15 +398,15 @@
task.setTodayTime(0);
- task.setCreationDate(new java.util.Date(rs.getLong("creationDate")));
- task.setModificationDate(new java.util.Date(rs.getLong("modificationDate")));
+ task.setCreationDate(new java.util.Date((rs.getTimestamp("creationDate").getTime())));
+ task.setModificationDate(new java.util.Date(rs.getTimestamp("modificationDate").getTime()));
task.setTotalTime(rs.getLong("totalduration"));
tasks.add(task);
}
// not timed tasks
statement2 = connection.prepareStatement(config.getStorageQuerySelectNotTimedTask());
- statement2.setLong(1, date);
+ statement2.setObject(1, new Date(date));
rs = statement2.executeQuery();
while (rs.next()) {
@@ -415,8 +414,8 @@
task.setName(rs.getString("name"));
task.setTaskId(rs.getString("taskId"));
task.setParent(rs.getString("parent"));
- task.setCreationDate(new java.util.Date(rs.getLong("creationDate")));
- task.setModificationDate(new java.util.Date(rs.getLong("modificationDate")));
+ task.setCreationDate(new java.util.Date((rs.getTimestamp("creationDate").getTime())));
+ task.setModificationDate(new java.util.Date(rs.getTimestamp("modificationDate").getTime()));
task.setRemoved(rs.getLong("removed"));
task.setTodayTime(0);
task.setTotalTime(0);
@@ -443,7 +442,7 @@
try {
statement = connection.prepareStatement(config.getStorageQuerySelectNotRemovedTaskTime());
statement.setString(1, taskid);
- statement.setLong(2, date);
+ statement.setObject(2, new Date(date));
ResultSet rs = statement.executeQuery();
while (rs.next()) {
@@ -451,8 +450,8 @@
time.setTaskId(taskid);
time.setTimeId(rs.getString("uuid"));
time.setTime(rs.getLong("duration"));
- time.setCreationDate(new java.util.Date(rs.getLong("date")));
- time.setModificationDate(new java.util.Date(rs.getLong("modificationDate")));
+ time.setCreationDate(new java.util.Date(rs.getTimestamp("creationDate").getTime()));
+ time.setModificationDate(new java.util.Date(rs.getTimestamp("modificationDate").getTime()));
time.setRemoved(rs.getLong("removed"));
times.add(time);
@@ -468,8 +467,8 @@
/**
* Methode qui retourne toutes les alarmes dans la base
- * @param date
- * @return
+ * @param date la date
+ * @return list de date
*/
public ArrayList<TimerAlarm> getAlarms(Long date) {
ArrayList<TimerAlarm> alarms = new ArrayList<>();
@@ -477,7 +476,7 @@
try {
statement = connection.prepareStatement(config.getStorageQuerySelectAlarmOnDate());
- statement.setLong(1, date);
+ statement.setObject(1, new Date(date));
ResultSet rs = statement.executeQuery();
while (rs.next()) {
@@ -490,7 +489,7 @@
alarm.setLimitMin(rs.getInt("limitMin"));
alarm.setRemainingHour(rs.getInt("remainingHour"));
alarm.setRemainingMin(rs.getInt("remainingMin"));
- alarm.setModificationDate(new Date(rs.getLong("modificationDate")));
+ alarm.setModificationDate(new Date(rs.getTimestamp("modificationDate").getTime()));
alarm.setRemoved(rs.getLong("removed"));
alarms.add(alarm);
@@ -511,7 +510,7 @@
try {
statement = connection.prepareStatement(config.getStorageQuerySelectAlarmWithTaskID());
- statement.setLong(1, date);
+ statement.setObject(1, new Date(date));
statement.setString(2, taskId);
ResultSet rs = statement.executeQuery();
@@ -554,8 +553,8 @@
try{
statement = connection.prepareStatement(config.getStorageQuerySelectReportTasks());
- statement.setLong(1, startDate);
- statement.setLong(2, endDate);
+ statement.setObject(1, new Date(startDate));
+ statement.setObject(2, new Date(endDate));
ResultSet rs = statement.executeQuery();
while(rs.next()){
@@ -648,8 +647,8 @@
//Les taches minutees sur les differentes semaines
statement = connection.prepareStatement(config.getStorageQuerySelectReportWeekTimedTasks());
- statement.setLong(1, startDate);
- statement.setLong(2, endDate);
+ statement.setObject(1, new Date(startDate));
+ statement.setObject(2, new Date(endDate));
ResultSet rs = statement.executeQuery();
@@ -766,7 +765,7 @@
statement.setString(2, task.getParent()); //parent
statement.setBoolean(3, task.isClosed()); //hidden
statement.setString(4, null /*project.getNote()*/);//note
- statement.setLong(5, task.getModificationDate().getTime()); //modificationDate
+ statement.setObject(5, task.getModificationDate()); //modificationDate
statement.setLong(6,task.getRemoved());
statement.setString(7, task.getTaskId()); //taskId
@@ -788,9 +787,9 @@
try {
statement = connection.prepareStatement(config.getStorageQueryUpdateTime());
- statement.setLong(1, t.getCreationDate().getTime());
+ statement.setObject(1, t.getCreationDate());
statement.setLong(2, t.getTime());
- statement.setLong(3, t.getModificationDate().getTime()); //modificationDate
+ statement.setObject(3, t.getModificationDate()); //modificationDate
statement.setLong(4, t.getRemoved());
statement.setString(5, t.getTimeId() );
statement.executeUpdate();
@@ -900,7 +899,7 @@
statement = connection.prepareStatement(config.getStorageQueryUpdateTimeToRemove());
statement.setLong(1, time);
- statement.setLong(2, time);
+ statement.setObject(2, new Date(time));
statement.setString(3, timeId);
statement.executeUpdate();
} catch (SQLException ex) {
@@ -922,7 +921,7 @@
statement = connection.prepareStatement(config.getStorageQueryUpdateTaskToRemove());
statement.setLong(1, time);
- statement.setLong(2, time);
+ statement.setObject(2, new Date(time));
statement.setString(3, taskId);
statement.executeUpdate();
@@ -941,7 +940,7 @@
statement = connection.prepareStatement(config.getStorageQueryUpdateAlarmToRemove());
statement.setLong(1, time);
- statement.setLong(2, time);
+ statement.setObject(2, new Date(time));
statement.setString(3, alarmId);
statement.executeUpdate();
Modified: branches/ng-jtimer/src/main/resources/jtimer-default.properties
===================================================================
--- branches/ng-jtimer/src/main/resources/jtimer-default.properties 2014-07-22 13:18:31 UTC (rev 3019)
+++ branches/ng-jtimer/src/main/resources/jtimer-default.properties 2014-07-23 15:46:46 UTC (rev 3020)
@@ -2,7 +2,7 @@
# jTimer default properties
###
# jTimer storage path
-jtimer.storage.path=/home/olivia/Bureau/jtimer/jtimer/BDDTest4
+jtimer.storage.path=/home/olivia/Bureau/jtimer/jtimer/BDDNewDepart
###
# SQL properties
###
@@ -18,8 +18,8 @@
(taskId VARCHAR(255) NOT NULL, \
name VARCHAR(255) NOT NULL, \
parent VARCHAR(255), \
- creationDate LONG, \
- modificationDate LONG, \
+ creationDate Timestamp, \
+ modificationDate Timestamp, \
hidden BOOLEAN, \
path ARRAY, \
note TEXT, \
@@ -27,12 +27,12 @@
PRIMARY KEY (taskId))
jtimer.storage.create.table.time=CREATE TABLE tasktime \
(taskid VARCHAR(255) NOT NULL, \
- date LONG, \
+ creationDate Timestamp, \
uuid varchar(255) unique, \
duration LONG, \
- modificationDate LONG, \
+ modificationDate Timestamp, \
removed LONG, \
- PRIMARY KEY (taskid, date, uuid), \
+ PRIMARY KEY (taskid, creationDate, uuid), \
FOREIGN KEY (taskid) \
REFERENCES task (taskId) \
ON DELETE CASCADE)
@@ -45,7 +45,7 @@
limitMin INTEGER, \
remainingMin INTEGER, \
remainingHour INTEGER, \
- modificationDate LONG, \
+ modificationDate Timestamp, \
removed LONG, \
PRIMARY KEY (taskId, alarmId), \
FOREIGN KEY (taskid) \
@@ -56,7 +56,7 @@
jtimer.storage.insert.version.number=INSERT INTO VERSION VALUES('2.0')
jtimer.storage.insert.task=INSERT INTO task (name, parent, taskId, hidden, note,creationDate, modificationDate, removed) \
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
-jtimer.storage.insert.time=INSERT INTO tasktime (taskid, date, uuid, duration, modificationDate, removed) \
+jtimer.storage.insert.time=INSERT INTO tasktime (taskid, creationDate, uuid, duration, modificationDate, removed) \
VALUES (?, ?, ?, ?, ?, ?)
jtimer.storage.insert.alarm=INSERT INTO taskalarm (taskid, alarmId, name, type, limitHour, \
limitMin, remainingHour, remainingMin, modificationDate, removed) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
@@ -93,18 +93,16 @@
jtimer.storage.select.report.timedtasks=SELECT TA.* , sum(TI.duration) AS totalduration \
FROM task TA, tasktime TI \
WHERE TA.taskId = TI.taskid \
- AND TA.creationDate > ? \
- AND TA.creationDate < ? \
+ AND TI.creationDate BETWEEN ? AND ? \
AND TA.removed = 0 \
GROUP BY TA.taskId
jtimer.storage.select.report.roottasks=SELECT * \
FROM task \
WHERE (taskId not in (SELECT taskid FROM tasktime) AND removed = 0 )
-jtimer.storage.select.report.week.timedtasks=SELECT WEEK(DATEADD('SECOND', (TI.date/1000), DATE '1970-01-01')) as week, TA.* , sum(TI.duration) AS totalduration \
+jtimer.storage.select.report.week.timedtasks=SELECT WEEK(TI.creationDate) as week, TA.* , sum(TI.duration) AS totalduration \
FROM task TA, tasktime TI \
WHERE TA.taskId = TI.taskid \
- AND TA.creationDate > ? \
- AND TA.creationDate < ? \
+ AND TI.creationDate BETWEEN ? AND ? \
AND TA.removed = 0 \
GROUP BY TA.taskId, week \
ORDER BY TA.creationDate DESC
@@ -126,7 +124,7 @@
WHERE taskId = ?
jtimer.storage.update.task.withid=UPDATE task SET name=?, parent=?, hidden=?, note=?, modificationDate=?, removed=? \
WHERE taskId = ?
-jtimer.storage.update.time.withid=UPDATE tasktime SET date=?, duration=?, modificationDate=?, removed = ? \
+jtimer.storage.update.time.withid=UPDATE tasktime SET creationDate=?, duration=?, modificationDate=?, removed = ? \
WHERE uuid = ?
jtimer.storage.update.alarm.withid=UPDATE tasktime SET remainingHour=?, remainingMin=?, modificationDate=?, removed = ? \
WHERE alarmid = ?
Modified: branches/ng-jtimer/src/main/webapp/js/app.js
===================================================================
--- branches/ng-jtimer/src/main/webapp/js/app.js 2014-07-22 13:18:31 UTC (rev 3019)
+++ branches/ng-jtimer/src/main/webapp/js/app.js 2014-07-23 15:46:46 UTC (rev 3020)
@@ -314,7 +314,10 @@
when('/contact', {templateUrl: 'partials/contact.html'}).
otherwise({redirectTo: '/tasks'});
}])
-
+ .config(function (datepickerConfig, datepickerPopupConfig) {
+ datepickerConfig.showWeeks = false;
+ datepickerPopupConfig.toggleWeeksText = null;
+ })
.factory("$localStorage", function() {
// Encapsule l'acces au localStorage pour
// - ajouter un prefix au variable sauvee pour les differencier des autres ("WebTimer-")
Modified: branches/ng-jtimer/src/main/webapp/js/controllers.js
===================================================================
--- branches/ng-jtimer/src/main/webapp/js/controllers.js 2014-07-22 13:18:31 UTC (rev 3019)
+++ branches/ng-jtimer/src/main/webapp/js/controllers.js 2014-07-23 15:46:46 UTC (rev 3020)
@@ -155,7 +155,6 @@
checkRecurseParent($scope.currentTask);
}
- checkAlarms(0);
}, 60000-delay);
};
@@ -1029,76 +1028,6 @@
});
}
- $scope.popupTime = function (node){
- //Task identifier
- var id = node.task.taskId;
- var data;
-
- var modalInstance = $modal.open({
- templateUrl: 'partials/timeModal.html',
- controller: TimeModalCtrl,
- resolve: {
- taskTimes : function () {
- return angular.copy($scope.data);
- },
- indent : function () {
- return id;
- }
- }
-
- });
-
- modalInstance.result.then(function (item) {
-
- if(item.index != -1){
- if(item.action=='Modification'){
- //On met la valeur à jour
-
- $scope.data.times[id][item.index].changeCreationDate(item.creationDate);
- $scope.data.times[id][item.index].changeDuration(item.time);
-
- //init
- if(!$scope.todo.stockedEditedTimes[id]){$scope.todo.stockedEditedTimes[id]=[]; }
-
- //On ajoute dans la tdList
- $scope.todo.stockedEditedTimes[id].push($scope.data.times[id][item.index]);
-
- save();
- }
-
- if(item.action=='Ajout'){
- //init
-
- if(!$scope.data.times[id]){$scope.data.times[id]= [];};
- if(!$scope.todo.stockedNewTimes[id]){$scope.todo.stockedNewTimes[id] = []};
-
- //on cree le temps
- var res = new TaskTime(node.task,undefined,item.creationDate,item.time);
- $scope.data.times[id].push(res);
- $scope.todo.stockedNewTimes[id].push(res);
- save();
- }
-
- if(item.action == 'Suppression'){
- // init de l'objet
- if(!$scope.todo.stockedDeletedTimes[id]){
- $scope.todo.stockedDeletedTimes[id] = []
- };
- //on pousse l'objet à supprimer
- $scope.todo.stockedDeletedTimes[id].push($scope.data.times[id][item.index].timeId);
-
- $scope.data.times[id].splice(item.index,1);
- if($scope.data.times[id]==[]){
- delete $scope.data.times[id];
- }
- save();
- }
- data = $scope.data.times;
- }
- });
-
- }
-
$scope.reportPopup = function (){
var modalInstance = $modal.open({
@@ -1341,14 +1270,54 @@
function ReportModalInstanceCtrl($scope, $modalInstance,$http, $sce, serverReportAccess, tree){
+
$scope.modal={radioModel: "Project", showTime : true};
$scope.tree = tree;
+
+ /**
+ * Function to find Monday date of current week
+ */
+ function getMonday(date) {
+ d = date;
+ var day = d.getDay(),
+ diff = d.getDate() - day + (day == 0 ? -6:1); // adjust when day is sunday
+ return new Date(d.setDate(diff));
+ }
+
+
+
$scope.obj={
- startDate : new Date(),
+ startDate : getMonday(new Date()),
endDate : new Date()
};
+ $scope.previousWeek = function(){
+ var beforeOneWeek = new Date($scope.obj.startDate.getTime() - 60 * 60 * 24 * 7 * 1000);
+ day = beforeOneWeek.getDay();
+ diffToMonday = beforeOneWeek.getDate() - day + (day === 0 ? -6 : 1);
+
+ // Updating scope date
+ $scope.obj.startDate = new Date(beforeOneWeek.setDate(diffToMonday));
+ $scope.obj.endDate = new Date(beforeOneWeek.setDate(diffToMonday + 6));
+ };
+
+ $scope.currentWeek= function(){
+ $scope.obj.startDate = getMonday(new Date());
+ $scope.obj.endDate = new Date();
+ };
+
+ $scope.nextWeek= function(){
+ var afterOneWeek = new Date($scope.obj.startDate.getTime() + 60 * 60 * 24 * 7 * 1000);
+ day = afterOneWeek.getDay();
+ diffToMonday = afterOneWeek.getDate() - day + (day === 0 ? -6 : 1);
+
+ // Updating scope date
+ $scope.obj.startDate = new Date(afterOneWeek.setDate(diffToMonday));
+ $scope.obj.endDate = new Date(afterOneWeek.setDate(diffToMonday + 6));
+
+ };
+
$scope.obj.endDate.setHours(23,59,59,999);
$scope.htmlReport="Générer un rapport";
@@ -1658,16 +1627,19 @@
serverTimeAccess.create({taskId: task.taskId,dispatch:true} , angular.toJson(res),
function(){
console.log("persist time success" + task);
-
},
function(){
console.log("fail");
});
- $scope.taskTimes.times[task.taskId] = [];
+ if(!$scope.taskTimes.times[task.taskId]){
+ $scope.taskTimes.times[task.taskId] = [];
+ }
$scope.taskTimes.times[task.taskId].push(res);
- $scope.changeDate();
+ $scope.times.push(res);
+ console.log($scope.times);
+
//On ferme la partie d'ajout de temps
$scope.limit.fromHour =0;
$scope.limit.fromMin =0;
@@ -1740,7 +1712,7 @@
//On va recuperer les temps de la tache
angular.forEach($scope.taskTimes.times[$scope.indent],function(time){
// si le temps est entre les bornes de la journées
- if(time.creationDate> startday.getTime() &&
+ if(time.creationDate > startday.getTime() &&
time.creationDate< endday.getTime()){
//ajout du temps
$scope.times.push(time);
@@ -1753,11 +1725,17 @@
};
-
+/**
+ * Controller pour le datepicker
+ **/
function DatePickerCtrl($scope){
$scope.dateMaxPicker= new Date();
+ /**
+ * Methode qui change la date de creation en fonction de ce qui est renvoyer par le datepicker
+ *
+ */
$scope.changeDayDate = function(){
var year = $scope.dateobj.date.getFullYear();
@@ -1773,6 +1751,10 @@
};
};
+/**
+ * Controller pour la progress bar dynamique
+ * Calcul constant de la progression
+ */
function alarmProgressBarCtrl($scope){
$scope.dynamicProgressBar = function(alarm){
@@ -1788,77 +1770,9 @@
};
-function TimePickerOptionModalCtrl($scope){
- //Activated button radio
- $scope.radioModel = 'Left';
- //Le pas des heures et minutes
- $scope.hstep = 1;
- $scope.mstep = 1;
- /*
- * Méthode déclancher quand l'heure change dans le timepicker
- * Change l'objet du controller principal
- */
- $scope.changeModel = function(){
- }
-};
-function RadioTimeCtrl($scope){
- //Activated button radio
- $scope.radioModel = 'Left';
-
- //Le pas des heures et minutes
- $scope.hstep = 1;
- $scope.mstep = 1;
-
- /*
- * Méthode déclancher quand l'heure change dans le timepicker
- * Change l'objet du controller principal
- */
- $scope.changeModel = function(){
-
- //La date max
- var maxDate = new Date($scope.dateobj.aTime);
- maxDate.setHours(23,59,59,999);
-
- //Si On modifie sur la date de debut
- if(($scope.radioModel || 'null') == 'Left'){
- $scope.obj.creationDate = $scope.dateobj.aTime.getTime();
-
- //si crea+temps superieur à 23:59
- if(($scope.obj.creationDate+$scope.obj.time) > maxDate.getTime()){
- $scope.dateobj.aTime=new Date(maxDate.getTime()-$scope.obj.time);
- $scope.obj.creationDate = maxDate.getTime()-$scope.obj.time;
- }
-
- }else{//On modifie la date de fin
- //Si l'heure de fin est superieur a l'heure de depart
- if($scope.dateobj.aTime.getTime() > $scope.obj.creationDate){
- var duree = $scope.dateobj.aTime.getTime() - $scope.obj.creationDate ;
- $scope.obj.time = duree;
- }else{
- //Empeche de depasser 23:59
- $scope.dateobj.aTime = maxDate;
- $scope.obj.time = maxDate.getTime() - $scope.obj.creationDate;
- }
- }
- }
-
- //Change l'heure dans le timePicker selon debut/fin
- $scope.changeFonc=function(){
- if(($scope.radioModel || 'null') == 'Left'){
- $scope.dateobj.aTime = new Date($scope.obj.creationDate);
- }else{
- $scope.dateobj.aTime = new Date($scope.obj.creationDate + $scope.obj.time);
- }
- }
-}
-
-
-
-
-
Modified: branches/ng-jtimer/src/main/webapp/partials/reportModal.html
===================================================================
--- branches/ng-jtimer/src/main/webapp/partials/reportModal.html 2014-07-22 13:18:31 UTC (rev 3019)
+++ branches/ng-jtimer/src/main/webapp/partials/reportModal.html 2014-07-23 15:46:46 UTC (rev 3020)
@@ -32,6 +32,19 @@
</p>
</div>
</div>
+
+ <div style="margin-left:50px;">
+ <button type="button" class="btn btn-default" popover="Previous Week!" popover-trigger="mouseenter" ng-click="previousWeek()">
+ <i class="glyphicon glyphicon-circle-arrow-left"></i>
+ </button>
+ <button type="button" class="btn btn-default" popover="Current Week!" popover-trigger="mouseenter" ng-click="currentWeek()">
+ <i class="glyphicon glyphicon-download"></i>
+ </button>
+ <button type="button" class="btn btn-default" popover="Next Week!" popover-trigger="mouseenter" ng-click="nextWeek()">
+ <i class="glyphicon glyphicon-circle-arrow-right"></i>
+ </button>
+ </div>
+
<h4>Group by :</h4>
<div style="margin-left:25px;" >
<div class="btn-group">
@@ -48,7 +61,7 @@
</div>
<div>
- <span>Afficher les temps </span>
+ <span>Show times </span>
<input type="checkbox" ng-model="modal.showTime" />
</div>
Modified: branches/ng-jtimer/src/main/webapp/partials/task.html
===================================================================
--- branches/ng-jtimer/src/main/webapp/partials/task.html 2014-07-22 13:18:31 UTC (rev 3019)
+++ branches/ng-jtimer/src/main/webapp/partials/task.html 2014-07-23 15:46:46 UTC (rev 3020)
@@ -8,7 +8,7 @@
<h5>Time :</h5>
<b>Total time :</b>{{totaltime|time}} <br/>
<b>Today Time :</b>{{todaytime|time}}
- <div ng-if="task.tags.length == 0">
+ <div ng-if="task.tags.length != 0">
<h5>Tags :</h5>
<span class="label label-info" ng-repeat="tag in task.tags">
{{tag}}
Deleted: branches/ng-jtimer/src/main/webapp/partials/timeModal.html
===================================================================
--- branches/ng-jtimer/src/main/webapp/partials/timeModal.html 2014-07-22 13:18:31 UTC (rev 3019)
+++ branches/ng-jtimer/src/main/webapp/partials/timeModal.html 2014-07-23 15:46:46 UTC (rev 3020)
@@ -1,113 +0,0 @@
-<div>
- <h3> Edition de la tâche.</h3>
-
- <div class="btn-group" dropdown is-open="status.isopen" ng-show="obj.action==''">
- <button type="button" class="btn btn-default btn-sm dropdown-toggle">
- Action à faire sur la tâche: <span class="caret"></span>
- </button>
- <ul class="dropdown-menu" role="menu">
- <li><a ng-click="periodAction1()">Ajouter une periode</a></li>
- <li><a ng-click="periodAction2()">Modifier une periode</a></li>
- <li><a ng-click="periodAction3()">Supprimer une periode</a></li>
- </ul>
-
- </div>
-
- <h4 ng-show="obj.action != ''"> {{obj.action}} d'une période</h4>
-
- <!-- Div dropdown choix de periode -->
- <div class="btn-group" dropdown is-open="status.isopen" ng-if="!activTime && obj.action !='' && obj.action !='Ajout'">
- <button type="button" class="btn btn-default btn-sm dropdown-toggle">
- Les périodes pour la tâche sélectionnée : <span class="caret"></span>
- </button>
- <ul class="dropdown-menu" role="menu">
-
- <li ng-repeat="(index,item) in times" >
-
- <a ng-click="select(item, index)">
- Début : {{getStartTime(item)}} - Durée : {{getStopTime(item)| time}}
- </a>
-
- </li>
-
- </ul>
- </div>
-
- <!-- div ajout d'une periode -->
- <div ng-if = " obj.action=='Ajout'">
-
- <hr/>
- <div class ="timepick">
- <div ng-controller="DatePickerCtrl" style="display:inline-block; min-height:290px;">
- <datepicker ng-model="dateobj.date" ng-change="changeDayDate()" min-date="minDate" max-date="dateMaxPicker" show-weeks="true" class="well well-sm"></datepicker>
- </div>
-
- <div class = "timepick" ng-controller="RadioTimeCtrl">
- <div>
- <div class="btn-group">
- <label class="btn btn-default btn-sm" ng-model="radioModel" ng-change="changeFonc()" btn-radio="'Left'">Début de période </label>
- <label class="btn btn-default btn-sm" ng-model="radioModel" ng-change="changeFonc()" btn-radio="'Right'">Fin de période </label>
- </div>
- </div>
- <div class="timepick">
- <timepicker
- ng-model="dateobj.aTime" ng-change="changeModel()" hour-step="hstep" minute-step="mstep" show-meridian="ismeridian">
- </timepicker>
- </div>
-
- </div>
- </div>
- <alert type="info" >Début : {{getStartObjTime()}} - Fin : {{getStopObjTime()}} - Duree : {{getObjDuration() | time}} </alert>
- </div>
-
-
-
- <!-- div modification d'une periode -->
- <div ng-if = "activTime && obj.action=='Modification'">
- <hr/>
-
- <alert type="danger" >Choisir une période :</alert>
-
- <div class = "timepick" ng-controller="RadioTimeCtrl">
- <br/>
-
-
- <div>
- <div class="btn-group">
- <label class="btn btn-default btn-sm" ng-model="radioModel" ng-change="changeFonc()" btn-radio="'Left'">Début de période </label>
- <label class="btn btn-default btn-sm" ng-model="radioModel" ng-change="changeFonc()" btn-radio="'Right'">Fin de période </label>
- </div>
- </div>
-
- <br/>
-
- <div class = "timepick">
- <timepicker
- ng-model="dateobj.aTime" ng-change="changeModel()" hour-step="hstep" minute-step="mstep" show-meridian="ismeridian">
- </timepicker>
- </div>
- <br/>
-
- </div>
-
-
- <alert type="info" >Début : {{getStartObjTime()}} - Fin : {{getStopObjTime()}} - Duree : {{getObjDuration() | time}} </alert>
-
- </div>
-
- <!-- div suppression d'une periode -->
- <div ng-if = "activTime && obj.action=='Suppression'">
- <alert type="danger" > La période suivante va être supprimée :<br/>
- Début : {{getStartObjTime()}} - Fin : {{getStopObjTime()}} - Duree : {{getObjDuration() | time}} </alert>
- </div>
-
-<!--
- <div class="modal-footer">
- <button class="btn btn-default btn-sm" ng-click="ok()">OK</button>
- <button class="btn btn-warning" ng-click="cancel()">Cancel</button>
- </div>
-
--->
-
-</div>
-
1
0
r3019 - in branches/ng-jtimer/src/main: java/org/chorem/jtimer/storage java/org/chorem/jtimer/utils java/org/chorem/jtimer/web resources webapp/css webapp/js webapp/partials
by obruce@users.chorem.org 22 Jul '14
by obruce@users.chorem.org 22 Jul '14
22 Jul '14
Author: obruce
Date: 2014-07-22 15:18:31 +0200 (Tue, 22 Jul 2014)
New Revision: 3019
Url: http://forge.chorem.org/projects/jtimer/repository/revisions/3019
Log:
Correction pour le rapport, changement dans le timeModal
Modified:
branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java
branches/ng-jtimer/src/main/java/org/chorem/jtimer/utils/ReportTask.java
branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/ReportResource.java
branches/ng-jtimer/src/main/resources/jtimer-default.properties
branches/ng-jtimer/src/main/webapp/css/app.css
branches/ng-jtimer/src/main/webapp/js/controllers.js
branches/ng-jtimer/src/main/webapp/partials/timesModal.html
Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java
===================================================================
--- branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java 2014-07-18 15:38:00 UTC (rev 3018)
+++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java 2014-07-22 13:18:31 UTC (rev 3019)
@@ -1,6 +1,5 @@
package org.chorem.jtimer.storage;
-import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.chorem.jtimer.config.JtimerConfig;
@@ -21,7 +20,6 @@
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.List;
import java.util.Set;
@@ -202,10 +200,14 @@
/* Insert */
+ /**
+ * Methode qui permet d'ajouter une tache a la base
+ * @param task the task to be added
+ */
public void addTask(TimerTask task) {
PreparedStatement statement = null;
- PreparedStatement statement2 = null;
- PreparedStatement statement3 = null;
+ PreparedStatement statement2;
+
try {
statement = connection.prepareStatement(config.getStorageQueryInsertTask());
statement.setString(1, task.getName());
@@ -221,13 +223,16 @@
String[] array;
//On recupere le path du parent
- if(StringUtils.isNotBlank(task.getParent())) {
+ if(!task.getParent().equals("")) {
statement2 = connection.prepareStatement(config.getStorageQuerySelectPath());
- statement2.setString(1, task.getTaskId());
+ //On insere l'identifiant du parent
+ statement2.setString(1, task.getParent());
ResultSet rs = statement2.executeQuery();
+
try {
+ rs.first();
String[] parentArray = (String[]) rs.getObject("path");
array = Arrays.copyOf(parentArray, parentArray.length + 1);
array[parentArray.length] = task.getTaskId();
@@ -239,7 +244,6 @@
array = new String[]{task.getTaskId()};
}
-
updateTaskPath(task.getTaskId(), array);
@@ -425,7 +429,6 @@
closeStatement(statement2);
}
- log.warn(tasks);
return tasks;
}
@@ -557,13 +560,17 @@
ResultSet rs = statement.executeQuery();
while(rs.next()){
- ReportTask task = new ReportTask(rs.getString("name"),
- rs.getString("taskId"),
- rs.getString("parent"),
- rs.getLong("totalduration"));
+ String name = rs.getString("name");
+ String taskId = rs.getString("taskId");
+ String parent=rs.getString("parent");
+ long totalDuration = rs.getLong("totalduration");
- parentSet.add(rs.getString("parent"));
+ ReportTask task = new ReportTask(name,taskId,parent,totalDuration);
+ if(!parent.equals("")) {
+ parentSet.add(rs.getString("parent"));
+ }
+
//Arraylist of reportask for the map
Set tmp = new HashSet();
if(map.containsKey(rs.getString("parent"))){
@@ -575,24 +582,40 @@
map.put(rs.getString("parent"), tmp);
}
- // parent tasks
- statement2 = connection.prepareStatement(config.getStorageQuerySelectParentTask());
- statement2.setObject(1, parentSet.toArray(new String[parentSet.size()]));
+ //Tant que tous les parents n'ont pas ete recupere on boucle
+ while(!parentSet.isEmpty()) {
+ //On va chercher les taches parent
+ statement2 = connection.prepareStatement(config.getStorageQuerySelectParentTask());
+ statement2.setObject(1, parentSet.toArray(new String[parentSet.size()]));
- rs = statement2.executeQuery();
- while(rs.next()){
+ //On vide le parentSet avant de verifier si les taches parentes ont des parents
+ parentSet.clear();
- ReportTask task = new ReportTask(rs.getString("name"),
- rs.getString("taskId"),
- rs.getString("parent"),
- (long) 0);
+ //On execute la requete
+ rs = statement2.executeQuery();
- Set tmp = new HashSet();
- if(map.containsKey(rs.getString("parent") )){
- tmp = (HashSet) map.get(rs.getString("parent"));
+ while (rs.next()) {
+
+ String name = rs.getString("name");
+ String taskId = rs.getString("taskId");
+ String parent=rs.getString("parent");
+ long totalDuration = (long) 0;
+
+ ReportTask task = new ReportTask(name,taskId,parent,totalDuration);
+
+ //On ajoute le parent de la tache au set
+ if(!parent.equals("")) {
+ parentSet.add(rs.getString("parent"));
+ }
+
+ Set tmp = new HashSet();
+ if (map.containsKey(rs.getString("parent"))) {
+ tmp = (HashSet) map.get(rs.getString("parent"));
+ }
+ tmp.add(task);
+ map.put(rs.getString("parent"), tmp);
+
}
- tmp.add(task);
- map.put(rs.getString("parent"), tmp);
}
}catch(SQLException ex) {
@@ -606,7 +629,6 @@
}
- //TODO
/**
* Methode qui retourne les taches minutees entre deux bornes par semaine
* @param startDate borne inferieur
@@ -615,13 +637,15 @@
*/
public HashMap<Integer,HashMap<String, Set<ReportTask>>> getReportByWeek(Long startDate, Long endDate){
+ //Le resultat sous forme string parent, array de reportTask
HashMap<Integer,HashMap<String, Set<ReportTask>>> res = new HashMap<>();
+ HashMap<Integer, Set<String>> parentWeekHash = new HashMap<>();
-
PreparedStatement statement = null;
PreparedStatement statement2 = null;
try{
+ //Les taches minutees sur les differentes semaines
statement = connection.prepareStatement(config.getStorageQuerySelectReportWeekTimedTasks());
statement.setLong(1, startDate);
@@ -632,53 +656,90 @@
while(rs.next()) {
int week = rs.getInt("week");
+ //Si la week n'est pas présent
if(res.get(week)==null) {
res.put(week, new HashMap<String, Set<ReportTask>>());
}
- ReportTask task = new ReportTask(rs.getString("name"),
- rs.getString("taskId"),
- rs.getString("parent"),
- rs.getLong("totalduration"));
+ String name = rs.getString("name");
+ String taskId = rs.getString("taskId");
+ String parent=rs.getString("parent");
+ long totalDuration = rs.getLong("totalduration");
- Set tmp = new HashSet();
- if (res.get(week).containsKey(rs.getString("parent"))) {
- tmp = (Set)res.get(week).get(rs.getString("parent"));
+ ReportTask task = new ReportTask(name,taskId,parent,totalDuration);
+
+ //On ajoute les elements au set du resultat
+ Set tmp;
+ if(res.containsKey(week) && res.get(week).containsKey(parent)){
+ tmp = (Set)res.get(week).get(parent);
+ }else{
+ tmp=new HashSet<>();
}
tmp.add(task);
- res.get(week).put(rs.getString("parent"), tmp);
+ //On ajoute le resultat: week, set de reportTask
+ res.get(week).put(parent, tmp);
+ //On ajoute le parent pour le week au set de parent
+ Set tmp2;
+ if (parentWeekHash.containsKey(week)) {
+ tmp2 = (Set)parentWeekHash.get(week);
+ }else{
+ tmp2=new HashSet<>();
+ }
+ tmp2.add(parent);
+
+ parentWeekHash.put(week,tmp2);
+
}
+ Set<Integer> keySet = parentWeekHash.keySet();
// not timed tasks
- statement2 = connection.prepareStatement(config.getStorageQuerySelectReportRootTask());
- Set notTimedArray = new HashSet();
+ for(Integer key : keySet){
- rs = statement2.executeQuery();
+ //Tant que tous les parents n'ont pas ete recupere on boucle
+ while(!parentWeekHash.get(key).isEmpty()) {
+ //On va chercher les taches parent
+ statement2 = connection.prepareStatement(config.getStorageQuerySelectParentTask());
+ statement2.setObject(1, parentWeekHash.get(key).toArray(new String[parentWeekHash.get(key).size()]));
- while(rs.next()){
- ReportTask task = new ReportTask(rs.getString("name"),
- rs.getString("taskId"),
- rs.getString("parent"),
- (long) 0);
+ //On vide le parentSet avant de verifier si les taches parentes ont des parents
+ parentWeekHash.get(key).clear();
- notTimedArray.add(task);
- }
+ //On execute la requete
+ rs = statement2.executeQuery();
+ while (rs.next()) {
- Iterator iter = res.keySet().iterator();
+ String name = rs.getString("name");
+ String taskId = rs.getString("taskId");
+ String parent=rs.getString("parent");
+ long totalDuration = (long) 0;
- while(iter.hasNext()) {
- Integer key = (Integer)iter.next();
- Set cloneNotTimedArray=new HashSet();
+ ReportTask task = new ReportTask(name,taskId,parent,totalDuration);
- for(ReportTask toClone:(Set<ReportTask>)notTimedArray){
- cloneNotTimedArray.add(new ReportTask(toClone));
+ //On ajoute le parent de la tache au set
+ if(!parent.equals("")) {
+ parentWeekHash.get(key).add(rs.getString("parent"));
+ }
+
+ //On ajoute les elements au set du resultat
+ Set tmp;
+ if (res.get(key).containsKey(parent)) {
+ tmp = (Set)res.get(key).get(parent);
+ }else{
+ tmp=new HashSet<>();
+ }
+ tmp.add(task);
+
+ //On ajoute le resultat: week, set de reportTask
+ res.get(key).put(parent, tmp);
+
+ }
}
- res.get(key).put("", cloneNotTimedArray);
}
+
}catch(SQLException ex) {
throw new StorageException("Can't get report", ex);
} finally {
@@ -767,6 +828,8 @@
/**
* Methoque qui met à jour le path d'une tache
* @param taskId l'identifiant de la tache
+ * @param array l'array representant la tache et ses parents dans l'ordre parent -> enfant
+ *
*/
public void updateTaskPath(String taskId, String[] array){
PreparedStatement statement = null;
Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/utils/ReportTask.java
===================================================================
--- branches/ng-jtimer/src/main/java/org/chorem/jtimer/utils/ReportTask.java 2014-07-18 15:38:00 UTC (rev 3018)
+++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/utils/ReportTask.java 2014-07-22 13:18:31 UTC (rev 3019)
@@ -148,12 +148,17 @@
@Override
public int hashCode() {
- return super.hashCode();
+
+ int hash = 1;
+ hash = hash * 17 + name.hashCode();
+ hash = hash * 31 + taskId.hashCode();
+ hash = hash * 13 + parentId.hashCode();
+
+ return hash;
}
@Override
public boolean equals(Object obj) {
-
- return this.taskId == ((ReportTask)obj).getTaskId();
+ return this.taskId.equals(((ReportTask)obj).getTaskId());
}
}
Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/ReportResource.java
===================================================================
--- branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/ReportResource.java 2014-07-18 15:38:00 UTC (rev 3018)
+++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/ReportResource.java 2014-07-22 13:18:31 UTC (rev 3019)
@@ -61,17 +61,19 @@
type = String.valueOf(getQuery().getValues("type"));
log.info("type " +type);
} catch (Exception e) {
- log.info("type non present dans l'url" + e);
+ log.info("Rapport : type non present dans l'url" + e);
}
try {
startDate = Long.valueOf(getQuery().getValues("start_Date"));
+ log.info("start" +startDate);
} catch (Exception e) {
- log.info("type non present dans l'url" + e);
+ log.info("Rapport : startDate non present dans l'url" + e);
}
try {
endDate = Long.valueOf(getQuery().getValues("end_Date"));
+ log.info("end" +endDate);
} catch (Exception e) {
- log.info("type non present dans l'url" + e);
+ log.info("Rapport : endDate non present dans l'url" + e);
}
//On ne recupere que les elements interessants
@@ -82,27 +84,23 @@
HashMap<String, Set<ReportTask>> storedTask = storage.getReportByProject(startDate, endDate);
ArrayList<ReportTask> res = new ArrayList<>(); //l'arraylist de resultat
- log.warn("Project " +storedTask.toString());
+ if(!storedTask.isEmpty()) {
+ //On parcours le map récupérer de la base pour recéer l'arbre
+ for (ReportTask rt : storedTask.get("")) {
+ recursivSortTask(storedTask, rt, res);
+ }
- //On parcours le map récupérer de la base pour recéer l'arbre
- for(ReportTask rt: storedTask.get("")){
- recursivSortTask(storedTask, rt, res );
+ //On enleve les éléments non voulus
+ recursiveRemoveUnreportedTask(res, toReport);
+
}
- log.warn("inter " +res.toString());
-
- //On enleve les éléments non voulus
- recursiveRemoveUnreportedTask(res,toReport);
-
- log.warn("envoyé " +res.toString());
-
json = gson.toJson(res, ArrayList.class);
}
if(type.equals("Week")) {
HashMap<Integer, HashMap<String, Set<ReportTask>>> storedTask = storage.getReportByWeek(startDate, endDate);
- log.warn("Week " +storedTask.toString());
HashMap<Integer, ArrayList<ReportTask>> res = new HashMap<>();
Iterator iter = storedTask.keySet().iterator();
@@ -115,8 +113,7 @@
recursivSortTask(storedTask.get(key), rt, tmp);
}
recursiveRemoveUnreportedTask(tmp, (ArrayList<String>) toReport.clone());
- log.warn("this is tmp" + tmp);
- log.warn("this is toReport" + toReport);
+
res.put(key, tmp);
}
@@ -187,6 +184,7 @@
}
+
}
}
Modified: branches/ng-jtimer/src/main/resources/jtimer-default.properties
===================================================================
--- branches/ng-jtimer/src/main/resources/jtimer-default.properties 2014-07-18 15:38:00 UTC (rev 3018)
+++ branches/ng-jtimer/src/main/resources/jtimer-default.properties 2014-07-22 13:18:31 UTC (rev 3019)
@@ -2,7 +2,7 @@
# jTimer default properties
###
# jTimer storage path
-jtimer.storage.path=/home/olivia/Bureau/jtimer/jtimer/BDDTest
+jtimer.storage.path=/home/olivia/Bureau/jtimer/jtimer/BDDTest4
###
# SQL properties
###
@@ -96,8 +96,7 @@
AND TA.creationDate > ? \
AND TA.creationDate < ? \
AND TA.removed = 0 \
- GROUP BY TA.taskId \
- ORDER BY TA.creationDate DESC
+ GROUP BY TA.taskId
jtimer.storage.select.report.roottasks=SELECT * \
FROM task \
WHERE (taskId not in (SELECT taskid FROM tasktime) AND removed = 0 )
Modified: branches/ng-jtimer/src/main/webapp/css/app.css
===================================================================
--- branches/ng-jtimer/src/main/webapp/css/app.css 2014-07-18 15:38:00 UTC (rev 3018)
+++ branches/ng-jtimer/src/main/webapp/css/app.css 2014-07-22 13:18:31 UTC (rev 3019)
@@ -274,20 +274,6 @@
.selected-row {
background-color: #BCD1E5;
-
- -moz-transition-property: background-color;
- -webkit-transition-property: background-color;
- -o-transition-property: background-color;
- -ms-transition-property: background-color;
- transition-property: background-color;
-
-
- -moz-transition-duration:3s;
- -webkit-transition-duration:3s;
- -o-transition-duration:3s;
- -ms-transition-duration:3s;
- transition-duration:3s;
-
}
.no-alarm {
Modified: branches/ng-jtimer/src/main/webapp/js/controllers.js
===================================================================
--- branches/ng-jtimer/src/main/webapp/js/controllers.js 2014-07-18 15:38:00 UTC (rev 3018)
+++ branches/ng-jtimer/src/main/webapp/js/controllers.js 2014-07-22 13:18:31 UTC (rev 3019)
@@ -1027,55 +1027,6 @@
}
});
-
- modalInstance.result.then(function (item) {
-
- if(item.index != -1){
- if(item.action=='Modification'){
- //On met la valeur à jour
-
- $scope.data.times[id][item.index].changeCreationDate(item.creationDate);
- $scope.data.times[id][item.index].changeDuration(item.time);
-
- //init
- if(!$scope.todo.stockedEditedTimes[id]){$scope.todo.stockedEditedTimes[id]=[]; }
-
- //On ajoute dans la tdList
- $scope.todo.stockedEditedTimes[id].push($scope.data.times[id][item.index]);
-
- save();
- }
-
- if(item.action=='Ajout'){
- //init
-
- if(!$scope.data.times[id]){$scope.data.times[id]= [];};
- if(!$scope.todo.stockedNewTimes[id]){$scope.todo.stockedNewTimes[id] = []};
-
- //on cree le temps
- var res = new TaskTime(node.task,undefined,item.creationDate,item.time);
- $scope.data.times[id].push(res);
- $scope.todo.stockedNewTimes[id].push(res);
- save();
- }
-
- if(item.action == 'Suppression'){
- // init de l'objet
- if(!$scope.todo.stockedDeletedTimes[id]){
- $scope.todo.stockedDeletedTimes[id] = []
- };
- //on pousse l'objet à supprimer
- $scope.todo.stockedDeletedTimes[id].push($scope.data.times[id][item.index].timeId);
-
- $scope.data.times[id].splice(item.index,1);
- if($scope.data.times[id]==[]){
- delete $scope.data.times[id];
- }
- save();
- }
- data = $scope.data.times;
- }
- });
}
$scope.popupTime = function (node){
@@ -1195,7 +1146,7 @@
* @param $scope
* @param $modalInstance
*/
-function OptionModalCtrl($scope, $modalInstance, serverAlarmAccess, taskTimes, indent, selectTask , totaltime, todaytime, disabled,todo) {
+function OptionModalCtrl($scope, $modalInstance, serverAlarmAccess, serverTimeAccess, taskTimes, indent, selectTask , totaltime, todaytime, disabled,todo) {
$scope.taskTimes = taskTimes;
$scope.indent = indent;
$scope.task = selectTask;
@@ -1334,7 +1285,7 @@
}else{
min =min - prevMin;
}
- console.log("hm " +hour +" " +min);
+
}else{
var prevHour = parseInt(msToHour(todaytime));
var prevMin = parseInt(msToMin(todaytime));
@@ -1347,7 +1298,6 @@
}else{
min =min - prevMin;
}
- console.log("hm " +hour +" " +min);
}
if($scope.alarm.hour > 0 || $scope.alarm.min> 0 ){
@@ -1595,48 +1545,79 @@
};
-function TimesModalCtrl($scope) {
+function TimesModalCtrl($scope, serverTimeAccess) {
$scope.dateobj={date : new Date(), today : new Date()};
$scope.selectedItem=null;
- //TODO if different de new date .startPeriod .endPeriod
+ $scope.limit={};
+ $scope.limit.fromHour =0;
+ $scope.limit.fromMin =0;
+ $scope.limit.toHour = 0;
+ $scope.limit.toMin = 0;
+ $scope.limit.limitMin = 0;
+
//Le pas des heures et minutes
$scope.hstep = 1;
$scope.mstep = 1;
-
- //L'objet retourner
- $scope.obj.creationDate=new Date().getTime();
- $scope.obj.time=0;
- $scope.obj.index = -1;
- $scope.obj.action = '';
-
//Pour l'affichage
$scope.getStartTime = function(item){return moment(item.creationDate).format("H:mm:ss");}
$scope.getStopTime = function(item){return moment(item.creationDate + item.time).format("H:mm:ss");}
$scope.getDuration = function(item){return item.time;}
- //selectionne un element dans le dropdown
+ /**
+ * Met a jour les valeurs des input de selection d'heure
+ */
+ $scope.updateLimitHour = function(){
+ if(!($scope.limit.toHour > $scope.limit.fromHour)){
+
+ $scope.limit.toHour = $scope.limit.fromHour;
+
+ if($scope.limit.toHour == $scope.limit.fromHour){
+ $scope.limit.toMin = $scope.limit.fromMin;
+ $scope.limit.limitMin = $scope.limit.fromMin;
+
+ }else{
+ $scope.limit.limitMin = 0;
+ }
+
+ }else{
+ $scope.limit.limitMin = 0;
+ }
+ }
+
+ /*
+ * Selectionne un element dans le dropdown
+ */
$scope.select = function(item, ind){
- //On intialise l'objet a envoyer
- $scope.obj.index = ind;
- $scope.obj.creationDate=item.creationDate;
- $scope.obj.time=item.time;
-
$scope.selectedItem = item;
$scope.dateobj.startPeriod = item.creationDate;
$scope.dateobj.endPeriod = item.creationDate + item.time;
};
- $scope.addTime= function(date){
+ /**
+ * Change le booleen specifiant si on est en train d'ajouter un temps
+ */
+ $scope.addTime= function(){
$scope.addTimeBool=true;
}
+ /**
+ * Ferme la partie d'ajout de temps
+ */
+ $scope.cancel = function(){
+ $scope.addTimeBool=false;
+ }
+
+ /**
+ * Methode qui va supprimer un temps
+ *
+ */
$scope.removeTime = function(ind, item){
if(!$scope.todo.stockedDeletedTimes[item.taskId]){
$scope.todo.stockedDeletedTimes[item.taskId] = []
@@ -1655,6 +1636,96 @@
};
+ /**
+ * Methode qui sauve le temps
+ *
+ */
+ $scope.saveNewTime = function(){
+
+ $scope.dateobj.date.setHours($scope.limit.fromHour, $scope.limit.fromMin, 0, 0);
+ //On calcule le temps de la periode
+ var time = (hourToms($scope.limit.toHour) + minToms($scope.limit.toMin)) -
+ (hourToms($scope.limit.fromHour) + minToms($scope.limit.fromMin));
+
+ //on cree le temps
+ var res = new TaskTime(task,undefined,$scope.dateobj.date.getTime(),time);
+ console.log("Nouveau temps ");
+ console.log(res);
+ console.log($scope.dateobj.date);
+
+ res["modificationDate"]=Date.now();
+
+ serverTimeAccess.create({taskId: task.taskId,dispatch:true} , angular.toJson(res),
+ function(){
+ console.log("persist time success" + task);
+
+ },
+ function(){
+ console.log("fail");
+ });
+
+ $scope.taskTimes.times[task.taskId] = [];
+ $scope.taskTimes.times[task.taskId].push(res);
+ $scope.changeDate();
+
+ //On ferme la partie d'ajout de temps
+ $scope.limit.fromHour =0;
+ $scope.limit.fromMin =0;
+ $scope.limit.toHour = 0;
+ $scope.limit.toMin = 0;
+ $scope.limit.limitMin = 0;
+
+ $scope.addTimeBool=false;
+
+ }
+
+ /**
+ * Methode qui sauve le temps
+ *
+ */
+ $scope.updateTime = function(){
+
+ $scope.selectedItem;
+
+ $scope.dateobj.date.setHours($scope.limit.fromHour, $scope.limit.fromMin, 0, 0);
+ //On calcule le temps de la periode
+ var time = (hourToms($scope.limit.toHour) + minToms($scope.limit.toMin)) -
+ (hourToms($scope.limit.fromHour) + minToms($scope.limit.fromMin));
+
+ $scope.selectedItem["time"] = time;
+ $scope.selectedItem["creationDate"] = $scope.dateobj.date.getTime();
+ $scope.selectedItem["modificationDate"]=Date.now();
+
+ serverTimeAccess.update({taskId: task.taskId,dispatch:true} , angular.toJson($scope.selectedItem),
+ function(){
+ console.log("update time success" + task);
+
+ },
+ function(){
+ console.log("fail");
+ });
+
+ }
+
+ /**
+ * Converts hours to ms
+ */
+ var hourToms = function(h){
+ return 60* minToms(h)
+ }
+
+ /**
+ * Converts minutes to ms
+ */
+ var minToms = function(m){
+ return m*60*1000;
+ }
+
+
+ /**
+ * Methode qui a chaque changement de date va recharger les elements dans la liste des temps
+ *
+ */
$scope.changeDate= function(){
$scope.selectedItem = null;
@@ -1664,19 +1735,19 @@
endday.setHours(23,59,59,999);
startday.setHours(0,0,0,0);
- console.log($scope.dateobj.end );
-
$scope.times=[];
- // Les temps de la tache
+ //On va recuperer les temps de la tache
angular.forEach($scope.taskTimes.times[$scope.indent],function(time){
+ // si le temps est entre les bornes de la journées
if(time.creationDate> startday.getTime() &&
time.creationDate< endday.getTime()){
+ //ajout du temps
$scope.times.push(time);
- console.log("pusssh");
}
});
};
+ //force le changement de date a l'ouverture du modal
$scope.changeDate();
};
Modified: branches/ng-jtimer/src/main/webapp/partials/timesModal.html
===================================================================
--- branches/ng-jtimer/src/main/webapp/partials/timesModal.html 2014-07-18 15:38:00 UTC (rev 3018)
+++ branches/ng-jtimer/src/main/webapp/partials/timesModal.html 2014-07-22 13:18:31 UTC (rev 3019)
@@ -36,10 +36,17 @@
No time for {{task.name}} at this date.
</span>
</div>
- <i class="glyphicon glyphicon-plus-sign btn" ng-click="addTime(date)"> Add Time{{addTimeBool}}</i>
+ <i class="glyphicon glyphicon-plus-sign btn" ng-click="addTime()"> Add Time</i>
</div>
</div>
+
+ <div class="paded" ng-if="addTimeBool">
+ <button class="btn btn-default btn-sm" ng-click="saveNewTime()" > Save</button>
+ <button class="btn btn-default btn-sm" ng-click="cancel()" > Return</button>
+ </div>
+
+
</div>
<div class="right paded">
@@ -56,21 +63,21 @@
<h4>Modification : </h4>
<div style="display : inline-block;">
- From :
+ <span>From :</span>
+ <input type="number" step="1" min="0" max="23" ng-change="updateLimitHour()" ng-model="limit.fromHour">h:
+ <input type="number" step="1" min="0" max="59" ng-change="updateLimitHour()" ng-model="limit.fromMin">m
+
</div>
+ <br/>
<div style="display : inline-block;">
- <timepicker
- ng-model="dateobj.startPeriod" ng-change="changeModel()" hour-step="hstep" minute-step="mstep" show-meridian="ismeridian">
- </timepicker>
+ <span> To :</span>
+ <input type="number" step="1" min="{{limit.fromHour}}" max="23" ng-change="updateLimitHour()" ng-model="limit.toHour">h:
+ <input type="number" step="1" min="{{limit.limitMin}}" max="59" ng-model="limit.toMin">m
</div>
- <div style="display : inline-block;">
- To :
+
+ <div>
+ <button class="btn btn-default btn-sm" ng-click="updateTime()" > Update! </button>
</div>
- <div style="display : inline-block;">
- <timepicker
- ng-model="dateobj.endPeriod" ng-change="changeModel()" hour-step="hstep" minute-step="mstep" show-meridian="ismeridian">
- </timepicker>
- </div>
</div>
<!--Si ajout selectionne-->
@@ -78,18 +85,20 @@
<h4>Period's limit :</h4>
<div style="display : inline-block;">
<span>From :</span>
- <input type="number" step="1" min="0" max="23" ng-model="fromhHour">h:
- <input type="number" step="1" min="0" max="59" ng-model="fromMin">m
+ <input type="number" step="1" min="0" max="23" ng-change="updateLimitHour()" ng-model="limit.fromHour">h:
+ <input type="number" step="1" min="0" max="59" ng-change="updateLimitHour()" ng-model="limit.fromMin">m
</div>
<br/>
<div style="display : inline-block;">
<span> To :</span>
- <input type="number" step="1" min="0" max="23" ng-model="toHour">h:
- <input type="number" step="1" min="0" max="59" ng-model="toMin">m
+ <input type="number" step="1" min="{{limit.fromHour}}" max="23" ng-change="updateLimitHour()" ng-model="limit.toHour">h:
+ <input type="number" step="1" min="{{limit.limitMin}}" max="59" ng-model="limit.toMin">m
</div>
</div>
</div>
</div>
+
+
1
0
r3018 - in branches/ng-jtimer/src/main/webapp: css js partials
by obruce@users.chorem.org 18 Jul '14
by obruce@users.chorem.org 18 Jul '14
18 Jul '14
Author: obruce
Date: 2014-07-18 17:38:00 +0200 (Fri, 18 Jul 2014)
New Revision: 3018
Url: http://forge.chorem.org/projects/jtimer/repository/revisions/3018
Log:
interface: changement modal, ajout rapport sans les temps
Modified:
branches/ng-jtimer/src/main/webapp/css/app.css
branches/ng-jtimer/src/main/webapp/js/controllers.js
branches/ng-jtimer/src/main/webapp/partials/reportModal.html
branches/ng-jtimer/src/main/webapp/partials/reportNestedTask.html
branches/ng-jtimer/src/main/webapp/partials/timesModal.html
Modified: branches/ng-jtimer/src/main/webapp/css/app.css
===================================================================
--- branches/ng-jtimer/src/main/webapp/css/app.css 2014-07-18 15:37:03 UTC (rev 3017)
+++ branches/ng-jtimer/src/main/webapp/css/app.css 2014-07-18 15:38:00 UTC (rev 3018)
@@ -406,7 +406,7 @@
.divYScrolable {
overflow-y:scroll;
- height:200px;
+ height:170px;
width:250px;
}
Modified: branches/ng-jtimer/src/main/webapp/js/controllers.js
===================================================================
--- branches/ng-jtimer/src/main/webapp/js/controllers.js 2014-07-18 15:37:03 UTC (rev 3017)
+++ branches/ng-jtimer/src/main/webapp/js/controllers.js 2014-07-18 15:38:00 UTC (rev 3018)
@@ -1391,7 +1391,7 @@
function ReportModalInstanceCtrl($scope, $modalInstance,$http, $sce, serverReportAccess, tree){
- $scope.modal={radioModel: "Project"};
+ $scope.modal={radioModel: "Project", showTime : true};
$scope.tree = tree;
$scope.obj={
@@ -1533,7 +1533,6 @@
$scope.open = function($event) {
$event.preventDefault();
$event.stopPropagation();
-
$scope.opened = true;
};
}
@@ -1634,6 +1633,9 @@
$scope.dateobj.endPeriod = item.creationDate + item.time;
};
+ $scope.addTime= function(date){
+ $scope.addTimeBool=true;
+ }
$scope.removeTime = function(ind, item){
if(!$scope.todo.stockedDeletedTimes[item.taskId]){
Modified: branches/ng-jtimer/src/main/webapp/partials/reportModal.html
===================================================================
--- branches/ng-jtimer/src/main/webapp/partials/reportModal.html 2014-07-18 15:37:03 UTC (rev 3017)
+++ branches/ng-jtimer/src/main/webapp/partials/reportModal.html 2014-07-18 15:38:00 UTC (rev 3018)
@@ -9,7 +9,7 @@
<!-- Datepicker div -->
<div style="border:1px solid black; display : inline-block;vertical-align: top;margin-left:1px;margin-right:1px;">
<h4><u>Option :</u></h4>
- De :
+ From :
<div style="margin-left:2px;" ng-controller="ReportDatePickerCtrl" class="row">
<div class="col-md-6">
<p class="input-group medium_input">
@@ -21,7 +21,7 @@
</div>
</div>
- A :
+ To :
<div style="margin-left:1px;margin-right:1px;" class="row" ng-controller="ReportDatePickerCtrl">
<div class="col-md-6">
<p class="input-group medium_input">
@@ -32,22 +32,27 @@
</p>
</div>
</div>
- <h4>Sort by :</h4>
+ <h4>Group by :</h4>
<div style="margin-left:25px;" >
<div class="btn-group">
<label class="btn btn-default" ng-model="modal.radioModel" btn-radio="'Project'">Project</label>
- <label class="btn btn-default" ng-model="modal.radioModel" btn-radio="'Day'">Day</label>
+ <label class="btn btn-default" ng-model="modal.radioModel" disabled="true" btn-radio="'Day'">Day</label>
<label class="btn btn-default" ng-model="modal.radioModel" btn-radio="'Week'">Week</label>
</div>
<br/>
<div style="margin-left:30px;" class="btn-group">
- <label class="btn btn-default" ng-model="modal.radioModel" btn-radio="'Month'">Month</label>
- <label class="btn btn-default" ng-model="modal.radioModel" btn-radio="'Year'">Year</label>
+ <label class="btn btn-default" ng-model="modal.radioModel" disabled="true" btn-radio="'Month'">Month</label>
+ <label class="btn btn-default" ng-model="modal.radioModel" disabled="true" btn-radio="'Year'">Year</label>
</div>
</div>
+ <div>
+ <span>Afficher les temps </span>
+ <input type="checkbox" ng-model="modal.showTime" />
+ </div>
+
<hr/>
<div>
<h4><u>Projet :</u></h4>
Modified: branches/ng-jtimer/src/main/webapp/partials/reportNestedTask.html
===================================================================
--- branches/ng-jtimer/src/main/webapp/partials/reportNestedTask.html 2014-07-18 15:37:03 UTC (rev 3017)
+++ branches/ng-jtimer/src/main/webapp/partials/reportNestedTask.html 2014-07-18 15:38:00 UTC (rev 3018)
@@ -1,7 +1,7 @@
<div style="display : block" >
<div style="min-width : 100px; max-width : 110px; display : inline-block;">-{{subtask.name}}</div>
- <div style="min-width : 100px; max-width : 150px; display : inline-block;" ng-show="subtask.selftime != 0">{{subtask.selftime|time}} </div>
+ <div style="min-width : 100px; max-width : 150px; display : inline-block;" ng-show="subtask.selftime != 0 && modal.showTime">{{subtask.selftime|time}}</div>
</div>
<div style="margin-left : 10px"
ng-repeat="subtask in subtask.subtasks" ng-include="'./partials/reportNestedTask.html'">
Modified: branches/ng-jtimer/src/main/webapp/partials/timesModal.html
===================================================================
--- branches/ng-jtimer/src/main/webapp/partials/timesModal.html 2014-07-18 15:37:03 UTC (rev 3017)
+++ branches/ng-jtimer/src/main/webapp/partials/timesModal.html 2014-07-18 15:38:00 UTC (rev 3018)
@@ -22,25 +22,29 @@
<div> <!--ng-show="dateChosen"-->
- Time for this date :
- <div class="paded divYScrolable">
- <div ng-repeat="(index,item) in times" class="rowYScrolable" ng-class="{ 'selected-row' : (item === selectedItem)}">
+ <div ng-if="!addTimeBool">
+ Times for this date :
+ <div class="paded divYScrolable">
+ <div ng-repeat="(index,item) in times" class="rowYScrolable" ng-class="{ 'selected-row' : (item === selectedItem)}">
- <div class="borderedbottom" ng-click="select(item, index)">
- At : {{getStartTime(item)}} for : {{getDuration(item)| time}}<i class="glyphicon glyphicon-minus-sign btn" ng-click="removeTime(index,item)"></i>
+ <div class="borderedbottom" ng-click="select(item, index)">
+ At : {{getStartTime(item)}} for : {{getDuration(item)| time}}<i class="glyphicon glyphicon-minus-sign btn" ng-click="removeTime(index,item)"></i>
+ </div>
</div>
+
+ <span ng-show="times.length == 0" >
+ No time for {{task.name}} at this date.
+ </span>
</div>
+ <i class="glyphicon glyphicon-plus-sign btn" ng-click="addTime(date)"> Add Time{{addTimeBool}}</i>
- <span ng-show="times.length == 0" >
- No time for {{task.name}} at this date.
- </span>
</div>
-
</div>
</div>
- <div class="right paded" ng-if="selectedItem">
- <div>
+ <div class="right paded">
+ <!--Si periode selectionnee-->
+ <div ng-if="!addTimeBool && selectedItem">
<h4>Description : </h4>
<div class="paded">
@@ -52,7 +56,7 @@
<h4>Modification : </h4>
<div style="display : inline-block;">
- De :
+ From :
</div>
<div style="display : inline-block;">
<timepicker
@@ -60,7 +64,7 @@
</timepicker>
</div>
<div style="display : inline-block;">
- A :
+ To :
</div>
<div style="display : inline-block;">
<timepicker
@@ -68,5 +72,24 @@
</timepicker>
</div>
</div>
+
+ <!--Si ajout selectionne-->
+ <div ng-show="addTimeBool">
+ <h4>Period's limit :</h4>
+ <div style="display : inline-block;">
+ <span>From :</span>
+ <input type="number" step="1" min="0" max="23" ng-model="fromhHour">h:
+ <input type="number" step="1" min="0" max="59" ng-model="fromMin">m
+
+ </div>
+ <br/>
+ <div style="display : inline-block;">
+ <span> To :</span>
+ <input type="number" step="1" min="0" max="23" ng-model="toHour">h:
+ <input type="number" step="1" min="0" max="59" ng-model="toMin">m
+ </div>
+
+ </div>
+
</div>
</div>
1
0
r3017 - in branches/ng-jtimer/src/main: java/org/chorem/jtimer/config java/org/chorem/jtimer/storage java/org/chorem/jtimer/utils java/org/chorem/jtimer/web resources
by obruce@users.chorem.org 18 Jul '14
by obruce@users.chorem.org 18 Jul '14
18 Jul '14
Author: obruce
Date: 2014-07-18 17:37:03 +0200 (Fri, 18 Jul 2014)
New Revision: 3017
Url: http://forge.chorem.org/projects/jtimer/repository/revisions/3017
Log:
conf, storage, resource: ajout requete pour le path
Modified:
branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfig.java
branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfigOption.java
branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java
branches/ng-jtimer/src/main/java/org/chorem/jtimer/utils/ReportTask.java
branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/ReportResource.java
branches/ng-jtimer/src/main/resources/jtimer-default.properties
Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfig.java
===================================================================
--- branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfig.java 2014-07-18 07:52:13 UTC (rev 3016)
+++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfig.java 2014-07-18 15:37:03 UTC (rev 3017)
@@ -123,6 +123,10 @@
return appConfig.getOption(JtimerConfigOption.JTIMER_STORAGE_SELECT_PATH.getKey());
}
+ public String getStorageQuerySelectParentTask(){
+ return appConfig.getOption(JtimerConfigOption.JTIMER_STORAGE_SELECT_PARENT_TASK.getKey());
+ }
+
public String getStorageQuerySelectTimedTask(){
return appConfig.getOption(JtimerConfigOption.JTIMER_STORAGE_SELECT_TIMED_TASK.getKey());
}
Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfigOption.java
===================================================================
--- branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfigOption.java 2014-07-18 07:52:13 UTC (rev 3016)
+++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfigOption.java 2014-07-18 15:37:03 UTC (rev 3017)
@@ -112,6 +112,12 @@
"",
String.class
),
+ JTIMER_STORAGE_SELECT_PARENT_TASK(
+ "jtimer.storage.select.parent.task",
+ "requête qui va récupérer les taches parentes en fonction de la presence de son identifiant dans un array",
+ "",
+ String.class
+ ),
JTIMER_STORAGE_SELECT_TIMED_TASK(
"jtimer.storage.select.timed.task",
"requête de selection des tâches minutées",
Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java
===================================================================
--- branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java 2014-07-18 07:52:13 UTC (rev 3016)
+++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java 2014-07-18 15:37:03 UTC (rev 3017)
@@ -20,8 +20,10 @@
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
+import java.util.Set;
/**
* Implementation du stockage des taches en base de données basée sur h2.
@@ -376,8 +378,6 @@
PreparedStatement statement = null;
PreparedStatement statement2 = null;
- log.warn("plouplou");
-
try {
statement = connection.prepareStatement(config.getStorageQuerySelectTimedTask());
statement.setLong(1, date);
@@ -392,9 +392,8 @@
task.setParent(rs.getString("parent"));
task.setRemoved(rs.getLong("removed"));
- log.info("recherche " + rs.getObject("path"));
- task.setPath((String[]) rs.getObject("path"));
+
task.setTodayTime(0);
task.setCreationDate(new java.util.Date(rs.getLong("creationDate")));
task.setModificationDate(new java.util.Date(rs.getLong("modificationDate")));
@@ -543,8 +542,9 @@
* @param endDate la borne superieur
* @return un hashmap {key: parentId, value: array of task}
*/
- public HashMap<String, ArrayList<ReportTask>> getReportByProject(Long startDate, Long endDate){
+ public HashMap<String, Set<ReportTask>> getReportByProject(Long startDate, Long endDate){
+ Set<String> parentSet = new HashSet<String>(); //Set des parents pour eviter les doublons
HashMap map = new HashMap();
PreparedStatement statement = null;
PreparedStatement statement2 = null;
@@ -562,10 +562,12 @@
rs.getString("parent"),
rs.getLong("totalduration"));
+ parentSet.add(rs.getString("parent"));
+
//Arraylist of reportask for the map
- ArrayList tmp = new ArrayList();
+ Set tmp = new HashSet();
if(map.containsKey(rs.getString("parent"))){
- tmp = (ArrayList) map.get(rs.getString("parent"));
+ tmp = (HashSet) map.get(rs.getString("parent"));
}
tmp.add(task);
@@ -573,8 +575,9 @@
map.put(rs.getString("parent"), tmp);
}
- // not timed tasks
- statement2 = connection.prepareStatement(config.getStorageQuerySelectReportRootTask());
+ // parent tasks
+ statement2 = connection.prepareStatement(config.getStorageQuerySelectParentTask());
+ statement2.setObject(1, parentSet.toArray(new String[parentSet.size()]));
rs = statement2.executeQuery();
while(rs.next()){
@@ -584,9 +587,9 @@
rs.getString("parent"),
(long) 0);
- ArrayList tmp = new ArrayList();
- if(map.containsKey(rs.getString("parent"))){
- tmp = (ArrayList) map.get(rs.getString("parent"));
+ Set tmp = new HashSet();
+ if(map.containsKey(rs.getString("parent") )){
+ tmp = (HashSet) map.get(rs.getString("parent"));
}
tmp.add(task);
map.put(rs.getString("parent"), tmp);
@@ -610,9 +613,9 @@
* @param endDate la borne superieur
* @return un hashmap {key: parentId, value: array of task}
*/
- public HashMap<Integer,HashMap<String, ArrayList<ReportTask>>> getReportByWeek(Long startDate, Long endDate){
+ public HashMap<Integer,HashMap<String, Set<ReportTask>>> getReportByWeek(Long startDate, Long endDate){
- HashMap<Integer,HashMap<String, ArrayList<ReportTask>>> res = new HashMap<>();
+ HashMap<Integer,HashMap<String, Set<ReportTask>>> res = new HashMap<>();
@@ -630,7 +633,7 @@
int week = rs.getInt("week");
if(res.get(week)==null) {
- res.put(week, new HashMap<String, ArrayList<ReportTask>>());
+ res.put(week, new HashMap<String, Set<ReportTask>>());
}
ReportTask task = new ReportTask(rs.getString("name"),
@@ -638,9 +641,9 @@
rs.getString("parent"),
rs.getLong("totalduration"));
- ArrayList tmp = new ArrayList();
+ Set tmp = new HashSet();
if (res.get(week).containsKey(rs.getString("parent"))) {
- tmp = (ArrayList)res.get(week).get(rs.getString("parent"));
+ tmp = (Set)res.get(week).get(rs.getString("parent"));
}
tmp.add(task);
res.get(week).put(rs.getString("parent"), tmp);
@@ -650,7 +653,7 @@
// not timed tasks
statement2 = connection.prepareStatement(config.getStorageQuerySelectReportRootTask());
- ArrayList notTimedArray = new ArrayList();
+ Set notTimedArray = new HashSet();
rs = statement2.executeQuery();
@@ -668,9 +671,9 @@
while(iter.hasNext()) {
Integer key = (Integer)iter.next();
- ArrayList cloneNotTimedArray=new ArrayList();
+ Set cloneNotTimedArray=new HashSet();
- for(ReportTask toClone:(ArrayList<ReportTask>)notTimedArray){
+ for(ReportTask toClone:(Set<ReportTask>)notTimedArray){
cloneNotTimedArray.add(new ReportTask(toClone));
}
res.get(key).put("", cloneNotTimedArray);
@@ -762,8 +765,8 @@
}
/**
- *
- * @param taskId
+ * Methoque qui met à jour le path d'une tache
+ * @param taskId l'identifiant de la tache
*/
public void updateTaskPath(String taskId, String[] array){
PreparedStatement statement = null;
Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/utils/ReportTask.java
===================================================================
--- branches/ng-jtimer/src/main/java/org/chorem/jtimer/utils/ReportTask.java 2014-07-18 07:52:13 UTC (rev 3016)
+++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/utils/ReportTask.java 2014-07-18 15:37:03 UTC (rev 3017)
@@ -130,6 +130,9 @@
return subtasks;
}
+ public void setSelfTime(long selfTime) {
+ this.selftime = selfTime;
+ }
@Override
public String toString() {
@@ -143,4 +146,14 @@
'}';
}
+ @Override
+ public int hashCode() {
+ return super.hashCode();
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+
+ return this.taskId == ((ReportTask)obj).getTaskId();
+ }
}
Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/ReportResource.java
===================================================================
--- branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/ReportResource.java 2014-07-18 07:52:13 UTC (rev 3016)
+++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/ReportResource.java 2014-07-18 15:37:03 UTC (rev 3017)
@@ -16,6 +16,7 @@
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.Set;
/**
* Created by olivia on 11/06/14.
@@ -78,7 +79,7 @@
if(type.equals("Project")) {
- HashMap<String, ArrayList<ReportTask>> storedTask = storage.getReportByProject(startDate, endDate);
+ HashMap<String, Set<ReportTask>> storedTask = storage.getReportByProject(startDate, endDate);
ArrayList<ReportTask> res = new ArrayList<>(); //l'arraylist de resultat
log.warn("Project " +storedTask.toString());
@@ -100,7 +101,7 @@
}
if(type.equals("Week")) {
- HashMap<Integer, HashMap<String, ArrayList<ReportTask>>> storedTask = storage.getReportByWeek(startDate, endDate);
+ HashMap<Integer, HashMap<String, Set<ReportTask>>> storedTask = storage.getReportByWeek(startDate, endDate);
log.warn("Week " +storedTask.toString());
HashMap<Integer, ArrayList<ReportTask>> res = new HashMap<>();
@@ -132,7 +133,7 @@
* @param rt the current task
* @param res the tree array
*/
- private void recursivSortTask(HashMap<String,ArrayList<ReportTask>> map, ReportTask rt, ArrayList<ReportTask> res ){
+ private void recursivSortTask(HashMap<String,Set<ReportTask>> map, ReportTask rt, ArrayList<ReportTask> res ){
if(map.containsKey(rt.getTaskId())) {
for (ReportTask child : map.get(rt.getTaskId())) {
@@ -164,7 +165,6 @@
//iterator sur l'arraylist a checker
Iterator<ReportTask> iter = toCheck.iterator();
- //
while(iter.hasNext()) {
//Le noeud courant
ReportTask repT= iter.next();
@@ -175,12 +175,17 @@
recursiveRemoveUnreportedTask(repT.getSubtasks(), wanted);
}
//On vérifie si dans la liste des elements voulus
- if(!idIsInArray(repT.getTaskId(),wanted)){
+ if(!idIsInArray(repT.getTaskId(),wanted) ){
if(repT.hasParent()) {
repT.getRtParent().removeChildTime(repT.getSelftime());
+ //repT.setSelfTime((long)0);
+
}
- iter.remove();
+ if(repT.getChildtime() == 0){
+ iter.remove();
+ }
+
}
}
@@ -198,7 +203,7 @@
Iterator iter = list.iterator();
while(iter.hasNext()) {
if (id.equals(iter.next())) {
- res =true;
+ res = true;
iter.remove();
break;
}
Modified: branches/ng-jtimer/src/main/resources/jtimer-default.properties
===================================================================
--- branches/ng-jtimer/src/main/resources/jtimer-default.properties 2014-07-18 07:52:13 UTC (rev 3016)
+++ branches/ng-jtimer/src/main/resources/jtimer-default.properties 2014-07-18 15:37:03 UTC (rev 3017)
@@ -74,6 +74,9 @@
FROM task \
WHERE (taskId not in (SELECT taskid FROM tasktime)) \
AND task.modificationDate > ?
+jtimer.storage.select.parent.task= SELECT DISTINCT * \
+ FROM task \
+ WHERE ARRAY_CONTAINS(?, taskId)
jtimer.storage.select.time.withdate=SELECT TA.taskId AS mytask, TI.* \
FROM task TA, tasktime TI \
WHERE TA.taskId = TI.taskid AND TI.modificationDate > ?
1
0
r3016 - in branches/ng-jtimer/src/main: java/org/chorem/jtimer/config java/org/chorem/jtimer/entities java/org/chorem/jtimer/storage java/org/chorem/jtimer/web resources
by obruce@users.chorem.org 18 Jul '14
by obruce@users.chorem.org 18 Jul '14
18 Jul '14
Author: obruce
Date: 2014-07-18 09:52:13 +0200 (Fri, 18 Jul 2014)
New Revision: 3016
Url: http://forge.chorem.org/projects/jtimer/repository/revisions/3016
Log:
base ajout du path
Modified:
branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfig.java
branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfigOption.java
branches/ng-jtimer/src/main/java/org/chorem/jtimer/entities/TimerTask.java
branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java
branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/TasksResource.java
branches/ng-jtimer/src/main/resources/jtimer-default.properties
Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfig.java
===================================================================
--- branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfig.java 2014-07-17 12:28:50 UTC (rev 3015)
+++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfig.java 2014-07-18 07:52:13 UTC (rev 3016)
@@ -119,6 +119,10 @@
return appConfig.getOption(JtimerConfigOption.JTIMER_STORAGE_SELECT_COUNT_TASK.getKey());
}
+ public String getStorageQuerySelectPath(){
+ return appConfig.getOption(JtimerConfigOption.JTIMER_STORAGE_SELECT_PATH.getKey());
+ }
+
public String getStorageQuerySelectTimedTask(){
return appConfig.getOption(JtimerConfigOption.JTIMER_STORAGE_SELECT_TIMED_TASK.getKey());
}
@@ -165,6 +169,10 @@
return appConfig.getOption(JtimerConfigOption.JTIMER_STORAGE_UPDATE_TASK_WITHID.getKey());
}
+ public String getStorageQueryUpdateTaskPath(){
+ return appConfig.getOption(JtimerConfigOption.JTIMER_STORAGE_UPDATE_TASK_PATH.getKey());
+ }
+
public String getStorageQueryUpdateAlarm(){
return appConfig.getOption(JtimerConfigOption.JTIMER_STORAGE_UPDATE_ALARM_WITHID.getKey());
}
Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfigOption.java
===================================================================
--- branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfigOption.java 2014-07-17 12:28:50 UTC (rev 3015)
+++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfigOption.java 2014-07-18 07:52:13 UTC (rev 3016)
@@ -106,6 +106,12 @@
"",
String.class
),
+ JTIMER_STORAGE_SELECT_PATH(
+ "jtimer.storage.select.path",
+ "requête qui va récupérer le path",
+ "",
+ String.class
+ ),
JTIMER_STORAGE_SELECT_TIMED_TASK(
"jtimer.storage.select.timed.task",
"requête de selection des tâches minutées",
@@ -184,6 +190,13 @@
"",
String.class
),
+ JTIMER_STORAGE_UPDATE_TASK_PATH(
+ "jtimer.storage.update.task.path",
+ "méthode qui va faire l'update du path d'une tâche",
+ "",
+ String.class
+ ),
+
JTIMER_STORAGE_UPDATE_TASK_WITHID(
"jtimer.storage.update.task.withid",
"requête de mise à jour d'une taches avec un identifiant",
Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/entities/TimerTask.java
===================================================================
--- branches/ng-jtimer/src/main/java/org/chorem/jtimer/entities/TimerTask.java 2014-07-17 12:28:50 UTC (rev 3015)
+++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/entities/TimerTask.java 2014-07-18 07:52:13 UTC (rev 3016)
@@ -70,6 +70,8 @@
/** date if task is removed */
protected long removed;
+ protected String[] path;
+
/**
* Constructor.
*/
@@ -91,6 +93,7 @@
this.creationDate = new Date();
this.modificationDate = new Date();
this.removed = 0;
+ this.path = null;
}
public Date getCreationDate() {
@@ -210,15 +213,24 @@
@Override
public String toString() {
- return "TimerTask {" +
- "taskId='" + taskId + '\'' +
- ", parent='" + parent + '\'' +
- ", name='" + name + '\'' +
- ", modificationDate=" + modificationDate +
- ", closed=" + closed +
- ", todayTime=" + todayTime +
- ", totalTime=" + totalTime +
- ", removed=" + removed +
- '}';
+ String res ="TimerTask {" +
+ "taskId='" + taskId + '\'' +
+ ", parent='" + parent + '\'' +
+ ", name='" + name + '\'' +
+ ", modificationDate=" + modificationDate +
+ ", closed=" + closed +
+ ", todayTime=" + todayTime +
+ ", totalTime=" + totalTime +
+ ", removed=" + removed +'}';
+
+ if(path != null)
+ res += ",path= " + path.toString();
+
+ return res;
+
}
+
+ public void setPath(String[] path) {
+ this.path = path;
+ }
}
\ No newline at end of file
Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java
===================================================================
--- branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java 2014-07-17 12:28:50 UTC (rev 3015)
+++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java 2014-07-18 07:52:13 UTC (rev 3016)
@@ -1,5 +1,6 @@
package org.chorem.jtimer.storage;
+import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.chorem.jtimer.config.JtimerConfig;
@@ -7,6 +8,7 @@
import org.chorem.jtimer.entities.TimerTask;
import org.chorem.jtimer.entities.TimerTime;
import org.chorem.jtimer.utils.ReportTask;
+import org.h2.jdbc.JdbcSQLException;
import java.sql.Connection;
import java.sql.DriverManager;
@@ -15,6 +17,7 @@
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
@@ -199,6 +202,8 @@
public void addTask(TimerTask task) {
PreparedStatement statement = null;
+ PreparedStatement statement2 = null;
+ PreparedStatement statement3 = null;
try {
statement = connection.prepareStatement(config.getStorageQueryInsertTask());
statement.setString(1, task.getName());
@@ -211,6 +216,31 @@
statement.setLong(8,task.getRemoved());
statement.executeUpdate();
+ String[] array;
+
+ //On recupere le path du parent
+ if(StringUtils.isNotBlank(task.getParent())) {
+
+ statement2 = connection.prepareStatement(config.getStorageQuerySelectPath());
+ statement2.setString(1, task.getTaskId());
+
+ ResultSet rs = statement2.executeQuery();
+ try {
+ String[] parentArray = (String[]) rs.getObject("path");
+ array = Arrays.copyOf(parentArray, parentArray.length + 1);
+ array[parentArray.length] = task.getTaskId();
+ }catch(JdbcSQLException eee){
+ log.error(eee);
+ array = new String[]{task.getTaskId()};
+ }
+ } else {
+ array = new String[]{task.getTaskId()};
+ }
+
+
+ updateTaskPath(task.getTaskId(), array);
+
+
} catch (SQLException ex) {
throw new StorageException("Can't add project", ex);
} finally {
@@ -345,6 +375,9 @@
ArrayList<TimerTask> tasks = new ArrayList<>();
PreparedStatement statement = null;
PreparedStatement statement2 = null;
+
+ log.warn("plouplou");
+
try {
statement = connection.prepareStatement(config.getStorageQuerySelectTimedTask());
statement.setLong(1, date);
@@ -358,6 +391,10 @@
task.setName(rs.getString("name"));
task.setParent(rs.getString("parent"));
task.setRemoved(rs.getLong("removed"));
+
+ log.info("recherche " + rs.getObject("path"));
+ task.setPath((String[]) rs.getObject("path"));
+
task.setTodayTime(0);
task.setCreationDate(new java.util.Date(rs.getLong("creationDate")));
task.setModificationDate(new java.util.Date(rs.getLong("modificationDate")));
@@ -388,6 +425,8 @@
closeStatement(statement);
closeStatement(statement2);
}
+
+ log.warn(tasks);
return tasks;
}
@@ -722,7 +761,27 @@
}
+ /**
+ *
+ * @param taskId
+ */
+ public void updateTaskPath(String taskId, String[] array){
+ PreparedStatement statement = null;
+ try {
+ //On update celui du fils
+ statement = connection.prepareStatement(config.getStorageQueryUpdateTaskPath());
+ statement.setObject(1, array);
+ statement.setString(2, taskId);
+ statement.executeUpdate();
+ }catch (SQLException ex) {
+ throw new StorageException("Can't modify alarm", ex);
+ } finally {
+ closeStatement(statement);
+ }
+ }
+
+
/** Suppression de tuple **/
/**
Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/TasksResource.java
===================================================================
--- branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/TasksResource.java 2014-07-17 12:28:50 UTC (rev 3015)
+++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/TasksResource.java 2014-07-18 07:52:13 UTC (rev 3016)
@@ -84,7 +84,7 @@
date = Long.valueOf(getQuery().getValues("date"));
} catch (Exception e) {
if(log.isErrorEnabled()){
- log.warn("entities.getTasks REST date null");
+ log.warn("resource REST tasks : date null");
}
}
ArrayList<TimerTask> timerTasks;
Modified: branches/ng-jtimer/src/main/resources/jtimer-default.properties
===================================================================
--- branches/ng-jtimer/src/main/resources/jtimer-default.properties 2014-07-17 12:28:50 UTC (rev 3015)
+++ branches/ng-jtimer/src/main/resources/jtimer-default.properties 2014-07-18 07:52:13 UTC (rev 3016)
@@ -2,7 +2,7 @@
# jTimer default properties
###
# jTimer storage path
-jtimer.storage.path=/home/olivia/Bureau/jtimer/jtimer/newWithAlarm
+jtimer.storage.path=/home/olivia/Bureau/jtimer/jtimer/BDDTest
###
# SQL properties
###
@@ -21,6 +21,7 @@
creationDate LONG, \
modificationDate LONG, \
hidden BOOLEAN, \
+ path ARRAY, \
note TEXT, \
removed LONG, \
PRIMARY KEY (taskId))
@@ -63,6 +64,7 @@
#SELECT
jtimer.storage.select.table.name=SELECT table_name FROM information_schema.tables;
jtimer.storage.select.count.task=SELECT count(*) FROM task WHERE removed = 0
+jtimer.storage.select.path =SELECT path FROM task WHERE taskId = ?
jtimer.storage.select.timed.task=SELECT TA.*, sum(TI.duration) AS totalduration \
FROM task TA, tasktime TI \
WHERE TA.taskId = TI.taskid \
@@ -77,7 +79,7 @@
WHERE TA.taskId = TI.taskid AND TI.modificationDate > ?
jtimer.storage.select.notremoved.tasktime=SELECT TI.* \
FROM task TA, tasktime TI \
- WHERE TA.taskId = TI.taskid AND TA.taskId = '?' \
+ WHERE TA.taskId = TI.taskid AND TA.taskId = ? \
AND TA.removed = 0 \
AND TI.modificationDate > ?
jtimer.storage.select.removed.tasktime=SELECT TA.*, sum(TI.duration) AS totalduration \
@@ -117,6 +119,9 @@
jtimer.storage.delete.alarm.withid=DELETE FROM taskalarm WHERE alarmId = ?
###
#UPDATE
+jtimer.storage.update.task.path=UPDATE task \
+ SET path=? \
+ WHERE taskId = ?
jtimer.storage.update.task.withid=UPDATE task SET name=?, parent=?, hidden=?, note=?, modificationDate=?, removed=? \
WHERE taskId = ?
jtimer.storage.update.time.withid=UPDATE tasktime SET date=?, duration=?, modificationDate=?, removed = ? \
1
0
r3015 - in branches/ng-jtimer/src/main: java/org/chorem/jtimer/config java/org/chorem/jtimer/storage java/org/chorem/jtimer/utils java/org/chorem/jtimer/web resources webapp/js webapp/partials
by obruce@users.chorem.org 17 Jul '14
by obruce@users.chorem.org 17 Jul '14
17 Jul '14
Author: obruce
Date: 2014-07-17 14:28:50 +0200 (Thu, 17 Jul 2014)
New Revision: 3015
Url: http://forge.chorem.org/projects/jtimer/repository/revisions/3015
Log:
java : nettoyage du code, ajout du rapport en week
interface : rapport
Removed:
branches/ng-jtimer/src/main/java/org/chorem/jtimer/utils/MustacheHandler.java
branches/ng-jtimer/src/main/java/org/chorem/jtimer/utils/MustacheReport.java
branches/ng-jtimer/src/main/java/org/chorem/jtimer/utils/Resource/
branches/ng-jtimer/src/main/resources/ByDay_template.mustache
branches/ng-jtimer/src/main/resources/ByProject.mustache
branches/ng-jtimer/src/main/resources/ByWeek_template.mustache
branches/ng-jtimer/src/main/resources/subtasks.mustache
Modified:
branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfig.java
branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfigOption.java
branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java
branches/ng-jtimer/src/main/java/org/chorem/jtimer/utils/ReportTask.java
branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/ReportResource.java
branches/ng-jtimer/src/main/resources/jtimer-default.properties
branches/ng-jtimer/src/main/webapp/js/controllers.js
branches/ng-jtimer/src/main/webapp/partials/reportModal.html
Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfig.java
===================================================================
--- branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfig.java 2014-07-11 08:01:54 UTC (rev 3014)
+++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfig.java 2014-07-17 12:28:50 UTC (rev 3015)
@@ -140,7 +140,9 @@
public String getStorageQuerySelectReportRootTask(){
return appConfig.getOption(JtimerConfigOption.JTIMER_STORAGE_SELECT_REPORT_ROOTTASK.getKey());
}
-
+ public String getStorageQuerySelectReportWeekTimedTasks(){
+ return appConfig.getOption(JtimerConfigOption.JTIMER_STORAGE_SELECT_REPORT_WEEK_TIMEDTASKS.getKey());
+ }
public String getStorageQuerySelectAlarmOnDate(){
return appConfig.getOption(JtimerConfigOption.JTIMER_STORAGE_SELECT_ALARM_ONDATE.getKey());
}
Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfigOption.java
===================================================================
--- branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfigOption.java 2014-07-11 08:01:54 UTC (rev 3014)
+++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfigOption.java 2014-07-17 12:28:50 UTC (rev 3015)
@@ -148,6 +148,12 @@
"",
String.class
),
+ JTIMER_STORAGE_SELECT_REPORT_WEEK_TIMEDTASKS(
+ "jtimer.storage.select.report.week.timedtasks",
+ "requête de selection des taches minutees sur une semaine",
+ "",
+ String.class
+ ),
JTIMER_STORAGE_SELECT_ALARM_ONDATE(
"jtimer.storage.select.alarm.ondate",
"requête de selection des alarmes ",
Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java
===================================================================
--- branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java 2014-07-11 08:01:54 UTC (rev 3014)
+++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java 2014-07-17 12:28:50 UTC (rev 3015)
@@ -17,6 +17,7 @@
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
/**
@@ -497,6 +498,12 @@
return alarms;
}
+ /**
+ * Methode qui retourne les taches minutees entre deux bornes par projet
+ * @param startDate la borne inferieur
+ * @param endDate la borne superieur
+ * @return un hashmap {key: parentId, value: array of task}
+ */
public HashMap<String, ArrayList<ReportTask>> getReportByProject(Long startDate, Long endDate){
HashMap map = new HashMap();
@@ -510,16 +517,20 @@
ResultSet rs = statement.executeQuery();
while(rs.next()){
+
ReportTask task = new ReportTask(rs.getString("name"),
rs.getString("taskId"),
rs.getString("parent"),
rs.getLong("totalduration"));
+ //Arraylist of reportask for the map
ArrayList tmp = new ArrayList();
if(map.containsKey(rs.getString("parent"))){
tmp = (ArrayList) map.get(rs.getString("parent"));
}
tmp.add(task);
+
+ //add key: parentId value : the created reportTask
map.put(rs.getString("parent"), tmp);
}
@@ -528,6 +539,7 @@
rs = statement2.executeQuery();
while(rs.next()){
+
ReportTask task = new ReportTask(rs.getString("name"),
rs.getString("taskId"),
rs.getString("parent"),
@@ -552,6 +564,90 @@
}
+ //TODO
+ /**
+ * Methode qui retourne les taches minutees entre deux bornes par semaine
+ * @param startDate borne inferieur
+ * @param endDate la borne superieur
+ * @return un hashmap {key: parentId, value: array of task}
+ */
+ public HashMap<Integer,HashMap<String, ArrayList<ReportTask>>> getReportByWeek(Long startDate, Long endDate){
+
+ HashMap<Integer,HashMap<String, ArrayList<ReportTask>>> res = new HashMap<>();
+
+
+
+ PreparedStatement statement = null;
+ PreparedStatement statement2 = null;
+ try{
+ statement = connection.prepareStatement(config.getStorageQuerySelectReportWeekTimedTasks());
+
+ statement.setLong(1, startDate);
+ statement.setLong(2, endDate);
+
+ ResultSet rs = statement.executeQuery();
+
+ while(rs.next()) {
+
+ int week = rs.getInt("week");
+ if(res.get(week)==null) {
+ res.put(week, new HashMap<String, ArrayList<ReportTask>>());
+ }
+
+ ReportTask task = new ReportTask(rs.getString("name"),
+ rs.getString("taskId"),
+ rs.getString("parent"),
+ rs.getLong("totalduration"));
+
+ ArrayList tmp = new ArrayList();
+ if (res.get(week).containsKey(rs.getString("parent"))) {
+ tmp = (ArrayList)res.get(week).get(rs.getString("parent"));
+ }
+ tmp.add(task);
+ res.get(week).put(rs.getString("parent"), tmp);
+
+
+ }
+
+ // not timed tasks
+ statement2 = connection.prepareStatement(config.getStorageQuerySelectReportRootTask());
+ ArrayList notTimedArray = new ArrayList();
+
+ rs = statement2.executeQuery();
+
+ while(rs.next()){
+ ReportTask task = new ReportTask(rs.getString("name"),
+ rs.getString("taskId"),
+ rs.getString("parent"),
+ (long) 0);
+
+ notTimedArray.add(task);
+ }
+
+
+ Iterator iter = res.keySet().iterator();
+
+ while(iter.hasNext()) {
+ Integer key = (Integer)iter.next();
+ ArrayList cloneNotTimedArray=new ArrayList();
+
+ for(ReportTask toClone:(ArrayList<ReportTask>)notTimedArray){
+ cloneNotTimedArray.add(new ReportTask(toClone));
+ }
+ res.get(key).put("", cloneNotTimedArray);
+ }
+
+ }catch(SQLException ex) {
+ throw new StorageException("Can't get report", ex);
+ } finally {
+ closeStatement(statement);
+ closeStatement(statement2);
+ }
+
+ return res;
+ }
+
+
/** Update */
/**
Deleted: branches/ng-jtimer/src/main/java/org/chorem/jtimer/utils/MustacheHandler.java
===================================================================
--- branches/ng-jtimer/src/main/java/org/chorem/jtimer/utils/MustacheHandler.java 2014-07-11 08:01:54 UTC (rev 3014)
+++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/utils/MustacheHandler.java 2014-07-17 12:28:50 UTC (rev 3015)
@@ -1,81 +0,0 @@
-package org.chorem.jtimer.utils;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * Created by olivia on 17/06/14.
- * <p/>
- * Project name : jtimer
- * <p/>
- * Package name : org.chorem.jtimer.utils
- */
-public class MustacheHandler {
-
- protected static final Log log = LogFactory.getLog(MustacheReport.class);
-
- protected ArrayList reprArray;
-
- List<ReportTask> tasks;
-
- List tasks() {
- //On tri les taches avant de les envoyer au template
- HashMap<String, ArrayList<ReportTask>> childMap = new HashMap<String,ArrayList<ReportTask>>();
-
- Iterator iter = tasks.iterator();
- while(iter.hasNext()) {
-
- ReportTask t = (ReportTask)iter.next();
-
- //un enfant dans map
- if(childMap.containsKey(t.getTaskId())){
- for(ReportTask task :childMap.get(t.getTaskId()))
- t.addChild(task);
- }
-
- //un enfant
- if(!t.getParentId().equals("")){
- log.info("enfant");
- //On ajoute l'enfant à la map
- ArrayList tmp = new ArrayList();
-
- if(childMap.get(t.parentId) != null){
- tmp=childMap.get(t.parentId);
- }
- tmp.add(t);
-
- childMap.put(t.parentId, tmp);
- iter.remove();
- }
- }
-
- iter = tasks.iterator();
- while(iter.hasNext()) {
- ReportTask t = (ReportTask)iter.next();
-
- if(t.getSelftime() == 0){
- iter.remove();
- }
- }
-
- return tasks;
- }
-
-
- /**
- * Constructeur
- * @param mustacheList la liste des taches
- * @param reprArray
- */
- public MustacheHandler(List mustacheList, ArrayList reprArray){
- this.tasks = mustacheList;
- this.reprArray = reprArray;
- log.debug(mustacheList);
- }
-
-}
Deleted: branches/ng-jtimer/src/main/java/org/chorem/jtimer/utils/MustacheReport.java
===================================================================
--- branches/ng-jtimer/src/main/java/org/chorem/jtimer/utils/MustacheReport.java 2014-07-11 08:01:54 UTC (rev 3014)
+++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/utils/MustacheReport.java 2014-07-17 12:28:50 UTC (rev 3015)
@@ -1,72 +0,0 @@
-package org.chorem.jtimer.utils;
-
-import com.github.mustachejava.DefaultMustacheFactory;
-import com.github.mustachejava.Mustache;
-import com.github.mustachejava.MustacheFactory;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.chorem.jtimer.storage.Storage;
-import org.restlet.Context;
-
-import java.io.IOException;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Created by olivia on 16/06/14.
- * <p/>
- * Project name : jtimer
- * <p/>
- * Package name : org.chorem.jtimer.utils
- */
-public class MustacheReport {
-
- protected static final Log log = LogFactory.getLog(MustacheReport.class);
-
- protected Context context;
- protected Storage storage;
- protected List mustacheList;
-
-
- /**
- * Default Constructor
- * @param context
- */
- public MustacheReport(Context context){
- this.context = context;
- storage = (Storage) context.getAttributes().get(Storage.class.getName());
- }
-
- /**
- * Methode qui cree une moustache
- * @throws IOException
- */
- public String createByProjectMustache(String type, long start, long end, ArrayList reprArray) throws IOException {
-
- log.info("create a Mustache by project");
- MustacheFactory mf = new DefaultMustacheFactory();
- Mustache mustache = mf.compile("ByProject.mustache");
-
- //On recupere les taches
-
- //mustacheList = storage.getReportByProject(start, end);
-
- StringWriter sw = new StringWriter();
- mustache.execute(sw, new MustacheHandler(mustacheList,reprArray)).flush();
-
- return sw.toString();
- }
-
-
- public String createByWeekMustache(String type, long start, long end) {
- log.info("create a Mustache by week");
- MustacheFactory mf = new DefaultMustacheFactory();
- Mustache mustache = mf.compile("ByWeek_template.mustache");
-
- StringWriter sw = new StringWriter();
- //mustache.execute(sw, MustacheHandler.getByWeekReport());
-
- return sw.toString();
- }
-}
Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/utils/ReportTask.java
===================================================================
--- branches/ng-jtimer/src/main/java/org/chorem/jtimer/utils/ReportTask.java 2014-07-11 08:01:54 UTC (rev 3014)
+++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/utils/ReportTask.java 2014-07-17 12:28:50 UTC (rev 3015)
@@ -47,6 +47,21 @@
this.subtasks = new ArrayList();
}
+ /**
+ * Constructeur par recopie à vide
+ * @param other une autre tache
+ */
+ public ReportTask(ReportTask other){
+ this.taskId = other.taskId;
+ this.name = other.name;
+ this.parentId = other.parentId;
+ this.selftime = other.selftime;
+ this.childtime = 0;
+ this.rtParent = null;
+
+ this.subtasks = new ArrayList();
+ }
+
/** Ajout */
public void addChild(ReportTask t){
this.subtasks.add(t);
@@ -127,4 +142,5 @@
", subtasks=" + subtasks +
'}';
}
+
}
Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/ReportResource.java
===================================================================
--- branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/ReportResource.java 2014-07-11 08:01:54 UTC (rev 3014)
+++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/ReportResource.java 2014-07-17 12:28:50 UTC (rev 3015)
@@ -51,12 +51,14 @@
toReport = gson.fromJson(repr1, ArrayList.class);
}
- String type ="BY_PROJECT";
+ String json="[]";
+ String type ="";
long startDate = (long) 0;
long endDate = Long.MAX_VALUE;
try {
type = String.valueOf(getQuery().getValues("type"));
+ log.info("type " +type);
} catch (Exception e) {
log.info("type non present dans l'url" + e);
}
@@ -71,26 +73,56 @@
log.info("type non present dans l'url" + e);
}
-
- //MustacheReport report = new MustacheReport(getContext());
- //res = report.createByProjectMustache(type, startDate, endDate,reprArray);
-
//On ne recupere que les elements interessants
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
- HashMap<String, ArrayList<ReportTask>> storedTask = storage.getReportByProject(startDate, endDate);
- ArrayList<ReportTask> res = new ArrayList<>(); //l'arraylist de resultat
+ if(type.equals("Project")) {
- //On recree l'arbre
- for(ReportTask rt: storedTask.get("")){
- recursivSortTask(storedTask, rt, res );
+ HashMap<String, ArrayList<ReportTask>> storedTask = storage.getReportByProject(startDate, endDate);
+ ArrayList<ReportTask> res = new ArrayList<>(); //l'arraylist de resultat
+
+ log.warn("Project " +storedTask.toString());
+
+ //On parcours le map récupérer de la base pour recéer l'arbre
+ for(ReportTask rt: storedTask.get("")){
+ recursivSortTask(storedTask, rt, res );
+ }
+
+ log.warn("inter " +res.toString());
+
+ //On enleve les éléments non voulus
+ recursiveRemoveUnreportedTask(res,toReport);
+
+ log.warn("envoyé " +res.toString());
+
+ json = gson.toJson(res, ArrayList.class);
+
}
- //On enleve les éléments non voulus
- recursiveRemoveUnreportedTask(res,toReport);
+ if(type.equals("Week")) {
+ HashMap<Integer, HashMap<String, ArrayList<ReportTask>>> storedTask = storage.getReportByWeek(startDate, endDate);
+ log.warn("Week " +storedTask.toString());
+ HashMap<Integer, ArrayList<ReportTask>> res = new HashMap<>();
- String json = gson.toJson(res, ArrayList.class);
+ Iterator iter = storedTask.keySet().iterator();
+ while (iter.hasNext()) {
+ Integer key = (Integer) iter.next();
+ ArrayList<ReportTask> tmp = new ArrayList<>();
+
+ for (ReportTask rt : storedTask.get(key).get("")) {
+ recursivSortTask(storedTask.get(key), rt, tmp);
+ }
+ recursiveRemoveUnreportedTask(tmp, (ArrayList<String>) toReport.clone());
+ log.warn("this is tmp" + tmp);
+ log.warn("this is toReport" + toReport);
+ res.put(key, tmp);
+ }
+
+
+ json = gson.toJson(res, HashMap.class);
+ }
+
return new StringRepresentation(json, MediaType.TEXT_HTML);
}
@@ -104,13 +136,14 @@
if(map.containsKey(rt.getTaskId())) {
for (ReportTask child : map.get(rt.getTaskId())) {
+ //On attache le parent
child.setRtParent(rt);
- log.info(child.getName() + " setparent " +rt.getName());
+ //Appel recursif sur les enfants
recursivSortTask(map, child, res);
+ //Si le noeud enfant est a du temps alors on l'ajoute
if(child.getSelftime()!= (long) 0 || child.getChildtime()!= (long) 0){
- log.info(rt.getName() + " enfante car != 0 : " +child.getName());
rt.addChild(child);
rt.addChildTime(child.getSelftime());
}
@@ -128,17 +161,26 @@
* @param wanted la liste d'identifiant voulu
*/
private void recursiveRemoveUnreportedTask(ArrayList<ReportTask> toCheck, ArrayList<String> wanted){
+ //iterator sur l'arraylist a checker
Iterator<ReportTask> iter = toCheck.iterator();
+ //
while(iter.hasNext()) {
+ //Le noeud courant
ReportTask repT= iter.next();
+ //Le noeud a des enfants
if(!repT.getSubtasks().isEmpty()) {
+ //On va supprimer les noeuds non souhaites dans les enfants
recursiveRemoveUnreportedTask(repT.getSubtasks(), wanted);
}
+ //On vérifie si dans la liste des elements voulus
if(!idIsInArray(repT.getTaskId(),wanted)){
- repT.getRtParent().removeChildTime(repT.getSelftime());
+ if(repT.hasParent()) {
+ repT.getRtParent().removeChildTime(repT.getSelftime());
+ }
iter.remove();
+
}
}
Deleted: branches/ng-jtimer/src/main/resources/ByDay_template.mustache
===================================================================
--- branches/ng-jtimer/src/main/resources/ByDay_template.mustache 2014-07-11 08:01:54 UTC (rev 3014)
+++ branches/ng-jtimer/src/main/resources/ByDay_template.mustache 2014-07-17 12:28:50 UTC (rev 3015)
@@ -1,8 +0,0 @@
-Rapport
-=======
-
-{{#days}}
- Jour : {{day}}
- {{>ByProject}}
-{{/days}}
-
Deleted: branches/ng-jtimer/src/main/resources/ByProject.mustache
===================================================================
--- branches/ng-jtimer/src/main/resources/ByProject.mustache 2014-07-11 08:01:54 UTC (rev 3014)
+++ branches/ng-jtimer/src/main/resources/ByProject.mustache 2014-07-17 12:28:50 UTC (rev 3015)
@@ -1,21 +0,0 @@
-<div>
- <h3>
- Rapport:
- </h3>
-</div>
-<hr/>
-<div>
- {{#tasks}}
- <b>Projet : {{name}}</b>
-
- {{>subtasks}}
-
- Temps total : {{time.hh}}:{{time.mm}}:{{time.ss}}
-
- <hr/>
- {{/tasks}}
-
- {{^tasks}}
- Pas de tâches sur cette période.
- {{/tasks}}
-</div>
\ No newline at end of file
Deleted: branches/ng-jtimer/src/main/resources/ByWeek_template.mustache
===================================================================
--- branches/ng-jtimer/src/main/resources/ByWeek_template.mustache 2014-07-11 08:01:54 UTC (rev 3014)
+++ branches/ng-jtimer/src/main/resources/ByWeek_template.mustache 2014-07-17 12:28:50 UTC (rev 3015)
@@ -1,7 +0,0 @@
-Rapport
-=======
-
-{{#weeks}}
- Semaine : {{day}}
- {{>ByProject}}
-{{/weeks}}
\ No newline at end of file
Modified: branches/ng-jtimer/src/main/resources/jtimer-default.properties
===================================================================
--- branches/ng-jtimer/src/main/resources/jtimer-default.properties 2014-07-11 08:01:54 UTC (rev 3014)
+++ branches/ng-jtimer/src/main/resources/jtimer-default.properties 2014-07-17 12:28:50 UTC (rev 3015)
@@ -96,21 +96,20 @@
jtimer.storage.select.report.roottasks=SELECT * \
FROM task \
WHERE (taskId not in (SELECT taskid FROM tasktime) AND removed = 0 )
+jtimer.storage.select.report.week.timedtasks=SELECT WEEK(DATEADD('SECOND', (TI.date/1000), DATE '1970-01-01')) as week, TA.* , sum(TI.duration) AS totalduration \
+ FROM task TA, tasktime TI \
+ WHERE TA.taskId = TI.taskid \
+ AND TA.creationDate > ? \
+ AND TA.creationDate < ? \
+ AND TA.removed = 0 \
+ GROUP BY TA.taskId, week \
+ ORDER BY TA.creationDate DESC
jtimer.storage.select.alarm.ondate= SELECT * \
FROM taskalarm \
WHERE modificationDate > ?
jtimer.storage.select.alarm.fortask= SELECT * \
FROM taskalarm \
WHERE removed = 0 AND modificationDate > ? AND taskId = ?
-jtimer.storage.select.report.week.timedtasks=SELECT TA.* , sum(TI.duration) AS totalduration \
- FROM task TA, tasktime TI \
- WHERE TA.taskId = TI.taskid \
- AND TA.creationDate > ? \
- AND TA.creationDate < ? \
- AND TA.removed = 0 \
- GROUP BY TA.taskId \
- ORDER BY TA.creationDate DESC, WEEK(TA.creationDate)
-
###
#DELETE
jtimer.storage.delete.time.withid=DELETE FROM tasktime WHERE uuid = ?
Deleted: branches/ng-jtimer/src/main/resources/subtasks.mustache
===================================================================
--- branches/ng-jtimer/src/main/resources/subtasks.mustache 2014-07-11 08:01:54 UTC (rev 3014)
+++ branches/ng-jtimer/src/main/resources/subtasks.mustache 2014-07-17 12:28:50 UTC (rev 3015)
@@ -1,9 +0,0 @@
-<div style="margin-left:2em;">
- {{#subtasks}}
- <div style="display : block" >
- <div style="min-width : 100px; max-width : 110px; display : inline-block;">-{{name}} :</div>
- <div style="min-width : 100px; max-width : 150px; display : inline-block;">{{time.hh}}:{{time.mm}}:{{time.ss}} </div>
- </div>
- {{> subtasks}}
- {{/subtasks}}
-</div>
\ No newline at end of file
Modified: branches/ng-jtimer/src/main/webapp/js/controllers.js
===================================================================
--- branches/ng-jtimer/src/main/webapp/js/controllers.js 2014-07-11 08:01:54 UTC (rev 3014)
+++ branches/ng-jtimer/src/main/webapp/js/controllers.js 2014-07-17 12:28:50 UTC (rev 3015)
@@ -1153,6 +1153,7 @@
var modalInstance = $modal.open({
templateUrl: 'partials/reportModal.html',
controller: ReportModalInstanceCtrl,
+ size:'lg',
resolve: {
tree : function(){
return $scope.tree;
@@ -1167,7 +1168,8 @@
var initControllerWithServ = function(){
//Si en ligne on envoie les donnees
if ( $scope.online) {
-
+ updateTasksFromServ();
+ updateTimesFromServer();
pushTodoListToServ();
initTasksFromServ();
}
@@ -1389,7 +1391,7 @@
function ReportModalInstanceCtrl($scope, $modalInstance,$http, $sce, serverReportAccess, tree){
-
+ $scope.modal={radioModel: "Project"};
$scope.tree = tree;
$scope.obj={
@@ -1399,7 +1401,6 @@
$scope.obj.endDate.setHours(23,59,59,999);
- $scope.radioModel = '5';
$scope.htmlReport="Générer un rapport";
$scope.toHTML = function (data) {
@@ -1412,7 +1413,9 @@
*/
$scope.generateReport= function(){
+ //Heure en debut de journee borne inf
$scope.obj.startDate.setHours(0,0,0,0);
+ //Heure en fin de journee borne sup
$scope.obj.endDate.setHours(23,59,59,999);
var deb =($scope.obj.startDate).getTime();
@@ -1420,6 +1423,7 @@
toReportTask = [];
$scope.reportedTask = [];
+ $scope.reportWeek = {};
var recurseGenerateChildReport = function(child){
@@ -1432,18 +1436,42 @@
angular.forEach(tree.children, function(child){recurseGenerateChildReport(child)});
$http({method: "POST", url: "/rest/report",
- params:{start_Date : deb, end_Date : end}, data : angular.toJson(toReportTask)})
- .success(function(data){
+ params:{start_Date : deb, end_Date : end, type : $scope.modal.radioModel}, data : angular.toJson(toReportTask)})
+ .success(function(data){
- $scope.htmlReport = data;
- angular.forEach(data, function(d){
- $scope.reportedTask.push({
- name : d.name,
- selftime : d.selftime,
- childtime : d.childtime,
- subtasks : d.subtasks})
- });
- }
+ if($scope.modal.radioModel=='Project'){
+
+ $scope.htmlReport = data;
+ $scope.reportedTask=[];
+ angular.forEach(data, function(d){
+ $scope.reportedTask.push({
+ name : d.name,
+ selftime : d.selftime,
+ childtime : d.childtime,
+ subtasks : d.subtasks});
+ });
+ console.log($scope.reportedTask);
+ }
+
+ if($scope.modal.radioModel=='Week'){
+ $scope.htmlReport = data;
+ //on l'envoi dans l'interface
+ angular.forEach(data, function(array,week){
+
+
+ angular.forEach(array, function(rt){
+ if(!$scope.reportWeek[week]){$scope.reportWeek[week]=[];}
+ $scope.reportWeek[week].push({
+ name : rt.name,
+ selftime : rt.selftime,
+ childtime : rt.childtime,
+ subtasks : rt.subtasks});
+ });
+
+ });
+ console.log($scope.reportWeek);
+ }
+ }
);
}
Modified: branches/ng-jtimer/src/main/webapp/partials/reportModal.html
===================================================================
--- branches/ng-jtimer/src/main/webapp/partials/reportModal.html 2014-07-11 08:01:54 UTC (rev 3014)
+++ branches/ng-jtimer/src/main/webapp/partials/reportModal.html 2014-07-17 12:28:50 UTC (rev 3015)
@@ -1,5 +1,5 @@
<div>
- <h2>Rapport :</h2>
+ <h2>Report :</h2>
</div>
<hr/>
@@ -32,6 +32,22 @@
</p>
</div>
</div>
+ <h4>Sort by :</h4>
+ <div style="margin-left:25px;" >
+ <div class="btn-group">
+ <label class="btn btn-default" ng-model="modal.radioModel" btn-radio="'Project'">Project</label>
+ <label class="btn btn-default" ng-model="modal.radioModel" btn-radio="'Day'">Day</label>
+ <label class="btn btn-default" ng-model="modal.radioModel" btn-radio="'Week'">Week</label>
+
+ </div>
+ <br/>
+ <div style="margin-left:30px;" class="btn-group">
+ <label class="btn btn-default" ng-model="modal.radioModel" btn-radio="'Month'">Month</label>
+ <label class="btn btn-default" ng-model="modal.radioModel" btn-radio="'Year'">Year</label>
+ </div>
+ </div>
+
+
<hr/>
<div>
<h4><u>Projet :</u></h4>
@@ -68,8 +84,8 @@
</div>
- <button class="btn btn-primary" ng-click="checkAll()">Check All</button>
- <button class="btn btn-primary" ng-click="uncheckAll()">Unckeck All</button>
+ <button class="btn btn-default btn-sm" ng-click="checkAll()">Check All</button>
+ <button class="btn btn-default btn-sm" ng-click="uncheckAll()">Unckeck All</button>
</div>
</div>
@@ -77,33 +93,61 @@
<div style="display : inline-block; vertical-align: top; width : 350px">
<alert type="info" >
- <span ng-show="!reportTask.length" >
- <h4><b>Génération du rapport :</b></h4>
+ <span contenteditable="true" ng-show="!reportTask.length" >
+ <h4><b>Generate Report :</b></h4>
+
+ <!--Report by Project -->
+ <div ng-if="modal.radioModel=='Project'">
<div ng-repeat="task in reportedTask" >
- <b>Projet : {{task.name}} </b>
+ <b>Project : {{task.name}} </b>
- <div style="margin-left : 10px" ng-repeat="subtask in task.subtasks" ng-include="'./partials/reportNestedTask.html'">
+ <div style="margin-left : 10px" ng-repeat="subtask in task.subtasks" ng-include="'./partials/reportNestedTask.html'">
</div>
-
+ <br/>
Temps total : {{task.childtime|time}}
<hr/>
</div>
- </span >
- <span ng-show="reportedTask.length == 0" >
- Pas de tâches sur cette période.
- </span>
+ <span ng-show="reportedTask.length == 0" >
+ No timed tasks.
+ </span>
+ </div>
- </alert>
- </div>
+ <!--Report by week -->
+ <div ng-if="modal.radioModel=='Week'">
+ <div ng-repeat="(week,array) in reportWeek" >
+ <b>
+ Week {{week}} </b><br/>
+ ==========
+ <br/><br/>
+ <div style="margin-left : 10px" ng-repeat="(index, task) in array" >
+ <b>Project : {{task.name}} </b>
+ <div style="margin-left : 10px" ng-repeat="subtask in task.subtasks" ng-include="'./partials/reportNestedTask.html'">
+
+ </div>
+ <br/>
+ Temps total : {{task.childtime|time}}
+ <hr/>
+ </div>
+ </div>
+
+ <span ng-show="!reportWeek" >
+ No timed tasks.
+ </span>
+ </div>
+ </span >
+ </alert>
</div>
+</div>
+
+
<div class="modal-footer">
- <button class="btn btn-primary" ng-click="generateReport()">Générer</button>
- <button class="btn btn-primary" ng-click="close()">Fermer</button>
+ <button class="btn btn-primary" ng-click="generateReport()">Generate</button>
+ <button class="btn btn-primary" ng-click="close()">Close</button>
</div>
\ No newline at end of file
1
0
r3014 - in branches/ng-jtimer/src/main: resources webapp/css webapp/js webapp/partials
by obruce@users.chorem.org 11 Jul '14
by obruce@users.chorem.org 11 Jul '14
11 Jul '14
Author: obruce
Date: 2014-07-11 10:01:54 +0200 (Fri, 11 Jul 2014)
New Revision: 3014
Url: http://forge.chorem.org/projects/jtimer/repository/revisions/3014
Log:
version avec onglet encore ?\195?\160 travailler
Added:
branches/ng-jtimer/src/main/webapp/partials/loading_timer.gif
branches/ng-jtimer/src/main/webapp/partials/optionModal.html
branches/ng-jtimer/src/main/webapp/partials/task.html
branches/ng-jtimer/src/main/webapp/partials/timesModal.html
Modified:
branches/ng-jtimer/src/main/resources/jtimer-default.properties
branches/ng-jtimer/src/main/webapp/css/app.css
branches/ng-jtimer/src/main/webapp/js/controllers.js
branches/ng-jtimer/src/main/webapp/js/entities.js
branches/ng-jtimer/src/main/webapp/partials/alertModal.html
branches/ng-jtimer/src/main/webapp/partials/tasks.html
branches/ng-jtimer/src/main/webapp/partials/timeModal.html
Modified: branches/ng-jtimer/src/main/resources/jtimer-default.properties
===================================================================
--- branches/ng-jtimer/src/main/resources/jtimer-default.properties 2014-07-03 15:52:17 UTC (rev 3013)
+++ branches/ng-jtimer/src/main/resources/jtimer-default.properties 2014-07-11 08:01:54 UTC (rev 3014)
@@ -102,6 +102,15 @@
jtimer.storage.select.alarm.fortask= SELECT * \
FROM taskalarm \
WHERE removed = 0 AND modificationDate > ? AND taskId = ?
+jtimer.storage.select.report.week.timedtasks=SELECT TA.* , sum(TI.duration) AS totalduration \
+ FROM task TA, tasktime TI \
+ WHERE TA.taskId = TI.taskid \
+ AND TA.creationDate > ? \
+ AND TA.creationDate < ? \
+ AND TA.removed = 0 \
+ GROUP BY TA.taskId \
+ ORDER BY TA.creationDate DESC, WEEK(TA.creationDate)
+
###
#DELETE
jtimer.storage.delete.time.withid=DELETE FROM tasktime WHERE uuid = ?
Modified: branches/ng-jtimer/src/main/webapp/css/app.css
===================================================================
--- branches/ng-jtimer/src/main/webapp/css/app.css 2014-07-03 15:52:17 UTC (rev 3013)
+++ branches/ng-jtimer/src/main/webapp/css/app.css 2014-07-11 08:01:54 UTC (rev 3014)
@@ -14,6 +14,7 @@
background:black;
color:graytext;
}
+
div#alerts{
position:absolute;
bottom:20px;
@@ -21,6 +22,16 @@
width:100%;
z-index: 1000;
}
+div#descriptionTaskTab{
+ position:absolute;
+ bottom:20px;
+ left:0;
+ width:100%;
+ z-index: 70;
+
+ background:#BDBDBD;
+}
+
.alert {
margin-bottom: 0;
}
@@ -36,21 +47,21 @@
background:black;
color:graytext;
}
-#footer>.left, #header>.left {
+#footer>.left, #header>.left{
text-align: left;
position: absolute;
left: 0px;
top: 0px;
z-index: 10;
}
-#footer>.center, #header>.center {
+#footer>.center, #header>.center{
width: 100%;
height: 100%;
text-align: center;
display: block;
z-index: 5;
}
-#footer>.right, #header>.right {
+#footer>.right, #header>.right{
text-align: right;
position: absolute;
right: 0px;
@@ -58,6 +69,32 @@
z-index: 10;
}
+div#modalheader{
+ top:10px;
+ display : block;
+ left:10px;
+ width:100%;
+}
+
+#modalheader>.left {
+ display : inline-block;
+ text-align: left;
+ left: 0px;
+}
+
+ #modalheader>.right {
+ text-align: left;
+ display : inline-block;
+
+ right: 0px;
+
+}
+
+.modalDesc{
+ top: 20 px;
+ bottom : 10px;
+}
+
.menu-show {
display: block;
left: -170px
@@ -74,9 +111,7 @@
position:fixed;
}
}
-* html body{
- overflow:hidden;
-}
+
* html div#content{
height:100%;
overflow:auto;
@@ -119,16 +154,16 @@
.spacer.level9 {padding-left: 90px;}
.th.name {
-
+ width: 30em;
}
.th.today, .td.today, .th.global, .td.global {
- width: 4em;
+ width: 5em;
border-right: 1px #0088cc solid;
}
-.td.today, .td.global {
- text-align: right;
+.td.today, .td.global{
+ text-align: center;
}
.th.tags {
@@ -238,11 +273,94 @@
}
.selected-row {
- background-color: #5ca9cf;
+ background-color: #BCD1E5;
+
+ -moz-transition-property: background-color;
+ -webkit-transition-property: background-color;
+ -o-transition-property: background-color;
+ -ms-transition-property: background-color;
+ transition-property: background-color;
+
+
+ -moz-transition-duration:3s;
+ -webkit-transition-duration:3s;
+ -o-transition-duration:3s;
+ -ms-transition-duration:3s;
+ transition-duration:3s;
+
}
+.no-alarm {
+ background-color: none;
+
+ -moz-transition-property: background-color;
+ -webkit-transition-property: background-color;
+ -o-transition-property: background-color;
+ -ms-transition-property: background-color;
+ transition-property: background-color;
+
+
+ -moz-transition-duration:3s;
+ -webkit-transition-duration:3s;
+ -o-transition-duration:3s;
+ -ms-transition-duration:3s;
+ transition-duration:3s;
+}
+
+.alarmOk{
+ background-color: #99FF99;
+
+ -moz-transition-property: background-color;
+ -webkit-transition-property: background-color;
+ -o-transition-property: background-color;
+ -ms-transition-property: background-color;
+ transition-property: background-color;
+
+
+ -moz-transition-duration:3s;
+ -webkit-transition-duration:3s;
+ -o-transition-duration:3s;
+ -ms-transition-duration:3s;
+ transition-duration:3s;
+}
+
+.alarmInter{
+ background-color: #FFCC66;
+
+ -moz-transition-property: background-color;
+ -webkit-transition-property: background-color;
+ -o-transition-property: background-color;
+ -ms-transition-property: background-color;
+ transition-property: background-color;
+
+
+ -moz-transition-duration:3s;
+ -webkit-transition-duration:3s;
+ -o-transition-duration:3s;
+ -ms-transition-duration:3s;
+ transition-duration:3s;
+}
+
+.alarmDanger{
+ background-color: #FF0000;
+
+ -moz-transition-property: background-color;
+ -webkit-transition-property: background-color;
+ -o-transition-property: background-color;
+ -ms-transition-property: background-color;
+ transition-property: background-color;
+
+
+ -moz-transition-duration:3s;
+ -webkit-transition-duration:3s;
+ -o-transition-duration:3s;
+ -ms-transition-duration:3s;
+ transition-duration:3s;
+}
+
+
.tr:hover {
- background-color: #7ecbef;
+ background-color: #E8E8E8;
}
.online {
@@ -275,9 +393,27 @@
}
.color_red{
- color : red;
+ color : #FA5858;
}
.color_green{
color : green;
+}
+
+.paded{
+ padding-left: 10px;
+}
+
+.divYScrolable {
+ overflow-y:scroll;
+ height:200px;
+ width:250px;
+}
+
+.rowYScrolable:hover {
+ background-color: #E8E8E8;
+}
+
+.borderedbottom{
+ border-bottom : 1px solid #E8E8E8;
}
\ No newline at end of file
Modified: branches/ng-jtimer/src/main/webapp/js/controllers.js
===================================================================
--- branches/ng-jtimer/src/main/webapp/js/controllers.js 2014-07-03 15:52:17 UTC (rev 3013)
+++ branches/ng-jtimer/src/main/webapp/js/controllers.js 2014-07-11 08:01:54 UTC (rev 3014)
@@ -12,6 +12,9 @@
$scope.taskAccess = $scope.todo.lastTaskAccess;
$scope.timeAccess = $scope.todo.lastTimeAccess;
+ //
+ $scope.currentTaskAlarmState="no-alarm";
+
//interval de conec
var interval = 30000; //TODO: obruce 05-05-14 decider d'un intervalle interessant
// periode de delais = 3 periode +1msec
@@ -144,19 +147,19 @@
/**
* Methode qui se lance toutes les minutes pour verifier les alamres des taches
*/
- var checkAlarms = function() {
- $timeout(function() {
+ var checkAlarms = function(delay) {
+ $interval(function() {
if ($scope.currentTask) {
checkRecurseParent($scope.currentTask);
}
- checkAlarms();
- }, 60000);
+ checkAlarms(0);
+ }, 60000-delay);
};
- checkAlarms();
+
/**
*
* @param :task la tache
@@ -183,12 +186,30 @@
alarm.remainingHour -=1;
}
+
+ var limit = alarm.limitHour*60 + alarm.limitMin;
+ var remaining = alarm.remainingHour*60 + alarm.remainingMin;
+
+ res = ((limit-remaining)/limit)*100;
+
+ if(res < 50 ){
+ $scope.currentTaskAlarmState="alarmOk";
+ }else if(res < 80){
+ $scope.currentTaskAlarmState="alarmInter";
+ }else{
+ $scope.currentTaskAlarmState="alarmDanger";
+ }
+
+
if(alarm.remainingHour == 0 && alarm.remainingMin == 0){
//console.log("Alarme lancée " +alarm.name +" de type "+ alarm.type + " par " + task.name );
if(alarm.type=="Total_Time"){
alarms.splice(index,1);
}
- alert('Alarme déclenchée: '+alarm.name + '\nVotre alarme va être désactivée.');
+ $window.alert('Alarme déclenchée: '+alarm.name + '\nVotre alarme va être désactivée.');
+
+ $scope.currentTaskAlarmState="no-alarm";
+
}
index+=1;
});
@@ -209,6 +230,8 @@
updateTasksFromServ();
updateTimesFromServer();
}, interval);
+
+
};
timer();
@@ -221,7 +244,7 @@
serverTaskAccess.query({date : 0}, function (response) {
angular.forEach(response, function (item) {
- console.log(response);
+ //console.log(response);
if((!(item.taskId in $scope.data.tasks)) && item.removed == 0){
console.log( "Un element non present " + item.name + item.modificationDate);
@@ -320,6 +343,8 @@
save();
}
+
+ getAlarmsFromServerWithTask(newTask);
}
});
});
@@ -340,7 +365,7 @@
angular.forEach(response, function (item) {
- var editedTime = getObjectInArrayWithId($scope.data.times[item.taskId],item.timeId);
+ var editedTime = getTimeInArrayWithId($scope.data.times[item.taskId],item.timeId);
if(editedTime){
if(item.removed == 0){
@@ -417,7 +442,18 @@
return res;
}
+ //Recuperer un element dans un array avec son id
+ var getAlarmInArrayWithId= function(array, id){
+ var res;
+ angular.forEach(array, function(alarm){
+ if(alarm.alarmId == id){
+ res = time;
+ }
+ });
+ return res;
+ }
+
//Recuperer un element dans un array avec son id
var suppressObjectInArrayWithId= function(array, timeid,taskid){
var res=0;
@@ -803,66 +839,6 @@
save();
};
- /** Methode qui va tenter d'envoyer la tâche vers le serveur */
- $scope.alarmPopup = function(node){
-
- var modalInstance = $modal.open({
- templateUrl: 'partials/alertModal.html',
- controller: AlertModalInstanceCtrl,
- resolve: {
- task : function(){
- return node.task;
- },
- totaltime : function(){
- var res=0;
-
-
- var recChildren = function(noeud){
- angular.forEach($scope.data.times[noeud.task.taskId], function(t){
- res+=t.time;
- });
-
- if(noeud.children){
- angular.forEach(noeud.children, function(child){
- recChildren(child);
- });
- }
-
- }
- recChildren(node);
-
- console.log(res);
- return res;
- },
- todaytime : function(){
- var res=0;
-
- var recChildren = function(noeud){
- angular.forEach($scope.data.times[noeud.task.taskId], function(t){
- if(t.isToday()){
- res+=t.time;
- }
- });
-
- if(noeud.children){
- angular.forEach(noeud.children, function(child){
- recChildren(child);
- });
- }
-
- }
- recChildren(node);
-
- console.log(res);
- return res;
- }
- }
- });
-
- modalInstance.result.then(function (item) {
- });
- }
-
/**
* Active/desactive le comptage de temps pour une tache
* @param {type} task
@@ -892,7 +868,10 @@
$scope.currentTask = task;
$scope.currentTaskDate = now;
+ checkAlarms(0);
+
} else {
+ $interval.cancel(checkAlarms);
$scope.currentTask = null;
$scope.currentTaskDate = null;
@@ -918,6 +897,9 @@
$scope.webSocketClientOnline = status;
}
});
+ $scope.showWebsocketAlert= function(){
+ $scope.webSocketClientOnline = "nada";
+ }
/** Idleness*/
@@ -977,14 +959,133 @@
$scope.webSocketClientIdle = false;
};
- $scope.popup = function (node){
+ $scope.optionPopup = function (node, isRoot){
//Task identifier
var id = node.task.taskId;
var data;
var modalInstance = $modal.open({
+ templateUrl: 'partials/optionModal.html',
+ controller: OptionModalCtrl,
+ resolve: {
+ taskTimes : function () {
+ return angular.copy($scope.data);
+ },
+ indent : function () {
+ return id;
+ },
+ selectTask : function () {
+ return node.task;
+ },
+ totaltime : function(){
+ var res=0;
+
+
+ var recChildren = function(noeud){
+ angular.forEach($scope.data.times[noeud.task.taskId], function(t){
+ res+=t.time;
+ });
+
+ if(noeud.children){
+ angular.forEach(noeud.children, function(child){
+ recChildren(child);
+ });
+ }
+
+ }
+ recChildren(node);
+
+ return res;
+ },
+ todaytime : function(){
+ var res=0;
+
+ var recChildren = function(noeud){
+ angular.forEach($scope.data.times[noeud.task.taskId], function(t){
+ if(t.isToday()){
+ res+=t.time;
+ }
+ });
+
+ if(noeud.children){
+ angular.forEach(noeud.children, function(child){
+ recChildren(child);
+ });
+ }
+
+ }
+ recChildren(node);
+
+ return res;
+ },
+ disabled : function(){
+ return isRoot;
+ },
+ todo : function(){
+ return $scope.todo;
+ }
+ }
+
+ });
+
+ modalInstance.result.then(function (item) {
+
+ if(item.index != -1){
+ if(item.action=='Modification'){
+ //On met la valeur à jour
+
+ $scope.data.times[id][item.index].changeCreationDate(item.creationDate);
+ $scope.data.times[id][item.index].changeDuration(item.time);
+
+ //init
+ if(!$scope.todo.stockedEditedTimes[id]){$scope.todo.stockedEditedTimes[id]=[]; }
+
+ //On ajoute dans la tdList
+ $scope.todo.stockedEditedTimes[id].push($scope.data.times[id][item.index]);
+
+ save();
+ }
+
+ if(item.action=='Ajout'){
+ //init
+
+ if(!$scope.data.times[id]){$scope.data.times[id]= [];};
+ if(!$scope.todo.stockedNewTimes[id]){$scope.todo.stockedNewTimes[id] = []};
+
+ //on cree le temps
+ var res = new TaskTime(node.task,undefined,item.creationDate,item.time);
+ $scope.data.times[id].push(res);
+ $scope.todo.stockedNewTimes[id].push(res);
+ save();
+ }
+
+ if(item.action == 'Suppression'){
+ // init de l'objet
+ if(!$scope.todo.stockedDeletedTimes[id]){
+ $scope.todo.stockedDeletedTimes[id] = []
+ };
+ //on pousse l'objet à supprimer
+ $scope.todo.stockedDeletedTimes[id].push($scope.data.times[id][item.index].timeId);
+
+ $scope.data.times[id].splice(item.index,1);
+ if($scope.data.times[id]==[]){
+ delete $scope.data.times[id];
+ }
+ save();
+ }
+ data = $scope.data.times;
+ }
+ });
+ }
+
+ $scope.popupTime = function (node){
+ //Task identifier
+ var id = node.task.taskId;
+ var data;
+
+ var modalInstance = $modal.open({
templateUrl: 'partials/timeModal.html',
- controller: ModalInstanceCtrl,
+ controller: TimeModalCtrl,
resolve: {
taskTimes : function () {
return angular.copy($scope.data);
@@ -1086,9 +1187,44 @@
+/**
+ * Controller de pour la modal d'option de tache.
+ *
+ * @param $scope
+ * @param $modalInstance
+ */
+function OptionModalCtrl($scope, $modalInstance, serverAlarmAccess, taskTimes, indent, selectTask , totaltime, todaytime, disabled,todo) {
+ $scope.taskTimes = taskTimes;
+ $scope.indent = indent;
+ $scope.task = selectTask;
+ $scope.totaltime = totaltime;
+ $scope.todaytime = todaytime;
+ $scope.disabled = disabled;
+ $scope.todo=todo;
+ $scope.obj={};
+ $scope.close = function() {
+ todo.stockedEditedTasks.push($scope.task);
+
+ $modalInstance.close($scope.obj);
+ };
+}
+
+
/**
+ * Controller de pour la modal d'option de tache.
+ *
+ * @param $scope
+ * @param $modalInstance
+ */
+function TaskModalCtrl($scope) {
+
+
+
+}
+
+/**
* Controller de pour la modal d'inactivite.
*
* @param $scope
@@ -1100,10 +1236,11 @@
};
}
-function AlertModalInstanceCtrl($scope, $modalInstance, serverAlarmAccess, task, totaltime, todaytime){
+function AlertModalInstanceCtrl($scope,serverAlarmAccess){
+ task = $scope.task;
+ totaltime = $scope.totaltime;
+ todaytime = $scope.todaytime;
- console.log(totaltime +" " +todaytime)
-
$scope.alarm={name : "" , type : "Type"};
var msToHour=function(ms){
@@ -1180,11 +1317,35 @@
if($scope.alarm.name== "" || $scope.alarm.type=="Type" ){
}else{
+ var min=$scope.alarm.min;
+ var hour=$scope.alarm.hour;
if($scope.alarm.type=="Total_Time"){
- minusPreviousTime(totaltime, $scope.alarm.hour, $scope.alarm.min);
+ var prevHour = parseInt(msToHour(totaltime));
+ var prevMin = parseInt(msToMin(totaltime));
+
+ hour-=prevHour;
+
+ if(min - prevMin<0){
+ min = 59 +(min-prevMin);
+ hour -=1;
+ }else{
+ min =min - prevMin;
+ }
+ console.log("hm " +hour +" " +min);
}else{
- minusPreviousTime(todaytime, $scope.alarm.hour, $scope.alarm.min);
+ var prevHour = parseInt(msToHour(todaytime));
+ var prevMin = parseInt(msToMin(todaytime));
+
+ hour-=prevHour;
+
+ if(min - prevMin<0){
+ min = 59 +(min-prevMin);
+ hour -=1;
+ }else{
+ min =min - prevMin;
+ }
+ console.log("hm " +hour +" " +min);
}
if($scope.alarm.hour > 0 || $scope.alarm.min> 0 ){
@@ -1193,7 +1354,9 @@
$scope.alarm.name,
$scope.alarm.type,
$scope.alarm.hour,
- $scope.alarm.min);
+ $scope.alarm.min,
+ hour,
+ min);
$scope.alarms.push(al);
@@ -1214,21 +1377,10 @@
}
}
- var minusPreviousTime= function(previousTime, hour, min){
- var prevHour = msToHour(previousTime);
- var prevMin = msToMin(previousTime);
- hour-=prevHour;
- if(min - prevMin<0){
- min = 59 +(min-prevMin);
- hour -=1;
- }
- }
-
-
$scope.close = function() {
$modalInstance.close();
@@ -1358,14 +1510,13 @@
};
}
-function ModalInstanceCtrl($scope, $modalInstance, taskTimes,indent) {
+function TimeModalCtrl($scope) {
// Les temps de la tache
- $scope.times = taskTimes.times[indent];
+ $scope.times = $scope.taskTimes.times[$scope.indent];
$scope.dateobj={aTime : new Date(), date : new Date(),};
//L'objet retourner
- $scope.obj={};
$scope.obj.creationDate=new Date().getTime();
$scope.obj.time=0;
$scope.obj.index = -1;
@@ -1384,7 +1535,8 @@
//Pour l'affichage
$scope.getStartTime = function(item){return moment(item.creationDate).format("DD-MM-YYYY H:mm:ss");}
- $scope.getStopTime = function(item){return item.time;}
+ $scope.getStopTime = function(item){return moment(item.creationDate + item.time).format("DD-MM-YYYY H:mm:ss");}
+ $scope.getDuration = function(item){return item.time;}
$scope.getStartObjTime = function(){return moment($scope.obj.creationDate).format("DD-MM-YYYY H:mm:ss");}
$scope.getStopObjTime = function(){return moment($scope.obj.creationDate + $scope.obj.time).format("DD-MM-YYYY H:mm:ss");}
@@ -1415,6 +1567,92 @@
};
+
+function TimesModalCtrl($scope) {
+
+ $scope.dateobj={date : new Date(), today : new Date()};
+
+ $scope.selectedItem=null;
+
+ //TODO if different de new date .startPeriod .endPeriod
+
+ //Le pas des heures et minutes
+ $scope.hstep = 1;
+ $scope.mstep = 1;
+
+
+ //L'objet retourner
+ $scope.obj.creationDate=new Date().getTime();
+ $scope.obj.time=0;
+ $scope.obj.index = -1;
+ $scope.obj.action = '';
+
+ //Pour l'affichage
+ $scope.getStartTime = function(item){return moment(item.creationDate).format("H:mm:ss");}
+ $scope.getStopTime = function(item){return moment(item.creationDate + item.time).format("H:mm:ss");}
+ $scope.getDuration = function(item){return item.time;}
+
+ //selectionne un element dans le dropdown
+ $scope.select = function(item, ind){
+
+ //On intialise l'objet a envoyer
+ $scope.obj.index = ind;
+ $scope.obj.creationDate=item.creationDate;
+ $scope.obj.time=item.time;
+
+ $scope.selectedItem = item;
+
+ $scope.dateobj.startPeriod = item.creationDate;
+ $scope.dateobj.endPeriod = item.creationDate + item.time;
+ };
+
+
+ $scope.removeTime = function(ind, item){
+ if(!$scope.todo.stockedDeletedTimes[item.taskId]){
+ $scope.todo.stockedDeletedTimes[item.taskId] = []
+ };
+ //on pousse l'objet à supprimer
+ $scope.todo.stockedDeletedTimes[item.taskId].push(item);
+
+ cpt=0;
+ angular.forEach($scope.taskTimes.times[$scope.indent], function(time){
+ if(time.timeId == item.timeId){
+ $scope.taskTimes.times[$scope.indent].splice(cpt,1);
+ }
+ cpt++;
+ });
+ $scope.changeDate();
+
+ };
+
+ $scope.changeDate= function(){
+ $scope.selectedItem = null;
+
+ var endday = angular.copy($scope.dateobj.date);
+ var startday = angular.copy($scope.dateobj.date);
+
+ endday.setHours(23,59,59,999);
+ startday.setHours(0,0,0,0);
+
+ console.log($scope.dateobj.end );
+
+ $scope.times=[];
+
+ // Les temps de la tache
+ angular.forEach($scope.taskTimes.times[$scope.indent],function(time){
+ if(time.creationDate> startday.getTime() &&
+ time.creationDate< endday.getTime()){
+ $scope.times.push(time);
+ console.log("pusssh");
+ }
+ });
+ };
+ $scope.changeDate();
+
+};
+
+
+
function DatePickerCtrl($scope){
$scope.dateMaxPicker= new Date();
@@ -1432,11 +1670,41 @@
$scope.dateobj.aTime = uneDate;
};
-}
+};
+function alarmProgressBarCtrl($scope){
+ $scope.dynamicProgressBar = function(alarm){
+ var res = 0;
+ var limit = alarm.limitHour*60 + alarm.limitMin;
+ var remaining = alarm.remainingHour*60 + alarm.remainingMin;
+ res = ((limit-remaining)/limit)*100;
+
+ return res;
+ };
+
+};
+
+function TimePickerOptionModalCtrl($scope){
+
+ //Activated button radio
+ $scope.radioModel = 'Left';
+
+ //Le pas des heures et minutes
+ $scope.hstep = 1;
+ $scope.mstep = 1;
+
+ /*
+ * Méthode déclancher quand l'heure change dans le timepicker
+ * Change l'objet du controller principal
+ */
+ $scope.changeModel = function(){
+
+ }
+};
+
function RadioTimeCtrl($scope){
//Activated button radio
Modified: branches/ng-jtimer/src/main/webapp/js/entities.js
===================================================================
--- branches/ng-jtimer/src/main/webapp/js/entities.js 2014-07-03 15:52:17 UTC (rev 3013)
+++ branches/ng-jtimer/src/main/webapp/js/entities.js 2014-07-11 08:01:54 UTC (rev 3014)
@@ -528,7 +528,7 @@
* @param {Task} task la tache liee
* @returns {TaskAlarm}
*/
-var TaskAlarm = function (task,id, name, type, limitHour,limitMin, repeatF) {
+var TaskAlarm = function (task,id, name, type, limitHour,limitMin, remainingHour, remainingMin,repeatF) {
this.taskId = task && task.taskId;
if(id == undefined){
@@ -544,8 +544,8 @@
this.limitHour = limitHour;
this.limitMin = limitMin;
- this.remainingHour = limitHour;
- this.remainingMin = limitMin;
+ this.remainingHour = remainingHour;
+ this.remainingMin = remainingMin;
this.modificationDate = Date.now();
Modified: branches/ng-jtimer/src/main/webapp/partials/alertModal.html
===================================================================
--- branches/ng-jtimer/src/main/webapp/partials/alertModal.html 2014-07-03 15:52:17 UTC (rev 3013)
+++ branches/ng-jtimer/src/main/webapp/partials/alertModal.html 2014-07-11 08:01:54 UTC (rev 3014)
@@ -1,7 +1,4 @@
-<h3>Les alarmes pour {{name}} :</h3>
-<hr/>
-
<table class='table'>
<thead>
<tr>
@@ -42,12 +39,12 @@
<i class="glyphicon glyphicon-check color_green" ng-show="alarm.name!=''"> </i></td>
<td>
<div class="btn-group" dropdown is-open="status.isopen">
- <button type="button" class="btn btn-primary dropdown-toggle">
+ <button type="button" class="btn btn-default btn-sm dropdown-toggle">
{{alarm.type}} <span class="caret"></span>
</button>
<ul class="dropdown-menu" role="menu">
- <li ng-click="dropdownType1()">Total_Day_Time</li>
- <li ng-click="dropdownType2()">Total_Time</li>
+ <li ng-click="dropdownType1()">Total day time</li>
+ <li ng-click="dropdownType2()">Total task time</li>
</ul>
</div>
<i class="glyphicon glyphicon-edit color_red" ng-show="alarm.type=='Type'"> </i>
@@ -74,8 +71,9 @@
</table>
-
+<!--
<div class="modal-footer">
- <!--<button class="btn btn-primary" ng-click="cancel()">Cancel</button>-->
- <button class="btn btn-primary" ng-click="close()">Close</button>
+ <button class="btn btn-default btn-sm" ng-click="cancel()">Cancel</button>
+ <button class="btn btn-default btn-sm" ng-click="close()">Close</button>
</div>
+-->
\ No newline at end of file
Added: branches/ng-jtimer/src/main/webapp/partials/loading_timer.gif
===================================================================
(Binary files differ)
Property changes on: branches/ng-jtimer/src/main/webapp/partials/loading_timer.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: branches/ng-jtimer/src/main/webapp/partials/optionModal.html
===================================================================
--- branches/ng-jtimer/src/main/webapp/partials/optionModal.html (rev 0)
+++ branches/ng-jtimer/src/main/webapp/partials/optionModal.html 2014-07-11 08:01:54 UTC (rev 3014)
@@ -0,0 +1,29 @@
+<tabset justified="true">
+ <!--tasks-->
+ <tab heading="Task">
+ <div ng-controller="TaskModalCtrl" ng-include="'./partials/task.html'"></div>
+ </tab>
+
+ <!--Times-->
+ <tab disabled="disabled">
+ <tab-heading >
+ <i class="glyphicon glyphicon-time"></i> Times
+ </tab-heading>
+ <div ng-controller="TimesModalCtrl" ><div ng-include="'./partials/timesModal.html'"></div></div>
+ </tab>
+
+ <!-- alarm-->
+ <tab>
+ <tab-heading>
+ <i class="glyphicon glyphicon-bell"></i> Alarm
+ </tab-heading>
+ <div ng-controller="AlertModalInstanceCtrl" ng-include="'./partials/alertModal.html'"></div>
+ </tab>
+
+
+
+</tabset>
+
+<div class="modal-footer">
+ <button class="btn btn-primary" ng-click="close()">Fermer</button>
+</div>
\ No newline at end of file
Added: branches/ng-jtimer/src/main/webapp/partials/task.html
===================================================================
--- branches/ng-jtimer/src/main/webapp/partials/task.html (rev 0)
+++ branches/ng-jtimer/src/main/webapp/partials/task.html 2014-07-11 08:01:54 UTC (rev 3014)
@@ -0,0 +1,28 @@
+<div id="modalheader">
+ <div class="left">
+ <h4>Task : {{task.name}}</h4>
+ Change name : <input type=text ng-model="task.name">
+ </div>
+
+ <div class="right">
+ <h5>Time :</h5>
+ <b>Total time :</b>{{totaltime|time}} <br/>
+ <b>Today Time :</b>{{todaytime|time}}
+ <div ng-if="task.tags.length == 0">
+ <h5>Tags :</h5>
+ <span class="label label-info" ng-repeat="tag in task.tags">
+ {{tag}}
+ </span>
+ </div>
+ </div>
+
+
+</div>
+
+<div class="modalDesc">
+ <h4>Descritpion:</h4>
+ <div class="paded" >
+
+ <textarea name="textarea" rows="5" cols="30" ng-model="task.description"></textarea>
+ </div>
+</div>
\ No newline at end of file
Modified: branches/ng-jtimer/src/main/webapp/partials/tasks.html
===================================================================
--- branches/ng-jtimer/src/main/webapp/partials/tasks.html 2014-07-03 15:52:17 UTC (rev 3013)
+++ branches/ng-jtimer/src/main/webapp/partials/tasks.html 2014-07-11 08:01:54 UTC (rev 3014)
@@ -10,7 +10,7 @@
<!--Header partie droite -->
<span class="right">
- <a class="glyphicon glyphicon-cog" ng-click="reportPopup()">Rapport </a>
+ <a class="glyphicon glyphicon-cog" ng-click="reportPopup()">Report </a>
<a class="glyphicon glyphicon-plus-sign" ng-click="showMenu = !showMenu"></a>
<ul class="dropdown-menu" ng-class="{'menu-show': showMenu}">
@@ -26,12 +26,18 @@
<!-- Websocket information -->
<div id="alerts">
- <div class="alert alert-warning" ng-if="!webSocketClientOnline">
- <span class="icon-warning-sign"></span> Impossible de contacter le client local pour la gestion de l'inactivité.
- <a target="_blank">Télécharger le client local</a>.
+ <div class="alert alert-warning" ng-if="!webSocketClientOnline">
+ <span class="icon-warning-sign"></span>
+ Warning: the local client for idleness is not reachable.
+ <a target="_blank">Download the local client</a>.
+
+ <i class="right glyphicon glyphicon-remove" ng-click="showWebsocketAlert()"></i>
</div>
</div>
+
+
+
<!-- Footer -->
<div id="footer">
<span class="left">{{currentDate()}}</span>
@@ -45,6 +51,7 @@
<div>
<div class='table'>
<div class='tr'>
+
<div class='th name' ng-show="showName">Name</div>
<div class='th today' ng-show="showToday">Today</div>
<div class='th global' ng-show="showGlobal">Total</div>
@@ -56,7 +63,8 @@
wt-tree-repeat="tree | filter:query | orderBy:'task.name'"
wt-force-open="query || forceExpanded">
- <div class="tr" ng-class="{'current-row' : ($node.task === currentTask), 'selected-row' : ($node.task === selectedTask)}"
+ <div class="tr" ng-class="{ 'selected-row' : ($node.task === selectedTask)}"
+
ng-click="setSelectedTask($node.task)"
ng-keydown="keyPressed($event)"><!--ng-dblclick="timeTask($node.task)"-->
@@ -64,10 +72,17 @@
<span class="spacer level{{$level}}"></span>
<!--Task state icon-->
- <i class="glyphicon glyphicon-ban-circle" ng-show="$state=='empty'"></i>
- <i class="glyphicon glyphicon-plus-sign" ng-click="$toggleState()" ng-show="$state=='close'"></i>
- <i class="glyphicon glyphicon-minus-sign" ng-click="$toggleState()" ng-show="$state=='open'"></i>
+ <span>
+ <i class="glyphicon glyphicon-ban-circle" ng-show="$state=='empty'"></i>
+ <i class="glyphicon glyphicon-plus-sign" ng-click="$toggleState()" ng-show="$state=='close'"></i>
+ <i class="glyphicon glyphicon-minus-sign" ng-click="$toggleState()" ng-show="$state=='open'"></i>
+ <img ng-class="{'no-alarm' : (currentTaskAlarmState =='no-alarm'),
+ 'alarmOk': (currentTaskAlarmState =='alarmOk'),
+ 'alarmInter' : (currentTaskAlarmState =='alarmInter'),
+ 'alarmDanger': (currentTaskAlarmState =='alarmDanger')}" src="partials/loading_timer.gif" height="20" width="20" ng-show="currentTask == $node.task">
+ </span>
+
<!--Project name visible and editable -->
<form ng-submit="saveTask($node)" ng-show="$node.edit == 'name'" ng-blur="$node.edit == ''">
<input ng-model="$node.task.name" ng-blur="$node.edit == ''" >
@@ -87,13 +102,9 @@
<i class="glyphicon glyphicon-minus"></i>
</a>
- <a class="btn btn-default btn-xs" ng-click="popup($node)"
- ng-show="!$node.task.isRoot() ">
+ <a class="btn btn-default btn-xs" ng-click="optionPopup($node, $node.task.isRoot())">
<i class="glyphicon glyphicon-pencil" ></i>
</a>
- <a class="btn btn-default btn-xs" ng-click="alarmPopup($node)">
- <i class="glyphicon glyphicon-bell" ></i>
- </a>
</span>
</div>
Modified: branches/ng-jtimer/src/main/webapp/partials/timeModal.html
===================================================================
--- branches/ng-jtimer/src/main/webapp/partials/timeModal.html 2014-07-03 15:52:17 UTC (rev 3013)
+++ branches/ng-jtimer/src/main/webapp/partials/timeModal.html 2014-07-11 08:01:54 UTC (rev 3014)
@@ -2,7 +2,7 @@
<h3> Edition de la tâche.</h3>
<div class="btn-group" dropdown is-open="status.isopen" ng-show="obj.action==''">
- <button type="button" class="btn btn-primary dropdown-toggle">
+ <button type="button" class="btn btn-default btn-sm dropdown-toggle">
Action à faire sur la tâche: <span class="caret"></span>
</button>
<ul class="dropdown-menu" role="menu">
@@ -17,7 +17,7 @@
<!-- Div dropdown choix de periode -->
<div class="btn-group" dropdown is-open="status.isopen" ng-if="!activTime && obj.action !='' && obj.action !='Ajout'">
- <button type="button" class="btn btn-primary dropdown-toggle">
+ <button type="button" class="btn btn-default btn-sm dropdown-toggle">
Les périodes pour la tâche sélectionnée : <span class="caret"></span>
</button>
<ul class="dropdown-menu" role="menu">
@@ -45,8 +45,8 @@
<div class = "timepick" ng-controller="RadioTimeCtrl">
<div>
<div class="btn-group">
- <label class="btn btn-primary" ng-model="radioModel" ng-change="changeFonc()" btn-radio="'Left'">Début de période </label>
- <label class="btn btn-primary" ng-model="radioModel" ng-change="changeFonc()" btn-radio="'Right'">Fin de période </label>
+ <label class="btn btn-default btn-sm" ng-model="radioModel" ng-change="changeFonc()" btn-radio="'Left'">Début de période </label>
+ <label class="btn btn-default btn-sm" ng-model="radioModel" ng-change="changeFonc()" btn-radio="'Right'">Fin de période </label>
</div>
</div>
<div class="timepick">
@@ -74,8 +74,8 @@
<div>
<div class="btn-group">
- <label class="btn btn-primary" ng-model="radioModel" ng-change="changeFonc()" btn-radio="'Left'">Début de période </label>
- <label class="btn btn-primary" ng-model="radioModel" ng-change="changeFonc()" btn-radio="'Right'">Fin de période </label>
+ <label class="btn btn-default btn-sm" ng-model="radioModel" ng-change="changeFonc()" btn-radio="'Left'">Début de période </label>
+ <label class="btn btn-default btn-sm" ng-model="radioModel" ng-change="changeFonc()" btn-radio="'Right'">Fin de période </label>
</div>
</div>
@@ -101,13 +101,13 @@
Début : {{getStartObjTime()}} - Fin : {{getStopObjTime()}} - Duree : {{getObjDuration() | time}} </alert>
</div>
-
+<!--
<div class="modal-footer">
- <button class="btn btn-primary" ng-click="ok()">OK</button>
+ <button class="btn btn-default btn-sm" ng-click="ok()">OK</button>
<button class="btn btn-warning" ng-click="cancel()">Cancel</button>
</div>
+-->
-
</div>
Added: branches/ng-jtimer/src/main/webapp/partials/timesModal.html
===================================================================
--- branches/ng-jtimer/src/main/webapp/partials/timesModal.html (rev 0)
+++ branches/ng-jtimer/src/main/webapp/partials/timesModal.html 2014-07-11 08:01:54 UTC (rev 3014)
@@ -0,0 +1,72 @@
+<div id="modalheader">
+ <!--<div ng-controller="DatePickerCtrl" style="display:inline-block; min-height:290px;" ng-show="!dateChosen">
+ <datepicker ng-model="dateobj.date" ng-change="changeDayDate()" min-date="minDate" max-date="dateMaxPicker" show-weeks="true" class="well well-sm"></datepicker>
+ </div>-->
+
+
+ <div class="left paded">
+ <br/>
+ Pick a date :
+ <div ng-controller="ReportDatePickerCtrl" class="row paded">
+ <div class="col-md-6">
+ <p class="input-group medium_input">
+ <input type="text" class="form-control" datepicker-popup="{{format}}" ng-model="dateobj.date" ng-change="changeDate()"
+ is-open="opened" min-date="minDate" max-date="dateobj.today" ng-required="true" close-text="Close" />
+ <span class="input-group-btn">
+ <button type="button" class="btn btn-default" ng-click="open($event)"><i class="glyphicon glyphicon-calendar"></i></button>
+ </span>
+ </p>
+ </div>
+ </div>
+
+
+
+ <div> <!--ng-show="dateChosen"-->
+ Time for this date :
+ <div class="paded divYScrolable">
+ <div ng-repeat="(index,item) in times" class="rowYScrolable" ng-class="{ 'selected-row' : (item === selectedItem)}">
+
+ <div class="borderedbottom" ng-click="select(item, index)">
+ At : {{getStartTime(item)}} for : {{getDuration(item)| time}}<i class="glyphicon glyphicon-minus-sign btn" ng-click="removeTime(index,item)"></i>
+ </div>
+ </div>
+
+ <span ng-show="times.length == 0" >
+ No time for {{task.name}} at this date.
+ </span>
+ </div>
+
+ </div>
+ </div>
+
+ <div class="right paded" ng-if="selectedItem">
+ <div>
+
+ <h4>Description : </h4>
+ <div class="paded">
+ Start : {{getStartTime(selectedItem)}}<br/>
+ End : {{getStopTime(selectedItem)}}<br/>
+ Duration : {{getDuration(selectedItem)| time}}
+ </div>
+
+ <h4>Modification : </h4>
+
+ <div style="display : inline-block;">
+ De :
+ </div>
+ <div style="display : inline-block;">
+ <timepicker
+ ng-model="dateobj.startPeriod" ng-change="changeModel()" hour-step="hstep" minute-step="mstep" show-meridian="ismeridian">
+ </timepicker>
+ </div>
+ <div style="display : inline-block;">
+ A :
+ </div>
+ <div style="display : inline-block;">
+ <timepicker
+ ng-model="dateobj.endPeriod" ng-change="changeModel()" hour-step="hstep" minute-step="mstep" show-meridian="ismeridian">
+ </timepicker>
+ </div>
+ </div>
+ </div>
+</div>
1
0
r3013 - in branches/ng-jtimer/src/main: java/org/chorem/jtimer/web resources webapp/js webapp/partials
by obruce@users.chorem.org 03 Jul '14
by obruce@users.chorem.org 03 Jul '14
03 Jul '14
Author: obruce
Date: 2014-07-03 17:52:17 +0200 (Thu, 03 Jul 2014)
New Revision: 3013
Url: http://forge.chorem.org/projects/jtimer/repository/revisions/3013
Log:
controller, alarmpartial : changement correction delete
Modified:
branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/AlarmResource.java
branches/ng-jtimer/src/main/resources/jtimer-default.properties
branches/ng-jtimer/src/main/webapp/js/controllers.js
branches/ng-jtimer/src/main/webapp/partials/alertModal.html
Modified: branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/AlarmResource.java
===================================================================
--- branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/AlarmResource.java 2014-07-03 14:41:29 UTC (rev 3012)
+++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/AlarmResource.java 2014-07-03 15:52:17 UTC (rev 3013)
@@ -71,7 +71,6 @@
@Delete
public void deleteAlarm() {
-
String alarmId = (String)getRequest().getAttributes().get("alarmId");
storage.removeAlarmWithId(alarmId, new Date().getTime());
Modified: branches/ng-jtimer/src/main/resources/jtimer-default.properties
===================================================================
--- branches/ng-jtimer/src/main/resources/jtimer-default.properties 2014-07-03 14:41:29 UTC (rev 3012)
+++ branches/ng-jtimer/src/main/resources/jtimer-default.properties 2014-07-03 15:52:17 UTC (rev 3013)
@@ -119,5 +119,5 @@
WHERE taskId = ?
jtimer.storage.update.time.forremove=UPDATE tasktime SET removed = ?, modificationDate = ? \
WHERE uuid = ?
-jtimer.storage.update.alarm.forremove=UPDATE tasktime SET removed = ?, modificationDate = ? \
+jtimer.storage.update.alarm.forremove=UPDATE taskalarm SET removed = ?, modificationDate = ? \
WHERE alarmid = ?
\ No newline at end of file
Modified: branches/ng-jtimer/src/main/webapp/js/controllers.js
===================================================================
--- branches/ng-jtimer/src/main/webapp/js/controllers.js 2014-07-03 14:41:29 UTC (rev 3012)
+++ branches/ng-jtimer/src/main/webapp/js/controllers.js 2014-07-03 15:52:17 UTC (rev 3013)
@@ -221,7 +221,7 @@
serverTaskAccess.query({date : 0}, function (response) {
angular.forEach(response, function (item) {
-
+ console.log(response);
if((!(item.taskId in $scope.data.tasks)) && item.removed == 0){
console.log( "Un element non present " + item.name + item.modificationDate);
@@ -407,7 +407,7 @@
//Recuperer un element dans un array avec son id
- var getObjectInArrayWithId= function(array, id){
+ var getTimeInArrayWithId= function(array, id){
var res;
angular.forEach(array, function(time){
if(time.timeId == id){
@@ -439,7 +439,40 @@
return (object[pos]) && (item in object[pos]);
};
+
/**
+ * Methode qui recupere les alarmes pour une tache
+ */
+ var getAlarmsFromServerWithTask = function(task){
+
+ //Recuperer un element dans un array avec son id
+ var getAlarmInArrayWithId= function(array, id){
+ var res;
+ angular.forEach(array, function(alarm){
+ if(alarm.alarmId == id){
+ res = alarm;
+ }
+ });
+ return res;
+ }
+
+ serverAlarmAccess.query({taskId : task.taskId, date : $scope.timeAccess}, function (response) {
+
+ angular.forEach(response, function (item) {
+
+ if(getAlarmInArrayWithId(task.alarms, item.alarmId) == undefined && !item.removed){
+ //On cree le tasktime
+ taskAlarm = new TaskAlarm(task, item.alarmId, item.name, item.type, item.modificationDate); //TODO
+ task.alarms.push(taskAlarm);
+ save();
+ }
+ });
+
+ });
+ }
+
+
+ /**
* Methode qui pousse la todolist vers le serveur pour ssauvegarde les changements
* Sauve les changements dans le localStorage
*/
@@ -1134,8 +1167,10 @@
/**
* Methode qui supprime un element du tableau d'alerte
*/
- $scope.removeAlert = function(index,a){
+ $scope.removeAlarm = function(index,a){
+ serverAlarmAccess.deleteAlarm({alarmId: a.alarmId});
$scope.alarms.splice(index, 1);
+
}
/**
Modified: branches/ng-jtimer/src/main/webapp/partials/alertModal.html
===================================================================
--- branches/ng-jtimer/src/main/webapp/partials/alertModal.html 2014-07-03 14:41:29 UTC (rev 3012)
+++ branches/ng-jtimer/src/main/webapp/partials/alertModal.html 2014-07-03 15:52:17 UTC (rev 3013)
@@ -22,7 +22,7 @@
<!--Portion d'ajout -->
<tr ng-repeat="(index,alarm) in alarms">
- <td><i class="glyphicon glyphicon-minus-sign" ng-click="removeAlert(index,alarm)"></i></td>
+ <td><i class="glyphicon glyphicon-minus-sign" ng-click="removeAlarm(index,alarm)"></i></td>
<td >{{alarm.name}}</td>
<td>{{alarm.type}}</td>
@@ -54,10 +54,6 @@
<i class="glyphicon glyphicon-check color_green"ng-show="alarm.type!='Type'"> </i>
</td>
<td>
- <!--<timepicker ng-model="alarm.date" ng-change="changed()"
- hour-step="1" minute-step="1" show-meridian="ismeridian">
-
- </timepicker>-->
<div ng-if="alarm.type=='Type'">
</div>
1
0