Chorem-commits
Threads by month
- ----- 2026 -----
- August
- July
- 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 2014
- 2 participants
- 14 discussions
r401 - in trunk/chorem-webmotion/src/main: java/org/chorem/webmotion/actions/project resources webapp/WEB-INF/jsp/projects webapp/js
by ymartel@users.chorem.org Feb. 12, 2014
by ymartel@users.chorem.org Feb. 12, 2014
Feb. 12, 2014
Author: ymartel
Date: 2014-02-12 18:13:34 +0100 (Wed, 12 Feb 2014)
New Revision: 401
Url: http://chorem.org/projects/chorem/repository/revisions/401
Log:
in angular project list, add sort and inline edit
Modified:
trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/ProjectsAction.java
trunk/chorem-webmotion/src/main/resources/mapping
trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/projects/editProject.html
trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/projects/projects.jsp
trunk/chorem-webmotion/src/main/webapp/js/projectPagination.js
Modified: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/ProjectsAction.java
===================================================================
--- trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/ProjectsAction.java 2014-02-07 16:19:35 UTC (rev 400)
+++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/ProjectsAction.java 2014-02-12 17:13:34 UTC (rev 401)
@@ -1,5 +1,6 @@
package org.chorem.webmotion.actions.project;
+import com.google.common.collect.ImmutableMap;
import org.chorem.ChoremClient;
import org.chorem.entities.Project;
import org.chorem.webmotion.PaginatedResult;
@@ -23,7 +24,7 @@
* @param client
* @return
*/
- public PaginatedResult findAllProjects(ChoremClient client, int page, int count, String orderBy, Map<String, String> sorting) {
+ public PaginatedResult findAllProjects(ChoremClient client, int page, int count, Map<String, String> sorting) {
//Ventes de l'année
WikittyQuery totalProducts = new WikittyQueryMaker()
@@ -36,6 +37,11 @@
PaginatedResult<Project> paginatedResult;
if (nbProjects > 0) {
+ if (sorting == null || sorting.isEmpty()) {
+ sorting = ImmutableMap.of("name", "asc");
+ }
+ String orderBy = sorting.keySet().iterator().next();
+
ElementField orderElement;
if (Project.FIELD_PROJECT_DESCRIPTION.equals(orderBy)) {
orderElement = Project.ELEMENT_FIELD_PROJECT_DESCRIPTION;
@@ -49,9 +55,15 @@
.exteq(Project.EXT_PROJECT)
.end()
.setOffset((page - 1) * count)
- .setLimit(page * count)
- .addSortAscending(orderElement);
+ .setLimit(page * count);
+ if ("desc".equals(sorting.get(orderBy))) {
+ projectsQuery.addSortDescending(orderElement);
+ } else {
+ //by default : ascending
+ projectsQuery.addSortAscending(orderElement);
+ }
+
WikittyQueryResult<Project> projects = client.findAllByQuery(Project.class, projectsQuery);
paginatedResult = new PaginatedResult<Project>(projects.getAll(), page, count, nbProjects);
@@ -63,4 +75,11 @@
return paginatedResult;
}
+ public void updateProject(ChoremClient client, String id, String name, String description) {
+ Project project = client.restore(Project.class, id);
+ project.setName(name);
+ project.setDescription(description);
+ client.store(project);
+ }
+
}
Modified: trunk/chorem-webmotion/src/main/resources/mapping
===================================================================
--- trunk/chorem-webmotion/src/main/resources/mapping 2014-02-07 16:19:35 UTC (rev 400)
+++ trunk/chorem-webmotion/src/main/resources/mapping 2014-02-12 17:13:34 UTC (rev 401)
@@ -97,6 +97,7 @@
GET /project/json/projects?page={page}&count={count} action:project.ProjectsAction.findAllProjects page=1,count=10
GET /project/projects.html view:projects/projects.jsp
GET /project/editProject.html view:projects/editProject.html
+PUT /projects/{projectId}/ action:project.ProjectsAction.updateProject
#
# Wikitty Rest API
Modified: trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/projects/editProject.html
===================================================================
--- trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/projects/editProject.html 2014-02-07 16:19:35 UTC (rev 400)
+++ trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/projects/editProject.html 2014-02-12 17:13:34 UTC (rev 401)
@@ -1,13 +1,12 @@
<table class="noborder">
<tr>
<td>Name:</td>
- <td><input type="text" name="name" class="w100" value="{{project.wikitty.target.fieldValue['Project.name']}}"></td>
+ <td><input type="text" ng-model="editProject.name" name="Project.name" class="w100"></td>
<td>Description: </td>
- <td><input type="text" name="description" class="w180" value="{{project.wikitty.target.fieldValue['Project.description']}}"></td>
+ <td><input type="text" ng-model="editProject.description" name="Project.description" class="w180"></td>
<td>
- <input type="hidden" name="id" value="{{project.wikitty.target.id}}">
- <input type="button" value=" save " onclick="alert('Save :)')">
+ <input type="button" value="save" ng-click="updateProject()" />
</td>
- <td><input type="button" value=" cancel" ng-click="setEditId(-1)"></td>
+ <td><input type="button" value="cancel" ng-click="cancelEdit()"></td>
</tr>
</table>
\ No newline at end of file
Modified: trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/projects/projects.jsp
===================================================================
--- trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/projects/projects.jsp 2014-02-07 16:19:35 UTC (rev 400)
+++ trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/projects/projects.jsp 2014-02-12 17:13:34 UTC (rev 401)
@@ -19,16 +19,15 @@
<tr id="tr{{project.wikitty.target.id}}" ng-class-odd="'odd'" ng-class-even="'even'">
<td data-title="'Name'" sortable="name">
{{project.wikitty.target.fieldValue["Project.name"]}}
- {{loading}}
</td>
<td data-title="'Description'" sortable="description">
{{project.wikitty.target.fieldValue['Project.description']}}
</td>
<td class="rowTd" ><input type=button id="editRowBtn{{project.wikitty.target.id}}" value="edit"
- ng-click="setEditId(project.wikitty.target.id)"></td>
+ ng-click="setEditProject(project)"></td>
</tr>
- <tr ng-show="editId===project.wikitty.target.id" ng-if="editId===project.wikitty.target.id">
- <td colspan="7" ng-include src="'editProject.html'">pouet</td>
+ <tr ng-if="editProject.id===project.wikitty.target.id">
+ <td colspan="7" ng-include src="'editProject.html'"></td>
</tr>
</tbody>
</table>
Modified: trunk/chorem-webmotion/src/main/webapp/js/projectPagination.js
===================================================================
--- trunk/chorem-webmotion/src/main/webapp/js/projectPagination.js 2014-02-07 16:19:35 UTC (rev 400)
+++ trunk/chorem-webmotion/src/main/webapp/js/projectPagination.js 2014-02-12 17:13:34 UTC (rev 401)
@@ -1,7 +1,8 @@
-angular.module('projectList', ['ngTable', 'ngResource'])
-.controller('PageCtrl',
- function($scope, $timeout, $resource, ngTableParams) {
+var app = angular.module('projectList', ['ngTable', 'ngResource']);
+app.controller('PageCtrl',
+ function($scope, $timeout, $resource, ngTableParams) {
+
var Api = $resource('json/projects');
$scope.tableParams = new ngTableParams({
@@ -14,15 +15,19 @@
total: 0, // length of data
getData: function($defer, params) {
- var orderedData = params.orderBy();
+ var sorting = params.sorting();
+ var orderBy = Object.keys(sorting)[0];
+ var ordering = orderBy + "." + sorting[orderBy];
+ console.log(ordering);
// ajax request to api
- Api.get(params.url(), function(data) {
+ url = params.url();
+ url['sorting.' + orderBy] = sorting[orderBy];
+ Api.get(url, function(data) {
$timeout(function() {
// update table params
params.total(data.total);
// set new data
- console.log(data);
$scope.projects = data.elements;
$defer.resolve(data);
}, 500);
@@ -30,12 +35,24 @@
}
});
- $scope.editId = -1;
+ $scope.updateProject = function() {
- $scope.setEditId = function(pid) {
- $scope.editId = pid;
- }
+ saveParams = {extension : 'Project', id : $scope.editProject.id,'Project.name': $scope.editProject.name, 'Project.description': $scope.editProject.description}
+ $resource('../wikitty/save', saveParams, {'update' : {method:'PUT'}}).update(function(result) {
+ $scope.tableParams.reload();
+ });
+ delete $scope.editProject;
+ };
+ $scope.setEditProject = function(project) {
+ $scope.editProject = {id: project.wikitty.target.id, name: project.wikitty.target.fieldValue['Project.name'], description: project.wikitty.target.fieldValue['Project.description']};
+ };
+
+ $scope.cancelEdit = function() {
+ delete $scope.editProject;
+
+ };
+
});
angular.module('projectList')
1
0
r400 - in trunk/chorem-webmotion/src/main: java/org/chorem/webmotion java/org/chorem/webmotion/actions/project resources webapp/WEB-INF/jsp webapp/WEB-INF/jsp/projects webapp/js
by ymartel@users.chorem.org Feb. 7, 2014
by ymartel@users.chorem.org Feb. 7, 2014
Feb. 7, 2014
Author: ymartel
Date: 2014-02-07 17:19:35 +0100 (Fri, 07 Feb 2014)
New Revision: 400
Url: http://chorem.org/projects/chorem/repository/revisions/400
Log:
add a page with paginated table for project list
Added:
trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/PaginatedResult.java
trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/ProjectsAction.java
trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/projects/
trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/projects/editProject.html
trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/projects/projects.jsp
trunk/chorem-webmotion/src/main/webapp/js/projectPagination.js
Modified:
trunk/chorem-webmotion/src/main/resources/mapping
Added: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/PaginatedResult.java
===================================================================
--- trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/PaginatedResult.java (rev 0)
+++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/PaginatedResult.java 2014-02-07 16:19:35 UTC (rev 400)
@@ -0,0 +1,74 @@
+package org.chorem.webmotion;
+
+import java.io.Serializable;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * @author ymartel <martel(a)codelutin.com>
+ */
+public class PaginatedResult<E> implements Iterable<E>, Serializable {
+
+ protected List<E> elements;
+ protected int currentPage;
+ protected int count;
+ protected int nbPages;
+ protected int total;
+
+ public PaginatedResult(List<E> elements, int currentPage, int count, int total) {
+ this.elements = elements;
+ this.currentPage = currentPage;
+ this.count = count;
+ this.total = total;
+ this.nbPages = total == 0 ? 1 : (int) Math.ceil((double) total / (double) count);
+ }
+
+ @Override
+ public Iterator<E> iterator() {
+ if (this.elements == null) {
+ return null;
+ } else {
+ return elements.iterator();
+ }
+ }
+
+ public List<E> getElements() {
+ return elements;
+ }
+
+ public void setElements(List<E> elements) {
+ this.elements = elements;
+ }
+
+ public int getCurrentPage() {
+ return currentPage;
+ }
+
+ public void setCurrentPage(int currentPage) {
+ this.currentPage = currentPage;
+ }
+
+ public int getCount() {
+ return count;
+ }
+
+ public void setCount(int count) {
+ this.count = count;
+ }
+
+ public int getNbPages() {
+ return nbPages;
+ }
+
+ public void setNbPages(int nbPages) {
+ this.nbPages = nbPages;
+ }
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+}
Added: trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/ProjectsAction.java
===================================================================
--- trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/ProjectsAction.java (rev 0)
+++ trunk/chorem-webmotion/src/main/java/org/chorem/webmotion/actions/project/ProjectsAction.java 2014-02-07 16:19:35 UTC (rev 400)
@@ -0,0 +1,66 @@
+package org.chorem.webmotion.actions.project;
+
+import org.chorem.ChoremClient;
+import org.chorem.entities.Project;
+import org.chorem.webmotion.PaginatedResult;
+import org.debux.webmotion.server.WebMotionController;
+import org.nuiton.wikitty.entities.ElementField;
+import org.nuiton.wikitty.query.WikittyQuery;
+import org.nuiton.wikitty.query.WikittyQueryMaker;
+import org.nuiton.wikitty.query.WikittyQueryResult;
+
+import java.util.ArrayList;
+import java.util.Map;
+
+/**
+ * @author ymartel <martel(a)codelutin.com>
+ */
+public class ProjectsAction extends WebMotionController {
+
+ /**
+ * Rend le graphe des devis envoyés par mois
+ *
+ * @param client
+ * @return
+ */
+ public PaginatedResult findAllProjects(ChoremClient client, int page, int count, String orderBy, Map<String, String> sorting) {
+
+ //Ventes de l'année
+ WikittyQuery totalProducts = new WikittyQueryMaker()
+ .select().count(Project.ELEMENT_FIELD_PROJECT_NAME).where().and()
+ .exteq(Project.EXT_PROJECT)
+ .end();
+
+ Integer nbProjects = client.findByQuery(Integer.class, totalProducts);
+
+ PaginatedResult<Project> paginatedResult;
+ if (nbProjects > 0) {
+
+ ElementField orderElement;
+ if (Project.FIELD_PROJECT_DESCRIPTION.equals(orderBy)) {
+ orderElement = Project.ELEMENT_FIELD_PROJECT_DESCRIPTION;
+ } else {
+ // by default, order by
+ orderElement = Project.ELEMENT_FIELD_PROJECT_NAME;
+ }
+
+ WikittyQuery projectsQuery = new WikittyQueryMaker()
+ .where().and()
+ .exteq(Project.EXT_PROJECT)
+ .end()
+ .setOffset((page - 1) * count)
+ .setLimit(page * count)
+ .addSortAscending(orderElement);
+
+ WikittyQueryResult<Project> projects = client.findAllByQuery(Project.class, projectsQuery);
+
+ paginatedResult = new PaginatedResult<Project>(projects.getAll(), page, count, nbProjects);
+
+ } else {
+ paginatedResult = new PaginatedResult<Project>(new ArrayList<Project>(), 1, count, 0);
+ }
+
+ return paginatedResult;
+ }
+
+}
Modified: trunk/chorem-webmotion/src/main/resources/mapping
===================================================================
--- trunk/chorem-webmotion/src/main/resources/mapping 2014-02-06 16:17:01 UTC (rev 399)
+++ trunk/chorem-webmotion/src/main/resources/mapping 2014-02-07 16:19:35 UTC (rev 400)
@@ -3,6 +3,7 @@
package.filters=org.chorem.webmotion.filters
package.actions=org.chorem.webmotion.actions
server.listener.class=org.chorem.webmotion.injector.InjectorListener
+default.render=org.debux.webmotion.server.render.DefaultRender
[filters]
* /* ChoremClientFilter.inject
@@ -13,6 +14,7 @@
* /sales/funnel/partial/* DecoratorFilter.decorate wmDecoratorNo=true
* /crm/export DecoratorFilter.decorate wmDecoratorNo=true
* /project/json/* DecoratorFilter.decorate wmDecoratorNo=true
+* /project/editProject.html DecoratorFilter.decorate wmDecoratorNo=true
* /hr/employeeEdit/json/* DecoratorFilter.decorate wmDecoratorNo=true
* /ascii/* DecoratorFilter.decorate wmDecoratorNo=true
* /rest/* DecoratorFilter.decorate wmDecoratorNo=true
@@ -92,6 +94,10 @@
* /crm/quotation/edit/{id} action:crm.QuotationAction.edit
* /crm/export action:crm.ExportAction.exportContactBase
+GET /project/json/projects?page={page}&count={count} action:project.ProjectsAction.findAllProjects page=1,count=10
+GET /project/projects.html view:projects/projects.jsp
+GET /project/editProject.html view:projects/editProject.html
+
#
# Wikitty Rest API
#
Added: trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/projects/editProject.html
===================================================================
--- trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/projects/editProject.html (rev 0)
+++ trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/projects/editProject.html 2014-02-07 16:19:35 UTC (rev 400)
@@ -0,0 +1,13 @@
+<table class="noborder">
+ <tr>
+ <td>Name:</td>
+ <td><input type="text" name="name" class="w100" value="{{project.wikitty.target.fieldValue['Project.name']}}"></td>
+ <td>Description: </td>
+ <td><input type="text" name="description" class="w180" value="{{project.wikitty.target.fieldValue['Project.description']}}"></td>
+ <td>
+ <input type="hidden" name="id" value="{{project.wikitty.target.id}}">
+ <input type="button" value=" save " onclick="alert('Save :)')">
+ </td>
+ <td><input type="button" value=" cancel" ng-click="setEditId(-1)"></td>
+ </tr>
+</table>
\ No newline at end of file
Added: trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/projects/projects.jsp
===================================================================
--- trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/projects/projects.jsp (rev 0)
+++ trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/projects/projects.jsp 2014-02-07 16:19:35 UTC (rev 400)
@@ -0,0 +1,37 @@
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="f" %>
+<%@ taglib uri="/WEB-INF/wikitty.tld" prefix="w"%>
+
+<head>
+ <script data-require="angular-resource(a)1.2.0-rc.3" data-semver="1.2.0-rc.3" src="<c:url value='http://code.angularjs.org/1.2.0-rc.3/angular-resource.js'/>"></script>
+ <script data-require="ng-table@*" data-semver="0.3.0" src="<c:url value='http://bazalt-cms.com/assets/ng-table/0.3.0/ng-table.js'/>"></script>
+ <link data-require="ng-table@*" data-semver="0.3.0" rel="stylesheet" href="<c:url value='http://bazalt-cms.com/assets/ng-table/0.3.0/ng-table.css'/>" />
+ <link data-require="bootstrap-css@*" data-semver="3.0.0" rel="stylesheet" href="<c:url value='http://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css'/>" />
+ <script type="text/javascript" src="<c:url value='/js/projectPagination.js'/>"></script>
+</head>
+
+<div ng-app="projectList" ng-controller="PageCtrl">
+
+ <div loading-container="tableParams.settings().$loading">
+ <table ng-table="tableParams" show-filter="true" class="table">
+ <tbody ng-repeat="project in projects">
+ <tr id="tr{{project.wikitty.target.id}}" ng-class-odd="'odd'" ng-class-even="'even'">
+ <td data-title="'Name'" sortable="name">
+ {{project.wikitty.target.fieldValue["Project.name"]}}
+ {{loading}}
+ </td>
+ <td data-title="'Description'" sortable="description">
+ {{project.wikitty.target.fieldValue['Project.description']}}
+ </td>
+ <td class="rowTd" ><input type=button id="editRowBtn{{project.wikitty.target.id}}" value="edit"
+ ng-click="setEditId(project.wikitty.target.id)"></td>
+ </tr>
+ <tr ng-show="editId===project.wikitty.target.id" ng-if="editId===project.wikitty.target.id">
+ <td colspan="7" ng-include src="'editProject.html'">pouet</td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+
+</div>
\ No newline at end of file
Added: trunk/chorem-webmotion/src/main/webapp/js/projectPagination.js
===================================================================
--- trunk/chorem-webmotion/src/main/webapp/js/projectPagination.js (rev 0)
+++ trunk/chorem-webmotion/src/main/webapp/js/projectPagination.js 2014-02-07 16:19:35 UTC (rev 400)
@@ -0,0 +1,55 @@
+angular.module('projectList', ['ngTable', 'ngResource'])
+.controller('PageCtrl',
+ function($scope, $timeout, $resource, ngTableParams) {
+
+ var Api = $resource('json/projects');
+
+ $scope.tableParams = new ngTableParams({
+ page: 1, // show first page
+ count: 10,
+ sorting: {
+ name: 'asc' // initial sorting
+ }
+ }, {
+ total: 0, // length of data
+ getData: function($defer, params) {
+
+ var orderedData = params.orderBy();
+
+ // ajax request to api
+ Api.get(params.url(), function(data) {
+ $timeout(function() {
+ // update table params
+ params.total(data.total);
+ // set new data
+ console.log(data);
+ $scope.projects = data.elements;
+ $defer.resolve(data);
+ }, 500);
+ });
+ }
+ });
+
+ $scope.editId = -1;
+
+ $scope.setEditId = function(pid) {
+ $scope.editId = pid;
+ }
+
+});
+
+angular.module('projectList')
+.directive('loadingContainer', function () {
+ return {
+ restrict: 'A',
+ scope: false,
+ link: function(scope, element, attrs) {
+ var loadingLayer = angular.element('<div class="loading"></div>');
+ element.append(loadingLayer);
+ element.addClass('loading-container');
+ scope.$watch(attrs.loadingContainer, function(value) {
+ loadingLayer.toggleClass('ng-hide', !value);
+ });
+ }
+ };
+});
\ No newline at end of file
1
0
r399 - in trunk: . chorem-webmotion chorem-webmotion/src/main/webapp/WEB-INF/jsp
by ymartel@users.chorem.org Feb. 6, 2014
by ymartel@users.chorem.org Feb. 6, 2014
Feb. 6, 2014
Author: ymartel
Date: 2014-02-06 17:17:01 +0100 (Thu, 06 Feb 2014)
New Revision: 399
Url: http://chorem.org/projects/chorem/repository/revisions/399
Log:
Update some dependencies.
Cannot update all, need update wikitty before...
Modified:
trunk/chorem-webmotion/pom.xml
trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/decorator.jsp
trunk/pom.xml
Modified: trunk/chorem-webmotion/pom.xml
===================================================================
--- trunk/chorem-webmotion/pom.xml 2014-02-05 08:06:07 UTC (rev 398)
+++ trunk/chorem-webmotion/pom.xml 2014-02-06 16:17:01 UTC (rev 399)
@@ -147,7 +147,7 @@
<dependency>
<groupId>org.nuiton.js</groupId>
- <artifactId>nuiton-js-angular</artifactId>
+ <artifactId>nuiton-js-angularjs</artifactId>
</dependency>
<dependency>
@@ -264,27 +264,6 @@
</goals>
</execution>
<execution>
- <id>scan-jsp-sources</id>
- <goals>
- <goal>parserJsp</goal>
- </goals>
- <configuration>
- <userRulesFiles>
- <file>${basedir}/src/main/i18n/jsp.rules</file>
- </userRulesFiles>
- <namespaces>
- <s>http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd</s>
- <sx>
- http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd
- </sx>
- <jsp>http://java.sun.com/JSP/Page</jsp>
- <decorator>
- http://www.opensymphony.com/sitemesh/decorator
- </decorator>
- </namespaces>
- </configuration>
- </execution>
- <execution>
<id>gen-and-make-bundle</id>
<goals>
<goal>gen</goal>
Modified: trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/decorator.jsp
===================================================================
--- trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/decorator.jsp 2014-02-05 08:06:07 UTC (rev 398)
+++ trunk/chorem-webmotion/src/main/webapp/WEB-INF/jsp/decorator.jsp 2014-02-06 16:17:01 UTC (rev 399)
@@ -49,7 +49,7 @@
</script>
<%-- import via nuiton-js to add js or css show WEB-INF/wro.xml --%>
- <script type="text/javascript" src="<c:url value='/nuiton-js/chorem-lib.js'/>"></script>
+ <script type="text/javascript" src="<c:url value='/nuiton-js/chorem-lib.js'/>?minimize=false"></script>
<script type="text/javascript" src="<c:url value='/js/chorem.js'/>"></script>
<script type="text/javascript" src="<c:url value='/js/ng-wikitty.js'/>"></script>
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2014-02-05 08:06:07 UTC (rev 398)
+++ trunk/pom.xml 2014-02-06 16:17:01 UTC (rev 399)
@@ -5,7 +5,7 @@
<parent>
<groupId>org.nuiton</groupId>
<artifactId>mavenpom4redmine</artifactId>
- <version>4.0</version>
+ <version>4.6</version>
</parent>
<groupId>org.chorem</groupId>
@@ -92,11 +92,11 @@
<nuitonI18nVersion>2.3.1</nuitonI18nVersion>
<nuitonCsvVersion>3.0-alpha-1</nuitonCsvVersion>
<wikittyVersion>3.10</wikittyVersion>
- <slf4jVersion>1.6.1</slf4jVersion>
+ <slf4jVersion>1.7.6</slf4jVersion>
<javaxMailVersion>1.4.3</javaxMailVersion>
<servletApiVersion>2.5</servletApiVersion>
<jspApiVersion>2.0</jspApiVersion>
- <h2Version>1.2.134</h2Version>
+ <h2Version>1.3.175</h2Version>
<webmotionVersion>2.4-SNAPSHOT</webmotionVersion>
<jstlVersion>1.2</jstlVersion>
@@ -236,12 +236,12 @@
<dependency>
<groupId>org.nuiton.js</groupId>
<artifactId>nuiton-js-wro</artifactId>
- <version>1.0</version>
+ <version>1.0.2</version>
</dependency>
<dependency>
<groupId>org.nuiton.js</groupId>
- <artifactId>nuiton-js-angular</artifactId>
- <version>1.1.5-1-SNAPSHOT</version>
+ <artifactId>nuiton-js-angularjs</artifactId>
+ <version>1.2.11-1</version>
</dependency>
<dependency>
<groupId>org.nuiton.js</groupId>
@@ -261,7 +261,7 @@
<dependency>
<groupId>org.nuiton.js</groupId>
<artifactId>nuiton-js-bootstrap</artifactId>
- <version>2.2.2-1</version>
+ <version>2.3.2-1</version>
</dependency>
<!-- <dependency>
<groupId>org.nuiton.js</groupId>
1
0
Feb. 5, 2014
Author: ymartel
Date: 2014-02-05 09:06:07 +0100 (Wed, 05 Feb 2014)
New Revision: 398
Url: http://chorem.org/projects/chorem/repository/revisions/398
Log:
Add Gwen Meyner documentation about GEPETO part (with some precision)
Add new property in Task (forgeRef)
Added:
trunk/chorem-entities/src/site/rst/gepeto.rst
Modified:
trunk/chorem-entities/src/main/xmi/chorem-model.properties
trunk/chorem-entities/src/main/xmi/chorem-model.zargo
Modified: trunk/chorem-entities/src/main/xmi/chorem-model.properties
===================================================================
--- trunk/chorem-entities/src/main/xmi/chorem-model.properties 2014-01-22 19:49:35 UTC (rev 397)
+++ trunk/chorem-entities/src/main/xmi/chorem-model.properties 2014-02-05 08:06:07 UTC (rev 398)
@@ -327,7 +327,7 @@
#
# Task
#
-org.chorem.entities.Task.class.tagvalue.version=11.0
+org.chorem.entities.Task.class.tagvalue.version=12.0
org.chorem.entities.Task.class.tagvalue.toString=%Task.name|noname$s - %Task.quotation$s
org.chorem.entities.Task.class.tagvalue.sortOrder=Task.name
org.chorem.entities.Task.class.tagvalue.preload=Task.quotation
Modified: trunk/chorem-entities/src/main/xmi/chorem-model.zargo
===================================================================
(Binary files differ)
Added: trunk/chorem-entities/src/site/rst/gepeto.rst
===================================================================
--- trunk/chorem-entities/src/site/rst/gepeto.rst (rev 0)
+++ trunk/chorem-entities/src/site/rst/gepeto.rst 2014-02-05 08:06:07 UTC (rev 398)
@@ -0,0 +1,178 @@
+========================
+Gestion de projet Chorem
+========================
+--------------------------------------------------
+Outil de gestion et de suivi de projet dans Chorem
+--------------------------------------------------
+
+.. contents::
+
+1. Bilan projet
+===============
+
+Le bilan de projet présente divers calculs financiers liés aux projets.
+
+Un certain nombre d'éléments sont à saisir manuellement, les champs en italique sont nécéssaires pour les calculs présent dans le bilan/tableau de bord :
+
+1.1. Quotation
+--------------
+
+:*Interval*: l'intervalle de temps sur lequel se déroule le devis
+:description: description du devis
+:*estimatedDays*: nombre de jours-homme estimés
+:*amount*: montant facturé au client
+:VAT: taxe à appliquer au montant
+:conversionHope: pourcentage de réussite du projet
+:supplier: personne chargée du dossier dans l'entreprise
+:customer: personne chargée du dossier coté client
+:project: projet lié au devis
+:category: catégorie du devis
+
+Pour chaque devis, un ensemble de tâche est associé. Les calculs effectués sur les tâches sont les mêmes que ceux des devis, seul le calcul de certains éléments diffèrent.
+Les champs à saisir manuellement des tâches sont :
+
+1.2. Task
+---------
+
+:*Interval*: l'intervalle de temps sur lequel se déroule la tâche
+:description: description de la tâche
+:*dayExtension*: jours supplémentaire nécéssaires pour finir la tâche
+:*price*: prix facturé pour la tâche
+:*estimatedDays*: nombre de jours-homme estimés
+:name: nom de la tâche
+:*status*: statut de la tâche, devant être actualisé à chaque modification de statut
+:*quotation*: devis lié à la tâche
+:forgeRef: identifiant extérieur, numero de la tache dans une forge par exemple
+
+Les tâches peuvent être reliées à des objets Time qui permettent d'avoir le temps passé par chaque Employee sur la tâches
+&
+
+1.3. Calculs
+------------
+
+Les calculs sont effectués grâce à la classe **Calculation** présente dans le package *org.chorem.project*. C'est une classe abstraite qui factorise les calculs des Task et des Quotation. Les classes **QuotationCalculation** et **TaskCalculation** définissent les méthodes spécifiques au type d'objet.
+
+1.3.1. TJM [1]_ estimé
+~~~~~~~~~~~~~~~~~~~~~~
+
+Le TJM (ou ADR) est ce qui facturé au client par jour::
+
+ adr = amount / estimatedDays
+
+1.3.2. TJM réel
+~~~~~~~~~~~~~~~
+
+Le TJM réel est calculé en fonction du nombre de `jours réels`_ ::
+
+ adr = amount / realDays
+
+.. _`jours réels`:
+
+1.3.3. Jours réels
+~~~~~~~~~~~~~~~~~~
+La méthode realDays() permet de calculer le nombre de jours réels qu'a pris le projet. Cette méthode est abstraite dans **Calculation**. La durée réelle d'un devis est la somme de la durée de ses tâches.
+Le calcul de la durée réelle est effectuée de deux manières différentes, si le devis est terminé ou non.
+
+a. Devis non terminé
+____________________
+
+Si le devis n'est pas terminé, le nombre de jours réels est égal au nombre de jours éstimé plus le nombre de jours supplémentaire::
+
+ realDays = estimatedDays + dayExtension
+
+b. Devis terminé
+________________
+
+Si le devis est terminé, le nombre de jours réels est égal à la somme des temps passés sur la tâche (objets Time)::
+
+ realDays = Σ time
+
+Le temps est divisé en jours, en prenant comme diviseur l'horaire journalier de l'employé concerné.::
+
+ time = hours / employee.dailyHoursWorked
+
+1.3.4. Différence estimation/réel
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Simple soustraction entre le nombre de jours estimés et `jours réels`_::
+
+ deltaDays = realDays - estimatedDays
+
+.. _`CJM estimé`:
+
+1.3.5. CJM [2]_ estimé
+~~~~~~~~~~~~~~~~~~~~~~
+
+Moyenne des CJM (ou ADC) des employés en fonction du pourcentage estimé (pour un devis, un calcul du pourcentage moyen par employé est effectué au préalable)::
+
+ estimatedAdc = Σ employee.adc*employee.estimatedPercentage
+
+.. _`CJM réel`:
+
+1.3.6. CJM réel
+~~~~~~~~~~~~~~~
+
+Moyenne des CJM (ou ADC) des employés en fonction du temps réel passé::
+
+ estimatedAdc = Σ employee.adc*employee.timeSpent
+
+1.3.7. Gain attendu
+~~~~~~~~~~~~~~~~~~~
+
+Le gain attendu est calculé à partir du montant, du nombre de jours estimés et du `CJM estimé`_ ::
+
+ expectedProfit = amount - (estimatedDays * estimatedAdc)
+
+1.3.7. Gain ou perte réelle
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Gain ou perte réalisée à la fin du projet, calculée à partir du nombre de `jours réels`_ et du `CJM réel`_ ::
+
+ lossOrProfit = amount - (realDays * realAdc)
+
+1.4. Alertes des tâches
+-----------------------
+
+En cas de dépassement des délais ou autre déroulement non prévu, des alertes sont affichées sur le tableau de bord. Voici la liste des évenements déclenchant, pour l'instant, des alertes :
+
+ * La tâche devrait avoir commencé (statut "SCHEDULED" alors que la date de début est passée)
+ * La tâche a été commencé en avance (statut "STARTED" alors que la date de début n'est pas passée)
+ * La tâche devrait être finie (statut "STARTED" alors que la date de fin est passée)
+ * La tâche a été finie en avance (statut "FINISHED" alors que la date de début n'est pas passée)
+
+2. Gestion des employés
+=======================
+
+2.1 Calcul du CJM
+-----------------
+
+La classe **AdcCalculation** dans le package *org.chorem.project* gère le calcul du CJM [2]_ (ou ADC).
+Le coût journalier moyen d'un employé est calculé à partir des données sur un an::
+
+ adc = ( (totalExpenses / totalSalaries) /totalTimes) * employee.dailyHoursWorked * employee.dailySalary
+
+2.1.1 Dépenses totales
+~~~~~~~~~~~~~~~~~~~~~~
+
+Les dépenses totales sont la somme des paiements (FinancialTransaction) effectués par l'entreprise sur l'année. Une simple requête Wikitty est effectué afin de récupérer ces objets FinancialTransaction afin d'effectuer la somme des montants HT::
+
+ totalExpenses = Σ expense
+
+2.1.1 Salaires totaux
+~~~~~~~~~~~~~~~~~~~~~
+
+Somme des salaires des employés productifs ayant travaillé durant l'année, pondéré par le taux de productivité.::
+
+ totalSalaries = Σ ( employee.salary * employee.productivityRate )
+
+2.1.1 Total des temps
+~~~~~~~~~~~~~~~~~~~~~
+
+Somme des temps travaillé durant l'année pour les employés de l'entreprise::
+
+ totalTimes = Σ employee.times
+
+.. [1] Taux Journalier Moyen (ADR : Average Daily Rate)
+.. [2] Coût Journalier Moyen (ADC : Average Daily Cost)
+
+
1
0