save data
This commit is contained in:
parent
14c0054d7f
commit
1dab0e2cc7
|
@ -9,15 +9,23 @@ class Partner(models.Model):
|
||||||
return f"Partner {self.id}"
|
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):
|
class Element(models.Model):
|
||||||
id = models.AutoField(primary_key=True)
|
id = models.AutoField(primary_key=True)
|
||||||
external_id = models.CharField()
|
external_id = models.CharField()
|
||||||
type = models.CharField(max_length=100)
|
element_id = models.CharField(max_length=100)
|
||||||
photo = models.ImageField(upload_to=".")
|
photo = models.ImageField(upload_to=".")
|
||||||
additional_text = models.TextField()
|
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):
|
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 rest_framework import serializers
|
||||||
from .models import Partner, Element
|
from .models import Element, InventoryItem, Partner
|
||||||
|
|
||||||
|
|
||||||
class PartnerSerializer(serializers.ModelSerializer):
|
class PartnerSerializer(serializers.ModelSerializer):
|
||||||
|
@ -7,7 +7,12 @@ class PartnerSerializer(serializers.ModelSerializer):
|
||||||
model = Partner
|
model = Partner
|
||||||
fields = ["id", "external_id"]
|
fields = ["id", "external_id"]
|
||||||
|
|
||||||
|
class InventorySerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = InventoryItem
|
||||||
|
fields = ["id"]
|
||||||
|
|
||||||
class ElementSerializer(serializers.ModelSerializer):
|
class ElementSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Element
|
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 import status
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
|
|
||||||
from .models import Element, Partner
|
from .models import Element, InventoryItem, Partner
|
||||||
from .serializers import PartnerSerializer, ElementSerializer
|
from .serializers import ElementSerializer, InventorySerializer, PartnerSerializer
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
@ -84,9 +84,30 @@ class ElementViewSet(viewsets.ModelViewSet):
|
||||||
partner_object = Partner.objects.create(external_id=data["partner"])
|
partner_object = Partner.objects.create(external_id=data["partner"])
|
||||||
partner_serializer = PartnerSerializer(partner_object, many=False)
|
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(
|
@action(
|
||||||
detail=False,
|
detail=False,
|
||||||
|
|
|
@ -15,6 +15,10 @@
|
||||||
@apply text-lg;
|
@apply text-lg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
a[href]:not([class*=text]) {
|
||||||
|
@apply text-primary-500 hover:text-primary-600
|
||||||
|
}
|
||||||
|
|
||||||
.container {
|
.container {
|
||||||
@apply grid grid-cols-12 mx-auto gap-4
|
@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>
|
<UButton icon="i-heroicons-plus" to="organization/new">Новая инвентаризация</UButton>
|
||||||
</div>
|
</div>
|
||||||
<div class="mb-4">
|
<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>
|
</div>
|
||||||
</template>
|
</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>
|
<template>
|
||||||
partner
|
<UTable :rows="data?.results" />
|
||||||
</template>
|
</template>
|
Loading…
Reference in New Issue