Author: hansbak
Date: Sat Oct  9 02:27:39 2010
New Revision: 1006104

URL: http://svn.apache.org/viewvc?rev=1006104&view=rev
Log:
when generate invoice fom timesheet combine invoice items with the same 
description and item amounts

Modified:
    
ofbiz/trunk/applications/workeffort/script/org/ofbiz/workeffort/timesheet/TimesheetServices.xml

Modified: 
ofbiz/trunk/applications/workeffort/script/org/ofbiz/workeffort/timesheet/TimesheetServices.xml
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/applications/workeffort/script/org/ofbiz/workeffort/timesheet/TimesheetServices.xml?rev=1006104&r1=1006103&r2=1006104&view=diff
==============================================================================
--- 
ofbiz/trunk/applications/workeffort/script/org/ofbiz/workeffort/timesheet/TimesheetServices.xml
 (original)
+++ 
ofbiz/trunk/applications/workeffort/script/org/ofbiz/workeffort/timesheet/TimesheetServices.xml
 Sat Oct  9 02:27:39 2010
@@ -152,6 +152,16 @@ under the License.
         <set field="invoiceItemMap.taxableFlag" value="N"/>
         <set field="invoiceItemMap.invoiceItemTypeId" value="INV_TE_ITEM"/>
         <set field="invoiceItemMap.uomId" value="TF_hr"/>
+        <set field="invoiceItemMap.description" 
value="${workEffort.workEffortName} [Task:${workEffort.workEffortId}]"/>
+        <get-related value-field="workEffort" 
relation-name="CustRequestWorkEffort" list="custRequestWorkEfforts"/>
+        <if-not-empty field="custRequestWorkEfforts">
+            <first-from-list entry="custRequestWorkEffort" 
list="custRequestWorkEfforts"/>
+            <get-related-one value-field="custRequestWorkEffort" 
relation-name="CustRequest" to-value-field="custRequest"/>
+            <if-not-empty field="custRequest">
+                <set field="invoiceItemDescription" 
value="${custRequest.custRequestName} [CRQ:${custRequest.custRequestId}] 
${custRequest.description}"/>
+                <set field="invoiceItemMap.description" 
value="${groovy:invoiceItemDescription.size()&gt;255?invoiceItemDescription.substring(0,251)+&quot;
 ...&quot;:invoiceItemDescription}"/>
+            </if-not-empty>
+        </if-not-empty>
         <iterate entry="timeEntry" list="timeEntryList">
             <if>
                 <condition>
@@ -203,27 +213,26 @@ under the License.
                             <call-service service-name="getTimeEntryRate" 
in-map-name="getTimeEntryRate">
                                 <result-to-field result-name="rateAmount"/>
                             </call-service>
-                            <!--  check if the RateTypeId changed or the first 
time entry record -->
+                            <!--  check if the RateTypeId changed or the first 
time entry record and invoice item is not exist with the same amount and 
description-->
+                            <entity-and 
list="existAmountAndDescriptionInvoiceItems" entity-name="InvoiceItem">
+                                <field-map field-name="invoiceId" 
from-field="invoiceItemMap.invoiceId"/>
+                                <field-map field-name="amount" 
from-field="rateAmount"/>
+                                <field-map field-name="description" 
from-field="invoiceItemMap.description"/>
+                            </entity-and>
+                            <set field="invoiceItemMap.invoiceItemSeqId" 
from-field="existAmountAndDescriptionInvoiceItems[0].invoiceItemSeqId"/>
                             <if>
                                 <condition>
-                                    <or>
-                                        <if-empty field="oldRateAmount"/>
-                                        <if-compare-field field="rateAmount" 
operator="not-equals" to-field="oldRateAmount"/>
-                                    </or>
+                                    <and>
+                                        <or>
+                                            <if-empty field="oldRateAmount"/>
+                                            <if-compare-field 
field="rateAmount" operator="not-equals" to-field="oldRateAmount"/>
+                                        </or>
+                                        <if-empty 
field="existAmountAndDescriptionInvoiceItems"/>
+                                    </and>
                                 </condition>
                                 <then>
                                     <set field="invoiceItemMap.amount" 
from-field="rateAmount" default-value="0.0" type="BigDecimal"/>
                                     <if-compare 
field="parameters.combineInvoiceItem" operator="equals" value="Y" >
-                                        <set 
field="invoiceItemMap.description" value="${workEffort.workEffortName} 
[Task:${workEffort.workEffortId}]"/>
-                                        <get-related value-field="workEffort" 
relation-name="CustRequestWorkEffort" list="custRequestWorkEfforts"/>
-                                        <if-not-empty 
field="custRequestWorkEfforts">
-                                            <first-from-list 
entry="custRequestWorkEffort" list="custRequestWorkEfforts"/>
-                                            <get-related-one 
value-field="custRequestWorkEffort" relation-name="CustRequest" 
to-value-field="custRequest"/>
-                                            <if-not-empty field="custRequest">
-                                                <set 
field="invoiceItemDescription" value="${custRequest.custRequestName} 
[CRQ:${custRequest.custRequestId}] ${custRequest.description}"/>
-                                                <set 
field="invoiceItemMap.description" 
value="${groovy:invoiceItemDescription.size()&gt;255?invoiceItemDescription.substring(0,251)+&quot;
 ...&quot;:invoiceItemDescription}"/>
-                                            </if-not-empty>
-                                        </if-not-empty>
                                         <set field="invoiceItemMap.quantity" 
from-field="timeEntry.hours" default-value="0.0" type="BigDecimal"/>
                                         <clear-field 
field="invoiceItemMap.invoiceItemSeqId"/><!-- make sure a new one is created -->
                                         <call-service 
service-name="createInvoiceItem" in-map-name="invoiceItemMap">
@@ -233,10 +242,11 @@ under the License.
                                 </then>
                                 <else>
                                     <if-compare 
field="parameters.combineInvoiceItem" operator="equals" value="Y" >
-                                        <!-- or combine them when it is the 
same rate -->
+                                        <!-- or combine them when it is the 
same rate, amount and description-->
                                         <calculate 
field="invoiceItemMap.quantity">
                                             <calcop operator="get" 
field="invoiceItemMap.quantity"/>
                                             <calcop operator="add" 
field="timeEntry.hours"/>
+                                            <calcop operator="add" 
field="existAmountAndDescriptionInvoiceItems[0].quantity"/>
                                         </calculate>
                                         <call-service 
service-name="updateInvoiceItem" in-map-name="invoiceItemMap"/>
                                     </if-compare>


Reply via email to