333 lines
11 KiB
Python
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',
|
||
|
|
|
||
|
|
]
|