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

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

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

hansbak-2
Author: hansbak
Date: Sun Dec  9 00:06:00 2007
New Revision: 602651

URL: http://svn.apache.org/viewvc?rev=602651&view=rev
Log:
rewritten timesheet maintenance screens to allow the weekly input to tasks of projects the login ID is member of.

Added:
    ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/EditWeekTimesheet.bsh   (with props)
Modified:
    ofbiz/trunk/specialpurpose/projectmgr/config/ProjectMgrUiLabels.properties
    ofbiz/trunk/specialpurpose/projectmgr/entitydef/entitygroup.xml
    ofbiz/trunk/specialpurpose/projectmgr/entitydef/entitymodel.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/controller.xml
    ofbiz/trunk/specialpurpose/projectmgr/widget/CommonScreens.xml
    ofbiz/trunk/specialpurpose/projectmgr/widget/TimeSheetScreens.xml
    ofbiz/trunk/specialpurpose/projectmgr/widget/forms/TimeSheetForms.xml

Modified: ofbiz/trunk/specialpurpose/projectmgr/config/ProjectMgrUiLabels.properties
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/projectmgr/config/ProjectMgrUiLabels.properties?rev=602651&r1=602650&r2=602651&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/projectmgr/config/ProjectMgrUiLabels.properties (original)
+++ ofbiz/trunk/specialpurpose/projectmgr/config/ProjectMgrUiLabels.properties Sun Dec  9 00:06:00 2007
@@ -34,6 +34,7 @@
 PageTitleAddTaskNotes=Add Task Notes
 PageTitleAddTimeEntry=Add Time Entry
 PageTitleDependencies=Task dependencies
+PageTitleEditCurrentTimesheet=Edit current timesheet
 PageTitleEditProject=Edit Project
 PageTitleEditPhase=Edit Phase
 PageTitleEditSkill=Edit Skill
@@ -48,6 +49,7 @@
 PageTitleListPartyAssigns=Party Assigns
 PageTitleListProjectNotes=List Project Notes
 PageTitleListTaskNotes=List Task Notes
+PageTitleMyTimesheets=My timesheet list
 PageTitleProjectInformation=Project Information
 PageTitleTasksAfter=Tasks to be executed after the current task
 PageTitleTasksBefore=Tasks to be executed before the current task

Modified: ofbiz/trunk/specialpurpose/projectmgr/entitydef/entitygroup.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/projectmgr/entitydef/entitygroup.xml?rev=602651&r1=602650&r2=602651&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/projectmgr/entitydef/entitygroup.xml (original)
+++ ofbiz/trunk/specialpurpose/projectmgr/entitydef/entitygroup.xml Sun Dec  9 00:06:00 2007
@@ -26,5 +26,7 @@
   <!-- ========================================================= -->
 
     <entity-group group="org.ofbiz" entity="ProjectPartyAndPhaseAndTask"/>
-    <entity-group group="org.ofbiz" entity="ProjectAndPhaseAndTask"/>  
+    <entity-group group="org.ofbiz" entity="ProjectAndPhaseAndTask"/>
+    <entity-group group="org.ofbiz" entity="TimesheetAndTimeEntry"/>
+    
 </entitygroup>

Modified: ofbiz/trunk/specialpurpose/projectmgr/entitydef/entitymodel.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/projectmgr/entitydef/entitymodel.xml?rev=602651&r1=602650&r2=602651&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/projectmgr/entitydef/entitymodel.xml (original)
+++ ofbiz/trunk/specialpurpose/projectmgr/entitydef/entitymodel.xml Sun Dec  9 00:06:00 2007
@@ -88,4 +88,41 @@
       <key-map field-name="workEffortId"/>
     </relation>
   </view-entity>
+  
+  <view-entity entity-name="TimesheetAndTimeEntry"
+    package-name="org.ofbiz.workeffort.project"
+    title="Time entry for Timesheets, time entries always have a timesheet and are always for one day only and recording the hours for one person which is defined on the timesheet. A timesheet will always have at least one time entry.">
+    <member-entity entity-alias="TS" entity-name="Timesheet"/>
+    <member-entity entity-alias="TE" entity-name="TimeEntry"/>
+    <alias-all entity-alias="TS">
+      <exclude field="clientPartyId"/>
+      <exclude field="comments"/>
+    </alias-all>
+    <alias-all entity-alias="TE">
+      <exclude field="partyId"/>
+      <exclude field="thruDate"/>
+      <exclude field="fromDate"/>
+      <exclude field="comments"/>
+    </alias-all>
+    <alias entity-alias="TE" field="fromDate" name="activityDate"/>
+    <alias entity-alias="TE" field="comments" name="entryComments"/>
+    <alias entity-alias="TS" field="comments" name="sheetComments"/>
+    <view-link entity-alias="TS" rel-entity-alias="TE" rel-optional="true">
+      <key-map field-name="timesheetId"/>
+    </view-link>
+    <relation type="one" rel-entity-name="WorkEffort">
+      <key-map field-name="workEffortId"/>
+    </relation>
+    <relation type="one" rel-entity-name="Invoice">
+      <key-map field-name="invoiceId"/>
+    </relation>
+    <relation type="one" rel-entity-name="InvoiceItem">
+      <key-map field-name="invoiceId"/>
+      <key-map field-name="invoiceItemSeqId"/>
+    </relation>
+    <relation type="one" rel-entity-name="RateType">
+      <key-map field-name="rateTypeId"/>
+    </relation>
+  </view-entity>
+  
   </entitymodel>

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=602651&r1=602650&r2=602651&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/projectmgr/script/org/ofbiz/project/ProjectServices.xml (original)
+++ ofbiz/trunk/specialpurpose/projectmgr/script/org/ofbiz/project/ProjectServices.xml Sun Dec  9 00:06:00 2007
@@ -20,7 +20,74 @@
 
 <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="updateTimeEntryByWorkeffort" short-description="Update workeffort by workeffort and timesheetId ">
