svn commit: r754834 - in /ofbiz/trunk/applications/order: script/org/ofbiz/order/order/ servicedef/ src/org/ofbiz/order/shoppingcart/ webapp/ordermgr/order/

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

svn commit: r754834 - in /ofbiz/trunk/applications/order: script/org/ofbiz/order/order/ servicedef/ src/org/ofbiz/order/shoppingcart/ webapp/ordermgr/order/

jleroux@apache.org
Author: jleroux
Date: Mon Mar 16 07:30:35 2009
New Revision: 754834

URL: http://svn.apache.org/viewvc?rev=754834&view=rev
Log:
A patch from Bharat Soni "When recording PO, Company automatically sets price as "last price" on Supplier record." (https://issues.apache.org/jira/browse/OFBIZ-2234) - OFBIZ-2234

Modified:
    ofbiz/trunk/applications/order/script/org/ofbiz/order/order/OrderServices.xml
    ofbiz/trunk/applications/order/servicedef/secas.xml
    ofbiz/trunk/applications/order/servicedef/services.xml
    ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutHelper.java
    ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCartEvents.java
    ofbiz/trunk/applications/order/webapp/ordermgr/order/editorderitems.ftl

Modified: ofbiz/trunk/applications/order/script/org/ofbiz/order/order/OrderServices.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/script/org/ofbiz/order/order/OrderServices.xml?rev=754834&r1=754833&r2=754834&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/script/org/ofbiz/order/order/OrderServices.xml (original)
+++ ofbiz/trunk/applications/order/script/org/ofbiz/order/order/OrderServices.xml Mon Mar 16 07:30:35 2009
@@ -1129,5 +1129,130 @@
         <set field="paymentMethodId" from-field="parameters.paymentMethodId"/>
         <field-to-result field="parameters.paymentMethodId" result-name="paymentMethodId"/>
     </simple-method>
+
+    <simple-method method-name="setUnitPriceAsLastPrice" short-description="Set unitPrice as lastPrice on create purchase order, edit purchase order items and on receive inventory against a purchase order">
+        <if>
+            <condition>
+                <and>
+                    <not><if-empty field="parameters.facilityId"/></not>
+                    <not><if-empty field="parameters.orderId"/></not>
+                </and>
+            </condition>
+            <then>
+                <entity-and list="orderSuppliers" entity-name="OrderHeaderItemAndRoles">
+                    <field-map field-name="orderId" from-field="parameters.orderId"/>
+                    <field-map field-name="roleTypeId" value="BILL_FROM_VENDOR"/>
+                    <field-map field-name="orderTypeId" value="PURCHASE_ORDER"/>
+                </entity-and>
+                <first-from-list list="orderSuppliers" entry="orderSupplier"/>
+                <entity-and list="supplierProducts" entity-name="SupplierProduct">
+                    <field-map from-field="parameters.productId" field-name="productId"/>      
+                    <field-map from-field="orderSupplier.partyId" field-name="partyId"/>
+                    <field-map from-field="nullField" field-name="availableThruDate"/>
+                </entity-and>
+                <iterate entry="supplierProduct" list="supplierProducts">
+                    <now-timestamp field="nowTimestamp"/>
+                    <if>
+                        <condition>
+                            <if-compare-field field="parameters.unitCost" to-field="supplierProduct.lastPrice" operator="not-equals" type="BigDecimal"/>
+                        </condition>
+                        <then>
+                            <make-value value-field="newSupplierProduct" entity-name="SupplierProduct"/>
+                            <clone-value value-field="supplierProduct" new-value-field="newSupplierProduct"/>
+                            <set from-field="nowTimestamp" field="newSupplierProduct.availableFromDate"/>
+                            <set from-field="parameters.unitCost" field="newSupplierProduct.lastPrice" type="BigDecimal"/>
+                            <create-value value-field="newSupplierProduct"/>
+                            <set from-field="nowTimestamp" field="supplierProduct.availableThruDate"/>
+                            <store-value value-field="supplierProduct"/>
+                        </then>
+                    </if>        
+                </iterate>
+            </then>
+            <else>
+                <if>
+                    <condition>
+                        <and>
+                          <if-empty field="parameters.orderItems"/>
+                          <not><if-empty field="parameters.orderId"/></not>  
+                        </and>
+                    </condition>
+                    <then>
+                        <entity-and entity-name="OrderItem" list="orderItems">
+                            <field-map field-name="orderId" from-field="parameters.orderId"/>
+                        </entity-and>
+                        <iterate entry="orderItem" list="orderItems">
+                            <iterate-map key="orderItemSeqId" value="unitPrice" map="parameters.itemPriceMap">
+                                <if>
+                                    <condition>
+                                        <if-compare-field field="orderItem.orderItemSeqId" operator="equals" to-field="orderItemSeqId"/>
+                                    </condition>
+                                    <then>
+                                        <iterate-map key="orderItemSeqId" value="Y" map="parameters.overridePriceMap">
+                                            <if>
+                                                <condition>
+                                                    <if-compare-field field="orderItem.orderItemSeqId"  operator="equals" to-field="orderItemSeqId"/>
+                                                </condition>
+                                                <then>
+                                                    <set field="orderItem.unitPrice" from-field="unitPrice" type="BigDecimal"/>
+                                                    <entity-and list="supplierProducts" entity-name="SupplierProduct">
+                                                        <field-map from-field="orderItem.productId" field-name="productId"/>      
+                                                        <field-map from-field="parameters.supplierPartyId" field-name="partyId"/>
+                                                        <field-map from-field="nullField" field-name="availableThruDate"/>
+                                                    </entity-and>
+                                                    <iterate entry="supplierProduct" list="supplierProducts">
+                                                        <now-timestamp field="nowTimestamp"/>
+                                                        <if>
+                                                            <condition>
+                                                                <if-compare-field field="orderItem.unitPrice" to-field="supplierProduct.lastPrice" operator="not-equals" type="BigDecimal"/>
+                                                            </condition>
+                                                            <then>
+                                                                <make-value value-field="newSupplierProduct" entity-name="SupplierProduct"/>
+                                                                <clone-value value-field="supplierProduct" new-value-field="newSupplierProduct"/>
+                                                                <set from-field="nowTimestamp" field="newSupplierProduct.availableFromDate"/>
+                                                                <set from-field="orderItem.unitPrice" field="newSupplierProduct.lastPrice"/>
+                                                                <create-value value-field="newSupplierProduct"/>
+                                                                <set from-field="nowTimestamp" field="supplierProduct.availableThruDate"/>
+                                                                <store-value value-field="supplierProduct"/>
+                                                            </then>
+                                                        </if>        
+                                                    </iterate>
+                                                </then>
+                                            </if>
+                                        </iterate-map>
+                                    </then>
+                                </if>
+                            </iterate-map>
+                        </iterate>
+                    </then>
+                    <else>
+                        <iterate entry="orderItem" list="parameters.orderItems">
+                            <entity-and list="supplierProducts" entity-name="SupplierProduct">
+                                <field-map from-field="orderItem.productId" field-name="productId"/>      
+                                <field-map from-field="parameters.supplierPartyId" field-name="partyId"/>
+                                <field-map from-field="nullField" field-name="availableThruDate"/>
+                            </entity-and>
+                            <iterate entry="supplierProduct" list="supplierProducts">
+                                <now-timestamp field="nowTimestamp"/>
+                                <if>
+                                    <condition>
+                                        <if-compare-field field="orderItem.unitPrice" to-field="supplierProduct.lastPrice" operator="not-equals" type="BigDecimal"/>
+                                    </condition>
+                                    <then>
+                                        <make-value value-field="newSupplierProduct" entity-name="SupplierProduct"/>
+                                        <clone-value value-field="supplierProduct" new-value-field="newSupplierProduct"/>
+                                        <set from-field="nowTimestamp" field="newSupplierProduct.availableFromDate"/>
+                                        <set from-field="orderItem.unitPrice" field="newSupplierProduct.lastPrice" type="BigDecimal"/>
+                                        <create-value value-field="newSupplierProduct"/>
+                                        <set from-field="nowTimestamp" field="supplierProduct.availableThruDate"/>
+                                        <store-value value-field="supplierProduct"/>
+                                    </then>
+                                </if>        
+                            </iterate>
+                        </iterate>
+                    </else>
+                </if>
+            </else>
+        </if>
+    </simple-method>
     
 </simple-methods>

Modified: ofbiz/trunk/applications/order/servicedef/secas.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/servicedef/secas.xml?rev=754834&r1=754833&r2=754834&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/servicedef/secas.xml (original)
+++ ofbiz/trunk/applications/order/servicedef/secas.xml Mon Mar 16 07:30:35 2009
@@ -32,6 +32,18 @@
     <eca service="storeOrder" event="return">
         <action service="balanceOrderItemsWithNegativeReservations" mode="sync"/>
     </eca>
+    <eca service="storeOrder" event="return">
+        <condition field-name="orderTypeId" operator="equals" value="PURCHASE_ORDER"/>
+        <action service="setUnitPriceAsLastPrice" mode="sync"/>
+    </eca>
+    <eca service="updateOrderItems" event="commit">
+        <condition field-name="orderTypeId" operator="equals" value="PURCHASE_ORDER"/>
+        <action service="setUnitPriceAsLastPrice" mode="sync"/>
+    </eca>
+    <eca service="receiveInventoryProduct" event="commit">
+        <condition field-name="facilityId" operator="is-not-empty"/>
+        <action service="setUnitPriceAsLastPrice" mode="sync"/>
+    </eca>
     <eca service="changeOrderItemStatus" event="commit">
         <condition field-name="statusId" operator="equals" value="ITEM_CANCELLED"/>
         <action service="cancelOrderInventoryReservation" mode="sync"/>

Modified: ofbiz/trunk/applications/order/servicedef/services.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/servicedef/services.xml?rev=754834&r1=754833&r2=754834&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/servicedef/services.xml (original)
+++ ofbiz/trunk/applications/order/servicedef/services.xml Mon Mar 16 07:30:35 2009
@@ -138,6 +138,7 @@
         <attribute name="orderItemAssociations" type="List" mode="IN" optional="true"/>
         <attribute name="orderInternalNotes" type="List" mode="IN" optional="true"/>
         <attribute name="orderNotes" type="List" mode="IN" optional="true"/>
+        <attribute name="supplierPartyId" type="String" mode="IN" optional="true"/>
         <attribute name="orderId" type="String" mode="INOUT" optional="true"/>
         <attribute name="statusId" type="String" mode="OUT" optional="false"/>
     </service>
@@ -295,6 +296,8 @@
             location="org.ofbiz.order.order.OrderServices" invoke="updateApprovedOrderItems">
         <description>Update the quantities/prices for an existing order</description>
         <attribute name="orderId" type="String" mode="INOUT" optional="false"/>
+        <attribute name="supplierPartyId" type="String" mode="IN" optional="true"/>
+        <attribute name="orderTypeId" type="String" mode="IN" optional="true"/>
         <attribute name="itemDescriptionMap" type="Map" mode="IN" string-map-prefix="idm_" optional="true"/>
         <attribute name="itemQtyMap" type="Map" mode="IN" string-map-prefix="iqm_" optional="false"/>
         <attribute name="itemPriceMap" type="Map" mode="IN" string-map-prefix="ipm_" optional="false"/>
@@ -926,4 +929,18 @@
         <attribute name="paymentMethodId" type="String" mode="IN" optional="true"/>
         <attribute name="paymentMethodId" type="String" mode="OUT" optional="false"/>
     </service>
+
+   <service name="setUnitPriceAsLastPrice" engine="simple"
+            location="org/ofbiz/order/order/OrderServices.xml" invoke="setUnitPriceAsLastPrice" auth="false">
+        <description>Sets unit price as last price for product</description>
+        <attribute name="supplierPartyId" type="String" mode="IN" optional="true"/>
+        <attribute name="orderTypeId" type="String" mode="IN" optional="true"/>
+        <attribute name="orderId" type="String" mode="IN" optional="true"/>
+        <attribute name="orderItems" type="List" mode="IN" optional="true"/>
+        <attribute name="facilityId" type="String" mode="IN" optional="true"/>
+        <attribute name="productId" type="String" mode="IN" optional="true"/>
+        <attribute name="unitCost" mode="IN" type="String" optional="true"/>
+        <attribute name="itemPriceMap" type="Map" mode="IN" string-map-prefix="ipm_" optional="true"/>
+        <attribute name="overridePriceMap" type="Map" mode="IN" string-map-prefix="opm_" optional="true"/>
+   </service>
 </services>

Modified: ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutHelper.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutHelper.java?rev=754834&r1=754833&r2=754834&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutHelper.java (original)
+++ ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutHelper.java Mon Mar 16 07:30:35 2009
@@ -565,6 +565,8 @@
             return null;
         }
         String orderId = this.cart.getOrderId();
