Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add "External Build Order" #1071

Open
SchrodingersGat opened this issue Oct 25, 2020 · 14 comments
Open

Add "External Build Order" #1071

SchrodingersGat opened this issue Oct 25, 2020 · 14 comments
Labels
build Build orders enhancement This is an suggested enhancement or new feature

Comments

@SchrodingersGat
Copy link
Member

SchrodingersGat commented Oct 25, 2020

Add a concept which (kind of) combines the ideas of a PurchaseOrder and a BuildOrder

  • An external supplier provides a "process" which converts one part into another
  • e.g. an anodization step turns "un-anodized widget" into "anodized widget"
  • e.g. an external PCB assembler loads components onto a board
  • Needs to take items out of stock and add new items into stock
  • If items are tracked, need to make use of the install_into function
  • Also retain some of the concepts of a PurchaseOrder
@eeintech
Copy link
Contributor

I'm not sure I see the purpose of tracking external builds. It makes sense to track items and processes inside a same entity/company, however outside jobs just turn in as "finished goods" therefore purchase/external build order leads to parts and stocks. Maybe I just don't see what kind of application would this be used for.

@SchrodingersGat
Copy link
Member Author

Agreed it's a weird case. This is at the request of a friend of mine who has a very particular use case. I'm not 100% sure what the actual implementation looks like yet, this issue is (for now) mostly just a placeholder until i work out if it necessarily makes sense.

@jlaw
Copy link

jlaw commented Feb 18, 2021

I think I am looking for this use case. I want to use InvenTree to track PCB manufacturing:

  1. Order 15 bare boards from PCB fab (supplier+manufacturer).
  2. Receive 15.
  3. Order 10 assembled boards from PCB assembler (supplier+manufacturer). They require 10 bare boards from me, so I need to supply 10 to them from my 15 stock.
  4. Receive 10.
  5. Sell 5 to customer.
  6. Customer wants 10 more.
  7. Place order with PCB assembler for 5 more, taking the remaining 5 bare boards.
  8. Receive 5.
  9. Take 5 new + 5 existing in inventory to sell to customer.

Let me know if there is already a way to do this, as it seems I need to currently 'sell' my stock to my PCB assembler so when I receive the finished goods, I don't have double count.

@eeintech
Copy link
Contributor

@jlaw Instead of "selling" your PCB + BOM to your PCB assembler, why not creating build orders for that process?
Granted, your PCB and other parts will still show as "in-stock" in your InvenTree but once they are allocated to the build they become essentially unusable for anything else. So that would be one way I would do it.

@jlaw
Copy link

jlaw commented Feb 18, 2021

Yes, that is one way, but I would essentially have to double enter the order: once as a BO and the second as a PO, which I think this issue was suggesting to combine.

@eeintech
Copy link
Contributor

@jlaw Ha right! I kinda lost track of the initial idea 😅

@SchrodingersGat
Copy link
Member Author

SchrodingersGat commented Feb 18, 2021

@jlaw this is a perfect example of this use-case - an external supplier that you need to also supply parts to. It's a mix of a "purchase order" and a "build order" in a way.

InvenTree does not really support this yet, but I think it should! I just don't have a picture in my head yet of how to implement it.

Maybe we could add the concept of assigning internal stock against a purchase order? So the stock is consumed by the order like it would be for a build order?

Open to suggestions on this, it could be quite difficult!

@eeintech
Copy link
Contributor

eeintech commented Mar 10, 2021

@jlaw I played with purchase orders, sales orders and build orders with the latest InvenTree version, for the same scope of PCB assembly manufacturing and distribution.

Here are my thoughts for your workflow:

  • Order 15 bare boards from PCB fab (supplier+manufacturer).

Associate supplier to PCB part and create purchase order for PCB.

  • Receive 15.

Complete PO

  • Order 10 assembled boards from PCB assembler (supplier+manufacturer). They require 10 bare boards from me, so I need to supply 10 to them from my 15 stock.

Create build order for PCB assembly, allocate solely the PCB parts

  • Receive 10.

Complete BO

  • Sell 5 to customer.

Create sales order and complete it

  • Customer wants 10 more.

Create new sales order, create new build order from sales order

  • Place order with PCB assembler for 5 more, taking the remaining 5 bare boards.

Allocate only PCB part in new BO

  • Receive 5.

Complete new BO

  • Take 5 new + 5 existing in inventory to sell to customer.

Complete new SO.

I don't think InvenTree is currently missing any logic other than "annotating" build orders as being fulfilled externally, the company name and maybe link a purchase order for the PCB part from the build order.
We could also associate a "price" tag to the "external" build order, but the rest of the flow should work.
What do you think?

For my company I am going to propose a similar flow with existing features.

