79 lines
2.7 KiB
Python
79 lines
2.7 KiB
Python
|
|
from django.contrib.auth.models import User
|
||
|
|
from rest_framework import status
|
||
|
|
from rest_framework.response import Response
|
||
|
|
from authentication.models import City, SystemUserProfile, SystemAddress
|
||
|
|
from authentication.views import ARTA_URL_REGISTER
|
||
|
|
from panel.admin import PROJECT_API_KEY
|
||
|
|
from panel.models import Guilds, Wallet
|
||
|
|
import requests
|
||
|
|
|
||
|
|
|
||
|
|
def register_user(group, city_name, mobile, first_name, last_name, national_id, postal_code, address_text):
|
||
|
|
try:
|
||
|
|
# Fetch city and related province
|
||
|
|
city = City.objects.select_related('province').get(name=city_name)
|
||
|
|
province = city.province
|
||
|
|
except City.DoesNotExist:
|
||
|
|
return Response({"result": "شهر یافت نشد"}, status=status.HTTP_400_BAD_REQUEST)
|
||
|
|
|
||
|
|
# Check if user profile exists and if they are associated with a guild
|
||
|
|
system_profile = SystemUserProfile.objects.filter(mobile=mobile, trash=False).last()
|
||
|
|
if system_profile and Guilds.objects.filter(user=system_profile, trash=False).exists():
|
||
|
|
return Response({"result": "این صنف قبلا ثبت شده است"}, status=status.HTTP_403_FORBIDDEN)
|
||
|
|
|
||
|
|
# Register a new user if system profile does not exist
|
||
|
|
if not system_profile:
|
||
|
|
password = "123456"
|
||
|
|
registration_data = {
|
||
|
|
"username": mobile,
|
||
|
|
"password": password,
|
||
|
|
"api_key": PROJECT_API_KEY
|
||
|
|
}
|
||
|
|
|
||
|
|
# Attempt to register the user via ARTA
|
||
|
|
response = requests.post(ARTA_URL_REGISTER, data=registration_data, verify=False)
|
||
|
|
if response.status_code != 200:
|
||
|
|
return None
|
||
|
|
|
||
|
|
|
||
|
|
# Create Django user
|
||
|
|
user = User.objects.create(username=mobile, first_name=first_name, last_name=last_name)
|
||
|
|
|
||
|
|
# Generate base order ID
|
||
|
|
last_profile = SystemUserProfile.objects.order_by('-base_order').first()
|
||
|
|
base_order = (last_profile.base_order + 1) if last_profile else 1000
|
||
|
|
|
||
|
|
# Create system profile
|
||
|
|
system_profile = SystemUserProfile.objects.create(
|
||
|
|
mobile=mobile,
|
||
|
|
first_name=first_name,
|
||
|
|
last_name=last_name,
|
||
|
|
fullname=f"{first_name} {last_name}",
|
||
|
|
user=user,
|
||
|
|
base_order=base_order,
|
||
|
|
password=password,
|
||
|
|
national_id=national_id,
|
||
|
|
city=city,
|
||
|
|
province=province
|
||
|
|
)
|
||
|
|
|
||
|
|
# Create address for the user
|
||
|
|
address = SystemAddress.objects.create(
|
||
|
|
city=city,
|
||
|
|
province=province,
|
||
|
|
address=address_text,
|
||
|
|
postal_code=postal_code
|
||
|
|
)
|
||
|
|
|
||
|
|
# Assign role to the user
|
||
|
|
system_profile.role.add(group)
|
||
|
|
|
||
|
|
# Create wallet for the user
|
||
|
|
wallet = Wallet.objects.create()
|
||
|
|
|
||
|
|
return {
|
||
|
|
"system_profile": system_profile,
|
||
|
|
"address": address,
|
||
|
|
"wallet": wallet
|
||
|
|
}
|