diff --git a/InvenTree/company/models.py b/InvenTree/company/models.py
index 2e6d3c694c..63fcf4add8 100644
--- a/InvenTree/company/models.py
+++ b/InvenTree/company/models.py
@@ -7,6 +7,7 @@ from __future__ import unicode_literals
import os
+from django.apps import apps
from django.db import models
from django.urls import reverse
from django.conf import settings
@@ -111,6 +112,18 @@ class Company(models.Model):
""" Return True if this company supplies any parts """
return self.part_count > 0
+ @property
+ def stock_items(self):
+ """ Return a list of all stock items supplied by this company """
+ stock = apps.get_model('stock', 'StockItem')
+ return stock.objects.filter(supplier_part__supplier=self.id).all()
+
+ @property
+ def stock_count(self):
+ """ Return the number of stock items supplied by this company """
+ stock = apps.get_model('stock', 'StockItem')
+ return stock.objects.filter(supplier_part__supplier=self.id).count()
+
class Contact(models.Model):
""" A Contact represents a person who works at a particular company.
diff --git a/InvenTree/company/templates/company/company_base.html b/InvenTree/company/templates/company/company_base.html
index 56983784ee..8c64190865 100644
--- a/InvenTree/company/templates/company/company_base.html
+++ b/InvenTree/company/templates/company/company_base.html
@@ -72,6 +72,11 @@ InvenTree | Company - {{ company.name }}
{% endblock %}
+{% block js_load %}
+{{ block.super }}
+
+{% endblock %}
+
{% block js_ready %}
enableDragAndDrop(
diff --git a/InvenTree/company/templates/company/detail_stock.html b/InvenTree/company/templates/company/detail_stock.html
new file mode 100644
index 0000000000..89ea0fdb2f
--- /dev/null
+++ b/InvenTree/company/templates/company/detail_stock.html
@@ -0,0 +1,25 @@
+{% extends "company/company_base.html" %}
+{% load static %}
+
+{% block details %}
+
+{% include "company/tabs.html" with tab='stock' %}
+
+
Supplier Stock
+
+
+
+{% endblock %}
+{% block js_ready %}
+{{ block.super }}
+
+ loadStockTable($('#stock-table'),
+ {
+ url: "{% url 'api-stock-list' %}",
+ params: {
+ supplier: {{ company.id }},
+ }
+ });
+
+{% endblock %}
\ No newline at end of file
diff --git a/InvenTree/company/templates/company/tabs.html b/InvenTree/company/templates/company/tabs.html
index df8b9a4fc9..211b56e1d1 100644
--- a/InvenTree/company/templates/company/tabs.html
+++ b/InvenTree/company/templates/company/tabs.html
@@ -6,6 +6,9 @@
Supplier Parts {{ company.part_count }}
+
+ Stock {{ company.stock_count }}
+
{% if 0 %}
Purchase Orders
diff --git a/InvenTree/company/urls.py b/InvenTree/company/urls.py
index 2c5018ebec..0f8719fe01 100644
--- a/InvenTree/company/urls.py
+++ b/InvenTree/company/urls.py
@@ -16,6 +16,7 @@ company_detail_urls = [
# url(r'orders/?', views.CompanyDetail.as_view(template_name='company/orders.html'), name='company-detail-orders'),
url(r'parts/?', views.CompanyDetail.as_view(template_name='company/detail_part.html'), name='company-detail-parts'),
+ url(r'stock/?', views.CompanyDetail.as_view(template_name='company/detail_stock.html'), name='company-detail-stock'),
url(r'thumbnail/?', views.CompanyImage.as_view(), name='company-image'),
diff --git a/InvenTree/stock/api.py b/InvenTree/stock/api.py
index 29b151ddbf..3c08ff8822 100644
--- a/InvenTree/stock/api.py
+++ b/InvenTree/stock/api.py
@@ -242,6 +242,7 @@ class StockList(generics.ListCreateAPIView):
Additional query parameters are available:
- location: Filter stock by location
- category: Filter by parts belonging to a certain category
+ - supplier: Filter by supplier
"""
def get_queryset(self):
@@ -275,6 +276,12 @@ class StockList(generics.ListCreateAPIView):
except PartCategory.DoesNotExist:
pass
+ # Filter by supplier
+ supplier_id = self.request.query_params.get('supplier', None)
+
+ if supplier_id:
+ stock_list = stock_list.filter(supplier_part__supplier=supplier_id)
+
return stock_list
serializer_class = StockItemSerializer