You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ja...@apache.org on 2007/03/10 23:24:02 UTC
svn commit: r516798 - in /ofbiz/trunk/applications/manufacturing:
servicedef/services_mrp.xml src/org/ofbiz/manufacturing/mrp/MrpServices.java
src/org/ofbiz/manufacturing/mrp/ProposedOrder.java
webapp/manufacturing/mrp/MrpForms.xml
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>