You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ap...@apache.org on 2007/09/09 21:02:13 UTC

svn commit: r574051 [1/4] - in /ofbiz/trunk/specialpurpose/projectmgr: ./ config/ webapp/projectmgr/WEB-INF/ webapp/projectmgr/WEB-INF/actions/ webapp/projectmgr/project/ webapp/projectmgr/project/summary/ widget/ widget/forms/

Author: apatel
Date: Sun Sep  9 12:02:11 2007
New Revision: 574051

URL: http://svn.apache.org/viewvc?rev=574051&view=rev
Log:
Adding forms and screens for Project management. Most of the forms are intentionally done using freemarker so we have more control over UI. Planning to use Ajax/Effects where makes sense.

Added:
    ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/
    ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/AssociatedParties.bsh
    ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/ChildWorkEffort.bsh
    ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/ListFilteredTasks.bsh
    ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/ListProjectsByDateRange.bsh
    ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/ListTimeSheetByDateRange.bsh
    ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/
    ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/EditTimeEntry.ftl
    ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/editProjectskills.ftl
    ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/editTimeSheet.ftl
    ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/editphaseandassoc.ftl
    ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/editproject.ftl
    ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/editprojectandassoc.ftl
    ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/edittask.ftl
    ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/edittaskandassoc.ftl
    ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/edittasklist.ftl
    ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/edittasklistandassoc.ftl
    ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/edittaskskills.ftl
    ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/findtasks.ftl
    ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/listTimeSheetByDateRange.ftl
    ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/listprojectsbydaterange.ftl
    ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/listtasksbydaterange.ftl
    ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/summary/
    ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/summary/projectinfo.ftl
    ofbiz/trunk/specialpurpose/projectmgr/widget/ProjectScreens.xml
    ofbiz/trunk/specialpurpose/projectmgr/widget/TaskScreens.xml
    ofbiz/trunk/specialpurpose/projectmgr/widget/TimeSheetScreens.xml
    ofbiz/trunk/specialpurpose/projectmgr/widget/WorkEffortTrees.xml
    ofbiz/trunk/specialpurpose/projectmgr/widget/forms/
    ofbiz/trunk/specialpurpose/projectmgr/widget/forms/ProjectForms.xml
    ofbiz/trunk/specialpurpose/projectmgr/widget/forms/TaskForms.xml
    ofbiz/trunk/specialpurpose/projectmgr/widget/forms/TimeSheetForms.xml
Modified:
    ofbiz/trunk/specialpurpose/projectmgr/config/ProjectMgrUiLabels.properties
    ofbiz/trunk/specialpurpose/projectmgr/ofbiz-component.xml
    ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/controller.xml
    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=574051&r1=574050&r2=574051&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/projectmgr/config/ProjectMgrUiLabels.properties (original)
+++ ofbiz/trunk/specialpurpose/projectmgr/config/ProjectMgrUiLabels.properties Sun Sep  9 12:02:11 2007
@@ -23,6 +23,71 @@
 
 # Override Page and Label title
 
+PageTitleAddProject=Add Project
+PageTitleAddPhase=Add Phase
+PageTitleAddSkill=Add Skill
+PageTitleAddSubProject=Add Sub Project
+PageTitleAddSubTask=Add Sub Task
+PageTitleAddTask=Add Task
+PageTitleEditProject=Edit Project
+PageTitleEditPhase=Edit Phase
+PageTitleEditSkill=Edit Skill
+PageTitleEditSubProject=Edit Sub Project
+PageTitleEditSubTask=Edit Sub Task
+PageTitleEditTask=Edit Task
+PageTitleFindProject=Find Project
+PageTitleFindPhase=Find Phase
+PageTitleFindSubProject=Find Sub Project
+PageTitleFindSubTask=Find Sub Task
+PageTitleFindTask=Find Task
+PageTitleUnassignedTask=Unassigned Task
+PageTitleAddPartyAssign=Add Party Assign
+PageTitleListPartyAssigns=Party Assigns
 ProjectMgrCompanyName=Ofbiz Company
 ProjectMgrCompanySubtitle=Project
+ProjectMgrEditPatySkill=Edit PatySkill
+ProjectMgrEditPoject=Edit Poject
+ProjectMgrEditTask=Edit Task
+ProjectMgrEstimatedCost=Estimated Cost
+ProjectMgrEstimatedDuration=Estimated Duration
+ProjectMgrEstimatedNumPeople=Estimated People
+ProjectMgrFilterOn=Filter on
+ProjectMgrNewProject=New Project
+ProjectMgrNewSubProject=New Sub Project
+ProjectMgrNewSubTask=New Sub Task
+ProjectMgrNewTask=New Task
+ProjectMgrPartyList=List of Parties
+ProjectMgrProjectName=Project Name
+ProjectMgrProjectSummary=Project Summary
+ProjectMgrPhases=Phases
+ProjectMgrPhaseList=List of Phase
+ProjectMgrSkillStandards=Skill Standards
+ProjectMgrSkillType=Skill Type
+ProjectMgrSubProjectName=Sub Project Name
+ProjectMgrSubProjects=Sub Projects
+ProjectMgrSubTaskName=Sub Task Name
+ProjectMgrSubProjectList=List of SubProject
+ProjectMgrSubTasks=Sub Tasks
+ProjectMgrTaskName=Task Name
+ProjectMgrTasks=Tasks
+ProjectMgrTaskList=List of Task
+ProjectMgrTreeDetails=TreeDetails
+ProjectMgrParties=Parties
+ProjectMgrWorkEffortAssocTypeId=Association Type
+ProjectMgrWorkEffortTypeId=Type
+ProjectMgrWorkEffortPurposeTypeId=Purpose Type
+ProjectMgrWorkEffortId=Id
+ProjectMgrWorkEffortScopeEnumId=Scope
+ProjectMgrWorkEffortEstimatedStartDate=Estimated StartDate
+ProjectMgrWorkEffortEstimatedCompletionDate=Estimated CompletionDate
+ProjectMgrWorkEffortActualStartDate=Actual StartDate
+ProjectMgrWorkEffortActualCompletionDate=Actual CompletionDate
+ProjectMgrWorkEffortIdFrom=Id From
+ProjectMgrWorkEffortIdTo=Id To
+ProjectMgrPartyRoleTypeId=Role Type Id
+ProjectMgrTaskNotAssignedPhase=Task not assigned to Phase/Iteration
+ProjectMgrToFindTask=To Find Task Give Range
+ProjectMgrToFindProject=To Find Project Give Range
+ProjectMgrTimeEntries=Add/Edit Time Entries
+PageTitleListTimeEntries=List Time Entries for
 

Modified: ofbiz/trunk/specialpurpose/projectmgr/ofbiz-component.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/projectmgr/ofbiz-component.xml?rev=574051&r1=574050&r2=574051&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/projectmgr/ofbiz-component.xml (original)
+++ ofbiz/trunk/specialpurpose/projectmgr/ofbiz-component.xml Sun Sep  9 12:02:11 2007
@@ -25,6 +25,8 @@
     <classpath type="dir" location="script"/>
     <classpath type="dir" location="config"/>
     <classpath type="jar" location="build/lib/*"/>
+    <entity-resource type="data" reader-name="seed" loader="main" location="data/ProjectMgrTypeData.xml"/>
+    <service-resource type="model" loader="main" location="servicedef/services.xml"/>
 
     <webapp name="projectmgr"
         title="Project"

Added: ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/AssociatedParties.bsh
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/AssociatedParties.bsh?rev=574051&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/AssociatedParties.bsh (added)
+++ ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/AssociatedParties.bsh Sun Sep  9 12:02:11 2007
@@ -0,0 +1,30 @@
+/*
+/*
+ * 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.
+ */
+  
+import java.util.*;
+import java.lang.*;
+import org.ofbiz.entity.*;
+import org.ofbiz.base.util.*;
+import org.ofbiz.base.util.UtilMisc;
+import org.ofbiz.entity.util.EntityUtil;
+import javolution.util.FastMap;
+
+associatedParties = delegator.findByAnd("WorkEffortPartyAssignment", UtilMisc.toMap("workEffortId", workEffortId));
+context.put("associatedParties", associatedParties);

