save data
This commit is contained in:
parent
14c0054d7f
commit
1dab0e2cc7
|
@ -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})"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
from rest_framework import serializers
|
||||
from .models import Partner, Element
|
||||
from .models import Element, InventoryItem, Partner
|
||||
|
||||
|
||||
class PartnerSerializer(serializers.ModelSerializer):
|
||||
|
@ -7,7 +7,12 @@ class PartnerSerializer(serializers.ModelSerializer):
|
|||
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"]
|
||||
|
|
|
@ -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
|
||||
|
||||
|
@ -84,9 +84,30 @@ class ElementViewSet(viewsets.ModelViewSet):
|
|||
partner_object = Partner.objects.create(external_id=data["partner"])
|
||||
partner_serializer = PartnerSerializer(partner_object, many=False)
|
||||
|
||||
# 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})
|
||||
return Response(
|
||||
{
|
||||
"partner": partner_serializer.data,
|
||||
"inventory": inventory_serializer.data,
|
||||
"element": element_serializer.data,
|
||||
}
|
||||
)
|
||||
|
||||
@action(
|
||||
detail=False,
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -12,6 +12,10 @@ const { data } = await useFetch<ApiTypeBase>(`${apiBase}/partner/`, { headers })
|
|||
<UButton icon="i-heroicons-plus" to="organization/new">Новая инвентаризация</UButton>
|
||||
</div>
|
||||
<div class="mb-4">
|
||||
<UTable :rows="data?.results" />
|
||||
<UTable :rows="data?.results">
|
||||
<template #external_id-data="{ row }">
|
||||
<NuxtLink :to="`/organization/p_${row.id}`">{{ row.external_id }}</NuxtLink>
|
||||
</template>
|
||||
</UTable>
|
||||
</div>
|
||||
</template>
|
|
@ -1,3 +1,14 @@
|
|||
<script setup lang="ts">
|
||||
import { apiBase } from '~/helpers';
|
||||
import type { ApiTypeBase } from '~/helpers';
|
||||
|
||||
const headers = new Headers();
|
||||
headers.append("Content-Type", "application/json");
|
||||
|
||||
const route = useRoute()
|
||||
|
||||
const { data } = await useFetch<ApiTypeBase>(`${apiBase}/inventory?partner_id=${route.params.id}`, { headers })
|
||||
</script>
|
||||
<template>
|
||||
partner
|
||||
<UTable :rows="data?.results" />
|
||||
</template>
|
Loading…
Reference in New Issue