diff --git a/InvenTree/InvenTree/urls.py b/InvenTree/InvenTree/urls.py
index a9f53a7014..e74faf3a87 100644
--- a/InvenTree/InvenTree/urls.py
+++ b/InvenTree/InvenTree/urls.py
@@ -11,6 +11,7 @@ from django.contrib import admin
from django.contrib.auth import views as auth_views
from company.urls import company_urls
+from company.urls import manufacturer_part_urls
from company.urls import supplier_part_urls
from company.urls import price_break_urls
@@ -114,6 +115,7 @@ dynamic_javascript_urls = [
urlpatterns = [
url(r'^part/', include(part_urls)),
+ url(r'^manufacturer-part/', include(manufacturer_part_urls)),
url(r'^supplier-part/', include(supplier_part_urls)),
url(r'^price-break/', include(price_break_urls)),
diff --git a/InvenTree/company/models.py b/InvenTree/company/models.py
index 202453b9ae..340cb1f91f 100644
--- a/InvenTree/company/models.py
+++ b/InvenTree/company/models.py
@@ -307,7 +307,7 @@ class ManufacturerPart(models.Model):
manufacturer = models.ForeignKey(
Company,
on_delete=models.SET_NULL,
- related_name='manufactured_parts',
+ related_name='manufacturer_parts',
limit_choices_to={
'is_manufacturer': True
},
@@ -386,6 +386,24 @@ class SupplierPart(models.Model):
help_text=_('Supplier stock keeping unit')
)
+ manufacturer = models.ForeignKey(
+ Company,
+ on_delete=models.SET_NULL,
+ related_name='manufactured_parts',
+ limit_choices_to={
+ 'is_manufacturer': True
+ },
+ verbose_name=_('Manufacturer'),
+ help_text=_('Select manufacturer'),
+ null=True, blank=True
+ )
+
+ MPN = models.CharField(
+ max_length=100, blank=True, null=True,
+ verbose_name=_('MPN'),
+ help_text=_('Manufacturer part number')
+ )
+
link = InvenTreeURLField(
blank=True, null=True,
verbose_name=_('Link'),
diff --git a/InvenTree/part/templates/part/manufacturer.html b/InvenTree/part/templates/part/manufacturer.html
new file mode 100644
index 0000000000..1e023c6349
--- /dev/null
+++ b/InvenTree/part/templates/part/manufacturer.html
@@ -0,0 +1,91 @@
+{% extends "part/part_base.html" %}
+{% load static %}
+{% load i18n %}
+
+{% block menubar %}
+{% include 'part/navbar.html' with tab='manufacturers' %}
+{% endblock %}
+
+{% block heading %}
+{% trans "Part Manufacturers" %}
+{% endblock %}
+
+{% block details %}
+
+
+
+
+{% endblock %}
+
+{% block js_load %}
+{{ block.super }}
+{% endblock %}
+{% block js_ready %}
+ {{ block.super }}
+
+ $('#manufacturer-create').click(function () {
+ launchModalForm(
+ "{% url 'manufacturer-part-create' %}",
+ {
+ reload: true,
+ data: {
+ part: {{ part.id }}
+ },
+ secondary: [
+ {
+ field: 'manufacturer',
+ label: '{% trans "New Manufacturer" %}',
+ title: '{% trans "Create new manufacturer" %}',
+ url: "{% url 'manufacturer-create' %}",
+ }
+ ]
+ });
+ });
+
+ $("#manufacturer-part-delete").click(function() {
+
+ var selections = $("#manufacturer-table").bootstrapTable("getSelections");
+
+ var parts = [];
+
+ selections.forEach(function(item) {
+ parts.push(item.pk);
+ });
+
+ launchModalForm("{% url 'manufacturer-part-delete' %}", {
+ data: {
+ parts: parts,
+ },
+ reload: true,
+ });
+ });
+
+ loadSupplierPartTable(
+ "#supplier-table",
+ "{% url 'api-supplier-part-list' %}",
+ {
+ params: {
+ part: {{ part.id }},
+ part_detail: true,
+ supplier_detail: true,
+ manufacturer_detail: true,
+ },
+ }
+ );
+
+ linkButtonsToSelection($("#supplier-table"), ['#supplier-part-options'])
+
+{% endblock %}
\ No newline at end of file
diff --git a/InvenTree/part/templates/part/navbar.html b/InvenTree/part/templates/part/navbar.html
index e621af038a..1c94c0358f 100644
--- a/InvenTree/part/templates/part/navbar.html
+++ b/InvenTree/part/templates/part/navbar.html
@@ -70,7 +70,7 @@
{% endif %}
{% if part.purchaseable and roles.purchase_order.view %}
-
+
{% trans "Manufacturers" %}
diff --git a/InvenTree/part/urls.py b/InvenTree/part/urls.py
index f275edede2..f1185fbe8c 100644
--- a/InvenTree/part/urls.py
+++ b/InvenTree/part/urls.py
@@ -60,6 +60,7 @@ part_detail_urls = [
url(r'^bom/?', views.PartDetail.as_view(template_name='part/bom.html'), name='part-bom'),
url(r'^build/?', views.PartDetail.as_view(template_name='part/build.html'), name='part-build'),
url(r'^used/?', views.PartDetail.as_view(template_name='part/used_in.html'), name='part-used-in'),
+ url(r'^manufacturers/?', views.PartDetail.as_view(template_name='part/manufacturer.html'), name='part-manufacturers'),
url(r'^suppliers/?', views.PartDetail.as_view(template_name='part/supplier.html'), name='part-suppliers'),
url(r'^orders/?', views.PartDetail.as_view(template_name='part/orders.html'), name='part-orders'),
url(r'^sales-orders/', views.PartDetail.as_view(template_name='part/sales_orders.html'), name='part-sales-orders'),