[ https://issues.apache.org/jira/browse/OFBIZ-7356?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Swapnil Shah reassigned OFBIZ-7356: ----------------------------------- Assignee: Swapnil Shah > OFBIZ-6964: Document finalized design to support replenishment planning > through any inter-company facility > ---------------------------------------------------------------------------------------------------------- > > Key: OFBIZ-7356 > URL: https://issues.apache.org/jira/browse/OFBIZ-7356 > Project: OFBiz > Issue Type: Sub-task > Components: manufacturing, order, product > Reporter: Swapnil Shah > Assignee: Swapnil Shah > > Here are high level design notes to based on the requirement specified under > OFBIZ-7355 to support the product level replenishment from any inter-company > facility before raising the ordering from an outside vendor. > * We could extend the MRP logic (MrpEvent,Requirenent) to honor these new > types and create corresponding event & requirement for Stock transfer between > facilities. > * Introduce two new entities ProductFacilityAssoc & FacilityAssocType and use > them in conjunction with MrpEventType and corresponding RequirementType to > serve the requirement for replenishing the store's via Inter-facility > transfers mode. The data model & UI could be extended as follows: > {code} > <!-- New Entity ProductFacilityAssoc (Product-wise associations between > facilities to define from what all facilities a given product can be > replenished)--> > <entity entity-name="ProductFacilityAssoc" > title="Define associations between Product facilities"> > <field name="productId" type="id-ne"/> > <field name="facilityId" type="id-ne"/> > <field name="facilityIdTo" type="id-ne"/> > <field name="facilityAssocTypeId" type="id-ne"/> > <field name="fromDate" type="date-time"/> > <field name="thruDate" type="date-time"/> > <field name="sequenceNum" type="numeric"/> > <prim-key field="productId"/> > <prim-key field="facilityId"/> > <prim-key field="facilityIdTo"/> > <prim-key field="facilityAssocTypeId"/> > <prim-key field="fromDate"/> > <relation type="one" fk-name="PRFACASSOC_PRO" rel-entity-name="Product"> > <key-map field-name="productId"/> > </relation> > <relation type="one" fk-name="PRFACASSOC_FAC" title="From" > rel-entity-name="Facility"> > <key-map field-name="facilityId"/> > </relation> > <relation type="one" fk-name="PRFACASSOC_FACTO" title="To" > rel-entity-name="Facility"> > <key-map field-name="facilityIdTo" rel-field-name="facilityId"/> > </relation> > <relation type="one" fk-name="PRFACASSOC_TYPE" > rel-entity-name="FacilityAssocType"> > <key-map field-name="facilityAssocTypeId"/> > </relation> > </entity> > <!-- New Entity FacilityAssocType (type of associations between facilities)--> > <entity entity-name="FacilityAssocType" > title="Define associations between facilities"> > <field name="FacilityAssocType" type="id-ne"/> > <field name="description" type="description"/> > <prim-key field="facilityAssocTypeId"/> > </entity> > <!-- Extend Entity MrpEvent (for destination facility)--> > <entity entity-name="MrpEvent" > <field name="facilityIdTo" type="id-ne"/> > </entity> > <!-- Extend Entity Requirement (for destination facility)--> > <entity entity-name="Requirement" > <field name="facilityIdTo" type="id-ne"/> > </entity> > <!-- New FacilityAssocType (type of association between facilities)--> > <ProductFacilityAssocType productFacilityAssocTypeId="BACKUP_WAREHOUSE" > description="Facility that serves another facility in terms of inventory"/> > <!-- New ProductFacilityAssoc (Association between facilities)--> > <ProductFacilityAssoc productId="GZ-8544" facilityId ="RegionalWarehouse_01" > facilityIdTo="StoreWarehouse_01" facilityAssocTypeId="BACKUP_WAREHOUSE" > sequenceNum="01" fromDate="2001-01-01 12:00:00"/> > <ProductFacilityAssoc productId="GZ-8544" facilityId ="RegionalWarehouse_02" > facilityIdTo="StoreWarehouse_01" facilityAssocTypeId="BACKUP_WAREHOUSE" > sequenceNum="02" fromDate="2001-01-01 12:00:00"/> > <ProductFacilityAssoc productId="GZ-8544" facilityId ="CentralWarehouse" > facilityIdTo="StoreWarehouse_01" facilityAssocTypeId="BACKUP_WAREHOUSE" > sequenceNum="03" fromDate="2001-01-01 12:00:00"/> > <ProductFacilityAssoc productId="GZ-8544" facilityId ="CentralWarehouse" > facilityIdTo="RegionalWarehouse_01" facilityAssocTypeId="BACKUP_WAREHOUSE" > sequenceNum="01" fromDate="2001-01-01 12:00:00"/> > <ProductFacilityAssoc productId="GZ-8544" facilityId ="CentralWarehouse" > facilityIdTo="RegionalWarehouse_02" facilityAssocTypeId="BACKUP_WAREHOUSE" > sequenceNum="01" fromDate="2001-01-01 12:00:00"/> > <!-- New MRPEventType (apart from existing ones in Ofbiz)--> > <MrpEventType description="Initial ATP" mrpEventTypeId="INITIAL_ATP"/> > <MrpEventType description="Proposed stock transfer if ATP is less than > minimum quantity" mrpEventTypeId="PROP_ATP_STOCK_TRANSFER"/> > <!-- New RequirementType (apart from existing ones in Ofbiz)--> > <RequirementType description="Inter-facility Transfer Requirement" > requirementTypeId="TRANSFER_REQUIREMENT"/> > <!-- New Enumeration for Product Store Facility's requirementhMethodEnumId to > be used to trigger inter-facility transfer --> > <Enumeration description="When ATP Reaches Minimum Stock for > Product-Store-Facility" enumCode="XFER_STOCK_ATP" enumId="XFERRQM_STOCK_ATP" > enumTypeId="PROD_REQ_METHOD"/> > <!-- Existing ProductStore for setting primary facility for each store --> > <ProductStore productStoreId="9100" inventoryFacilityId="StoreWarehouse_01" > checkInventory="N" oneInventoryFacility="N" requireInventory="N" > reserveInventory="Y" reserveOrderEnumId="INVRO_FIFO_REC" /> > <!-- Extended ProductStoreFacility for setting RMEI)--> > <ProductStoreFacility productStoreId="9100" facilityId=="StoreWarehouse_01" > requirementMethodEnumId="XFERRQM_STOCK_ATP" fromDate="2001-04-13 12:00:00"/> > <!-- Existing ProductFacility (with Minimum Stock and ATP) --> > <ProductFacility facilityId="StoreWarehouse_01" > lastInventoryCount="20.000000" minimumStock="100.000000" productId="GZ-8544"/> > <ProductFacility facilityId="RegionalWarehouse_01" > lastInventoryCount="40.000000" minimumStock="200.000000" productId="GZ-8544"/> > <ProductFacility facilityId="RegionalWarehouse_02" > lastInventoryCount="60.000000" minimumStock="200.000000" productId="GZ-8544"/> > <ProductFacility facilityId="CentralWarehouse" > lastInventoryCount="200.000000" minimumStock="300.000000" > productId="GZ-8544"/> > {code} > MRP engine would start creating event beginning with store's primary facility > based on set RMEI under ProductStoreFacility e.g, XFERRQM_STOCK_ATP for > StoreWarehouse_01, In other words if MinStock < ATP , then MRP algorithm > would: > # Look up and consume the respective ATP from all the eligible "facilityIdTo" > (based on ProductFacilityAssoc), from where given product is transferable. > Based on their priorities start allocating ATP unless it meet the > (MinStock-ATP) requirement for a given store e.g., 'StoreWarehouse_01' . > # Create new MRP Event with Event type "PROP_ATP_STOCK_TRANSFER" with > Proposed Quantity = MINIMUM STOCK - ATP from the facility (with highest > priority i.e.,RegionalWarehouse_01) to the destination facility. > ## If demand for (MinStock-ATP) is still not fully met by any facility with > higher priority then repeat step#1 for all the associated facilities in > descending order of priority unless ATP from all eligible facilities is > exhausted. > # Based on above MRP Event Type and proposed quantity, In turn create the new > Requirement with type TRANSFER_REQUIREMENT between originating and > destination facility. > # Over Requirement screen (UI) we can provide the "Transfer" button against > all the requirement with type TRANSFER_REQUIREMENT > # On hitting the "Transfer" button, The new 'Stock Transfer' requests could > be created for a product between eligible facilities based on above step. > # The created Stock Transfer request can be completed by shipping and > receiving given product from originating facility and destination facility > respectively. -- This message was sent by Atlassian JIRA (v6.3.15#6346)