You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ofbiz.apache.org by Adrian Crum <ad...@sandglass-software.com> on 2012/08/04 09:43:27 UTC

Re: svn commit: r1368822 - in /ofbiz/trunk/applications: order/entitydef/ order/servicedef/ product/data/ product/entitydef/ product/script/org/ofbiz/product/product/ product/script/org/ofbiz/product/test/ product/servicedef/ product/widget/catalog/

This comment isn't about this specific commit, but about the code it 
modifies. The JobSandbox entity should not be manipulated outside of the 
Job Scheduler - it will cause erratic behavior.

-Adrian

On 8/3/2012 8:52 AM, hansbak@apache.org wrote:
> Author: hansbak
> Date: Fri Aug  3 07:52:28 2012
> New Revision: 1368822
>
> URL: http://svn.apache.org/viewvc?rev=1368822&view=rev
> Log:
> improve the groupbuying function by properly return sales numbers when cancelling an order.
>
> Modified:
>      ofbiz/trunk/applications/order/entitydef/entitymodel.xml
>      ofbiz/trunk/applications/order/servicedef/secas.xml
>      ofbiz/trunk/applications/order/servicedef/services.xml
>      ofbiz/trunk/applications/product/data/ProductTypeData.xml
>      ofbiz/trunk/applications/product/entitydef/entitymodel.xml
>      ofbiz/trunk/applications/product/script/org/ofbiz/product/product/ProductServices.xml
>      ofbiz/trunk/applications/product/script/org/ofbiz/product/test/GroupOrderTest.xml
>      ofbiz/trunk/applications/product/servicedef/services.xml
>      ofbiz/trunk/applications/product/widget/catalog/ProductForms.xml
>
> Modified: ofbiz/trunk/applications/order/entitydef/entitymodel.xml
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/entitydef/entitymodel.xml?rev=1368822&r1=1368821&r2=1368822&view=diff
> ==============================================================================
> --- ofbiz/trunk/applications/order/entitydef/entitymodel.xml (original)
> +++ ofbiz/trunk/applications/order/entitydef/entitymodel.xml Fri Aug  3 07:52:28 2012
> @@ -769,6 +769,23 @@ under the License.
>               <key-map field-name="parentGroupSeqId" rel-field-name="orderItemGroupSeqId"/>
>           </relation>
>       </entity>
> +    <entity entity-name="OrderItemGroupOrder"
> +            package-name="org.ofbiz.order.order"
> +            title="Order Item Group Order Entity">
> +      <field name="orderId" type="id-ne"></field>
> +      <field name="orderItemSeqId" type="id-ne"></field>
> +      <field name="groupOrderId" type="id-ne"></field>
> +      <prim-key field="orderId"/>
> +      <prim-key field="orderItemSeqId"/>
> +      <prim-key field="groupOrderId"/>
> +      <relation type="one" fk-name="OIGO_ORDER_ITEM" rel-entity-name="OrderItem">
> +        <key-map field-name="orderId"/>
> +        <key-map field-name="orderItemSeqId"/>
> +      </relation>
> +      <relation type="one" fk-name="OIGO_PRD_GROUP_ORDER" rel-entity-name="ProductGroupOrder">
> +        <key-map field-name="groupOrderId"/>
> +      </relation>
> +    </entity>
>       <entity entity-name="OrderItemPriceInfo"
>               package-name="org.ofbiz.order.order"
>               never-cache="true"
>
> Modified: ofbiz/trunk/applications/order/servicedef/secas.xml
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/servicedef/secas.xml?rev=1368822&r1=1368821&r2=1368822&view=diff
> ==============================================================================
> --- ofbiz/trunk/applications/order/servicedef/secas.xml (original)
> +++ ofbiz/trunk/applications/order/servicedef/secas.xml Fri Aug  3 07:52:28 2012
> @@ -60,6 +60,7 @@ under the License.
>       <eca service="changeOrderItemStatus" event="commit">
>           <condition field-name="statusId" operator="equals" value="ITEM_CANCELLED"/>
>           <action service="cancelOrderInventoryReservation" mode="sync"/>
> +        <action service="cancleOrderItemGroupOrder" mode="sync"/>
>           <action service="recalcShippingTotal" mode="sync"/>
>           <action service="recalcTaxTotal" mode="sync"/>
>           <action service="resetGrandTotal" mode="sync"/>
> @@ -447,8 +448,4 @@ under the License.
>           <condition field-name="orderTypeId" operator="equals" value="SALES_ORDER"/>
>           <action service="checkOrderItemForProductGroupOrder" mode="sync"/>
>       </eca>
> -    <eca service="changeOrderStatus" event="commit">
> -        <condition field-name="statusId" operator="equals" value="ORDER_CANCELLED"/>
> -        <action service="checkOrderItemForProductGroupOrder" mode="sync"/>
> -    </eca>
>   </service-eca>
>
> Modified: ofbiz/trunk/applications/order/servicedef/services.xml
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/servicedef/services.xml?rev=1368822&r1=1368821&r2=1368822&view=diff
> ==============================================================================
> --- ofbiz/trunk/applications/order/servicedef/services.xml (original)
> +++ ofbiz/trunk/applications/order/servicedef/services.xml Fri Aug  3 07:52:28 2012
> @@ -1142,4 +1142,10 @@ under the License.
>           <auto-attributes mode="IN" entity-name="OrderItemAttribute" include="pk" optional="false"/>
>       </service>
>       
> +    <!-- Order Item Group Order -->
> +    <service name="createOrderItemGroupOrder" engine="entity-auto" default-entity-name="OrderItemGroupOrder" invoke="create" auth="true">
> +        <description>Create Order Item Group Order</description>
> +        <auto-attributes mode="IN" entity-name="OrderItemGroupOrder" include="pk" optional="false"/>
> +    </service>
> +
>   </services>
>
> Modified: ofbiz/trunk/applications/product/data/ProductTypeData.xml
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/data/ProductTypeData.xml?rev=1368822&r1=1368821&r2=1368822&view=diff
> ==============================================================================
> --- ofbiz/trunk/applications/product/data/ProductTypeData.xml (original)
> +++ ofbiz/trunk/applications/product/data/ProductTypeData.xml Fri Aug  3 07:52:28 2012
> @@ -650,4 +650,10 @@ under the License.
>       <Enumeration description="Remove Logo" enumCode="REMOVE_LOGO" enumId="REMOVE_LOGO" sequenceId="02" enumTypeId="IMAGE_REJECT_REASON"/>
>       <Enumeration description="Other" enumCode="OTHER" enumId="OTHER" sequenceId="03" enumTypeId="IMAGE_REJECT_REASON"/>
>       
> +    <!-- Group Order -->
> +    <StatusType description="Group Order Status" hasTable="N" parentTypeId="" statusTypeId="GROUP_ORDER_STATUS"/>
> +    <StatusItem description="Created" sequenceId="01" statusCode="CREATED" statusId="GO_CREATED" statusTypeId="GROUP_ORDER_STATUS"/>
> +    <StatusItem description="Success" sequenceId="02" statusCode="SUCCESS" statusId="GO_SUCCESS" statusTypeId="GROUP_ORDER_STATUS"/>
> +    <StatusItem description="Cancelled" sequenceId="03" statusCode="CANCELLED" statusId="GO_CANCELLED" statusTypeId="GROUP_ORDER_STATUS"/>
> +
>   </entity-engine-xml>
>
> Modified: ofbiz/trunk/applications/product/entitydef/entitymodel.xml
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/entitydef/entitymodel.xml?rev=1368822&r1=1368821&r2=1368822&view=diff
> ==============================================================================
> --- ofbiz/trunk/applications/product/entitydef/entitymodel.xml (original)
> +++ ofbiz/trunk/applications/product/entitydef/entitymodel.xml Fri Aug  3 07:52:28 2012
> @@ -4812,6 +4812,7 @@ under the License.
>         <field name="productId" type="id-ne"></field>
>         <field name="fromDate" type="date-time"></field>
>         <field name="thruDate" type="date-time"></field>
> +      <field name="statusId" type="id-ne"></field>
>         <field name="reqOrderQty" type="fixed-point"></field>
>         <field name="soldOrderQty" type="fixed-point"></field>
>         <field name="jobId" type="id-ne"></field>
> @@ -4819,6 +4820,9 @@ under the License.
>         <relation type="one" fk-name="PROD_GROUP_ORDER" rel-entity-name="Product">
>           <key-map field-name="productId"/>
>         </relation>
> +      <relation type="one" fk-name="GROUP_ORDER_STATUS" rel-entity-name="StatusItem">
> +        <key-map field-name="statusId"/>
> +      </relation>
>         <relation type="one" fk-name="GROUP_ORDER_JOB" rel-entity-name="JobSandbox">
>           <key-map field-name="jobId"/>
>         </relation>
>
> Modified: ofbiz/trunk/applications/product/script/org/ofbiz/product/product/ProductServices.xml
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/script/org/ofbiz/product/product/ProductServices.xml?rev=1368822&r1=1368821&r2=1368822&view=diff
> ==============================================================================
> --- ofbiz/trunk/applications/product/script/org/ofbiz/product/product/ProductServices.xml (original)
> +++ ofbiz/trunk/applications/product/script/org/ofbiz/product/product/ProductServices.xml Fri Aug  3 07:52:28 2012
> @@ -1064,17 +1064,26 @@ under the License.
>           <entity-one entity-name="ProductGroupOrder" value-field="productGroupOrder"/>
>           <set-nonpk-fields value-field="productGroupOrder" map="parameters"/>
>           <store-value value-field="productGroupOrder"/>
> -
> -        <entity-one entity-name="JobSandbox" value-field="jobSandbox">
> -            <field-map field-name="jobId" from-field="productGroupOrder.jobId"/>
> -        </entity-one>
> -        <if-not-empty field="jobSandbox">
> -            <set field="jobSandbox.runTime" from-field="parameters.thruDate"/>
> -            <store-value value-field="jobSandbox"/>
> -        </if-not-empty>
> +
> +        <if-compare field="productGroupOrder.statusId" operator="equals" value="GO_CREATED">
> +            <entity-one entity-name="JobSandbox" value-field="jobSandbox">
> +                <field-map field-name="jobId" from-field="productGroupOrder.jobId"/>
> +            </entity-one>
> +            <if-not-empty field="jobSandbox">
> +                <set field="jobSandbox.runTime" from-field="parameters.thruDate"/>
> +                <store-value value-field="jobSandbox"/>
> +            </if-not-empty>
> +        </if-compare>
>       </simple-method>
>   
>       <simple-method method-name="deleteProductGroupOrder" short-description="Delete ProductGroupOrder">
> +        <entity-and entity-name="OrderItemGroupOrder" list="orderItemGroupOrders">
> +            <field-map field-name="groupOrderId" from-field="parameters.groupOrderId"/>
> +        </entity-and>
> +        <iterate entry="orderItemGroupOrder" list="orderItemGroupOrders">
> +            <remove-value value-field="orderItemGroupOrder"/>
> +        </iterate>
> +
>           <entity-one entity-name="ProductGroupOrder" value-field="productGroupOrder"/>
>           <remove-value value-field="productGroupOrder"/>
>           
> @@ -1114,7 +1123,7 @@ under the License.
>               <make-value entity-name="JobSandbox" value-field="jobSandbox"/>
>               <sequenced-id sequence-name="JobSandbox" field="jobSandbox.jobId"/>
>               <set field="jobId" from-field="jobSandbox.jobId"/>
> -            <set field="jobSandbox.jobName" value="Check Product GroupOrder Expired"/>
> +            <set field="jobSandbox.jobName" value="Check ProductGroupOrder Expired"/>
>               <set field="jobSandbox.runTime" from-field="parameters.thruDate"/>
>               <set field="jobSandbox.poolId" value="pool"/>
>               <set field="jobSandbox.statusId" value="SERVICE_PENDING"/>
> @@ -1130,7 +1139,6 @@ under the License.
>       </simple-method>
>   
>       <simple-method method-name="checkOrderItemForProductGroupOrder" short-description="Check OrderItem For ProductGroupOrder">
> -        <entity-one entity-name="OrderHeader" value-field="orderHeader"/>
>           <entity-and entity-name="OrderItem" list="orderItems">
>               <field-map field-name="orderId" from-field="parameters.orderId"/>
>           </entity-and>
> @@ -1151,92 +1159,94 @@ under the License.
>               <entity-and entity-name="ProductGroupOrder" list="productGroupOrders" filter-by-date="true">
>                   <field-map field-name="productId" from-field="productId"/>
>               </entity-and>
> -            <iterate entry="productGroupOrder" list="productGroupOrders">
> -                <if-compare field="orderHeader.statusId" operator="equals" value="ORDER_CREATED">
> -                    <calculate field="productGroupOrder.soldOrderQty">
> -                        <calcop field="productGroupOrder.soldOrderQty" operator="add">
> -                            <calcop field="orderItem.quantity" operator="get"/>
> -                        </calcop>
> -                    </calculate>
> -                </if-compare>
> -                <if-compare field="orderHeader.statusId" operator="equals" value="ORDER_CANCELLED">
> -                    <calculate field="productGroupOrder.soldOrderQty">
> -                        <calcop field="productGroupOrder.soldOrderQty" operator="subtract">
> -                            <calcop field="orderItem.quantity" operator="get"/>
> -                        </calcop>
> -                    </calculate>
> -                </if-compare>
> +            <if-not-empty field="productGroupOrders">
> +                <first-from-list entry="productGroupOrder" list="productGroupOrders"/>
> +                <calculate field="productGroupOrder.soldOrderQty">
> +                    <calcop field="productGroupOrder.soldOrderQty" operator="add">
> +                        <calcop field="orderItem.quantity" operator="get"/>
> +                    </calcop>
> +                </calculate>
>                   <store-value value-field="productGroupOrder"/>
> -            </iterate>
> +
> +                <set field="createOrderItemGroupOrderMap.orderId" from-field="orderItem.orderId"/>
> +                <set field="createOrderItemGroupOrderMap.orderItemSeqId" from-field="orderItem.orderItemSeqId"/>
> +                <set field="createOrderItemGroupOrderMap.groupOrderId" from-field="productGroupOrder.groupOrderId"/>
> +                <call-service service-name="createOrderItemGroupOrder" in-map-name="createOrderItemGroupOrderMap"/>
> +            </if-not-empty>
>           </iterate>
>       </simple-method>
> -
> -    <simple-method method-name="checkProductGroupOrderExpired" short-description="Check ProductGroupOrder Expired">
> -        <entity-one entity-name="ProductGroupOrder" value-field="productGroupOrder"/>
> -        <if-compare field="productGroupOrder.soldOrderQty" operator="greater-equals" value="${productGroupOrder.reqOrderQty}">
> -            <set field="newItemStatusId" value="ITEM_APPROVED"/>
> -        <else>
> -            <set field="newItemStatusId" value="ITEM_CANCELLED"/>
> -        </else>
> -        </if-compare>
> -
> -        <entity-one entity-name="Product" value-field="product">
> -            <field-map field-name="productId" from-field="productGroupOrder.productId"/>
> -        </entity-one>
> -        <if-compare field="product.isVirtual" operator="equals" value="Y">
> -            <entity-and entity-name="ProductAssoc" list="variantProductAssocs" filter-by-date="true">
> -                <field-map field-name="productId" from-field="productGroupOrder.productId"/>
> -                <field-map field-name="productAssocTypeId" value="PRODUCT_VARIANT"/>
> +
> +    <simple-method method-name="cancleOrderItemGroupOrder" short-description="Cancle OrderItemGroupOrder">
> +        <if-not-empty field="parameters.orderItemSeqId">
> +            <entity-and entity-name="OrderItem" list="orderItems">
> +                <field-map field-name="orderId" from-field="parameters.orderId"/>
> +                <field-map field-name="orderItemSeqId" from-field="parameters.orderItemSeqId" />
>               </entity-and>
> -            <iterate entry="variantProductAssoc" list="variantProductAssocs">
> -                <set field="findOrderItemMap.productId" from-field="variantProductAssoc.productIdTo"/>
> -                <set field="findOrderItemMap.newItemStatusId" from-field="newItemStatusId"/>
> -                <set field="findOrderItemMap.fromDate" from-field="productGroupOrder.fromDate"/>
> -                <set field="findOrderItemMap.thruDate" from-field="productGroupOrder.thruDate"/>
> -                <call-service service-name="findOrderItemForProductGroupOrder" in-map-name="findOrderItemMap"/>
> -            </iterate>
>           <else>
> -            <set field="findOrderItemMap.productId" from-field="productGroupOrder.productId"/>
> -            <set field="findOrderItemMap.newItemStatusId" from-field="newItemStatusId"/>
> -            <set field="findOrderItemMap.fromDate" from-field="productGroupOrder.fromDate"/>
> -            <set field="findOrderItemMap.thruDate" from-field="productGroupOrder.thruDate"/>
> -            <call-service service-name="findOrderItemForProductGroupOrder" in-map-name="findOrderItemMap"/>
> +            <entity-and entity-name="OrderItem" list="orderItems">
> +                <field-map field-name="orderId" from-field="parameters.orderId"/>
> +            </entity-and>
>           </else>
> -        </if-compare>
> -    </simple-method>
> -
> -    <simple-method method-name="findOrderItemForProductGroupOrder" short-description="Find OrderItem For ProductGroupOrder">
> -        <entity-condition entity-name="OrderItem" list="orderItems">
> -            <condition-list combine="and">
> -                <condition-expr field-name="productId" operator="equals" from-field="parameters.productId"/>
> -                <condition-list combine="or">
> -                    <condition-expr field-name="statusId" operator="equals" value="ITEM_CREATED"/>
> -                    <condition-expr field-name="statusId" operator="equals" value="ITEM_APPROVED"/>
> -                </condition-list>
> -            </condition-list>
> -        </entity-condition>
> +        </if-not-empty>
>           <iterate entry="orderItem" list="orderItems">
> -            <entity-one value-field="orderHeader" entity-name="OrderHeader">
> +            <entity-and entity-name="OrderItemGroupOrder" list="orderItemGroupOrders">
>                   <field-map field-name="orderId" from-field="orderItem.orderId"/>
> -            </entity-one>
> -            <if>
> -                <condition>
> -                    <and>
> -                        <if-compare field="orderHeader.orderTypeId" operator="equals" value="SALES_ORDER"/>
> -                        <if-compare field="orderHeader.orderDate" operator="greater-equals" value="${parameters.fromDate}"/>
> -                        <if-compare field="orderHeader.orderDate" operator="less" value="${parameters.thruDate}"/>
> -                    </and>
> -                </condition>
> -                <then>
> -                    <set field="changeOrderItemStatusMap.orderId" from-field="orderItem.orderId"/>
> -                    <set field="changeOrderItemStatusMap.orderItemSeqId" from-field="orderItem.orderItemSeqId"/>
> -                    <set field="changeOrderItemStatusMap.statusId" from-field="parameters.newItemStatusId"/>
> -                    <call-service service-name="changeOrderItemStatus" in-map-name="changeOrderItemStatusMap"/>
> -                </then>
> -            </if>
> +                <field-map field-name="orderItemSeqId" from-field="orderItem.orderItemSeqId"/>
> +            </entity-and>
> +            <if-not-empty field="orderItemGroupOrders">
> +                <first-from-list entry="orderItemGroupOrder" list="orderItemGroupOrders"/>
> +                <entity-one entity-name="ProductGroupOrder" value-field="productGroupOrder">
> +                    <field-map field-name="groupOrderId" from-field="orderItemGroupOrder.groupOrderId"/>
> +                </entity-one>
> +                <if-not-empty field="productGroupOrder">
> +                    <if-compare field="orderItem.statusId" operator="equals" value="ITEM_CANCELLED">
> +                        <if-not-empty field="orderItem.cancelQuantity">
> +                            <set field="cancelQuantity" from-field="orderItem.cancelQuantity"/>
> +                        <else>
> +                            <set field="cancelQuantity" from-field="orderItem.quantity"/>
> +                        </else>
> +                        </if-not-empty>
> +                        <calculate field="productGroupOrder.soldOrderQty">
> +                            <calcop field="productGroupOrder.soldOrderQty" operator="subtract">
> +                                <calcop field="cancelQuantity" operator="get"/>
> +                            </calcop>
> +                        </calculate>
> +                    </if-compare>
> +                    <store-value value-field="productGroupOrder"/>
> +                    <remove-value value-field="orderItemGroupOrder"/>
> +                </if-not-empty>
> +            </if-not-empty>
>           </iterate>
>       </simple-method>
>       
> +    <simple-method method-name="checkProductGroupOrderExpired" short-description="Check ProductGroupOrder Expired">
> +        <entity-one entity-name="ProductGroupOrder" value-field="productGroupOrder"/>
> +        <if-not-empty field="productGroupOrder">
> +            <if-compare field="productGroupOrder.soldOrderQty" operator="greater-equals" value="${productGroupOrder.reqOrderQty}">
> +                <set field="newItemStatusId" value="ITEM_APPROVED"/>
> +                <set field="groupOrderStatusId" value="GO_SUCCESS"/>
> +            <else>
> +                <set field="newItemStatusId" value="ITEM_CANCELLED"/>
> +                <set field="groupOrderStatusId" value="GO_CANCELLED"/>
> +            </else>
> +            </if-compare>
> +
> +            <entity-and entity-name="OrderItemGroupOrder" list="orderItemGroupOrders">
> +                <field-map field-name="groupOrderId" from-field="productGroupOrder.groupOrderId"/>
> +            </entity-and>
> +            <iterate entry="orderItemGroupOrder" list="orderItemGroupOrders">
> +                <set field="changeOrderItemStatusMap.orderId" from-field="orderItemGroupOrder.orderId"/>
> +                <set field="changeOrderItemStatusMap.orderItemSeqId" from-field="orderItemGroupOrder.orderItemSeqId"/>
> +                <set field="changeOrderItemStatusMap.statusId" from-field="newItemStatusId"/>
> +                <call-service service-name="changeOrderItemStatus" in-map-name="changeOrderItemStatusMap"/>
> +            </iterate>
> +
> +            <set field="updateProductGroupOrderMap.groupOrderId" from-field="productGroupOrder.groupOrderId"/>
> +            <set field="updateProductGroupOrderMap.statusId" from-field="groupOrderStatusId"/>
> +            <call-service service-name="updateProductGroupOrder" in-map-name="updateProductGroupOrderMap"/>
> +        </if-not-empty>
> +    </simple-method>
> +
>       <simple-method method-name="setProductReviewStatus" short-description="change the product review Status">
>           <set value="setProductReviewStatus" field="callingMethodName"/>
>           <set value="UPDATE" field="checkAction"/>
>
> Modified: ofbiz/trunk/applications/product/script/org/ofbiz/product/test/GroupOrderTest.xml
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/script/org/ofbiz/product/test/GroupOrderTest.xml?rev=1368822&r1=1368821&r2=1368822&view=diff
> ==============================================================================
> --- ofbiz/trunk/applications/product/script/org/ofbiz/product/test/GroupOrderTest.xml (original)
> +++ ofbiz/trunk/applications/product/script/org/ofbiz/product/test/GroupOrderTest.xml Fri Aug  3 07:52:28 2012
> @@ -43,6 +43,7 @@ under the License.
>           <set field="createProductGroupOrderMap.productId" value="GZ-1000"/>
>           <set field="createProductGroupOrderMap.fromDate" from-field="nowTimestamp"/>
>           <set field="createProductGroupOrderMap.thruDate" from-field="thruDate"/>
> +        <set field="createProductGroupOrderMap.statusId" value="GO_CREATED"/>
>           <set field="createProductGroupOrderMap.reqOrderQty" value="1" type="BigDecimal"/>
>           <set field="createProductGroupOrderMap.soldOrderQty" value="0" type="BigDecimal"/>
>           <call-service service-name="createProductGroupOrder" in-map-name="createProductGroupOrderMap">
>
> Modified: ofbiz/trunk/applications/product/servicedef/services.xml
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/servicedef/services.xml?rev=1368822&r1=1368821&r2=1368822&view=diff
> ==============================================================================
> --- ofbiz/trunk/applications/product/servicedef/services.xml (original)
> +++ ofbiz/trunk/applications/product/servicedef/services.xml Fri Aug  3 07:52:28 2012
> @@ -1685,21 +1685,15 @@ under the License.
>       <service name="createProductGroupOrder" default-entity-name="ProductGroupOrder" engine="simple"
>           location="component://product/script/org/ofbiz/product/product/ProductServices.xml" invoke="createProductGroupOrder" auth="true">
>           <description>Create ProductGroupOrder</description>
> -        <attribute name="productId" mode="IN" type="String" optional="false"/>
> -        <attribute name="soldOrderQty" mode="IN" type="BigDecimal" optional="false"/>
> -        <attribute name="reqOrderQty" mode="IN" type="BigDecimal" optional="false"/>
> -        <attribute name="fromDate" mode="IN" type="Timestamp" optional="false"/>
> -        <attribute name="thruDate" mode="IN" type="Timestamp" optional="false"/>
> -        <attribute name="groupOrderId" mode="OUT" type="String" optional="true"/>
> +        <auto-attributes include="pk" mode="OUT" optional="false"/>
> +        <auto-attributes include="nonpk" mode="IN" optional="true"/>
>       </service>
>   
>       <service name="updateProductGroupOrder" default-entity-name="ProductGroupOrder" engine="simple"
>           location="component://product/script/org/ofbiz/product/product/ProductServices.xml" invoke="updateProductGroupOrder" auth="true">
>           <description>Update ProductGroupOrder</description>
> -        <attribute name="groupOrderId" mode="IN" type="String" optional="false"/>
> -        <attribute name="reqOrderQty" mode="IN" type="BigDecimal" optional="false"/>
> -        <attribute name="fromDate" mode="IN" type="Timestamp" optional="false"/>
> -        <attribute name="thruDate" mode="IN" type="Timestamp" optional="false"/>
> +        <auto-attributes include="pk" mode="IN" optional="false"/>
> +        <auto-attributes include="nonpk" mode="IN" optional="true"/>
>       </service>
>   
>       <service name="deleteProductGroupOrder" default-entity-name="ProductGroupOrder" engine="simple"
> @@ -1721,19 +1715,17 @@ under the License.
>           <attribute name="orderId" mode="IN" type="String" optional="false"/>
>       </service>
>   
> +    <service name="cancleOrderItemGroupOrder" engine="simple"
> +        location="component://product/script/org/ofbiz/product/product/ProductServices.xml" invoke="cancleOrderItemGroupOrder" auth="true">
> +        <description>Cancle OrderItemGroupOrder</description>
> +        <attribute name="orderId" mode="IN" type="String" optional="false"/>
> +        <attribute name="orderItemSeqId" type="String" mode="IN" optional="true"/>
> +    </service>
> +
>       <service name="checkProductGroupOrderExpired" engine="simple"
>           location="component://product/script/org/ofbiz/product/product/ProductServices.xml" invoke="checkProductGroupOrderExpired" auth="true">
>           <description>Check ProductGroupOrder Expired</description>
>           <attribute name="groupOrderId" mode="IN" type="String" optional="false"/>
>       </service>
>   
> -    <service name="findOrderItemForProductGroupOrder" engine="simple"
> -        location="component://product/script/org/ofbiz/product/product/ProductServices.xml" invoke="findOrderItemForProductGroupOrder" auth="true">
> -        <description>Find OrderItem For ProductGroupOrder</description>
> -        <attribute name="productId" mode="IN" type="String" optional="false"/>
> -        <attribute name="newItemStatusId" mode="IN" type="String" optional="false"/>
> -        <attribute name="fromDate" mode="IN" type="Timestamp" optional="false"/>
> -        <attribute name="thruDate" mode="IN" type="Timestamp" optional="false"/>
> -    </service>
> -
>   </services>
>
> Modified: ofbiz/trunk/applications/product/widget/catalog/ProductForms.xml
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/widget/catalog/ProductForms.xml?rev=1368822&r1=1368821&r2=1368822&view=diff
> ==============================================================================
> --- ofbiz/trunk/applications/product/widget/catalog/ProductForms.xml (original)
> +++ ofbiz/trunk/applications/product/widget/catalog/ProductForms.xml Fri Aug  3 07:52:28 2012
> @@ -2166,6 +2166,7 @@ under the License.
>           <field name="soldOrderQty" title="${uiLabelMap.ProductSoldQuantity}"><display/></field>
>           <field name="fromDate" title="${uiLabelMap.ProductDealStartDate}"><display/></field>
>           <field name="thruDate" title="${uiLabelMap.ProductDealEndDate}"><display/></field>
> +        <field name="statusId" title="${uiLabelMap.CommonStatus}"><display-entity entity-name="StatusItem" key-field-name="statusId" description="${description}"/></field>
>           <field name="editLink" use-when="${groovy: return reqOrderQty.compareTo(soldOrderQty)!= 0;}&amp;&amp;${groovy: return thruDate.compareTo(org.ofbiz.base.util.UtilDateTime.nowTimestamp()) == 1}" title=" " widget-style="buttontext">
>               <hyperlink target="EditProductGroupOrder" description="${uiLabelMap.CommonEdit}" also-hidden="false">
>                   <parameter param-name="productId"/>
> @@ -2183,6 +2184,7 @@ under the License.
>       <form name="CreateProductGroupOrder" type="single" target="createProductGroupOrder" title=""
>           header-row-style="header-row" default-table-style="basic-table">
>           <field name="productId"><hidden/></field>
> +        <field name="statusId"><hidden value="GO_CREATED"/></field>
>           <field name="soldOrderQty"><hidden value="0"/></field>
>           <field name="reqOrderQty" title="${uiLabelMap.ProductDealQuantity}*"><text/></field>
>           <field name="fromDate" title="${uiLabelMap.ProductDealStartDate}*"><date-time/></field>
> @@ -2194,6 +2196,7 @@ under the License.
>           header-row-style="header-row" default-table-style="basic-table">
>           <field name="groupOrderId"><hidden/></field>
>           <field name="productId"><hidden/></field>
> +        <field name="statusId"><hidden/></field>
>           <field name="reqOrderQty" title="${uiLabelMap.ProductDealQuantity}*"><text/></field>
>           <field name="fromDate" title="${uiLabelMap.ProductDealStartDate}*"><date-time/></field>
>           <field name="thruDate" title="${uiLabelMap.ProductDealEndDate}*"><date-time/></field>
>
>


