3164 lines
134 KiB
Python
3164 lines
134 KiB
Python
import datetime
|
|
import threading
|
|
from datetime import timedelta
|
|
from django.shortcuts import get_object_or_404, redirect
|
|
|
|
import jdatetime
|
|
from django.http import HttpResponse
|
|
from rest_framework import viewsets
|
|
from oauth2_provider.contrib.rest_framework import (
|
|
TokenHasReadWriteScope,
|
|
OAuth2Authentication,
|
|
)
|
|
from oauth2_provider.models import AccessToken
|
|
from rest_framework.pagination import PageNumberPagination
|
|
|
|
from general_urls import CLIENT_ID, CLIENT_SECRET, BASE_URL
|
|
from panel.ReportingPanel.filterset import ProfileFilterSet
|
|
from panel.admin import PROJECT_API_KEY
|
|
from panel.filterset import WagePaymentFilterSet
|
|
from panel.models import WareHouseFactor, InspectorOperator, KillHouseVet, Itransaction, Wallet, KillHousePercentage, \
|
|
Jahad, Admin, VetSupervisor, ProvincialGovernment, CityJahad, ProvinceAllowKillHouseChooseStewardGuilds, \
|
|
ProvinceAllowPoultryChooseKillHouse, Pricing, Guilds, POSMachine, PosVersion, PosItem, POSId, UserLoginLog, \
|
|
ProvinceAllowKillHouseDirectBuying
|
|
from ticket.helper import send_image_to_server
|
|
from .filterset import UserProfileFilterSet, SystemUserProfileFilteSet, ExternalTransactionFilterSet
|
|
from .helper.refresh import refresh
|
|
from .sahandsms.sms import (
|
|
send_sms,
|
|
send_otp_code,
|
|
send_password
|
|
)
|
|
from .serializer.serializer import (
|
|
AddressSerializer,
|
|
UserProfileSerializer,
|
|
BankCardSerializer,
|
|
SystemUserProfileSerializer, SystemUserProfileForAllUsersSerializer, SystemUserProfileBaseInfoSerializer,
|
|
ExternalTransactionSerializer,
|
|
# SystemUserProfileInfoSerializer
|
|
)
|
|
from .serializers import SystemAddressSerializer, CityForProductPricingSerializer
|
|
from panel.CityOperator.serializers import CityOperatorSerializer, CityOperatorForAllUserSerializer
|
|
from panel.ProvinceOperator.serializers import ProvinceOperatorSerializer, InspectorOperatorSerializer, JahadSerializer, \
|
|
AdminSerializer, VetSupervisorSerializer, ProvincialGovernmentSerializer, ProvinceOperatorForAllUserSerializer, \
|
|
InspectorOperatorForAllUserSerializer, JahadForAllUserSerializer, AdminForAllUserSerializer, \
|
|
VetSupervisorForAllUserSerializer, ProvincialGovernmentForAllUserSerializer, CityJahadForAllUserSerializer, \
|
|
PricingSerializer, GeneralGuildsSerializer
|
|
from panel.poultry.serializers import (
|
|
PoultrySerializer,
|
|
PoultryTenantSerializer, PoultryForAllUserSerializer
|
|
)
|
|
from panel.KillHouse.serializers import (
|
|
KillHouseOperatorSerializer,
|
|
VetSerializer, KillHouseSerializer, KillHouseVetSerializer, KillHouseDriverSerializer,
|
|
KillHouseOperatorForAllUserSerializer, VetForAllUserSerializer, KillHouseDriverForAllUserSerializer,
|
|
KillHouseVetForAllUserSerializer, KillHouseForAllUserSerializer
|
|
)
|
|
from rest_framework.permissions import (
|
|
AllowAny,
|
|
IsAuthenticated,
|
|
DjangoModelPermissions
|
|
)
|
|
from rest_framework.authentication import TokenAuthentication
|
|
from rest_framework.decorators import permission_classes, api_view
|
|
from django_filters.rest_framework import DjangoFilterBackend
|
|
from rest_framework.decorators import authentication_classes
|
|
from rest_framework.authentication import get_authorization_header
|
|
from django.core.cache.backends.base import DEFAULT_TIMEOUT
|
|
from authentication.models import CityUnit, ExternalTransaction
|
|
from django.contrib.auth.hashers import make_password
|
|
from django.contrib.auth.views import LoginView
|
|
from panel.helper import (
|
|
create_except_profile,
|
|
update_except_profile,
|
|
remove_null_fields, operator_update_except_profile
|
|
)
|
|
from authentication.models import (
|
|
UserProfile,
|
|
Address,
|
|
BankCard,
|
|
SystemUserProfile,
|
|
SystemAddress,
|
|
City,
|
|
Province
|
|
)
|
|
from panel.models import (
|
|
Poultry,
|
|
ProvinceOperator,
|
|
CityOperator,
|
|
KillHouseOperator,
|
|
Vet,
|
|
KillHouseDriver,
|
|
KillHouseADDCAR,
|
|
PoultryTenant,
|
|
KillHouse,
|
|
|
|
)
|
|
from rest_framework.response import Response
|
|
from django.contrib.auth.models import User, Group
|
|
from django.core.cache import cache
|
|
from django.conf import settings
|
|
from rest_framework import status
|
|
from oauth2_provider.models import AccessToken
|
|
from .helper.image_services import (
|
|
upload_image,
|
|
upload_listed_image
|
|
)
|
|
from django.http.response import JsonResponse, HttpResponseRedirect
|
|
import requests
|
|
import json
|
|
import random
|
|
import uuid
|
|
from django.contrib.auth.views import LoginView
|
|
from django.contrib.auth.hashers import make_password
|
|
import cryptocode
|
|
import string
|
|
import random
|
|
import os
|
|
from django_filters.rest_framework import DjangoFilterBackend
|
|
from django.http import QueryDict
|
|
import xlsxwriter
|
|
from io import StringIO, BytesIO
|
|
|
|
# آدرس پایه برای ارسال در خواست ثبت نام به سیستم پایه شرکت آرتا
|
|
from .serializers import SystemAddressSerializer, CityUnitSerializer, CitySerializer, ProvinceSerializer
|
|
|
|
ARTA_URL_REGISTER = "https://userbackend.rasadyar.com/api/register/"
|
|
# آدرس پایه برای ارسال در خواست ورود به سیستم پایه شرکت آرتا
|
|
ARTA_URL_LOGIN = "https://userbackend.rasadyar.com/api/login/"
|
|
# آدرس پایه برای سیستم ورود و ثبت نام بر اساس توکن
|
|
ARTA_URL_CHANGE_MOBILE_NUMBER = "https://userbackend.rasadyar.com/change_mobile_number/"
|
|
CACHE_TTL = getattr(settings, "CACHE_TTL", DEFAULT_TIMEOUT)
|
|
# آدرس پایه برای ذخیره تصویر کاربر در استوریج آروان
|
|
ARVAN_User_Image_URL = 'https://profileimagedefault.s3.ir-thr-at1.arvanstorage.ir/'
|
|
# ARVAN_User_Image_URL = 'http://user-image-gallery.s3.ir-thr-at1.arvanstorage.ir/'
|
|
|
|
ARTA_URL_SEND_OTP = "https://userbackend.rasadyar.com/api/send_otp/"
|
|
ARTA_URL_CHECK_OTP = "https://userbackend.rasadyar.com/api/check_otp/"
|
|
ARTA_URL_CHANGE_PASSWORD = "https://userbackend.rasadyar.com/api/change_password/"
|
|
|
|
|
|
class CustomPagination(PageNumberPagination):
|
|
page_size = 10
|
|
|
|
|
|
class ExternalTransactionViewSet(viewsets.ModelViewSet):
|
|
queryset = ExternalTransaction.objects.all()
|
|
serializer_class = ExternalTransactionSerializer
|
|
permission_classes = [TokenHasReadWriteScope]
|
|
filter_backends = [DjangoFilterBackend]
|
|
pagination_class = CustomPagination
|
|
filterset_class = ExternalTransactionFilterSet
|
|
filterset_fields = [
|
|
'saleReferenceId',
|
|
'refId',
|
|
'orderId',
|
|
'cardHolderPan',
|
|
|
|
]
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
user = SystemUserProfile.objects.get(user=request.user)
|
|
date1 = datetime.datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
|
date2 = datetime.datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
|
transactions_list = []
|
|
if request.GET['role'] == 'KillHouse':
|
|
|
|
if request.GET['state'] == 'failed':
|
|
if 'type' in request.GET:
|
|
transactions = ExternalTransaction.objects.filter(
|
|
date__date__gte=date1,
|
|
date__date__lte=date2,
|
|
kill_house_user=user,
|
|
status='failed',
|
|
transaction_type='wallet',
|
|
|
|
trash=False).order_by('id')
|
|
else:
|
|
transactions = ExternalTransaction.objects.filter(
|
|
date__date__gte=date1,
|
|
date__date__lte=date2,
|
|
kill_house_user=user,
|
|
status='failed',
|
|
transaction_type='wage-gateway',
|
|
|
|
trash=False).order_by('id')
|
|
else:
|
|
if 'type' in request.GET:
|
|
transactions = ExternalTransaction.objects.filter(
|
|
date__date__gte=date1,
|
|
date__date__lte=date2,
|
|
kill_house_user=user,
|
|
status='completed',
|
|
transaction_type='wallet',
|
|
trash=False).order_by('id')
|
|
else:
|
|
|
|
transactions = ExternalTransaction.objects.filter(
|
|
date__date__gte=date1,
|
|
date__date__lte=date2,
|
|
kill_house_user=user,
|
|
status='completed',
|
|
transaction_type='wage-gateway',
|
|
trash=False).order_by('id')
|
|
else:
|
|
|
|
if request.GET['state'] == 'failed':
|
|
if 'type' in request.GET:
|
|
transactions = ExternalTransaction.objects.filter(
|
|
date__date__gte=date1,
|
|
date__date__lte=date2,
|
|
status='failed',
|
|
transaction_type='wallet',
|
|
trash=False).order_by('id')
|
|
else:
|
|
transactions = ExternalTransaction.objects.filter(
|
|
date__date__gte=date1,
|
|
date__date__lte=date2,
|
|
status='failed',
|
|
transaction_type='wage-gateway',
|
|
trash=False).order_by('id')
|
|
else:
|
|
if 'type' in request.GET:
|
|
transactions = ExternalTransaction.objects.filter(
|
|
date__date__gte=date1,
|
|
date__date__lte=date2,
|
|
status='completed',
|
|
transaction_type='wallet',
|
|
trash=False).order_by('id')
|
|
else:
|
|
|
|
transactions = ExternalTransaction.objects.filter(
|
|
date__date__gte=date1,
|
|
date__date__lte=date2,
|
|
status='completed',
|
|
transaction_type='wage-gateway',
|
|
trash=False).order_by('id')
|
|
|
|
if 'search' in request.GET:
|
|
if request.GET['search'] == 'filter':
|
|
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
|
|
for item in self.filterset_fields:
|
|
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
|
if (self.filterset_class(
|
|
data=query,
|
|
queryset=transactions
|
|
)
|
|
).filter():
|
|
ps = self.filterset_class(data=query, queryset=transactions)
|
|
transactions_list = ps.filter()
|
|
transactions = [] if len(transactions_list) == 0 else transactions_list
|
|
|
|
page_size = request.query_params.get('page_size', None)
|
|
if page_size:
|
|
self.pagination_class.page_size = int(page_size)
|
|
|
|
page = self.paginate_queryset(transactions)
|
|
if page is not None:
|
|
serializer = ExternalTransactionSerializer(page, many=True)
|
|
return self.get_paginated_response(serializer.data)
|
|
|
|
serializer = ExternalTransactionSerializer(transactions, many=True)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
|
|
|
|
# ویوست مربوط به استان
|
|
class ProvinceViewSet(viewsets.ModelViewSet):
|
|
queryset = Province.objects.all()
|
|
serializer_class = ProvinceSerializer
|
|
permission_classes = [TokenHasReadWriteScope]
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
# refresh(request.user.id)
|
|
user = SystemUserProfile.objects.get(user=request.user)
|
|
province = Province.objects.filter(key=user.province.key)
|
|
serializer = CitySerializer(province, many=True)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
|
|
|
|
# ویوست مربوط به شهرستان
|
|
class CityViewSet(viewsets.ModelViewSet):
|
|
queryset = City.objects.all()
|
|
serializer_class = CitySerializer
|
|
permission_classes = [TokenHasReadWriteScope]
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
refresh(request.user.id)
|
|
city = City.objects.filter(
|
|
province=Province.objects.get(key=request.GET['province_key'])
|
|
# province=Province.objects.get(key='1e364f53-f873-4af9-9e93-7e4816e889ae')
|
|
)
|
|
serializer = CitySerializer(city, many=True)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
|
|
|
|
class CityForProducctPricingViewSet(viewsets.ModelViewSet):
|
|
queryset = City.objects.all()
|
|
serializer_class = CityForProductPricingSerializer
|
|
permission_classes = [TokenHasReadWriteScope]
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
user = SystemUserProfile.objects.get(user=request.user)
|
|
city = City.objects.filter(trash=False, province=user.province).order_by('id')
|
|
serializer = self.serializer_class(city, many=True)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
|
|
def update(self, request, pk=None, *args, **kwargs):
|
|
city = City.objects.get(trash=False, key=request.data['city_key'])
|
|
request.data.pop('city_key')
|
|
serializer = self.serializer_class(city)
|
|
serializer.update(instance=city, validated_data=request.data)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
|
|
|
|
class CityWithOutProvinceKeyViewSet(viewsets.ModelViewSet):
|
|
queryset = City.objects.all()
|
|
serializer_class = CitySerializer
|
|
permission_classes = [TokenHasReadWriteScope]
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
# refresh(request.user.id)
|
|
user = SystemUserProfile.objects.get(user=request.user)
|
|
city = City.objects.filter(
|
|
province=Province.objects.get(key=user.province.key)
|
|
)
|
|
serializer = CitySerializer(city, many=True)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
|
|
|
|
class CitysViewSet(viewsets.ModelViewSet):
|
|
queryset = City.objects.all()
|
|
serializer_class = CitySerializer
|
|
permission_classes = [TokenHasReadWriteScope]
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
# refresh(request.user.id)
|
|
user = SystemUserProfile.objects.get(user=request.user)
|
|
city = City.objects.filter(
|
|
province=Province.objects.get(key=user.province.key)
|
|
).exclude(name='فاقد شهرستان')
|
|
serializer = CitySerializer(city, many=True)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
|
|
|
|
# ویوست مربوط به زیربخش شهرستان
|
|
class CityUnitViewSet(viewsets.ModelViewSet):
|
|
queryset = CityUnit.objects.all()
|
|
serializer_class = CityUnitSerializer
|
|
permission_classes = [TokenHasReadWriteScope]
|
|
|
|
|
|
# ویوست مربوط به آدرس
|
|
class SystemAddressViewSet(viewsets.ModelViewSet):
|
|
queryset = SystemAddress.objects.all()
|
|
serializer_class = SystemAddressSerializer
|
|
permission_classes = [TokenHasReadWriteScope]
|
|
|
|
|
|
# ویوست مربوط به جستجو اطلاعات کاربر یا کاربران
|
|
class UserProfileSearchViewSet(viewsets.ModelViewSet):
|
|
queryset = UserProfile.objects.all()
|
|
serializer_class = UserProfileSerializer
|
|
permission_classes = [TokenHasReadWriteScope]
|
|
filter_backends = [DjangoFilterBackend]
|
|
filterset_class = UserProfileFilterSet
|
|
filterset_fields = [
|
|
'fullname',
|
|
'mobile',
|
|
'first_name',
|
|
'last_name',
|
|
'breeding_unique_id',
|
|
'address__city',
|
|
'address__province',
|
|
'role__name',
|
|
]
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
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():
|
|
ps = self.filterset_class(data=query, queryset=self.queryset)
|
|
filtered_user = ps.filter()
|
|
serializer = self.serializer_class(filtered_user, many=True)
|
|
return Response(serializer.data)
|
|
return Response({"msg": "Enter 'Type' In Get Parameters"}, status=status.HTTP_403_FORBIDDEN)
|
|
else:
|
|
queryset = self.queryset.all()
|
|
serializer = UserProfileSerializer(queryset, many=True)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
|
|
|
|
# ویوست مربوط به پروفایل کاربری که شامل ساخت و ویرایش و حذف
|
|
class UserProfileViewSet(viewsets.ModelViewSet):
|
|
queryset = UserProfile.objects.all()
|
|
serializer_class = UserProfileSerializer
|
|
permission_classes = [TokenHasReadWriteScope]
|
|
|
|
# تابع مربوط به ثبت پروفایل کاربر
|
|
def create(self, request, *args, **kwargs):
|
|
role = Group.objects.get(name__exact=request.data['role'])
|
|
request.data.pop('role')
|
|
city = request.data['city']
|
|
province = request.data['province']
|
|
address = request.data['address']
|
|
try:
|
|
image = request.data['image']
|
|
request.data.pop('image')
|
|
except:
|
|
image = ""
|
|
|
|
request.data.pop('city')
|
|
request.data.pop('province')
|
|
request.data.pop('address')
|
|
mobile = request.data['mobile']
|
|
if UserProfile.objects.filter(mobile=mobile):
|
|
return Response('user already exist')
|
|
index = UserProfile.objects.all().last().base_order
|
|
serializer = self.serializer_class(data=request.data)
|
|
if serializer.is_valid():
|
|
user_profile = serializer.create(validated_data=request.data)
|
|
user_profile.image = send_image_to_server(image)
|
|
password = str(random.randint(10000, 99000))
|
|
|
|
user = User(
|
|
first_name=user_profile.fullname,
|
|
username=user_profile.mobile,
|
|
password=cryptocode.encrypt(password, password)
|
|
)
|
|
user.save()
|
|
user_address = Address(
|
|
city=city,
|
|
province=province,
|
|
address=address,
|
|
)
|
|
user_address.save()
|
|
user_profile.user = user
|
|
user_profile.role = role
|
|
user_profile.address = user_address
|
|
user_profile.base_order = index + 1
|
|
user_profile.fullname = user_profile.first_name + " " + user_profile.last_name
|
|
user_profile.save()
|
|
send_password(user_profile.mobile, password)
|
|
|
|
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
|
return Response(serializer.errors)
|
|
|
|
# تابع مربوط به نمایش اطلاعات پروفایل کاربر
|
|
def list(self, request, *args, **kwargs):
|
|
if 'type' in request.GET:
|
|
if request.GET['type'] == 'operator':
|
|
queryset = self.queryset.filter(role__name__exact="Poultry")
|
|
serializer = UserProfileSerializer(queryset, many=True)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
if request.GET['type'] == 'user':
|
|
queryset = UserProfile.objects.all().filter(user__exact=request.user)
|
|
serializer = UserProfileSerializer(queryset, many=True)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
return Response({'Msg': 'Enter type parameter in url'})
|
|
|
|
# تابع مربوط به ویرایش اطلاعات پروفایل کاربر
|
|
def update(self, request, pk=None, *args, **kwargs):
|
|
try:
|
|
if request.data['image'] == "":
|
|
user_image = None
|
|
|
|
else:
|
|
user_image = request.data['image']
|
|
request.data.pop('image')
|
|
|
|
except:
|
|
user_image = None
|
|
|
|
try:
|
|
role = request.data['role']
|
|
request.data.pop('role')
|
|
|
|
except:
|
|
role = None
|
|
|
|
try:
|
|
city = request.data['city']
|
|
request.data.pop('city')
|
|
|
|
except:
|
|
city = None
|
|
|
|
try:
|
|
province = request.data['province']
|
|
request.data.pop('province')
|
|
|
|
except:
|
|
province = None
|
|
|
|
try:
|
|
address = request.data['address']
|
|
request.data.pop('address')
|
|
|
|
except:
|
|
address = None
|
|
|
|
queryset = UserProfile.objects.get(key=request.data["key"])
|
|
user_address = Address.objects.get(id=queryset.address.id)
|
|
request.data.pop('key')
|
|
if user_image:
|
|
queryset.image = send_image_to_server(user_image)
|
|
if role:
|
|
queryset.role = Group.objects.get(name__exact=role)
|
|
if city:
|
|
user_address.city = city
|
|
if province:
|
|
user_address.province = province
|
|
if address:
|
|
user_address.address = address
|
|
user_address.save()
|
|
queryset.save()
|
|
serializer = self.serializer_class(queryset)
|
|
serializer.update(instance=queryset, validated_data=request.data)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
|
|
# تابع مربوط به حذف اطلاعات پروفایل کاربر
|
|
def destroy(self, request, pk=None, *args, **kwargs):
|
|
user_profile = UserProfile.objects.get(key__exact=request.GET["key"])
|
|
user = User.objects.get(id=user_profile.user.id)
|
|
address = Address.objects.get(id=user_profile.address.id)
|
|
user_profile.delete()
|
|
user.delete()
|
|
address.delete()
|
|
return Response('user deleted', status=status.HTTP_200_OK)
|
|
|
|
|
|
class ForceDiagramViewSet(viewsets.ModelViewSet):
|
|
queryset = SystemUserProfile.objects.all()
|
|
serializer_class = SystemUserProfileSerializer
|
|
permission_classes = [TokenHasReadWriteScope]
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
refresh(request.user.id)
|
|
user = SystemUserProfile.objects.get(user=request.user)
|
|
|
|
if 'role' in request.GET:
|
|
role = request.GET['role'].split(',')
|
|
new_persons = []
|
|
|
|
persons = SystemUserProfile.objects.filter(role__name__in=role, province=user.province).order_by('id')
|
|
if persons.count() > 0:
|
|
for person in persons:
|
|
if person in new_persons:
|
|
pass
|
|
else:
|
|
new_persons.append(person)
|
|
serializer = SystemUserProfileSerializer(new_persons, many=True)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
|
|
if 'all' in request.GET:
|
|
poultry = Poultry.objects.filter(user__province=user.province)
|
|
city_operator = CityOperator.objects.filter(user__province=user.province)
|
|
province_operator = ProvinceOperator.objects.filter(user__province=user.province,
|
|
user__role__name='ProvinceOperator')
|
|
financial_operator = Poultry.objects.filter(user__province=user.province,
|
|
user__role__name='ProvinceFinancial')
|
|
inspector_operator = InspectorOperator.objects.filter(user__province=user.province)
|
|
killhouse_operator = KillHouseOperator.objects.filter(user__province=user.province)
|
|
driver = KillHouseDriver.objects.filter(user__province=user.province)
|
|
vet = Vet.objects.filter(user__province=user.province)
|
|
killhouse_vet = KillHouseVet.objects.filter(vet__user__province=user.province)
|
|
diageram_dict = {
|
|
"poultry": poultry.count(),
|
|
"city_operator": city_operator.count(),
|
|
"province_operator": province_operator.count(),
|
|
"financial_operator": financial_operator.count(),
|
|
"inspector_operator": inspector_operator.count(),
|
|
"killhouse_operator": killhouse_operator.count(),
|
|
"driver": driver.count(),
|
|
"vet": vet.count(),
|
|
"killhouse_vet": killhouse_vet.count(),
|
|
}
|
|
|
|
return Response(diageram_dict, status=status.HTTP_200_OK)
|
|
elif 'Poultry' in request.GET:
|
|
poultry = Poultry.objects.filter(address__province=user.province)
|
|
serializer = PoultrySerializer(poultry, many=True)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
elif 'CityOperator' in request.GET:
|
|
cityoperator = CityOperator.objects.filter(address__province=user.province)
|
|
serializer = CityOperatorSerializer(cityoperator, many=True)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
elif 'ProvinceOperator' in request.GET:
|
|
operator = SystemUserProfile.objects.filter(role__name='ProvinceOperator',
|
|
province=user.province)
|
|
provinceoperator = ProvinceOperator.objects.filter(user=operator.last())
|
|
serializer = ProvinceOperatorSerializer(provinceoperator, many=True)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
|
|
elif 'ProvinceFinancial' in request.GET:
|
|
operator = SystemUserProfile.objects.filter(role__name='ProvinceFinancial',
|
|
province=user.province)
|
|
provincefinancial = ProvinceOperator.objects.filter(user=operator.last())
|
|
|
|
serializer = ProvinceOperatorSerializer(provincefinancial, many=True)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
elif 'ProvinceInspector' in request.GET:
|
|
provinceinspector = InspectorOperator.objects.filter(address__province=user.province)
|
|
serializer = InspectorOperatorSerializer(provinceinspector, many=True)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
elif 'KillHouse' in request.GET:
|
|
killhouse = KillHouse.objects.filter(system_address__province=user.province)
|
|
serializer = KillHouseSerializer(killhouse, many=True)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
elif 'KillHouseVet' in request.GET:
|
|
killhousevet = KillHouseVet.objects.filter(kill_house__system_address__province=user.province)
|
|
serializer = KillHouseVetSerializer(killhousevet, many=True)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
|
|
# elif 'VetFarm' in request.GET:
|
|
#
|
|
# vetfarm = SystemUserProfile.objects.filter(role__name='VetFarm',
|
|
# province=user.province)
|
|
# serializer = self.serializer_class(vetfarm, many=True)
|
|
# return Response(serializer.data, status=status.HTTP_200_OK)
|
|
elif 'Driver' in request.GET:
|
|
|
|
driver = KillHouseDriver.objects.filter(address_province=user.province)
|
|
serializer = KillHouseDriverSerializer(driver, many=True)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
|
|
|
|
class TotalSystemUserProfileStatisticsDashboardViewSet(viewsets.ModelViewSet):
|
|
queryset = SystemUserProfile.objects.all()
|
|
serializer_class = SystemUserProfileSerializer
|
|
permission_classes = [AllowAny]
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
users = SystemUserProfile.objects.filter().only('user_id')
|
|
guilds = Guilds.objects.filter(trash=False)
|
|
poultrys = Poultry.objects.filter(trash=False).only('user_id')
|
|
price = Pricing.objects.filter(trash=False).last()
|
|
|
|
if 'role' in request.GET:
|
|
if request.GET['role'] == 'CityOperator':
|
|
user = SystemUserProfile.objects.get(user=request.user)
|
|
city_operator = CityOperator.objects.get(trash=False, user=user)
|
|
poultries = poultrys.filter(city_operator=city_operator.unit_name)
|
|
elif request.GET['role'] in ['CityJahad', 'CityPoultry']:
|
|
user = SystemUserProfile.objects.get(user=request.user)
|
|
poultries = poultrys.filter(address__city=user.city)
|
|
else:
|
|
poultries = poultrys
|
|
else:
|
|
poultries = poultrys
|
|
return Response({
|
|
"users": users.count(),
|
|
"poultries": poultries.count(),
|
|
"guilds": guilds.count(),
|
|
})
|
|
|
|
|
|
class TotalPricingStatisticsDashboardViewSet(viewsets.ModelViewSet):
|
|
queryset = Pricing.objects.all()
|
|
serializer_class = PricingSerializer
|
|
permission_classes = [AllowAny]
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
price = Pricing.objects.filter(trash=False).last()
|
|
|
|
return Response(
|
|
{"last_price": price.live_chicken_price, "last_change": str(price.modify_date.date())}
|
|
)
|
|
|
|
|
|
class ShowSystemUserProfileViewSet(viewsets.ModelViewSet):
|
|
queryset = SystemUserProfile.objects.all()
|
|
serializer_class = SystemUserProfileSerializer
|
|
permission_classes = [TokenHasReadWriteScope]
|
|
|
|
# تابع مربوط به نمایش اطلاعات پروفایل کاربر
|
|
def list(self, request, *args, **kwargs):
|
|
refresh(request.user.id)
|
|
if 'role' in request.GET:
|
|
queryset = self.queryset.filter(role__name__exact=request.GET['role'])
|
|
if queryset.count() > 0:
|
|
serializer = UserProfileSerializer(queryset, many=True)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
else:
|
|
return Response([], status=status.HTTP_200_OK)
|
|
else:
|
|
users_info = []
|
|
for user in SystemUserProfile.objects.all().exclude(role__isnull=True):
|
|
city = user.city.name if user.city != None else None
|
|
province = user.province.name if user.province != None else None
|
|
for role in user.role.all():
|
|
if role.name == 'KillHouse':
|
|
oprator = KillHouseOperator.objects.get(user=user)
|
|
kill_house_wallet = oprator.wallet
|
|
creditor = 0
|
|
debtor = 0
|
|
penalty = 0
|
|
deposit = 0
|
|
for i in Itransaction.objects.filter(wallet=kill_house_wallet):
|
|
if i.transaction_type == 'creditor':
|
|
creditor += i.transfer_amount
|
|
elif i.transaction_type == 'debtor':
|
|
debtor += i.transfer_amount
|
|
elif i.transaction_type == 'penalty':
|
|
penalty += i.transfer_amount
|
|
elif i.transaction_type == 'deposit':
|
|
deposit += i.transfer_amount
|
|
|
|
internal_dict = {
|
|
"base_orde": user.base_order,
|
|
"fullname": user.fullname,
|
|
"id": user.id,
|
|
"role": role.name,
|
|
"mobile": user.mobile,
|
|
"national_id": user.national_id,
|
|
"wallet_key": oprator.wallet.key,
|
|
"inventory": oprator.wallet.inventory,
|
|
"city": city,
|
|
"province": province,
|
|
"creditor": creditor,
|
|
"debtor": debtor,
|
|
"penalty": penalty,
|
|
"deposit": deposit,
|
|
"depositable": (creditor + deposit) - (debtor + penalty)
|
|
|
|
}
|
|
users_info.append(internal_dict)
|
|
|
|
elif role.name == 'Poultry':
|
|
poultry_wallet = Poultry.objects.get(user=user).wallet
|
|
creditor = 0
|
|
debtor = 0
|
|
penalty = 0
|
|
deposit = 0
|
|
for i in Itransaction.objects.filter(wallet=poultry_wallet):
|
|
if i.transaction_type == 'creditor':
|
|
creditor += i.transfer_amount
|
|
elif i.transaction_type == 'debtor':
|
|
debtor += i.transfer_amount
|
|
elif i.transaction_type == 'penalty':
|
|
penalty += i.transfer_amount
|
|
elif i.transaction_type == 'deposit':
|
|
deposit += i.transfer_amount
|
|
internal_dict = {
|
|
"base_orde": user.base_order,
|
|
"fullname": user.fullname,
|
|
"id": user.id,
|
|
"role": role.name,
|
|
"mobile": user.mobile,
|
|
"wallet_key": poultry_wallet.key,
|
|
"national_id": user.national_id,
|
|
"province": province,
|
|
"city": city,
|
|
"creditor": creditor,
|
|
"debtor": debtor,
|
|
"penalty": penalty,
|
|
"deposit": deposit,
|
|
"depositable": (creditor + deposit) - (debtor + penalty)
|
|
|
|
}
|
|
users_info.append(internal_dict)
|
|
elif role.name == 'CityOperator':
|
|
|
|
city_wallet = CityOperator.objects.get(user=user).wallet
|
|
creditor = 0
|
|
debtor = 0
|
|
penalty = 0
|
|
deposit = 0
|
|
for i in Itransaction.objects.filter(wallet=city_wallet):
|
|
if i.transaction_type == 'creditor':
|
|
creditor += i.transfer_amount
|
|
elif i.transaction_type == 'debtor':
|
|
debtor += i.transfer_amount
|
|
elif i.transaction_type == 'penalty':
|
|
penalty += i.transfer_amount
|
|
elif i.transaction_type == 'deposit':
|
|
deposit += i.transfer_amount
|
|
internal_dict = {
|
|
"base_orde": user.base_order,
|
|
"fullname": user.fullname,
|
|
"id": user.id,
|
|
"role": role.name,
|
|
"mobile": user.mobile,
|
|
"wallet_key": city_wallet.key,
|
|
"national_id": user.national_id,
|
|
"province": province,
|
|
"city": city,
|
|
"creditor": creditor,
|
|
"debtor": debtor,
|
|
"penalty": penalty,
|
|
"depositable": (creditor + deposit) - (debtor + penalty)
|
|
}
|
|
users_info.append(internal_dict)
|
|
elif role.name == 'ProvinceOperator':
|
|
province_wallet = ProvinceOperator.objects.get(user=user).wallet
|
|
creditor = 0
|
|
debtor = 0
|
|
penalty = 0
|
|
deposit = 0
|
|
for i in Itransaction.objects.filter(wallet=province_wallet):
|
|
if i.transaction_type == 'creditor':
|
|
creditor += i.transfer_amount
|
|
elif i.transaction_type == 'debtor':
|
|
debtor += i.transfer_amount
|
|
elif i.transaction_type == 'penalty':
|
|
penalty += i.transfer_amount
|
|
elif i.transaction_type == 'deposit':
|
|
deposit += i.transfer_amount
|
|
|
|
internal_dict = {
|
|
"base_orde": user.base_order,
|
|
"fullname": user.fullname,
|
|
"id": user.id,
|
|
"role": role.name,
|
|
"mobile": user.mobile,
|
|
"wallet_key": province_wallet.key,
|
|
"national_id": user.national_id,
|
|
"province": province,
|
|
"city": city,
|
|
"creditor": creditor,
|
|
"debtor": debtor,
|
|
"penalty": penalty,
|
|
"deposit": deposit,
|
|
"depositable": (creditor + deposit) - (debtor + penalty)
|
|
|
|
}
|
|
users_info.append(internal_dict)
|
|
elif role.name == 'ProvinceInspector':
|
|
inspector_wallet = InspectorOperator.objects.get(user=user).wallet
|
|
creditor = 0
|
|
debtor = 0
|
|
penalty = 0
|
|
deposit = 0
|
|
for i in Itransaction.objects.filter(wallet=inspector_wallet):
|
|
if i.transaction_type == 'creditor':
|
|
creditor += i.transfer_amount
|
|
elif i.transaction_type == 'debtor':
|
|
debtor += i.transfer_amount
|
|
elif i.transaction_type == 'penalty':
|
|
penalty += i.transfer_amount
|
|
elif i.transaction_type == 'deposit':
|
|
deposit += i.transfer_amount
|
|
internal_dict = {
|
|
"base_orde": user.base_order,
|
|
"fullname": user.fullname,
|
|
"id": user.id,
|
|
"role": role.name,
|
|
"mobile": user.mobile,
|
|
"wallet_key": inspector_wallet.key,
|
|
"national_id": user.national_id,
|
|
"province": province,
|
|
"city": city,
|
|
"creditor": creditor,
|
|
"debtor": debtor,
|
|
"penalty": penalty,
|
|
"deposit": deposit,
|
|
"depositable": (creditor + deposit) - (debtor + penalty)
|
|
|
|
}
|
|
users_info.append(internal_dict)
|
|
elif role.name == 'ProvinceFinancial':
|
|
financial_wallet = ProvinceOperator.objects.get(user=user).wallet
|
|
creditor = 0
|
|
debtor = 0
|
|
penalty = 0
|
|
deposit = 0
|
|
for i in Itransaction.objects.filter(wallet=financial_wallet):
|
|
if i.transaction_type == 'creditor':
|
|
creditor += i.transfer_amount
|
|
elif i.transaction_type == 'debtor':
|
|
debtor += i.transfer_amount
|
|
elif i.transaction_type == 'penalty':
|
|
penalty += i.transfer_amount
|
|
elif i.transaction_type == 'deposit':
|
|
deposit += i.transfer_amount
|
|
internal_dict = {
|
|
"base_orde": user.base_order,
|
|
"fullname": user.fullname,
|
|
"id": user.id,
|
|
"role": role.name,
|
|
"mobile": user.mobile,
|
|
"wallet_key": financial_wallet.key,
|
|
"national_id": user.national_id,
|
|
"province": province,
|
|
"city": city,
|
|
"creditor": creditor,
|
|
"debtor": debtor,
|
|
"penalty": penalty,
|
|
"deposit": deposit,
|
|
"depositable": (creditor + deposit) - (debtor + penalty)
|
|
|
|
}
|
|
users_info.append(internal_dict)
|
|
elif role.name == 'Driver':
|
|
|
|
driver_wallet = KillHouseDriver.objects.get(user=user).wallet
|
|
creditor = 0
|
|
debtor = 0
|
|
penalty = 0
|
|
deposit = 0
|
|
for i in Itransaction.objects.filter(wallet=driver_wallet):
|
|
if i.transaction_type == 'creditor':
|
|
creditor += i.transfer_amount
|
|
elif i.transaction_type == 'debtor':
|
|
debtor += i.transfer_amount
|
|
elif i.transaction_type == 'penalty':
|
|
penalty += i.transfer_amount
|
|
elif i.transaction_type == 'deposit':
|
|
deposit += i.transfer_amount
|
|
internal_dict = {
|
|
"base_orde": user.base_order,
|
|
"fullname": user.fullname,
|
|
"id": user.id,
|
|
"role": role.name,
|
|
"mobile": user.mobile,
|
|
"wallet_key": driver_wallet.key,
|
|
"national_id": user.national_id,
|
|
"province": province,
|
|
"city": city,
|
|
"creditor": creditor,
|
|
"debtor": debtor,
|
|
"penalty": penalty,
|
|
"deposit": deposit,
|
|
"depositable": (creditor + deposit) - (debtor + penalty)
|
|
|
|
}
|
|
users_info.append(internal_dict)
|
|
elif role.name == 'KillHouseVet':
|
|
kill_house_vet_wallet = Vet.objects.get(user=user).wallet
|
|
creditor = 0
|
|
debtor = 0
|
|
penalty = 0
|
|
deposit = 0
|
|
for i in Itransaction.objects.filter(wallet=kill_house_vet_wallet):
|
|
if i.transaction_type == 'creditor':
|
|
creditor += i.transfer_amount
|
|
elif i.transaction_type == 'debtor':
|
|
debtor += i.transfer_amount
|
|
elif i.transaction_type == 'penalty':
|
|
penalty += i.transfer_amount
|
|
elif i.transaction_type == 'deposit':
|
|
deposit += i.transfer_amount
|
|
internal_dict = {
|
|
"base_orde": user.base_order,
|
|
"fullname": user.fullname,
|
|
"id": user.id,
|
|
"role": role.name,
|
|
"mobile": user.mobile,
|
|
"wallet_key": kill_house_vet_wallet.key,
|
|
"national_id": user.national_id,
|
|
"province": province,
|
|
"city": city,
|
|
"creditor": creditor,
|
|
"debtor": debtor,
|
|
"penalty": penalty,
|
|
"deposit": deposit,
|
|
"depositable": (creditor + deposit) - (debtor + penalty)
|
|
|
|
}
|
|
users_info.append(internal_dict)
|
|
return Response(users_info, status=status.HTTP_200_OK)
|
|
|
|
|
|
# class StandardResultsSetPagination(PageNumberPagination):
|
|
# page_size = 2
|
|
# page_size_query_param = 'page_size'
|
|
# max_page_size = 1000
|
|
|
|
|
|
object_classes_total = {
|
|
'Poultry': Poultry,
|
|
'CityOperator': CityOperator,
|
|
'ProvinceOperator': ProvinceOperator,
|
|
'KillHouse': KillHouse,
|
|
'ProvinceInspector': InspectorOperator,
|
|
'ProvinceFinancial': ProvinceOperator,
|
|
'Vet': Vet,
|
|
'Jahad': Jahad,
|
|
'CityJahad': CityJahad,
|
|
'Driver': KillHouseDriver,
|
|
'Admin': Admin,
|
|
'VetFarm': Vet,
|
|
'KillHouseVet': KillHouseVet,
|
|
'VetSupervisor': VetSupervisor,
|
|
'ProvincialGovernment': ProvincialGovernment,
|
|
}
|
|
serializer_object_classes_total = {
|
|
|
|
'Poultry': PoultryForAllUserSerializer,
|
|
'CityOperator': CityOperatorForAllUserSerializer,
|
|
'ProvinceOperator': ProvinceOperatorForAllUserSerializer,
|
|
'KillHouse': KillHouseForAllUserSerializer,
|
|
# 'KillHouse': KillHouseOperatorForAllUserSerializer,
|
|
'ProvinceInspector': InspectorOperatorForAllUserSerializer,
|
|
'ProvinceFinancial': ProvinceOperatorForAllUserSerializer,
|
|
'Vet': VetForAllUserSerializer,
|
|
'Jahad': JahadForAllUserSerializer,
|
|
'CityJahad': CityJahadForAllUserSerializer,
|
|
'Driver': KillHouseDriverForAllUserSerializer,
|
|
'Admin': AdminForAllUserSerializer,
|
|
'VetFarm': VetForAllUserSerializer,
|
|
'KillHouseVet': KillHouseVetForAllUserSerializer,
|
|
'VetSupervisor': VetSupervisorForAllUserSerializer,
|
|
'ProvincialGovernment': ProvincialGovernmentForAllUserSerializer,
|
|
}
|
|
|
|
|
|
def get_data_list(user):
|
|
data_list = []
|
|
for item in user.role.all():
|
|
object_class = object_classes_total.get(item.name)
|
|
serializer = serializer_object_classes_total.get(item.name)
|
|
if object_class and serializer:
|
|
if item.name == 'KillHouseVet':
|
|
query = object_class.objects.filter(vet__user=user)
|
|
elif item.name == 'KillHouse':
|
|
query = object_class.objects.filter(kill_house_operator__user=user)
|
|
else:
|
|
query = object_class.objects.filter(user=user)
|
|
if query.exists():
|
|
for queries in query:
|
|
data_list.append({
|
|
"role_name": item.name,
|
|
"details": serializer(queries).data
|
|
})
|
|
return data_list
|
|
|
|
|
|
class SystemUserProfileViewSet(viewsets.ModelViewSet):
|
|
queryset = SystemUserProfile.objects.all()
|
|
serializer_class = SystemUserProfileSerializer
|
|
permission_classes = [AllowAny]
|
|
pagination_class = CustomPagination
|
|
filter_backends = [DjangoFilterBackend]
|
|
filterset_class = ProfileFilterSet
|
|
filterset_fields = [
|
|
'base_order',
|
|
'mobile',
|
|
'fullname',
|
|
'first_name',
|
|
'last_name',
|
|
'city__name',
|
|
|
|
]
|
|
|
|
object_classes = {
|
|
'Poultry': Poultry,
|
|
'CityOperator': CityOperator,
|
|
'ProvinceOperator': ProvinceOperator,
|
|
'KillHouse': KillHouseOperator,
|
|
'ProvinceInspector': InspectorOperator,
|
|
'ProvinceFinancial': ProvinceOperator,
|
|
'Vet': Vet,
|
|
'Jahad': ProvinceOperator,
|
|
'Driver': KillHouseDriver,
|
|
'PoultryTenant': PoultryTenant,
|
|
'VetFarm': Vet,
|
|
'Guilds': Guilds,
|
|
'Steward': Guilds,
|
|
'KillHouseVet': KillHouseVet
|
|
}
|
|
serializer_object_classes = {
|
|
'Poultry': PoultrySerializer,
|
|
'CityOperator': CityOperatorSerializer,
|
|
'ProvinceOperator': ProvinceOperatorSerializer,
|
|
'Guilds': GeneralGuildsSerializer,
|
|
'Steward': GeneralGuildsSerializer,
|
|
'KillHouse': KillHouseOperatorSerializer,
|
|
'ProvinceInspector': InspectorOperatorSerializer,
|
|
'ProvinceFinancial': ProvinceOperatorSerializer,
|
|
'Vet': VetSerializer,
|
|
'Jahad': ProvinceOperatorSerializer,
|
|
'Driver': KillHouseDriverSerializer,
|
|
# 'PoultryTenant': PoultryTenant,
|
|
'VetFarm': VetSerializer,
|
|
'KillHouseVet': KillHouseVetSerializer
|
|
}
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
|
|
|
if 'self-profile' in request.GET:
|
|
userprofile = SystemUserProfile.objects.get(user=request.user)
|
|
serializer = self.serializer_class(userprofile)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
|
|
elif 'city_users' in request.GET:
|
|
out_list = [] # contains out put list
|
|
users = []
|
|
|
|
city_operator = CityOperator.objects.get(user=SystemUserProfile.objects.get(user=request.user))
|
|
city = city_operator.address.city
|
|
city_unit_list = []
|
|
city_units = CityUnit.objects.filter(city=city)
|
|
for city in city_units:
|
|
city_unit_list.append(city.name)
|
|
|
|
for u in SystemUserProfile.objects.filter(role__name='Poultry', city__name__in=city_unit_list):
|
|
users.append(u)
|
|
for user_without_role in SystemUserProfile.objects.filter(city__name__in=city_unit_list):
|
|
if len(user_without_role.role.all()) == 0:
|
|
users.append(user_without_role)
|
|
for user in users:
|
|
out_list.append({'profile': self.serializer_class(user).data})
|
|
return Response(out_list, status=status.HTTP_200_OK)
|
|
elif 'users_info' in request.GET:
|
|
# inspector = InspectorOperator.objects.get(user=SystemUserProfile.objects.get(user=request.user))
|
|
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
|
userprofile_list = []
|
|
province = user.province
|
|
out_put = [] # contains out put list
|
|
role = request.GET['roles'].split(',') if request.GET['roles'] != "" else None
|
|
if role != None:
|
|
userprofile = SystemUserProfile.objects.filter(role__name__in=role, province=province, trash=False)
|
|
else:
|
|
userprofile = SystemUserProfile.objects.filter(province=province, trash=False).exclude(
|
|
role__name='SuperAdmin') # contains userprofile object
|
|
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 (self.filterset_class(
|
|
data=query,
|
|
queryset=userprofile
|
|
)
|
|
).filter():
|
|
ps = self.filterset_class(data=query, queryset=userprofile)
|
|
userprofile_list = ps.filter()
|
|
userprofile = [] if len(userprofile_list) == 0 else userprofile_list
|
|
# 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=userprofile
|
|
# )
|
|
# ).filter():
|
|
# ps = self.filterset_class(data=query, queryset=userprofile)
|
|
# userprofile_list = ps.filter()
|
|
# userprofile = [] if len(userprofile_list) == 0 else userprofile_list
|
|
page_size = request.query_params.get('page_size', None)
|
|
if page_size:
|
|
self.pagination_class.page_size = int(page_size)
|
|
|
|
page = self.paginate_queryset(userprofile)
|
|
if page is not None:
|
|
serializer = self.serializer_class(page, many=True)
|
|
return self.get_paginated_response(serializer.data)
|
|
|
|
serializer = self.serializer_class(userprofile, many=True)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
# for user in userprofile:
|
|
# out_put.append({'profile': self.serializer_class(user).data})
|
|
# return Response(out_put, status=status.HTTP_200_OK)
|
|
|
|
elif 'users_base_info' in request.GET:
|
|
users = SystemUserProfile.objects.filter(province=user.province, trash=False)
|
|
serializer_base_info = SystemUserProfileBaseInfoSerializer(users, many=True)
|
|
return Response(serializer_base_info.data, status=status.HTTP_200_OK)
|
|
|
|
elif 'all_users' in request.GET:
|
|
user = self.queryset.get(key=request.GET['userprofile_key'])
|
|
data_list = get_data_list(user)
|
|
return Response(data_list, status=status.HTTP_200_OK)
|
|
# return super().list(request, *args, **kwargs)
|
|
|
|
# if 'page' in request.GET:
|
|
# end = int(request.GET['page']) * 3
|
|
# start = end - 3
|
|
|
|
def retrieve(self, request, *args, **kwargs):
|
|
refresh(request.user.id)
|
|
user = self.queryset.get(key=request.GET['userprofile_key']) # contains user profile object
|
|
|
|
data_list = [] # contains list of roles data
|
|
role_list = [] # contains list of roles names
|
|
|
|
# iterate in user roles
|
|
if user.role is not None:
|
|
for item in user.role.all():
|
|
if item.name == 'Admin':
|
|
continue
|
|
object_class = self.object_classes[item.name] # contains related class object to role
|
|
if item.name == 'KillHouseVet':
|
|
if object_class.objects.filter(vet__user=user).exists():
|
|
query = object_class.objects.filter(vet__user=user) # contains query objects
|
|
for queries in query:
|
|
serializer = self.serializer_object_classes[
|
|
item.name] # contains related serializer to role
|
|
data_list.append({item.name: serializer(queries).data})
|
|
role_list.append(item.name)
|
|
|
|
else:
|
|
if object_class.objects.filter(user=user).exists():
|
|
query = object_class.objects.filter(user=user) # contains query objects
|
|
for queries in query:
|
|
serializer = self.serializer_object_classes[
|
|
item.name] # contains related serializer to role
|
|
data_list.append({item.name: serializer(queries).data})
|
|
role_list.append(item.name)
|
|
|
|
serializer = self.serializer_class(user)
|
|
|
|
return Response({
|
|
'profile': serializer.data,
|
|
'roles_data': data_list,
|
|
'roles_list': role_list
|
|
},
|
|
status=status.HTTP_200_OK
|
|
)
|
|
|
|
# if user does not exists
|
|
else:
|
|
return Response(status=status.HTTP_409_CONFLICT)
|
|
|
|
def create(self, request, *args, **kwargs):
|
|
refresh(request.user.id)
|
|
if 'userprofile_key' in request.data.keys():
|
|
person = SystemUserProfile.objects.get(key=request.data['userprofile_key'])
|
|
else:
|
|
person = None
|
|
|
|
edit_type = request.data['type']
|
|
request.data.pop('type')
|
|
|
|
if edit_type == 'check_user':
|
|
# if user exists in system
|
|
if self.queryset.filter(
|
|
mobile=request.data['value']
|
|
).exists() or self.queryset.filter(
|
|
national_id=request.data['value']
|
|
).exists() or self.queryset.filter(
|
|
base_order=request.data['value']
|
|
).exists():
|
|
|
|
if self.queryset.filter(
|
|
mobile=request.data['value']
|
|
).exists():
|
|
# contains user object
|
|
user = self.queryset.get(
|
|
mobile=request.data['value'],
|
|
)
|
|
|
|
if self.queryset.filter(
|
|
national_id=request.data['value']
|
|
).exists():
|
|
# contains user object
|
|
user = self.queryset.get(
|
|
national_id=request.data['value'],
|
|
)
|
|
if self.queryset.filter(
|
|
base_order=request.data['value']
|
|
).exists():
|
|
# contains user object
|
|
user = self.queryset.get(
|
|
base_order=request.data['value'],
|
|
)
|
|
|
|
data_list = [] # contains list of roles data
|
|
role_list = [] # contains list of roles names
|
|
|
|
# iterate in user roles
|
|
if user.role is not None:
|
|
for item in user.role.all():
|
|
if item.name == 'Admin':
|
|
continue
|
|
object_class = self.object_classes[item.name] # contains related class object to role
|
|
if item.name == 'KillHouseVet':
|
|
if object_class.objects.filter(vet__user=user).exists():
|
|
query = object_class.objects.filter(vet__user=user) # contains query objects
|
|
for queries in query:
|
|
serializer = self.serializer_object_classes[
|
|
item.name] # contains related serializer to role
|
|
data_list.append({item.name: serializer(queries).data})
|
|
role_list.append(item.name)
|
|
else:
|
|
if object_class.objects.filter(user=user).exists():
|
|
query = object_class.objects.filter(user=user) # contains query objects
|
|
for queries in query:
|
|
serializer = self.serializer_object_classes[
|
|
item.name] # contains related serializer to role
|
|
data_list.append({item.name: serializer(queries).data})
|
|
role_list.append(item.name)
|
|
|
|
serializer = self.serializer_class(user)
|
|
|
|
return Response({
|
|
'profile': serializer.data,
|
|
'roles_data': data_list,
|
|
'roles_list': role_list
|
|
},
|
|
status=status.HTTP_200_OK
|
|
)
|
|
|
|
# if user does not exists
|
|
else:
|
|
url = 'https://userbackend.rasadyar.com/user_identity/'
|
|
# url = 'https://artasystemback.sstit.ir/user_identity/'
|
|
headers = {
|
|
"Authorization": str(request.headers['Authorization']),
|
|
"Content-Type": "application/json"
|
|
}
|
|
request.data['type'] = edit_type
|
|
|
|
req = requests.post(
|
|
url=url,
|
|
data=json.dumps(request.data),
|
|
headers=headers,
|
|
verify=False
|
|
)
|
|
if req.status_code == 200:
|
|
return Response(req.json(), status=status.HTTP_200_OK)
|
|
else:
|
|
return Response(status=status.HTTP_409_CONFLICT)
|
|
if edit_type == 'profile':
|
|
|
|
# create user object
|
|
if not User.objects.filter(username=request.data['mobile']).exists():
|
|
user = User(username=request.data['mobile'])
|
|
else:
|
|
return Response({"result": "کاربر قبلا ثیت شده است !"}, status=status.HTTP_403_FORBIDDEN)
|
|
|
|
# register user to base system
|
|
data = {
|
|
"username": request.data['mobile'],
|
|
"password": request.data['password'],
|
|
"first_name": request.data['first_name'],
|
|
"last_name": request.data['last_name'],
|
|
"national_code": request.data['national_code'],
|
|
"api_key": PROJECT_API_KEY,
|
|
}
|
|
req = requests.post(
|
|
url=ARTA_URL_REGISTER,
|
|
data=data,
|
|
verify=False
|
|
)
|
|
if req.status_code == 200:
|
|
# set password for user by admin
|
|
if request.data['password'] != "":
|
|
password = request.data['password']
|
|
user.password = cryptocode.encrypt(password, password)
|
|
user.save()
|
|
|
|
# get city object
|
|
city = City.objects.get(
|
|
key=request.data['city']
|
|
)
|
|
request.data.pop('city')
|
|
|
|
# get province object
|
|
province = Province.objects.get(
|
|
key=request.data['province']
|
|
)
|
|
request.data.pop('province')
|
|
|
|
# upload user image
|
|
req = upload_image(req=request, field='image')
|
|
|
|
# send request data to serializer
|
|
serializer = self.serializer_class(data=req.data)
|
|
base_order = SystemUserProfile.objects.all()
|
|
if base_order.count():
|
|
base_order = base_order.last().base_order + 1
|
|
else:
|
|
base_order = 1000
|
|
if serializer.is_valid():
|
|
userprofile_object = serializer.create(validated_data=req.data)
|
|
userprofile_object.city = city
|
|
userprofile_object.province = province
|
|
userprofile_object.user = user
|
|
userprofile_object.password = password
|
|
userprofile_object.base_order = base_order
|
|
userprofile_object.save()
|
|
serializer = self.serializer_class(userprofile_object)
|
|
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
|
else:
|
|
return Response({"result": "کاربر قبلا ثیت شده است !"}, status=status.HTTP_400_BAD_REQUEST)
|
|
if edit_type == "Poultry":
|
|
# poultry owner object
|
|
user = self.queryset.get(key=request.data['owner_key'])
|
|
|
|
for poultry_items in request.data['poultry_list']:
|
|
# if poultry exists show response
|
|
if Poultry.objects.filter(breeding_unique_id=poultry_items['breeding_unique_id']).exists():
|
|
return Response({"result": "مرغداری قبلا ثبت شده است !"}, status=status.HTTP_403_FORBIDDEN)
|
|
|
|
if poultry_items['address'] != "" or poultry_items['address'] is not None:
|
|
# Create Address Object
|
|
city = City.objects.get(key=poultry_items['address']['city_key']) # contain city object
|
|
poultry_items['address'].pop('city_key')
|
|
|
|
# contains province object
|
|
province = Province.objects.get(key=poultry_items['address']['province_key'])
|
|
poultry_items['address'].pop('province_key')
|
|
|
|
# object created
|
|
address = SystemAddress.objects.create(**poultry_items['address'])
|
|
address.city = city
|
|
address.province = province
|
|
address.save()
|
|
poultry_items.pop('address') # remove address key from data
|
|
else:
|
|
address = None
|
|
|
|
if poultry_items['user_bank_info'] != "" or poultry_items['user_bank_info'] is not None:
|
|
# Create Bank Card Object
|
|
bank_info = BankCard.objects.create(**poultry_items['user_bank_info'])
|
|
poultry_items.pop('user_bank_info')
|
|
else:
|
|
bank_info = None
|
|
|
|
wallet = Wallet()
|
|
wallet.save()
|
|
|
|
# tenant user key
|
|
if 'tenant_key' in poultry_items.keys():
|
|
tenant_key = poultry_items['tenant_key']
|
|
poultry_items.pop('tenant_key')
|
|
else:
|
|
tenant_key = ""
|
|
|
|
# send data to serializer to create poultry
|
|
serializer = PoultrySerializer(data=poultry_items)
|
|
if serializer.is_valid():
|
|
poultry_object = serializer.create(validated_data=poultry_items)
|
|
poultry_object.user = user
|
|
poultry_object.incubation_date = datetime.datetime.now()
|
|
poultry_object.address = address
|
|
poultry_object.user_bank_info = bank_info
|
|
poultry_object.wallet = wallet
|
|
poultry_object.save()
|
|
create_province_allow_poultry_choose_kill_house = ProvinceAllowPoultryChooseKillHouse(
|
|
poultry=poultry_object)
|
|
create_province_allow_poultry_choose_kill_house.save()
|
|
owner_poultry = Poultry.objects.get(key=poultry_object.key) # contains poultry owner object
|
|
else:
|
|
return Response({"result": "وارد کردن تمامی مقادیر الزامیست! "}, status=status.HTTP_403_FORBIDDEN)
|
|
|
|
if tenant_key != "":
|
|
# get tenant user object
|
|
tenant_user = self.queryset.get(key=tenant_key)
|
|
|
|
owner_poultry.has_tenant = True
|
|
owner_poultry.save()
|
|
|
|
# Copy Poultry Object and Create New One
|
|
poultry_object.pk = None
|
|
poultry_object.key = uuid.uuid4()
|
|
poultry_object.user = tenant_user
|
|
poultry_object.save() # save copied object
|
|
poultry_object.owner = owner_poultry
|
|
poultry_object.wallet = wallet
|
|
poultry_object.save()
|
|
|
|
user.role.add(Group.objects.get(name='Poultry'))
|
|
return Response(status=status.HTTP_201_CREATED)
|
|
if edit_type == "CityOperator":
|
|
# if person != None:
|
|
# city_unit = CityUnit.objects.get(name=person.city.name)
|
|
# if CityOperator.objects.filter(address__city__name=city_unit.city.name).exists():
|
|
# return Response({"msg": "exist"}, status=status.HTTP_406_NOT_ACCEPTABLE)
|
|
|
|
serializer = create_except_profile(
|
|
request=request,
|
|
queryset=CityOperator,
|
|
serializer=CityOperatorSerializer,
|
|
role=edit_type
|
|
)
|
|
return Response(serializer[0], status=serializer[1])
|
|
if edit_type == "ProvinceOperator":
|
|
if person != None:
|
|
province_operator = SystemUserProfile.objects.filter(role__name='ProvinceOperator',
|
|
province=person.province)
|
|
if province_operator.count() > 0:
|
|
if ProvinceOperator.objects.filter(user=province_operator.last()).exists():
|
|
return Response({"msg": "exist"}, status=status.HTTP_406_NOT_ACCEPTABLE)
|
|
if SystemUserProfile.objects.filter(role__name='ProvinceFinancial', province=person.province,
|
|
key=person.key).exists():
|
|
group = Group.objects.get(name=edit_type)
|
|
person.role.add(group)
|
|
return Response(status=status.HTTP_201_CREATED)
|
|
else:
|
|
|
|
serializer = create_except_profile(
|
|
request=request,
|
|
queryset=ProvinceOperator,
|
|
serializer=ProvinceOperatorSerializer,
|
|
role=edit_type
|
|
)
|
|
return Response(serializer[0], status=serializer[1])
|
|
if edit_type == "ProvinceFinancial":
|
|
if person != None:
|
|
province_operator = SystemUserProfile.objects.filter(role__name='ProvinceFinancial',
|
|
province=person.province)
|
|
if province_operator.count() > 0:
|
|
if ProvinceOperator.objects.filter(user=province_operator.last()).exists():
|
|
return Response({"msg": "exist"}, status=status.HTTP_406_NOT_ACCEPTABLE)
|
|
if SystemUserProfile.objects.filter(role__name='ProvinceOperator', province=person.province,
|
|
key=person.key).exists():
|
|
group = Group.objects.get(name=edit_type)
|
|
person.role.add(group)
|
|
return Response(status=status.HTTP_201_CREATED)
|
|
|
|
else:
|
|
serializer = create_except_profile(
|
|
request=request,
|
|
queryset=ProvinceOperator,
|
|
serializer=ProvinceOperatorSerializer,
|
|
role=edit_type
|
|
)
|
|
return Response(serializer[0], status=serializer[1])
|
|
if edit_type == "KillHouse":
|
|
|
|
# contains kill house data
|
|
kill_house_data = request.data['killhouse_data']
|
|
request.data.pop('killhouse_data')
|
|
if 'address' in request.data.keys():
|
|
if request.data['address'] == "":
|
|
request.data.pop('address')
|
|
if 'postal_code' in request.data.keys():
|
|
if request.data['postal_code'] == "":
|
|
request.data.pop('postal_code')
|
|
|
|
serializer = create_except_profile(
|
|
request=request,
|
|
queryset=KillHouseOperator,
|
|
serializer=KillHouseOperatorSerializer,
|
|
role=edit_type
|
|
)
|
|
|
|
for items in kill_house_data:
|
|
if items['address'] != "" or items['address'] is not None:
|
|
# Create Address Object
|
|
city = City.objects.get(key=items['address']['city_key']) # contain city object
|
|
items['address'].pop('city_key')
|
|
|
|
# contains province object
|
|
province = Province.objects.get(key=items['address']['province_key'])
|
|
items['address'].pop('province_key')
|
|
if items['address']['postal_code'] == "":
|
|
items['address'].pop('postal_code')
|
|
|
|
# object created
|
|
address = SystemAddress.objects.create(**items['address'])
|
|
address.city = city
|
|
address.province = province
|
|
address.save()
|
|
items.pop('address') # remove address key from data
|
|
else:
|
|
address = None
|
|
if 'user_bank_info' in items.keys():
|
|
items.pop('user_bank_info')
|
|
|
|
# send data to serializer to create poultry
|
|
if 'capacity' in items.keys():
|
|
if items['capacity'] == "":
|
|
items.pop('capacity')
|
|
if 'name' in items.keys():
|
|
if items['name'] == "":
|
|
items.pop('name')
|
|
if 'phone' in items.keys():
|
|
if items['phone'] == "":
|
|
items.pop('phone')
|
|
|
|
kill_house_serializer = KillHouseSerializer(data=items)
|
|
if kill_house_serializer.is_valid():
|
|
kill_house_object = kill_house_serializer.create(validated_data=items)
|
|
kill_house_object.system_address = address
|
|
kill_house_object.kill_house_operator = serializer[2]
|
|
kill_house_object.save()
|
|
create_choose_steward_guilds = ProvinceAllowKillHouseChooseStewardGuilds(
|
|
kill_house=kill_house_object)
|
|
create_choose_steward_guilds.save()
|
|
percentage = KillHousePercentage(kill_house=kill_house_object)
|
|
percentage.save()
|
|
province_allow_kill_house_choose_steward_guilds = ProvinceAllowKillHouseChooseStewardGuilds(
|
|
kill_house=kill_house_object)
|
|
province_allow_kill_house_choose_steward_guilds.save()
|
|
province_allow_direct_buying = ProvinceAllowKillHouseDirectBuying(kill_house=kill_house_object)
|
|
province_allow_direct_buying.save()
|
|
|
|
return Response(status=status.HTTP_201_CREATED)
|
|
if edit_type == "KillHouseVet":
|
|
# get kill house object
|
|
kill_house_object = KillHouse.objects.get(key=request.data['kill_house_key'])
|
|
request.data.pop('kill_house_key')
|
|
if 'address' in request.data.keys():
|
|
if request.data['address'] == "":
|
|
request.data.pop('address')
|
|
if 'postal_code' in request.data.keys():
|
|
if request.data['postal_code'] == "":
|
|
request.data.pop('postal_code')
|
|
# Create Kill House Vet Object
|
|
|
|
kill_house_vet = KillHouseVet()
|
|
vet = Vet.objects.filter(user=person)
|
|
if vet.count() > 0:
|
|
vet = vet.last()
|
|
kill_house_vet.vet = vet
|
|
|
|
|
|
else:
|
|
serializer = create_except_profile(
|
|
request=request,
|
|
queryset=Vet,
|
|
serializer=VetSerializer,
|
|
role=edit_type
|
|
)
|
|
kill_house_vet.vet = serializer[2]
|
|
|
|
kill_house_vet.kill_house = kill_house_object
|
|
kill_house_vet.save()
|
|
|
|
# send object to serializer
|
|
serializer = KillHouseVetSerializer(kill_house_vet)
|
|
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
|
if edit_type == "Driver":
|
|
# get user profile object
|
|
userprofile = self.queryset.get(key=request.data['userprofile_key'])
|
|
request.data.pop('userprofile_key')
|
|
|
|
# Create driver Bank Account Information
|
|
bank_info_object = BankCard.objects.create(**request.data['user_bank_info'])
|
|
request.data.pop('user_bank_info')
|
|
|
|
# send data to serializer for create object
|
|
serializer = KillHouseDriverSerializer(data=request.data)
|
|
if serializer.is_valid():
|
|
driver_object = serializer.create(validated_data=request.data)
|
|
driver_wallet = Wallet()
|
|
driver_wallet.save()
|
|
driver_object.user = userprofile
|
|
driver_object.user_bank_info = bank_info_object
|
|
driver_object.wallet = driver_wallet
|
|
driver_object.save()
|
|
userprofile.role.add(
|
|
Group.objects.get(name='Driver')
|
|
)
|
|
serializer = KillHouseDriverSerializer(driver_object)
|
|
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
|
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
|
if edit_type == "VetFarm":
|
|
if Vet.objects.filter(user=person).exists():
|
|
group = Group.objects.get(name=edit_type)
|
|
person.role.add(group)
|
|
return Response(status=status.HTTP_201_CREATED)
|
|
else:
|
|
serializer = create_except_profile(
|
|
request=request,
|
|
queryset=Vet,
|
|
serializer=VetSerializer,
|
|
role=edit_type
|
|
)
|
|
return Response(serializer[0], status=serializer[1])
|
|
if edit_type == "ProvinceInspector":
|
|
if person != None:
|
|
province_operator = SystemUserProfile.objects.filter(role__name='ProvinceInspector',
|
|
province=person.province)
|
|
if province_operator.count() > 0:
|
|
if InspectorOperator.objects.filter(user=province_operator.last()).exists():
|
|
return Response({"msg": "exist"}, status=status.HTTP_406_NOT_ACCEPTABLE)
|
|
serializer = create_except_profile(
|
|
request=request,
|
|
queryset=InspectorOperator,
|
|
serializer=InspectorOperatorSerializer,
|
|
role=edit_type
|
|
)
|
|
return Response(serializer[0], status=serializer[1])
|
|
|
|
return Response({"msg": "error"}, status=status.HTTP_403_FORBIDDEN)
|
|
|
|
def update(self, request, pk=None, *args, **kwargs):
|
|
# refresh(request.user.id)
|
|
if 'second_mobile_number' in request.data.keys():
|
|
user_profile = SystemUserProfile.objects.get(key=request.data['userprofile_key'])
|
|
first_mobile_number = user_profile.mobile
|
|
second_mobile_number = request.data['second_mobile_number']
|
|
request.data.pop('second_mobile_number')
|
|
data = {
|
|
"first_mobile_number": first_mobile_number,
|
|
"second_mobile_number": second_mobile_number,
|
|
}
|
|
req = requests.post(
|
|
url=ARTA_URL_CHANGE_MOBILE_NUMBER,
|
|
data=data,
|
|
verify=False
|
|
)
|
|
# return Response(req.status_code)
|
|
if req.status_code == 200:
|
|
second_mobile_number = second_mobile_number
|
|
# request.data.pop('userprofile_key')
|
|
user = User.objects.get(id=user_profile.user.id)
|
|
user.username = second_mobile_number
|
|
user.save()
|
|
user_profile.mobile = second_mobile_number
|
|
user_profile.save()
|
|
# return Response({"result": "شماره تماس با موفقیت ویرایش شد."}, status=status.HTTP_200_OK)
|
|
# else:
|
|
# return Response({"result": "مشکلی پیش آمده است !"}, status=status.HTTP_200_OK)
|
|
if 'last_name' in request.data:
|
|
if request.data['last_name'] == "":
|
|
request.data.pop('last_name')
|
|
if 'national_code' in request.data:
|
|
if request.data['national_code'] == "":
|
|
request.data.pop('national_code')
|
|
if 'national_id' in request.data:
|
|
if request.data['national_id'] == "":
|
|
request.data.pop('national_id')
|
|
edit_type = request.data['type']
|
|
request.data.pop('type')
|
|
|
|
person_type = request.data['person_type']
|
|
request.data.pop('person_type')
|
|
|
|
# edit profile & roles by user
|
|
if person_type == 'self':
|
|
if edit_type == 'self_profile':
|
|
|
|
url = 'https://userbackend.rasadyar.com/user_identity/0/'
|
|
headers = {
|
|
"Authorization": str(request.headers['Authorization']),
|
|
"Content-Type": "application/json"
|
|
}
|
|
|
|
# remove null fields from request
|
|
request = remove_null_fields(type='req', request=request)
|
|
# get profile object
|
|
queryset = self.queryset.get(user=request.user)
|
|
|
|
payload = {
|
|
'userprofile_key': str(queryset.key),
|
|
'mobile': queryset.mobile,
|
|
'first_name': queryset.first_name,
|
|
'last_name': queryset.last_name,
|
|
'national_id': queryset.national_id,
|
|
'national_code': queryset.national_code
|
|
}
|
|
req = requests.put(
|
|
url=url,
|
|
data=json.dumps(payload),
|
|
headers=headers,
|
|
verify=False
|
|
)
|
|
|
|
if req.status_code == 200:
|
|
# upload image
|
|
req = upload_image(req=request, field='image')
|
|
|
|
# send data to serializer
|
|
serializer = self.serializer_class(data=req.data)
|
|
if serializer.is_valid():
|
|
obj = serializer.update(validated_data=req.data, instance=queryset)
|
|
serializer = self.serializer_class(obj)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
return Response(serializer.errors)
|
|
else:
|
|
return Response({'msg': 'Bad Request'}, status=status.HTTP_400_BAD_REQUEST)
|
|
if edit_type == 'Poultry':
|
|
pass
|
|
if edit_type == "CityOperator":
|
|
serializer = update_except_profile(
|
|
model=CityOperator,
|
|
serializer=CityOperatorSerializer,
|
|
request=request
|
|
)
|
|
return Response(serializer, status=status.HTTP_200_OK)
|
|
if edit_type == "ProvinceOperator":
|
|
serializer = update_except_profile(
|
|
model=ProvinceOperator,
|
|
serializer=ProvinceOperatorSerializer,
|
|
request=request
|
|
)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
if edit_type == "ProvinceFinancial":
|
|
serializer = update_except_profile(
|
|
model=ProvinceOperator,
|
|
serializer=ProvinceOperatorSerializer,
|
|
request=request
|
|
)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
if edit_type == "ProvinceInspector":
|
|
serializer = update_except_profile(
|
|
model=InspectorOperator,
|
|
serializer=InspectorOperatorSerializer,
|
|
request=request
|
|
)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
if edit_type == "KillHouse":
|
|
serializer = update_except_profile(
|
|
model=KillHouseOperator,
|
|
serializer=KillHouseOperatorSerializer,
|
|
request=request
|
|
)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
if edit_type == "KillHouseVet":
|
|
# get kill house object
|
|
kill_house_object = KillHouse.objects.get(key=request.data['kill_house_key'])
|
|
|
|
# get kill house vet object
|
|
kill_house_vet_object = KillHouseVet.objects.get(key=request.data['vet_key'])
|
|
|
|
kill_house_vet_object.kill_house = kill_house_object
|
|
kill_house_vet_object.save()
|
|
|
|
# send object to serializer
|
|
serializer = KillHouseVetSerializer(kill_house_vet_object)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
if edit_type == "VetFarm":
|
|
serializer = update_except_profile(
|
|
model=Vet,
|
|
serializer=VetSerializer,
|
|
request=request
|
|
)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
if edit_type == "Driver":
|
|
# get driver object
|
|
driver = KillHouseDriver.objects.get(key=request.data['driver_key'])
|
|
request.data.pop('driver_key')
|
|
|
|
# send data to serializer for update
|
|
serializer = KillHouseDriverSerializer(data=request.data)
|
|
if serializer.is_valid():
|
|
driver_update = serializer.update(instance=driver, validated_data=request.data)
|
|
serializer = KillHouseDriverSerializer(driver_update)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
# edit profile & roles by operator
|
|
if person_type == 'operator':
|
|
if edit_type == 'self_profile':
|
|
# remove null fields from request
|
|
request = remove_null_fields(type='req', request=request)
|
|
|
|
# get profile object
|
|
queryset = self.queryset.get(key=request.data['userprofile_key'])
|
|
request.data.pop('userprofile_key')
|
|
|
|
# upload image
|
|
req = upload_image(req=request, field='image')
|
|
|
|
# Change Password By Operator
|
|
if req.data['password'] != "":
|
|
data = {
|
|
'username': queryset.mobile,
|
|
'password': req.data['password']
|
|
}
|
|
req_change_pass = requests.post(
|
|
url=ARTA_URL_CHANGE_PASSWORD,
|
|
data=data,
|
|
verify=False
|
|
)
|
|
if req_change_pass.status_code == 200:
|
|
queryset.password = req.data['password']
|
|
queryset.save()
|
|
req.data.pop('password')
|
|
else:
|
|
return Response({"Msg": "Password Not Change"}, status=status.HTTP_400_BAD_REQUEST)
|
|
else:
|
|
req.data.pop('password')
|
|
|
|
# send data to serializer
|
|
serializer = self.serializer_class(data=req.data)
|
|
|
|
if serializer.is_valid():
|
|
# if 'city' in request.data.keys():
|
|
# city = City.objects.get(key=request.data['city'])
|
|
# request.data.pop('city')
|
|
# queryset.city = city
|
|
# queryset.save()
|
|
obj = serializer.update(validated_data=req.data, instance=queryset)
|
|
serializer = self.serializer_class(queryset)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
return Response(serializer.errors)
|
|
if edit_type == "CityOperator":
|
|
serializer = operator_update_except_profile(
|
|
model=CityOperator,
|
|
serializer=CityOperatorSerializer,
|
|
request=request
|
|
)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
if edit_type == "ProvinceOperator":
|
|
serializer = operator_update_except_profile(
|
|
model=ProvinceOperator,
|
|
serializer=ProvinceOperatorSerializer,
|
|
request=request
|
|
)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
if edit_type == "ProvinceFinancial":
|
|
serializer = operator_update_except_profile(
|
|
model=ProvinceOperator,
|
|
serializer=ProvinceOperatorSerializer,
|
|
request=request
|
|
)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
if edit_type == "ProvinceInspector":
|
|
serializer = operator_update_except_profile(
|
|
model=InspectorOperator,
|
|
serializer=InspectorOperatorSerializer,
|
|
request=request
|
|
)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
if edit_type == "Poultry":
|
|
serializer = operator_update_except_profile(
|
|
model=Poultry,
|
|
serializer=PoultrySerializer,
|
|
request=request
|
|
)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
if edit_type == "KillHouse":
|
|
serializer = operator_update_except_profile(
|
|
model=KillHouseOperator,
|
|
serializer=KillHouseOperatorSerializer,
|
|
request=request
|
|
)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
if edit_type == "KillHouseVet":
|
|
# get kill house object
|
|
kill_house_object = KillHouse.objects.get(key=request.data['kill_house_key'])
|
|
|
|
# get kill house vet object
|
|
kill_house_vet_object = KillHouseVet.objects.get(key=request.data['vet_key'])
|
|
|
|
kill_house_vet_object.kill_house = kill_house_object
|
|
kill_house_vet_object.save()
|
|
|
|
# send object to serializer
|
|
serializer = KillHouseVetSerializer(kill_house_vet_object)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
if edit_type == "VetFarm":
|
|
serializer = operator_update_except_profile(
|
|
model=Vet,
|
|
serializer=VetSerializer,
|
|
request=request
|
|
)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
if edit_type == "Driver":
|
|
# get driver object
|
|
driver = KillHouseDriver.objects.get(key=request.data['driver_key'])
|
|
request.data.pop('driver_key')
|
|
|
|
# send data to serializer for update
|
|
serializer = KillHouseDriverSerializer(data=request.data)
|
|
if serializer.is_valid():
|
|
if driver.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=driver.user_bank_info,
|
|
validated_data=request.data['user_bank_info']
|
|
)
|
|
driver.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']
|
|
)
|
|
driver.user_bank_info = bank_object
|
|
driver.save()
|
|
request.data.pop('user_bank_info')
|
|
driver_update = serializer.update(instance=driver, validated_data=request.data)
|
|
serializer = KillHouseDriverSerializer(driver_update)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
def destroy(self, request, *args, **kwargs):
|
|
refresh(request.user.id)
|
|
|
|
# contains role class model
|
|
role_class = self.object_classes[request.GET['role']]
|
|
|
|
# get role class object
|
|
role_object = role_class.objects.get(key=request.GET['role_data_key'])
|
|
|
|
# deactivate role class models
|
|
if request.GET['type'] == 'Deactivate':
|
|
if request.GET['role'] == 'KillHouseVet':
|
|
role_object.vet.trash = True # set trash field to False
|
|
role_object.vet.save()
|
|
if request.GET['role'] == 'VetFarm':
|
|
role_object.vet.trash = True # set trash field to False
|
|
role_object.vet.save()
|
|
role_object.trash = True # set trash field to False
|
|
role_object.save()
|
|
return Response({'Msg': 'Deactivated'}, status=status.HTTP_200_OK)
|
|
|
|
# activate role class models
|
|
elif request.GET['type'] == 'Activate':
|
|
if request.GET['role'] == 'KillHouseVet':
|
|
role_object.vet.trash = False # set trash field to False
|
|
role_object.vet.save()
|
|
if request.GET['role'] == 'VetFarm':
|
|
role_object.vet.trash = False # set trash field to False
|
|
role_object.vet.save()
|
|
role_object.trash = False # set trash field to False
|
|
role_object.save()
|
|
return Response({'Msg': 'Activated'}, status=status.HTTP_200_OK)
|
|
|
|
|
|
class SystemUserProfileّForFactorProfileViewSet(viewsets.ModelViewSet):
|
|
queryset = SystemUserProfile.objects.all()
|
|
serializer_class = SystemUserProfileSerializer
|
|
permission_classes = [AllowAny]
|
|
|
|
def update(self, request, pk=None, *args, **kwargs):
|
|
user = SystemUserProfile.objects.get(key=request.data['userprofile_key'], trash=False)
|
|
request.data.pop('userprofile_key')
|
|
serializer = self.serializer_class(user)
|
|
serializer.update(instance=user, validated_data=request.data)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
|
|
|
|
class AdminSystemUserProfileViewSet(viewsets.ModelViewSet):
|
|
queryset = SystemUserProfile.objects.all()
|
|
serializer_class = SystemUserProfileSerializer
|
|
permission_classes = [AllowAny]
|
|
|
|
def create(self, request, *args, **kwargs):
|
|
refresh(request.user.id)
|
|
city = City.objects.get(key=request.data['city'])
|
|
province = Province.objects.get(key=request.data['province'])
|
|
address = request.data['address']
|
|
password = request.data['password']
|
|
role = Group.objects.get(name=request.data['role']).name
|
|
main_address = SystemAddress(city=city, province=province, address=address)
|
|
main_address.save()
|
|
data = {
|
|
"username": request.data['mobile'],
|
|
"password": password,
|
|
"role": role,
|
|
"api_key": PROJECT_API_KEY
|
|
}
|
|
req = requests.post(
|
|
url=ARTA_URL_REGISTER,
|
|
data=data,
|
|
verify=False
|
|
)
|
|
if req.status_code == 200:
|
|
user = User(
|
|
username=request.data['mobile'],
|
|
first_name=request.data['firstname'],
|
|
last_name=request.data['lastname']
|
|
)
|
|
user.save()
|
|
base_id = SystemUserProfile.objects.all().last()
|
|
system_profile = SystemUserProfile(
|
|
mobile=request.data['mobile'],
|
|
fullname=request.data['firstname'] + " " + request.data['lastname'],
|
|
user=user,
|
|
birthday=request.data['birthday'],
|
|
national_id=request.data['national_id'],
|
|
city=city,
|
|
province=province,
|
|
base_order=int(base_id.base_order) + 1,
|
|
password=password
|
|
)
|
|
system_profile.save()
|
|
system_profile.role.add(role)
|
|
system_profile.save()
|
|
if role == 'CityOperator':
|
|
city_operator = CityOperator(user=system_profile, address=main_address)
|
|
city_operator.save()
|
|
elif role == 'ProvinceOperator' or role == 'ProvinceFinancial':
|
|
province_operator = ProvinceOperator(user=system_profile, address=main_address)
|
|
province_operator.save()
|
|
elif role == 'ProvinceInspector':
|
|
province_inspector = InspectorOperator(user=system_profile, address=main_address)
|
|
province_inspector.save()
|
|
elif role == 'KillHouse':
|
|
kill_house_operator = KillHouseOperator(user=system_profile, address=main_address)
|
|
kill_house_operator.save()
|
|
kill_house = KillHouse(
|
|
kill_house_operator=kill_house_operator,
|
|
system_address=main_address,
|
|
name=request.data['name'],
|
|
capacity=request.data['capacity'],
|
|
phone=request.data['phone'],
|
|
)
|
|
kill_house.save()
|
|
elif role == 'KillHouseVet':
|
|
vet = Vet(user=system_profile, address=main_address)
|
|
vet.save()
|
|
kill_house = KillHouse.objects.get(key=request.data['kill_house_key'])
|
|
kill_house_vet = KillHouseVet(vet=vet, kill_house=kill_house)
|
|
kill_house_vet.save()
|
|
# elif role == 'KillHouseVet':
|
|
|
|
|
|
class CheckChickenQuntityViewSet(viewsets.ModelViewSet):
|
|
queryset = UserProfile.objects.all()
|
|
serializer_class = UserProfileSerializer
|
|
permission_classes = [TokenHasReadWriteScope]
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
refresh(request.user.id)
|
|
info_list = []
|
|
users = UserProfile.objects.all()
|
|
now = datetime.datetime.now() + timedelta(days=6)
|
|
for i in range(10, 13):
|
|
count = 0
|
|
poultry = []
|
|
for user in users:
|
|
age = (now - user.hatching_date).days
|
|
if i == age:
|
|
poultry.append({
|
|
'full_name': user.fullname,
|
|
'quantity': user.number_of_incubators
|
|
})
|
|
count += user.number_of_incubators
|
|
|
|
internal_dict_info = {'age': i,
|
|
'count': count,
|
|
'weight': count * 3}
|
|
internal_dict_info.update({'users': poultry})
|
|
info_list.append(internal_dict_info)
|
|
|
|
return Response(info_list)
|
|
|
|
|
|
# ویوست مربوط اطلاعات حساب بانکی کاربر
|
|
class BankCardViewSet(viewsets.ModelViewSet):
|
|
queryset = BankCard.objects.all()
|
|
serializer_class = BankCardSerializer
|
|
permission_classes = [TokenHasReadWriteScope]
|
|
|
|
# تابع مربوط به ثبت اطلاعات حساب بانکی کاربر
|
|
def create(self, request, *args, **kwargs):
|
|
# refresh(request.user.id)
|
|
user = SystemUserProfile.objects.get(user=request.user)
|
|
serializer = self.serializer_class(data=request.data)
|
|
if serializer.is_valid():
|
|
bank_card = serializer.create(validated_data=request.data)
|
|
if 'role' in request.GET:
|
|
if request.GET['role'] == 'Poultry':
|
|
poultry = Poultry.objects.get(key=request.data['key'])
|
|
poultry.user_bank_info = bank_card
|
|
poultry.save()
|
|
elif request.GET['role'] == 'CityOperator':
|
|
city_operator = CityOperator.objects.get(user=user)
|
|
city_operator.user_bank_info = bank_card
|
|
city_operator.save()
|
|
elif request.GET['role'] == 'ProvinceFinancial':
|
|
province_operator = ProvinceOperator.objects.get(user=user)
|
|
province_operator.user_bank_info = bank_card
|
|
province_operator.save()
|
|
elif request.GET['role'] == 'KillHouse':
|
|
kill_house_operator = KillHouseOperator.objects.get(user=user)
|
|
kill_house_operator.user_bank_info = bank_card
|
|
kill_house_operator.save()
|
|
elif request.GET['role'] == 'Vet':
|
|
vet = Vet.objects.get(user=user)
|
|
vet.user_bank_info = bank_card
|
|
vet.save()
|
|
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
|
return Response(serializer.errors)
|
|
|
|
# تابع مربوط به ویرایش اطلاعات حساب بانکی کاربر
|
|
def update(self, request, pk=None, *args, **kwargs):
|
|
# refresh(request.user.id)
|
|
bank_card = BankCard.objects.get(key__exact=request.data["key"])
|
|
request.data.pop('key')
|
|
bank_card.save()
|
|
serializer = self.serializer_class(bank_card)
|
|
serializer.update(instance=bank_card, validated_data=request.data)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
|
|
|
|
class ProvinceChangeBankCardViewSet(viewsets.ModelViewSet):
|
|
queryset = BankCard.objects.all()
|
|
serializer_class = BankCardSerializer
|
|
permission_classes = [TokenHasReadWriteScope]
|
|
|
|
# تابع مربوط به ثبت اطلاعات حساب بانکی کاربر
|
|
def create(self, request, *args, **kwargs):
|
|
# refresh(request.user.id)
|
|
role = request.data['role']
|
|
if role == 'Poultry':
|
|
poultry = Poultry.objects.get(key=request.data['poultry_key'], trash=False)
|
|
if poultry.user_bank_info != None:
|
|
request.data.pop('role')
|
|
request.data.pop('poultry_key')
|
|
bank_card = BankCard.objects.get(key=poultry.user_bank_info.key)
|
|
serializer = self.serializer_class(bank_card)
|
|
serializer.update(instance=bank_card, validated_data=request.data)
|
|
else:
|
|
request.data.pop('role')
|
|
request.data.pop('poultry_key')
|
|
serializer = self.serializer_class(data=request.data)
|
|
if serializer.is_valid():
|
|
bank_card = serializer.create(validated_data=request.data)
|
|
poultry.user_bank_info = bank_card
|
|
poultry.save()
|
|
else:
|
|
operator = ProvinceOperator.objects.filter(key=request.data['operator_key'], trash=False)
|
|
if operator.user_bank_info != None:
|
|
request.data.pop('role')
|
|
request.data.pop('operator_key')
|
|
bank_card = BankCard.objects.get(key=operator.user_bank_info.key)
|
|
serializer = self.serializer_class(bank_card)
|
|
serializer.update(instance=bank_card, validated_data=request.data)
|
|
else:
|
|
request.data.pop('role')
|
|
request.data.pop('poultry_key')
|
|
serializer = self.serializer_class(data=request.data)
|
|
if serializer.is_valid():
|
|
bank_card = serializer.create(validated_data=request.data)
|
|
operator.user_bank_info = bank_card
|
|
operator.save()
|
|
return Response({"result": "با موفقیت انجام شد"}, status=status.HTTP_200_OK)
|
|
|
|
|
|
# ویوست مربوط آدرس کاربر
|
|
class AddressViewSet(viewsets.ModelViewSet):
|
|
queryset = Address.objects.all()
|
|
serializer_class = AddressSerializer
|
|
permission_classes = [TokenHasReadWriteScope]
|
|
|
|
def list(self, request, *args, **kwargs):
|
|
if "key" in request.GET:
|
|
add_obj = Address.objects.get(key__exact=request.GET["key"])
|
|
serializer = self.serializer_class(add_obj)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
if "title" in request.GET:
|
|
add_obj = Address.objects.filter(user_id=request.user.id)
|
|
query = [x for x in add_obj]
|
|
serializer = self.serializer_class(query, many=True)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
else:
|
|
queryset = Address.objects.all()
|
|
serializer = self.serializer_class(queryset, many=True)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
|
|
def create(self, request, *args, **kwargs):
|
|
serializer = self.serializer_class(data=request.data)
|
|
if serializer.is_valid():
|
|
address = serializer.create(validated_data=request.data)
|
|
address.user = UserProfile.objects.get(user=request.user)
|
|
address.save()
|
|
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
|
return Response(serializer.errors)
|
|
|
|
def retrieve(self, request, pk=None, *args, **kwargs):
|
|
queryset = Address.objects.get(key__exact=request.GET["key"])
|
|
serializer = self.serializer_class(queryset)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
|
|
def update(self, request, pk=None, *args, **kwargs):
|
|
queryset = Address.objects.get(key__exact=request.GET["key"])
|
|
queryset.save()
|
|
serializer = self.serializer_class(queryset)
|
|
serializer.update(instance=queryset, validated_data=request.data)
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
|
|
def partial_update(self, request, pk=None, *args, **kwargs):
|
|
pass
|
|
|
|
def destroy(self, request, pk=None, *args, **kwargs):
|
|
queryset = Address.objects.get(key__exact=request.GET["wallet_id"])
|
|
queryset.trash = True
|
|
queryset.save()
|
|
return Response(status=status.HTTP_200_OK)
|
|
|
|
|
|
@api_view(['POST'])
|
|
@permission_classes([AllowAny])
|
|
def new_send_otp(request):
|
|
# if request.headers['Origin'] == 'test.sstit.ir':
|
|
# return redirect('test.ravandno.ir')
|
|
# else:
|
|
req = requests.post(
|
|
url=ARTA_URL_SEND_OTP,
|
|
data=request.data,
|
|
verify=False
|
|
)
|
|
|
|
return Response(req.json())
|
|
|
|
|
|
# تابع برای برای بررسی یکسان بودن کد پیامکی استفاده میشود
|
|
@api_view(["POST"])
|
|
@permission_classes([AllowAny])
|
|
def check_otp(request):
|
|
req = requests.post(
|
|
url=ARTA_URL_CHECK_OTP,
|
|
data=request.data,
|
|
verify=False
|
|
)
|
|
return Response(req.json(), status=status.HTTP_200_OK)
|
|
|
|
|
|
@api_view(["POST"])
|
|
@permission_classes([TokenHasReadWriteScope])
|
|
@authentication_classes([OAuth2Authentication])
|
|
def change_password(request):
|
|
user = SystemUserProfile.objects.get(user=request.user)
|
|
req = requests.post(
|
|
url=ARTA_URL_CHANGE_PASSWORD,
|
|
data=request.data,
|
|
verify=False
|
|
)
|
|
if req.status_code == 200:
|
|
user.password = request.data['password']
|
|
user.save()
|
|
|
|
return Response(req.json(), status=status.HTTP_200_OK)
|
|
|
|
|
|
@api_view(['POST'])
|
|
@permission_classes([AllowAny])
|
|
def new_register(request):
|
|
req = requests.post(
|
|
url=ARTA_URL_REGISTER,
|
|
data=request.data,
|
|
verify=False
|
|
)
|
|
if req.status_code == 500:
|
|
error_message = req.content.decode('utf-8') # Decode response content
|
|
return Response(error_message)
|
|
if req.status_code == 200:
|
|
role = Group.objects.get(name=request.data['role'])
|
|
password = request.data['password']
|
|
user = User(
|
|
username=request.data['username'],
|
|
password=cryptocode.encrypt(password, password)
|
|
)
|
|
user.save()
|
|
userprofile = SystemUserProfile(
|
|
user=user,
|
|
mobile=request.data['username'],
|
|
password=password
|
|
)
|
|
|
|
userprofile.base_order = \
|
|
1000 if len(SystemUserProfile.objects.all()) == 0 \
|
|
else SystemUserProfile.objects.all().order_by('create_date').last().base_order + 1
|
|
userprofile.save()
|
|
userprofile.role.add(role)
|
|
|
|
# add tenant for a Poultry
|
|
if 'tenant' in request.data.keys():
|
|
|
|
# Check if has access
|
|
if get_authorization_header(request) != "":
|
|
# complete UserProfile information
|
|
province = Province.objects.get(key=request.data['tenant']['province'])
|
|
city = City.objects.get(key=request.data['tenant']['city'])
|
|
userprofile.province = province
|
|
userprofile.city = city
|
|
userprofile.national_code = request.data['tenant']['national_code']
|
|
userprofile.first_name = request.data['tenant']['first_name']
|
|
userprofile.last_name = request.data['tenant']['last_name']
|
|
userprofile.save()
|
|
|
|
# set the tenant poultry owner
|
|
owner_poultry = Poultry.objects.get(key=request.data['tenant']['poultry_key'])
|
|
owner_poultry.has_tenant = True
|
|
owner_poultry.save()
|
|
|
|
# create tenant
|
|
address = SystemAddress(
|
|
city=city,
|
|
province=province,
|
|
address=request.data['tenant']['address'],
|
|
postal_code=request.data['tenant']['postal_code']
|
|
)
|
|
address.save()
|
|
tenant_poultry = Poultry(
|
|
user=userprofile,
|
|
owner=owner_poultry,
|
|
unit_name=owner_poultry.unit_name,
|
|
breeding_unique_id=request.data['tenant']['unique_id'],
|
|
address=address
|
|
)
|
|
tenant_poultry.tenant = True
|
|
tenant_poultry.save()
|
|
serializer = PoultrySerializer(tenant_poultry)
|
|
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
|
|
|
access_token = AccessToken(
|
|
token=req.json()['access_token'],
|
|
user=user,
|
|
expires=req.json()['expire_time'],
|
|
scope="read write"
|
|
)
|
|
access_token.save()
|
|
return Response(req.json(), status.HTTP_201_CREATED)
|
|
if req.status_code == 400:
|
|
return Response({"result": 'کاربر قبلا ثبت شده است !'}, status.HTTP_403_FORBIDDEN)
|
|
|
|
|
|
# @api_view(['POST'])
|
|
# @permission_classes([AllowAny])
|
|
# def new_login(request):
|
|
# if User.objects.filter(username__exact=request.data['username']).exists():
|
|
# user = User.objects.get(username__exact=request.data['username'])
|
|
# userprofile = SystemUserProfile.objects.get(
|
|
# user=user
|
|
# )
|
|
#
|
|
# # for recognize if user role are deactivated can not login
|
|
# role_classes = SystemUserProfileViewSet.object_classes
|
|
# role_object = role_classes[request.data['role']].objects.filter(user=userprofile)
|
|
# for item in role_object:
|
|
# if item.trash == False:
|
|
# return Response(status=status.HTTP_203_NON_AUTHORITATIVE_INFORMATION)
|
|
# # ##########################################################################
|
|
#
|
|
# roles = []
|
|
# for item in userprofile.role.all():
|
|
# roles.append(item.name)
|
|
# request.data['role'] = roles
|
|
# request.data['user_key'] = str(userprofile.key)
|
|
# req = requests.post(
|
|
# url=ARTA_URL_LOGIN,
|
|
# json=request.data,
|
|
# verify=False
|
|
# )
|
|
# if req.status_code == 200:
|
|
# access_token = AccessToken(
|
|
# user=user,
|
|
# token=req.json()['access_token'],
|
|
# expires=req.json()['expire_time'],
|
|
# scope="read write"
|
|
# )
|
|
# access_token.save()
|
|
# userprofile.token = access_token.token
|
|
# userprofile.save()
|
|
# for item in req.json()['role']:
|
|
# group = Group.objects.get(name=item)
|
|
# if not SystemUserProfile.objects.filter(user=user, role=group):
|
|
# userprofile.role.add(group)
|
|
# internal_login_dict = {
|
|
# "access_token": req.json()['access_token'],
|
|
# "expires_in": req.json()['token_type'],
|
|
# "scope": req.json()['scope'],
|
|
# "expire_time": req.json()['expire_time'],
|
|
# "mobile": userprofile.mobile,
|
|
# "fullname": userprofile.fullname,
|
|
# "firstname": userprofile.first_name,
|
|
# "lastname": userprofile.last_name,
|
|
# "city": userprofile.city.name,
|
|
# "province": userprofile.province.name,
|
|
# "national_code": userprofile.national_code,
|
|
# "national_id": userprofile.national_id,
|
|
# "birthday": userprofile.birthday,
|
|
# "image": userprofile.image,
|
|
# "base_order": userprofile.base_order,
|
|
# "role": req.json()['role'],
|
|
# }
|
|
#
|
|
# return Response(internal_login_dict, status.HTTP_200_OK)
|
|
# if req.status_code == 401:
|
|
# return Response({'msg': 'unauthorized'}, status.HTTP_401_UNAUTHORIZED)
|
|
# else:
|
|
# return Response({'msg': 'unauthorized'}, status.HTTP_401_UNAUTHORIZED)
|
|
|
|
|
|
def expire_user_access_tokens(token,user):
|
|
now = datetime.datetime.now().date()
|
|
accesses = AccessToken.objects.filter(user=user,created__date=now).exclude(token=token).order_by('-created')
|
|
accesses_to_expire = accesses[1:]
|
|
for access in accesses_to_expire:
|
|
access.expires = now - timedelta(days=2)
|
|
access.save()
|
|
|
|
|
|
def create_login_log(request, user_profile):
|
|
headers = dict(request.headers)
|
|
|
|
UserLoginLog.objects.create(
|
|
user_profile=user_profile,
|
|
headers=headers,
|
|
ip_address=request.META.get('REMOTE_ADDR'),
|
|
user_agent=request.META.get('HTTP_USER_AGENT')
|
|
)
|
|
|
|
|
|
@api_view(['POST'])
|
|
@permission_classes([AllowAny])
|
|
def new_login(request):
|
|
username = request.data['username']
|
|
if User.objects.filter(username__exact=username).exists():
|
|
user = User.objects.get(username__exact=username)
|
|
userprofile = SystemUserProfile.objects.get(user=user)
|
|
roles = list(userprofile.role.all().values_list('name', flat=True))
|
|
request.data['role'] = roles
|
|
request.data['user_key'] = str(userprofile.key)
|
|
req_data = {
|
|
"api_key": PROJECT_API_KEY,
|
|
"password": request.data['password'],
|
|
"username": request.data['username'],
|
|
"user_key": str(userprofile.key),
|
|
"role": roles,
|
|
}
|
|
req = requests.post(
|
|
url=ARTA_URL_LOGIN,
|
|
json=req_data,
|
|
verify=False
|
|
)
|
|
if req.status_code == 200:
|
|
expires_datetime = datetime.datetime.strptime(req.json()['expire_time'],
|
|
"%Y-%m-%dT%H:%M:%S.%f") + datetime.timedelta(days=1)
|
|
access_token = AccessToken(
|
|
user=user,
|
|
token=req.json()['access_token'],
|
|
expires=expires_datetime,
|
|
scope="read write"
|
|
)
|
|
access_token.save()
|
|
userprofile.token = access_token.token
|
|
userprofile.save()
|
|
for item in req.json()['role']:
|
|
group = Group.objects.get(name=item)
|
|
if not SystemUserProfile.objects.filter(user=user, role=group):
|
|
userprofile.role.add(group)
|
|
internal_login_dict = {
|
|
"access_token": req.json()['access_token'],
|
|
"expires_in": req.json()['token_type'],
|
|
"scope": req.json()['scope'],
|
|
"expire_time": req.json()['expire_time'],
|
|
"mobile": userprofile.mobile,
|
|
"fullname": userprofile.fullname,
|
|
"firstname": userprofile.first_name,
|
|
"lastname": userprofile.last_name,
|
|
"city": userprofile.city.name,
|
|
"province": userprofile.province.name,
|
|
"national_code": userprofile.national_code,
|
|
"national_id": userprofile.national_id,
|
|
"birthday": userprofile.birthday,
|
|
"image": userprofile.image,
|
|
"base_order": userprofile.base_order,
|
|
"role": req.json()['role'],
|
|
}
|
|
# expire_user_access_tokens_tread = threading.Thread(target=expire_user_access_tokens, args=(req.json()['access_token'],user))
|
|
# expire_user_access_tokens_tread.start()
|
|
try:
|
|
create_login_log(request, userprofile)
|
|
except:
|
|
pass
|
|
return Response(internal_login_dict, status.HTTP_200_OK)
|
|
if req.status_code == 401:
|
|
return Response({'msg': 'unauthorized'}, status.HTTP_410_GONE)
|
|
else:
|
|
return Response({'msg': 'unauthorized'}, status.HTTP_410_GONE)
|
|
# def new_login(request):
|
|
# username = request.data['username']
|
|
# password = (request.data['password'],)
|
|
#
|
|
# if User.objects.filter(username__exact=username).exists():
|
|
# user = User.objects.get(username__exact=username)
|
|
# userprofile = SystemUserProfile.objects.get(user=user)
|
|
# decrypted_password = cryptocode.decrypt(user.password, password[0])
|
|
# if decrypted_password != password[0]:
|
|
# return Response({'result': 'رمز ورود اشتباه است!'}, status=status.HTTP_401_UNAUTHORIZED)
|
|
# roles = list(userprofile.role.all().values_list('name', flat=True))
|
|
# data = {
|
|
# "username": user.username,
|
|
# "password": userprofile.password,
|
|
# "client_id": CLIENT_ID,
|
|
# "client_secret": CLIENT_SECRET,
|
|
# "grant_type": "client_credentials",
|
|
# "scope": "read write",
|
|
# }
|
|
#
|
|
# r = requests.post(url=BASE_URL + "token/", data=json.dumps(data), verify=False)
|
|
# access_token = AccessToken.objects.get(token=r.json()["access_token"])
|
|
# access_token.user = user
|
|
# access_token.expires += timedelta(days=3)
|
|
# access_token.save()
|
|
# userprofile.token = access_token.token
|
|
# userprofile.save()
|
|
# internal_login_dict = {
|
|
# "access_token": access_token.token,
|
|
# "expires_in": access_token.expires,
|
|
# "scope": "read write",
|
|
# "expire_time": access_token.expires,
|
|
# "mobile": userprofile.mobile,
|
|
# "fullname": userprofile.fullname,
|
|
# "firstname": userprofile.first_name,
|
|
# "lastname": userprofile.last_name,
|
|
# "city": userprofile.city.name,
|
|
# "province": userprofile.province.name,
|
|
# "national_code": userprofile.national_code,
|
|
# "national_id": userprofile.national_id,
|
|
# "birthday": userprofile.birthday,
|
|
# "image": userprofile.image,
|
|
# "base_order": userprofile.base_order,
|
|
# "role": roles,
|
|
# }
|
|
#
|
|
# return Response(internal_login_dict, status.HTTP_200_OK)
|
|
#
|
|
# else:
|
|
# return Response({'msg': 'unauthorized'}, status.HTTP_410_GONE)
|
|
|
|
|
|
# تابع مربوط به ازسال کد پیامکی برای چند حالت استفاده می شود
|
|
# یرای فراموشی رمز عبور و برای تغییر رمز عبور و تغییر موبایل و ...
|
|
# @api_view(["POST"])
|
|
# @permission_classes([AllowAny])
|
|
# def send_otp(request):
|
|
# mobile = request.data["mobile"]
|
|
# state = request.data["state"]
|
|
# if len(mobile) < 11 or len(mobile) > 11:
|
|
# return Response({"pattern": "wrong", }, status=status.HTTP_403_FORBIDDEN, )
|
|
# key = str(uuid.uuid4())
|
|
# rand = random.randint(10000, 99000)
|
|
# cache.set(key, str(rand), timeout=CACHE_TTL)
|
|
# userprofile = SystemUserProfile.objects.filter(mobile=mobile)
|
|
#
|
|
# if userprofile.count() == 0:
|
|
# return Response({"is_user": False}, status=status.HTTP_404_NOT_FOUND)
|
|
#
|
|
# elif state == "forget_password":
|
|
# receptor = mobile
|
|
# send_otp_code(receptor, rand)
|
|
# return Response({"is_user": True, "key": key}, status=status.HTTP_200_OK)
|
|
#
|
|
# elif state == "change_password":
|
|
# receptor = mobile
|
|
# send_otp_code(receptor, rand)
|
|
# return Response({"is_user": True, "key": key}, status=status.HTTP_200_OK, )
|
|
#
|
|
# elif state == "change_mobile":
|
|
# receptor = mobile
|
|
# send_otp_code(receptor, rand)
|
|
# return Response({"state": "change_mobile", "key": key}, status=status.HTTP_200_OK)
|
|
#
|
|
# elif state == "":
|
|
# list1 = []
|
|
# if userprofile.count() > 1:
|
|
#
|
|
# for user in userprofile:
|
|
# user_dict = {
|
|
# "userprofile_id": user.id,
|
|
# "fullname": user.fullname,
|
|
# "first_name": user.first_name,
|
|
# "last_name": user.last_name,
|
|
# "mobile": user.mobile,
|
|
# "role": user.role.name,
|
|
# "province": user.address.province,
|
|
# "city": user.address.city,
|
|
# "address": user.address.address
|
|
# }
|
|
# list1.append(user_dict)
|
|
# return Response(
|
|
# {
|
|
# "result": list1,
|
|
# },
|
|
# status=status.HTTP_200_OK,
|
|
# )
|
|
#
|
|
# else:
|
|
#
|
|
# return Response(
|
|
# {
|
|
# "is_user": True,
|
|
# },
|
|
# status=status.HTTP_200_OK,
|
|
# )
|
|
|
|
|
|
@api_view(["POST"])
|
|
@permission_classes([AllowAny])
|
|
def login(request):
|
|
username = request.data["mobile"]
|
|
password = request.data["password"]
|
|
api_key = request.data["api_key"]
|
|
data = {
|
|
"username": username,
|
|
"password": password,
|
|
"api_key": api_key,
|
|
}
|
|
r = requests.post(url=ARTA_URL_LOGIN, data=data)
|
|
if "is_user" in r.json().keys():
|
|
return Response({'is_user': False}, status=status.HTTP_401_UNAUTHORIZED)
|
|
elif "password" in r.json().keys():
|
|
return Response({'password': 'wrong'}, status=status.HTTP_401_UNAUTHORIZED)
|
|
user_profile = UserProfile.objects.get(mobile=username)
|
|
user = User.objects.get(id=user_profile.user.id)
|
|
user_profile.token = r.json()["access_token"]
|
|
user_profile.save()
|
|
access = AccessToken(token=r.json()['access_token'], user=user, scope=r.json()['scope'],
|
|
expires=r.json()['expire_time'])
|
|
access.save()
|
|
role = Group.objects.get(id=user_profile.role.id)
|
|
response = {
|
|
"access_token": r.json()['access_token'],
|
|
"expires_in": r.json()['expires_in'],
|
|
"token_type": r.json()['token_type'],
|
|
"scope": r.json()['scope'],
|
|
"role": role.name
|
|
}
|
|
return Response(response, status=status.HTTP_200_OK)
|
|
|
|
|
|
@api_view(["POST"])
|
|
@permission_classes([AllowAny])
|
|
def register(request):
|
|
username = request.data["username"]
|
|
password = request.data["password"]
|
|
api_key = request.data["api_key"]
|
|
province = request.data['province']
|
|
city = request.data['city']
|
|
role = request.data['role']
|
|
role = Group.objects.get(name=role)
|
|
data = {
|
|
"username": username,
|
|
"password": password,
|
|
"api_key": api_key,
|
|
}
|
|
r = requests.post(url=ARTA_URL_REGISTER, data=data)
|
|
if 'result' in r.json().keys():
|
|
return Response({"result": "user already exist"})
|
|
|
|
user = User(
|
|
username=username, password=cryptocode.encrypt(password, password)
|
|
)
|
|
user.save()
|
|
access = AccessToken(token=r.json()['access_token'], user=user, scope=r.json()['scope'],
|
|
expires=r.json()['expire_time'])
|
|
access.save()
|
|
|
|
address = Address(province=province, city=city)
|
|
address.save()
|
|
userprofile = UserProfile(user=user, mobile=username, address=address, role=role)
|
|
userprofile.base_order = 1000 if len(UserProfile.objects.all()) == 0 else UserProfile.objects.all().order_by(
|
|
'create_date').last().base_order + 1
|
|
userprofile.user = user
|
|
userprofile.token = r.json()['access_token']
|
|
userprofile.save()
|
|
return Response(r.json(), status=status.HTTP_200_OK)
|
|
|
|
|
|
@api_view(["POST"])
|
|
@permission_classes([AllowAny])
|
|
# @authentication_classes([OAuth2Authentication])
|
|
def forget_password(request):
|
|
# user = SystemUserProfile.objects.get(user=request.user)
|
|
# user.password = request.data['password']
|
|
# user.save()
|
|
req = requests.post(
|
|
url=ARTA_URL_CHANGE_PASSWORD,
|
|
data=request.data,
|
|
verify=False
|
|
)
|
|
if req.status_code == 200:
|
|
user = SystemUserProfile.objects.get(mobile=request.data['username'])
|
|
|
|
user.password = request.data['password']
|
|
user.save()
|
|
|
|
return Response(req.json(), status=status.HTTP_200_OK)
|
|
|
|
# mobile = request.data["mobile"]
|
|
# password = request.data["password"]
|
|
# try:
|
|
# userprofile = UserProfile.objects.get(mobile__exact=mobile)
|
|
# except UserProfile.DoesNotExist:
|
|
# return Response(status=status.HTTP_401_UNAUTHORIZED)
|
|
# user = User.objects.get(id=userprofile.user.id)
|
|
# user.password = cryptocode.encrypt(password, password)
|
|
# user.save()
|
|
# data = {
|
|
# "username": str(user.username),
|
|
# "password": user.password,
|
|
# "client_id": CLIENT_ID,
|
|
# "client_secret": CLIENT_SECRET,
|
|
# "grant_type": "client_credentials",
|
|
# "scope": "read write",
|
|
# }
|
|
# r = requests.post(url=BASE_URL + "token/", data=json.dumps(data))
|
|
# userprofile.token = r.json()["access_token"]
|
|
# userprofile.save()
|
|
# access = AccessToken.objects.get(token=userprofile.token)
|
|
# access.user = userprofile.user
|
|
# access.save()
|
|
# role = Group.objects.get(id=userprofile.role.id)
|
|
# response = {
|
|
# "access_token": r.json()['access_token'],
|
|
# "expires_in": r.json()['expires_in'],
|
|
# "token_type": r.json()['token_type'],
|
|
# "scope": r.json()['scope'],
|
|
# "role": role.name
|
|
# }
|
|
# return Response(response, status=status.HTTP_200_OK)
|
|
|
|
|
|
# @api_view(["GET"])
|
|
# @permission_classes([AllowAny])
|
|
# تابع برای گرفتن گزارش تعداد جوجه و سن جوجه مرغداران استفاده میشود که بصورت فایل اکسل است
|
|
def resulting(request):
|
|
list2 = []
|
|
today = datetime.datetime.now()
|
|
if 'age' in request.GET:
|
|
users = UserProfile.objects.filter(role_id=1).exclude(incubation_date=None)
|
|
for user in users:
|
|
age = (today - user.incubation_date).days
|
|
if int(age) == int(request.GET['age']):
|
|
list2.append(user)
|
|
elif 'state' in request.GET:
|
|
users = UserProfile.objects.filter(role_id=1).exclude(incubation_date=None)
|
|
for user in users:
|
|
age = (today - user.incubation_date).days
|
|
if int(age) >= int(request.GET['age1']) and int(age) <= int(request.GET['age2']):
|
|
list2.append(user)
|
|
excel_options = [
|
|
'نام و نام خانوادگی'
|
|
, 'تاریخ جوجه ریزی'
|
|
, 'سن مرغ'
|
|
, 'تعداد جوجه ریزی',
|
|
'شماره همراه', 'استان',
|
|
'شهرستان',
|
|
'آدرس'
|
|
]
|
|
output = BytesIO()
|
|
workbook = xlsxwriter.Workbook(output)
|
|
worksheet = workbook.add_worksheet()
|
|
for count in range(len(excel_options)):
|
|
worksheet.write(0, count, excel_options[count])
|
|
l = 0
|
|
for user in list2:
|
|
l += 1
|
|
today = datetime.datetime.now()
|
|
if user.incubation_date != None:
|
|
age = (today - user.incubation_date).days
|
|
gregorian_date = jdatetime.date.fromgregorian(
|
|
day=user.incubation_date.day,
|
|
month=user.incubation_date.month,
|
|
year=user.incubation_date.year
|
|
)
|
|
incubation_date = gregorian_date
|
|
else:
|
|
age = 'ندارد'
|
|
incubation_date = 'ندارد'
|
|
list1 = [
|
|
user.fullname,
|
|
str(incubation_date),
|
|
str(age),
|
|
user.number_of_incubators,
|
|
user.mobile,
|
|
user.address.province,
|
|
user.address.city,
|
|
user.address.address,
|
|
]
|
|
for item in range(len(list1)):
|
|
worksheet.write(l, item, list1[item])
|
|
list1 = []
|
|
workbook.close()
|
|
output.seek(0)
|
|
|
|
response = HttpResponse(content_type='application/vnd.ms-excel')
|
|
|
|
response['Content-Disposition'] = 'attachment;filename="Reporting.xlsx"'
|
|
response.write(output.getvalue())
|
|
|
|
return response
|
|
|
|
|
|
# تابع برای دریافت گزارش اطلاعات مربوط به فاکتور های مرغ منجمد به صورت فایل اکسل استفاده میشود
|
|
def ware_house_factor(request):
|
|
list2 = []
|
|
factors = WareHouseFactor.objects.filter(trash=False).order_by('create_date')
|
|
for factor in factors:
|
|
list2.append(factor)
|
|
|
|
excel_options = [
|
|
'تاریخ',
|
|
'نام و نام خانوادگی',
|
|
'کدملی'
|
|
, 'شماره همراه'
|
|
, 'نوع کالا'
|
|
,
|
|
'شماره نامه جهاد',
|
|
'شماره نامه استان',
|
|
'قیمت',
|
|
'وزن'
|
|
]
|
|
output = BytesIO()
|
|
workbook = xlsxwriter.Workbook(output)
|
|
worksheet = workbook.add_worksheet()
|
|
for count in range(len(excel_options)):
|
|
worksheet.write(0, count, excel_options[count])
|
|
l = 0
|
|
for factor in factors:
|
|
l += 1
|
|
gregorian_date = jdatetime.date.fromgregorian(
|
|
day=factor.date.day,
|
|
month=factor.date.month,
|
|
year=factor.date.year
|
|
)
|
|
list1 = [
|
|
str(gregorian_date),
|
|
factor.customer,
|
|
str(factor.national_code),
|
|
factor.mobile,
|
|
factor.product_type,
|
|
str(factor.letter_number_jahad),
|
|
factor.letter_number,
|
|
factor.fee,
|
|
factor.weight
|
|
]
|
|
for item in range(len(list1)):
|
|
worksheet.write(l, item, list1[item])
|
|
|
|
list1 = []
|
|
|
|
workbook.close()
|
|
output.seek(0)
|
|
|
|
response = HttpResponse(content_type='application/vnd.ms-excel')
|
|
|
|
response['Content-Disposition'] = 'attachment;filename="Reporting.xlsx"'
|
|
response.write(output.getvalue())
|
|
|
|
return response
|
|
|
|
|
|
@api_view(['POST'])
|
|
@permission_classes([AllowAny])
|
|
def pos_login(request):
|
|
build_id = None
|
|
link = None
|
|
pos_version = PosVersion.objects.filter(trash=False).first()
|
|
if pos_version:
|
|
build_id = pos_version.build_id
|
|
link = pos_version.latest_downloadlink
|
|
try:
|
|
pos = POSMachine.objects.get(pos_id=request.data['pos-id'], trash=False)
|
|
if pos.active == False:
|
|
return Response({"result": "این کلید غیر فعال میباشد! "}, status=status.HTTP_401_UNAUTHORIZED)
|
|
|
|
|
|
except:
|
|
return Response({"result": "دستگاه پوزی با این شناسه وجود ندارد! "}, status=status.HTTP_401_UNAUTHORIZED)
|
|
|
|
if User.objects.filter(username__exact=pos.user.mobile).exists():
|
|
user = User.objects.get(username__exact=pos.user.mobile)
|
|
userprofile = SystemUserProfile.objects.get(
|
|
user=user
|
|
)
|
|
data = {
|
|
"username": user.username,
|
|
"password": userprofile.password,
|
|
"client_id": CLIENT_ID,
|
|
"client_secret": CLIENT_SECRET,
|
|
"grant_type": "client_credentials",
|
|
"scope": "read write",
|
|
}
|
|
|
|
r = requests.post(url=BASE_URL + "token/", data=json.dumps(data), verify=False)
|
|
access_token = AccessToken.objects.get(token=r.json()["access_token"])
|
|
access_token.user = user
|
|
access_token.expires += timedelta(days=3)
|
|
access_token.save()
|
|
userprofile.token = access_token.token
|
|
userprofile.save()
|
|
pos.token = access_token.token
|
|
pos.save()
|
|
if pos.guild:
|
|
store_name = pos.guild.guilds_name
|
|
phone = pos.guild.phone
|
|
else:
|
|
store_name = pos.kill_house.name
|
|
phone = pos.kill_house.phone
|
|
internal_login_dict = {
|
|
"access_token": userprofile.token,
|
|
"build_id": build_id,
|
|
"latest_downloadlink": link,
|
|
"profile": {
|
|
"pos_id": pos.pos_id,
|
|
"store_name": store_name,
|
|
"phone": phone,
|
|
"mobile": userprofile.mobile,
|
|
"fullname": userprofile.fullname,
|
|
"firstname": userprofile.first_name,
|
|
"lastname": userprofile.last_name,
|
|
"city": userprofile.city.name,
|
|
"province": userprofile.province.name,
|
|
"national_code": userprofile.national_code,
|
|
"national_id": userprofile.national_id,
|
|
"birthday": userprofile.birthday,
|
|
}
|
|
|
|
}
|
|
for pos_item in PosItem.objects.all():
|
|
internal_login_dict[pos_item.name] = pos_item.value
|
|
|
|
return Response(internal_login_dict, status.HTTP_200_OK)
|
|
|
|
else:
|
|
return Response({'msg': 'unauthorized'}, status.HTTP_410_GONE)
|
|
|
|
|
|
@api_view(['POST'])
|
|
@permission_classes([AllowAny])
|
|
def new_pos_login(request):
|
|
pos_id = request.data.get('pos-id')
|
|
pos = get_object_or_404(POSMachine, pos_id=pos_id, trash=False)
|
|
|
|
if not pos.active:
|
|
return Response({"result": "این کلید غیر فعال میباشد! "}, status=status.HTTP_401_UNAUTHORIZED)
|
|
|
|
user = get_object_or_404(User, username=pos.user.mobile)
|
|
user_profile = get_object_or_404(SystemUserProfile, user=user)
|
|
|
|
pos_info = get_pos_info(pos)
|
|
|
|
data = {
|
|
"username": user.username,
|
|
"password": user_profile.password,
|
|
"client_id": CLIENT_ID,
|
|
"client_secret": CLIENT_SECRET,
|
|
"grant_type": "client_credentials",
|
|
"scope": "read write",
|
|
}
|
|
|
|
response = requests.post(url=f"{BASE_URL}token/", data=json.dumps(data), verify=False)
|
|
access_token = update_access_token(response.json()["access_token"], user)
|
|
|
|
user_profile.token = access_token.token
|
|
user_profile.save()
|
|
|
|
pos.token = access_token.token
|
|
pos.save()
|
|
|
|
internal_login_dict = build_internal_login_response(user_profile, pos_info, pos.pos_id)
|
|
|
|
return Response(internal_login_dict, status.HTTP_200_OK)
|
|
|
|
|
|
def get_pos_info(pos):
|
|
if pos.kill_house:
|
|
return {
|
|
"type": "KillHouse",
|
|
"name": pos.kill_house.name,
|
|
"phone": pos.kill_house.phone
|
|
}
|
|
elif pos.guild:
|
|
return {
|
|
"type": "Guild",
|
|
"name": pos.guild.guilds_name,
|
|
"phone": pos.guild.phone
|
|
}
|
|
else:
|
|
return {
|
|
"type": "Dispenser",
|
|
"name": pos.dispenser.user.fullname,
|
|
"phone": pos.dispenser.user.mobile
|
|
}
|
|
|
|
|
|
def update_access_token(token_str, user):
|
|
access_token = AccessToken.objects.get(token=token_str)
|
|
access_token.user = user
|
|
access_token.expires += timedelta(days=3)
|
|
access_token.save()
|
|
return access_token
|
|
|
|
|
|
def build_internal_login_response(user_profile, pos_info, pos_id):
|
|
return {
|
|
"access_token": user_profile.token,
|
|
"type": pos_info["type"],
|
|
"profile": {
|
|
"pos_id": pos_id,
|
|
"name": pos_info["name"],
|
|
"phone": pos_info["phone"],
|
|
"mobile": user_profile.mobile,
|
|
"fullname": user_profile.fullname,
|
|
"firstname": user_profile.first_name,
|
|
"lastname": user_profile.last_name,
|
|
"city": user_profile.city.name,
|
|
"province": user_profile.province.name,
|
|
"national_code": user_profile.national_code,
|
|
"national_id": user_profile.national_id,
|
|
"birthday": user_profile.birthday,
|
|
}
|
|
}
|
|
|
|
|
|
@api_view(['POST'])
|
|
@permission_classes([AllowAny])
|
|
def show_transaction_info(request):
|
|
request.data['registered'] = True
|
|
return Response(request.data)
|
|
|
|
|
|
@api_view(['POST'])
|
|
@permission_classes([AllowAny])
|
|
def TokenVerification(request):
|
|
token = AccessToken.objects.get(token=request.data['token'])
|
|
user = SystemUserProfile.objects.filter(user=token.user, trash=False).select_related('province', 'city').first()
|
|
|
|
return Response({
|
|
"username": user.mobile,
|
|
"password": user.password,
|
|
"province": user.province.name,
|
|
"city": user.city.name,
|
|
})
|
|
|
|
# def create(self, request, *args, **kwargs):
|
|
# group = Group.objects.filter(name__in=request.data['roles'])
|
|
# users = SystemUserProfile.objects.filter(trash=False,role__in=group).order_by('id')
|
|
# notis_user = users.values_list('id',flat=True)
|
|
# return Response(notis_user)
|
|
# serializer = self.serializer_class(data=request.data)
|
|
# if serializer.is_valid():
|
|
# notice = serializer.create(validated_data=request.data)
|
|
# notice.users = notis_user
|
|
# notice.save()
|
|
# for user in notis_user:
|
|
# user_notice = UserNoticeInfo(
|
|
# notice=notice,
|
|
# user = user,
|
|
#
|
|
# )
|
|
# user_notice.save()
|
|
# serializer = self.serializer_class(notice)
|
|
# return Response(serializer.data)
|
|
# return Response(serializer.errors)
|
|
|
|
|
|
@api_view(['POST'])
|
|
@permission_classes([AllowAny])
|
|
def register_tenant(request):
|
|
province = Province.objects.get(key=request.data['province'])
|
|
city = City.objects.get(key=request.data['city'])
|
|
breeding_uniq_id = request.data['unique_id']
|
|
if Poultry.objects.filter(trash=False, breeding_unique_id=breeding_uniq_id).exists():
|
|
return Response({'result': 'شناسه یکتا برای شخص دیگری است!'}, status=status.HTTP_403_FORBIDDEN)
|
|
owner_poultry = Poultry.objects.get(key=request.data['poultry_key'])
|
|
owner_poultry.has_tenant = True
|
|
|
|
address = SystemAddress(
|
|
city=city,
|
|
province=province,
|
|
address=request.data['address'],
|
|
postal_code=request.data['postal_code']
|
|
)
|
|
address.save()
|
|
tenant_poultry = Poultry(
|
|
user=owner_poultry.user,
|
|
owner=owner_poultry,
|
|
unit_name=request.data['unit_name'],
|
|
breeding_unique_id=breeding_uniq_id,
|
|
address=address,
|
|
city_number=city.id,
|
|
province_number=province.id,
|
|
city_name=city.name,
|
|
province_name=province.name
|
|
)
|
|
tenant_poultry.tenant = True
|
|
owner_poultry.save()
|
|
tenant_poultry.save()
|
|
serializer = PoultrySerializer(tenant_poultry)
|
|
return Response(serializer.data, status=status.HTTP_201_CREATED)
|