rancher setub
This commit is contained in:
48
apps/herd/migrations/0009_rancher_herd_rancher.py
Normal file
48
apps/herd/migrations/0009_rancher_herd_rancher.py
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
# Generated by Django 5.0 on 2025-08-03 12:12
|
||||||
|
|
||||||
|
import django.db.models.deletion
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('authentication', '0027_remove_organizationstats_total_buyers_and_more'),
|
||||||
|
('herd', '0008_herd_cooperative_herd_heavy_livestock_number_and_more'),
|
||||||
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Rancher',
|
||||||
|
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)),
|
||||||
|
('ranching_farm', models.CharField(max_length=150, null=True)),
|
||||||
|
('first_name', models.CharField(max_length=150, null=True)),
|
||||||
|
('last_name', models.CharField(max_length=150, null=True)),
|
||||||
|
('mobile', models.CharField(max_length=25, null=True)),
|
||||||
|
('national_code', models.CharField(max_length=20, null=True)),
|
||||||
|
('birthdate', models.DateTimeField(null=True)),
|
||||||
|
('nationality', models.CharField(max_length=20, null=True)),
|
||||||
|
('address', models.TextField(blank=True)),
|
||||||
|
('city', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='ranchers', to='authentication.city')),
|
||||||
|
('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)),
|
||||||
|
('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)),
|
||||||
|
('province', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='ranchers', to='authentication.province')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'abstract': False,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='herd',
|
||||||
|
name='rancher',
|
||||||
|
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='herd', to='herd.rancher'),
|
||||||
|
),
|
||||||
|
]
|
||||||
18
apps/herd/migrations/0010_rancher_without_herd.py
Normal file
18
apps/herd/migrations/0010_rancher_without_herd.py
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# Generated by Django 5.0 on 2025-08-03 12:13
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('herd', '0009_rancher_herd_rancher'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='rancher',
|
||||||
|
name='without_herd',
|
||||||
|
field=models.BooleanField(default=False),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -10,6 +10,12 @@ class Herd(BaseModel):
|
|||||||
related_name='herd',
|
related_name='herd',
|
||||||
null=True
|
null=True
|
||||||
)
|
)
|
||||||
|
rancher = models.ForeignKey(
|
||||||
|
'Rancher',
|
||||||
|
on_delete=models.CASCADE,
|
||||||
|
related_name='herd',
|
||||||
|
null=True
|
||||||
|
)
|
||||||
cooperative = models.ForeignKey(
|
cooperative = models.ForeignKey(
|
||||||
auth_models.Organization,
|
auth_models.Organization,
|
||||||
on_delete=models.CASCADE,
|
on_delete=models.CASCADE,
|
||||||
@@ -72,3 +78,34 @@ class Herd(BaseModel):
|
|||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
super(Herd, self).save(*args, **kwargs)
|
super(Herd, self).save(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class Rancher(BaseModel):
|
||||||
|
ranching_farm = models.CharField(max_length=150, null=True)
|
||||||
|
first_name = models.CharField(max_length=150, null=True)
|
||||||
|
last_name = models.CharField(max_length=150, null=True)
|
||||||
|
mobile = models.CharField(max_length=25, null=True)
|
||||||
|
national_code = models.CharField(max_length=20, null=True)
|
||||||
|
birthdate = models.DateTimeField(null=True)
|
||||||
|
nationality = models.CharField(max_length=20, null=True)
|
||||||
|
address = models.TextField(blank=True)
|
||||||
|
province = models.ForeignKey(
|
||||||
|
auth_models.Province,
|
||||||
|
on_delete=models.CASCADE,
|
||||||
|
related_name='ranchers',
|
||||||
|
null=True
|
||||||
|
)
|
||||||
|
city = models.ForeignKey(
|
||||||
|
auth_models.City,
|
||||||
|
on_delete=models.CASCADE,
|
||||||
|
related_name='ranchers',
|
||||||
|
null=True
|
||||||
|
)
|
||||||
|
without_herd = models.BooleanField(default=False)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f'rancher: {self.first_name} {self.last_name}'
|
||||||
|
|
||||||
|
def save(self, *args, **kwargs):
|
||||||
|
return super(Rancher, self).save(*args, **kwargs)
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
from apps.herd.web.api.v1.serializers import HerdSerializer
|
from apps.herd.web.api.v1.serializers import HerdSerializer, RancherSerializer
|
||||||
|
from apps.core.mixins.search_mixin import DynamicSearchMixin
|
||||||
from apps.authentication.api.v1.api import UserViewSet
|
from apps.authentication.api.v1.api import UserViewSet
|
||||||
from rest_framework.exceptions import APIException
|
from rest_framework.exceptions import APIException
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
from common.tools import CustomOperations
|
from common.tools import CustomOperations
|
||||||
from rest_framework import viewsets
|
from rest_framework import viewsets
|
||||||
from apps.herd.models import Herd
|
from apps.herd.models import Herd, Rancher
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
|
|
||||||
@@ -85,3 +86,36 @@ class HerdViewSet(viewsets.ModelViewSet):
|
|||||||
return Response(status=status.HTTP_200_OK)
|
return Response(status=status.HTTP_200_OK)
|
||||||
except APIException as e:
|
except APIException as e:
|
||||||
return Response(e, status=status.HTTP_204_NO_CONTENT)
|
return Response(e, status=status.HTTP_204_NO_CONTENT)
|
||||||
|
|
||||||
|
|
||||||
|
class RancherViewSet(viewsets.ModelViewSet, DynamicSearchMixin):
|
||||||
|
queryset = Rancher.objects.all()
|
||||||
|
serializer_class = RancherSerializer
|
||||||
|
search_fields = [
|
||||||
|
"ranching_farm",
|
||||||
|
"first_name",
|
||||||
|
"last_name",
|
||||||
|
"mobile",
|
||||||
|
"national_code",
|
||||||
|
"birthdate",
|
||||||
|
"nationality",
|
||||||
|
"address",
|
||||||
|
"province__name",
|
||||||
|
"city__name",
|
||||||
|
]
|
||||||
|
|
||||||
|
def list(self, request, *args, **kwargs):
|
||||||
|
""" list of ranchers """
|
||||||
|
|
||||||
|
search = self.filter_query(self.queryset) # search & filter
|
||||||
|
page = self.paginate_queryset(search)
|
||||||
|
if page is not None:
|
||||||
|
serializer = self.get_serializer(page, many=True)
|
||||||
|
return self.get_paginated_response(serializer.data)
|
||||||
|
|
||||||
|
@action(
|
||||||
|
methods=['get'],
|
||||||
|
detail=True,
|
||||||
|
)
|
||||||
|
def herds_by_rancher(self, request):
|
||||||
|
pass
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ from apps.authentication.api.v1.serializers.serializer import (
|
|||||||
CitySerializer
|
CitySerializer
|
||||||
)
|
)
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from apps.herd.models import Herd
|
from apps.herd.models import Herd, Rancher
|
||||||
|
|
||||||
|
|
||||||
class HerdSerializer(serializers.ModelSerializer):
|
class HerdSerializer(serializers.ModelSerializer):
|
||||||
@@ -25,3 +25,9 @@ class HerdSerializer(serializers.ModelSerializer):
|
|||||||
representation['contractor'] = OrganizationSerializer(instance.contractor).data
|
representation['contractor'] = OrganizationSerializer(instance.contractor).data
|
||||||
|
|
||||||
return representation
|
return representation
|
||||||
|
|
||||||
|
|
||||||
|
class RancherSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Rancher
|
||||||
|
fields = '__all__'
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
from django.urls import path, include
|
from django.urls import path, include
|
||||||
from rest_framework import routers
|
from rest_framework import routers
|
||||||
from .api import HerdViewSet
|
from .api import HerdViewSet, RancherViewSet
|
||||||
|
|
||||||
router = routers.DefaultRouter()
|
router = routers.DefaultRouter()
|
||||||
router.register('herd', HerdViewSet, basename='herd')
|
router.register('herd', HerdViewSet, basename='herd')
|
||||||
|
router.register('rancher', RancherViewSet, basename='rancher')
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('api/v1/', include(router.urls))
|
path('api/v1/', include(router.urls))
|
||||||
|
|||||||
@@ -93,4 +93,5 @@ class LiveStock(BaseModel):
|
|||||||
return f'{self.type.name}-{self.species.name}'
|
return f'{self.type.name}-{self.species.name}'
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
super(LiveStock, self).save(*args, **kwargs)
|
return super(LiveStock, self).save(*args, **kwargs)
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ def delete(queryset, pk):
|
|||||||
obj.delete()
|
obj.delete()
|
||||||
|
|
||||||
|
|
||||||
class LiveStockViewSet(viewsets.ModelViewSet):
|
class LiveStockViewSet(viewsets.ModelViewSet): # noqa
|
||||||
queryset = livestock_models.LiveStock.objects.all()
|
queryset = livestock_models.LiveStock.objects.all()
|
||||||
serializer_class = livestock_serializers.LiveStockSerializer
|
serializer_class = livestock_serializers.LiveStockSerializer
|
||||||
|
|
||||||
@@ -147,7 +147,7 @@ class LiveStockSpeciesViewSet(viewsets.ModelViewSet):
|
|||||||
trash(self.queryset, pk)
|
trash(self.queryset, pk)
|
||||||
return Response(status=status.HTTP_200_OK)
|
return Response(status=status.HTTP_200_OK)
|
||||||
except APIException as e:
|
except APIException as e:
|
||||||
return Response
|
return Response(status=status.HTTP_403_FORBIDDEN)
|
||||||
|
|
||||||
@action(
|
@action(
|
||||||
methods=['post'],
|
methods=['post'],
|
||||||
|
|||||||
@@ -48,7 +48,6 @@ class LiveStockSerializer(serializers.ModelSerializer):
|
|||||||
'birthdate',
|
'birthdate',
|
||||||
'gender',
|
'gender',
|
||||||
]
|
]
|
||||||
depth = 1
|
|
||||||
|
|
||||||
def to_representation(self, instance):
|
def to_representation(self, instance):
|
||||||
""" Customize output of serializer """
|
""" Customize output of serializer """
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ from .api import (
|
|||||||
LiveStockViewSet,
|
LiveStockViewSet,
|
||||||
LiveStockTypeViewSet,
|
LiveStockTypeViewSet,
|
||||||
LiveStockSpeciesViewSet,
|
LiveStockSpeciesViewSet,
|
||||||
LiveStockUseTypeViewSet
|
LiveStockUseTypeViewSet,
|
||||||
)
|
)
|
||||||
|
|
||||||
router = DefaultRouter()
|
router = DefaultRouter()
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
# Generated by Django 5.0 on 2025-08-03 12:12
|
||||||
|
|
||||||
|
import datetime
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('pos_device', '0024_alter_deviceactivationcode_expires_at'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='deviceactivationcode',
|
||||||
|
name='expires_at',
|
||||||
|
field=models.DateTimeField(default=datetime.datetime(2025, 8, 3, 15, 42, 25, 38541)),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
# Generated by Django 5.0 on 2025-08-03 12:13
|
||||||
|
|
||||||
|
import datetime
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('pos_device', '0025_alter_deviceactivationcode_expires_at'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='deviceactivationcode',
|
||||||
|
name='expires_at',
|
||||||
|
field=models.DateTimeField(default=datetime.datetime(2025, 8, 3, 15, 43, 31, 530170)),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
# Generated by Django 5.0 on 2025-08-03 12:32
|
||||||
|
|
||||||
|
import datetime
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('pos_device', '0026_alter_deviceactivationcode_expires_at'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='deviceactivationcode',
|
||||||
|
name='expires_at',
|
||||||
|
field=models.DateTimeField(default=datetime.datetime(2025, 8, 3, 16, 2, 38, 50740)),
|
||||||
|
),
|
||||||
|
]
|
||||||
Reference in New Issue
Block a user