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/17 16:20:15 UTC

svn commit: r604892 - in /ofbiz/trunk/specialpurpose/projectmgr: config/ data/ script/org/ofbiz/project/ servicedef/ webapp/projectmgr/WEB-INF/ webapp/projectmgr/WEB-INF/actions/ webapp/projectmgr/project/ widget/

Author: hansbak
Date: Mon Dec 17 07:20:13 2007
New Revision: 604892

URL: http://svn.apache.org/viewvc?rev=604892&view=rev
Log:
a very first basic scheduler to get my feet wet....also added demo data for task estimates

Modified:
    ofbiz/trunk/specialpurpose/projectmgr/config/ProjectMgrUiLabels.properties
    ofbiz/trunk/specialpurpose/projectmgr/data/ProjectMgrDemoData.xml
    ofbiz/trunk/specialpurpose/projectmgr/script/org/ofbiz/project/ProjectServices.xml
    ofbiz/trunk/specialpurpose/projectmgr/servicedef/services.xml
    ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/GanttChart.bsh
    ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/controller.xml
    ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/gantChart.ftl
    ofbiz/trunk/specialpurpose/projectmgr/widget/CommonScreens.xml
    ofbiz/trunk/specialpurpose/projectmgr/widget/Menus.xml

Modified: ofbiz/trunk/specialpurpose/projectmgr/config/ProjectMgrUiLabels.properties
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/projectmgr/config/ProjectMgrUiLabels.properties?rev=604892&r1=604891&r2=604892&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/projectmgr/config/ProjectMgrUiLabels.properties (original)
+++ ofbiz/trunk/specialpurpose/projectmgr/config/ProjectMgrUiLabels.properties Mon Dec 17 07:20:13 2007
@@ -60,6 +60,7 @@
 PageTitleTaskInformation=Task information
 PageTitleUnassignedTask=Unassigned Task
 ProjectMgrActualHours=Actual Hours
+ProjectMgrSchedule=Schedule
 ProjectMgrCompanyName=Ofbiz Company
 ProjectMgrCompanySubtitle=Project
 ProjectMgrDependencies=Dependencies

Modified: ofbiz/trunk/specialpurpose/projectmgr/data/ProjectMgrDemoData.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/projectmgr/data/ProjectMgrDemoData.xml?rev=604892&r1=604891&r2=604892&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/projectmgr/data/ProjectMgrDemoData.xml (original)
+++ ofbiz/trunk/specialpurpose/projectmgr/data/ProjectMgrDemoData.xml Mon Dec 17 07:20:13 2007
@@ -23,16 +23,22 @@
     <!-- make sure they show up as resources -->
     <PartyRole partyId="DemoCustomer" roleTypeId="PROJECT_TEAM"/>
     <PartyRole partyId="admin" roleTypeId="PROJECT_TEAM"/>
-    
-    <!-- Demo project, phases and tasks -->
+
+    <!-- some skills required. -->
+    <SkillType skillTypeId="9000" description="Computer language Java"/>
+    <!-- Demo project, phases and tasks with estimated time-->
     <WorkEffort workEffortId="9000" workEffortTypeId="PROJECT" currentStatusId="CAL_ACCEPTED" lastStatusUpdate="2007-12-14 15:07:52.901" scopeEnumId="WES_PUBLIC" workEffortName="Demo Project" revisionNumber="1"/> 
     <WorkEffort workEffortId="9001" workEffortTypeId="PHASE" currentStatusId="CAL_ACCEPTED" lastStatusUpdate="2007-12-14 16:45:14.226" workEffortParentId="9000" workEffortName="phase1" revisionNumber="1" />
     <WorkEffort workEffortId="9002" workEffortTypeId="TASK" currentStatusId="CAL_ACCEPTED" lastStatusUpdate="2007-12-14 16:45:21.831" workEffortParentId="9001" scopeEnumId="WES_PUBLIC" workEffortName="task1" estimatedStartDate="2007-12-03 00:00:00.0" estimatedCompletionDate="2007-12-05 00:00:00.0" revisionNumber="1" />
+    <WorkEffortSkillStandard workEffortId="9002" skillTypeId="9000" estimatedDuration="16.0"/>
     <WorkEffort workEffortId="9003" workEffortTypeId="TASK" currentStatusId="CAL_ACCEPTED" lastStatusUpdate="2007-12-14 16:45:29.453" workEffortParentId="9001" scopeEnumId="WES_PUBLIC" workEffortName="task2" estimatedStartDate="2007-12-05 00:00:00.0" estimatedCompletionDate="2007-12-16 00:00:00.0" revisionNumber="1" />
