save data

This commit is contained in:
aarizona 2024-05-29 18:02:43 +03:00
parent 14c0054d7f
commit 1dab0e2cc7
6 changed files with 67 additions and 14 deletions

View File

@ -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})"

View File

@ -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"]

View File

@ -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,

View File

@ -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
}

View File

@ -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>

View File

@ -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>