Added: ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/ChildWorkEffort.bsh
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/ChildWorkEffort.bsh?rev=574051&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/ChildWorkEffort.bsh (added)
+++ ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/ChildWorkEffort.bsh Sun Sep  9 12:02:11 2007
@@ -0,0 +1,121 @@
+/*
+/*
+ * 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.
+ */
+  
+import java.util.*;
+import java.lang.*;
+import org.ofbiz.entity.*;
+import org.ofbiz.base.util.*;
+import org.ofbiz.base.util.UtilMisc;
+import org.ofbiz.entity.util.EntityUtil;
+import javolution.util.FastMap;
+
+workEffortIdFrom = parameters.get("workEffortIdFrom");
+
+workEffortTypeId = parameters.get("workEffortTypeId");
+
+if(workEffortIdFrom != null) {
+    List workEffortAssocs = delegator.findByAnd("WorkEffortAssocView", UtilMisc.toMap("workEffortIdFrom", workEffortIdFrom, "workEffortAssocTypeId", "WORK_EFF_BREAKDOWN"));
+    if(workEffortAssoc != null) {
+        List childProjects = new LinkedList();
+        List childTasks = new LinkedList();
+        List childPhases = new LinkedList();
+        itr = workEffortAssocs.iterator();
+        while(itr.hasNext()) {
+            GenericValue workEffortAssoc = itr.next();
+            workEffortIdTo = workEffortAssoc.get("workEffortIdTo");    
+            GenericValue workEffort = delegator.findByPrimaryKey("WorkEffort", UtilMisc.toMap("workEffortId", workEffortIdTo));    
+            String workEffortTypeId = workEffort.get("workEffortTypeId");
+            if(workEffortTypeId.equals("PROJECT")) {                
+                Map projectMap = FastMap.newInstance();
+                projectMap.put("currentStatusId", workEffort.getString("currentStatusId"));
+                projectMap.put("fromDate", workEffortAssoc.getString("fromDate"));
+                projectMap.put("workEffortId", workEffort.getString("workEffortId"));
+                projectMap.put("workEffortName", workEffort.getString("workEffortName"));
+                projectMap.put("priority", workEffort.getString("priority"));
+                projectMap.put("workEffortToActualStartDate", workEffortAssoc.getString("workEffortToActualStartDate"));
+                projectMap.put("workEffortToActualCompletionDate", workEffortAssoc.getString("workEffortToActualCompletionDate"));
+                projectMap.put("description", workEffort.getString("description"));
+                projectMap.put("workEffortTypeId", workEffort.getString("workEffortTypeId"));
+                projectMap.put("workEffortPurposeTypeId", workEffort.getString("workEffortPurposeTypeId"));
+                projectMap.put("workEffortAssocTypeId", "WORK_EFF_BREAKDOWN");
+                childProjects.add(projectMap);                
+                context.put("projects", childProjects);        
+            }
+            else {
+                if(workEffortTypeId.equals("TASK")) {                    
+                    Map taskMap = FastMap.newInstance();
+                    taskMap.put("currentStatusId", workEffort.getString("currentStatusId"));
+                    taskMap.put("fromDate", workEffortAssoc.getString("fromDate"));
+                    taskMap.put("workEffortId", workEffort.getString("workEffortId"));
+                    taskMap.put("workEffortName", workEffort.getString("workEffortName"));
+                    taskMap.put("priority", workEffort.getString("priority")); 
+                    taskMap.put("workEffortToActualStartDate", workEffortAssoc.getString("workEffortToActualStartDate"));
+                    taskMap.put("workEffortToActualCompletionDate", workEffortAssoc.getString("workEffortToActualCompletionDate"));
+                    taskMap.put("description", workEffort.getString("description"));
+                    taskMap.put("workEffortTypeId", workEffort.getString("workEffortTypeId"));
+                    taskMap.put("workEffortPurposeTypeId", workEffort.getString("workEffortPurposeTypeId"));
+                    taskMap.put("workEffortAssocTypeId", "WORK_EFF_BREAKDOWN");
+                    childTasks.add(taskMap);                    
+                    context.put("tasks", childTasks);
+                }
+                else {
+                    if(workEffortTypeId.equals("PHASE")) {                        
+                        Map phaseMap = FastMap.newInstance();
+                        phaseMap.put("currentStatusId", workEffort.getString("currentStatusId"));
+                        phaseMap.put("fromDate", workEffortAssoc.getString("fromDate"));
+                        phaseMap.put("workEffortId", workEffort.getString("workEffortId"));
+                        phaseMap.put("workEffortName", workEffort.getString("workEffortName"));
+                        phaseMap.put("workEffortToActualStartDate", workEffortAssoc.getString("workEffortToActualStartDate"));
+                        phaseMap.put("workEffortToActualCompletionDate", workEffortAssoc.getString("workEffortToActualCompletionDate"));
+                        phaseMap.put("description", workEffort.getString("description"));
+                        phaseMap.put("workEffortAssocTypeId", "WORK_EFF_BREAKDOWN");
+                        phaseMap.put("workEffortTypeId", workEffort.getString("workEffortTypeId"));
+                        phaseMap.put("workEffortPurposeTypeId", workEffort.getString("workEffortPurposeTypeId"));
+                        childPhases.add(phaseMap);                    
+                        context.put("phases", childPhases);
+                    }
+                }
+            }            
+        }
+    }
+}
+else {
+    if (workEffortTypeId.equals("TASK")) {
+        List tasks = delegator.findByAnd("WorkEffort", UtilMisc.toMap("workEffortTypeId", workEffortTypeId));
+        List unAssignedTasks = new LinkedList();
+        itr = tasks.iterator();
+        while (itr.hasNext()) {
+            GenericValue task = itr.next();
+            workEffortId = task.get("workEffortId");    
+            GenericValue workEffortAssoc = EntityUtil.getFirst(delegator.findByAnd("WorkEffortAssoc", UtilMisc.toMap("workEffortIdTo", workEffortId)));
+            if (workEffortAssoc == null) {
+            unAssignedTasks.add(UtilMisc.toMap("workEffortId", task.getString("workEffortId"),
+                                                 "workEffortTypeId", task.getString("workEffortTypeId"),
+                                                 "workEffortPurposeTypeId", task.getString("workEffortPurposeTypeId")));
+                context.put("tasks", unAssignedTasks);        
+            }
+        }        
+    }
+    else {
+        List projects = delegator.findByAnd("WorkEffort", UtilMisc.toMap("workEffortTypeId", workEffortTypeId));        
+        context.put("projects", projects);
+    }
+}
+