+    <WorkEffortSkillStandard workEffortId="9003" skillTypeId="9000" estimatedDuration="24.0"/>
     <WorkEffort workEffortId="9004" workEffortTypeId="PHASE" currentStatusId="CAL_ACCEPTED" lastStatusUpdate="2007-12-14 16:45:35.939" workEffortParentId="9000" workEffortName="phase2" revisionNumber="1"/>
     <WorkEffort workEffortId="9005" workEffortTypeId="TASK" currentStatusId="CAL_ACCEPTED" lastStatusUpdate="2007-12-14 16:45:50.84" workEffortParentId="9004" scopeEnumId="WES_PUBLIC" workEffortName="task3" estimatedStartDate="2007-12-16 00:00:00.0" estimatedCompletionDate="2007-12-17 00:00:00.0" revisionNumber="1"/>
+    <WorkEffortSkillStandard workEffortId="9005" skillTypeId="9000" estimatedDuration="32.0"/>
     <WorkEffort workEffortId="9006" workEffortTypeId="TASK" currentStatusId="CAL_ACCEPTED" lastStatusUpdate="2007-12-14 16:45:58.857" workEffortParentId="9004" scopeEnumId="WES_PUBLIC" workEffortName="task4" estimatedStartDate="2007-12-18 00:00:00.0" estimatedCompletionDate="2007-12-20 00:00:00.0" revisionNumber="1"/>
-
+    <WorkEffortSkillStandard workEffortId="9002" skillTypeId="9000" estimatedDuration="40.0"/>
+    
     <!-- task dependencies -->
     <WorkEffortAssoc workEffortIdFrom="9002" workEffortIdTo="9003" workEffortAssocTypeId="WORK_EFF_DEPENDENCY" sequenceNum="0" fromDate="2000-01-01 00:00:00.0"/>
     <WorkEffortAssoc workEffortIdFrom="9003" workEffortIdTo="9005" workEffortAssocTypeId="WORK_EFF_DEPENDENCY" sequenceNum="0" fromDate="2000-01-01 00:00:00.0"/>

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=604892&r1=604891&r2=604892&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/projectmgr/script/org/ofbiz/project/ProjectServices.xml (original)
+++ ofbiz/trunk/specialpurpose/projectmgr/script/org/ofbiz/project/ProjectServices.xml Mon Dec 17 07:20:13 2007
@@ -21,7 +21,7 @@
 <simple-methods xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/simple-methods.xsd">
 
-    <simple-method method-name="projectScheduler" short-description="Project Schulers sets the planningdates according task requirements and available resources">
+    <simple-method method-name="scheduleProject" short-description="Project Schulers sets the planningdates according task requirements and available resources">
         <!-- 
                 theory behind the program
                 - - - - - - - - - - - - - 
@@ -53,6 +53,74 @@
                 The system will then sort the list by sequence and will insert the planned dates
                 according the startdate and sat and sundays.
         -->
+        
+        <!-- constants -->
+        <set field="nameOrder" value="10" type="Integer"/>
+        
+        <!-- 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"/>
+            </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 ">

Modified: ofbiz/trunk/specialpurpose/projectmgr/servicedef/services.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/projectmgr/servicedef/services.xml?rev=604892&r1=604891&r2=604892&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/projectmgr/servicedef/services.xml (original)
+++ ofbiz/trunk/specialpurpose/projectmgr/servicedef/services.xml Mon Dec 17 07:20:13 2007
@@ -43,6 +43,12 @@
         <attribute name="projectInfo" type="java.util.Map" mode="OUT" optional="true"/>
     </service>
     
+    <service name="scheduleProject" engine="simple"
+        location="org/ofbiz/project/ProjectServices.xml" invoke="scheduleProject">
+        <description>(re) calculate the estimated start and enddates of tasks within a project</description>
+        <attribute name="projectId" type="String" mode="INOUT" optional="true"/>
+    </service>
+    
     <service name="getProjectIdAndName" engine="simple"
         location="org/ofbiz/project/ProjectServices.xml" invoke="getProjectIdAndName">
         <description>Get the projectId and Name when a phase or task is provided.</description>

Modified: ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/GanttChart.bsh
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/GanttChart.bsh?rev=604892&r1=604891&r2=604892&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/GanttChart.bsh (original)
+++ ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/GanttChart.bsh Mon Dec 17 07:20:13 2007
@@ -33,19 +33,22 @@
 projectId = parameters.get("projectId");
 userLogin = session.getAttribute("userLogin");
 
