Files
Rasadyar_RSI/app/filtersets.py
2026-01-18 11:29:19 +03:30

333 lines
11 KiB
Python

import datetime
from django_filters import rest_framework as filters
from app.models import Poultry, PoultryHatching, TransportingChickenDetail, Hatching, TransportingDetail, KillHouse, \
TransportCarcassDetail, Driver, Guilds, AllProductsTransport
class PoultryFilterSet(filters.FilterSet):
class Meta:
model = Poultry
fields = [
'UserName',
'FirstName',
'LastName',
'UnitName',
'PartIdCode',
'UnitId',
'LocationIdProvince',
'LocationIdCity'
]
class PoultryHatchingFilterSet(filters.FilterSet):
class Meta:
model = PoultryHatching
fields = [
'DesCertId',
'RequestCode',
'Mobile',
'PartIdCode',
'EpidemiologicCode',
'LocationNameProvince',
'LocationNameCity',
'poultry__UserName',
'poultry__FirstName',
'poultry__LastName',
'poultry__UnitName',
'poultry__PartIdCode',
'poultry__UnitId',
'LocationIdProvince',
'LocationIdCity',
'LocationNameCity',
]
class HatchingsFilterSet(filters.FilterSet):
class Meta:
model = Hatching
fields = [
'UnitName',
'ProvinceName',
'CityName',
'PartIdCode',
'RequestCode',
'poultry__UserName',
'poultry__FirstName',
'poultry__LastName',
'poultry__UnitName',
'poultry__PartIdCode',
'poultry__UnitId',
]
class TransportingChickenDetailFilterSet(filters.FilterSet):
class Meta:
model = TransportingChickenDetail
fields = [
'DesUnitName',
'DesPartIdCode',
'SourceUnitPartIdCode',
'SourceUnitName',
'SourceCertId',
'hatching__DesCertId',
'hatching__LocationNameProvince',
'hatching__LocationNameCity',
'hatching__poultry__UserName',
'hatching__poultry__FirstName',
'hatching__poultry__LastName',
'hatching__poultry__UnitName',
'hatching__poultry__PartIdCode',
'hatching__poultry__UnitId',
'hatching__poultry__LocationIdProvince',
'hatching__poultry__LocationIdCity'
]
class HatchingFilterSet(filters.FilterSet):
class Meta:
model = PoultryHatching
fields = [
'LocationNameCity',
'LocationNameProvince',
'HatchingAge',
]
class PoultryInfoFilterSet(filters.FilterSet):
class Meta:
model = Poultry
fields = [
'LocationNameProvince',
'Province',
'LocationNameCity',
'City',
'FirstName',
'LastName',
'Mobile',
'SystemCode',
'EpidemiologicCode',
'PartIdCode',
'UnitName',
]
class HatchingCalculationsFilterSet(filters.FilterSet):
class Meta:
model = PoultryHatching
fields = [
'LocationNameProvince',
'LocationNameCity',
]
class TransportingDetailFilterSet(filters.FilterSet):
class Meta:
model = TransportingDetail
fields = [
'TrackingCode',
'Province',
'City',
'DesPartIdCode',
'Age',
'hatching__poultry__FirstName',
'hatching__poultry__PartIdCode',
'hatching__RequestCode',
'hatching__CityName',
'hatching__ProvinceName',
]
class KillHouseFilterSet(filters.FilterSet):
class Meta:
model = KillHouse
fields = [
'PartIdCode',
'UnitName',
'Province',
'City',
'ProvinceId'
]
class CustomHatchingsFilterSet(filters.FilterSet):
city = filters.CharFilter(field_name='CityName', lookup_expr='icontains')
province = filters.CharFilter(field_name='ProvinceName', lookup_expr='icontains')
system_code = filters.CharFilter(field_name='SystemCode', lookup_expr='exact')
age = filters.NumberFilter(field_name='Age', lookup_expr='exact')
age__gt = filters.NumberFilter(field_name='Age', lookup_expr='gt')
age__gte = filters.NumberFilter(field_name='Age', lookup_expr='gte')
age__lt = filters.NumberFilter(field_name='Age', lookup_expr='lt')
age__lte = filters.NumberFilter(field_name='Age', lookup_expr='lte')
killing_age = filters.NumberFilter(field_name='KillingAve', lookup_expr='exact')
killing_age__gt = filters.NumberFilter(field_name='KillingAve', lookup_expr='gt')
killing_age__gte = filters.NumberFilter(field_name='KillingAve', lookup_expr='gte')
killing_age__lt = filters.NumberFilter(field_name='KillingAve', lookup_expr='lt')
killing_age__lte = filters.NumberFilter(field_name='KillingAve', lookup_expr='lte')
leftover__gt = filters.NumberFilter(field_name='LeftOver', lookup_expr='gt')
leftover__gte = filters.NumberFilter(field_name='LeftOver', lookup_expr='gte')
leftover__lt = filters.NumberFilter(field_name='LeftOver', lookup_expr='lt')
leftover__lte = filters.NumberFilter(field_name='LeftOver', lookup_expr='lte')
leftover__exact = filters.NumberFilter(field_name='LeftOver', lookup_expr='exact')
date1__date__gte = filters.DateFilter(method='filter_date_range')
date2__date__lte = filters.DateFilter(method='filter_date_range')
state = filters.CharFilter(method='filter_state')
class Meta:
model = Hatching
fields = [
'city', 'province', 'system_code',
'age', 'age__gt', 'age__gte', 'age__lt', 'age__lte',
'killing_age', 'killing_age__gt', 'killing_age__gte', 'killing_age__lt', 'killing_age__lte',
'leftover__gt', 'leftover__gte', 'leftover__lt', 'leftover__lte', 'leftover__exact',
'date1__date__gte', 'date2__date__lte', 'state'
]
def filter_date_range(self, queryset, name, value):
date1 = self.data.get('date1__date__gte')
date2 = self.data.get('date2__date__lte')
if date1 and date2:
try:
date1 = datetime.datetime.strptime(str(date1), '%Y-%m-%d').date()
date2 = datetime.datetime.strptime(str(date2), '%Y-%m-%d').date()
return queryset.filter(Date__date__gte=date1, Date__date__lte=date2)
except ValueError:
return queryset
return queryset
def filter_state(self, queryset, name, value):
state = self.data.get('state')
if state:
if state == 'pending':
queryset = queryset.filter(Age__lte=70)
else:
queryset = queryset.filter(Age__gt=70)
return queryset
class TransportingDetailCustomFilterSet(filters.FilterSet):
unitname = filters.CharFilter(field_name='DesUnitName', lookup_expr='icontains')
province = filters.CharFilter(field_name='Province', lookup_expr='icontains')
city = filters.CharFilter(field_name='City', lookup_expr='icontains')
code = filters.CharFilter(field_name='DesPartIdCode', lookup_expr='exact')
trackingstatus = filters.CharFilter(field_name='TrackingStatusDescription', lookup_expr='exact')
quantity__gt = filters.NumberFilter(field_name='GoodAmount', lookup_expr='gt')
quantity__gte = filters.NumberFilter(field_name='GoodAmount', lookup_expr='gte')
quantity__lt = filters.NumberFilter(field_name='GoodAmount', lookup_expr='lt')
quantity__lte = filters.NumberFilter(field_name='GoodAmount', lookup_expr='lte')
age = filters.NumberFilter(field_name='Age', lookup_expr='exact')
age__gt = filters.NumberFilter(field_name='Age', lookup_expr='gt')
age__gte = filters.NumberFilter(field_name='Age', lookup_expr='gte')
age__lt = filters.NumberFilter(field_name='Age', lookup_expr='lt')
age__lte = filters.NumberFilter(field_name='Age', lookup_expr='lte')
date1__date__gte = filters.DateFilter(method='filter_date_range')
date2__date__lte = filters.DateFilter(method='filter_date_range')
poultry_unitname = filters.DateFilter(method='filter_poultry_unit_name')
class Meta:
model = TransportingDetail
fields = [
'unitname',
'province',
'city',
'code',
'trackingstatus',
'quantity__gt',
'quantity__gte',
'quantity__lt',
'quantity__lte',
'age',
'age__gt',
'age__gte',
'age__lt',
'age__lte',
'date1__date__gte',
'date2__date__lte',
'poultry_unitname',
]
def filter_date_range(self, queryset, name, value):
date1 = self.data.get('date1__date__gte')
date2 = self.data.get('date2__date__lte')
if date1 and date2:
try:
date1 = datetime.datetime.strptime(str(date1), '%Y-%m-%d').date()
date2 = datetime.datetime.strptime(str(date2), '%Y-%m-%d').date()
return queryset.filter(Date__date__gte=date1, Date__date__lte=date2)
except ValueError:
return queryset
return queryset
def filter_poultry_unit_name(self, queryset, name, value):
return queryset.filter(poultry__UnitName__icontains=value)
class TransportCarcassDetailFilterSet(filters.FilterSet):
class Meta:
model = TransportCarcassDetail
fields = [
'tracking',
'origin_province',
'origin_city',
'destination_province',
'destination_city',
'product',
'owner']
class DriverFilterSet(filters.FilterSet):
class Meta:
model = Driver
fields = [
'owner_name',
'driver_name',
'city',
'province',
]
class GuildsFilterSet(filters.FilterSet):
class Meta:
model = Guilds
fields = [
'name',
'province',
'city',
'jihadi_code'
]
class AllProductsTransportFilterSet(filters.FilterSet):
class Meta:
model = AllProductsTransport
fields = [
'record_id',
'tracking',
'product',
'items',
'origin_province',
'origin_city',
'destination_province',
'destination_city',
'owner',
'driver_name',
'car_tracking_code',
'out',
'quantity',
'jihadi_destination',
'jihadi_origin',
]