Added: ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/ListFilteredTasks.bsh
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/ListFilteredTasks.bsh?rev=574051&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/ListFilteredTasks.bsh (added)
+++ ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/ListFilteredTasks.bsh Sun Sep  9 12:02:11 2007
@@ -0,0 +1,171 @@
+/*
+/*
+ * 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.
+ */
+  
+import java.util.*;
+import java.lang.*;
+import org.ofbiz.entity.*;
+import org.ofbiz.base.util.*;
+import org.ofbiz.base.util.UtilMisc;
+import javolution.util.FastMap;
+
+import org.ofbiz.entity.util.*;
+import org.ofbiz.base.util.*;
+import org.ofbiz.entity.condition.*;
+import java.sql.Timestamp;
+
+fromDate = parameters.get("fromDate");
+thruDate = parameters.get("thruDate");
+
+workEffortTypeId = parameters.get("workEffortTypeId");
+workEffortIdFrom = parameters.get("workEffortIdFrom");
+findAll = parameters.get("findAll");
+if (findAll == null) {
+    findAll = "N";
+}
+if (filterTaskNotAssigned == null) {
+filterTaskNotAssigned = "N";
+}
+
+if (filterTaskNotAssigned.equals("Y")) {
+    workEffortAssocs = delegator.findByAnd("WorkEffortAssoc", UtilMisc.toMap("workEffortIdFrom", workEffortIdFrom));
+    if (workEffortAssocs != null) {
+        List phases = new LinkedList();
+        List tasks = new LinkedList();
+        List unassignedTasks = new LinkedList();
+        itr = workEffortAssocs.iterator();
+        while(itr.hasNext()) {
+            GenericValue workEffortAssoc = itr.next();
+            workEffortIdTo = workEffortAssoc.get("workEffortIdTo");    
+            GenericValue workEffort = delegator.findByPrimaryKey("WorkEffort", UtilMisc.toMap("workEffortId", workEffortIdTo));    
+            String workEffortTypeId = workEffort.get("workEffortTypeId");
+            if(workEffortTypeId.equals("PHASE")) {
+                phases.add(workEffort);                
+            }
+            if(workEffortTypeId.equals("TASK")) {
+                tasks.add(workEffort);
+            }
+        }
+        if(tasks != null && tasks.size()>0) {            
+            taskItr = tasks.iterator();
+            while(taskItr.hasNext()) {
+                boolean outerFlag = false;
+                boolean innerFlag = false;
+                GenericValue task = taskItr.next();                
+                if(phases != null && phases.size()>0) {                    
+                    phaseItr = phases.iterator();            
+                    while(phaseItr.hasNext()) {
+                        GenericValue phase = phaseItr.next();                        
+                        workEffortIdFrom = phase.get("workEffortId");
+                        workEffortAssocs = delegator.findByAnd("WorkEffortAssoc", UtilMisc.toMap("workEffortIdFrom", workEffortIdFrom));
+                        if(workEffortAssocs != null) {                            
+                            workEffortAssocItr = workEffortAssocs.iterator();                            
+                            while(workEffortAssocItr.hasNext()) {
+                                GenericValue workEffortAssoc = workEffortAssocItr.next();
+                                if(workEffortAssoc.get("workEffortIdTo").equals(task.get("workEffortId"))) {
+                                    innerFlag = true;
+                                    outerFlag = true;
+                                }
+                                if(innerFlag) {
+                                    break;
+                                }
+                            }                             
+                        }
+                        if(outerFlag) {
+                            break;
+                        }
+                    }
+                    if(!innerFlag) {                            
+                        Map taskMap = FastMap.newInstance();
+                        taskMap.put("currentStatusId", task.getString("currentStatusId"));
+                        taskMap.put("workEffortId", task.getString("workEffortId"));
+                        taskMap.put("workEffortName", task.getString("workEffortName"));
+                        taskMap.put("priority", task.getString("priority"));
+                        taskMap.put("description", task.getString("description"));
+                        taskMap.put("workEffortTypeId", task.getString("workEffortTypeId"));
+                        taskMap.put("workEffortPurposeTypeId", task.getString("workEffortPurposeTypeId"));
+                        taskMap.put("workEffortAssocTypeId", "WORK_EFF_BREAKDOWN");
+                        unassignedTasks.add(taskMap);
+                    }
+                }
+            }            
+            context.put("tasks", unassignedTasks);
+        }
+    }    
+}else {
+    if(workEffortTypeId.equals("TASK")) {
+        if ( !(UtilValidate.isEmpty(fromDate) || UtilValidate.isEmpty(thruDate))) {
+            conditions = UtilMisc.toList(new EntityExpr("workEffortTypeId", EntityOperator.EQUALS, "TASK"));
+            conditions.add(new EntityExpr("createdStamp", EntityOperator.GREATER_THAN_EQUAL_TO, fromDate ));
+            conditions.add(new EntityExpr("createdStamp", EntityOperator.LESS_THAN_EQUAL_TO, thruDate ));
+            allConditions = new EntityConditionList( conditions, EntityOperator.AND );
+            orderBy = UtilMisc.toList("createdStamp DESC");
+            listProjects = delegator.findByConditionCache("WorkEffort", allConditions, null, orderBy );
+            List projects = new LinkedList();
+            itr = listProjects.iterator();
+            while (itr.hasNext()) {
+                GenericValue project = itr.next();
+                workEffortId = project.get("workEffortId");    
+                GenericValue workEffortAssoc = EntityUtil.getFirst(delegator.findByAnd("WorkEffortAssoc", UtilMisc.toMap("workEffortIdTo", workEffortId)));
+                if (workEffortAssoc == null) {
+                    projects.add(UtilMisc.toMap("workEffortId", project.getString("workEffortId"),
+                                         "workEffortName", project.getString("workEffortName"),  
+                                         "workEffortTypeId", project.getString("workEffortTypeId"),
+                                         "workEffortPurposeTypeId", project.getString("workEffortPurposeTypeId")));
+                    context.put("projects", projects);        
+                }
+            }
+        } else { 
+            if (findAll.equals("Y")){
+                List workEffortAssocs = delegator.findByAnd("WorkEffortAssocView", UtilMisc.toMap("workEffortIdFrom", workEffortIdFrom));
+                List tasks = new LinkedList();
+                if(workEffortAssocs != null) {
+                    itr = workEffortAssocs.iterator();
+                    while (itr.hasNext()) {
+                        GenericValue workEffortAssoc = itr.next();
+                        GenericValue task = delegator.findByPrimaryKey("WorkEffort", UtilMisc.toMap("workEffortId", workEffortAssoc.get("workEffortIdTo")));
+                        workEffortTypeId = task.get("workEffortTypeId");
+                        if(workEffortTypeId.equals("TASK")) {                        
+                            Map taskMap = FastMap.newInstance();
+                            taskMap.put("currentStatusId", task.getString("currentStatusId"));
+                            taskMap.put("fromDate", workEffortAssoc.getString("fromDate"));
+                            taskMap.put("workEffortId", task.getString("workEffortId"));
+                            taskMap.put("workEffortName", task.getString("workEffortName"));
+                            taskMap.put("priority", task.getString("priority"));
+                            taskMap.put("description", task.getString("description"));
+                            taskMap.put("workEffortTypeId", task.getString("workEffortTypeId"));
+                            taskMap.put("workEffortToActualStartDate", workEffortAssoc.getString("workEffortToActualStartDate"));
+                            taskMap.put("workEffortToActualCompletionDate", workEffortAssoc.getString("workEffortToActualCompletionDate"));
+                            taskMap.put("workEffortPurposeTypeId", task.getString("workEffortPurposeTypeId"));
+                            taskMap.put("workEffortAssocTypeId", "WORK_EFF_BREAKDOWN");
+                            tasks.add(taskMap);
+                            context.put("tasks", tasks);
+                        }                    
+                    }
+                }
+            } else {
+                List tasks = null; 
+                context.put("tasks", tasks);
+            }
+        }
+    } else {
+        List unassignedTasks = null;
+        context.put("tasks", unassignedTasks);
+    }    
+}

Added: ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/ListProjectsByDateRange.bsh
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/ListProjectsByDateRange.bsh?rev=574051&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/ListProjectsByDateRange.bsh (added)
+++ ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/ListProjectsByDateRange.bsh Sun Sep  9 12:02:11 2007
@@ -0,0 +1,131 @@
+/*
+/*
+ * 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.
+ */
+  
+import java.util.*;
+import java.lang.*;
+import org.ofbiz.entity.*;
+import org.ofbiz.base.util.*;
+import org.ofbiz.base.util.UtilMisc;
+
+
+import org.ofbiz.entity.util.*;
+import org.ofbiz.base.util.*;
+import org.ofbiz.entity.condition.*;
+import java.sql.Timestamp;
+
+fromDate = parameters.get("fromDate");
+thruDate = parameters.get("thruDate");
+
+workEffortTypeId = parameters.get("workEffortTypeId");
+findAll = parameters.get("findAll");
+if (findAll == null) {
+    findAll = "N";
+}
+if(workEffortTypeId.equals("PROJECT")) {
+    if ( !(UtilValidate.isEmpty(fromDate) || UtilValidate.isEmpty(thruDate))) {
+        conditions = UtilMisc.toList(new EntityExpr("workEffortTypeId", EntityOperator.EQUALS, "PROJECT"));
+        conditions.add(new EntityExpr("createdStamp", EntityOperator.GREATER_THAN_EQUAL_TO, fromDate ));
+        conditions.add(new EntityExpr("createdStamp", EntityOperator.LESS_THAN_EQUAL_TO, thruDate ));
+        allConditions = new EntityConditionList( conditions, EntityOperator.AND );
+        orderBy = UtilMisc.toList("createdStamp DESC");
+        listProjects = delegator.findByConditionCache("WorkEffort", allConditions, null, orderBy );
+        List projects = new LinkedList();
+        itr = listProjects.iterator();
+        while (itr.hasNext()) {
+            GenericValue project = itr.next();
+            workEffortId = project.get("workEffortId");    
+            GenericValue workEffortAssoc = EntityUtil.getFirst(delegator.findByAnd("WorkEffortAssoc", UtilMisc.toMap("workEffortIdTo", workEffortId)));
+            if (workEffortAssoc == null) {
+                projects.add(UtilMisc.toMap("workEffortId", project.getString("workEffortId"),
+                                         "workEffortName", project.getString("workEffortName"),  
+                                         "workEffortTypeId", project.getString("workEffortTypeId"),
+                                         "workEffortPurposeTypeId", project.getString("workEffortPurposeTypeId")));
+                context.put("projects", projects);        
+            }
+        }
+     } else { 
+         if (findAll.equals("Y") ){
+             List listProjects = delegator.findByAnd("WorkEffort", UtilMisc.toMap("workEffortTypeId", workEffortTypeId));
+             List projects = new LinkedList();
+             itr = listProjects.iterator();
+             while (itr.hasNext()) {
+                 GenericValue project = itr.next();
+                 workEffortId = project.get("workEffortId");    
+                 GenericValue workEffortAssoc = EntityUtil.getFirst(delegator.findByAnd("WorkEffortAssoc", UtilMisc.toMap("workEffortIdTo", workEffortId)));
+                 if (workEffortAssoc == null) {
+                     projects.add(UtilMisc.toMap("workEffortId", project.getString("workEffortId"),
+                                              "workEffortName", project.getString("workEffortName"),  
+                                              "workEffortTypeId", project.getString("workEffortTypeId"),
+                                              "workEffortPurposeTypeId", project.getString("workEffortPurposeTypeId")));
+                     context.put("projects", projects);        
+                 }
+             }
+         } else {
+             List projects=null;
+             context.put("projects", projects);
+         }
+    }
+} else {
+    if ( !(UtilValidate.isEmpty(fromDate) || UtilValidate.isEmpty(thruDate))) {
+
+        conditions = UtilMisc.toList(new EntityExpr("workEffortTypeId", EntityOperator.EQUALS, "TASK"));
+        conditions.add(new EntityExpr("createdStamp", EntityOperator.GREATER_THAN_EQUAL_TO, fromDate ));
+        conditions.add(new EntityExpr("createdStamp", EntityOperator.LESS_THAN_EQUAL_TO, thruDate ));
+
+        allConditions = new EntityConditionList( conditions, EntityOperator.AND );
+        orderBy = UtilMisc.toList("createdStamp DESC");
+        tasks = delegator.findByConditionCache("WorkEffort", allConditions, null, orderBy );
+        List unAssignedTasks = new LinkedList();
+        itr = tasks.iterator();
+        while (itr.hasNext()) {
+            GenericValue task = itr.next();
+            workEffortId = task.get("workEffortId");    
+            GenericValue workEffortAssoc = EntityUtil.getFirst(delegator.findByAnd("WorkEffortAssoc", UtilMisc.toMap("workEffortIdTo", workEffortId)));
+            if (workEffortAssoc == null) {
+            unAssignedTasks.add(UtilMisc.toMap("workEffortId", task.getString("workEffortId"),
+                                                 "workEffortName", task.getString("workEffortName"),  
+                                                 "workEffortTypeId", task.getString("workEffortTypeId"),
+                                                 "workEffortPurposeTypeId", task.getString("workEffortPurposeTypeId")));
+                context.put("tasks", unAssignedTasks);        
+            }
+        }
+    } else {         
+        if (findAll.equals("Y") ){
+        List tasks = delegator.findByAnd("WorkEffort", UtilMisc.toMap("workEffortTypeId", workEffortTypeId));
+        List unAssignedTasks = new LinkedList();
+        itr = tasks.iterator();
+        while (itr.hasNext()) {
+            GenericValue task = itr.next();
+            workEffortId = task.get("workEffortId");    
+            GenericValue workEffortAssoc = EntityUtil.getFirst(delegator.findByAnd("WorkEffortAssoc", UtilMisc.toMap("workEffortIdTo", workEffortId)));
+            if (workEffortAssoc == null) {
+            unAssignedTasks.add(UtilMisc.toMap("workEffortId", task.getString("workEffortId"),
+                                                 "workEffortName", task.getString("workEffortName"),  
+                                                 "workEffortTypeId", task.getString("workEffortTypeId"),
+                                                 "workEffortPurposeTypeId", task.getString("workEffortPurposeTypeId")));
+                context.put("tasks", unAssignedTasks);        
+            }
+        }        
+    } else {
+        List unAssignedTasks=null;
+        context.put("tasks", unAssignedTasks);
+     }
+}
+}

