diff --git a/back/inventory/models.py b/back/inventory/models.py index 6462b52..1c577cd 100644 --- a/back/inventory/models.py +++ b/back/inventory/models.py @@ -9,15 +9,23 @@ class Partner(models.Model): return f"Partner {self.id}" +class InventoryItem(models.Model): + id = models.AutoField(primary_key=True) + partner = models.ForeignKey( + Partner, related_name="Inventory", on_delete=models.CASCADE + ) + + class Element(models.Model): id = models.AutoField(primary_key=True) external_id = models.CharField() - type = models.CharField(max_length=100) + element_id = models.CharField(max_length=100) photo = models.ImageField(upload_to=".") additional_text = models.TextField() - partner = models.ForeignKey( - Partner, related_name="Element", on_delete=models.CASCADE + + inventory = models.ForeignKey( + InventoryItem, related_name="Element", on_delete=models.CASCADE ) def __str__(self): - return f"Element {self.id} (Partner {self.partner.id})" + return f"Element {self.id} (Inventory {self.inventory.id})" diff --git a/back/inventory/serializers.py b/back/inventory/serializers.py index 4683ef2..855f53c 100644 --- a/back/inventory/serializers.py +++ b/back/inventory/serializers.py @@ -1,13 +1,18 @@ from rest_framework import serializers -from .models import Partner, Element +from .models import Element, InventoryItem, Partner class PartnerSerializer(serializers.ModelSerializer): class Meta: model = Partner fields = ["id", "external_id"] + +class InventorySerializer(serializers.ModelSerializer): + class Meta: + model = InventoryItem + fields = ["id"] class ElementSerializer(serializers.ModelSerializer): class Meta: model = Element - fields = ["id", "external_id", "type", "photo", "additional_text", "partner"] + fields = ["id", "external_id", "element_id", "photo", "additional_text", "inventory"] diff --git a/back/inventory/views.py b/back/inventory/views.py index 4e3e05c..0252f6b 100644 --- a/back/inventory/views.py +++ b/back/inventory/views.py @@ -8,8 +8,8 @@ from rest_framework.decorators import action from rest_framework import status from rest_framework.response import Response -from .models import Element, Partner -from .serializers import PartnerSerializer, ElementSerializer +from .models import Element, InventoryItem, Partner +from .serializers import ElementSerializer, InventorySerializer, PartnerSerializer import logging @@ -76,17 +76,38 @@ class ElementViewSet(viewsets.ModelViewSet): def create(self, request, **kwargs): data = request.data - + # check if partner exist if Partner.objects.filter(external_id=data["partner"]).exists(): partner_object = Partner.objects.get(external_id=data["partner"]) else: partner_object = Partner.objects.create(external_id=data["partner"]) partner_serializer = PartnerSerializer(partner_object, many=False) - - - return Response({"partner": partner_serializer.data}) + # check if inventory exist + if ( + "inventory" in data + and InventoryItem.objects.filter(id=data["inventory"]).exist() + ): + inventory_object = InventoryItem.objects.get(id=data["inventory"]) + else: + inventory_object = InventoryItem.objects.create(partner=partner_object) + inventory_serializer = InventorySerializer(inventory_object, many=False) + + element_item = Element.objects.create( + inventory=inventory_object, + external_id=data["element"], + element_id=data["element_id"], + ) + element_serializer = ElementSerializer(element_item, many=False) + + return Response( + { + "partner": partner_serializer.data, + "inventory": inventory_serializer.data, + "element": element_serializer.data, + } + ) @action( detail=False, diff --git a/front/assets/main.scss b/front/assets/main.scss index 019c157..2825f8a 100644 --- a/front/assets/main.scss +++ b/front/assets/main.scss @@ -15,6 +15,10 @@ @apply text-lg; } + a[href]:not([class*=text]) { + @apply text-primary-500 hover:text-primary-600 + } + .container { @apply grid grid-cols-12 mx-auto gap-4 } diff --git a/front/pages/organization/index.vue b/front/pages/organization/index.vue index 916bc43..b7c8c85 100644 --- a/front/pages/organization/index.vue +++ b/front/pages/organization/index.vue @@ -12,6 +12,10 @@ const { data } = await useFetch(`${apiBase}/partner/`, { headers }) Новая инвентаризация
- + + +
\ No newline at end of file diff --git a/front/pages/organization/p_[id]/index.vue b/front/pages/organization/p_[id]/index.vue index 7913a32..596c761 100644 --- a/front/pages/organization/p_[id]/index.vue +++ b/front/pages/organization/p_[id]/index.vue @@ -1,3 +1,14 @@ + \ No newline at end of file