without herd rancher temporary livestocks in pos - complete

This commit is contained in:
2025-09-28 17:07:06 +03:30
parent 305bd4ec0b
commit f714d86ea5
3 changed files with 80 additions and 1 deletions

View File

@@ -5,12 +5,14 @@ from apps.authentication.api.v1.serializers.serializer import (
CitySerializer
)
from apps.herd.exception import UniqueRancherApiException
from apps.livestock import models as livestock_models
from rest_framework import serializers
from apps.herd.models import Herd, Rancher
from django.db.transaction import atomic
class HerdSerializer(serializers.ModelSerializer):
""" Herd Serializer """
class Meta:
model = Herd
fields = '__all__'
@@ -36,6 +38,26 @@ class RancherSerializer(serializers.ModelSerializer):
model = Rancher
fields = '__all__'
def create(self, validated_data):
""" create rancher in pos device (without herd) """
data = self.context['request'].data.copy()
with atomic():
rancher = Rancher.objects.create(**validated_data) # create rancher
if 'livestock' in data.keys():
live_stocks = data['livestock']
print(live_stocks)
livestock_types = {stock.id: stock for stock in livestock_models.LiveStockType.objects.all()}
for stock in live_stocks:
livestock_models.TemporaryLiveStock.objects.create(
livestock_type=livestock_types.get(stock.pop('livestock_type')),
rancher=rancher,
**stock
)
return rancher
def validate(self, attrs):
""" some validations for operations relate to rancher """

View File

@@ -0,0 +1,36 @@
# Generated by Django 5.0 on 2025-09-28 13:33
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('herd', '0018_rancher_dhi_state'),
('livestock', '0015_livestocktype_en_name_alter_livestocktype_name'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='TemporaryLiveStock',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('create_date', models.DateTimeField(auto_now_add=True)),
('modify_date', models.DateTimeField(auto_now=True)),
('creator_info', models.CharField(max_length=100, null=True)),
('modifier_info', models.CharField(max_length=100, null=True)),
('trash', models.BooleanField(default=False)),
('count', models.PositiveBigIntegerField(default=0)),
('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_createddby', to=settings.AUTH_USER_MODEL)),
('livestock_type', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='temporary_stocks', to='livestock.livestocktype')),
('modified_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_modifiedby', to=settings.AUTH_USER_MODEL)),
('rancher', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='temporary_stocks', to='herd.rancher')),
],
options={
'abstract': False,
},
),
]

View File

@@ -98,3 +98,24 @@ class LiveStock(BaseModel):
def save(self, *args, **kwargs):
return super(LiveStock, self).save(*args, **kwargs)
class TemporaryLiveStock(BaseModel):
rancher = models.ForeignKey(
herd_models.Rancher,
on_delete=models.CASCADE,
related_name='temporary_stocks',
null=True
)
livestock_type = models.ForeignKey(
LiveStockType,
on_delete=models.CASCADE,
related_name='temporary_stocks',
null=True
)
count = models.PositiveBigIntegerField(default=0)
def __str__(self):
return f'temporary: {self.id} - rancher: {self.rancher.national_code}'
def save(self, *args, **kwargs):
return super(TemporaryLiveStock, self).save(*args, **kwargs)