Author: obruce Date: 2014-08-20 10:19:42 +0200 (Wed, 20 Aug 2014) New Revision: 3029 Url: http://forge.chorem.org/projects/jtimer/repository/revisions/3029 Log: Rapport correction de la recherche avec tag et du get avec tag 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-08-14 14:43:54 UTC (rev 3028) +++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfig.java 2014-08-20 08:19:42 UTC (rev 3029) @@ -167,26 +167,6 @@ return appConfig.getOption(JtimerConfigOption.JTIMER_STORAGE_SELECT_REPORT_BYDAY.getKey()); } - public String getStorageQuerySelectReportByProjectAndTags(){ - return appConfig.getOption(JtimerConfigOption.JTIMER_STORAGE_SELECT_REPORT_BYPROJECTANDTAG.getKey()); - } - - public String getStorageQuerySelectReportByYearAndTags(){ - return appConfig.getOption(JtimerConfigOption.JTIMER_STORAGE_SELECT_REPORT_BYYEARANDTAG.getKey()); - } - - public String getStorageQuerySelectReportByMonthAndTags(){ - return appConfig.getOption(JtimerConfigOption.JTIMER_STORAGE_SELECT_REPORT_BYMONTHANDTAG.getKey()); - } - - public String getStorageQuerySelectReportByWeekAndTags(){ - return appConfig.getOption(JtimerConfigOption.JTIMER_STORAGE_SELECT_REPORT_BYWEEKANDTAG.getKey()); - } - - public String getStorageQuerySelectReportByDayAndTags(){ - return appConfig.getOption(JtimerConfigOption.JTIMER_STORAGE_SELECT_REPORT_BYDAYANDTAG.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-08-14 14:43:54 UTC (rev 3028) +++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/config/JtimerConfigOption.java 2014-08-20 08:19:42 UTC (rev 3029) @@ -184,36 +184,6 @@ "", String.class ), - JTIMER_STORAGE_SELECT_REPORT_BYPROJECTANDTAG( - "jtimer.storage.select.report.byProjectAndTag", - "requête de selection des taches minutées entre deux bornes filtrer par projet", - "", - String.class - ), - JTIMER_STORAGE_SELECT_REPORT_BYYEARANDTAG( - "jtimer.storage.select.report.byYearAndTag", - "requête de selection des taches minutées entre deux bornes filtrer par year", - "", - String.class - ), - JTIMER_STORAGE_SELECT_REPORT_BYMONTHANDTAG( - "jtimer.storage.select.report.byMonthAndTag", - "requête de selection des taches minutées entre deux bornes filtrer par month", - "", - String.class - ), - JTIMER_STORAGE_SELECT_REPORT_BYWEEKANDTAG( - "jtimer.storage.select.report.byWeekAndTag", - "requête de selection des taches minutées entre deux bornes filtrer par semaine", - "", - String.class - ), - JTIMER_STORAGE_SELECT_REPORT_BYDAYANDTAG( - "jtimer.storage.select.report.byDayAndTag", - "requête de selection des taches minutées entre deux bornes filtrer par jour", - "", - 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-08-14 14:43:54 UTC (rev 3028) +++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/storage/Storage.java 2014-08-20 08:19:42 UTC (rev 3029) @@ -17,7 +17,6 @@ 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.HashSet; @@ -232,8 +231,15 @@ try { rs.first(); - String[] parentArray = (String[]) rs.getObject("path"); - path = Arrays.copyOf(parentArray, parentArray.length + 1); + Object[] parentArray = (Object[]) rs.getObject("path"); + path = new String[parentArray.length + 1]; + + int cpt = 0; + for(Object s : parentArray){ + parentArray[cpt] = s; + cpt++; + } + path[parentArray.length] = task.getTaskId(); }catch(JdbcSQLException eee){ @@ -365,6 +371,20 @@ task.setParent(rs.getString("parent")); task.setRemoved(rs.getLong("removed")); task.setDescription(rs.getString("description")); + + Object[] obj = (Object[]) rs.getObject("tags"); + String[] tag = new String[obj.length]; + + log.warn(ArrayUtils.toString(obj)); + int cpt = 0; + + for(Object s :obj){ + tag[cpt] = (String)s; + cpt++; + } + + task.setTags(tag); + task.setTodayTime(0); task.setCreationDate(new java.util.Date((rs.getTimestamp("creationDate").getTime()))); task.setModificationDate(new java.util.Date(rs.getTimestamp("modificationDate").getTime())); @@ -549,48 +569,6 @@ } /** - * 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: Id, value: task} - */ - public HashMap<String, ReportTask> getReportByProjectAndTags(Long startDate, Long endDate, String[] toReport, String[] wantedTags){ - - HashMap<String, ReportTask> map = new HashMap<>(); - - PreparedStatement statement = null; - - try{ - statement = getConnection().prepareStatement(config.getStorageQuerySelectReportByProjectAndTags()); - - statement.setObject(1, new Date(startDate)); - statement.setObject(2, new Date(endDate)); - statement.setObject(3, toReport); - statement.setObject(4, wantedTags); - - ResultSet rs = statement.executeQuery(); - while(rs.next()) { - - String name = rs.getString("name"); - String taskId = rs.getString("taskId"); - long totalDuration = rs.getLong("totalduration"); - - ReportTask task = new ReportTask(name,taskId,totalDuration); - - map.put(taskId, task); - } - - }catch(SQLException ex) { - throw new StorageException("Can't get report", ex); - } finally { - closeStatement(statement); - } - - - return map; - } - - /** * Method that returns the collection of timed tasks for a time interval grouped by period * @param startDate the start date * @param endDate the end date @@ -655,74 +633,6 @@ return res; } - /** - * Method that returns the collection of timed tasks for a time interval grouped by period - * @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>> getReportByPeriodAndTags(Long startDate, Long endDate, String[] toReport,String[] tags, String type){ - - HashMap<String,Set<ReportTask>> res = new HashMap<>(); - PreparedStatement statement = null; - - try{ - if("Year".equals(type)){ - statement = getConnection().prepareStatement(config.getStorageQuerySelectReportByYearAndTags()); - }else if("Month".equals(type)){ - statement = getConnection().prepareStatement(config.getStorageQuerySelectReportByMonthAndTags()); - }else if("Week".equals(type)){ - String sql = config.getStorageQuerySelectReportByWeekAndTags(); - statement = getConnection().prepareStatement(sql); - }else{ - statement = getConnection().prepareStatement(config.getStorageQuerySelectReportByDayAndTags()); - } - - // les bornes - statement.setObject(1, new Date(startDate)); - statement.setObject(2, new Date(endDate)); - statement.setObject(3, toReport); - statement.setObject(4, tags); - - ResultSet rs = statement.executeQuery(); - while(rs.next()) { - String period; - if("Year".equals(type)){ - period = rs.getString("year"); - }else if("Month".equals(type)){ - period = rs.getString("month") +" - "+ rs.getString("year"); - }else if("Week".equals(type)){ - period = rs.getString("week") +" - "+ rs.getString("year"); - }else { - period = rs.getString("day") + " - " + 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>()); - } - - String name = rs.getString("name"); - String taskId = rs.getString("taskId"); - long totalDuration = rs.getLong("totalduration"); - - ReportTask task = new ReportTask(name,taskId,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); - } - - return res; - } - - /** Update */ /** 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-08-14 14:43:54 UTC (rev 3028) +++ branches/ng-jtimer/src/main/java/org/chorem/jtimer/web/ReportResource.java 2014-08-20 08:19:42 UTC (rev 3029) @@ -2,6 +2,7 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.chorem.jtimer.storage.Storage; @@ -12,9 +13,7 @@ import org.restlet.resource.ResourceException; import java.io.IOException; -import java.util.ArrayList; import java.util.HashMap; -import java.util.Iterator; /** * Created by olivia on 11/06/14. @@ -43,20 +42,17 @@ @Post("json") public Representation getReport(Representation representation) throws IOException { // Les elements voulus par l'interface - String[][] tmp; String[] toReport; - String[] wantedTags; //On recupere les elements String repr1 = representation.getText(); Gson gson = new Gson(); - tmp = gson.fromJson(repr1, String[][].class); //On extrait les elements voulus - toReport = tmp[0]; - wantedTags = tmp[1]; + toReport = gson.fromJson(repr1, String[].class); + log.warn("les wanted " +ArrayUtils.toString(toReport)); - String json="[No data]"; + String json="[]"; String type =""; long startDate; long endDate; @@ -86,56 +82,20 @@ //On ne recupere que les elements interessants gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); - if(wantedTags.length == 0) { - if (type.equals("Project")) { + if (type.equals("Project")) { - HashMap<String, ReportTask> storedTask = storage.getReportByProject(startDate, endDate, toReport); - json = gson.toJson(storedTask, HashMap.class); + HashMap<String, ReportTask> storedTask = storage.getReportByProject(startDate, endDate, toReport); + json = gson.toJson(storedTask, HashMap.class); - } else { + } else { - HashMap storedTask = storage.getReportByPeriod(startDate, endDate, toReport, type); - json = gson.toJson(storedTask, HashMap.class); + HashMap storedTask = storage.getReportByPeriod(startDate, endDate, toReport, type); + json = gson.toJson(storedTask, HashMap.class); - } - }else{ - - if (type.equals("Project")) { - - HashMap<String, ReportTask> storedTask = storage.getReportByProjectAndTags(startDate, endDate, toReport, wantedTags); - json = gson.toJson(storedTask, HashMap.class); - - } else { - - HashMap storedTask = storage.getReportByPeriodAndTags(startDate, endDate, toReport, wantedTags, type); - json = gson.toJson(storedTask, HashMap.class); - - } } + log.warn("ce qui ressort" +json); return new StringRepresentation(json); } - - - /** - * Methode qui détermine si l'id est dans la collection - * @param id l'identifiant a trouver - * @param list la list a parcourir - * @return un booleen de presence - */ - private boolean idIsInArray(String id,ArrayList<String> list){ - boolean res = false; - - Iterator iter = list.iterator(); - while(iter.hasNext()) { - if (id.equals(iter.next())) { - res = true; - iter.remove(); - break; - } - } - - return res; - } } Modified: branches/ng-jtimer/src/main/resources/jtimer-default.properties =================================================================== --- branches/ng-jtimer/src/main/resources/jtimer-default.properties 2014-08-14 14:43:54 UTC (rev 3028) +++ branches/ng-jtimer/src/main/resources/jtimer-default.properties 2014-08-20 08:19:42 UTC (rev 3029) @@ -2,7 +2,7 @@ # jTimer default properties ### # jTimer storage path -jtimer.storage.path=/home/olivia/Bureau/jtimer/jtimer/BDD2 +jtimer.storage.path=/home/olivia/Bureau/jtimer/jtimer/BDDtag ### # SQL properties ### @@ -143,50 +143,6 @@ AND ARRAY_CONTAINS(?, TA.taskid) \ AND TA.removed = 0 \ GROUP BY TA.taskId , day, month, year -jtimer.storage.select.report.byProjectAndTag=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 ARRAY_CONTAINS_ONE(TA.tags, ?) \ - AND TA.removed = 0 \ - GROUP BY TA.taskId -jtimer.storage.select.report.byYearAndTag=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 ARRAY_CONTAINS_ONE(TA.tags, ?) \ - AND TA.removed = 0 \ - GROUP BY TA.taskId , year -jtimer.storage.select.report.byMonthAndTag=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 ARRAY_CONTAINS_ONE(TA.tags, ?) \ - AND TA.removed = 0 \ - GROUP BY TA.taskId , month, year -jtimer.storage.select.report.byWeekAndTag=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 ARRAY_CONTAINS_ONE(?, TA.tags) \ - AND TA.removed = 0 \ - GROUP BY TA.taskId , week, year -jtimer.storage.select.report.byDayAndTag=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 ARRAY_CONTAINS_ONE(TA.tags, ?) \ - AND TA.removed = 0 \ - GROUP BY TA.taskId , day, month, year 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-08-14 14:43:54 UTC (rev 3028) +++ branches/ng-jtimer/src/main/webapp/js/controllers.js 2014-08-20 08:19:42 UTC (rev 3029) @@ -1540,6 +1540,7 @@ /** * Method that return if the task has time or his subtasks + @return {bool} */ $scope.hasSelfOrChildTime= function(collection, node, bool){ @@ -1558,22 +1559,9 @@ return bool; }; - $scope.hasTags = function(node, array){ - var bool = true; - - if(array){ - - for (var i = 0, len = node.task.tags.length; i < len; i++) { - if (!node.task.tags[i] in array) { - bool = false - break; - } - } - } - - return bool; - } - + /** + * Fonction qui va supprimer les tags si on decoche + */ $scope.removeTags = function(){ $scope.tag.array = []; $scope.generateReport(); @@ -1603,19 +1591,22 @@ /** * Methode qui va reccursivement verifier les taches à repporter */ - var recurseGenerateChildReport = function(child){ + var recurseGenerateChildReport = function(child, parentHasTag){ + parentHasTag = parentHasTag || child.task.hasOneTag($scope.tag.array); + // On parcours les data pour maj - angular.forEach(child.children, function(childnode){recurseGenerateChildReport(childnode)}); - if(child.task.isReported){ + angular.forEach(child.children, function(childnode){recurseGenerateChildReport(childnode, parentHasTag)}); + + if( parentHasTag && child.task.isReported){ toReportTask.push(child.task.taskId); } } - angular.forEach(tree.children, function(child){recurseGenerateChildReport(child)}); + angular.forEach(tree.children, function(child){recurseGenerateChildReport(child,false)}); $http({method: "POST", url: "/rest/report", - params:{start_Date : deb, end_Date : end, type : $scope.modal.radioModel}, data : angular.toJson([toReportTask, $scope.tag.array])}) + params:{start_Date : deb, end_Date : end, type : $scope.modal.radioModel}, data : angular.toJson(toReportTask)}) .success(function(data){ if($scope.modal.radioModel=='Project'){ @@ -1892,9 +1883,6 @@ //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(); Modified: branches/ng-jtimer/src/main/webapp/js/entities.js =================================================================== --- branches/ng-jtimer/src/main/webapp/js/entities.js 2014-08-14 14:43:54 UTC (rev 3028) +++ branches/ng-jtimer/src/main/webapp/js/entities.js 2014-08-20 08:19:42 UTC (rev 3029) @@ -425,7 +425,12 @@ this.isReported = true; this.hidden = false; this.alarms=[]; - this.tags = parentTags; + if(parentTags){ + this.tags = parentTags; + }else{ + this.tags = []; + } + this.syncOptions = {}; }; @@ -481,6 +486,32 @@ }; /** + * Indique si la tache contient un tag + * @return {boolean} + */ +Task.prototype.hasOneTag = function(array){ + + var bool = false; + + if(array.length > 0){ + + for (var i = 0, len = this.tags.length; i < len; i++) { + + for (var j = 0, len2 = array.length; j < len2; j++) { + if (this.tags[i] == array[j]) { + bool = true + } + } + } + }else{ + bool = true; + } + + + return bool; +}; + +/** * Permet de conserve une temps cree localement * @param {Task} task * @returns {TaskTime} Modified: branches/ng-jtimer/src/main/webapp/partials/reportModal.html =================================================================== --- branches/ng-jtimer/src/main/webapp/partials/reportModal.html 2014-08-14 14:43:54 UTC (rev 3028) +++ branches/ng-jtimer/src/main/webapp/partials/reportModal.html 2014-08-20 08:19:42 UTC (rev 3029) @@ -211,7 +211,7 @@ </div> </div> </span > - <span ng-if="!periodTaskData"> + <span ng-if="periodTaskData== {}"> No timed task. </span> </alert>