first push

This commit is contained in:
2026-01-18 11:45:53 +03:30
commit 6bcd71d9ec
702 changed files with 272997 additions and 0 deletions

252
panel/helper.py Normal file
View File

@@ -0,0 +1,252 @@
import re
from django.db.models import Q
from django.views.decorators.csrf import csrf_exempt
from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import AllowAny
from authentication.models import SystemUserProfile, Province, BankCard, City, Group, SystemAddress
from authentication.serializer.serializer import BankCardSerializer
from authentication.serializers import SystemAddressSerializer
from rest_framework.response import Response
from rest_framework import status
from panel.models import Wallet
COMPANY_NUMBER2='09169726704'
COMPANY_NUMBER='09011110919'
UNION_NUMBER='09188621910'
GUILD_NUMBER='09011110911'
UNION_SECOND_NUMBER='09184310081'
SUPPORTER_NUMBER='09165597588'
UNION_THIRD_NUMBER=None
UNION_FOURTH_NUMBER='09109906845'
UNION_NUMBER_2=None
UNION_FIFTH_NUMBER='09188621910'
UNION_SIXTH_NUMBER='09183487701'
# Remove Null Fields From Request Body
def remove_null_fields(type=None, request=None, item=None):
if type == 'req':
null_fields = []
for key, value in request.data.items():
if value is None:
null_fields.append(key)
for item in null_fields:
request.data.pop(item)
elif type == 'item':
null_fields = []
for key, value in request.data[item].items():
if value is None:
null_fields.append(key)
for field in null_fields:
request.data[item].pop(field)
return request
def create_except_profile(request, queryset, serializer, role):
# get user profile object
userprofile = SystemUserProfile.objects.get(key=request.data['userprofile_key'])
request.data.pop('userprofile_key')
# if not queryset.objects.filter(user=userprofile).exists():
# get group and set role for user
group = Group.objects.get(name=role)
userprofile.role.add(group)
# get province object
province = Province.objects.get(key=request.data['province'])
request.data.pop("province")
# get city object
city = City.objects.get(key=request.data['city'])
request.data.pop('city')
# get user banking information
if 'user_bank_info' in request.data.keys():
bank_card = BankCard.objects.create(**request.data['user_bank_info'])
request.data.pop('user_bank_info')
else:
bank_card = None
wallet = Wallet()
wallet.save()
# create address object & operator object with serializers
address_serializer = SystemAddressSerializer(data=request.data)
if address_serializer.is_valid():
address_obj = address_serializer.create(validated_data=request.data)
address_obj.province = province
address_obj.city = city
address_obj.save()
operator_object = queryset(
user=userprofile,
address=address_obj,
user_bank_info=bank_card,
wallet=wallet
)
operator_object.save()
operator_serializer = serializer(operator_object)
return operator_serializer.data, status.HTTP_201_CREATED, operator_object
return address_serializer.errors, status.HTTP_400_BAD_REQUEST
# else:
# return "operator exists", status.HTTP_403_FORBIDDEN
def update_except_profile(model, serializer, request):
# remove null fields in address body
request = remove_null_fields(type='item', request=request, item='address')
# remove null fields in user bank info body
request = remove_null_fields(type='item', request=request, item='user_bank_info')
userprofile = SystemUserProfile.objects.get(user=request.user)
operator = model.objects.get(user=userprofile)
if 'address' in request.data.keys() or request.data['address'] is not None:
address_serializer = SystemAddressSerializer(data=request.data['address'])
if address_serializer.is_valid():
addr_object = address_serializer.update(
instance=operator.address,
validated_data=request.data['address']
)
operator.address = addr_object
if 'user_bank_info' in request.data.keys() or request.data['user_bank_info'] is not None:
bank_serializer = BankCardSerializer(data=request.data['user_bank_info'])
if bank_serializer.is_valid():
bank_object = bank_serializer.update(
instance=operator.user_bank_info,
validated_data=request.data['user_bank_info']
)
operator.user_bank_info = bank_object
operator.save()
response_serializer = serializer(operator)
return response_serializer
def operator_update_except_profile(model, serializer, request):
# remove null fields in address body
request = remove_null_fields(type='item', request=request, item='address')
# remove null fields in user bank info body
request = remove_null_fields(type='item', request=request, item='user_bank_info')
userprofile = SystemUserProfile.objects.get(key=request.data['userprofile_key'])
request.data.pop('userprofile_key')
if 'poultry_key' in request.data.keys():
if 'unit_name' in request.data.keys():
unit_name = request.data['unit_name']
request.data.pop('unit_name')
else:
unit_name = None
if 'halls' in request.data.keys():
halls = int(request.data['halls'])
request.data.pop('halls')
else:
halls = None
if 'breeding_unique_id' in request.data.keys():
breeding_unique_id = request.data['breeding_unique_id']
request.data.pop('breeding_unique_id')
else:
breeding_unique_id = None
operator = model.objects.get(key=request.data['poultry_key'])
request.data.pop('poultry_key')
if halls != None:
operator.number_of_halls = halls
operator.save()
if unit_name != None:
operator.unit_name = unit_name
operator.save()
if breeding_unique_id != None:
operator.breeding_unique_id = breeding_unique_id
operator.save()
else:
operator = model.objects.get(user=userprofile)
if 'address' in request.data.keys() or request.data['address'] is not None:
data = request.data['address']
if 'city' in request.data['address']:
city = City.objects.get(key=request.data['address']['city']) # contains city object
data.pop('city')
else:
city = None
if 'province' in request.data['address']:
province = Province.objects.get(key=request.data['address']['province']) # contains province object
data.pop('province')
else:
province = None
address = SystemAddress.objects.get(key=operator.address.key)
if province != None:
address.province = province
if city != None:
address.city = city
address.save()
address_serializer = SystemAddressSerializer(data=data)
if address_serializer.is_valid():
addr_object = address_serializer.update(
instance=operator.address,
validated_data=request.data['address']
)
if city != None:
addr_object.city = city
if province != None:
addr_object.province = province
addr_object.save()
operator.address = addr_object
if 'user_bank_info' in request.data.keys() or request.data['user_bank_info'] != "":
if operator.user_bank_info is not None:
bank_serializer = BankCardSerializer(data=request.data['user_bank_info'])
if bank_serializer.is_valid():
bank_object = bank_serializer.update(
instance=operator.user_bank_info,
validated_data=request.data['user_bank_info']
)
operator.user_bank_info = bank_object
else:
bank_serializer = BankCardSerializer(data=request.data['user_bank_info'])
if bank_serializer.is_valid():
bank_object = bank_serializer.create(
validated_data=request.data['user_bank_info']
)
operator.user_bank_info = bank_object
operator.save()
response_serializer = serializer(operator)
return response_serializer
def check_mobile_number(s):
pattern = r'^09\d{9}$'
return bool(re.match(pattern, s))
@api_view(["GET"])
@csrf_exempt
@permission_classes([AllowAny])
def get_country(request):
asian_countries = {
'Iraq': 'عراق',
'Afghanistan': 'افغانستان',
'Turkey': 'ترکیه',
}
persian_country_details = [{'en': eng_name, 'fa': persian_name} for eng_name, persian_name in
asian_countries.items()]
return Response(persian_country_details)
def build_query(filterset_class, value):
query = Q()
for field in filterset_class.Meta.fields:
query |= Q(**{f"{field}__icontains": value})
return query