You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ha...@apache.org on 2007/12/25 11:40:42 UTC
svn commit: r606781 - in /ofbiz/trunk/specialpurpose: ./ projectmgr/
projectmgr/script/org/ofbiz/project/ projectmgr/src/ projectmgr/src/org/
projectmgr/src/org/ofbiz/ projectmgr/src/org/ofbiz/project/
Author: hansbak
Date: Tue Dec 25 02:40:38 2007
New Revision: 606781
URL: http://svn.apache.org/viewvc?rev=606781&view=rev
Log:
updated version of the sheduler, still not perfect but it gets better
Added:
ofbiz/trunk/specialpurpose/projectmgr/src/
ofbiz/trunk/specialpurpose/projectmgr/src/org/
ofbiz/trunk/specialpurpose/projectmgr/src/org/ofbiz/
ofbiz/trunk/specialpurpose/projectmgr/src/org/ofbiz/project/
ofbiz/trunk/specialpurpose/projectmgr/src/org/ofbiz/project/Various.java
Modified:
ofbiz/trunk/specialpurpose/build.xml
ofbiz/trunk/specialpurpose/projectmgr/build.xml
ofbiz/trunk/specialpurpose/projectmgr/ofbiz-component.xml
ofbiz/trunk/specialpurpose/projectmgr/script/org/ofbiz/project/ProjectServices.xml
Modified: ofbiz/trunk/specialpurpose/build.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/build.xml?rev=606781&r1=606780&r2=606781&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/build.xml (original)
+++ ofbiz/trunk/specialpurpose/build.xml Tue Dec 25 02:40:38 2007
@@ -20,7 +20,7 @@
<project name="OFBiz Special Purpose Applications Build" default="build" basedir=".">
<filelist id="application-builds" dir="."
- files="pos/build.xml, hhfacility/build.xml, assetmaint/build.xml, oagis/build.xml, bi/build.xml, googlebase/build.xml, ebay/build.xml"/>
+ files="pos/build.xml, hhfacility/build.xml, assetmaint/build.xml, oagis/build.xml, bi/build.xml, googlebase/build.xml, ebay/build.xml, projectmgr/build.xml"/>
<!-- ================================================================== -->
<!-- Removes all created files and directories -->
@@ -50,7 +50,7 @@
<filelist refid="application-builds"/>
</subant>
<delete file="ofbiz.jar"/>
- <echo message="[clean] ========== Done Cleaning Applications =========="/>
+ <echo message="[clean] ========== Done Cleaning Special purpose =========="/>
</target>
<!-- ================================================================== -->
@@ -58,13 +58,13 @@
<!-- ================================================================== -->
<target name="build" depends="">
- <echo message="[build] ========== Start Building Applications (Compile) =========="/>
+ <echo message="[build] ========== Start Building Special Purpose (Compile) =========="/>
<subant inheritall="false">
<filelist refid="application-builds"/>
</subant>
- <echo message="[build] ========== Done Building Applications (Compile) =========="/>
+ <echo message="[build] ========== Done Building Special Purpose (Compile) =========="/>
</target>
<!-- ================================================================== -->
@@ -72,12 +72,12 @@
<!-- ================================================================== -->
<target name="docs" depends="">
- <echo message="[docs] ========== Start Building Applications (JavaDoc) =========="/>
+ <echo message="[docs] ========== Start Building Special Purpose (JavaDoc) =========="/>
<subant target="docs">
<filelist refid="application-builds"/>
</subant>
- <echo message="[docs] ========== Done Building Applications (JavaDocs) =========="/>
+ <echo message="[docs] ========== Done Building Special Purpose (JavaDocs) =========="/>
</target>
</project>
Modified: ofbiz/trunk/specialpurpose/projectmgr/build.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/projectmgr/build.xml?rev=606781&r1=606780&r2=606781&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/projectmgr/build.xml (original)
+++ ofbiz/trunk/specialpurpose/projectmgr/build.xml Tue Dec 25 02:40:38 2007
@@ -109,7 +109,7 @@
<!-- ================================================================== -->
<target name="docs" depends="prepare-docs,classpath">
- <javadoc packagenames="org.ofbiz.projectmgr.*"
+ <javadoc packagenames="org.ofbiz.project.*"
classpathref="local.class.path"
destdir="${build.dir}/javadocs"
Windowtitle="Open for Business - ${desc}">
Modified: ofbiz/trunk/specialpurpose/projectmgr/ofbiz-component.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/projectmgr/ofbiz-component.xml?rev=606781&r1=606780&r2=606781&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/projectmgr/ofbiz-component.xml (original)
+++ ofbiz/trunk/specialpurpose/projectmgr/ofbiz-component.xml Tue Dec 25 02:40:38 2007
@@ -24,6 +24,7 @@
<resource-loader name="main" type="component"/>
<classpath type="dir" location="script"/>
<classpath type="dir" location="config"/>
+ <classpath type="jar" location="build/lib/*"/>
<entity-resource type="model" reader-name="main" loader="main" location="entitydef/entitymodel.xml"/>
<entity-resource type="group" reader-name="main" loader="main" location="entitydef/entitygroup.xml"/>
Modified: ofbiz/trunk/specialpurpose/projectmgr/script/org/ofbiz/project/ProjectServices.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/projectmgr/script/org/ofbiz/project/ProjectServices.xml?rev=606781&r1=606780&r2=606781&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/projectmgr/script/org/ofbiz/project/ProjectServices.xml (original)
+++ ofbiz/trunk/specialpurpose/projectmgr/script/org/ofbiz/project/ProjectServices.xml Tue Dec 25 02:40:38 2007
@@ -102,10 +102,10 @@
1. a workday has 8 hours.
2. a workweek has 40 hours and 5 days.
3. The order of the execution of the tasks is set by the workeffortassociation.
+ 4. The default start of the project is today
The steps of the program are:
- 1. read all tasks into a list with the following fields:
- name, id, length in hours, sequence
+ 1. read all tasks and check if there are predesessors, when not set he estimated dates
for critical path processing:
* ES - Earliest Start time
* EF - Earliest Finish time
@@ -114,82 +114,39 @@
EF = LF task is on the critical path
- 2. define the length of every task: skillstandard duration/persons or when zero
- default od a task is 3 days.
-
- 3. define the order of execution according tha workeffortAssociation
- 4. set the planned start and end date when no actual dates set yet.
- 5. store the start/end dates.
-
+ 2. call a recursive java function to set all the dependant tasks.
-->
- <!-- constants -->
- <set field="nameOrder" value="10" type="Integer"/>
+ <field-to-result map-name="parameters" field-name="projectId"/>
<!-- create the tasklist -->
- <field-to-result map-name="parameters" field-name="projectId"/>
<entity-one entity-name="WorkEffort" value-name="project">
<field-map field-name="workEffortId" env-name="parameters.projectId"/>
</entity-one>
- <set field="seq" value="0" type="Double"/>
- <string-to-list string="workEffortName" list-name="order"/>
<get-related value-name="project" relation-name="ChildWorkEffort" list-name="phases" order-by-list-name="order"/>
<iterate entry-name="phase" list-name="phases">
<get-related value-name="phase" relation-name="ChildWorkEffort" list-name="tasks" order-by-list-name="order"/>
<iterate entry-name="task" list-name="tasks">
- <clear-field field-name="t"/>
- <set field="t.workEffortId" from-field="task.workEffortId"/>
- <set field="t.seq" from-field="seq"/>
- <calculate field-name="seq">
- <calcop operator="get" field-name="seq"/>
- <calcop operator="add" field-name="nameOrder"/>
- </calculate>
- <!-- get estimated hours -->
- <get-related value-name="task" relation-name="WorkEffortSkillStandard" list-name="estimates"/>
- <set field="total" value="0" type="Double"/>
- <iterate entry-name="estimate" list-name="estimates">
- <calculate field-name="total">
- <calcop operator="get" field-name="total"/>
- <calcop operator="add" field-name="estimate.estimatedDuration"></calcop>
- </calculate>
- </iterate>
- <if-compare field-name="total" operator="not-equals" value="0">
- <calculate field-name="t.estimatedDays">
- <calcop operator="divide" field-name="total">
- <number value="8"/>
- </calcop>
- </calculate>
- <else>
- <set field="t.estimatedDays" value="1" type="Double"/>
- </else>
- </if-compare>
- <field-to-list field-name="t" list-name="taskList"/>
+ <get-related value-name="task" relation-name="ToWorkEffortAssoc" list-name="t.prevTasks"/>
+ <if-empty field-name="t.prevTasks">
+ <!-- no predecessors so i can set the dates -->
+ <now-timestamp-to-env env-name="upd.estimatedStartDate"/>
+ <now-timestamp-to-env env-name="currentDate"/>
+ <call-class-method class-name="org.ofbiz.project.Various" method-name="calculateCompletionDate" ret-field-name="upd.estimatedCompletionDate">
+ <field field-name="task" type="org.ofbiz.entity.GenericValue"/>
+ <field field-name="currentDate" type="java.sql.Timestamp"/>
+ </call-class-method>
+ <set field="upd.workEffortId" from-field="task.workEffortId"/>
+ <call-service service-name="updateWorkEffort" in-map-name="upd"/>
+ <entity-one entity-name="WorkEffort" value-name="newTask">
+ <field-map field-name="workEffortId" env-name="task.workEffortId"/>
+ </entity-one>
+ <call-class-method class-name="org.ofbiz.project.Various" method-name="setDatesFollowingTasks">
+ <field field-name="newTask" type="org.ofbiz.entity.GenericValue"/>
+ </call-class-method>
+ </if-empty>
</iterate>
</iterate>
-
- <!-- rearrange according dependencies which override the default sequence-->
- <!-- to be added -->
-
-
- <!-- order the list-->
- <order-map-list list-name="taskList">
- <order-by field-name="seq"/>
- </order-map-list>
-
- <now-timestamp-to-env env-name="currentDate"/>
- <!-- iterate through the sorted list and set estimated start and end dates -->
- <iterate entry-name="listItem" list-name="taskList">
- <set field="listItem.estimatedStartDate" from-field="currentDate"/>
- <calculate field-name="dayNbr"></calculate>
- <call-class-method class-name="org.ofbiz.base.util.UtilDateTime" method-name="addDaysToTimestamp" ret-field-name="currentDate">
- <field field-name="currentDate" type="java.sql.Timestamp"/>
- <field field-name="listItem.estimatedDays" type="Double"/>
- </call-class-method>
- <set field="listItem.estimatedCompletionDate" from-field="currentDate"/>
- <clear-field field-name="upd"/>
- <set-service-fields service-name="updateWorkEffort" map-name="listItem" to-map-name="upd"/>
- <call-service service-name="updateWorkEffort" in-map-name="upd"/>
- </iterate>
</simple-method>
<simple-method method-name="updateTimeEntryByWorkeffort" short-description="Update workeffort by workeffort and timesheetId ">
Added: ofbiz/trunk/specialpurpose/projectmgr/src/org/ofbiz/project/Various.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/projectmgr/src/org/ofbiz/project/Various.java?rev=606781&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/projectmgr/src/org/ofbiz/project/Various.java (added)
+++ ofbiz/trunk/specialpurpose/projectmgr/src/org/ofbiz/project/Various.java Tue Dec 25 02:40:38 2007
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *******************************************************************************/
+package org.ofbiz.project;
+
+import java.math.BigDecimal;
+import java.sql.Timestamp;
+import java.util.*;
+
+import javolution.util.FastList;
+import javolution.util.FastMap;
+
+import org.ofbiz.base.util.*;
+import org.ofbiz.entity.GenericDelegator;
+import org.ofbiz.entity.GenericEntity;
+import org.ofbiz.entity.GenericEntityException;
+import org.ofbiz.entity.GenericValue;
+
+public class Various {
+
+ public static final String module = Various.class.getName();
+
+
+ public static void setDatesFollowingTasks(GenericValue task) {
+
+ try {
+ List assocs = task.getRelated("FromWorkEffortAssoc");
+ if (UtilValidate.isNotEmpty(assocs)) {
+ Iterator a = assocs.iterator();
+ while (a.hasNext()) {
+ GenericValue assoc = (GenericValue) a.next();
+ GenericValue nextTask = assoc.getRelatedOne("ToWorkEffort");
+ nextTask.put("estimatedStartDate", task.getTimestamp("estimatedCompletionDate"));
+ nextTask.put("estimatedCompletionDate", calculateCompletionDate(nextTask, task.getTimestamp("estimatedCompletionDate")));
+ nextTask.store();
+ setDatesFollowingTasks(nextTask);
+ }
+ }
+
+ } catch (GenericEntityException e) {
+ Debug.logError("Could not updte task: " + e.getMessage(), module);
+ }
+ }
+
+ public static Timestamp calculateCompletionDate(GenericValue task, Timestamp startDate) {
+
+ Double plannedHours = 0.00;
+ try {
+ // get planned hours
+ List standards = task.getRelated("WorkEffortSkillStandard");
+ Iterator t = standards.iterator();
+ while (t.hasNext()) {
+ GenericValue standard = (GenericValue) t.next();
+ if (standard.getDouble("estimatedNumPeople") == null) {
+ standard.put("estimatedNumPeople", new Double("1"));
+ }
+ plannedHours += standard.getDouble("estimatedDuration") / standard.getDouble("estimatedNumPeople");
+ }
+
+ } catch (GenericEntityException e) {
+ Debug.logError("Could not updte task: " + e.getMessage(), module);
+ }
+ return UtilDateTime.addDaysToTimestamp(startDate, plannedHours / 8);
+ }
+
+
+}