Added: ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/ListTimeSheetByDateRange.bsh
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/ListTimeSheetByDateRange.bsh?rev=574051&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/ListTimeSheetByDateRange.bsh (added)
+++ ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/ListTimeSheetByDateRange.bsh Sun Sep  9 12:02:11 2007
@@ -0,0 +1,54 @@
+/*
+/*
+ * 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.
+ */
+  
+import java.util.*;
+import java.lang.*;
+import org.ofbiz.entity.*;
+import org.ofbiz.base.util.*;
+import org.ofbiz.base.util.UtilMisc;
+import org.ofbiz.entity.util.*;
+import org.ofbiz.entity.condition.*;
+import java.sql.Timestamp;
+
+fromDate = parameters.get("fromDate");
+thruDate = parameters.get("thruDate");
+
+findAll = parameters.get("findAll");
+if (findAll == null) {
+    findAll = "N";
+}
+List timeSheetList = new LinkedList();
+if ( !(UtilValidate.isEmpty(fromDate) || UtilValidate.isEmpty(thruDate))) {
+        List conditions = new LinkedList();
+        conditions.add(new EntityExpr("createdStamp", EntityOperator.GREATER_THAN_EQUAL_TO, fromDate ));
+        conditions.add(new EntityExpr("createdStamp", EntityOperator.LESS_THAN_EQUAL_TO, thruDate ));
+        allConditions = new EntityConditionList( conditions, EntityOperator.AND );
+        orderBy = UtilMisc.toList("createdStamp DESC");
+        timeSheetList = delegator.findByConditionCache("Timesheet", allConditions, null, orderBy );
+        context.put("timeSheetList", timeSheetList);
+} else {
+        if (findAll.equals("Y")) {
+            timeSheetList = delegator.findAll("Timesheet");
+            context.put("timeSheetList", timeSheetList);
+        }else {
+               timeSheetList = null;
+               context.put("timeSheetList", timeSheetList);
+        }
+}

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=574051&r1=574050&r2=574051&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/controller.xml (original)
+++ ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/controller.xml Sun Sep  9 12:02:11 2007
@@ -23,7 +23,8 @@
     <include location="component://product/webapp/catalog/WEB-INF/controller.xml"/>    
     <include location="component://order/webapp/ordermgr/WEB-INF/controller.xml"/>    
     <include location="component://accounting/webapp/accounting/WEB-INF/controller.xml"/>    
-    <include location="component://workeffort/webapp/workeffort/WEB-INF/controller.xml"/>    
+    <include location="component://workeffort/webapp/workeffort/WEB-INF/controller.xml"/>
+    <include location="component://humanres/webapp/humanres/WEB-INF/controller.xml"/>
 
     <description>Project Management Component Site Configuration File</description>
     <errorpage>/error/error.jsp</errorpage>
@@ -34,16 +35,310 @@
         <security https="true" auth="true"/>
         <response name="success" type="view" value="main"/>
     </request-map>
