You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by si...@apache.org on 2007/12/03 19:45:38 UTC

svn commit: r600629 - in /ofbiz/trunk/applications/order: entitydef/eecas.xml servicedef/secas.xml servicedef/services_requirement.xml src/org/ofbiz/order/requirement/RequirementServices.java

Author: sichen
Date: Mon Dec  3 10:45:37 2007
New Revision: 600629

URL: http://svn.apache.org/viewvc?rev=600629&view=rev
Log:
Instead of using an EECA to create auto order requirements, do it when order status changes from created to approved.

Modified:
    ofbiz/trunk/applications/order/entitydef/eecas.xml
    ofbiz/trunk/applications/order/servicedef/secas.xml
    ofbiz/trunk/applications/order/servicedef/services_requirement.xml
    ofbiz/trunk/applications/order/src/org/ofbiz/order/requirement/RequirementServices.java

Modified: ofbiz/trunk/applications/order/entitydef/eecas.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/entitydef/eecas.xml?rev=600629&r1=600628&r2=600629&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/entitydef/eecas.xml (original)
+++ ofbiz/trunk/applications/order/entitydef/eecas.xml Mon Dec  3 10:45:37 2007
@@ -34,9 +34,6 @@
         <action service="quickReceiveReturn" mode="sync"/>
     </eca>
     
-    <eca entity="OrderItem" operation="create" event="return">
-        <action service="checkCreateOrderRequirement" mode="sync"/>
-    </eca>
     <eca entity="OrderItem" operation="create-store" event="return">
         <condition field-name="quoteId" operator="is-not-empty"/>
         <action service="checkUpdateQuoteStatus" mode="sync"/>

Modified: ofbiz/trunk/applications/order/servicedef/secas.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/servicedef/secas.xml?rev=600629&r1=600628&r2=600629&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/servicedef/secas.xml (original)
+++ ofbiz/trunk/applications/order/servicedef/secas.xml Mon Dec  3 10:45:37 2007
@@ -285,6 +285,14 @@
         <action service="createRequirementFromItemATP" mode="sync" run-as-user="system"/>
         <action service="checkCreateStockRequirementAtp" mode="sync" run-as-user="system"/>
     </eca>
+    <!-- create the automatic requirements for sales orders but only if the status changes from created to approved -->
+    <eca service="changeOrderStatus" event="commit" run-on-error="false">
+        <condition field-name="oldStatusId" operator="equals" value="ORDER_CREATED"/>
+        <condition field-name="statusId" operator="equals" value="ORDER_APPROVED"/>
+        <condition field-name="orderTypeId" operator="equals" value="SALES_ORDER"/>
+        <action service="createAutoRequirementsForOrder" mode="sync"/>
+    </eca>
+
     <!-- WorkEffort -->
     <eca service="createQuoteWorkEffort" event="invoke">
         <condition field-name="workEffortId" operator="is-empty" />

Modified: ofbiz/trunk/applications/order/servicedef/services_requirement.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/servicedef/services_requirement.xml?rev=600629&r1=600628&r2=600629&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/servicedef/services_requirement.xml (original)
+++ ofbiz/trunk/applications/order/servicedef/services_requirement.xml Mon Dec  3 10:45:37 2007
@@ -178,5 +178,13 @@
         <attribute mode="IN" name="fromFacilityId" optional="false" type="String"/>
         <attribute mode="IN" name="quantity" optional="true" type="Double"/>
     </service>
+
+    <service name="createAutoRequirementsForOrder" engine="java"
+            location="org.ofbiz.order.requirement.RequirementServices" invoke="createAutoRequirementsForOrder" auth="true">
+        <description>
+            Creates requirements for any products with requirementMethodEnumId PRODRQM_AUTO in the given sales order.
+        </description>
+        <attribute name="orderId" type="String" mode="IN" optional="false"/>
+    </service>
 </services>
 

