Files
2026-01-18 11:45:53 +03:30

156 lines
5.9 KiB
Python

import datetime
import hashlib
from io import BytesIO
import openpyxl
import requests
from django.contrib.auth.models import Group, User
from django.views.decorators.csrf import csrf_exempt
from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import AllowAny
from rest_framework.response import Response
from LiveStock.models import LiveStock, Rancher, Cooperative
#todo:فعلا چون دامدار تکراری داریم نمیشه ثبت کر باید از طریف آدرس بریم
from authentication.models import SystemUserProfile, Province, City, SystemAddress
from authentication.register import ARTA_REGISTER
from panel.admin import PROJECT_API_KEY
from panel.convert_date import convert_to_shamsi
def add_rancher_to_live_stock(request):
livestock=LiveStock.objects.filter(trash=False)
for l in livestock:
rancher=Rancher.objects.filter(trash=False,herd_code=l.herd_code).first()
l.rancher=rancher
l.save()
@api_view(["POST"])
@permission_classes([AllowAny])
@csrf_exempt
def create_live_stock_and_rancher_from_excel(request):
file = request.FILES['file'].read()
read = openpyxl.load_workbook(BytesIO(file), data_only=True)
sheet = read.active
group = Group.objects.get(name='Rancher')
password = '123456'
result_list=[]
yesterday= datetime.datetime.now().date() - datetime.timedelta(days=1)
birth_day=convert_to_shamsi(day=yesterday.day,
month=yesterday.month,
year=yesterday.year).replace('-','/')
for i, row in enumerate(sheet.iter_rows(values_only=True)):
if i <= 1:
continue
first_name = row[1]
last_name = row[2]
rancher_name = row[3]
type_rancher = row[4]
herd_code = row[5]
epidemiological_code = row[6]
postal_code = row[7]
type_live_stock = row[8]
gender = row[9]
national_id = row[10]
mobile = row[11]
city = row[12]
range_live_stock = row[13]
if not herd_code:
herd_code = '0000' + str(national_id)
mobile = str(mobile)
if len(mobile) < 10:
continue
if len(mobile) == 10:
mobile = '0' + mobile
try:
city_id = City.objects.filter(trash=False, name=city).first()
province = Province.objects.filter(trash=False,key=city_id.province.key).first()
if not Rancher.objects.filter(trash=False, herd_code=herd_code).exists():
if not SystemUserProfile.objects.filter(trash=False, mobile=mobile).exists():
hashed_password = hashlib.sha256(str(password).encode()).hexdigest()
data = {
"username": mobile,
"first_name": first_name,
"last_name": last_name,
"password": hashed_password,
"national_code": national_id,
"role": "Rancher",
"api_key": PROJECT_API_KEY
}
req = requests.post(
url=ARTA_REGISTER,
data=data,
verify=False
)
if req.status_code == 200:
user = User(username=mobile, first_name=first_name, last_name=last_name, password=hashed_password)
user.save()
base_id = SystemUserProfile.objects.all()
if base_id.count() > 0:
base_id = int(base_id.last().base_order) + 1
else:
base_id = 1000
system_profile = SystemUserProfile(
mobile=mobile,
first_name=first_name,
last_name=last_name,
fullname=first_name+' ' + last_name,
user=user,
base_order=base_id,
password=password,
birthday=datetime.datetime.now().date(),
city=city_id,
province=province
)
system_profile.save()
system_profile.role.add(group)
address = SystemAddress(
province=province,
city=city_id,
address='',
)
address.save()
system_profile=SystemUserProfile.objects.filter(trash=False, mobile=mobile).first()
cooperative = Cooperative.objects.filter(trash=False, address__city=city_id).first()
rancher = Rancher(
user=system_profile,
cooperative=cooperative,
name=rancher_name,
mobile=mobile,
fullname=first_name + ' ' + last_name,
city=city,
herd_name=rancher_name,
postal_code=postal_code,
epidemiological_code=epidemiological_code,
herd_code=herd_code,
national_id=national_id,
type='rural' if type_rancher == 'روستایی' else 'industrial'
)
rancher.save()
for _i in range(range_live_stock):
live_stock = LiveStock(
herd_code=herd_code,
type=type_live_stock,
birth_day=birth_day,
birth_day_gh=yesterday,
gender=gender,
)
live_stock.save()
except:
result_list.append(rancher_name)
return Response(result_list)