-
-
+   
+    <request-map uri="FindProject">
+        <security https="true" auth="true"/>
+        <response name="success" type="view" value="FindProject"/>
+    </request-map>
+    <request-map uri="FindProjectByRange">
+        <security https="true" auth="true"/>
+        <response name="success" type="view" value="FindProjectByRange"/>
+    </request-map>
+    <request-map uri="EditProject">
+        <security https="true" auth="true"/>
+        <response name="success" type="view" value="EditProject"/>
+    </request-map>
+    <request-map uri="createProject">
+        <security https="true" auth="true"/>
+        <event type="service" invoke="createWorkEffort"/>
+        <response name="success" type="view" value="EditProject"/>
+        <response name="error" type="view" value="EditProject"/>
+    </request-map>
+    <request-map uri="updateProject">
+        <security https="true" auth="true"/>
+        <event type="service" invoke="updateWorkEffort"/>
+        <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>
+    <request-map uri="ChildWorkEfforts">
+        <security https="true" auth="true"/>
+        <response name="success" type="view" value="ChildWorkEfforts"/>
+    </request-map>
+    <request-map uri="EditProjectAndAssoc">
+        <security https="true" auth="true"/>
+        <response name="success" type="view" value="EditProjectAndAssoc"/>
+    </request-map>
+    <request-map uri="createProjectAndAssoc">
+        <security https="true" auth="true"/>
+        <event type="service" invoke="createWorkEffortAndAssoc"/>
+        <response name="success" type="view" value="FindProject"/>
+        <response name="error" type="view" value="FindProject"/>
+    </request-map>
+    <request-map uri="updateProjectAndAssoc">
+        <security https="true" auth="true"/>
+        <event type="service" invoke="updateWorkEffortAndAssoc"/>
+        <response name="success" type="view" value="FindProject"/>
+        <response name="error" type="view" value="FindProject"/>
+    </request-map>    
+    <request-map uri="FindTask">
+        <security https="true" auth="true"/>
+        <response name="success" type="view" value="FindTask"/>
+    </request-map>
+    <request-map uri="EditTask">
+        <security https="true" auth="true"/>
+        <response name="success" type="view" value="EditTask"/>
+    </request-map>
+    <request-map uri="createTask">
+        <security https="true" auth="true"/>
+        <event type="service" invoke="createWorkEffort"/>
+        <response name="success" type="view" value="EditTask"/>
+        <response name="error" type="view" value="EditTask"/>
+    </request-map>
+    <request-map uri="updateTask">
+        <security https="true" auth="true"/>
+        <event type="service" invoke="updateWorkEffort"/>
+        <response name="success" type="view" value="EditTask"/>
+        <response name="error" type="view" value="EditTask"/>
+    </request-map>
+    <request-map uri="deleteTask">
+        <security https="true" auth="true"/>
+        <event type="service" invoke="deleteWorkEffort"/>
+        <response name="success" type="view" value="FindTask"/>
+        <response name="error" type="view" value="FindTask"/>
+    </request-map>    
+    <request-map uri="EditTaskAndAssoc">
+        <security https="true" auth="true"/>
+        <response name="success" type="view" value="EditTaskAndAssoc"/>
+        <response name="error" type="view" value="EditTaskAndAssoc"/>
+    </request-map>
+    <request-map uri="createTaskAndAssoc">
+        <security https="true" auth="true"/>
+        <event type="service" invoke="createWorkEffortAndAssoc"/>
+        <response name="success" type="view" value="FindTask"/>
+        <response name="error" type="view" value="FindTask"/>
+    </request-map>
+    <request-map uri="updateTaskAndAssoc">
+        <security https="true" auth="true"/>
+        <event type="service" invoke="updateWorkEffortAndAssoc"/>
+        <response name="success" type="view" value="FindTask"/>
+        <response name="error" type="view" value="FindTask"/>
+    </request-map>
+    <request-map uri="FindTaskList">
+        <security https="true" auth="true"/>
+        <response name="success" type="view" value="FindTaskList"/>
+        <response name="error" type="view" value="FindTaskList"/>
+    </request-map>
+    <request-map uri="FindTaskByRange">
+        <security https="true" auth="true"/>
+        <response name="success" type="view" value="FindTaskByRange"/>
+    </request-map>
+    <request-map uri="EditTaskList">
+        <security https="true" auth="true"/>
+        <response name="success" type="view" value="EditTaskList"/>
+        <response name="error" type="view" value="EditTaskList"/>
+    </request-map>
+    <request-map uri="createTaskList">
+        <security https="true" auth="true"/>
+        <event type="service" invoke="createWorkEffort"/>
+        <response name="success" type="view" value="EditTaskList"/>
+        <response name="error" type="view" value="EditTaskList"/>
+    </request-map>    
+    <request-map uri="deleteTaskList">
+        <security https="true" auth="true"/>
+        <event type="service" invoke="deleteWorkEffort"/>
+        <response name="success" type="view" value="FindTaskList"/>
+        <response name="error" type="view" value="FindTaskList"/>
+    </request-map>
+    <request-map uri="EditTaskListAndAssoc">
+        <security https="true" auth="true"/>
+        <response name="success" type="view" value="EditTaskListAndAssoc"/>
+        <response name="error" type="view" value="EditTaskListAndAssoc"/>
+    </request-map>
+    <request-map uri="createTaskListAndAssoc">
+        <security https="true" auth="true"/>
+        <event type="service" invoke="createWorkEffortAndAssoc"/>
+        <response name="success" type="view" value="FindTaskList"/>
+        <response name="error" type="view" value="FindTaskList"/>
+    </request-map>
+    <request-map uri="updateTaskListAndAssoc">
+        <security https="true" auth="true"/>
+        <event type="service" invoke="updateWorkEffortAndAssoc"/>
+        <response name="success" type="view" value="FindTaskList"/>
+        <response name="error" type="view" value="FindTaskList"/>
+    </request-map>
+    <request-map uri="ChildTaskWorkEfforts">
+        <security https="true" auth="true"/>
+        <response name="success" type="view" value="ChildTaskWorkEfforts"/>
+    </request-map>
+    <request-map uri="FindPhase">
+        <security https="true" auth="true"/>
+        <response name="success" type="view" value="FindPhase"/>
+    </request-map>
+    <request-map uri="createPhaseAndAssoc">
+        <security https="true" auth="true"/>
+        <event type="service" invoke="createWorkEffortAndAssoc"/>
+        <response name="success" type="view" value="FindPhase"/>
+        <response name="error" type="view" value="FindPhase"/>
+    </request-map>
+    <request-map uri="updatePhaseAndAssoc">
+        <security https="true" auth="true"/>
+        <event type="service" invoke="updateWorkEffortAndAssoc"/>
+        <response name="success" type="view" value="FindPhase"/>
+        <response name="error" type="view" value="FindPhase"/>
+    </request-map>
+    <request-map uri="projectView">
+        <security https="true" auth="true"/>        
+        <response name="success" type="view" value="projectView"/>
+        <response name="error" type="view" value="projectView"/>
+    </request-map>
+    <request-map uri="EditProjectSkills">
+        <security https="true" auth="true"/>
+        <response name="success" type="view" value="EditProjectSkills"/>
+    </request-map>
+    <request-map uri="createProjectSkillStandard">
+        <security https="true" auth="true"/>
+        <event type="service" invoke="createWorkEffortSkillStandard"/>
+        <response name="success" type="view" value="EditProjectSkills"/>
+        <response name="error" type="view" value="EditProjectSkills"/>
+    </request-map>
+    <request-map uri="updateWorkEffortSkillStandard">
+        <security https="true" auth="true"/>
+        <event type="service" invoke="updateWorkEffortSkillStandard"/>
+        <response name="success" type="view" value="EditProjectSkills"/>
+        <response name="error" type="view" value="EditProjectSkills"/>
+    </request-map>
+    <request-map uri="deleteWorkEffortSkillStandard">
+        <security https="true" auth="true"/>
+        <event type="service" invoke="deleteWorkEffortSkillStandard"/>
+        <response name="success" type="view" value="EditProjectSkills"/>
+        <response name="error" type="view" value="EditProjectSkills"/>
+    </request-map>
+    <request-map uri="EditTaskSkills">
+        <security https="true" auth="true"/>
+        <response name="success" type="view" value="EditTaskSkills"/>
+    </request-map>
+    <request-map uri="createTaskSkillStandard">
+        <security https="true" auth="true"/>
+        <event type="service" invoke="createWorkEffortSkillStandard"/>
+        <response name="success" type="view" value="EditTaskSkills"/>
+        <response name="error" type="view" value="EditTaskSkills"/>
+    </request-map>
+    <request-map uri="updateTaskSkillStandard">
+        <security https="true" auth="true"/>
+        <event type="service" invoke="updateWorkEffortSkillStandard"/>
+        <response name="success" type="view" value="EditTaskSkills"/>
+        <response name="error" type="view" value="EditTaskSkills"/>
+    </request-map>
+    <request-map uri="projectView">
+        <security https="true" auth="true"/>        
+        <response name="success" type="view" value="projectView"/>
+        <response name="error" type="view" value="projectView"/>
+    </request-map>
+    <request-map uri="ListWorkEffortPartyAssigns">
+        <security https="true" auth="true"/>        
+        <response name="success" type="view" value="ListWorkEffortPartyAssigns"/>
+        <response name="error" type="view" value="ListWorkEffortPartyAssigns"/>
+    </request-map>
+    <request-map uri="createWorkEffortPartyAssign">
+        <security https="true" auth="true"/>
+        <event type="service" invoke="assignPartyToWorkEffort"/>
+        <response name="success" type="view" value="ListWorkEffortPartyAssigns"/>
+        <response name="error" type="view" value="ListWorkEffortPartyAssigns"/>
+    </request-map>
+    <request-map uri="updateWorkEffortPartyAssign">
+        <security https="true" auth="true"/>
+        <event type="service" invoke="updatePartyToWorkEffortAssignment"/>
+        <response name="success" type="view" value="ListWorkEffortPartyAssigns"/>
+        <response name="error" type="view" value="ListWorkEffortPartyAssigns"/>
+    </request-map>
+    <request-map uri="EditTimeEntries">
+        <security https="true" auth="true"/>        
+        <response name="success" type="view" value="EditTimeEntries"/>
+        <response name="error" type="view" value="EditTimeEntries"/>     
+    </request-map>
+    <request-map uri="createTimeEntry">
+        <security https="true" auth="true"/>
+        <event type="service" invoke="createTimeEntry"/>
+        <response name="success" type="view" value="EditTimeEntries"/>
+        <response name="error" type="view" value="EditTimeEntries"/>
+    </request-map>
+    <request-map uri="updateTimeEntry">
+        <security https="true" auth="true"/>
+        <event type="service" invoke="updateTimeEntry"/>
+        <response name="success" type="view" value="EditTimeEntries"/>
+        <response name="error" type="view" value="EditTimeEntries"/>
+    </request-map>
+    <request-map uri="deleteTimeEntry">
+        <security https="true" auth="true"/>
+        <event type="service" invoke="deleteTimeEntry"/>
+        <response name="success" type="view" value="EditTimeEntries"/>
+        <response name="error" type="view" value="EditTimeEntries"/>
+    </request-map>
+    <request-map uri="FindTimeSheet">
+        <security https="true" auth="true"/>
+        <response name="success" type="view" value="FindTimeSheet"/>
+        <response name="error" type="view" value="FindTimeSheet"/>
+    </request-map>
+    <request-map uri="EditTimeSheet">
+        <security https="true" auth="true"/>
+        <response name="success" type="view" value="EditTimeSheet"/>
+        <response name="error" type="view" value="FindTimeSheet"/>
+    </request-map>
+    <request-map uri="createTimesheets">
+        <security https="true" auth="true"/>
+        <event type="service" invoke="createTimesheets"/>
+        <response name="success" type="view" value="FindTimeSheet"/>
+        <response name="error" type="view" value="FindTimeSheet"/>
+    </request-map>
+    <request-map uri="updateTimeSheet">
+        <security https="true" auth="true"/>
+        <event type="service" invoke="updateTimesheet"/>
+        <response name="success" type="view" value="EditTimeSheet"/>
+        <response name="error" type="view" value="EditTimeSheet"/>
+    </request-map>
+    <request-map uri="deleteTimeSheet">
+        <security https="true" auth="true"/>
+        <event type="service" invoke="deleteTimesheet"/>
+        <response name="success" type="view" value="FindTimeSheet"/>
+        <response name="error" type="view" value="FindTimeSheet"/>
+    </request-map>
     <!-- end of request mappings -->
 
     <!-- View Mappings -->
     <view-map name="error" page="/error/error.jsp"/>
 
