mirror of
https://github.com/inventree/InvenTree.git
synced 2025-07-06 05:30:56 +00:00
PEP fixes
This commit is contained in:
@ -585,86 +585,6 @@ class Build(MPTTModel):
|
||||
self.status = BuildStatus.CANCELLED
|
||||
self.save()
|
||||
|
||||
def getAutoAllocations(self):
|
||||
"""
|
||||
Return a list of StockItem objects which will be allocated
|
||||
using the 'AutoAllocate' function.
|
||||
|
||||
For each item in the BOM for the attached Part,
|
||||
the following tests must *all* evaluate to True,
|
||||
for the part to be auto-allocated:
|
||||
|
||||
- The sub_item in the BOM line must *not* be trackable
|
||||
- There is only a single stock item available (which has not already been allocated to this build)
|
||||
- The stock item has an availability greater than zero
|
||||
|
||||
Returns:
|
||||
A list object containing the StockItem objects to be allocated (and the quantities).
|
||||
Each item in the list is a dict as follows:
|
||||
{
|
||||
'stock_item': stock_item,
|
||||
'quantity': stock_quantity,
|
||||
}
|
||||
"""
|
||||
|
||||
allocations = []
|
||||
|
||||
"""
|
||||
Iterate through each item in the BOM
|
||||
"""
|
||||
|
||||
for bom_item in self.bom_items:
|
||||
|
||||
part = bom_item.sub_part
|
||||
|
||||
# If the part is "trackable" it cannot be auto-allocated
|
||||
if part.trackable:
|
||||
continue
|
||||
|
||||
# Skip any parts which are already fully allocated
|
||||
if self.isPartFullyAllocated(part, None):
|
||||
continue
|
||||
|
||||
# How many parts are required to complete the output?
|
||||
required = self.unallocatedQuantity(part, None)
|
||||
|
||||
# Grab a list of stock items which are available
|
||||
stock_items = self.availableStockItems(part, None)
|
||||
|
||||
# Ensure that the available stock items are in the correct location
|
||||
if self.take_from is not None:
|
||||
# Filter for stock that is located downstream of the designated location
|
||||
stock_items = stock_items.filter(location__in=[loc for loc in self.take_from.getUniqueChildren()])
|
||||
|
||||
# Only one StockItem to choose from? Default to that one!
|
||||
if stock_items.count() == 1:
|
||||
stock_item = stock_items[0]
|
||||
|
||||
# Double check that we have not already allocated this stock-item against this build
|
||||
build_items = BuildItem.objects.filter(
|
||||
build=self,
|
||||
stock_item=stock_item,
|
||||
)
|
||||
|
||||
if len(build_items) > 0:
|
||||
continue
|
||||
|
||||
# How many items are actually available?
|
||||
if stock_item.quantity > 0:
|
||||
|
||||
# Only take as many as are available
|
||||
if stock_item.quantity < required:
|
||||
required = stock_item.quantity
|
||||
|
||||
allocation = {
|
||||
'stock_item': stock_item,
|
||||
'quantity': required,
|
||||
}
|
||||
|
||||
allocations.append(allocation)
|
||||
|
||||
return allocations
|
||||
|
||||
@transaction.atomic
|
||||
def unallocateOutput(self, output, part=None):
|
||||
"""
|
||||
@ -804,37 +724,6 @@ class Build(MPTTModel):
|
||||
# Remove the build output from the database
|
||||
output.delete()
|
||||
|
||||
@transaction.atomic
|
||||
def autoAllocate(self):
|
||||
"""
|
||||
Run auto-allocation routine to allocate StockItems to this Build.
|
||||
|
||||
Args:
|
||||
output: If specified, only auto-allocate against the given built output
|
||||
|
||||
Returns a list of dict objects with keys like:
|
||||
|
||||
{
|
||||
'stock_item': item,
|
||||
'quantity': quantity,
|
||||
}
|
||||
|
||||
See: getAutoAllocations()
|
||||
"""
|
||||
|
||||
allocations = self.getAutoAllocations()
|
||||
|
||||
for item in allocations:
|
||||
# Create a new allocation
|
||||
build_item = BuildItem(
|
||||
build=self,
|
||||
stock_item=item['stock_item'],
|
||||
quantity=item['quantity'],
|
||||
install_into=None
|
||||
)
|
||||
|
||||
build_item.save()
|
||||
|
||||
@transaction.atomic
|
||||
def subtractUntrackedStock(self, user):
|
||||
"""
|
||||
|
Reference in New Issue
Block a user