+        String supplierPartyId = (String) this.cart.getAttribute("supplierPartyId");
+
         this.cart.clearAllItemStatus();
 
         BigDecimal grandTotal = this.cart.getGrandTotal();
@@ -579,6 +581,7 @@
         if (affiliateId != null) context.put("affiliateId", affiliateId);
 
         context.put("orderId", orderId);
+        context.put("supplierPartyId", supplierPartyId);
         context.put("grandTotal", grandTotal);
         context.put("userLogin", userLogin);
         context.put("visitId", visitId);

Modified: ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCartEvents.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCartEvents.java?rev=754834&r1=754833&r2=754834&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCartEvents.java (original)
+++ ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCartEvents.java Mon Mar 16 07:30:35 2009
@@ -1448,6 +1448,8 @@
 
         // set party info
         String partyId = request.getParameter("supplierPartyId");
+        cart.setAttribute("supplierPartyId", partyId);
+        
         if (!UtilValidate.isEmpty(request.getParameter("partyId"))) {
             partyId = request.getParameter("partyId");
         }

Modified: ofbiz/trunk/applications/order/webapp/ordermgr/order/editorderitems.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/webapp/ordermgr/order/editorderitems.ftl?rev=754834&r1=754833&r2=754834&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/webapp/ordermgr/order/editorderitems.ftl (original)
+++ ofbiz/trunk/applications/order/webapp/ordermgr/order/editorderitems.ftl Mon Mar 16 07:30:35 2009
@@ -53,6 +53,10 @@
             <span class="alert">${uiLabelMap.checkhelper_sales_order_lines_lookup_failed}</span>
         <#else>
             <form name="updateItemInfo" method="post" action="<@ofbizUrl>updateOrderItems?${paramString}</@ofbizUrl>">
+            <#if (orderHeader.orderTypeId == 'PURCHASE_ORDER')>  
+              <input type="hidden" name="supplierPartyId" value="${partyId}"/>
+              <input type="hidden" name="orderTypeId" value="PURCHASE_ORDER"/>
+            </#if>
             <table class="basic-table order-items" cellspacing="0">
                 <tr class="header-row">
                     <td width="30%">${uiLabelMap.ProductProduct}</td>