-    <view-map name="main" type="screen" page="component://order/widget/ordermgr/RequestScreens.xml#FindRequest"/>
+    <view-map name="main" type="screen" page="component://projectmgr/widget/TaskScreens.xml#FindTaskByRange"/>
     <view-map name="login" type="screen" page="component://projectmgr/widget/CommonScreens.xml#login"/> 
     <view-map name="requirePasswordChange" type="screen" page="component://projectmgr/widget/CommonScreens.xml#requirePasswordChange"/>
-    
+    <view-map name="FindProject" type="screen" page="component://projectmgr/widget/ProjectScreens.xml#FindProject"/>    
+    <view-map name="FindProjectByRange" type="screen" page="component://projectmgr/widget/ProjectScreens.xml#FindProjectByRange"/>    
+    <view-map name="EditProject" type="screen" page="component://projectmgr/widget/ProjectScreens.xml#EditProject"/>
+    <view-map name="EditWorkEffort" type="screen" page="component://projectmgr/widget/ProjectScreens.xml#EditProject"/>
+    <view-map name="ChildWorkEfforts" type="screen" page="component://projectmgr/widget/ProjectScreens.xml#ChildWorkEfforts"/>
+    <view-map name="EditProjectAndAssoc" type="screen" page="component://projectmgr/widget/ProjectScreens.xml#EditProjectAndAssoc"/>
+    <view-map name="FindTask" type="screen" page="component://projectmgr/widget/ProjectScreens.xml#FindTask"/>
+    <view-map name="FindTaskByRange" type="screen" page="component://projectmgr/widget/TaskScreens.xml#FindTaskByRange"/>
+    <view-map name="EditTask" type="screen" page="component://projectmgr/widget/TaskScreens.xml#EditTask"/>
+    <view-map name="AddTaskAndAssoc" type="screen" page="component://projectmgr/widget/ProjectScreens.xml#AddTaskAndAssoc"/>
+    <view-map name="EditTaskAndAssoc" type="screen" page="component://projectmgr/widget/TaskScreens.xml#EditTaskAndAssoc"/>
+    <view-map name="FindTaskList" type="screen" page="component://projectmgr/widget/TaskScreens.xml#FindTaskList"/>
+    <view-map name="EditTaskList" type="screen" page="component://projectmgr/widget/TaskScreens.xml#EditTaskList"/>
+    <view-map name="EditTaskListAndAssoc" type="screen" page="component://projectmgr/widget/TaskScreens.xml#EditTaskListAndAssoc"/>
+    <view-map name="ChildTaskWorkEfforts" type="screen" page="component://projectmgr/widget/TaskScreens.xml#ChildTaskWorkEfforts"/>
+    <view-map name="ListWorkEffortPartyAssigns" type="screen" page="component://projectmgr/widget/ProjectScreens.xml#ListWorkEffortPartyAssigns"/> 
+    <view-map name="FindPhase" type="screen" page="component://projectmgr/widget/ProjectScreens.xml#FindPhase"/>
+    <view-map name="EditProjectSkills" type="screen" page="component://projectmgr/widget/ProjectScreens.xml#EditProjectSkills"/>
+    <view-map name="EditTaskSkills" type="screen" page="component://projectmgr/widget/TaskScreens.xml#EditTaskSkills"/>
+    <view-map name="projectView" type="screen" page="component://projectmgr/widget/ProjectScreens.xml#ProjectSummary"/>
+    <view-map name="EditPartySkills" type="screen" page="component://projectmgr/widget/ProjectScreens.xml#EditPartySkills"/>
+    <view-map name="EditTimeEntries" type="screen" page="component://projectmgr/widget/ProjectScreens.xml#EditTimeEntries"/>
+    <view-map name="FindTimeSheet" type="screen" page="component://projectmgr/widget/TimeSheetScreens.xml#FindTimeSheet"/>
+    <view-map name="EditTimeSheet" type="screen" page="component://projectmgr/widget/TimeSheetScreens.xml#EditTimeSheet"/>
     <!-- end of view mappings -->
 </site-conf>

Added: ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/EditTimeEntry.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/EditTimeEntry.ftl?rev=574051&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/EditTimeEntry.ftl (added)
+++ ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/EditTimeEntry.ftl Sun Sep  9 12:02:11 2007
@@ -0,0 +1,88 @@
+<#--
+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.
+-->
+<div class="screenlet">
+  <div class="screenlet-title-bar">
+    <ul>      
+        <li class="head3">&nbsp;${uiLabelMap.PageTitleAddTimeEntry}</li>
+    </ul>
+    <br class="clear" />
+  </div> 
+  <div class="screenlet-body">
+    <form name="editTimeEntryForm" action="<@o...@ofbizUrl>">
+      <table width="100%" cellpadding="2" cellspacing="0" border="1">
+        <tr>
+          <td><input type="hidden" name="workEffortId" value="${parameters.workEffortId?if_exists}"/></td>
+        </tr>                           
+        <tr>    
+          <td class="label" >${uiLabelMap.PartyPartyId}</td>
+          <td>
+            <input type="text" name="partyId" value=""/>
+            <a href="javascript:call_fieldlookup2(document.editTimeEntryForm.partyId,'LookupPerson');">
+              <img src='/images/fieldlookup.gif' width='15' height='14' border='0' alt='Click here For Field Lookup'/>
+            </a>
+          </td>
+        </tr>
+        <tr>
+          <td class="label" >${uiLabelMap.CommonFromDate}</td>
+          <td>
+            <input type="text" size="20" name="fromDate"/>
+            <a href="javascript:call_cal(document.editTimeEntryForm.fromDate, '${nowTimestamp?string}');"><img src="<@o...@ofbizContentUrl>" width="16" height="16" border="0" alt="Calendar"></a>
+          </td>
+        </tr>
+        <tr>
+          <td class="label" >${uiLabelMap.CommonThruDate}</td>
+          <td>
+            <input type="text" size="20" name="thruDate"/>
+            <a href="javascript:call_cal(document.editTimeEntryForm.thruDate, '${nowTimestamp?string}');"><img src="<@o...@ofbizContentUrl>" width="16" height="16" border="0" alt="Calendar"></a>
+          </td>
+        </tr>
+        <tr>    
+          <td class="label" >${uiLabelMap.TimesheetRateType}</td>
+          <td>
+            <#assign rateTypes = delegator.findAll("RateType")>
+            <select name="rateTypeId" class="selectBox">
+              <#list rateTypes as rateType>                    
+                <option value="${rateType.rateTypeId}">${rateType.description}</option>
+              </#list>
+            </select>  
+          </td>
+        </tr>
+        <tr>    
+          <td class="label" >${uiLabelMap.TimesheetTimesheetId}</td>
+          <td>
+            <input type="text" name="timesheetId" value=""/>
+            <a href="javascript:call_fieldlookup2(document.editTimeEntryForm.timesheetId,'LookupTimesheet');">
+              <img src='/images/fieldlookup.gif' width='15' height='14' border='0' alt='Click here For Field Lookup'/>
+            </a>
+          </td>
+        </tr>
+        <tr>    
+          <td class="label" >${uiLabelMap.TimesheetHours}</td>
+          <td><input type="text" name="hours" value=""/></td>
+        </tr> 
+        <tr>
+          <td>&nbsp;</td>    
+          <td>
+            <input type="submit" name="submit" value="${uiLabelMap.CommonSave}"/>
+          </td>
+        </tr>    
+      </table>    
+    </form>     
+  </div>
+</div>