+        <if-empty field-name="parameters.workEffortId">
+            <return/>
+        </if-empty>
+        <if-compare field-name="parameters.workEffortId" operator="equals" value="Totals">
+            <return/>
+        </if-compare>
+        <entity-one entity-name="Timesheet" value-name="timesheet"/>
+        
+        <entity-and entity-name="ProjectAndPhaseAndTask" list-name="projects">
+            <field-map field-name="workEffortId" env-name="parameters.workEffortId"/>
+        </entity-and>
+        <if-not-empty field-name="project">
+            <first-from-list entry-name="projects" list-name="project"/>
+        </if-not-empty>
+        
+        <get-related value-name="timesheet" relation-name="TimeEntry" list-name="timeEntries"/>
+        
+        <!-- update existing entries -->
+        <set field="hours" value="0" type="Double"/>
+        <if-not-empty field-name="timeEntries">
+            <iterate entry-name="timeEntry" list-name="timeEntries">
+                <if-compare-field field-name="timeEntry.workEffortId" operator="equals" to-field-name="parameters.workEffortId">
+                    <!-- check if the entry does not contain any hours, then delete -->
+                    <if-empty field-name="timeEntry.hours">
+                        <set  from-field="timeEntry.timeEntryId" field="teDelMap.timeEntryId"/>
+                        <call-service service-name="deleteTimeEntry" in-map-name="teDelMap"/>
+                        <else>
+                            <!-- translate the date into the daynumber -->
+                            <call-class-method class-name="org.ofbiz.base.util.UtilDateTime" method-name="getIntervalInDays" ret-field-name="dayNumber">
+                                <field field-name="timesheet.fromDate" type="java.sql.Timestamp"/>
+                                <field field-name="timeEntry.fromDate" type="java.sql.Timestamp"/>
+                            </call-class-method>
+                            <!-- get the related field -->
+                            <if-not-empty field-name="parameters.hoursDay${dayNumber}">
+                                <set field="hours" from-field="parameters.hoursDay${dayNumber}"/>
+                                <else>
+                                    <set field="hours" value="0"/>
+                                </else>
+                            </if-not-empty>
+                            <set field="parameters.hoursDay${dayNumber}" value="-1"/>
+                            <call-simple-method method-name="updateTimeEntry"/>                        
+                        </else>
+                    </if-empty>
+                </if-compare-field>
+            </iterate>
+        </if-not-empty>
+        
+        <!-- process not yet done fields -->
+        <loop count="7" field="dayNr">
+            <if-not-empty field-name="parameters.hoursDay${dayNr}">
+                <set field="hours" from-field="parameters.hoursDay${dayNr}"/>
+                <else>
+                    <set field="hours" value="0"/>
+                </else>
+            </if-not-empty>
+            <set field="hours" from-field="parameters.hoursDay${dayNr}"/>
+            <call-class-method class-name="org.ofbiz.base.util.UtilDateTime" method-name="addDaysToTimestamp" ret-field-name="fromDate">
+                <field field-name="timesheet.fromDate" type="java.sql.Timestamp"/>
+                <field field-name="dayNr" type="int"/>
+            </call-class-method>
+            <call-simple-method method-name="updateTimeEntry"/>                        
+        </loop>
+        
+    </simple-method>          
+
     <simple-method method-name="getProject" short-description="get Project information" login-required="true">
         <!-- get the phase seq id -->
         <if-empty field-name="parameters.projectId">
@@ -321,7 +388,7 @@
         <!-- input is 'lowInfo' map output is 'highInfo map -->
         <!-- hoursPartyId: if provided only the hours of that party -->
         
-        <!-- add the estimated hours together -->
+        <!-- add the planned hours together -->
         <get-related value-name="lowInfo" relation-name="WorkEffortSkillStandard" list-name="estimates"/>
         <iterate entry-name="estimate" list-name="estimates">
             <if-not-empty field-name="estimate.estimatedDuration">
@@ -336,13 +403,14 @@
         <get-related value-name="lowInfo" relation-name="TimeEntry" list-name="actuals"/>
         <iterate entry-name="actual" list-name="actuals">
             <if-not-empty field-name="actual.hours">
+                <get-related-one value-name="actual" relation-name="Timesheet" to-value-name="timesheet"/>
                 <if>
                     <condition>
                         <or>
                             <if-empty field-name="hoursPartyId"/>
                             <and>
                                 <not><if-empty field-name="hoursPartyId"/></not>