Modified: ofbiz/trunk/applications/order/src/org/ofbiz/order/requirement/RequirementServices.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/requirement/RequirementServices.java?rev=600629&r1=600628&r2=600629&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/src/org/ofbiz/order/requirement/RequirementServices.java (original)
+++ ofbiz/trunk/applications/order/src/org/ofbiz/order/requirement/RequirementServices.java Mon Dec  3 10:45:37 2007
@@ -44,7 +44,7 @@
     public static final String module = RequirementServices.class.getName();
     public static final String resource_error = "OrderErrorUiLabels";
 
-    public static final Map getRequirementsForSupplier(DispatchContext ctx, Map context) {
+    public static Map getRequirementsForSupplier(DispatchContext ctx, Map context) {
         GenericDelegator delegator = ctx.getDelegator();
         LocalDispatcher dispatcher = ctx.getDispatcher();
         Locale locale = (Locale) context.get("locale");
@@ -192,4 +192,45 @@
             return ServiceUtil.returnError(UtilProperties.getMessage(resource_error, "OrderEntityExceptionSeeLogs", locale));
         }
     }
+
+    // note that this service is designed to work only when a sales order status changes from CREATED -> APPROVED because HOLD -> APPROVED is too complex
+    public static Map createAutoRequirementsForOrder(DispatchContext ctx, Map context) {
+        GenericDelegator delegator = ctx.getDelegator();
+        LocalDispatcher dispatcher = ctx.getDispatcher();
+        GenericValue userLogin = (GenericValue) context.get("userLogin");
+
+        String orderId = (String) context.get("orderId");
+        try {
+            GenericValue order = delegator.findByPrimaryKey("OrderHeader", UtilMisc.toMap("orderId", orderId));
+            GenericValue productStore = order.getRelatedOneCache("ProductStore");
+            String facilityId = productStore.getString("inventoryFacilityId");
+            List orderItems = order.getRelated("OrderItem");
+            for (Iterator iter = orderItems.iterator(); iter.hasNext(); ) {
+                GenericValue item = (GenericValue) iter.next();
+                GenericValue product = item.getRelatedOne("Product");
+                if (product == null) continue;
+                if (! "PRODRQM_AUTO".equals(product.get("requirementMethodEnumId"))) continue;
+
+                Double quantity = item.getDouble("quantity");
+                Double cancelQuantity = item.getDouble("cancelQuantity");
+                Double required = new Double( quantity.doubleValue() - (cancelQuantity == null ? 0.0 : cancelQuantity.doubleValue()) );
+                if (required.doubleValue() <= 0.0) continue;
+
+                Map input = UtilMisc.toMap("userLogin", userLogin, "facilityId", facilityId, "productId", product.get("productId"), "quantity", required, "requirementTypeId", "PRODUCT_REQUIREMENT");
+                Map results = dispatcher.runSync("createRequirement", input);
+                if (ServiceUtil.isError(results)) return results;
+                String requirementId = (String) results.get("requirementId");
+
+                input = UtilMisc.toMap("userLogin", userLogin, "orderId", order.get("orderId"), "orderItemSeqId", item.get("orderItemSeqId"), "requirementId", requirementId, "quantity", required);
+                results = dispatcher.runSync("createOrderRequirementCommitment", input);
+                if (ServiceUtil.isError(results)) return results;
+            }
+        } catch (GenericEntityException e) {
+            Debug.logError(e, module);
+        } catch (GenericServiceException e) {
+            Debug.logError(e, module);
+        }
+        return ServiceUtil.returnSuccess();
+    }
 }
+



Re: svn commit: r600629 - in /ofbiz/trunk/applications/order: entitydef/eecas.xml servicedef/secas.xml servicedef/services_requirement.xml src/org/ofbiz/order/requirement/RequirementServices.java

Posted by BJ Freeman <bj...@free-man.net>.
I really think we should step back a look at ordering as multitasking
situation.
we have like 20 orders hit the ordering system all at once.
they are evaluating which order got there first for availability of stock.
so I don't see where we can evaluate code on just a single order
happening in a certain time frame.



