mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-10-31 13:15:43 +00:00 
			
		
		
		
	Exclude sales order allocations when searching stock
This commit is contained in:
		| @@ -840,7 +840,13 @@ class SalesOrderLineItem(OrderLineItem): | ||||
|     def get_api_url(): | ||||
|         return reverse('api-so-line-list') | ||||
|  | ||||
|     order = models.ForeignKey(SalesOrder, on_delete=models.CASCADE, related_name='lines', verbose_name=_('Order'), help_text=_('Sales Order')) | ||||
|     order = models.ForeignKey( | ||||
|         SalesOrder, | ||||
|         on_delete=models.CASCADE, | ||||
|         related_name='lines', | ||||
|         verbose_name=_('Order'), | ||||
|         help_text=_('Sales Order') | ||||
|     ) | ||||
|  | ||||
|     part = models.ForeignKey('part.Part', on_delete=models.SET_NULL, related_name='sales_order_line_items', null=True, verbose_name=_('Part'), help_text=_('Part'), limit_choices_to={'salable': True}) | ||||
|  | ||||
| @@ -954,7 +960,11 @@ class SalesOrderAllocation(models.Model): | ||||
|         if len(errors) > 0: | ||||
|             raise ValidationError(errors) | ||||
|  | ||||
|     line = models.ForeignKey(SalesOrderLineItem, on_delete=models.CASCADE, verbose_name=_('Line'), related_name='allocations') | ||||
|     line = models.ForeignKey( | ||||
|         SalesOrderLineItem, | ||||
|         on_delete=models.CASCADE, | ||||
|         verbose_name=_('Line'), | ||||
|         related_name='allocations') | ||||
|  | ||||
|     item = models.ForeignKey( | ||||
|         'stock.StockItem', | ||||
|   | ||||
| @@ -6,6 +6,8 @@ JSON API for the Stock app | ||||
| from __future__ import unicode_literals | ||||
|  | ||||
| from datetime import datetime, timedelta | ||||
| from django.db.models import query | ||||
| from django.db.models.query import QuerySet | ||||
|  | ||||
| from django.utils.translation import ugettext_lazy as _ | ||||
|  | ||||
| @@ -34,6 +36,7 @@ from company.models import Company, SupplierPart | ||||
| from company.serializers import CompanySerializer, SupplierPartSerializer | ||||
|  | ||||
| from order.models import PurchaseOrder | ||||
| from order.models import SalesOrder, SalesOrderAllocation | ||||
| from order.serializers import POSerializer | ||||
|  | ||||
| import common.settings | ||||
| @@ -645,6 +648,31 @@ class StockList(generics.ListCreateAPIView): | ||||
|                 # Filter StockItem without build allocations or sales order allocations | ||||
|                 queryset = queryset.filter(Q(sales_order_allocations__isnull=True) & Q(allocations__isnull=True)) | ||||
|  | ||||
|         # Exclude StockItems which are already allocated to a particular SalesOrder | ||||
|         exclude_so_allocation = params.get('exclude_so_allocation', None) | ||||
|  | ||||
|         if exclude_so_allocation is not None: | ||||
|  | ||||
|             try: | ||||
|                 order = SalesOrder.objects.get(pk=exclude_so_allocation) | ||||
|  | ||||
|                 # Grab all the active SalesOrderAllocations for this order | ||||
|                 allocations = SalesOrderAllocation.objects.filter( | ||||
|                     line__pk__in=[ | ||||
|                         line.pk for line in order.lines.all() | ||||
|                     ] | ||||
|                 ) | ||||
|  | ||||
|                 # Exclude any stock item which is already allocated to the sales order | ||||
|                 queryset = queryset.exclude( | ||||
|                     pk__in=[ | ||||
|                         a.item.pk for a in allocations | ||||
|                     ] | ||||
|                 ) | ||||
|  | ||||
|             except (ValueError, SalesOrder.DoesNotExist): | ||||
|                 pass | ||||
|  | ||||
|         # Does the client wish to filter by the Part ID? | ||||
|         part_id = params.get('part', None) | ||||
|  | ||||
|   | ||||
| @@ -1631,7 +1631,7 @@ function loadSalesOrderLineItemTable(table, options={}) { | ||||
|                         location_detail: true, | ||||
|                         in_stock: true, | ||||
|                         part: line_item.part, | ||||
|                         // TODO: Exclude items already allocated to this sales order | ||||
|                         exclude_so_allocation: options.order, | ||||
|                     }  | ||||
|                 }, | ||||
|                 quantity: { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user