Added: ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/editProjectskills.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/editProjectskills.ftl?rev=574051&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/editProjectskills.ftl (added)
+++ ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/editProjectskills.ftl Sun Sep  9 12:02:11 2007
@@ -0,0 +1,65 @@
+<#--
+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.
+-->
+
+<div class="screenlet">
+  <div class="screenlet-title-bar">
+    <ul>
+      <li class="head3">&nbsp;${uiLabelMap.PageTitleAddSkill}</li>
+    </ul>
+    <br class="clear" />
+  </div> 
+  <div class="screenlet-body">
+    <form name="editProjectSkillForm" action="<@o...@ofbizUrl>">
+      <table width="100%" cellpadding="2" cellspacing="0" border="1">
+        <tr>
+          <td><input type="hidden" name="workEffortId" value="${parameters.workEffortId?if_exists}"/></td>
+        </tr>
+        <tr>
+          <td class="label">${uiLabelMap.ProjectMgrSkillType}</td>
+          <td>             
+            <#assign skillTypes = delegator.findAll("SkillType")>
+            <select name="skillTypeId" class="selectBox">  
+              <#list skillTypes as skillType>                    
+                <option value="${skillType.skillTypeId}">${skillType.description}</option>
+              </#list>    
+            </select><span class="tooltip">${uiLabelMap.CommonRequired}</span></td>
+          </td>
+        </tr>
+        <tr>    
+          <td class="label" >${uiLabelMap.ProjectMgrEstimatedNumPeople}</td>
+          <td><input type="text" name="estimatedNumPeople" value=""/></td>
+        </tr> 
+        <tr>    
+          <td class="label" >${uiLabelMap.ProjectMgrEstimatedDuration}</td>
+          <td><input type="text" name="estimatedDuration" value=""/></td>
+        </tr> 
+        <tr>    
+          <td class="label" >${uiLabelMap.ProjectMgrEstimatedCost}</td>
+          <td><input type="text" name="estimatedCost" value=""/></td>
+        </tr>  
+        <tr>
+          <td>&nbsp;</td>    
+          <td>
+            <input type="submit" name="submit" value="${uiLabelMap.CommonSave}"/>
+          </td>
+        </tr>    
+      </table>    
+    </form>
+  </div>
+</div>

Added: ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/editTimeSheet.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/editTimeSheet.ftl?rev=574051&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/editTimeSheet.ftl (added)
+++ ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/editTimeSheet.ftl Sun Sep  9 12:02:11 2007
@@ -0,0 +1,125 @@
+<#--
+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.
+-->
+
+<div class="screenlet">
+  <div class="screenlet-title-bar">
+    <ul>
+      <#if timesheet?exists>
+        <li class="head3">&nbsp;${uiLabelMap.PageTitleEditTimesheet} # ${timesheet.timesheetId?if_exists}</li>
+      <#else>
+        <li class="head3">&nbsp;${uiLabelMap.PageTitleAddTimesheet}</li>
+      </#if>
+    </ul>
+    <br class="clear" />
+  </div> 
+  <div class="screenlet-body"> 
+    <#if timesheet?exists>
+      <form name="CreateTimeSheetForm" method="get" action="<@o...@ofbizUrl>" >
+    <#else>
+      <form name="CreateTimeSheetForm" method="get" action="<@o...@ofbizUrl>" >
+    </#if>
+    <table width="100%" cellpadding="2" cellspacing="0" border="0">
+      <#if timesheet?exists>
+        <td><input type="hidden" name="timesheetId" value="${timesheet.timesheetId?if_exists}"/></td>
+      </#if>
+      <#if timesheet?exists>
+        <tr>
+          <td class="label">${uiLabelMap.TimesheetTimesheetId}</td>
+          <td>${timesheet.timesheetId?if_exists}</td>
+        </tr>
+      </#if>
+      <tr>
+        <td class="label">${uiLabelMap.PartyParty}</td>
+        <#if timesheet?exists>
+          <td>
+            <#assign partyDetail = delegator.findByPrimaryKeyCache("PartyNameView", Static["org.ofbiz.base.util.UtilMisc"].toMap("partyId",timesheet.partyId?if_exists))>
+            [${timesheet.partyId?if_exists}] ${partyDetail.firstName?if_exists} ${partyDetail.middleName?if_exists} ${partyDetail.lastName?if_exists}
+          </td>
+        <#else>
+          <td>
+            <select name="partyIdList" class="selectBox" size="6" multiple="multiple">
+              <#assign partyList = delegator.findAll("Party", Static["org.ofbiz.base.util.UtilMisc"].toList("partyId"))>
+              <#list partyList as party>
+                <#assign partyDetail = delegator.findByPrimaryKeyCache("PartyNameView", Static["org.ofbiz.base.util.UtilMisc"].toMap("partyId", party.partyId?if_exists))>
+                <option value="${party.partyId?if_exists}">[${partyDetail.partyId?if_exists}] ${partyDetail.firstName?if_exists} ${partyDetail.middleName?if_exists} ${partyDetail.lastName?if_exists}</option>
+              </#list>
+            </select>
+          </td>  
+        </#if>
+      </tr>
+      <tr>  
+        <td class="label">${uiLabelMap.ClientPartyId}</td>
+        <#if timesheet?exists>
+          <td><input type="text" name="clientPartyId" value="${timesheet.clientPartyId?if_exists}"/>
+            <a href="javascript:call_fieldlookup2(document.CreateTimeSheetForm.clientPartyId,'LookupPartyName');"><img src='/images/fieldlookup.gif' width='15' height='14' border='0' alt='Click here For Field Lookup'/></a></td>
+          </td>
+        <#else>        
+          <td><input type="text" name="clientPartyId" value=""/>
+            <a href="javascript:call_fieldlookup2(document.CreateTimeSheetForm.clientPartyId,'LookupPartyName');"><img src='/images/fieldlookup.gif' width='15' height='14' border='0' alt='Click here For Field Lookup'/></a></td>
+          </td>
+        </#if>              
+      </tr>      
+      <tr>
+        <td class="label">${uiLabelMap.CommonFromDate}</td>
+        <#if timesheet?exists>  
+          <td>
+            <input type="text" size="20" name="fromDate" value="${timesheet.fromDate?if_exists}" class="field text">
+            <a href="javascript:call_cal(document.CreateTimeSheetForm.fromDate, null);"><img src="<@o...@ofbizContentUrl>" width="16" height="16" border="0" alt="Calendar"></a>
+          </td>
+        <#else>  
+          <td>
+            <input type="text" size="20" name="fromDate" class="field text">
+            <a href="javascript:call_cal(document.CreateTimeSheetForm.fromDate, null);"><img src="<@o...@ofbizContentUrl>" width="16" height="16" border="0" alt="Calendar"></a>
+          </td>
+          <td>&nbsp;</td>
+        </#if>  
+      </tr>
+      <tr>
+        <td class="label">${uiLabelMap.CommonThruDate}</td>
+        <#if timesheet?exists>  
+          <td>
+            <input type="text" size="20" name="thruDate" value="${timesheet.thruDate?if_exists}" class="field text">
+            <a href="javascript:call_cal(document.CreateTimeSheetForm.thruDate, null);"><img src="<@o...@ofbizContentUrl>" width="16" height="16" border="0" alt="Calendar"></a>
+          </td>
+        <#else>
+          <td>
+            <input type="text" size="20" name="thruDate" class="field text">
+            <a href="javascript:call_cal(document.CreateTimeSheetForm.thruDate, null);"><img src="<@o...@ofbizContentUrl>" width="16" height="16" border="0" alt="Calendar"></a>
+          </td>
+        </#if>
+        <td>&nbsp;</td>
+      </tr> 
+      <tr>    
+        <td class="label">${uiLabelMap.CommonComments}</td>
+        <#if timesheet?exists>  
+          <td><input type="text" size="35" name="comments" value="${timesheet.comments?if_exists}"/></td>
+        <#else>
+          <td><input type="text" size="35" name="comments" value=""/></td>
+        </#if>         
+      </tr>
+      <tr>
+        <td>&nbsp;</td>
+        <td>
+          <a href="javascript:document.CreateTimeSheetForm.submit()" class="buttontext">${uiLabelMap.CommonSave}</a>
+        </td>
+      </tr>
+    </table>
+    </forms>
+  </div>
+</div>