-                                <if-compare-field field-name="actuals.partyId" operator="equals" to-field-name="hoursPartyId"/>
+                                <if-compare-field field-name="timeSheet.partyId" operator="equals" to-field-name="hoursPartyId"/>
                             </and>
                         </or>
                     </condition>
@@ -375,4 +443,31 @@
             </else>
         </if-not-empty>
     </simple-method>    
+
+    <simple-method method-name="updateTimeEntry" short-description="">
+        <if-compare field-name="hours" value="-1" operator="equals">
+            <return/>
+        </if-compare>
+        <if-not-empty field-name="timeEntry.timeEntryId">
+            <if-compare field-name="hours" operator="equals" value="0">
+                <set  field="teDelMap.timeEntryId" from-field="timeEntry.timeEntryId"/>
+                <call-service service-name="deleteTimeEntry" in-map-name="teDelMap"/>
+                <else>
+                    <clear-field field-name="teUpdMap"/>
+                    <set field="teUpdMap.hours" from-field="hours"/>
+                    <set field="teUpdMap.timeEntryId" from-field="timeEntry.timeEntryId"/>
+                    <call-service service-name="updateTimeEntry" in-map-name="teUpdMap"/>
+                </else>
+            </if-compare>
+            <else>
+                <if-compare field-name="hours" operator="not-equals" value="0">
+                    <set-service-fields service-name="createTimeEntry" map-name="parameters" to-map-name="teCreMap"/>
+                    <set field="teCreMap.hours" from-field="hours"/>
+                    <set field="teCreMap.fromDate" from-field="fromDate"/>
+                    <call-service service-name="createTimeEntry" in-map-name="teCreMap"/>
+                </if-compare>
+            </else>            
+        </if-not-empty>
+    </simple-method>
+
 </simple-methods>

Modified: ofbiz/trunk/specialpurpose/projectmgr/servicedef/services.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/projectmgr/servicedef/services.xml?rev=602651&r1=602650&r2=602651&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/projectmgr/servicedef/services.xml (original)
+++ ofbiz/trunk/specialpurpose/projectmgr/servicedef/services.xml Sun Dec  9 00:06:00 2007
@@ -22,6 +22,20 @@
         xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/services.xsd">
     <description>Project Manager service definitions.</description>
 
+    <service name="updateTimeEntryByWorkeffort" engine="simple"
+        location="org/ofbiz/project/ProjectServices.xml" invoke="updateTimeEntryByWorkeffort">
+        <description>Update workeffort by workeffort and timesheetId </description>
+        <attribute name="timesheetId" type="String" mode="IN" optional="false"/>
+        <attribute name="workEffortId" type="String" mode="IN" optional="true"/><!-- when empty will be ignored -->
+        <attribute name="hoursDay0" type="Double" mode="IN" optional="true"/>
+        <attribute name="hoursDay1" type="Double" mode="IN" optional="true"/>
+        <attribute name="hoursDay2" type="Double" mode="IN" optional="true"/>
+        <attribute name="hoursDay3" type="Double" mode="IN" optional="true"/>
+        <attribute name="hoursDay4" type="Double" mode="IN" optional="true"/>
+        <attribute name="hoursDay5" type="Double" mode="IN" optional="true"/>
+        <attribute name="hoursDay6" type="Double" mode="IN" optional="true"/>
+    </service>
+
     <service name="getProject" engine="simple"
         location="org/ofbiz/project/ProjectServices.xml" invoke="getProject">
         <description>Get project information and realated phase and task info.</description>

