Author: jacopoc
Date: Sat Mar 10 14:24:01 2007 New Revision: 516798 URL: http://svn.apache.org/viewvc?view=rev&rev=516798 Log: Added support for facility groups in MRP: if a facility group is specified (instead of a facility id) the MRP will use the facilities in the group as warehouse facility (WAREHOUSE) and manufacturing facility (PLANT). Modified: ofbiz/trunk/applications/manufacturing/servicedef/services_mrp.xml ofbiz/trunk/applications/manufacturing/src/org/ofbiz/manufacturing/mrp/MrpServices.java ofbiz/trunk/applications/manufacturing/src/org/ofbiz/manufacturing/mrp/ProposedOrder.java ofbiz/trunk/applications/manufacturing/webapp/manufacturing/mrp/MrpForms.xml Modified: ofbiz/trunk/applications/manufacturing/servicedef/services_mrp.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/manufacturing/servicedef/services_mrp.xml?view=diff&rev=516798&r1=516797&r2=516798 ============================================================================== --- ofbiz/trunk/applications/manufacturing/servicedef/services_mrp.xml (original) +++ ofbiz/trunk/applications/manufacturing/servicedef/services_mrp.xml Sat Mar 10 14:24:01 2007 @@ -28,8 +28,9 @@ <service name="executeMrp" engine="java" location="org.ofbiz.manufacturing.mrp.MrpServices" invoke="executeMrp" auth="true" use-transaction="false"> <description>Performs a run of Mrp</description> - <attribute name="facilityId" type="String" form-display="true" form-label="Facility" mode="IN" optional="false"/> - <attribute name="mrpName" type="String" form-display="true" form-label="Mrp Name" mode="IN" optional="true"/> + <attribute name="facilityGroupId" type="String" mode="IN" optional="true"/> + <attribute name="facilityId" type="String" mode="IN" optional="true"/> + <attribute name="mrpName" type="String" mode="IN" optional="true"/> <attribute name="msgResult" type="List" mode="OUT" optional="false"/> </service> <service name="initInventoryEventPlanned" engine="java" Modified: ofbiz/trunk/applications/manufacturing/src/org/ofbiz/manufacturing/mrp/MrpServices.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/manufacturing/src/org/ofbiz/manufacturing/mrp/MrpServices.java?view=diff&rev=516798&r1=516797&r2=516798 ============================================================================== --- ofbiz/trunk/applications/manufacturing/src/org/ofbiz/manufacturing/mrp/MrpServices.java (original) +++ ofbiz/trunk/applications/manufacturing/src/org/ofbiz/manufacturing/mrp/MrpServices.java Sat Mar 10 14:24:01 2007 @@ -463,15 +463,51 @@ */ public static Map executeMrp(DispatchContext ctx, Map context) { Debug.logInfo("executeMrp called", module); - //Context + GenericDelegator delegator = ctx.getDelegator(); LocalDispatcher dispatcher = ctx.getDispatcher(); GenericValue userLogin = (GenericValue) context.get("userLogin"); Timestamp now = UtilDateTime.nowTimestamp(); String mrpName = (String)context.get("mrpName"); + String facilityGroupId = (String)context.get("facilityGroupId"); String facilityId = (String)context.get("facilityId"); - // Variable declaration + String manufacturingFacilityId = null; + if (UtilValidate.isEmpty(facilityId) && UtilValidate.isEmpty(facilityGroupId)) { + return ServiceUtil.returnError("facilityId and facilityGroupId cannot be both null"); + } + if (UtilValidate.isEmpty(facilityId)) { + try { + GenericValue facilityGroup = delegator.findByPrimaryKey("FacilityGroup", UtilMisc.toMap("facilityGroupId", facilityGroupId)); + if (UtilValidate.isEmpty(facilityGroup)) { + return ServiceUtil.returnError("facilityGroupId [" + facilityGroupId + "] is not valid"); + } + List facilities = facilityGroup.getRelated("FacilityGroupMember", UtilMisc.toList("sequenceNum")); + if (UtilValidate.isEmpty(facilities)) { + return ServiceUtil.returnError("No facility associated to facilityGroupId [" + facilityGroupId + "]"); + } + Iterator facilitiesIt = facilities.iterator(); + while (facilitiesIt.hasNext()) { + GenericValue facilityMember = (GenericValue)facilitiesIt.next(); + GenericValue facility = facilityMember.getRelatedOne("Facility"); + if ("WAREHOUSE".equals(facility.getString("facilityTypeId")) && UtilValidate.isEmpty(facilityId)) { + facilityId = facility.getString("facilityId"); + } + if ("PLANT".equals(facility.getString("facilityTypeId")) && UtilValidate.isEmpty(manufacturingFacilityId)) { + manufacturingFacilityId = facility.getString("facilityId"); + } + } + } catch (GenericEntityException e) { + return ServiceUtil.returnError("Problem loading facility group information: " + e.getMessage()); + } + } else { + manufacturingFacilityId = facilityId; + } + + if (UtilValidate.isEmpty(facilityId) || UtilValidate.isEmpty(manufacturingFacilityId)) { + return ServiceUtil.returnError("facilityId and manufacturingFacilityId cannot be both null"); + } + int bomLevelWithNoEvent = 0; double stockTmp = 0; String oldProductId = null; @@ -486,7 +522,7 @@ double minimumStock = 0; int daysToShip = 0; List components = null; - boolean isbuild = false; + boolean isBuilt = false; GenericValue routing = null; Map result = null; @@ -565,9 +601,9 @@ components = (List)serviceResponse.get("components"); if (components != null && components.size() > 0) { BOMNode node = ((BOMNode)components.get(0)).getParentNode(); - isbuild = node.isManufactured(); + isBuilt = node.isManufactured(); } else { - isbuild = false; + isBuilt = false; } // ##################################################### @@ -581,7 +617,7 @@ eventDate = inventoryEventForMRP.getTimestamp("eventDate"); // to be just before the requirement eventDate.setTime(eventDate.getTime()-1); - ProposedOrder proposedOrder = new ProposedOrder(product, facilityId, isbuild, eventDate, qtyToStock); + ProposedOrder proposedOrder = new ProposedOrder(product, facilityId, manufacturingFacilityId, isBuilt, eventDate, qtyToStock); proposedOrder.setMrpName(mrpName); // calculate the ProposedOrder quantity and update the quantity object property. proposedOrder.calculateQuantityToSupply(reorderQuantity, minimumStock, iteratorListInventoryEventForMRP); @@ -607,15 +643,15 @@ } if (components != null && components.size() > 0) { BOMNode node = ((BOMNode)components.get(0)).getParentNode(); - isbuild = node.isManufactured(); + isBuilt = node.isManufactured(); } else { - isbuild = false; + isBuilt = false; } // ##################################################### // calculate the ProposedOrder requirementStartDate and update the requirementStartDate object property. Map routingTaskStartDate = proposedOrder.calculateStartDate(daysToShip, routing, delegator, dispatcher, userLogin); - if (isbuild) { + if (isBuilt) { // process the product components processBomComponent(product, proposedOrder.getQuantity(), proposedOrder.getRequirementStartDate(), routingTaskStartDate, components); } @@ -625,7 +661,7 @@ } Map eventMap = UtilMisc.toMap("productId", product.getString("productId"), "eventDate", eventDate, - "inventoryEventPlanTypeId", (isbuild? "PROP_MANUF_O_RECP" : "PROP_PUR_O_RECP")); + "inventoryEventPlanTypeId", (isBuilt? "PROP_MANUF_O_RECP" : "PROP_PUR_O_RECP")); try { InventoryEventPlannedServices.createOrUpdateInventoryEventPlanned(eventMap, new Double(proposedOrder.getQuantity()), null, delegator); } catch (GenericEntityException e) { Modified: ofbiz/trunk/applications/manufacturing/src/org/ofbiz/manufacturing/mrp/ProposedOrder.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/manufacturing/src/org/ofbiz/manufacturing/mrp/ProposedOrder.java?view=diff&rev=516798&r1=516797&r2=516798 ============================================================================== --- ofbiz/trunk/applications/manufacturing/src/org/ofbiz/manufacturing/mrp/ProposedOrder.java (original) +++ ofbiz/trunk/applications/manufacturing/src/org/ofbiz/manufacturing/mrp/ProposedOrder.java Sat Mar 10 14:24:01 2007 @@ -50,20 +50,22 @@ public static final String resource = "ManufacturingUiLabels"; protected GenericValue product; - protected boolean isbuild; + protected boolean isBuilt; protected String productId; protected String facilityId; + protected String manufacturingFacilityId; protected String mrpName; protected Timestamp requiredByDate; protected Timestamp requirementStartDate; protected double quantity; - public ProposedOrder(GenericValue product, String facilityId, boolean isbuild, Timestamp requiredByDate, double quantity) { + public ProposedOrder(GenericValue product, String facilityId, String manufacturingFacilityId, boolean isBuilt, Timestamp requiredByDate, double quantity) { this.product = product; this.productId = product.getString("productId"); this.facilityId = facilityId; - this.isbuild = isbuild; + this.manufacturingFacilityId = manufacturingFacilityId; + this.isBuilt = isBuilt; this.requiredByDate = requiredByDate; this.quantity = quantity; this.requirementStartDate = null; @@ -97,7 +99,7 @@ Map result = null; Timestamp endDate = (Timestamp) requiredByDate.clone(); Timestamp startDate = endDate; - if (isbuild) { + if (isBuilt) { List listRoutingTaskAssoc = null; if (routing == null) { try { @@ -211,11 +213,11 @@ Map parameters = UtilMisc.toMap("userLogin", userLogin); parameters.put("productId", productId); - parameters.put("facilityId", facilityId); + parameters.put("facilityId", (isBuilt? manufacturingFacilityId: facilityId)); parameters.put("requiredByDate", requiredByDate); parameters.put("requirementStartDate", requirementStartDate); parameters.put("quantity", new Double(quantity)); - parameters.put("requirementTypeId", (isbuild? "INTERNAL_REQUIREMENT" : "PRODUCT_REQUIREMENT")); + parameters.put("requirementTypeId", (isBuilt? "INTERNAL_REQUIREMENT" : "PRODUCT_REQUIREMENT")); if (mrpName != null) { parameters.put("description", "MRP_" + mrpName); } else { Modified: ofbiz/trunk/applications/manufacturing/webapp/manufacturing/mrp/MrpForms.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/manufacturing/webapp/manufacturing/mrp/MrpForms.xml?view=diff&rev=516798&r1=516797&r2=516798 ============================================================================== --- ofbiz/trunk/applications/manufacturing/webapp/manufacturing/mrp/MrpForms.xml (original) +++ ofbiz/trunk/applications/manufacturing/webapp/manufacturing/mrp/MrpForms.xml Sat Mar 10 14:24:01 2007 @@ -20,10 +20,16 @@ <forms xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.ofbiz.org/dtds/widget-form.xsd"> + <form name="RunMrp" type="single" target="runMrpGo" title=""> <field name="mrpName" title="${uiLabelMap.ManufacturingMrpName}"><text size="20"/></field> + <field name="facilityGroupId" title="${uiLabelMap.ProductFacilityGroup}"> + <drop-down allow-empty="true"> + <entity-options entity-name="FacilityGroup" description="${facilityGroupName} [${facilityGroupId}]"/> + </drop-down> + </field> <field name="facilityId" title="${uiLabelMap.ProductFacility}"> - <drop-down allow-empty="false"> + <drop-down allow-empty="true"> <entity-options entity-name="Facility" description="${facilityName} [${facilityId}]"/> </drop-down> </field> |
Free forum by Nabble | Edit this page |