How to trigger production run of arbitrary product on order 'approve'ment

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

How to trigger production run of arbitrary product on order 'approve'ment

ofbiz.user
Dear List,

in demo setup, when there is an order CREATED including a
'Configurable PC',
there is a 'production run' (indeed 2 of them) generated without
user interaction.

Let aside tnat this sounds a little odd to me, because the order is
not yet 'approve'd, yet the workshop may allready start production,

I would like to have an arbitrary non-configurable product trigger
it's 'production run' on 'APPROVE'al of the order.

When I tried a 'configurable good' product with no config, there
was no 'production run' triggered (possibly due to lack of
'configuration').

By chance, I managed to configure products that trigger
'requirements' on order 'APPROVE'al, but I found no way to trigger
a 'production run' from that.

So, another way to go could be to have a 'production run' from
'requirement' triggered on order 'APPROVE'al; even a button on the
order form next to the requirement link would be fine.

It is essential that the 'order' field in the 'production run'
record is filled, so that the content of the order can be accessed
from 'production run'


I see these options to solve my problem:

a) have a 'configurable good' with no options 'configured'
automatically and
   thus trigger 'production run', but on order approval only

b) have an arbitrary product or 'good' that generates a requirement
on
   order approval, then have a (possibly cyclic) service triggering
a
   production run from that

c) have a (possibly new) product type that trigger it's production
run on
   order approval


I would probably prefer b).


Is there documentation about these workflows and how they can be
configured?


Kind regards,




Reply | Threaded
Open this post in threaded view
|

Re: How to trigger production run of arbitrary product on order 'approve'ment

Sharan-F
Hi

There is a way to setup Requirements being created using the Requirement Method Enum Id on the main product screen. You'll need to expand the Inventory section to see it. (Perhaps this is the way you are generating the requirements?)

You'll still need to attach your product to a manufacturing routing etc

Set the Requirement Method Enum Id to Create a Requirement for Each Sales Order
Then when you Approve a Sales Order the Requirement is created.

And in theory when you Approve the Requirement – the Production Run should be created for your Sales Order.

I do remember there was a bug in that twhen he Requirement was created ,it was as a Product Requirement and these don't create production runs. The workaround used to be that if you changed the Product Requirement to an Internal Requirement then it would create the production run.  

I've done a quick test on the Trunk and that workaround doesn't seem to be working anymore so something has changed that may need to be fixed. So the functionality you need is there - it maybe just needs to be looked at again to find out why it's stopped working.

Thanks
Sharan
Reply | Threaded
Open this post in threaded view
|

Re: How to trigger production run of arbitrary product on order 'approve'ment

ofbiz.user
In reply to this post by ofbiz.user
TDear Sharan, dear list,

thank you for your helpful answer, Sharan.

I have written down (below) some lengthy experimenting and
reasoning that
lead me to the following two questions:


--> QUESTION 2:
Where/how can I identify the essential configuration parameters and
code that
triggers a production run for demo product 'configurable pc' on
order creation?


--> QUESTION 1:

Would it make sense to have createProductionRunFromRequirement() to
walk up
the requirement:order relation and kick
createProductionRunsForProductBom()
once for each SALESorder in the relation and shove the sales orders
through
createProductionRunsForProductBom() into one 'production run'?
Variant:
Would it make sense to have createProductionRunFromRequirement() to
walk up
the requirement:order relation and kick
createProductionRunsForProductBom()
once, and shove the sales order that it finds through
createProductionRunsForProductBom() into the 'production run'?
(It depends, doesn't it?)


I would be delighted to hear your thoughts.




--------------------------------------------------------------------
---


I did the following:

1. Manufacturing Manager -> Routing: Create new routing 'newRouting'
2. Catalog Manager -> Products -> Product:
   Inventory Section:
       Disc. When Inv. Not Avail? N
       Requirement Method Enum Id: Automatic for every sales Order
       Require Inventory: N
       Inventory Message
       Lot Id: forbidden
3. Catalog Manager -> Products -> Work Effort
   Add 'newRouting', relation type 'Product and Routing
Association' cost 0.1
4. Create order by shop front end
   Status 'created': does not contain requirement link
5. Set order status 'approved':
   Order contains requirement link 'newRequirement'
   Requirement Type Id: 'Product requirement',
   Status 'created'
   Facility ID, Product ID, Quantity are set correctly
6. Set Requirement status to 'approved'.
   No production run is created.
7. Change Requirement Type Id to 'Internal requirement'
   No production run is generated.
8. Framework Web Tools -> Service Engine -> Run Service
   Service name: 'createProductionRunFromRequirement'
   Pool: pool
   quantity: 1
   requirementId: 'newRequirement'
   Response:
   errorMessage
   Production Run Not Created: The following required parameter is
missing: [createProductionRunsForProductBom.startDate]
   - I am not sure if in the real world a start date for an un-
approved
   - production run is a requirement.
   - Contrarily, I think the start date of the production run
should be
   - assigned by the facility management. Otherwise facility
management could
   - be forced to ramp up capacity in an instant to cover the
request,
   - while that might even not be posssible at all.
9. Set start date in requirement yesterday, repeat service run
   Response:
   'No production run is required for product with id 'productID'
in date 2015-07-05 00:00:00.000;
   please verify the validity dates of the bill of materials and
routing.'
   Same happens with date tomorrow.
   - This message seems outright odd to me, because I do support
the opinion
   - that a real world production run does not need a bill of
materials at all.
   - I dispute the notions that it needs a task nor cost > 0 nor a
   - duration to model reality in certain nontrivial cases.
   
   
ManufacturingProductionRunIsNotRequiredForProductId is issued in
applications/manufacturing/src/org/ofbiz/manufacturing/jobshopmgt/Pr
oductionRunServices.java line 2689,
public static Map<String, Object>
createProductionRunsForProductBom(DispatchContext dctx, Map<String,
? extends Object> context)

in case 'workEffortId == null' (This message could be a little
misleading,
because this means only that tree.createManufacturingOrders(..)
returned NULL
AND DID NOT THROW)
This looks like two bugs to me, but possibly small fry IMHO.

createProductionRunsForProductBom() does not deal with the orderID,
so the link
to the order would not show up in the production run anyway. So
does it's
caller createProductionRunFromRequirement() (which I recon
represents the
service I called manually)

Requirement has an 1:n relation to order, the order generating the
requirement
is correctly referenced.

Another order for the same product generates a new requirement and
leaves
the previous one unchanged (no new orders linked to old
requirement).


--> QUESTION 1:

Would it make sense to have createProductionRunFromRequirement() to
walk up
the order relation and kick createProductionRunsForProductBom()
once for each
SALESorder in the relation and shove the sales orders through
createProductionRunsForProductBom() into one 'production run'?
Variant:
Would it make sense to have createProductionRunFromRequirement() to
walk up
the order relation and kick createProductionRunsForProductBom()
once, and
shove the sales order that it finds through
createProductionRunsForProductBom()
into the 'production run'?


tree.createManufacturingOrders(..) refers to
public String createManufacturingOrders(String facilityId, Date
date,
String workEffortName, String description, String routingId, String
orderId,
String orderItemSeqId, String shipGroupSeqId, String shipmentId,
GenericValue userLogin)  throws GenericEntityException

obviously eats orderID.

This could provide for my scenario b) order -> requirement ->
production run by
cyclic service with manual intervention to set requirement types to
'internal'
(still annoying...but maybe the requirement type could be fixed
easily?)

But:
Obviously demo Product 'Configurable PC' can generate a production
run directly
from order (even though at the wrong order state transition from
nil to created
instead of created to approved)

-->
It seems easier to change just that trigger condition than have a
cyclic
service trigger the production runs from requirements.  


--> QUESTION 2:
Where can I find the essential configuration parameters and code
that triggers
a production run for 'configurable pc' on order creation?



   


On Mon, 06 Jul 2015 19:37:50 +0200 "Sharan-F"
<[hidden email]> wrote:

>Hi
>
> There is a way to setup Requirements being created using the
> Requirement Method Enum Id on the main product screen. You'll
> need to expand
>the
>Inventory section to see it. (Perhaps this is the way you are
>generating the
>requirements?)
>
>You'll still need to attach your product to a manufacturing
>routing etc
>
>Set the Requirement Method Enum Id to Create a Requirement for
>Each Sales Order. Then when you Approve a Sales Order the
> Requirement is created.
>
>And in theory when you Approve the Requirement – the Production
>Run should
>be created for your Sales Order.
>
>I do remember there was a bug in that twhen he Requirement was
>created ,it
>was as a Product Requirement and these don't create production
>runs. The
>workaround used to be that if you changed the Product Requirement
>to an
>Internal Requirement then it would create the production run.  
>
>I've done a quick test on the Trunk and that workaround doesn't
>seem to be
>working anymore so something has changed that may need to be
>fixed. So the
>functionality you need is there - it maybe just needs to be looked
>at again
>to find out why it's stopped working.
>
>Thanks
>Sharan
>
>
>
>--
>View this message in context:
>http://ofbiz.135035.n4.nabble.com/How-to-trigger-production-run-of-
>arbitrary-product-on-order-approve-ment-tp4670760p4670786.html
>Sent from the OFBiz - User mailing list archive at Nabble.com.

Reply | Threaded
Open this post in threaded view
|

Re: How to trigger production run of arbitrary product on order 'approve'ment

Sharan-F
Hi

Thanks for all the details.  I'd like to do some testing to replicate what you describe and also do some further investigation but I won't have time to look at this again before the weekend. Unless you get some responses beforehand, I'll let you know what I find.

Thanks
Sharan