sichen@apache.org sent the following on 12/3/2007 10:45 AM:
> Author: sichen
> Date: Mon Dec  3 10:45:37 2007
> New Revision: 600629
> 
> URL: http://svn.apache.org/viewvc?rev=600629&view=rev
> Log:
> Instead of using an EECA to create auto order requirements, do it when order status changes from created to approved.
> 
> Modified:
>     ofbiz/trunk/applications/order/entitydef/eecas.xml
>     ofbiz/trunk/applications/order/servicedef/secas.xml
>     ofbiz/trunk/applications/order/servicedef/services_requirement.xml
>     ofbiz/trunk/applications/order/src/org/ofbiz/order/requirement/RequirementServices.java
> 
> Modified: ofbiz/trunk/applications/order/entitydef/eecas.xml
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/entitydef/eecas.xml?rev=600629&r1=600628&r2=600629&view=diff
> ==============================================================================
> --- ofbiz/trunk/applications/order/entitydef/eecas.xml (original)
> +++ ofbiz/trunk/applications/order/entitydef/eecas.xml Mon Dec  3 10:45:37 2007
> @@ -34,9 +34,6 @@
>          <action service="quickReceiveReturn" mode="sync"/>
>      </eca>
>      
> -    <eca entity="OrderItem" operation="create" event="return">
> -        <action service="checkCreateOrderRequirement" mode="sync"/>
> -    </eca>
>      <eca entity="OrderItem" operation="create-store" event="return">
>          <condition field-name="quoteId" operator="is-not-empty"/>
>          <action service="checkUpdateQuoteStatus" mode="sync"/>
> 
> Modified: ofbiz/trunk/applications/order/servicedef/secas.xml
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/servicedef/secas.xml?rev=600629&r1=600628&r2=600629&view=diff
> ==============================================================================
> --- ofbiz/trunk/applications/order/servicedef/secas.xml (original)
> +++ ofbiz/trunk/applications/order/servicedef/secas.xml Mon Dec  3 10:45:37 2007
> @@ -285,6 +285,14 @@
>          <action service="createRequirementFromItemATP" mode="sync" run-as-user="system"/>
>          <action service="checkCreateStockRequirementAtp" mode="sync" run-as-user="system"/>
>      </eca>
> +    <!-- create the automatic requirements for sales orders but only if the status changes from created to approved -->
> +    <eca service="changeOrderStatus" event="commit" run-on-error="false">
> +        <condition field-name="oldStatusId" operator="equals" value="ORDER_CREATED"/>
> +        <condition field-name="statusId" operator="equals" value="ORDER_APPROVED"/>
> +        <condition field-name="orderTypeId" operator="equals" value="SALES_ORDER"/>
> +        <action service="createAutoRequirementsForOrder" mode="sync"/>
> +    </eca>
> +
>      <!-- WorkEffort -->
>      <eca service="createQuoteWorkEffort" event="invoke">
>          <condition field-name="workEffortId" operator="is-empty" />
> 
> Modified: ofbiz/trunk/applications/order/servicedef/services_requirement.xml
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/servicedef/services_requirement.xml?rev=600629&r1=600628&r2=600629&view=diff
> ==============================================================================
> --- ofbiz/trunk/applications/order/servicedef/services_requirement.xml (original)
> +++ ofbiz/trunk/applications/order/servicedef/services_requirement.xml Mon Dec  3 10:45:37 2007
> @@ -178,5 +178,13 @@
>          <attribute mode="IN" name="fromFacilityId" optional="false" type="String"/>
>          <attribute mode="IN" name="quantity" optional="true" type="Double"/>
>      </service>
> +
> +    <service name="createAutoRequirementsForOrder" engine="java"
> +            location="org.ofbiz.order.requirement.RequirementServices" invoke="createAutoRequirementsForOrder" auth="true">
> +        <description>
> +            Creates requirements for any products with requirementMethodEnumId PRODRQM_AUTO in the given sales order.
> +        </description>
> +        <attribute name="orderId" type="String" mode="IN" optional="false"/>
> +    </service>
>  </services>
>  
> 
> Modified: ofbiz/trunk/applications/order/src/org/ofbiz/order/requirement/RequirementServices.java
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/requirement/RequirementServices.java?rev=600629&r1=600628&r2=600629&view=diff
> ==============================================================================
> --- ofbiz/trunk/applications/order/src/org/ofbiz/order/requirement/RequirementServices.java (original)
> +++ ofbiz/trunk/applications/order/src/org/ofbiz/order/requirement/RequirementServices.java Mon Dec  3 10:45:37 2007
> @@ -44,7 +44,7 @@
>      public static final String module = RequirementServices.class.getName();
>      public static final String resource_error = "OrderErrorUiLabels";
>  
> -    public static final Map getRequirementsForSupplier(DispatchContext ctx, Map context) {
> +    public static Map getRequirementsForSupplier(DispatchContext ctx, Map context) {
>          GenericDelegator delegator = ctx.getDelegator();
>          LocalDispatcher dispatcher = ctx.getDispatcher();
>          Locale locale = (Locale) context.get("locale");
> @@ -192,4 +192,45 @@
>              return ServiceUtil.returnError(UtilProperties.getMessage(resource_error, "OrderEntityExceptionSeeLogs", locale));
>          }
>      }
> +
> +    // note that this service is designed to work only when a sales order status changes from CREATED -> APPROVED because HOLD -> APPROVED is too complex
> +    public static Map createAutoRequirementsForOrder(DispatchContext ctx, Map context) {
> +        GenericDelegator delegator = ctx.getDelegator();
> +        LocalDispatcher dispatcher = ctx.getDispatcher();
> +        GenericValue userLogin = (GenericValue) context.get("userLogin");
> +
> +        String orderId = (String) context.get("orderId");
> +        try {
> +            GenericValue order = delegator.findByPrimaryKey("OrderHeader", UtilMisc.toMap("orderId", orderId));
> +            GenericValue productStore = order.getRelatedOneCache("ProductStore");
> +            String facilityId = productStore.getString("inventoryFacilityId");
> +            List orderItems = order.getRelated("OrderItem");
> +            for (Iterator iter = orderItems.iterator(); iter.hasNext(); ) {
> +                GenericValue item = (GenericValue) iter.next();
> +                GenericValue product = item.getRelatedOne("Product");
> +                if (product == null) continue;
> +                if (! "PRODRQM_AUTO".equals(product.get("requirementMethodEnumId"))) continue;
> +
> +                Double quantity = item.getDouble("quantity");
> +                Double cancelQuantity = item.getDouble("cancelQuantity");
> +                Double required = new Double( quantity.doubleValue() - (cancelQuantity == null ? 0.0 : cancelQuantity.doubleValue()) );
> +                if (required.doubleValue() <= 0.0) continue;
> +
> +                Map input = UtilMisc.toMap("userLogin", userLogin, "facilityId", facilityId, "productId", product.get("productId"), "quantity", required, "requirementTypeId", "PRODUCT_REQUIREMENT");
> +                Map results = dispatcher.runSync("createRequirement", input);
> +                if (ServiceUtil.isError(results)) return results;
> +                String requirementId = (String) results.get("requirementId");
> +
> +                input = UtilMisc.toMap("userLogin", userLogin, "orderId", order.get("orderId"), "orderItemSeqId", item.get("orderItemSeqId"), "requirementId", requirementId, "quantity", required);
> +                results = dispatcher.runSync("createOrderRequirementCommitment", input);
> +                if (ServiceUtil.isError(results)) return results;
> +            }
> +        } catch (GenericEntityException e) {
> +            Debug.logError(e, module);
> +        } catch (GenericServiceException e) {
> +            Debug.logError(e, module);
> +        }
> +        return ServiceUtil.returnSuccess();
> +    }
>  }
> +
> 
> 
> 
> 
>