mirror of
https://github.com/inventree/InvenTree.git
synced 2025-04-30 04:26:44 +00:00
Re-added ability to link manufacturer part to supplier part via API
This commit is contained in:
parent
76572bf82f
commit
1bf49a1458
@ -9,7 +9,9 @@ import os
|
|||||||
|
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from django.core.validators import MinValueValidator
|
from django.core.validators import MinValueValidator
|
||||||
|
from django.core.exceptions import ValidationError
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
from django.db.utils import IntegrityError
|
||||||
from django.db.models import Sum, Q, UniqueConstraint
|
from django.db.models import Sum, Q, UniqueConstraint
|
||||||
|
|
||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
@ -473,6 +475,57 @@ class SupplierPart(models.Model):
|
|||||||
def get_absolute_url(self):
|
def get_absolute_url(self):
|
||||||
return reverse('supplier-part-detail', kwargs={'pk': self.id})
|
return reverse('supplier-part-detail', kwargs={'pk': self.id})
|
||||||
|
|
||||||
|
def save(self, *args, **kwargs):
|
||||||
|
""" Overriding save method to process the linked ManufacturerPart
|
||||||
|
"""
|
||||||
|
|
||||||
|
if 'manufacturer' in kwargs:
|
||||||
|
manufacturer_id = kwargs.pop('manufacturer')
|
||||||
|
|
||||||
|
try:
|
||||||
|
manufacturer = Company.objects.get(pk=int(manufacturer_id))
|
||||||
|
except (ValueError, Company.DoesNotExist):
|
||||||
|
manufacturer = None
|
||||||
|
else:
|
||||||
|
manufacturer = None
|
||||||
|
if 'MPN' in kwargs:
|
||||||
|
MPN = kwargs.pop('MPN')
|
||||||
|
else:
|
||||||
|
MPN = None
|
||||||
|
|
||||||
|
if manufacturer or MPN:
|
||||||
|
if not self.manufacturer_part:
|
||||||
|
# Create ManufacturerPart
|
||||||
|
manufacturer_part = ManufacturerPart.create(part=self.part,
|
||||||
|
manufacturer=manufacturer,
|
||||||
|
mpn=MPN,
|
||||||
|
description=self.description)
|
||||||
|
self.manufacturer_part = manufacturer_part
|
||||||
|
else:
|
||||||
|
# Update ManufacturerPart (if ID exists)
|
||||||
|
try:
|
||||||
|
manufacturer_part_id = self.manufacturer_part.id
|
||||||
|
except AttributeError:
|
||||||
|
manufacturer_part_id = None
|
||||||
|
|
||||||
|
if manufacturer_part_id:
|
||||||
|
try:
|
||||||
|
(manufacturer_part, created) = ManufacturerPart.objects.update_or_create(part=self.part,
|
||||||
|
manufacturer=manufacturer,
|
||||||
|
MPN=MPN)
|
||||||
|
except IntegrityError:
|
||||||
|
manufacturer_part = None
|
||||||
|
raise ValidationError(f'ManufacturerPart linked to {self.part} from manufacturer {manufacturer.name}'
|
||||||
|
f'with part number {MPN} already exists!')
|
||||||
|
|
||||||
|
if manufacturer_part:
|
||||||
|
self.manufacturer_part = manufacturer_part
|
||||||
|
|
||||||
|
self.clean()
|
||||||
|
self.validate_unique()
|
||||||
|
|
||||||
|
super().save(*args, **kwargs)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
unique_together = ('part', 'supplier', 'SKU')
|
unique_together = ('part', 'supplier', 'SKU')
|
||||||
|
|
||||||
|
@ -231,6 +231,24 @@ class SupplierPartSerializer(InvenTreeModelSerializer):
|
|||||||
'supplier_detail',
|
'supplier_detail',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
def create(self, validated_data):
|
||||||
|
""" Extract manufacturer data and process ManufacturerPart """
|
||||||
|
|
||||||
|
# Create SupplierPart
|
||||||
|
supplier_part = super().create(validated_data)
|
||||||
|
|
||||||
|
# Get ManufacturerPart raw data (unvalidated)
|
||||||
|
manufacturer_id = self.initial_data.get('manufacturer', None)
|
||||||
|
MPN = self.initial_data.get('MPN', None)
|
||||||
|
|
||||||
|
if manufacturer_id or MPN:
|
||||||
|
kwargs = {'manufacturer': manufacturer_id,
|
||||||
|
'MPN': MPN,
|
||||||
|
}
|
||||||
|
supplier_part.save(**kwargs)
|
||||||
|
|
||||||
|
return supplier_part
|
||||||
|
|
||||||
|
|
||||||
class SupplierPriceBreakSerializer(InvenTreeModelSerializer):
|
class SupplierPriceBreakSerializer(InvenTreeModelSerializer):
|
||||||
""" Serializer for SupplierPriceBreak object """
|
""" Serializer for SupplierPriceBreak object """
|
||||||
|
Loading…
x
Reference in New Issue
Block a user