first push
This commit is contained in:
666
panel/CityOperator/views.py
Normal file
666
panel/CityOperator/views.py
Normal file
@@ -0,0 +1,666 @@
|
||||
import threading
|
||||
|
||||
import jdatetime
|
||||
from rest_framework.pagination import PageNumberPagination
|
||||
|
||||
# .
|
||||
|
||||
from authentication.helper.refresh import refresh
|
||||
from authentication.sms_management import poultry_request_receive_city_accept_sms, \
|
||||
poultry_request_receive_province_accept_sms
|
||||
|
||||
from panel.CityOperator.serializers import (
|
||||
CityOperatorCheckRequestSerializer,
|
||||
CityOperatorSerializer, CityOperatorForPoultrySerializer, CityOperatorForSubSectorSerializer,
|
||||
CityOperatorForSubSectorTransactionsSerializer
|
||||
)
|
||||
from authentication.serializer.serializer import (
|
||||
SystemAddressSerializer,
|
||||
BankCardSerializer
|
||||
)
|
||||
from authentication.models import SystemAddress, CityUnit
|
||||
from panel.poultry.serializers import PoultrySerializer, PoultryRequestSerializer, \
|
||||
PoultryRequestForKillingInformationSerializer
|
||||
from panel.convert_date import convert_to_miladi
|
||||
from panel.models import (
|
||||
CityOperatorCheckRequest,
|
||||
PoultryRequest,
|
||||
CityOperator,
|
||||
PoultryRequestAuction,
|
||||
ProvinceOperator,
|
||||
Poultry, PoultryHatching, VetFarm, VetFarmInspection, SmsLicense, ProvinceCheckOperatorRequest, ProvinceKillRequest,
|
||||
KillHouseCheckRequest, KillRequest
|
||||
)
|
||||
from authentication.models import (
|
||||
City,
|
||||
Province
|
||||
)
|
||||
from authentication.models import SystemUserProfile
|
||||
from panel.filterset import UserProfileFilterSet, CityOperatorRequestFilterSet, PoultryRequestFilterSet
|
||||
from django_filters.rest_framework import DjangoFilterBackend
|
||||
from authentication.permissions import CityOperator as CityOperatorPermission
|
||||
from authentication.permissions import ProvinceOperator as provinceOperatorPermission
|
||||
from authentication.models import UserProfile, UserMessage
|
||||
from rest_framework.response import Response
|
||||
from django.contrib.auth.models import User
|
||||
from rest_framework import viewsets
|
||||
from oauth2_provider.contrib.rest_framework import (
|
||||
TokenHasReadWriteScope,
|
||||
OAuth2Authentication,
|
||||
)
|
||||
from rest_framework import status
|
||||
from django.http import QueryDict
|
||||
from datetime import datetime, timedelta
|
||||
from django.db.models import Q
|
||||
from panel.helper import remove_null_fields
|
||||
|
||||
class CustomPagination(PageNumberPagination):
|
||||
page_size = 10
|
||||
|
||||
class ShowCityOperatorViewSet(viewsets.ModelViewSet):
|
||||
queryset = CityOperator.objects.all()
|
||||
serializer_class = CityOperatorSerializer
|
||||
permission_classes = [TokenHasReadWriteScope]
|
||||
|
||||
# def list(self, request, *args, **kwargs):
|
||||
# # refresh(request.user.id)
|
||||
# if 'breeding_uniq_id' in request.GET:
|
||||
# poultry = Poultry.objects.get(breeding_unique_id=request.GET['breeding_uniq_id'])
|
||||
# else:
|
||||
#
|
||||
# user = SystemUserProfile.objects.get(user=request.user)
|
||||
# poultry = Poultry.objects.get(user=user)
|
||||
# # city = City.objects.get(key=poultry.address.city.key)
|
||||
#
|
||||
# city_unit = CityUnit.objects.get(name=poultry.address.city.name)
|
||||
# # city_operator_system = CityOperator.objects.get(address__city=city_unit.city, trash=False)
|
||||
# operator_list = []
|
||||
# opertors = CityOperator.objects.filter(address__city__name__in=(city_unit.city.name, 'فاقد شهرستان'),
|
||||
# trash=False)
|
||||
# # poultry_request = PoultryRequest.objects.filter(trash=False, poultry=poultry).select_related(
|
||||
# # 'city_operator').last()
|
||||
#
|
||||
# for opertor in opertors:
|
||||
# last = True if poultry.city_operator == opertor.unit_name else False
|
||||
# operator_dict = {
|
||||
# "key": opertor.key,
|
||||
# "unit_name": opertor.unit_name,
|
||||
# "last": last
|
||||
# }
|
||||
# operator_list.append(operator_dict)
|
||||
#
|
||||
# return Response(operator_list)
|
||||
|
||||
def list(self, request, *args, **kwargs):
|
||||
operator_list = []
|
||||
if 'breeding_uniq_id' in request.GET:
|
||||
poultry = Poultry.objects.get(breeding_unique_id=request.GET['breeding_uniq_id'])
|
||||
else:
|
||||
|
||||
user = SystemUserProfile.objects.get(user=request.user)
|
||||
poultry = Poultry.objects.get(user=user)
|
||||
opertor = CityOperator.objects.filter(unit_name=poultry.city_operator,
|
||||
|
||||
trash=False).last()
|
||||
if not opertor:
|
||||
opertor = CityOperator.objects.filter(unit_name='اتحادیه استان (فاقد تعاونی)',
|
||||
|
||||
trash=False).last()
|
||||
|
||||
operator_dict = {
|
||||
"key": opertor.key,
|
||||
"unit_name": opertor.unit_name,
|
||||
}
|
||||
operator_list.append(operator_dict)
|
||||
|
||||
return Response(operator_list)
|
||||
|
||||
|
||||
# ویوست مربوط به اپراتور شهرستان
|
||||
class CityOperatorViewSet(viewsets.ModelViewSet):
|
||||
queryset = CityOperator.objects.all()
|
||||
serializer_class = CityOperatorSerializer
|
||||
permission_classes = [TokenHasReadWriteScope]
|
||||
|
||||
def retrieve(self, request, pk=None, *args, **kwargs):
|
||||
# refresh(request.user.id)
|
||||
|
||||
# get city operator profile information
|
||||
if 'profile' in request.GET:
|
||||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||||
|
||||
# get operator object
|
||||
operator = user.city_operator_user.all()
|
||||
|
||||
# send to serializer
|
||||
serializer = self.serializer_class(operator[0])
|
||||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||||
|
||||
def list(self, request, pk=None, *args, **kwargs):
|
||||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||||
city_operators = CityOperator.objects.filter(address__province=user.province, trash=False)
|
||||
serializer = CityOperatorForPoultrySerializer(city_operators, many=True)
|
||||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
|
||||
|
||||
class CityOperatorForSubSectorViewSet(viewsets.ModelViewSet):
|
||||
queryset = CityOperator.objects.all()
|
||||
serializer_class = CityOperatorForSubSectorSerializer
|
||||
permission_classes = [TokenHasReadWriteScope]
|
||||
|
||||
|
||||
def list(self, request, pk=None, *args, **kwargs):
|
||||
|
||||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||||
city_operators = CityOperator.objects.filter(address__province=user.province, trash=False)
|
||||
if 'operators' in request.GET:
|
||||
|
||||
serializer = CityOperatorForSubSectorTransactionsSerializer(city_operators, many=True)
|
||||
else:
|
||||
serializer = self.serializer_class(city_operators, many=True,context={'request':request})
|
||||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
# ویوست مربوط به بررسی درخواست مرغدار
|
||||
class CityOperatorCheckRequestViewSet(viewsets.ModelViewSet):
|
||||
queryset = CityOperatorCheckRequest.objects.all()
|
||||
serializer_class = CityOperatorCheckRequestSerializer
|
||||
# permission_classes = [TokenHasReadWriteScope, provinceOperatorPermission, CityOperatorPermission]
|
||||
permission_classes = [TokenHasReadWriteScope]
|
||||
filter_backends = [DjangoFilterBackend]
|
||||
filterset_class = CityOperatorRequestFilterSet
|
||||
filterset_fields = [
|
||||
'poultry_request__user__mobile',
|
||||
'poultry_request__user__fullname',
|
||||
'poultry_request__user__first_name',
|
||||
'poultry_request__user__last_name',
|
||||
'poultry_request__user__address__breeding_unique_id',
|
||||
'poultry_request__order_code',
|
||||
]
|
||||
|
||||
# تابع برای تایید یا رد درخواست مرغدار توسط شهرستان
|
||||
def create(self, request, *args, **kwargs):
|
||||
user = SystemUserProfile.objects.get(user=request.user)
|
||||
# refresh(request.user.id)
|
||||
role = request.data['role']
|
||||
request.data.pop('role')
|
||||
key = request.data['key']
|
||||
state = request.data['state']
|
||||
poultry_request = PoultryRequest.objects.get(key=key, trash=False)
|
||||
hatching = PoultryHatching.objects.get(key=poultry_request.hatching.key, trash=False)
|
||||
if role == 'ProvinceOperator':
|
||||
province_operator = SystemUserProfile.objects.filter(user=request.user, trash=False)
|
||||
if province_operator.count() > 0:
|
||||
province_operator = province_operator.last()
|
||||
# city_unit = CityUnit.objects.get(name=poultry_request.poultry.address.city.name)
|
||||
# city_operator_system = CityOperator.objects.get(address__city=city_unit.city, trash=False)
|
||||
city_operator_system = CityOperator.objects.get(key=poultry_request.city_operator.key, trash=False)
|
||||
city_operator = SystemUserProfile.objects.get(key=city_operator_system.user.key, trash=False)
|
||||
|
||||
else:
|
||||
city_operator = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||||
city_operator_system = CityOperator.objects.get(key=poultry_request.city_operator.key, trash=False)
|
||||
province = city_operator.province.name
|
||||
province_operator = SystemUserProfile.objects.filter(role__name='ProvinceOperator',
|
||||
province__name=province, trash=False).last()
|
||||
serializer = self.serializer_class(data=request.data)
|
||||
if serializer.is_valid():
|
||||
city_operator_check_request = serializer.create(validated_data=request.data)
|
||||
if state == 'accept':
|
||||
poultry_request.state = {
|
||||
"city_operator": city_operator.first_name + " " + city_operator.last_name,
|
||||
"city_state": "accepted",
|
||||
"city_operator_mobile": city_operator.mobile,
|
||||
"city_operator_date_time_accepted": str(city_operator_check_request.create_date),
|
||||
"province_operator": province_operator.first_name + " " + province_operator.last_name,
|
||||
"provice_operator_mobile": province_operator.mobile,
|
||||
"province_state": "pending"
|
||||
}
|
||||
poultry_request.state_process = 'accepted'
|
||||
poultry_auctions = PoultryRequestAuction.objects.filter(poultry_request=poultry_request,
|
||||
trash=False).order_by(
|
||||
'auction_date')
|
||||
if poultry_auctions.count() > 0:
|
||||
list2 = []
|
||||
i = 0
|
||||
for poultry_auction in poultry_auctions:
|
||||
if i == 0:
|
||||
poultry_auction.auction_date = datetime.now() + timedelta(
|
||||
hours=int(poultry_auction.hour))
|
||||
poultry_auction.state = 'active'
|
||||
poultry_auction.save()
|
||||
list2.append(poultry_auction)
|
||||
else:
|
||||
poultry_auction.auction_date = list2[0].auction_date + timedelta(
|
||||
hours=int(poultry_auction.hour))
|
||||
poultry_auction.save()
|
||||
list2.clear()
|
||||
list2.append(poultry_auction)
|
||||
|
||||
i += 1
|
||||
|
||||
message = UserMessage(
|
||||
message="درخواست شما با کد سفارش {0} از طرف کارشناس شهرستان {1} تایید شده است و در حال حاضر در انتظار تایید کارشناس استان {2} میباشد ".format(
|
||||
poultry_request.order_code, city_operator.fullname, province_operator.fullname),
|
||||
heading="پیام سیستم ثبت شده در تاریخ {0}".format(datetime.now()),
|
||||
sender=city_operator
|
||||
)
|
||||
message.save()
|
||||
message.users.add(poultry_request.poultry.user)
|
||||
|
||||
if state == 'reject':
|
||||
if poultry_request.kill_house_list != None and len(poultry_request.kill_house_list) > 0:
|
||||
for item in poultry_request.kill_house_list:
|
||||
parts = item.split("(")
|
||||
name = parts[0].strip()
|
||||
|
||||
kill_request = KillRequest.objects.filter(kill_house__name=name,
|
||||
recive_date__date=poultry_request.send_date.date(),
|
||||
trash=False, poultry__isnull=True,
|
||||
province_state='accepted').first()
|
||||
if kill_request:
|
||||
kill_request.remain_quantity_for_poultry -= poultry_request.quantity
|
||||
kill_request.save()
|
||||
poultry_request.state = {
|
||||
"city_operator": city_operator.first_name + " " + city_operator.last_name,
|
||||
"city_state": " rejected",
|
||||
"city_operator_date_time_rejected": str(city_operator_check_request.create_date),
|
||||
"province_operator": "",
|
||||
"province_state": ""
|
||||
}
|
||||
# hatching.left_over += (poultry_request.quantity + poultry_request.losses)
|
||||
hatching.losses -= poultry_request.losses
|
||||
hatching.state = 'pending'
|
||||
hatching.allow_hatching = 'pending'
|
||||
hatching.save()
|
||||
poultry_request.message = city_operator_check_request.message
|
||||
poultry_request.state_process = 'rejected'
|
||||
message = UserMessage(
|
||||
message="درخواست شما با کد سفارش {0} از طرف کارشناس شهرستان {1} رد شده است ".format(
|
||||
poultry_request.order_code, city_operator.fullname),
|
||||
heading="پیام سیستم ثبت شده در تاریخ {0}".format(datetime.now()),
|
||||
sender=city_operator
|
||||
)
|
||||
message.save()
|
||||
message.users.add(poultry_request.poultry.user)
|
||||
city_operator_check_request.city_operator_system = city_operator_system
|
||||
city_operator_check_request.poultry_request = poultry_request
|
||||
if poultry_request.auction == True:
|
||||
city_operator_check_request.show_province = False
|
||||
poultry_request.save()
|
||||
if role == 'ProvinceOperator':
|
||||
city_operator_check_request.province_accept = True
|
||||
city_operator_check_request.save()
|
||||
if state == 'accept':
|
||||
if SmsLicense.objects.filter(city_approval=True).exists():
|
||||
poultry_mobile = city_operator_check_request.poultry_request.poultry.user.mobile
|
||||
order_code = city_operator_check_request.poultry_request.order_code
|
||||
date_str = str(city_operator_check_request.poultry_request.send_date)
|
||||
send_date = datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S').date()
|
||||
send_date = jdatetime.datetime.fromgregorian(year=send_date.year, month=send_date.month,
|
||||
day=send_date.day).strftime('%Y-%m-%d')
|
||||
date_list = reversed(send_date.split('-'))
|
||||
separate = "-"
|
||||
send_date = separate.join(date_list)
|
||||
sms_poultry_request_receive_city_accept_sms = threading.Thread(
|
||||
target=poultry_request_receive_city_accept_sms,
|
||||
args=(
|
||||
poultry_mobile,
|
||||
send_date,city_operator_check_request.poultry_request.order_code,
|
||||
send_date,city_operator_check_request.poultry_request.free_sale_in_province,
|
||||
|
||||
))
|
||||
sms_poultry_request_receive_city_accept_sms.start()
|
||||
|
||||
if role == 'ProvinceOperator':
|
||||
poultry_mobile = city_operator_check_request.poultry_request.poultry.user.mobile
|
||||
order_code = city_operator_check_request.poultry_request.order_code
|
||||
|
||||
province_operator = ProvinceOperator.objects.filter(
|
||||
user=SystemUserProfile.objects.get(role__name='ProvinceOperator', province=user.province))
|
||||
|
||||
if province_operator.count() > 0:
|
||||
province_operator = province_operator.last()
|
||||
|
||||
check = ProvinceCheckOperatorRequest(
|
||||
province_operator_system=province_operator,
|
||||
poultry_request=city_operator_check_request.poultry_request,
|
||||
city_request_Poultry=city_operator_check_request,
|
||||
quantity=poultry_request.quantity,
|
||||
|
||||
state='accept',
|
||||
)
|
||||
check.save()
|
||||
city_operator_check_request.province_state = 'accept'
|
||||
city_operator_check_request.save()
|
||||
poultry_request.province_state = 'accepted'
|
||||
poultry_request.save()
|
||||
sms_poultry_request_receive_province_accept_sms_sms = threading.Thread(
|
||||
target=poultry_request_receive_province_accept_sms,
|
||||
args=(
|
||||
poultry_mobile, order_code))
|
||||
sms_poultry_request_receive_province_accept_sms_sms.start()
|
||||
|
||||
return Response({"result": "درخواست شما با موفقیت برای استان ارسال شد."}, status=status.HTTP_201_CREATED)
|
||||
return Response(serializer.errors)
|
||||
|
||||
# تابع برای نمایش درخواست های تایید شده مرغدار توسط شهرستان
|
||||
def list(self, request, *args, **kwargs):
|
||||
# refresh(request.user.id)
|
||||
queryset = []
|
||||
|
||||
if 'state' in request.GET:
|
||||
user = SystemUserProfile.objects.get(user=request.user)
|
||||
|
||||
if request.GET['state'] == 'waiting':
|
||||
if 'date' in request.GET:
|
||||
date = datetime.strptime(request.GET['date'], '%Y-%m-%d')
|
||||
else:
|
||||
date = datetime.now().date()
|
||||
|
||||
queryset = []
|
||||
queryset = CityOperatorCheckRequest.objects.filter(
|
||||
show_province=True, city_operator_system__address__province=user.province,
|
||||
poultry_request__final_state='pending', trash=False, poultry_request__direct_buying=False,
|
||||
poultry_request__send_date__year=date.year, poultry_request__send_date__month=date.month,
|
||||
poultry_request__send_date__day=date.day
|
||||
).order_by(
|
||||
'-poultry_request__send_date')
|
||||
# item_list = CityOperatorCheckRequest.objects.filter(
|
||||
# show_province=True, city_operator_system__address__province=user.province,
|
||||
# poultry_request__final_state='pending', trash=False,
|
||||
# poultry_request__send_date__year=date.year, poultry_request__send_date__month=date.month,
|
||||
# poultry_request__send_date__day=date.day
|
||||
# ).order_by(
|
||||
# '-poultry_request__send_date')
|
||||
# for req in item_list:
|
||||
# province_check_req = ProvinceCheckOperatorRequest.objects.filter(city_request_Poultry=req)
|
||||
# if province_check_req.count() > 0:
|
||||
# province_check_req = province_check_req.last()
|
||||
# if province_check_req.quantity > 0 and province_check_req.state == 'accept' or province_check_req.state == 'pending':
|
||||
# if req in queryset:
|
||||
# pass
|
||||
# else:
|
||||
# queryset.append(req)
|
||||
# province_kill_reqs = ProvinceKillRequest.objects.filter(province_request=province_check_req)
|
||||
# if province_kill_reqs.count() > 0:
|
||||
# counter = 0
|
||||
# for province_kill_req in province_kill_reqs:
|
||||
# if KillHouseCheckRequest.objects.filter(
|
||||
# province_kill_request=province_kill_req, state='accepted').exists():
|
||||
# counter += 1
|
||||
# if province_kill_reqs.count() == counter and province_check_req.quantity == 0:
|
||||
# pass
|
||||
# else:
|
||||
#
|
||||
# if req in queryset:
|
||||
# pass
|
||||
# else:
|
||||
# queryset.append(req)
|
||||
|
||||
elif request.GET['state'] == 'all':
|
||||
queryset = CityOperatorCheckRequest.objects.filter(
|
||||
show_province=True, city_operator_system__address__province=user.province,
|
||||
poultry_request__final_state='pending', trash=False).order_by(
|
||||
'-poultry_request__send_date')
|
||||
elif request.GET['state'] == 'new':
|
||||
if 'date1' in request.GET and 'date2' in request.GET:
|
||||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||||
queryset_list = CityOperatorCheckRequest.objects.filter(state='accept', province_state='pending',
|
||||
show_province=True,
|
||||
city_operator_system__address__province=user.province,
|
||||
trash=False).order_by(
|
||||
'poultry_request__send_date')
|
||||
|
||||
queryset = [
|
||||
city_check for city_check in queryset_list
|
||||
if date1 <= city_check.poultry_request.send_date.date() <= date2
|
||||
]
|
||||
else:
|
||||
pass
|
||||
# if 'state' in request.GET:
|
||||
# if request.GET['state'] == 'CityOperator':
|
||||
# user = SystemUserProfile.objects.get(user=request.user)
|
||||
# city_operator = CityOperator.objects.get(user=user)
|
||||
# queryset = CityOperatorCheckRequest.objects.filter(
|
||||
# poultry_request__user__address__city=city_operator.address.city).order_by('-create_date')
|
||||
|
||||
if 'type' in request.GET:
|
||||
if request.GET['type'] == 'filter':
|
||||
for item in self.filterset_fields:
|
||||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||||
if (self.filterset_class(
|
||||
data=query,
|
||||
queryset=self.queryset.filter(state__exact="accept", trash=False)
|
||||
)
|
||||
).filter():
|
||||
ps = self.filterset_class(data=query, queryset=self.queryset)
|
||||
filtered_city_operator = ps.filter()
|
||||
serializer = self.serializer_class(filtered_city_operator, many=True)
|
||||
return Response(serializer.data)
|
||||
return Response({"msg": "Enter 'Type' In Get Parameters"}, status=status.HTTP_403_FORBIDDEN)
|
||||
|
||||
serializer = CityOperatorCheckRequestSerializer(queryset, many=True)
|
||||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||||
|
||||
class CityOperatorCheckRequestNewViewSet(viewsets.ModelViewSet):
|
||||
queryset = CityOperatorCheckRequest.objects.all()
|
||||
serializer_class = CityOperatorCheckRequestSerializer
|
||||
pagination_class = CustomPagination
|
||||
permission_classes = [TokenHasReadWriteScope]
|
||||
filter_backends = [DjangoFilterBackend]
|
||||
filterset_class = CityOperatorRequestFilterSet
|
||||
filterset_fields = [
|
||||
'poultry_request__poultry__user__mobile',
|
||||
'poultry_request__poultry__user__fullname',
|
||||
'poultry_request__poultry__user__first_name',
|
||||
'poultry_request__poultry__user__last_name',
|
||||
'poultry_request__poultry__user__city__name',
|
||||
'poultry_request__order_code',
|
||||
]
|
||||
|
||||
# تابع برای نمایش درخواست های تایید شده مرغدار توسط شهرستان
|
||||
def list(self, request, *args, **kwargs):
|
||||
queryset = []
|
||||
|
||||
if 'state' in request.GET:
|
||||
user = SystemUserProfile.objects.get(user=request.user)
|
||||
|
||||
if request.GET['state'] == 'waiting':
|
||||
if 'date' in request.GET:
|
||||
date = datetime.strptime(request.GET['date'], '%Y-%m-%d')
|
||||
else:
|
||||
date = datetime.now().date()
|
||||
|
||||
queryset = []
|
||||
queryset = CityOperatorCheckRequest.objects.filter(
|
||||
show_province=True, city_operator_system__address__province=user.province,
|
||||
poultry_request__final_state='pending', trash=False, poultry_request__direct_buying=False,
|
||||
poultry_request__send_date__year=date.year, poultry_request__send_date__month=date.month,
|
||||
poultry_request__send_date__day=date.day
|
||||
).order_by(
|
||||
'-poultry_request__send_date')
|
||||
|
||||
|
||||
elif request.GET['state'] == 'all':
|
||||
queryset = CityOperatorCheckRequest.objects.filter(
|
||||
show_province=True, city_operator_system__address__province=user.province,
|
||||
poultry_request__final_state='pending', trash=False).order_by(
|
||||
'-poultry_request__send_date')
|
||||
elif request.GET['state'] == 'new':
|
||||
if 'date1' in request.GET and 'date2' in request.GET:
|
||||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||||
queryset = CityOperatorCheckRequest.objects.filter(state='accept', province_state='pending',
|
||||
show_province=True,
|
||||
poultry_request__send_date__date__gte=date1,
|
||||
poultry_request__send_date__date__lte=date2,
|
||||
city_operator_system__address__province=user.province,
|
||||
trash=False).order_by(
|
||||
'poultry_request__send_date')
|
||||
|
||||
# queryset = [
|
||||
# city_check for city_check in queryset_list
|
||||
# if date1 <= city_check.poultry_request.send_date.date() <= date2
|
||||
# ]
|
||||
else:
|
||||
pass
|
||||
|
||||
if 'search' in request.GET:
|
||||
city_check_requests = []
|
||||
if request.GET['search'] == 'filter':
|
||||
if request.GET['value'] != "":
|
||||
for item in self.filterset_fields:
|
||||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||||
if (self.filterset_class(
|
||||
data=query,
|
||||
queryset=queryset
|
||||
)
|
||||
).filter():
|
||||
ps = self.filterset_class(data=query, queryset=queryset)
|
||||
city_check_requests = ps.filter()
|
||||
queryset = [] if len(city_check_requests) == 0 else city_check_requests
|
||||
page_size = request.query_params.get('page_size', None)
|
||||
if page_size:
|
||||
self.pagination_class.page_size = int(page_size)
|
||||
|
||||
page = self.paginate_queryset(queryset)
|
||||
if page is not None:
|
||||
serializer = self.get_serializer(page, many=True)
|
||||
return self.get_paginated_response(serializer.data)
|
||||
serializer = CityOperatorCheckRequestSerializer(queryset, many=True)
|
||||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
|
||||
class PoultryEditByCityOperatorViewSet(viewsets.ModelViewSet):
|
||||
queryset = Poultry.objects.all()
|
||||
permission_classes = [TokenHasReadWriteScope]
|
||||
serializer_class = PoultrySerializer
|
||||
|
||||
def update(self, request, *args, **kwargs):
|
||||
# refresh(request.user.id)
|
||||
# get poultry object
|
||||
poultry_object = self.queryset.get(key=request.data['poultry_key'], trash=False)
|
||||
request.data.pop('poultry_key')
|
||||
|
||||
# Remove Null Fields From Address Body
|
||||
request = remove_null_fields(type='item', request=request, item='address')
|
||||
# Remove Null Fields From User Bank Info Body
|
||||
request = remove_null_fields(type='item', request=request, item='user_bank_info')
|
||||
# Remove Null Fields From request Body
|
||||
request = remove_null_fields(type='req', request=request)
|
||||
|
||||
# update address information
|
||||
address_data = request.data['address']
|
||||
province = None
|
||||
city = None
|
||||
if 'province' and 'city' in address_data.keys():
|
||||
province = Province.objects.get(key=address_data['province'], trash=False)
|
||||
address_data.pop('province')
|
||||
city = City.objects.get(key=address_data['city'], trash=False)
|
||||
address_data.pop('city')
|
||||
address_serializer = SystemAddressSerializer(data=address_data)
|
||||
if address_serializer.is_valid():
|
||||
addr_object = address_serializer.update(
|
||||
instance=poultry_object.address,
|
||||
validated_data=address_data
|
||||
)
|
||||
if province != None and city != None:
|
||||
addr_object.province = province
|
||||
addr_object.city = city
|
||||
addr_object.save()
|
||||
request.data.pop('address')
|
||||
|
||||
# update user bank information
|
||||
if poultry_object.user_bank_info != None:
|
||||
bank_data = request.data['user_bank_info']
|
||||
bank_serializer = BankCardSerializer(data=bank_data)
|
||||
if bank_serializer.is_valid():
|
||||
bank_object = bank_serializer.update(
|
||||
instance=poultry_object.user_bank_info,
|
||||
validated_data=bank_data
|
||||
)
|
||||
request.data.pop('user_bank_info')
|
||||
else:
|
||||
bank_data = request.data['user_bank_info']
|
||||
bank_serializer = BankCardSerializer(data=bank_data)
|
||||
if bank_serializer.is_valid():
|
||||
bank_object = bank_serializer.create(
|
||||
validated_data=bank_data
|
||||
)
|
||||
request.data.pop('user_bank_info')
|
||||
|
||||
# sending data to serializer & update poultry object
|
||||
serializer = self.serializer_class(data=request.data)
|
||||
if serializer.is_valid():
|
||||
obj = serializer.update(
|
||||
instance=poultry_object,
|
||||
validated_data=request.data
|
||||
)
|
||||
obj.user_bank_info = bank_object
|
||||
obj.save()
|
||||
serializer = self.serializer_class(obj)
|
||||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
|
||||
class ManagementRequestViewSet(viewsets.ModelViewSet):
|
||||
queryset = PoultryRequest.objects.all()
|
||||
serializer_class = PoultryRequestSerializer
|
||||
pagination_class = CustomPagination
|
||||
permission_classes = [TokenHasReadWriteScope]
|
||||
filter_backends = [DjangoFilterBackend]
|
||||
# filterset_class = PoultryRequestFilterSet
|
||||
filterset_fields = [
|
||||
'order_code',
|
||||
'poultry__user__mobile',
|
||||
'poultry__user__fullname',
|
||||
'poultry__user__first_name',
|
||||
'poultry__user__last_name',
|
||||
'poultry__address__city__name',
|
||||
|
||||
]
|
||||
def list(self, request, *args, **kwargs):
|
||||
now = datetime.now().date()
|
||||
date1 = datetime.strptime(str(request.GET['date1']),
|
||||
'%Y-%m-%d').date() if 'date1' in request.GET else now
|
||||
date2 = datetime.strptime(str(request.GET['date2']),
|
||||
'%Y-%m-%d').date() if 'date2' in request.GET else now
|
||||
poultry_requests = []
|
||||
user = SystemUserProfile.objects.get(user=request.user)
|
||||
queryset = PoultryRequest.objects.filter(poultry__address__province=user.province,
|
||||
trash=False, state_process__in=('pending', 'accepted'),
|
||||
province_state='pending',
|
||||
final_state='pending', out=False,
|
||||
send_date__date__gte=date1, send_date__date__lte=date2
|
||||
).order_by('-send_date')
|
||||
|
||||
if 'search' in request.GET:
|
||||
if request.GET['search'] == 'filter':
|
||||
if request.GET['value'] != "":
|
||||
for item in self.filterset_fields:
|
||||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||||
if (PoultryRequestFilterSet(
|
||||
data=query,
|
||||
queryset=queryset
|
||||
)
|
||||
).filter():
|
||||
ps = PoultryRequestFilterSet(data=query, queryset=queryset)
|
||||
poultry_requests = ps.filter()
|
||||
queryset = [] if len(poultry_requests) == 0 else poultry_requests
|
||||
|
||||
page_size = request.query_params.get('page_size', None)
|
||||
if page_size:
|
||||
self.pagination_class.page_size = int(page_size)
|
||||
|
||||
page = self.paginate_queryset(queryset)
|
||||
if page is not None:
|
||||
serializer = PoultryRequestForKillingInformationSerializer(page, many=True)
|
||||
return self.get_paginated_response(serializer.data)
|
||||
|
||||
serializer = PoultryRequestForKillingInformationSerializer(queryset, many=True)
|
||||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||||
Reference in New Issue
Block a user