265 lines
9.7 KiB
Python
265 lines
9.7 KiB
Python
from rest_framework.decorators import api_view, permission_classes
|
|
from rest_framework.permissions import AllowAny
|
|
from rest_framework.response import Response
|
|
from rest_framework import status
|
|
from django.views.decorators.csrf import csrf_exempt
|
|
|
|
from general_urls import BASE_URL
|
|
from .ProvinceOperator.serializers import POSAccessLevelSerializer
|
|
from .models import POSMachine, RolesProducts, PosDeviceVersion, POSAccessLevel
|
|
import requests
|
|
from requests.exceptions import RequestException
|
|
|
|
from .validate_headers import PosDeviceValidator
|
|
|
|
|
|
@api_view(["GET"])
|
|
@csrf_exempt
|
|
@permission_classes([AllowAny])
|
|
def Check_server(request):
|
|
data = {"server": [
|
|
{
|
|
"key": "Test",
|
|
"name": "تست",
|
|
"address": "https://testbackend.rasadyar.com"
|
|
},
|
|
{
|
|
"key": "Hamedan",
|
|
"name": "همدان",
|
|
"address": "https://habackend.rasadyar.com"
|
|
},
|
|
{
|
|
"key": "Markazi",
|
|
"name": "مرکزی",
|
|
"address": "https://mabackend.rasadyar.com"
|
|
}
|
|
]
|
|
}
|
|
return Response(data, status=status.HTTP_200_OK)
|
|
|
|
|
|
@api_view(["GET"])
|
|
@csrf_exempt
|
|
@permission_classes([AllowAny])
|
|
def pos_finder(request):
|
|
validator = PosDeviceValidator(request)
|
|
validation_error = validator.validation_version()
|
|
if validation_error:
|
|
return validation_error
|
|
|
|
validation_device = validator.validation_device()
|
|
if not validation_device:
|
|
return Response({"result": "نشست شما منقضی شده لطفا محدد وارد شوید!"}, status=status.HTTP_401_UNAUTHORIZED)
|
|
|
|
pos_machine = (
|
|
POSMachine.objects
|
|
.select_related('user__province')
|
|
.only('pos_id', 'user__fullname', 'user__province__name')
|
|
.filter(pos_id=validation_device)
|
|
)
|
|
if not pos_machine.exists():
|
|
return Response({"result": "صنفی با این شناسه یافت نشد!"}, status=status.HTTP_404_NOT_FOUND)
|
|
url = BASE_URL.replace('api/', '')
|
|
pos_machine = pos_machine.first()
|
|
version = PosDeviceVersion.objects.filter(company=pos_machine.pos_company).order_by('code').last()
|
|
name=version.name if version else None
|
|
code=version.code if version else None
|
|
link=version.link if version else None
|
|
checksum=version.checksum if version else None
|
|
if pos_machine.guild:
|
|
store_name = pos_machine.guild.guilds_name
|
|
phone = pos_machine.guild.phone
|
|
key = pos_machine.guild.key
|
|
type_activity = pos_machine.guild.type_activity
|
|
area_activity = pos_machine.guild.area_activity
|
|
seller_type = "Guild" if pos_machine.guild.steward == False else "Steward"
|
|
product = RolesProducts.objects.filter(guild=pos_machine.guild, trash=False, name='مرغ گرم').first()
|
|
product_name = product.parent_product.name if product else None
|
|
product_image = product.parent_product.image if product else None
|
|
product_key = product.key if product else None
|
|
other_product = True
|
|
|
|
|
|
|
|
|
|
elif pos_machine.cooperative:
|
|
store_name = pos_machine.cooperative.name
|
|
phone = pos_machine.cooperative.mobile
|
|
key = pos_machine.cooperative.key
|
|
seller_type = "cooperative"
|
|
type_activity = "تعاونی"
|
|
area_activity = "تعاونی"
|
|
product_name = None
|
|
product_image = None
|
|
product_key = None
|
|
other_product = True
|
|
else:
|
|
store_name = pos_machine.kill_house.name
|
|
phone = pos_machine.kill_house.phone
|
|
key = pos_machine.kill_house.key
|
|
seller_type = "KillHouse"
|
|
type_activity = "کشتارگاه"
|
|
area_activity = "کشتارگاه"
|
|
product = RolesProducts.objects.filter(kill_house=pos_machine.kill_house, trash=False, name='مرغ گرم').first()
|
|
product_name = product.parent_product.name if product else None
|
|
product_image = product.parent_product.image if product else None
|
|
product_key = product.key if product else None
|
|
other_product = True
|
|
|
|
data = {
|
|
"type": seller_type,
|
|
"name": store_name,
|
|
"type_activity": type_activity,
|
|
"area_activity": area_activity,
|
|
"phone": phone,
|
|
"mobile": pos_machine.user.mobile,
|
|
"fullname": pos_machine.user.fullname,
|
|
"firstname": pos_machine.user.first_name,
|
|
"lastname": pos_machine.user.last_name,
|
|
"city": pos_machine.user.city.name,
|
|
"province": pos_machine.user.province.name,
|
|
"national_code": pos_machine.user.national_code,
|
|
"national_id": pos_machine.user.national_id,
|
|
"birthday": pos_machine.user.birthday,
|
|
"url": url,
|
|
"key": key,
|
|
"server": "Markazi",
|
|
"segmentation": True,
|
|
"product_name": product_name,
|
|
"product_image": product_image,
|
|
"product_key": product_key,
|
|
"other_product": other_product,
|
|
"version_name": name,
|
|
"code": code,
|
|
"link": link,
|
|
"checksum": checksum,
|
|
|
|
}
|
|
return Response(data, status=status.HTTP_200_OK)
|
|
|
|
|
|
@api_view(["GET"])
|
|
@csrf_exempt
|
|
@permission_classes([AllowAny])
|
|
def pos_get_finder(request):
|
|
pos_id = request.GET.get('pos-id')
|
|
if not pos_id:
|
|
return Response({"result": "شناسه POS مشخص نشده است!"}, status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
pos_machine = (
|
|
POSMachine.objects
|
|
.select_related('user__province')
|
|
.only('pos_id', 'user__fullname', 'user__province__name')
|
|
.filter(pos_id=pos_id)
|
|
)
|
|
if not pos_machine.exists():
|
|
return Response({"result": "صنفی با این شناسه یافت نشد!"}, status=status.HTTP_404_NOT_FOUND)
|
|
url = BASE_URL.replace('api/', '')
|
|
pos_machine = pos_machine.first()
|
|
if pos_machine.guild:
|
|
store_name = pos_machine.guild.guilds_name
|
|
phone = pos_machine.guild.guilds_name
|
|
key = pos_machine.guild.key
|
|
seller_type = "Guild" if pos_machine.guild.steward == False else "Steward"
|
|
|
|
|
|
elif pos_machine.cooperative:
|
|
store_name = pos_machine.cooperative.name
|
|
phone = pos_machine.cooperative.mobile
|
|
key = pos_machine.cooperative.key
|
|
seller_type = "cooperative"
|
|
|
|
|
|
else:
|
|
store_name = pos_machine.kill_house.name
|
|
phone = pos_machine.kill_house.phone
|
|
key = pos_machine.kill_house.key
|
|
seller_type = "KillHouse"
|
|
data = {
|
|
"type": seller_type,
|
|
"name": store_name,
|
|
"phone": phone,
|
|
"mobile": pos_machine.user.mobile,
|
|
"fullname": pos_machine.user.fullname,
|
|
"firstname": pos_machine.user.first_name,
|
|
"lastname": pos_machine.user.last_name,
|
|
"city": pos_machine.user.city.name,
|
|
"province": pos_machine.user.province.name,
|
|
"national_code": pos_machine.user.national_code,
|
|
"national_id": pos_machine.user.national_id,
|
|
"birthday": pos_machine.user.birthday,
|
|
"url": url,
|
|
"key": key,
|
|
"server": "Markazi",
|
|
}
|
|
return Response(data, status=status.HTTP_200_OK)
|
|
|
|
|
|
@api_view(["POST"])
|
|
@csrf_exempt
|
|
@permission_classes([AllowAny])
|
|
def pos_login(request):
|
|
validator = PosDeviceValidator(request)
|
|
validation_error = validator.validation_version()
|
|
if validation_error:
|
|
return validation_error
|
|
|
|
pos_machine = validator.manage_device()
|
|
|
|
if not pos_machine.owner:
|
|
return Response({"result": f"برای این دستگاه مالکی تعیین نشده!شناسه پوز:{pos_machine.pos_unique_id}"},
|
|
status=status.HTTP_403_FORBIDDEN)
|
|
|
|
if not pos_machine.active:
|
|
return Response({"result": f"دستگاه غیر فعال میباشد!شناسه پوز:{pos_machine.pos_unique_id}"},
|
|
status=status.HTTP_403_FORBIDDEN)
|
|
url = BASE_URL.replace('api/', '')
|
|
version = PosDeviceVersion.objects.filter(company=pos_machine.pos_company).order_by('code').last()
|
|
name = version.name if version else None
|
|
code = version.code if version else None
|
|
link = version.link if version else None
|
|
checksum = version.checksum if version else None
|
|
access_levels = POSAccessLevel.objects.filter(pos=pos_machine)
|
|
access_levels = POSAccessLevelSerializer(access_levels,many=True).data
|
|
agent = True if (pos_machine.current_user or pos_machine.current_representative) else False
|
|
agent_fullname =None
|
|
agent_mobile =None
|
|
agent_type =None
|
|
if agent:
|
|
if pos_machine.current_user:
|
|
agent_fullname = pos_machine.current_user.fullname
|
|
agent_mobile = pos_machine.current_user.mobile
|
|
agent_type = 'dispenser'
|
|
|
|
else:
|
|
agent_fullname = pos_machine.current_representative.first_name + "" +pos_machine.current_representative.last_name
|
|
agent_mobile = pos_machine.current_representative.mobile
|
|
agent_type = 'representative'
|
|
|
|
data = {
|
|
"mobile": pos_machine.owner.mobile,
|
|
"fullname": pos_machine.owner.fullname,
|
|
"firstname": pos_machine.owner.first_name,
|
|
"lastname": pos_machine.owner.last_name,
|
|
"city": pos_machine.owner.city.name,
|
|
"province": pos_machine.owner.province.name,
|
|
"national_code": pos_machine.owner.national_code,
|
|
"national_id": pos_machine.owner.national_id,
|
|
"birthday": pos_machine.owner.birthday,
|
|
"url": url,
|
|
"key": pos_machine.key,
|
|
"server": "Markazi",
|
|
"pos_unique_id": pos_machine.pos_unique_id,
|
|
"version_name": name,
|
|
"code": code,
|
|
"link": link,
|
|
"checksum": checksum,
|
|
"access_levels": access_levels,
|
|
"agent": agent,
|
|
"agent_type": agent_type,
|
|
"agent_fullname": agent_fullname,
|
|
"agent_mobile": agent_mobile,
|
|
|
|
}
|
|
return Response(data, status=status.HTTP_200_OK)
|