From f714d86ea5906afa5354702b61f1891737368c39 Mon Sep 17 00:00:00 2001 From: Mojtaba-z Date: Sun, 28 Sep 2025 17:07:06 +0330 Subject: [PATCH] without herd rancher temporary livestocks in pos - complete --- apps/herd/pos/api/v1/serializers.py | 24 ++++++++++++- .../migrations/0016_temporarylivestock.py | 36 +++++++++++++++++++ apps/livestock/models.py | 21 +++++++++++ 3 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 apps/livestock/migrations/0016_temporarylivestock.py diff --git a/apps/herd/pos/api/v1/serializers.py b/apps/herd/pos/api/v1/serializers.py index 3d5f375..1da222b 100644 --- a/apps/herd/pos/api/v1/serializers.py +++ b/apps/herd/pos/api/v1/serializers.py @@ -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 """ diff --git a/apps/livestock/migrations/0016_temporarylivestock.py b/apps/livestock/migrations/0016_temporarylivestock.py new file mode 100644 index 0000000..088c539 --- /dev/null +++ b/apps/livestock/migrations/0016_temporarylivestock.py @@ -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, + }, + ), + ] diff --git a/apps/livestock/models.py b/apps/livestock/models.py index a8e6a1b..c7ec812 100644 --- a/apps/livestock/models.py +++ b/apps/livestock/models.py @@ -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)