+
 ganttList = new LinkedList(); // resulting list
 
 //project info
 result = dispatcher.runSync("getProject", UtilMisc.toMap("projectId", projectId, "userLogin", userLogin));
 project = result.get("projectInfo");
-if (project.get("startDate") != null) 
+if (project != null && project.get("startDate") != null) 
     context.put("chartStart",project.get("startDate"));
 else
     context.put("chartStart", UtilDateTime.nowTimestamp()); // default todays date
-if (project.get("completionDate") != null )         
+if (project != null && project.get("completionDate") != null )         
     context.put("chartEnd",project.get("completionDate"));
 else
     context.put("chartEnd", UtilDateTime.addDaysToTimestamp(UtilDateTime.nowTimestamp(), 14)); // default 14 days long
+
+if (project == null) return;
 
 // phase list
 result = dispatcher.runSync("getProjectPhaseList", UtilMisc.toMap("userLogin", userLogin, "projectId", projectId));

Modified: ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/controller.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/controller.xml?rev=604892&r1=604891&r2=604892&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/controller.xml (original)
+++ ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/controller.xml Mon Dec 17 07:20:13 2007
@@ -67,11 +67,17 @@
         <response name="success" type="view" value="EditProject"/>
         <response name="error" type="view" value="EditProject"/>
     </request-map>
-    <request-map uri="deleteProject">
-        <security https="true" auth="true"/>
-        <event type="service" invoke="deleteWorkEffort"/>
-        <response name="success" type="view" value="FindProject"/>
-        <response name="error" type="view" value="FindProject"/>
+    <request-map uri="deleteProject">
+        <security https="true" auth="true"/>
+        <event type="service" invoke="deleteWorkEffort"/>
+        <response name="success" type="view" value="FindProject"/>
+        <response name="error" type="view" value="FindProject"/>
+    </request-map>
+    <request-map uri="scheduleProject">
+        <security https="true" auth="true"/>
+        <event type="service" invoke="scheduleProject"/>
+        <response name="success" type="view" value="ganttChart"/>
+        <response name="error" type="view" value="ganttChart"/>
     </request-map>
     <request-map uri="FindResource">
         <security https="true" auth="true"/>

Modified: ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/gantChart.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/gantChart.ftl?rev=604892&r1=604891&r2=604892&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/gantChart.ftl (original)
+++ ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/gantChart.ftl Mon Dec 17 07:20:13 2007
@@ -147,7 +147,7 @@
             
             // Create the Chart and add the PlotArea
             var chart = new dojo.charting.Chart(null, "Test chart", "This is a potential description");
