Author: jleroux
Date: Sun Jan 13 15:22:35 2008 New Revision: 611674 URL: http://svn.apache.org/viewvc?rev=611674&view=rev Log: As it was not "mergeable" automatically, I merged (trunk) revision 590004 by hand Modified: ofbiz/branches/release4.0/applications/manufacturing/servicedef/services_production_run.xml ofbiz/branches/release4.0/applications/manufacturing/src/org/ofbiz/manufacturing/jobshopmgt/ProductionRunServices.java ofbiz/branches/release4.0/applications/order/src/org/ofbiz/order/order/OrderServices.java ofbiz/branches/release4.0/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutHelper.java Modified: ofbiz/branches/release4.0/applications/manufacturing/servicedef/services_production_run.xml URL: http://svn.apache.org/viewvc/ofbiz/branches/release4.0/applications/manufacturing/servicedef/services_production_run.xml?rev=611674&r1=611673&r2=611674&view=diff ============================================================================== --- ofbiz/branches/release4.0/applications/manufacturing/servicedef/services_production_run.xml (original) +++ ofbiz/branches/release4.0/applications/manufacturing/servicedef/services_production_run.xml Sun Jan 13 15:22:35 2008 @@ -298,9 +298,9 @@ </service> <service name="createProductionRunForMktgPkg" engine="java" location="org.ofbiz.manufacturing.jobshopmgt.ProductionRunServices" invoke="createProductionRunForMktgPkg" auth="true"> - <description>Creates a production run for a marketing package when the ordered item is out of stock (ATP quantity less than zero.) - The quantity produced is either the quantity ordered or to bring total ATP quantity of the product back up to zero, - whichever is less.</description> + <description>Creates a production run for a marketing package when the product is out of stock (ATP quantity less than zero.) + Attempts to produce enough to bring total ATP quantity of the product back up to zero, but will only produce what is + available based on the components required.</description> <attribute mode="IN" name="orderId" optional="false" type="String"/> <attribute mode="IN" name="orderItemSeqId" optional="false" type="String"/> <attribute mode="IN" name="facilityId" optional="false" type="String"/> Modified: ofbiz/branches/release4.0/applications/manufacturing/src/org/ofbiz/manufacturing/jobshopmgt/ProductionRunServices.java URL: http://svn.apache.org/viewvc/ofbiz/branches/release4.0/applications/manufacturing/src/org/ofbiz/manufacturing/jobshopmgt/ProductionRunServices.java?rev=611674&r1=611673&r2=611674&view=diff ============================================================================== --- ofbiz/branches/release4.0/applications/manufacturing/src/org/ofbiz/manufacturing/jobshopmgt/ProductionRunServices.java (original) +++ ofbiz/branches/release4.0/applications/manufacturing/src/org/ofbiz/manufacturing/jobshopmgt/ProductionRunServices.java Sun Jan 13 15:22:35 2008 @@ -1979,32 +1979,33 @@ } if (Debug.verboseOn()) { Debug.logVerbose("Order item [" + orderItem + "] Existing ATP = [" + existingAtp + "]", module); } - // we only need to produce more marketing packages if it is out of stock. note that the ATP quantity already includes this order item + // we only need to produce more marketing packages if there isn't enough in stock. if (existingAtp < 0.0) { - // how much should we produce? If there already is some inventory, then just produce enough to bring ATP back up to zero, which may be less than the quantity ordered. - // Otherwise, the ATP might be more negative due to previous orders, so just produce the quantity on this order - double qtyToProduce = Math.min((0 - existingAtp), orderItem.getDouble("quantity").doubleValue()); - if (Debug.verboseOn()) { Debug.logVerbose("Order quantity = [" + orderItem.getDouble("quantity").doubleValue() + "] quantity to produce = [" + qtyToProduce + "]", module); } - + // how many should we produce? If there already is some inventory, then just produce enough to bring ATP back up to zero. + double qtyRequired = 0 - existingAtp; + // ok so that's how many we WANT to produce, but let's check how many we can actually produce based on the available components Map serviceContext = new HashMap(); serviceContext.put("productId", orderItem.getString("productId")); + serviceContext.put("facilityId", facilityId); + serviceContext.put("userLogin", userLogin); + Map resultService = dispatcher.runSync("getMktgPackagesAvailable", serviceContext); + double mktgPackagesAvailable = ((Double) resultService.get("availableToPromiseTotal")).doubleValue(); + + double qtyToProduce = Math.min(qtyRequired, mktgPackagesAvailable); + + if (qtyToProduce > 0) { + if (Debug.verboseOn()) { Debug.logVerbose("Required quantity (all orders) = [" + qtyRequired + "] quantity to produce = [" + qtyToProduce + "]", module); } + serviceContext.put("pRQuantity", new Double(qtyToProduce)); serviceContext.put("startDate", UtilDateTime.nowTimestamp()); - serviceContext.put("facilityId", facilityId); //serviceContext.put("workEffortName", ""); - serviceContext.put("userLogin", userLogin); - Map resultService = dispatcher.runSync("createProductionRun", serviceContext); + resultService = dispatcher.runSync("createProductionRun", serviceContext); String productionRunId = (String)resultService.get("productionRunId"); result.put("productionRunId", productionRunId); try { - delegator.create("WorkOrderItemFulfillment", UtilMisc.toMap("workEffortId", productionRunId, "orderId", orderId, "orderItemSeqId", orderItemSeqId)); - } catch (GenericEntityException e) { - return ServiceUtil.returnError("Error creating a production run for marketing package for order [" + orderId + " " + orderItemSeqId + "]: " + e.getMessage()); - } - try { serviceContext.clear(); serviceContext.put("productionRunId", productionRunId); serviceContext.put("statusId", "PRUN_COMPLETED"); @@ -2022,7 +2023,11 @@ return result; } else { - if (Debug.verboseOn()) { Debug.logVerbose("Order item [" + orderItem + "] does not need to be produced - ATP is [" + existingAtp + "]", module); } + if (Debug.verboseOn()) { Debug.logVerbose("There are not enough components available to produce any marketing packages [" + orderItem.getString("productId") + "]", module); } + return ServiceUtil.returnSuccess(); + } + } else { + if (Debug.verboseOn()) { Debug.logVerbose("No marketing packages need to be produced - ATP is [" + existingAtp + "]", module); } return ServiceUtil.returnSuccess(); } } catch (GenericServiceException e) { Modified: ofbiz/branches/release4.0/applications/order/src/org/ofbiz/order/order/OrderServices.java URL: http://svn.apache.org/viewvc/ofbiz/branches/release4.0/applications/order/src/org/ofbiz/order/order/OrderServices.java?rev=611674&r1=611673&r2=611674&view=diff ============================================================================== --- ofbiz/branches/release4.0/applications/order/src/org/ofbiz/order/order/OrderServices.java (original) +++ ofbiz/branches/release4.0/applications/order/src/org/ofbiz/order/order/OrderServices.java Sun Jan 13 15:22:35 2008 @@ -1059,6 +1059,21 @@ } invErrMsg += " with ID " + orderItem.getString("productId") + " is no longer in stock. Please try reducing the quantity or removing the product from this order."; resErrorMessages.add(invErrMsg); + // If the product is a marketing package auto, attempt to create enough packages to bring ATP back to 0, won't necessarily create enough to cover this order. + if ("MARKETING_PKG_AUTO".equals(product.get("productTypeId"))) { + // do something tricky here: run as the "system" user + // that can actually create and run a production run + GenericValue permUserLogin = delegator.findByPrimaryKeyCache("UserLogin", UtilMisc.toMap("userLoginId", "system")); + Map inputMap = new HashMap(); + inputMap.put("facilityId", productStore.getString("inventoryFacilityId")); + inputMap.put("orderId", orderItem.getString("orderId")); + inputMap.put("orderItemSeqId", orderItem.getString("orderItemSeqId")); + inputMap.put("userLogin", permUserLogin); + Map prunResult = dispatcher.runSync("createProductionRunForMktgPkg", inputMap); + if (ServiceUtil.isError(prunResult)) { + Debug.logError(ServiceUtil.getErrorMessage(prunResult) + " for input:" + inputMap, module); + } + } } } catch (GenericServiceException e) { String errMsg = "Fatal error calling reserveStoreInventory service: " + e.toString(); Modified: ofbiz/branches/release4.0/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutHelper.java URL: http://svn.apache.org/viewvc/ofbiz/branches/release4.0/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutHelper.java?rev=611674&r1=611673&r2=611674&view=diff ============================================================================== --- ofbiz/branches/release4.0/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutHelper.java (original) +++ ofbiz/branches/release4.0/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutHelper.java Sun Jan 13 15:22:35 2008 @@ -620,17 +620,7 @@ if (ServiceUtil.isError(prunResult)) { Debug.logError(ServiceUtil.getErrorMessage(prunResult) + " for input:" + inputMap, module); } - } else if ("MARKETING_PKG_AUTO".equals(product.getString("productTypeId"))) { - Map inputMap = new HashMap(); - inputMap.put("facilityId", productStore.getString("inventoryFacilityId")); - inputMap.put("orderId", orderId); - inputMap.put("orderItemSeqId", orderItem.getString("orderItemSeqId")); - inputMap.put("userLogin", permUserLogin); - Map prunResult = dispatcher.runSync("createProductionRunForMktgPkg", inputMap); - if (ServiceUtil.isError(prunResult)) { - Debug.logError(ServiceUtil.getErrorMessage(prunResult) + " for input:" + inputMap, module); - } - } + } } catch (Exception e) { String service = e.getMessage(); Map messageMap = UtilMisc.toMap("service", service); |
Free forum by Nabble | Edit this page |