[FR] Allow transfer of parts for a build order to a production location

This issue has been tracked since 2023-01-21.

Please verify that this feature request has NOT been suggested before.

  • I checked and didn't find similar feature request

Problem statement

Currently, when creating a build order, components can be allocated against a particular Stock Item. Then, no transfer of stock takes place until the build is completed. This creates two issues:

  • The physical stock on the shelf may not be accurate, as items may be transferred to another area for hours or days during the build process.
  • When a build is in progress, if the Stock Item is counted, InvenTree assumes that all allocated stock is still in the storage location. This means that inventory can not be counted if there are any build orders being performed, as there is no way to track stock that is "in production" but not yet completed.

Suggested solution

Another step between build order item allocation, and build order completion. After allocating stock, the user should be able to transfer stock to another location. In the simplest use case, the user can designate a single Production stock location, which can hold parts in production until their respective build orders are completed. Another, more advanced way to handle this would be to add a flag to stock locations to allow them to be used to hold production items. In this manner these locations would not be available to hold inventory unless transferred there against a build order.

Describe alternatives you've considered

Other options to accomplish the same thing would be for the user to manually transfer production items to another area, but this is clunky and there isn't currently a way to automatically transfer build order items. This could work without the concept of "production" stock locations, but would still need a way to transfer all allocated build items to a stock location. I do think that closing off the list of allowable locations to a subset of all locations makes sense in most every use case I can think of.

Examples of other systems

Axelor, Odoo, and ERPNext all have similar features, allowing for production component stock to be transferred against a production order or work order to accommodate longer build times and more accurately track inventory.

Do you want to develop this?

  • I want to develop this.
matmair wrote this answer on 2023-01-23

Hi there @kmudlemmon
I know of that extra step in other software and the confusion it often caused in the shops I saw it at. If there is a good UI implemented this can certainly work.
Will be interesting to see if this gains traction with other users or devs.

kmudlemmon wrote this answer on 2023-01-23

Another solution that just came to mind which makes this extra step optional:
Add an action on a build item which creates stock transactions that remove allocated stock from StockItems. This doesn't require a stock location for the inventory to be put, only removes necessary stock from the db ahead of build order completion.
I see the user flow like this:

  1. Build order is created.
  2. Some or all items are allocated.
  3. Allocated items may be "picked" creating stock transactions which remove them from stock. Build items can be picked individually or all at once (similar to allocation). Each item picked is removed from the stock item and from the allocation quantity.
  4. Build order completion is unchanged, except the stock quantity removed for each build item is the difference between the remaining allocated stock and picked stock. This makes the stock picking step is optional.

As for implementation, another field added to Build Items indicating the picked quantity is the only db change needed.
This action could be reversed easily as well to accommodate cancelling a build order. If this feature complicates some use cases, it could easily be disabled via a configuration flag as well.

Another benefit is that the build item effectively becomes the location of the stock, and queries can be performed to calculate where stock is. The "Available Stock" component of the part view could specify an "In Use" quantity, which can be investigated by an additional column in the part's build order allocations table displaying the picked quantity.

There are undoubtedly some edge cases I haven't thought through, but I think this is a much simpler solution in terms of implementation and ease of use.

matmair wrote this answer on 2023-01-23

That sounds like a better solution, lets's see what the core team thinks.
@inventree/maintainer @inventree/triage

SchrodingersGat wrote this answer on 2023-01-30

@kmudlemmon the later solution seems pretty nice to me, and looks to be mostly a "front end" / "user interface" approach. Would you be willing to implement this?

Please note also that are going to be migrating to react for the front-end so any "major" UI changes should hold off until that transition has been made.

More Details About Repo
Owner Name inventree
Repo Name InvenTree
Full Name inventree/InvenTree
Language Python
Created Date 2017-03-23
Updated Date 2023-03-31
Star Count 2586
Watcher Count 61
Fork Count 411
Issue Count 141


Issue Title Created Date Updated Date