-            chart.addPlotArea({ x:5,y:60, plotArea:pa2 }); // position of the chart on screen
+            chart.addPlotArea({ x:5,y:100, plotArea:pa2 }); // position of the chart on screen
             
 
             dojo.addOnLoad(function(){

Modified: ofbiz/trunk/specialpurpose/projectmgr/widget/CommonScreens.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/projectmgr/widget/CommonScreens.xml?rev=604892&r1=604891&r2=604892&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/projectmgr/widget/CommonScreens.xml (original)
+++ ofbiz/trunk/specialpurpose/projectmgr/widget/CommonScreens.xml Mon Dec 17 07:20:13 2007
@@ -102,6 +102,7 @@
                                     </condition>
                                     <widgets>                                        
                                         <include-menu name="ProjectTabBar" location="component://projectmgr/widget/Menus.xml"/>
+                                        <include-menu name="ProjectSubTabBar" location="component://projectmgr/widget/Menus.xml"/>
                                         <label style="head1" text="${uiLabelMap.ProjectMgrProjectCurrent}: ${project.workEffortName}[${project.workEffortId}]"/>
                                     </widgets>
                                  </section>   

Modified: ofbiz/trunk/specialpurpose/projectmgr/widget/Menus.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/projectmgr/widget/Menus.xml?rev=604892&r1=604891&r2=604892&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/projectmgr/widget/Menus.xml (original)
+++ ofbiz/trunk/specialpurpose/projectmgr/widget/Menus.xml Mon Dec 17 07:20:13 2007
@@ -32,7 +32,7 @@
         <menu-item name="request" title="${uiLabelMap.WorkEffortRequestList}"><link target="requestlist"/></menu-item>
         
         <menu-item name="help" title="Help" align-style="col-right">
-            <link target="http://docs.ofbiz.org/display/OFBENDUSER/Project+Manager+Role?decorator=printable" url-mode="plain" target-window="new"/>
+            <link target="http://docs.ofbiz.org/display/OFBENDUSER/Project+Manager+Application+Roles?decorator=printable" url-mode="plain" target-window="new"/>
         </menu-item>
         <menu-item name="Logout" title="Logout" align-style="col-right" widget-style="headerButtonRight" selected-style="headerButtonRightSelected">
             <condition><not><if-empty field-name="userLogin"/></not></condition>
@@ -46,17 +46,38 @@
     <menu name="ProjectTabBar" type="simple" menu-container-style="button-bar tab-bar" default-selected-style="selected">
         <actions>
             <set field="projectId" from-field="parameters.projectId" default-value="${parameters.workEffortId}"/>
-        </actions>
+        </actions>
         <menu-item name="ganttchart" title="${uiLabelMap.ProjectMgrGanttChart}"><link target="ganttChart?projectId=${projectId}"/></menu-item>
         <menu-item name="projectView" title="${uiLabelMap.ProjectMgrProjectSummary}"><link target="projectView?projectId=${projectId}"/></menu-item>
-        <menu-item name="editproject" title="${uiLabelMap.ProjectMgrEditPoject}"><link target="EditProject?projectId=${projectId}"/></menu-item>
-        <menu-item name="phases" title="${uiLabelMap.ProjectMgrPhases}"><link target="FindPhase?projectId=${projectId}"/></menu-item>
+        <menu-item name="editproject" title="${uiLabelMap.ProjectMgrEditPoject}"><link target="EditProject?projectId=${projectId}"/></menu-item>
+        <menu-item name="phases" title="${uiLabelMap.ProjectMgrPhases}"><link target="FindPhase?projectId=${projectId}"/></menu-item>
         <menu-item name="tasks" title="${uiLabelMap.ProjectMgrTasks}"><link target="EditProjectTasks?projectId=${projectId}"/></menu-item>        
         <menu-item name="parties" title="${uiLabelMap.ProjectMgrResources}"><link target="ListWorkEffortPartyAssigns?projectId=${projectId}"/></menu-item>
         <menu-item name="notes" title="${uiLabelMap.CommonNotes}"><link target="EditWorkEffortNotes?projectId=${projectId}"/></menu-item>
-        <menu-item name="subprojects" title="${uiLabelMap.ProjectMgrSubProjects}"><link target="ListSubProjects?projectId=${projectId}"/></menu-item>
-        <!--menu-item name="treeDetails" title="${uiLabelMap.ProjectMgrTreeDetails}"><link target="ChildWorkEfforts?projectId=${projectId}&amp;trail=${workEffortId}&amp;workEffortTypeId=PROJECT&amp;workEffortAssocTypeId=WORK_EFF_BREAKDOWN"/></menu-item-->
-    </menu>
+        <menu-item name="subprojects" title="${uiLabelMap.ProjectMgrSubProjects}"><link target="ListSubProjects?projectId=${projectId}"/></menu-item>
+        <!--menu-item name="treeDetails" title="${uiLabelMap.ProjectMgrTreeDetails}"><link target="ChildWorkEfforts?projectId=${projectId}&amp;trail=${workEffortId}&amp;workEffortTypeId=PROJECT&amp;workEffortAssocTypeId=WORK_EFF_BREAKDOWN"/></menu-item-->
+    </menu>
+    <menu name="ProjectSubTabBar" type="simple" menu-container-style="button-bar button-style-2" default-selected-style="selected">
+        <actions>
+            <set field="projectId" from-field="parameters.projectId" default-value="${parameters.workEffortId}"/>
+        </actions>
+        <menu-item name="newProject" title="${uiLabelMap.ProjectMgrNewProject}">
+            <condition>
+                <not>
+                    <if-empty field-name="project"/>
+                </not>
+            </condition>
+            <link target="EditProject"></link>
+        </menu-item>
+        <menu-item name="schedule" title="${uiLabelMap.ProjectMgrSchedule}">
+            <condition>
+                <not>
+                    <if-empty field-name="project"/>
+                </not>
+            </condition>
+            <link target="scheduleProject?projectId=${projectId}"></link>
+        </menu-item>
+    </menu>
     <menu name="TaskTabBar" type="simple" menu-container-style="button-bar tab-bar" default-selected-style="selected">
         <menu-item name="taskView" title="${uiLabelMap.ProjectMgrTaskSummary}"><link target="taskView?workEffortId=${workEffortId}"/></menu-item>
         <menu-item name="edittask" title="${uiLabelMap.ProjectMgrEditTask}"><link target="EditTask?workEffortId=${workEffortId}"/></menu-item>