@jlaw
Copy link

jlaw commented Mar 11, 2021

@eeintech Thanks for breakdown.

I think to solve this would require allowing a build to be add-able to a PO like you said. Somehow make a build be a 'part'.

I'm unsure if the location of the build order and location of the parts to build the order needs to be at the vendor/suppliers location. If we don't need to check or track this, then we may not be able to account for shipping and tracking delivery times., which may or may not be a feature now or in the future.

@miggland
Copy link
Contributor

I saw this issue (again) because of #4044.

Just wanted to express my interest, ie add that we have a similar process to @jlaw - the background being that we order parts, designed by us, from various manufacturers. We then have external companies combine these parts into others - ie perform a Build Order. We need to supply them from our stock. A Build Order is great to keep track of which parts are required, just "selling" the stock to the external party wouldn't really be a good solution.

I use the available functionality to cover this - ie a Build Order, and have a "stock location" which represents the external manufacturer.

What's missing is having the data ready for actually sending the order to the external manufacturer.
The connection of the BO to an external company, as @eeintech pointed out, would allow creating a report/webhook/... whatever to actually send the order to the right place.

What's not covered is the fact that BOs have a different numbering system - creating an order from the BO would "mess up" the list of POs by having a different reference system. This is not a big issue, and I could probably fix this by changing our process to take this into account. I see no easy solution to this problem in InvenTree either.

@zoopsel
Copy link

zoopsel commented Dec 12, 2022

We actually have a very similar issue since we order assembled pcbs at another company, however we also have to provide the parts, or at least some of them.

We currently do this by having the circuit board assemblers as a stock location in our Inventree database and use that stock location as a source location for the "external" build orders. This way we can simulate the external circuit board assemblers using up the parts we provided them and we can allocate stock automatically.
We then create a purchase order where we reference the build order as an extra line item. This way we have a build order that, after completion, adds the assembled parts to our inventory and at the same time we can track that it was a purchase order aswell.

The problem with that approach is more that it becomes very tedious to supply the stock locations of the circuit board assemblers with the parts they order from us, as there is no efficient way to make bulk stock transactions in Inventree as for now at least.

@JambonLeVrai
Copy link

Bumping this to show my interest toward this functionality.
Just like most of the people here, I have mechanical parts that come unpainted, and we outsource the painting operation. Currently what we do to work around this is that we have a "part painting" part for each mechanical part we paint, and we make a purchase order for these paintings. Then we combine the unpainted part with the painting through a build order to get the painted part. It is working and keeps the prices up-to-date but it is quite a bit tedious.
I also have a situation which I don't believe has been talked about here, with manufacturing assembled PCBs. We need to supply only some components, and they will take care of the rest. If we want to track the stock of our components, and keep the price of the whole PCB, it is also getting tedious. What I have thought of is also making two different parts, one part is the "pcb manufacturing and assembly" purchased from the manufacturer, and another part which is the "complete pcb", which would be an assembly in Inventree with both the "pcb manufacturing and assembly" and the other components we need to send. This also mean that it is getting more complicated if the components we need to send to the manufacturer vary from one order to another (with the component shortages, sometimes the manufacturer have the chips, sometimes they do not and we have to send some), which would mean multiple BoMs (and therefore probably creating different "variants" of the same actual part with different BoMs).
The issue with making a system with only a purchase order that allows to subtract some specified stock would be with the actual pricing information for the resulting part, since the total cost of the final part would be the cost of the outsourcing operation + the initial cost of the part.
I believe that the simplest way would be to add an "Outsourcing BoM" to the final part. Then the part could be bought using "Outsourcing orders", which would need stock to be allocated just like a Build order, but be placed like a Purchase order, along with a price / part. That way we can keep track of the real price of the part.

@matmair
Copy link
Member

matmair commented Aug 24, 2023

This is a pretty involved idea but I am sure the team would be willing to provide some pointers and possible data flows if someone steps up to to the coding.

@SchrodingersGat
Copy link
Member Author

@JambonLeVrai thanks for adding your thoughts!

Currently what we do to work around this is that we have a "part painting" part for each mechanical part we paint, and we make a purchase order for these paintings. Then we combine the unpainted part with the painting through a build order to get the painted part.

I can see the "appeal" of your approach, but also that it results in multiple InvenTree processes where perhaps a single step would be simpler.

manufacturing assembled PCBs. We need to supply only some components, and they will take care of the rest.

I do this a lot and it does really result in complex pricing data which is hard to integrate. An "outsourced BOM" or "external build order" which can handle all of the different requirements listed in this thread sounds pretty complex.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
build Build orders enhancement This is an suggested enhancement or new feature
Projects
None yet
Development

No branches or pull requests

7 participants