Added: ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/EditWeekTimesheet.bsh
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/EditWeekTimesheet.bsh?rev=602651&view=auto
==============================================================================
--- ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/EditWeekTimesheet.bsh (added)
+++ ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/EditWeekTimesheet.bsh Sun Dec  9 00:06:00 2007
@@ -0,0 +1,167 @@
+/*
+/*
+ * 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.base.util.*;
+import org.ofbiz.entity.*;
+import org.ofbiz.base.util.UtilMisc;
+import org.ofbiz.base.util.UtilValidate;
+import org.ofbiz.base.util.UtilDateTime;
+import org.ofbiz.entity.util.*;
+import org.ofbiz.entity.condition.*;
+import java.sql.Timestamp;
+import javolution.util.FastList;
+import javolution.util.FastMap;
+
+timesheetId = parameters.get("timesheetId");
+userLogin = parameters.get("userLogin");
+delegator = parameters.get("delegator");
+locale = parameters.get("locale");
+timeZone = parameters.get("timeZone");
+
+// show the requested timesheet, otherwise the current , if not exist create
+timesheet = null;
+if (timesheetId != null) {
+        timesheet = delegator.findByPrimaryKey("Timesheet", UtilMisc.toMap("timesheetId", timesheetId));
+    } else {
+        start = UtilDateTime.getWeekStart(UtilDateTime.nowTimestamp());
+        timesheets = delegator.findByAnd("Timesheet",
+            UtilMisc.toMap("partyId", userLogin.getString("partyId"), "fromDate", start));
+        if (!UtilValidate.isEmpty(timesheets)) {
+            timesheet = timesheets.get(0);
+        } else {
+            result = dispatcher.runSync("createTimesheetForThisWeek",
+                UtilMisc.toMap("userLogin", userLogin, "partyId", userLogin.getString("partyId")));
+            timesheet = delegator.findByPrimaryKey("Timesheet", UtilMisc.toMap("timesheetId", result.get("timesheetId")));
+        }
+}
+
+context.put("timesheet", timesheet);
+context.put("weekNumber", UtilDateTime.weekNumber(timesheet.getTimestamp("fromDate")));
+
+entries = new LinkedList();
+timeEntries = timesheet.getRelated("TimeEntry", UtilMisc.toList("workEffortId", "fromDate"));
+te = timeEntries.iterator();
+lastWorkEffortId = null;
+entry = FastMap.newInstance();
+taskTotal = 0.00;
+day0Total = 0.00; day1Total=0.00;day2Total=0.00; day3Total=0.00;day4Total=0.00;day5Total=0.00;day6Total=0.00;
+pHours = 0.00;
+timeEntry = null;
+while(te.hasNext()) {
+    timeEntry = te.next();
+    
+    if (lastWorkEffortId != null && !lastWorkEffortId.equals(timeEntry.getString("workEffortId"))) {
+        entry.put("total", taskTotal);
+        // get the planned number of hours
+        plannedHours = timeEntry.getRelatedOne("WorkEffort").getRelated("WorkEffortSkillStandard");
+        ph = plannedHours.iterator();
+        pHours = 0.00;
+        while(ph.hasNext()) {
+            plannedHour = ph.next();
+            if (plannedHour.get("estimatedDuration") != null) {
+                pHours += plannedHour.get("estimatedDuration");
+            }
+        }
+        entry.put("plannedHours", pHours);
+        entries.add(entry);
+        taskTotal = 0.00;
+        entry = UtilMisc.toMap("timesheetId", timesheet.get("timesheetId"));
+    }
+    if (UtilValidate.isNotEmpty(timeEntry.get("workEffortId"))) {
+        workEffort = timeEntry.getRelatedOne("WorkEffort");
+        entry.put("workEffortId", workEffort.getString("workEffortId"));    
+        entry.put("workEffortName", workEffort.getString("workEffortName"));    
+    }
+    entry.put("timesheetId", timesheet.get("timesheetId"));
+    if (timeEntry.get("hours") != null) {
+        dayNumber = (timeEntry.get("fromDate").getTime() - timesheet.getTimestamp("fromDate").getTime()) / (24*60*60*1000);
+        hours = timeEntry.getDouble("hours").doubleValue();
+        entry.put(String.valueOf(dayNumber), hours);
+        if (dayNumber == 0) day0Total += hours;
+        if (dayNumber == 1) day1Total += hours;
+        if (dayNumber == 2) day2Total += hours;
+        if (dayNumber == 3) day3Total += hours;
+        if (dayNumber == 4) day4Total += hours;
+        if (dayNumber == 5) day5Total += hours;
+        if (dayNumber == 6) day6Total += hours;
+        taskTotal += hours;
+    }
+    lastWorkEffortId = timeEntry.getString("workEffortId");
+}
+if (lastWorkEffortId != null) {
+        plannedHours = timeEntry.getRelatedOne("WorkEffort").getRelated("WorkEffortSkillStandard");
+        ph = plannedHours.iterator();
+        pHours = 0.00;
+        while(ph.hasNext()) {
+            plannedHour = ph.next();
+            if (plannedHour.get("estimatedDuration") != null) {
+                pHours += plannedHour.get("estimatedDuration");
+            }
+        }
+    entry.put("plannedHours", pHours);
+    entry.put("total", taskTotal);
+    entries.add(entry);
+    }
+for (c=0; c < 3; c++) { // add 5 empty lines
+    entries.add(UtilMisc.toMap("timesheetId", timesheet.get("timesheetId")));
+}
+if (lastWorkEffortId != null) {
+    entry = UtilMisc.toMap("timesheetId", timesheet.get("timesheetId"));
+    entry.put("0", day0Total);
+    entry.put("1", day1Total);
+    entry.put("2", day2Total);
+    entry.put("3", day3Total);
+    entry.put("4", day4Total);
+    entry.put("5", day5Total);
+    entry.put("6", day6Total);
+    entry.put("workEffortId", "Totals");
+    entry.put("total", day0Total+day1Total+day2Total+day3Total+day4Total+day5Total+day6Total);
+        Debug.logInfo("=====" + entry, "");
+    entries.add(entry);
+}
+context.put("timeEntries", entries);
+  
+
+timesheetsDb = delegator.findByAnd("Timesheet",
+            UtilMisc.toMap("partyId", userLogin.getString("partyId")),
+            UtilMisc.toList("fromDate DESC"));
+timesheets = new LinkedList();
+ts = timesheetsDb.iterator();
+while(ts.hasNext()) {
+    timesheetDb = ts.next();
+    timesheet = FastMap.newInstance();
+    timesheet.putAll(timesheetDb);
+    entries = timesheetDb.getRelated("TimeEntry");
+    te = entries.iterator();
+    hours = 0.00;
+    while(te.hasNext()) {
+        timeEntry = te.next();
+        if (timeEntry.get("hours") != null) {
+            hours += timeEntry.getDouble("hours").doubleValue();
+        }
+    }
+    timesheet.put("weekNumber", UtilDateTime.weekNumber(timesheetDb.getTimestamp("fromDate")));
+    timesheet.put("hours", hours);
+    timesheets.add(timesheet);
+}
+context.put("timesheets", timesheets);
+

Propchange: ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/EditWeekTimesheet.bsh
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/EditWeekTimesheet.bsh
------------------------------------------------------------------------------
    svn:keywords = "Date Rev Author URL Id"

Propchange: ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/actions/EditWeekTimesheet.bsh
------------------------------------------------------------------------------
    svn:mime-type = text/plain

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=602651&r1=602650&r2=602651&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/controller.xml (original)
+++ ofbiz/trunk/specialpurpose/projectmgr/webapp/projectmgr/WEB-INF/controller.xml Sun Dec  9 00:06:00 2007
@@ -294,12 +294,18 @@
         <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="updateMyTimesheet">
+        <security https="true" auth="true"/>
+        <event type="service-multi" invoke="updateTimeEntryByWorkeffort"/>
+        <response name="success" type="view" value="MyTimesheets"/>
+        <response name="error" type="view" value="MyTimesheets"/>
+    </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"/>

Modified: ofbiz/trunk/specialpurpose/projectmgr/widget/CommonScreens.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/projectmgr/widget/CommonScreens.xml?rev=602651&r1=602650&r2=602651&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/projectmgr/widget/CommonScreens.xml (original)
+++ ofbiz/trunk/specialpurpose/projectmgr/widget/CommonScreens.xml Sun Dec  9 00:06:00 2007
@@ -154,41 +154,65 @@
             </widgets>
         </section>
     </screen>
-    <screen name="CommonTimesheetDecorator">
-        <section>
-            <actions>
-                <set field="headerItem" value="timesheet"/>
-                <set field="timesheetId" from-field="parameters.timesheetId"/>
-                <entity-one entity-name="Timesheet" value-name="timesheet"/>
-            </actions>
-            <widgets>
-                <decorator-screen name="main-decorator" location="${parameters.mainDecoratorLocation}">
-                    <decorator-section name="body">
-                        <section>
-                            <condition>
-                                <if-has-permission permission="WORKEFFORTMGR" action="_VIEW"/>
-                            </condition>
-                            <widgets>
-                                <section>
-                                    <condition><not><if-empty field-name="timesheetId"/></not></condition>
-                                    <widgets>
-                                        <include-menu name="TimesheetTabBar" location="component://projectmgr/widget/Menus.xml"/>
-                                        <container><label style="head1">${uiLabelMap.TimesheetTimesheetId}: ${timesheetId}</label></container>
-                                    </widgets>
-                                </section>
-                                
-                                <decorator-section-include name="body"/>
-                            </widgets>
-                            <fail-widgets>
-                                <label style="head3">${uiLabelMap.WorkEffortViewPermissionError}</label>
-                            </fail-widgets>
-                        </section>
-                    </decorator-section>
-                </decorator-screen>
-            </widgets>
-        </section>
-    </screen>
-
+    <screen name="CommonTimesheetDecorator">
+        <section>
+            <actions>
+                <set field="headerItem" value="timesheet"/>
+                <set field="timesheetId" from-field="parameters.timesheetId"/>
+                <entity-one entity-name="Timesheet" value-name="timesheet"/>
+            </actions>
+            <widgets>
+                <decorator-screen name="main-decorator" location="${parameters.mainDecoratorLocation}">
+                    <decorator-section name="body">
+                        <section>
+                            <condition>
+                                <if-has-permission permission="WORKEFFORTMGR" action="_VIEW"/>
+                            </condition>
+                            <widgets>
+                                <section>
+                                    <condition><not><if-empty field-name="timesheetId"/></not></condition>
+                                    <widgets>
+                                        <include-menu name="TimesheetTabBar" location="component://projectmgr/widget/Menus.xml"/>
+                                        <container><label style="head1">${uiLabelMap.TimesheetTimesheetId}: ${timesheetId}</label></container>
+                                    </widgets>
+                                </section>
+                                
+                                <decorator-section-include name="body"/>
+                            </widgets>
+                            <fail-widgets>
+                                <label style="head3">${uiLabelMap.WorkEffortViewPermissionError}</label>
+                            </fail-widgets>
+                        </section>
+                    </decorator-section>
+                </decorator-screen>
+            </widgets>
+        </section>
+    </screen>
+    <screen name="CommonMyTimeDecorator">
+        <section>
+            <actions>
+                <set field="headerItem" value="mytime"/>
+            </actions>
+            <widgets>
+                <decorator-screen name="main-decorator" location="${parameters.mainDecoratorLocation}">
+                    <decorator-section name="body">
+                        <section>
+                            <condition>
+                                <if-has-permission permission="WORKEFFORTMGR" action="_VIEW"/>
+                            </condition>
+                            <widgets>
+                                <decorator-section-include name="body"/>
+                            </widgets>
+                            <fail-widgets>
+                                <label style="head3">${uiLabelMap.WorkEffortViewPermissionError}</label>
+                            </fail-widgets>
+                        </section>
+                    </decorator-section>
+                </decorator-screen>
+            </widgets>
+        </section>
+    </screen>
+    
     <screen name="CommonCalendarDecorator">
         <section>
             <actions>

Modified: ofbiz/trunk/specialpurpose/projectmgr/widget/TimeSheetScreens.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/projectmgr/widget/TimeSheetScreens.xml?rev=602651&r1=602650&r2=602651&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/projectmgr/widget/TimeSheetScreens.xml (original)
+++ ofbiz/trunk/specialpurpose/projectmgr/widget/TimeSheetScreens.xml Sun Dec  9 00:06:00 2007
@@ -19,7 +19,7 @@
 -->
 
 <screens xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/widget-screen.xsd">
+        xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/widget-screen.xsd">
     <screen name="FindTimeSheet">
         <section>
             <actions>
@@ -45,19 +45,19 @@
             </widgets>
         </section>
     </screen>
-    <screen name="EditTimeSheet">
-        <section>
-            <actions>
-                <set field="titleProperty" value="PageTitleFindTimesheet"/>
-                <set field="headerItem" value="timesheet"/>
-                <set field="tabButtonItem" value="edittimesheet"/>
-                <set field="labelTitleProperty" value="PageTitleAddTimesheet"/>
-                <entity-one entity-name="Timesheet" value-name="timesheet"/>
-            </actions>
-            <widgets>
-                <decorator-screen name="CommonTimesheetDecorator" location="${parameters.mainDecoratorLocation}">
-                    <decorator-section name="body">                                                  
-                        <section>          
+    <screen name="EditTimeSheet1">
+        <section>
+            <actions>
+                <set field="titleProperty" value="PageTitleFindTimesheet"/>
+                <set field="headerItem" value="timesheet"/>
+                <set field="tabButtonItem" value="edittimesheet"/>
+                <set field="labelTitleProperty" value="PageTitleAddTimesheet"/>
+                <entity-one entity-name="Timesheet" value-name="timesheet"/>
+            </actions>
+            <widgets>
+                <decorator-screen name="CommonTimesheetDecorator" location="${parameters.mainDecoratorLocation}">
+                    <decorator-section name="body">                                                  
+                        <section>          
                             <widgets>
                                 <container style="screenlet">
                                     <container style="screenlet-title-bar"><label style="boxhead">${uiLabelMap.PageTitleEditTimesheet} # ${timesheet.timesheetId}</label></container>                                
@@ -65,13 +65,45 @@
                                         <include-form name="EditTimesheet" location="component://workeffort/widget/TimesheetForms.xml"/>
                                     </container>
                                 </container>
-                            </widgets>
-                        </section>
-                    </decorator-section>
-                </decorator-screen>
-            </widgets>
-        </section>
-    </screen>
+                            </widgets>
+                        </section>
+                    </decorator-section>
+                </decorator-screen>
+            </widgets>
+        </section>
+    </screen>
+    <screen name="MyTimesheets">
+        <section>
+            <actions>
+                <set field="titleProperty" value="PageTitleFindTimesheet"/>
+                <set field="tabButtonItem" value="edittimesheet"/>
+                <set field="labelTitleProperty" value="PageTitleAddTimesheet"/>
+                <script location="component://projectmgr/webapp/projectmgr/WEB-INF/actions/EditWeekTimesheet.bsh"/>
+            </actions>
+            <widgets>
+                <decorator-screen name="CommonMyTimeDecorator" location="${parameters.mainDecoratorLocation}">
+                    <decorator-section name="body">                                                  
+                        <section>          
+                            <widgets>
+                                <container style="screenlet">
+                                    <container style="screenlet-title-bar"><label style="boxhead">${uiLabelMap.PageTitleEditCurrentTimesheet} # ${timesheet.timesheetId} week: ${weekNumber}</label></container>                                
+                                    <container style="screenlet-body">
+                                        <include-form name="EditWeekTimesheet" location="component://projectmgr/widget/forms/TimeSheetForms.xml"/>
+                                    </container>
+                                </container>
+                                <container style="screenlet">
+                                    <container style="screenlet-title-bar"><label style="boxhead">${uiLabelMap.PageTitleMyTimesheets} # ${timesheet.timesheetId}</label></container>                                
+                                    <container style="screenlet-body">
+                                        <include-form name="ListTimeSheets" location="component://projectmgr/widget/forms/TimeSheetForms.xml"/>
+                                    </container>
+                                </container>
+                            </widgets>
+                        </section>
+                    </decorator-section>
+                </decorator-screen>
+            </widgets>
+        </section>
+    </screen>
     <screen name="EditTimeSheetEntries">
         <section>
             <actions>
@@ -98,96 +130,6 @@
                                 <include-form name="AddTimesheetEntry" location="component://projectmgr/widget/forms/TimeSheetForms.xml"/>
                             </container>
                         </container>
-                    </decorator-section>
-                </decorator-screen>
-            </widgets>
-        </section>
-    </screen>
-    <screen name="MyTimesheets">
-        <section>
-            <actions>
-                <set field="headerItem" value="mytime"/>
-                <set field="titleProperty" value="WorkEffortMyTimesheets"/>
-                
-                <set field="queryString" from-field="result.queryString"/>
-                <set field="viewIndex" from-field="parameters.VIEW_INDEX" type="Integer"/>
-                <set field="viewSize" from-field="parameters.VIEW_SIZE" type="Integer" default-value="10"/>
-                <entity-condition entity-name="Timesheet" list-name="currentTimesheetList">
-                    <condition-list combine="and">
-                        <condition-expr field-name="partyId" env-name="userLogin.partyId"/>
-                        <condition-expr field-name="fromDate" operator="less-equals" env-name="nowTimestamp"/>
-                        <condition-list combine="or">
-                            <condition-expr field-name="thruDate" operator="greater-equals" env-name="nowTimestamp"/>
-                            <condition-expr field-name="thruDate" env-name="null"/>
-                        </condition-list>
-                    </condition-list>
-                </entity-condition>
-            </actions>
-            <widgets>
-                <decorator-screen name="main-decorator" location="${parameters.mainDecoratorLocation}">
-                    <decorator-section name="body">
-                        <container><label text="${uiLabelMap.WorkEffortMyCurrentTimesheets}" style="head2"/></container>
-                        <container>
-                            <link text="${uiLabelMap.PageTitleCreateWeekTimesheet}" target="createTimesheetForThisWeek?partyId=${userLogin.partyId}" style="buttontext"/>
-                            <link text="${uiLabelMap.TimesheetCreate}" target="EditTimesheet?partyId=${userLogin.partyId}" style="buttontext"/>
-                        </container>
-                        <iterate-section entry-name="currentTimesheet" list-name="currentTimesheetList">
-                            <section>
-                                <actions>
-                                    <entity-condition entity-name="TimeEntry" list-name="currentTimeEntryList">
-                                        <condition-list combine="and">
-                                            <condition-expr field-name="partyId" env-name="userLogin.partyId"/>
-                                            <condition-expr field-name="timesheetId" env-name="currentTimesheet.timesheetId"/>
-                                        </condition-list>
-                                    </entity-condition>
-                                </actions>
-                                <widgets>
-                                    <container>
-                                        <label style="tableheadtext" text="${uiLabelMap.Timesheet}: ${currentTimesheet.fromDate} ${uiLabelMap.CommonThru} ${currentTimesheet.thruDate} ${currentTimesheet.comments}"/>
-                                        <link target="EditTimesheet?timesheetId=${currentTimesheet.timesheetId}" text="${currentTimesheet.timesheetId}" style="buttontext"></link>
-                                    </container>
-                                    <iterate-section entry-name="currentTimeEntry" list-name="currentTimeEntryList">
-                                        <section>
-                                            <actions>
-                                                <entity-one entity-name="RateType" value-name="currentRateType" auto-field-map="false">
-                                                    <field-map field-name="rateTypeId" env-name="currentTimeEntry.rateTypeId"/>
-                                                </entity-one>
-                                            </actions>
-                                            <widgets>
-                                                <container>
-                                                    <label style="tabletext" text="${uiLabelMap.TimesheetTimeEntry} ${uiLabelMap.CommonFor} ${currentTimeEntry.fromDate} "/>
-                                                    <label style="tableheadtext" text="${currentTimeEntry.hours} ${uiLabelMap.TimesheetHours} "/>
-                                                    <label style="tabletext" text="${currentTimeEntry.comments} [${currentRateType.description}]"/>
-                                                    <section>
-                                                        <condition><not><if-empty field-name="currentTimeEntry.workEffortId"/></not></condition>
-                                                        <widgets><link target="WorkEffortSummary?workEffortId=${currentTimeEntry.workEffortId}" text="${uiLabelMap.WorkEffortWorkEffort}: ${currentTimeEntry.workEffortId}" style="linktext"/></widgets>
-                                                    </section>
-                                                </container>
-                                            </widgets>
-                                        </section>
-                                    </iterate-section>
-                                    <section>
-                                        <condition><if-compare-field field-name="parameters.showQuickEntry" operator="equals" to-field-name="currentTimesheet.timesheetId"/></condition>
-                                        <widgets>
-                                            <include-form name="QuickCreateTimeEntry" location="component://projectmgr/widget/forms/TimeSheetForms.xml"/>
-                                        </widgets>
-                                        <fail-widgets>
-                                            <container>
-                                                <link target="MyTimesheets?showQuickEntry=${currentTimesheet.timesheetId}" text="${uiLabelMap.TimesheetQuickTimeEntry}" style="buttontext"></link>
-                                                <link target="EditTimesheetEntries?timesheetId=${currentTimesheet.timesheetId}" text="${uiLabelMap.TimesheetTimeEntries}" style="buttontext"></link>
-                                            </container>
-                                        </fail-widgets>
-                                    </section>
-                                </widgets>
-                            </section>
-                        </iterate-section>
-                        
-                        <!-- createQuickTimeEntry -->
-                        
-                        <container><label text="${uiLabelMap.WorkEffortMyRates}" style="head2"/></container>
-                        <include-form name="ListMyRates" location="component://workeffort/widget/TimesheetForms.xml"/>
-                        <container><label text="${uiLabelMap.WorkEffortMyTimesheets}" style="head2"/></container>
-                        <include-form name="ListMyTimesheets" location="component://workeffort/widget/TimesheetForms.xml"/>
                     </decorator-section>
                 </decorator-screen>
             </widgets>

Modified: ofbiz/trunk/specialpurpose/projectmgr/widget/forms/TimeSheetForms.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/projectmgr/widget/forms/TimeSheetForms.xml?rev=602651&r1=602650&r2=602651&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/projectmgr/widget/forms/TimeSheetForms.xml (original)
+++ ofbiz/trunk/specialpurpose/projectmgr/widget/forms/TimeSheetForms.xml Sun Dec  9 00:06:00 2007
@@ -19,22 +19,57 @@
 -->
 <forms xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/widget-form.xsd">
+    <form name="EditWeekTimesheet" type="multi" list-name="timeEntries" use-row-submit="true"
+        separate-columns="true" target="updateMyTimesheet">
+        <field name="timesheetId"><hidden/></field>
+        <field name="workEffortId" title="${uiLabelMap.ProjectMgrTaskName}">
+            <drop-down allow-empty="true">
+                <entity-options entity-name="ProjectAndPhaseAndTask" description="${workEffortName} -- ${phaseName} -- ${projectName}">
+                    <entity-order-by field-name="projectName"/>
+                    <entity-order-by field-name="phaseName"/>
+                    <entity-order-by field-name="workEffortName"/>
+                </entity-options>
+            </drop-down>
+        </field>
+        <field name="0" parameter-name="hoursDay0" title="Sun"><text size="5"/></field>
+        <field name="1" parameter-name="hoursDay1" title="Mon"><text size="5"/></field>
+        <field name="2" parameter-name="hoursDay2" title="Tue"><text size="5"/></field>
+        <field name="3" parameter-name="hoursDay3" title="Wen"><text size="5"/></field>
+        <field name="4" parameter-name="hoursDay4" title="Thu"><text size="5"/></field>
+        <field name="5" parameter-name="hoursDay5" title="Fri"><text size="5"/></field>
+        <field name="6" parameter-name="hoursDay6" title="Sat"><text size="5"/></field>
+        <field name="total" title="Act Total"><display/></field>
+        <field name="plannedHours" title="Plan.Hrs"><display/></field>
+        <field name="update"><submit button-type="button"/></field>
+        <field name="_rowSubmit"><hidden value="Y"/></field>
+    </form>
 
-    <form name="ListFindTimeSheet" type="list" list-name="timeSheetList" paginate-target="FindTimeSheet">
-        <field name="timesheetId" title="${uiLabelMap.TimesheetTimesheetId}" widget-style="buttontext">
-            <hyperlink also-hidden="false" description="${timesheetId}" target="EditTimeSheet?timesheetId=${timesheetId}"/>
-        </field>
-        <field name="partyId" title="${uiLabelMap.PartyParty}"><display/></field>
-        <field name="clientPartyId" title="${uiLabelMap.FormFieldTitle_clientPartyId}"><display/></field>
-        <field name="fromDate" title="${uiLabelMap.CommonFromDate}"><display/></field>
-        <field name="thruDate" title="${uiLabelMap.CommonThruDate}"><display/></field>
-        <field name="comments" title="${uiLabelMap.CommonComments}"><display/></field>
-        <field name="deleteLink" title="${uiLabelMap.CommonDelete}" widget-style="buttontext">
-            <hyperlink target="deleteTimeSheet?timesheetId=${timesheetId}&amp;findAll=Y"
-                description="${uiLabelMap.CommonDelete}" also-hidden="false"/>
-        </field>
+    <form name="ListTimeSheets" type="list" list-name="timesheets" paginate-target="EditTimesheet">
+        <field name="timesheetId" title="${uiLabelMap.TimesheetTimesheetId}" widget-style="buttontext">
+            <hyperlink also-hidden="false" description="${timesheetId}" target="MyTimesheets?timesheetId=${timesheetId}"/>
+        </field>
+        <field name="weekNumber"><display/></field>
+        <field name="statusId"><display-entity entity-name="StatusItem" description="${description}"/></field>
+        <field name="fromDate" title="${uiLabelMap.CommonFromDate}"><display type="date"/></field>
+        <field name="thruDate" title="${uiLabelMap.CommonThruDate}"><display type="date"/></field>
+        <field name="hours"><display/></field>
+        <field name="comments" title="${uiLabelMap.CommonComments}"><display/></field>
+    </form>
+    <form name="ListFindTimeSheet" type="list" list-name="timeSheetList" paginate-target="FindTimeSheet">
+        <field name="timesheetId" title="${uiLabelMap.TimesheetTimesheetId}" widget-style="buttontext">
+            <hyperlink also-hidden="false" description="${timesheetId}" target="EditTimeSheet?timesheetId=${timesheetId}"/>
+        </field>
+        <field name="partyId" title="${uiLabelMap.PartyParty}"><display/></field>
+        <field name="clientPartyId" title="${uiLabelMap.FormFieldTitle_clientPartyId}"><display/></field>
+        <field name="fromDate" title="${uiLabelMap.CommonFromDate}"><display/></field>
+        <field name="thruDate" title="${uiLabelMap.CommonThruDate}"><display/></field>
+        <field name="comments" title="${uiLabelMap.CommonComments}"><display/></field>
+        <field name="deleteLink" title="${uiLabelMap.CommonDelete}" widget-style="buttontext">
+            <hyperlink target="deleteTimeSheet?timesheetId=${timesheetId}&amp;findAll=Y"
+                description="${uiLabelMap.CommonDelete}" also-hidden="false"/>
+        </field>
     </form>
-
+    
     <form name="AddTimesheetEntry" type="single" target="createTimesheetEntry" title="">
         <auto-fields-service service-name="createTimeEntry"/>