Added: ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/editphaseandassoc.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/editphaseandassoc.ftl?rev=574051&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/editphaseandassoc.ftl (added)
+++ ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/project/editphaseandassoc.ftl Sun Sep  9 12:02:11 2007
@@ -0,0 +1,193 @@
+<#--
+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.
+-->
+
+<div class="screenlet">
+  <div class="screenlet-title-bar">
+    <ul>
+      <#if project?has_content>
+        <li class="head3">&nbsp;${uiLabelMap.PageTitleEditPhase}&nbsp;#${project.workEffortName?if_exists} ${uiLabelMap.CommonInformation}</li>
+      <#else>
+        <li class="head3">&nbsp;${uiLabelMap.PageTitleAddPhase}</li>
+      </#if>
+    </ul>
+    <br class="clear" />
+  </div> 
+  <div class="screenlet-body">
+    <#assign workEffortIdFrom = parameters.workEffortIdFrom>
+    <#if phase?has_content>
+      <form name="addPhaseAndAssocForm" method="get" action="<@o...@ofbizUrl>">
+    <#else>  
+      <br/>
+      <form name="addPhaseAndAssocForm" method="get" action="<@o...@ofbizUrl>">
+    </#if>
+        <table width="100%" cellpadding="2" cellspacing="0">
+          <tr>
+            <#if !(phase?exists)>
+              <td><input type="hidden" name="workEffortTypeId" value="${parameters.workEffortTypeId?if_exists}"/></td>
+            <#else>
+              <td><input type="hidden" name="workEffortTypeId" value="${phase.workEffortTypeId?if_exists}"/></td>
+              <td><input type="hidden" name="workEffortId" value="${phase.workEffortId?if_exists}"/></td>
+              <td><input type="hidden" name="workEffortName" value="${phase.workEffortName?if_exists}"/></td> 
+            </#if>
+          </tr>    
+          <tr>
+            <td class="label" >${uiLabelMap.ProjectMgrWorkEffortIdFrom}</td>
+            <#assign workEffort=delegator.findByPrimaryKey("WorkEffort", Static["org.ofbiz.base.util.UtilMisc"].toMap("workEffortId", workEffortIdFrom?if_exists ))>                     
+            <td>${(workEffort.workEffortName)?if_exists} [${(workEffort.workEffortId)?if_exists}]<span class="tooltip">${uiLabelMap.CommonNotModifRecreat}</td>
+            <td><input type="hidden" name="workEffortIdFrom" value="${workEffortIdFrom?if_exists}"/></td>
+            <td><input type="hidden" name="workEffortParentId" value="${workEffortIdFrom?if_exists}"/></td> 
+          </tr>
+          <tr>
+            <td class="label" >${uiLabelMap.ProjectMgrWorkEffortAssocTypeId}</td>
+            <td>
+              <select class="selectBox" name="workEffortAssocTypeId"> 
+                <#assign WorkEffortAssocTypes = delegator.findAll("WorkEffortAssocType", Static["org.ofbiz.base.util.UtilMisc"].toList("description"))>
+                <#list WorkEffortAssocTypes as WorkEffortAssocType>
+                  <option value="${WorkEffortAssocType.workEffortAssocTypeId?if_exists}">${WorkEffortAssocType.description?if_exists}</option>
+                </#list>
+              </select>   
+            </td>
+          </tr>
+          <tr>
+            <td class="label" >${uiLabelMap.CommonSequenceNum}</td>
+            <td><input type="text" name="sequenceNum" value=""/></td>
+          </tr>
+          <tr>
+            <td class="label" >${uiLabelMap.CommonFromDate}</td>
+            <td>
+              <input type="text" size="20" name="fromDate"/>
+              <a href="javascript:call_cal(document.addProjectAndAssocForm.fromDate, '${nowTimestamp?string}');"><img src="<@o...@ofbizContentUrl>" width="16" height="16" border="0" alt="Calendar"></a>
+            </td>
+          </tr>
+          <tr>
+            <td class="label" >${uiLabelMap.CommonThruDate}</td>
+            <td>
+              <input type="text" size="20" name="thruDate"/>
+              <a href="javascript:call_cal(document.addProjectAndAssocForm.thruDate, '${nowTimestamp?string}');"><img src="<@o...@ofbizContentUrl>" width="16" height="16" border="0" alt="Calendar"></a>
+            </td>
+          </tr>
+          <tr>
+            <td width="20%">
+              Enter the WorkEffort Details below
+            </td> 
+          </tr>
+          <tr>    
+            <#if phase?exists>
+              <td class="label" >${uiLabelMap.ProjectMgrWorkEffortId}</td>    
+              <td>${phase.workEffortId?if_exists}</td>    
+            </#if>
+          </tr>    
+          <tr>
+            <td class="label" >${uiLabelMap.CommonName}*</td>
+            <#if phase?exists>
+              <td>${phase.workEffortName?if_exists}<span class="tooltip">${uiLabelMap.CommonRequired}</span></td>
+            <#else>
+              <td><input type="text" name="workEffortName" value=""/><span class="tooltip">${uiLabelMap.CommonRequired}</span></td>
+            </#if>
+          </tr>
+          <tr>    
+            <td class="label" >${uiLabelMap.CommonDescription}</td>
+            <#if phase?exists>
+              <td><input type="text" name="description" value="${phase.description?if_exists}"/></td>
+            <#else>
+              <td><input type="text" name="description" value=""/></td>
+            </#if>
+          </tr>   
+          <tr>    
+            <td class="label" >${uiLabelMap.CommonStatus}*</td>
+            <td>    
+              <select name="currentStatusId" class="selectBox">
+                <#if phase?exists>
+                  <#assign currentStatusId = phase.currentStatusId?if_exists>
+                  <#assign statusValidChangeToDetailList = delegator.findByAnd("StatusValidChangeToDetail", Static["org.ofbiz.base.util.UtilMisc"].toMap("statusId", currentStatusId))>
+                  <#list statusValidChangeToDetailList as statusValidChangeToDetail> 
+                    <option SELECTED value="${currentStatusId}">${currentStatusId}</option>  
+                    <option value=${statusValidChangeToDetail.statusId}>[${uiLabelMap.WorkEffortGeneral}]${statusValidChangeToDetail.description}</option>
+                  </#list>
+                <#else>
+                  <#assign statusItemGenrals = delegator.findByAnd("StatusItem", Static["org.ofbiz.base.util.UtilMisc"].toMap("statusTypeId", "CALENDAR_STATUS"))>
+                  <#assign statusItemTasks = delegator.findByAnd("StatusItem", Static["org.ofbiz.base.util.UtilMisc"].toMap("statusTypeId", "TASK_STATUS"))>
+                  <#assign statusItemEvents = delegator.findByAnd("StatusItem", Static["org.ofbiz.base.util.UtilMisc"].toMap("statusTypeId", "EVENT_STATUS"))>
+                  <#list statusItemGenrals as statusItem> 
+                    <option value="${statusItem.statusId?if_exists}">[${uiLabelMap.WorkEffortGeneral}]${statusItem.description}</option>
+                  </#list>                
+                  <#list statusItemTasks as statusItem>
+                    <option value="${statusItem.statusId?if_exists}">[${uiLabelMap.WorkEffortTask}]${statusItem.description}</option>
+                  </#list>                
+                  <#list statusItemEvents as statusItem>
+                    <option value="${statusItem.statusId?if_exists}">[${uiLabelMap.WorkEffortEvent}]${statusItem.description}</option>
+                  </#list>
+                </#if>        
+              </select><span class="tooltip">${uiLabelMap.CommonRequired}</span>
+            </td>
+          </tr>    
+          <tr>
+            <td class="label">${uiLabelMap.WorkEffortEstimatedStartDate}</td>
+            <td>
+              <#if phase?exists>
+                <input type="text" name="estimatedStartDate" value="${phase.estimatedStartDate?if_exists}"/>
+              <#else>
+                <input type="text" name="estimatedStartDate" value=""/>
+              </#if>
+              <a href="javascript:call_cal(document.addPhaseAndAssocForm.estimatedStartDate,'${nowTimestamp?string}');"><img src="<@o...@ofbizContentUrl>" width="16" height="16" border="0" alt="Calendar"/></a>
+            </td>
+          </tr>    
+          <tr>
+            <td class="label">${uiLabelMap.WorkEffortEstimatedCompletionDate}</td>
+            <td>
+              <#if phase?exists>
+                <input type="text" name="estimatedCompletionDate" value="${phase.estimatedCompletionDate?if_exists}"/>
+              <#else>
+                <input type="text" name="estimatedCompletionDate" value=""/>
+              </#if>
+              <a href="javascript:call_cal(document.addPhaseAndAssocForm.estimatedCompletionDate,'${nowTimestamp?string}');"><img src="<@o...@ofbizContentUrl>" width="16" height="16" border="0" alt="Calendar"/></a>
+            </td>
+          </tr>
+          <tr>
+            <td class="label">${uiLabelMap.FormFieldTitle_actualStartDate}</td>
+            <td>
+              <#if phase?exists>
+                <input type="text" name="actualStartDate" value="${phase.actualStartDate?if_exists}"/>
+              <#else>
+                <input type="text" name="actualStartDate" value=""/>
+              </#if>
+              <a href="javascript:call_cal(document.addPhaseAndAssocForm.actualStartDate,'${nowTimestamp?string}');"><img src="<@o...@ofbizContentUrl>" width="16" height="16" border="0" alt="Calendar"/></a>
+            </td>
+          </tr>
+          <tr>
+            <td class="label">${uiLabelMap.FormFieldTitle_actualCompletionDate}</td>
+            <td>
+              <#if phase?exists>
+                <input type="text" name="actualCompletionDate" value="${phase.actualCompletionDate?if_exists}"/>
+              <#else>
+                <input type="text" name="actualCompletionDate" value=""/>
+              </#if>
+              <a href="javascript:call_cal(document.addPhaseAndAssocForm.actualCompletionDate,'${nowTimestamp?string}');"><img src="<@o...@ofbizContentUrl>" width="16" height="16" border="0" alt="Calendar"/></a>
+            </td>
+          </tr>    
+          <tr>
+            <td>&nbsp;</td>    
+            <td>
+              <input type="submit" name="submit" value="${uiLabelMap.CommonSave}"/>
+            </td>
+          </tr>     
+        </table>
+      </form> 
+  </div>
+</div>