Re: svn commit: r1368822 - in /ofbiz/trunk/applications: order/entitydef/ order/servicedef/ product/data/ product/entitydef/ product/script/org/ofbiz/product/product/ product/script/org/ofbiz/product/test/ product/servicedef/ product/widget/catalog/

Posted by Jacques Le Roux <ja...@les7arts.com>.
Also, not a big deal, there are some typos

>> +        <action service="cancleOrderItemGroupOrder" mode="sync"/>

>> +    <simple-method method-name="cancleOrderItemGroupOrder" short-description="Cancle OrderItemGroupOrder">

>> +    <service name="cancleOrderItemGroupOrder" engine="simple"
>> +        location="component://product/script/org/ofbiz/product/product/ProductServices.xml" invoke="cancleOrderItemGroupOrder" 
>> auth="true">
>> +        <description>Cancle OrderItemGroupOrder</description>

Jacques


From: "Adrian Crum" <ad...@sandglass-software.com>
> This comment isn't about this specific commit, but about the code it modifies. The JobSandbox entity should not be manipulated 
> outside of the Job Scheduler - it will cause erratic behavior.
>
> -Adrian
>
> On 8/3/2012 8:52 AM, hansbak@apache.org wrote:
>> Author: hansbak
>> Date: Fri Aug  3 07:52:28 2012
>> New Revision: 1368822
>>
>> URL: http://svn.apache.org/viewvc?rev=1368822&view=rev
>> Log:
>> improve the groupbuying function by properly return sales numbers when cancelling an order.
>>
>> Modified:
>>      ofbiz/trunk/applications/order/entitydef/entitymodel.xml
>>      ofbiz/trunk/applications/order/servicedef/secas.xml
>>      ofbiz/trunk/applications/order/servicedef/services.xml
>>      ofbiz/trunk/applications/product/data/ProductTypeData.xml
>>      ofbiz/trunk/applications/product/entitydef/entitymodel.xml
>>      ofbiz/trunk/applications/product/script/org/ofbiz/product/product/ProductServices.xml
>>      ofbiz/trunk/applications/product/script/org/ofbiz/product/test/GroupOrderTest.xml
>>      ofbiz/trunk/applications/product/servicedef/services.xml
>>      ofbiz/trunk/applications/product/widget/catalog/ProductForms.xml
>>
>> Modified: ofbiz/trunk/applications/order/entitydef/entitymodel.xml
>> URL: 
>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/entitydef/entitymodel.xml?rev=1368822&r1=1368821&r2=1368822&view=diff
>> ==============================================================================
>> --- ofbiz/trunk/applications/order/entitydef/entitymodel.xml (original)
>> +++ ofbiz/trunk/applications/order/entitydef/entitymodel.xml Fri Aug  3 07:52:28 2012
>> @@ -769,6 +769,23 @@ under the License.
>>               <key-map field-name="parentGroupSeqId" rel-field-name="orderItemGroupSeqId"/>
>>           </relation>
>>       </entity>
>> +    <entity entity-name="OrderItemGroupOrder"
>> +            package-name="org.ofbiz.order.order"
>> +            title="Order Item Group Order Entity">
>> +      <field name="orderId" type="id-ne"></field>
>> +      <field name="orderItemSeqId" type="id-ne"></field>
>> +      <field name="groupOrderId" type="id-ne"></field>
>> +      <prim-key field="orderId"/>
>> +      <prim-key field="orderItemSeqId"/>
>> +      <prim-key field="groupOrderId"/>
>> +      <relation type="one" fk-name="OIGO_ORDER_ITEM" rel-entity-name="OrderItem">
>> +        <key-map field-name="orderId"/>
>> +        <key-map field-name="orderItemSeqId"/>
>> +      </relation>
>> +      <relation type="one" fk-name="OIGO_PRD_GROUP_ORDER" rel-entity-name="ProductGroupOrder">
>> +        <key-map field-name="groupOrderId"/>
>> +      </relation>
>> +    </entity>
>>       <entity entity-name="OrderItemPriceInfo"
>>               package-name="org.ofbiz.order.order"
>>               never-cache="true"
>>
>> Modified: ofbiz/trunk/applications/order/servicedef/secas.xml
>> URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/servicedef/secas.xml?rev=1368822&r1=1368821&r2=1368822&view=diff
>> ==============================================================================
>> --- ofbiz/trunk/applications/order/servicedef/secas.xml (original)
>> +++ ofbiz/trunk/applications/order/servicedef/secas.xml Fri Aug  3 07:52:28 2012
>> @@ -60,6 +60,7 @@ under the License.
>>       <eca service="changeOrderItemStatus" event="commit">
>>           <condition field-name="statusId" operator="equals" value="ITEM_CANCELLED"/>
>>           <action service="cancelOrderInventoryReservation" mode="sync"/>
>> +        <action service="cancleOrderItemGroupOrder" mode="sync"/>
>>           <action service="recalcShippingTotal" mode="sync"/>
>>           <action service="recalcTaxTotal" mode="sync"/>
>>           <action service="resetGrandTotal" mode="sync"/>
>> @@ -447,8 +448,4 @@ under the License.
>>           <condition field-name="orderTypeId" operator="equals" value="SALES_ORDER"/>
>>           <action service="checkOrderItemForProductGroupOrder" mode="sync"/>
>>       </eca>
>> -    <eca service="changeOrderStatus" event="commit">
>> -        <condition field-name="statusId" operator="equals" value="ORDER_CANCELLED"/>
>> -        <action service="checkOrderItemForProductGroupOrder" mode="sync"/>
>> -    </eca>
>>   </service-eca>
>>
>> Modified: ofbiz/trunk/applications/order/servicedef/services.xml
>> URL: 
>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/servicedef/services.xml?rev=1368822&r1=1368821&r2=1368822&view=diff
>> ==============================================================================
>> --- ofbiz/trunk/applications/order/servicedef/services.xml (original)
>> +++ ofbiz/trunk/applications/order/servicedef/services.xml Fri Aug  3 07:52:28 2012
>> @@ -1142,4 +1142,10 @@ under the License.
>>           <auto-attributes mode="IN" entity-name="OrderItemAttribute" include="pk" optional="false"/>
>>       </service>
>>       +    <!-- Order Item Group Order -->
>> +    <service name="createOrderItemGroupOrder" engine="entity-auto" default-entity-name="OrderItemGroupOrder" invoke="create" 
>> auth="true">
>> +        <description>Create Order Item Group Order</description>
>> +        <auto-attributes mode="IN" entity-name="OrderItemGroupOrder" include="pk" optional="false"/>
>> +    </service>
>> +
>>   </services>
>>
>> Modified: ofbiz/trunk/applications/product/data/ProductTypeData.xml
>> URL: 
>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/data/ProductTypeData.xml?rev=1368822&r1=1368821&r2=1368822&view=diff
>> ==============================================================================
>> --- ofbiz/trunk/applications/product/data/ProductTypeData.xml (original)
>> +++ ofbiz/trunk/applications/product/data/ProductTypeData.xml Fri Aug  3 07:52:28 2012
>> @@ -650,4 +650,10 @@ under the License.
>>       <Enumeration description="Remove Logo" enumCode="REMOVE_LOGO" enumId="REMOVE_LOGO" sequenceId="02" 
>> enumTypeId="IMAGE_REJECT_REASON"/>
>>       <Enumeration description="Other" enumCode="OTHER" enumId="OTHER" sequenceId="03" enumTypeId="IMAGE_REJECT_REASON"/>
>>       +    <!-- Group Order -->
>> +    <StatusType description="Group Order Status" hasTable="N" parentTypeId="" statusTypeId="GROUP_ORDER_STATUS"/>
>> +    <StatusItem description="Created" sequenceId="01" statusCode="CREATED" statusId="GO_CREATED" 
>> statusTypeId="GROUP_ORDER_STATUS"/>
>> +    <StatusItem description="Success" sequenceId="02" statusCode="SUCCESS" statusId="GO_SUCCESS" 
>> statusTypeId="GROUP_ORDER_STATUS"/>
>> +    <StatusItem description="Cancelled" sequenceId="03" statusCode="CANCELLED" statusId="GO_CANCELLED" 
>> statusTypeId="GROUP_ORDER_STATUS"/>
>> +
>>   </entity-engine-xml>
>>
>> Modified: ofbiz/trunk/applications/product/entitydef/entitymodel.xml
>> URL: 
>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/entitydef/entitymodel.xml?rev=1368822&r1=1368821&r2=1368822&view=diff
>> ==============================================================================
>> --- ofbiz/trunk/applications/product/entitydef/entitymodel.xml (original)
>> +++ ofbiz/trunk/applications/product/entitydef/entitymodel.xml Fri Aug  3 07:52:28 2012
>> @@ -4812,6 +4812,7 @@ under the License.
>>         <field name="productId" type="id-ne"></field>
>>         <field name="fromDate" type="date-time"></field>
>>         <field name="thruDate" type="date-time"></field>
>> +      <field name="statusId" type="id-ne"></field>
>>         <field name="reqOrderQty" type="fixed-point"></field>
>>         <field name="soldOrderQty" type="fixed-point"></field>
>>         <field name="jobId" type="id-ne"></field>
>> @@ -4819,6 +4820,9 @@ under the License.
>>         <relation type="one" fk-name="PROD_GROUP_ORDER" rel-entity-name="Product">
>>           <key-map field-name="productId"/>
>>         </relation>
>> +      <relation type="one" fk-name="GROUP_ORDER_STATUS" rel-entity-name="StatusItem">
>> +        <key-map field-name="statusId"/>
>> +      </relation>
>>         <relation type="one" fk-name="GROUP_ORDER_JOB" rel-entity-name="JobSandbox">
>>           <key-map field-name="jobId"/>
>>         </relation>
>>
>> Modified: ofbiz/trunk/applications/product/script/org/ofbiz/product/product/ProductServices.xml
>> URL: 
>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/script/org/ofbiz/product/product/ProductServices.xml?rev=1368822&r1=1368821&r2=1368822&view=diff
>> ==============================================================================
>> --- ofbiz/trunk/applications/product/script/org/ofbiz/product/product/ProductServices.xml (original)
>> +++ ofbiz/trunk/applications/product/script/org/ofbiz/product/product/ProductServices.xml Fri Aug  3 07:52:28 2012
>> @@ -1064,17 +1064,26 @@ under the License.
>>           <entity-one entity-name="ProductGroupOrder" value-field="productGroupOrder"/>
>>           <set-nonpk-fields value-field="productGroupOrder" map="parameters"/>
>>           <store-value value-field="productGroupOrder"/>
>> -
>> -        <entity-one entity-name="JobSandbox" value-field="jobSandbox">
>> -            <field-map field-name="jobId" from-field="productGroupOrder.jobId"/>
>> -        </entity-one>
>> -        <if-not-empty field="jobSandbox">
>> -            <set field="jobSandbox.runTime" from-field="parameters.thruDate"/>
>> -            <store-value value-field="jobSandbox"/>
>> -        </if-not-empty>
>> +
>> +        <if-compare field="productGroupOrder.statusId" operator="equals" value="GO_CREATED">
>> +            <entity-one entity-name="JobSandbox" value-field="jobSandbox">
>> +                <field-map field-name="jobId" from-field="productGroupOrder.jobId"/>
>> +            </entity-one>
>> +            <if-not-empty field="jobSandbox">
>> +                <set field="jobSandbox.runTime" from-field="parameters.thruDate"/>
>> +                <store-value value-field="jobSandbox"/>
>> +            </if-not-empty>
>> +        </if-compare>
>>       </simple-method>
>>   <simple-method method-name="deleteProductGroupOrder" short-description="Delete ProductGroupOrder">
>> +        <entity-and entity-name="OrderItemGroupOrder" list="orderItemGroupOrders">
>> +            <field-map field-name="groupOrderId" from-field="parameters.groupOrderId"/>
>> +        </entity-and>
>> +        <iterate entry="orderItemGroupOrder" list="orderItemGroupOrders">
>> +            <remove-value value-field="orderItemGroupOrder"/>
>> +        </iterate>
>> +
>>           <entity-one entity-name="ProductGroupOrder" value-field="productGroupOrder"/>
>>           <remove-value value-field="productGroupOrder"/>
>>           @@ -1114,7 +1123,7 @@ under the License.
>>               <make-value entity-name="JobSandbox" value-field="jobSandbox"/>
>>               <sequenced-id sequence-name="JobSandbox" field="jobSandbox.jobId"/>
>>               <set field="jobId" from-field="jobSandbox.jobId"/>
>> -            <set field="jobSandbox.jobName" value="Check Product GroupOrder Expired"/>
>> +            <set field="jobSandbox.jobName" value="Check ProductGroupOrder Expired"/>
>>               <set field="jobSandbox.runTime" from-field="parameters.thruDate"/>
>>               <set field="jobSandbox.poolId" value="pool"/>
>>               <set field="jobSandbox.statusId" value="SERVICE_PENDING"/>
>> @@ -1130,7 +1139,6 @@ under the License.
>>       </simple-method>
>>   <simple-method method-name="checkOrderItemForProductGroupOrder" short-description="Check OrderItem For ProductGroupOrder">
>> -        <entity-one entity-name="OrderHeader" value-field="orderHeader"/>
>>           <entity-and entity-name="OrderItem" list="orderItems">
>>               <field-map field-name="orderId" from-field="parameters.orderId"/>
>>           </entity-and>
>> @@ -1151,92 +1159,94 @@ under the License.
>>               <entity-and entity-name="ProductGroupOrder" list="productGroupOrders" filter-by-date="true">
>>                   <field-map field-name="productId" from-field="productId"/>
>>               </entity-and>
>> -            <iterate entry="productGroupOrder" list="productGroupOrders">
>> -                <if-compare field="orderHeader.statusId" operator="equals" value="ORDER_CREATED">
>> -                    <calculate field="productGroupOrder.soldOrderQty">
>> -                        <calcop field="productGroupOrder.soldOrderQty" operator="add">
>> -                            <calcop field="orderItem.quantity" operator="get"/>
>> -                        </calcop>
>> -                    </calculate>
>> -                </if-compare>
>> -                <if-compare field="orderHeader.statusId" operator="equals" value="ORDER_CANCELLED">
>> -                    <calculate field="productGroupOrder.soldOrderQty">
>> -                        <calcop field="productGroupOrder.soldOrderQty" operator="subtract">
>> -                            <calcop field="orderItem.quantity" operator="get"/>
>> -                        </calcop>
>> -                    </calculate>
>> -                </if-compare>
>> +            <if-not-empty field="productGroupOrders">
>> +                <first-from-list entry="productGroupOrder" list="productGroupOrders"/>
>> +                <calculate field="productGroupOrder.soldOrderQty">
>> +                    <calcop field="productGroupOrder.soldOrderQty" operator="add">
>> +                        <calcop field="orderItem.quantity" operator="get"/>
>> +                    </calcop>
>> +                </calculate>
>>                   <store-value value-field="productGroupOrder"/>
>> -            </iterate>
>> +
>> +                <set field="createOrderItemGroupOrderMap.orderId" from-field="orderItem.orderId"/>
>> +                <set field="createOrderItemGroupOrderMap.orderItemSeqId" from-field="orderItem.orderItemSeqId"/>
>> +                <set field="createOrderItemGroupOrderMap.groupOrderId" from-field="productGroupOrder.groupOrderId"/>
>> +                <call-service service-name="createOrderItemGroupOrder" in-map-name="createOrderItemGroupOrderMap"/>
>> +            </if-not-empty>
>>           </iterate>
>>       </simple-method>
>> -
>> -    <simple-method method-name="checkProductGroupOrderExpired" short-description="Check ProductGroupOrder Expired">
>> -        <entity-one entity-name="ProductGroupOrder" value-field="productGroupOrder"/>
>> -        <if-compare field="productGroupOrder.soldOrderQty" operator="greater-equals" value="${productGroupOrder.reqOrderQty}">
>> -            <set field="newItemStatusId" value="ITEM_APPROVED"/>
>> -        <else>
>> -            <set field="newItemStatusId" value="ITEM_CANCELLED"/>
>> -        </else>
>> -        </if-compare>
>> -
>> -        <entity-one entity-name="Product" value-field="product">
>> -            <field-map field-name="productId" from-field="productGroupOrder.productId"/>
>> -        </entity-one>
>> -        <if-compare field="product.isVirtual" operator="equals" value="Y">
>> -            <entity-and entity-name="ProductAssoc" list="variantProductAssocs" filter-by-date="true">
>> -                <field-map field-name="productId" from-field="productGroupOrder.productId"/>
>> -                <field-map field-name="productAssocTypeId" value="PRODUCT_VARIANT"/>
>> +
>> +    <simple-method method-name="cancleOrderItemGroupOrder" short-description="Cancle OrderItemGroupOrder">
>> +        <if-not-empty field="parameters.orderItemSeqId">
>> +            <entity-and entity-name="OrderItem" list="orderItems">
>> +                <field-map field-name="orderId" from-field="parameters.orderId"/>
>> +                <field-map field-name="orderItemSeqId" from-field="parameters.orderItemSeqId" />
>>               </entity-and>
>> -            <iterate entry="variantProductAssoc" list="variantProductAssocs">
>> -                <set field="findOrderItemMap.productId" from-field="variantProductAssoc.productIdTo"/>
>> -                <set field="findOrderItemMap.newItemStatusId" from-field="newItemStatusId"/>
>> -                <set field="findOrderItemMap.fromDate" from-field="productGroupOrder.fromDate"/>
>> -                <set field="findOrderItemMap.thruDate" from-field="productGroupOrder.thruDate"/>
>> -                <call-service service-name="findOrderItemForProductGroupOrder" in-map-name="findOrderItemMap"/>
>> -            </iterate>
>>           <else>
>> -            <set field="findOrderItemMap.productId" from-field="productGroupOrder.productId"/>
>> -            <set field="findOrderItemMap.newItemStatusId" from-field="newItemStatusId"/>
>> -            <set field="findOrderItemMap.fromDate" from-field="productGroupOrder.fromDate"/>
>> -            <set field="findOrderItemMap.thruDate" from-field="productGroupOrder.thruDate"/>
>> -            <call-service service-name="findOrderItemForProductGroupOrder" in-map-name="findOrderItemMap"/>
>> +            <entity-and entity-name="OrderItem" list="orderItems">
>> +                <field-map field-name="orderId" from-field="parameters.orderId"/>
>> +            </entity-and>
>>           </else>
>> -        </if-compare>
>> -    </simple-method>
>> -
>> -    <simple-method method-name="findOrderItemForProductGroupOrder" short-description="Find OrderItem For ProductGroupOrder">
>> -        <entity-condition entity-name="OrderItem" list="orderItems">
>> -            <condition-list combine="and">
>> -                <condition-expr field-name="productId" operator="equals" from-field="parameters.productId"/>
>> -                <condition-list combine="or">
>> -                    <condition-expr field-name="statusId" operator="equals" value="ITEM_CREATED"/>
>> -                    <condition-expr field-name="statusId" operator="equals" value="ITEM_APPROVED"/>
>> -                </condition-list>
>> -            </condition-list>
>> -        </entity-condition>
>> +        </if-not-empty>
>>           <iterate entry="orderItem" list="orderItems">
>> -            <entity-one value-field="orderHeader" entity-name="OrderHeader">
>> +            <entity-and entity-name="OrderItemGroupOrder" list="orderItemGroupOrders">
>>                   <field-map field-name="orderId" from-field="orderItem.orderId"/>
>> -            </entity-one>
>> -            <if>
>> -                <condition>
>> -                    <and>
>> -                        <if-compare field="orderHeader.orderTypeId" operator="equals" value="SALES_ORDER"/>
>> -                        <if-compare field="orderHeader.orderDate" operator="greater-equals" value="${parameters.fromDate}"/>
>> -                        <if-compare field="orderHeader.orderDate" operator="less" value="${parameters.thruDate}"/>
>> -                    </and>
>> -                </condition>
>> -                <then>
>> -                    <set field="changeOrderItemStatusMap.orderId" from-field="orderItem.orderId"/>
>> -                    <set field="changeOrderItemStatusMap.orderItemSeqId" from-field="orderItem.orderItemSeqId"/>
>> -                    <set field="changeOrderItemStatusMap.statusId" from-field="parameters.newItemStatusId"/>
>> -                    <call-service service-name="changeOrderItemStatus" in-map-name="changeOrderItemStatusMap"/>
>> -                </then>
>> -            </if>
>> +                <field-map field-name="orderItemSeqId" from-field="orderItem.orderItemSeqId"/>
>> +            </entity-and>
>> +            <if-not-empty field="orderItemGroupOrders">
>> +                <first-from-list entry="orderItemGroupOrder" list="orderItemGroupOrders"/>
>> +                <entity-one entity-name="ProductGroupOrder" value-field="productGroupOrder">
>> +                    <field-map field-name="groupOrderId" from-field="orderItemGroupOrder.groupOrderId"/>
>> +                </entity-one>
>> +                <if-not-empty field="productGroupOrder">
>> +                    <if-compare field="orderItem.statusId" operator="equals" value="ITEM_CANCELLED">
>> +                        <if-not-empty field="orderItem.cancelQuantity">
>> +                            <set field="cancelQuantity" from-field="orderItem.cancelQuantity"/>
>> +                        <else>
>> +                            <set field="cancelQuantity" from-field="orderItem.quantity"/>
>> +                        </else>
>> +                        </if-not-empty>
>> +                        <calculate field="productGroupOrder.soldOrderQty">
>> +                            <calcop field="productGroupOrder.soldOrderQty" operator="subtract">
>> +                                <calcop field="cancelQuantity" operator="get"/>
>> +                            </calcop>
>> +                        </calculate>
>> +                    </if-compare>
>> +                    <store-value value-field="productGroupOrder"/>
>> +                    <remove-value value-field="orderItemGroupOrder"/>
>> +                </if-not-empty>
>> +            </if-not-empty>
>>           </iterate>
>>       </simple-method>
>>       +    <simple-method method-name="checkProductGroupOrderExpired" short-description="Check ProductGroupOrder Expired">
>> +        <entity-one entity-name="ProductGroupOrder" value-field="productGroupOrder"/>
>> +        <if-not-empty field="productGroupOrder">
>> +            <if-compare field="productGroupOrder.soldOrderQty" operator="greater-equals" 
>> value="${productGroupOrder.reqOrderQty}">
>> +                <set field="newItemStatusId" value="ITEM_APPROVED"/>
>> +                <set field="groupOrderStatusId" value="GO_SUCCESS"/>
>> +            <else>
>> +                <set field="newItemStatusId" value="ITEM_CANCELLED"/>
>> +                <set field="groupOrderStatusId" value="GO_CANCELLED"/>
>> +            </else>
>> +            </if-compare>
>> +
>> +            <entity-and entity-name="OrderItemGroupOrder" list="orderItemGroupOrders">
>> +                <field-map field-name="groupOrderId" from-field="productGroupOrder.groupOrderId"/>
>> +            </entity-and>
>> +            <iterate entry="orderItemGroupOrder" list="orderItemGroupOrders">
>> +                <set field="changeOrderItemStatusMap.orderId" from-field="orderItemGroupOrder.orderId"/>
>> +                <set field="changeOrderItemStatusMap.orderItemSeqId" from-field="orderItemGroupOrder.orderItemSeqId"/>
>> +                <set field="changeOrderItemStatusMap.statusId" from-field="newItemStatusId"/>
>> +                <call-service service-name="changeOrderItemStatus" in-map-name="changeOrderItemStatusMap"/>
>> +            </iterate>
>> +
>> +            <set field="updateProductGroupOrderMap.groupOrderId" from-field="productGroupOrder.groupOrderId"/>
>> +            <set field="updateProductGroupOrderMap.statusId" from-field="groupOrderStatusId"/>
>> +            <call-service service-name="updateProductGroupOrder" in-map-name="updateProductGroupOrderMap"/>
>> +        </if-not-empty>
>> +    </simple-method>
>> +
>>       <simple-method method-name="setProductReviewStatus" short-description="change the product review Status">
>>           <set value="setProductReviewStatus" field="callingMethodName"/>
>>           <set value="UPDATE" field="checkAction"/>
>>
>> Modified: ofbiz/trunk/applications/product/script/org/ofbiz/product/test/GroupOrderTest.xml
>> URL: 
>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/script/org/ofbiz/product/test/GroupOrderTest.xml?rev=1368822&r1=1368821&r2=1368822&view=diff
>> ==============================================================================
>> --- ofbiz/trunk/applications/product/script/org/ofbiz/product/test/GroupOrderTest.xml (original)
>> +++ ofbiz/trunk/applications/product/script/org/ofbiz/product/test/GroupOrderTest.xml Fri Aug  3 07:52:28 2012
>> @@ -43,6 +43,7 @@ under the License.
>>           <set field="createProductGroupOrderMap.productId" value="GZ-1000"/>
>>           <set field="createProductGroupOrderMap.fromDate" from-field="nowTimestamp"/>
>>           <set field="createProductGroupOrderMap.thruDate" from-field="thruDate"/>
>> +        <set field="createProductGroupOrderMap.statusId" value="GO_CREATED"/>
>>           <set field="createProductGroupOrderMap.reqOrderQty" value="1" type="BigDecimal"/>
>>           <set field="createProductGroupOrderMap.soldOrderQty" value="0" type="BigDecimal"/>
>>           <call-service service-name="createProductGroupOrder" in-map-name="createProductGroupOrderMap">
>>
>> Modified: ofbiz/trunk/applications/product/servicedef/services.xml
>> URL: 
>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/servicedef/services.xml?rev=1368822&r1=1368821&r2=1368822&view=diff
>> ==============================================================================
>> --- ofbiz/trunk/applications/product/servicedef/services.xml (original)
>> +++ ofbiz/trunk/applications/product/servicedef/services.xml Fri Aug  3 07:52:28 2012
>> @@ -1685,21 +1685,15 @@ under the License.
>>       <service name="createProductGroupOrder" default-entity-name="ProductGroupOrder" engine="simple"
>>           location="component://product/script/org/ofbiz/product/product/ProductServices.xml" invoke="createProductGroupOrder" 
>> auth="true">
>>           <description>Create ProductGroupOrder</description>
>> -        <attribute name="productId" mode="IN" type="String" optional="false"/>
>> -        <attribute name="soldOrderQty" mode="IN" type="BigDecimal" optional="false"/>
>> -        <attribute name="reqOrderQty" mode="IN" type="BigDecimal" optional="false"/>
>> -        <attribute name="fromDate" mode="IN" type="Timestamp" optional="false"/>
>> -        <attribute name="thruDate" mode="IN" type="Timestamp" optional="false"/>
>> -        <attribute name="groupOrderId" mode="OUT" type="String" optional="true"/>
>> +        <auto-attributes include="pk" mode="OUT" optional="false"/>
>> +        <auto-attributes include="nonpk" mode="IN" optional="true"/>
>>       </service>
>>   <service name="updateProductGroupOrder" default-entity-name="ProductGroupOrder" engine="simple"
>>           location="component://product/script/org/ofbiz/product/product/ProductServices.xml" invoke="updateProductGroupOrder" 
>> auth="true">
>>           <description>Update ProductGroupOrder</description>
>> -        <attribute name="groupOrderId" mode="IN" type="String" optional="false"/>
>> -        <attribute name="reqOrderQty" mode="IN" type="BigDecimal" optional="false"/>
>> -        <attribute name="fromDate" mode="IN" type="Timestamp" optional="false"/>
>> -        <attribute name="thruDate" mode="IN" type="Timestamp" optional="false"/>
>> +        <auto-attributes include="pk" mode="IN" optional="false"/>
>> +        <auto-attributes include="nonpk" mode="IN" optional="true"/>
>>       </service>
>>   <service name="deleteProductGroupOrder" default-entity-name="ProductGroupOrder" engine="simple"
>> @@ -1721,19 +1715,17 @@ under the License.
>>           <attribute name="orderId" mode="IN" type="String" optional="false"/>
>>       </service>
>>   +    <service name="cancleOrderItemGroupOrder" engine="simple"
>> +        location="component://product/script/org/ofbiz/product/product/ProductServices.xml" invoke="cancleOrderItemGroupOrder" 
>> auth="true">
>> +        <description>Cancle OrderItemGroupOrder</description>
>> +        <attribute name="orderId" mode="IN" type="String" optional="false"/>
>> +        <attribute name="orderItemSeqId" type="String" mode="IN" optional="true"/>
>> +    </service>
>> +
>>       <service name="checkProductGroupOrderExpired" engine="simple"
>>           location="component://product/script/org/ofbiz/product/product/ProductServices.xml" 
>> invoke="checkProductGroupOrderExpired" auth="true">
>>           <description>Check ProductGroupOrder Expired</description>
>>           <attribute name="groupOrderId" mode="IN" type="String" optional="false"/>
>>       </service>
>>   -    <service name="findOrderItemForProductGroupOrder" engine="simple"
>> -        location="component://product/script/org/ofbiz/product/product/ProductServices.xml" 
>> invoke="findOrderItemForProductGroupOrder" auth="true">
>> -        <description>Find OrderItem For ProductGroupOrder</description>
>> -        <attribute name="productId" mode="IN" type="String" optional="false"/>
>> -        <attribute name="newItemStatusId" mode="IN" type="String" optional="false"/>
>> -        <attribute name="fromDate" mode="IN" type="Timestamp" optional="false"/>
>> -        <attribute name="thruDate" mode="IN" type="Timestamp" optional="false"/>
>> -    </service>
>> -
>>   </services>
>>
>> Modified: ofbiz/trunk/applications/product/widget/catalog/ProductForms.xml
>> URL: 
>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/widget/catalog/ProductForms.xml?rev=1368822&r1=1368821&r2=1368822&view=diff
>> ==============================================================================
>> --- ofbiz/trunk/applications/product/widget/catalog/ProductForms.xml (original)
>> +++ ofbiz/trunk/applications/product/widget/catalog/ProductForms.xml Fri Aug  3 07:52:28 2012
>> @@ -2166,6 +2166,7 @@ under the License.
>>           <field name="soldOrderQty" title="${uiLabelMap.ProductSoldQuantity}"><display/></field>
>>           <field name="fromDate" title="${uiLabelMap.ProductDealStartDate}"><display/></field>
>>           <field name="thruDate" title="${uiLabelMap.ProductDealEndDate}"><display/></field>
>> +        <field name="statusId" title="${uiLabelMap.CommonStatus}"><display-entity entity-name="StatusItem" 
>> key-field-name="statusId" description="${description}"/></field>
>>           <field name="editLink" use-when="${groovy: return reqOrderQty.compareTo(soldOrderQty)!= 0;}&amp;&amp;${groovy: return 
>> thruDate.compareTo(org.ofbiz.base.util.UtilDateTime.nowTimestamp()) == 1}" title=" " widget-style="buttontext">
>>               <hyperlink target="EditProductGroupOrder" description="${uiLabelMap.CommonEdit}" also-hidden="false">
>>                   <parameter param-name="productId"/>
>> @@ -2183,6 +2184,7 @@ under the License.
>>       <form name="CreateProductGroupOrder" type="single" target="createProductGroupOrder" title=""
>>           header-row-style="header-row" default-table-style="basic-table">
>>           <field name="productId"><hidden/></field>
>> +        <field name="statusId"><hidden value="GO_CREATED"/></field>
>>           <field name="soldOrderQty"><hidden value="0"/></field>
>>           <field name="reqOrderQty" title="${uiLabelMap.ProductDealQuantity}*"><text/></field>
>>           <field name="fromDate" title="${uiLabelMap.ProductDealStartDate}*"><date-time/></field>
>> @@ -2194,6 +2196,7 @@ under the License.
>>           header-row-style="header-row" default-table-style="basic-table">
>>           <field name="groupOrderId"><hidden/></field>
>>           <field name="productId"><hidden/></field>
>> +        <field name="statusId"><hidden/></field>
>>           <field name="reqOrderQty" title="${uiLabelMap.ProductDealQuantity}*"><text/></field>
>>           <field name="fromDate" title="${uiLabelMap.ProductDealStartDate}*"><date-time/></field>
>>           <field name="thruDate" title="${uiLabelMap.ProductDealEndDate}*"><date-time/></field>
>>
>>
>