Files
Rasadyar_Kurdestan/bot_eata.py
2026-01-18 11:59:48 +03:30

1855 lines
88 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from datetime import datetime, timedelta
import jdatetime
import requests
from django.db.models import Sum, Q, F
from django.http import HttpResponse
from general_urls import base_url_for_sms_report
from helper_eata import token, chat_id, chat_id_mali
from panel.ProvinceOperator.serializers import TotalWageInformationSerializer
from panel.helper_excel import shamsi_date, to_locale_str
from panel.models import PoultryHatching, ProvinceKillRequest, KillHousePercentage, TotalWageInformation, \
InternalTransaction, TokenEitaaForEachVet, VetFarm, KillHouseRequest, PoultryRequest, Poultry
def format_datetime_to_shamsi(input_date):
if isinstance(input_date, datetime):
input_date = input_date.date()
shamsi_date = jdatetime.date.fromgregorian(date=input_date)
shamsi_date_str = shamsi_date.strftime('%Y/%m/%d')
weekday_str = input_date.strftime('%A')
weekdays = {
'Saturday': 'شنبه',
'Sunday': 'یکشنبه',
'Monday': 'دوشنبه',
'Tuesday': 'سه‌شنبه',
'Wednesday': 'چهارشنبه',
'Thursday': 'پنج‌شنبه',
'Friday': 'جمعه'
}
weekday_str_fa = weekdays.get(weekday_str, '')
formatted_date = f"گزارش {weekday_str_fa} به تاریخ {shamsi_date_str}"
return formatted_date
def bot_eitaa_for_bar(request):
url = f'https://eitaayar.ir/api/{token}/sendMessage'
date = datetime.now().date()
response = requests.get(
f'https://{base_url_for_sms_report}backend.rasadyaar.ir/province_request_letter/?date={date}')
date_time_jalali = format_datetime_to_shamsi(date)
if response.status_code == 200:
data = response.json()
allocation = data.get('allocation', [])
kill_house_num = 1
messages_sent = 0
for entry in allocation:
date_shamsi = shamsi_date(date).replace('-', '_')
base_message = '🗓📢❗ سامانه رصدیار، زنجیره تامین،تولید و توزیع مرغ گوشتی📢❗\n'
base_message += f'{date_time_jalali}\n'
base_message += f' #گزارش_بار_داخل_استان #{date_shamsi}\n\n'
total_quantity = entry.get('total_quantity')
if total_quantity and int(total_quantity) > 0:
len_bar = entry.get('province_kill_request')
killer = 'کشتارگاه' if entry.get('killer') == False else 'کشتارکن'
name = entry.get("name").replace(' ', '_')
mobile = entry.get("kill_house_operator").get("user").get("mobile")
total_quantity = "{:,}".format(int(total_quantity))
current_message = base_message
current_message += f'🟢 {killer} #{name} ({mobile})\n'
current_message += f'تعداد کل بار: {len(len_bar)}\n'
current_message += f'حجم کل بار: {total_quantity}\n'
current_message += f'--------------------------------\n'
m = 1
for request1 in entry.get('province_kill_request', []):
poultry = request1.get('poultry', 'نامشخص')
poultry_mobile = request1.get('poultry_mobile', 'نامشخص')
quantity = request1.get('quantity', 0)
average_weight = request1.get('Index_weight', 'نامشخص')
weight = request1.get('weight', 'نامشخص')
car_type = request1.get('car_type', 'نامشخص')
driver_name = request1.get('driver_name', 'نامشخص')
traffic_code = request1.get('traffic_code', 'نامشخص')
pelak = request1.get('pelak', 'نامشخص')
quantity = "{:,}".format(int(quantity))
weight = "{:,}".format(int(weight))
current_message += f'\n🔸{m}-مرغدار: {poultry} ({poultry_mobile})\n'
current_message += f'میانگین وزن بار: {average_weight}\n'
current_message += f'حجم بار: {quantity}\n'
current_message += f'وزن بار: {weight}\n'
current_message += f'نوع ماشین: {car_type}\n'
current_message += f'نام راننده: {driver_name}\n'
current_message += f'کد حمل و نقل: {traffic_code}\n'
current_message += f'پلاک: {pelak}\n'
current_message += '-' * 30 + '\n'
m += 1
data = {
'chat_id': chat_id,
'text': current_message,
}
response = requests.post(url, data=data, verify=False)
if response.status_code == 200:
messages_sent += 1
kill_house_num += 1
return HttpResponse(f'{messages_sent} پیام با موفقیت ارسال شد.')
return HttpResponse('Error fetching data', status=500)
def bot_eitaa_free_bar(request):
url = f'https://eitaayar.ir/api/{token}/sendMessage'
date = datetime.now().date()
response = requests.get(
f'https://{base_url_for_sms_report}backend.rasadyaar.ir/province_request_letter/?date={date}')
date_time_jalali = format_datetime_to_shamsi(date)
if response.status_code == 200:
data = response.json()
date_shamsi = shamsi_date(date).replace('-', '_')
out_province = data.get('out_province', [])
base_message = '🗓📢❗ سامانه رصدیار، زنجیره تامین،تولید و توزیع مرغ گوشتی📢❗\n'
base_message += f'{date_time_jalali}\n'
base_message += f' #گزارش_خارج_استان #{date_shamsi}\n\n'
base_message += f'تعداد کل سفارشات: {len(out_province)}\n'
base_message += f'\n'
messages = []
current_message = base_message
m = 1
for entry in out_province:
quantity = entry['quantity']
poultry_name = entry['poultry']['user']['fullname']
poultry_mobile = entry['poultry']['user']['mobile']
buyer_fullname = entry['out_province_poultry_request_buyer']['fullname']
buyer_mobile = entry['out_province_poultry_request_buyer']['mobile']
buyer_city = entry['out_province_poultry_request_buyer']['city']
city = entry['poultry']['user']['city']['name']
weight = entry.get('Index_weight', 'نامشخص')
weight_all = quantity * weight
quantity = "{:,}".format(entry['quantity'])
weight_all = "{:,}".format(int(weight_all))
new_message_part = f'{m}:\n'
new_message_part += f"🟢 مرغدار : {poultry_name} ({poultry_mobile})\n"
new_message_part += f"شهر: {city}\n"
new_message_part += f"🔸 خریدار : {buyer_fullname} ({buyer_mobile})\n"
new_message_part += f"شهر: {buyer_city}\n"
new_message_part += f"میانگین وزن : {weight}\n"
new_message_part += f" تعداد : {quantity}\n"
new_message_part += f" وزن تقریبی : {weight_all}\n"
new_message_part += '\n\n'
m += 1
if len(current_message) + len(new_message_part) > 4000:
messages.append(current_message)
current_message = base_message
current_message += new_message_part
if current_message and current_message != base_message:
messages.append(current_message)
for message in messages:
data = {
'chat_id': chat_id,
'text': message,
}
response = requests.post(url, data=data, verify=False)
return HttpResponse(f'{len(messages)} پیام ارسال شد.')
def bot_eitaa_for_hatching_gt_50(request):
url = f'https://eitaayar.ir/api/{token}/sendMessage'
date = datetime.now().date()
date_time_jalali = format_datetime_to_shamsi(date)
date_shamsi = shamsi_date(date).replace('-', '_')
base_message = '🗓📢❗ سامانه رصدیار، زنجیره تامین،تولید و توزیع مرغ گوشتی📢❗\n'
base_message += f'{date_time_jalali}\n'
base_message += f' #گزارش_فارم_بالای_50_روز #{date_shamsi}\n\n'
base_message += f'\n'
poultry_hatching = PoultryHatching.objects.filter(trash=False, chicken_age__gte=50)
m = 1
for hatching in poultry_hatching:
message = f'{m}-مرغدار {hatching.poultry.unit_name}\n' \
f''
m += 1
base_message += message
data = {
'chat_id': chat_id,
'text': base_message,
}
response = requests.post(url, data=data, verify=False)
return HttpResponse(f'{len(base_message)} پیام ارسال شد.')
def bot_eitaa_for_province_kill_request(request):
if base_url_for_sms_report in ('ma', 'test'):
url = f'https://eitaayar.ir/api/{token}/sendMessage'
date = datetime.now().date()
province_kill_requests = ProvinceKillRequest.objects.filter(trash=False, state__in=('accepted', 'pending'),
return_to_province=False,
kill_request__recive_date__date=date) \
.order_by('-kill_request__recive_date').only('main_quantity', 'quantity',
'province_request__poultry_request__Index_weight',
'main_quantity', 'province_request__poultry_request__export',
'province_request__poultry_request__poultry__unit_name',
'province_request__city_request_Poultry__poultry_request__poultry__user__mobile',
'province_request__city_request_Poultry__poultry_request__poultry__user__city__name',
'kill_request__kill_house__name',
'kill_request__kill_house__kill_house_operator__user__mobile',
'province_request__poultry_request__direct_buying',
'province_request__poultry_request__order_code',
'kill_request__kill_house__system_address__city__name')
date_time_jalali = format_datetime_to_shamsi(date)
date_shamsi = shamsi_date(date).replace('-', '_')
base_message = '🗓📢❗ سامانه رصدیار، زنجیره تامین،تولید و توزیع مرغ گوشتی📢❗\n'
base_message += f'{date_time_jalali}\n'
base_message += f' #گزارش_تخصیصات #{date_shamsi}\n\n'
base_message += f'تعداد کل تخصیصات: {len(province_kill_requests)}\n'
base_message += f'\n'
messages = []
current_message = base_message
m = 1
for entry in province_kill_requests:
main_quantity = entry.main_quantity
remain_quantity = entry.quantity if entry.return_to_province == False else 0
poultry_name = entry.province_request.poultry_request.poultry.unit_name
poultry_mobile = entry.province_request.poultry_request.poultry.user.mobile
city = entry.province_request.poultry_request.poultry.user.city.name
buyer = entry.kill_request.kill_house.name
buyer_city = entry.kill_request.kill_house.system_address.city.name
buyer_mobile = entry.kill_request.kill_house.kill_house_operator.user.mobile
weight = entry.province_request.poultry_request.Index_weight
order_code = entry.province_request.poultry_request.order_code
weight_all = remain_quantity * weight
main_quantity = "{:,}".format(main_quantity)
remain_quantity = "{:,}".format(remain_quantity)
weight_all = "{:,}".format(int(weight_all))
if entry.province_request.poultry_request.direct_buying == True:
province_type = 'خرید مستقیم'
elif entry.province_request.poultry_request.export == True:
province_type = 'فروش به خارج استان'
else:
province_type = 'اتحادیه'
new_message_part = f'{m}:\n'
new_message_part += f"🟢 مرغدار : {poultry_name} ({poultry_mobile})\n"
new_message_part += f"شهر: {city}\n"
new_message_part += f"کد سفارش: {order_code}\n"
new_message_part += f"نوع فروش: {province_type}\n"
new_message_part += f" تعداد تخصیصی :{main_quantity}\n"
new_message_part += f"مانده قابل تخصیص :{remain_quantity}\n"
new_message_part += f"میانگین وزن : {weight}\n"
new_message_part += f"وزن تقریبی :{weight_all}\n"
new_message_part += f"\n"
new_message_part += f"🔴🔴خریدار : {buyer} ({buyer_mobile})\n"
new_message_part += f"شهر خریدار: {buyer_city}\n"
new_message_part += '\n\n'
m += 1
if len(current_message) + len(new_message_part) > 4000:
messages.append(current_message)
current_message = base_message
current_message += new_message_part
if current_message and current_message != base_message:
messages.append(current_message)
for message in messages:
data = {
'chat_id': chat_id,
'text': message,
}
response = requests.post(url, data=data, verify=False)
return HttpResponse(f'{len(messages)} پیام ارسال شد.')
def bot_eitaa_for_each_province_kill_request(entry, vet):
if base_url_for_sms_report in ('ma', 'test'):
messages = []
chat_id_eitaa = None
if vet:
chat_id_eitaa = TokenEitaaForEachVet.objects.filter(vet_mobile=vet.vet.user.mobile).first()
url = f'https://eitaayar.ir/api/{token}/sendMessage'
date = datetime.now().date()
date_time_jalali = format_datetime_to_shamsi(date)
date_shamsi = shamsi_date(date).replace('-', '_')
base_message = '🗓📢❗ سامانه رصدیار، زنجیره تامین،تولید و توزیع مرغ گوشتی📢❗\n'
base_message += f'{date_time_jalali}\n'
base_message += f' #گزارش_تخصیصات #{date_shamsi}\n\n'
base_message += f'\n'
current_message = base_message
m = 1
main_quantity = entry.main_quantity
remain_quantity = (entry.main_quantity - entry.total_killed_quantity) if (
entry.main_quantity - entry.total_killed_quantity) > 0 else 0
poultry_name = entry.province_request.poultry_request.poultry.unit_name
poultry_mobile = entry.province_request.poultry_request.poultry.user.mobile
city = entry.province_request.poultry_request.poultry.user.city.name
buyer = entry.kill_request.kill_house.name
buyer_city = entry.kill_request.kill_house.system_address.city.name
buyer_mobile = entry.kill_request.kill_house.kill_house_operator.user.mobile
weight = entry.province_request.poultry_request.Index_weight
order_code = entry.province_request.poultry_request.order_code
weight_all = entry.total_killed_quantity * weight
main_quantity = "{:,}".format(main_quantity)
remain_quantity = "{:,}".format(remain_quantity)
weight_all = "{:,}".format(int(weight_all))
if entry.province_request.poultry_request.direct_buying == True:
province_type = 'خرید مستقیم'
elif entry.province_request.poultry_request.export == True:
province_type = 'فروش به خارج استان'
elif entry.market == True:
province_type = 'پنل معاملاتی'
else:
province_type = 'اتحادیه'
new_message_part = f'{m}:\n'
new_message_part += f"🟢 مرغدار : {poultry_name} ({poultry_mobile})\n"
new_message_part += f"شهر: {city}\n"
new_message_part += f"کد سفارش: {order_code}\n"
new_message_part += f"نوع فروش: {province_type}\n"
new_message_part += f" تعداد تخصیصی :{main_quantity}\n"
new_message_part += f"مانده قابل تخصیص :{remain_quantity}\n"
new_message_part += f"میانگین وزن : {weight}\n"
new_message_part += f"وزن تقریبی :{weight_all}\n"
new_message_part += f"\n"
new_message_part += f"🔴🔴خریدار : {buyer} ({buyer_mobile})\n"
new_message_part += f"شهر خریدار: {buyer_city}\n"
new_message_part += '\n\n'
m += 1
if len(current_message) + len(new_message_part) > 4000:
messages.append(current_message)
current_message = base_message
current_message += new_message_part
if current_message and current_message != base_message:
messages.append(current_message)
if chat_id_eitaa:
chat_id_eitaa = chat_id_eitaa.token
for message in messages:
data = {
'chat_id': chat_id_eitaa,
'text': message,
}
response = requests.post(url, data=data, verify=False)
for message in messages:
data = {
'chat_id': chat_id,
'text': message,
}
response = requests.post(url, data=data, verify=False)
def bot_eitaa_for_each_delete_province_kill_request(entry):
url = f'https://eitaayar.ir/api/{token}/sendMessage'
date = datetime.now().date()
order_code = entry.province_request.poultry_request.order_code
date_time_jalali = format_datetime_to_shamsi(date)
date_shamsi = shamsi_date(date).replace('-', '_')
base_message = '🗓📢❗ سامانه رصدیار، زنجیره تامین،تولید و توزیع مرغ گوشتی📢❗\n'
base_message += f'{date_time_jalali}\n'
base_message += f' #گزارش_تخصیصات_حذف_شده #{date_shamsi}\n\n'
base_message += f'❗❗❗❗اصلاحیه تخصیص حذف شده با کد سفارش {order_code}❗❗❗❗\n\n'
base_message += f'\n'
messages = []
current_message = base_message
m = 1
main_quantity = entry.main_quantity
remain_quantity = (entry.main_quantity - entry.total_killed_quantity) if (
entry.main_quantity - entry.total_killed_quantity) > 0 else 0
poultry_name = entry.province_request.poultry_request.poultry.unit_name
poultry_mobile = entry.province_request.poultry_request.poultry.user.mobile
city = entry.province_request.poultry_request.poultry.user.city.name
buyer = entry.kill_request.kill_house.name
buyer_city = entry.kill_request.kill_house.system_address.city.name
buyer_mobile = entry.kill_request.kill_house.kill_house_operator.user.mobile
weight = entry.province_request.poultry_request.Index_weight
weight_all = entry.total_killed_quantity * weight
main_quantity = "{:,}".format(main_quantity)
remain_quantity = "{:,}".format(remain_quantity)
weight_all = "{:,}".format(int(weight_all))
if entry.province_request.poultry_request.direct_buying == True:
province_type = 'خرید مستقیم'
elif entry.province_request.poultry_request.export == True:
province_type = 'فروش به خارج استان'
elif entry.market == True:
province_type = 'پنل معاملاتی'
else:
province_type = 'اتحادیه'
new_message_part = f'{m}:\n'
new_message_part += f"🟢 مرغدار : {poultry_name} ({poultry_mobile})\n"
new_message_part += f"شهر: {city}\n"
new_message_part += f"کد سفارش: {order_code}\n"
new_message_part += f"نوع فروش: {province_type}\n"
new_message_part += f" تعداد تخصیصی :{main_quantity}\n"
new_message_part += f"مانده قابل تخصیص :{remain_quantity}\n"
new_message_part += f"میانگین وزن : {weight}\n"
new_message_part += f"وزن تقریبی :{weight_all}\n"
new_message_part += f"\n"
new_message_part += f"🔴🔴خریدار : {buyer} ({buyer_mobile})\n"
new_message_part += f"شهر خریدار: {buyer_city}\n"
new_message_part += '\n\n'
new_message_part += f'❗❗❗تخصیص با کد سفارش {order_code} حذف شده است❗❗❗'
m += 1
if len(current_message) + len(new_message_part) > 4000:
messages.append(current_message)
current_message = base_message
current_message += new_message_part
if current_message and current_message != base_message:
messages.append(current_message)
for message in messages:
data = {
'chat_id': chat_id,
'text': message,
}
response = requests.post(url, data=data, verify=False)
def bot_eitaa_out_province_live_bar(request, poultry_requests, vet):
chat_id_eitaa = None
if vet:
chat_id_eitaa = TokenEitaaForEachVet.objects.filter(vet_mobile=vet.vet.user.mobile).first()
url = f'https://eitaayar.ir/api/{token}/sendMessage'
date = datetime.now().date()
response = poultry_requests
date_time_jalali = format_datetime_to_shamsi(date)
date_shamsi = shamsi_date(date).replace('-', '_')
out_province = len(poultry_requests)
base_message = '🗓📢❗ سامانه رصدیار، زنجیره تامین،تولید و توزیع مرغ گوشتی📢❗\n'
base_message += f'{date_time_jalali}\n'
base_message += f' #گزارش_فروش_مرغ_زندهارج_استان #{date_shamsi}\n\n'
base_message += f'تعداد کل سفارشات: {out_province}\n'
base_message += f'\n'
messages = []
current_message = base_message
m = 1
quantity = poultry_requests.aggregate(total=Sum('quantity'))[
'total'] or 0
poultry_name = poultry_requests.last().poultry.user.fullname
poultry_mobile = poultry_requests.last().poultry.user.mobile
buyer_fullname = poultry_requests.last().out_province_poultry_request_buyer.fullname
buyer_mobile = poultry_requests.last().out_province_poultry_request_buyer.mobile
buyer_city = poultry_requests.last().out_province_poultry_request_buyer.city
city = poultry_requests.last().poultry.user.city.name
weight = poultry_requests.aggregate(total=Sum('Index_weight'))[
'total'] or 0
weight = weight / out_province if out_province > 0 else 0
weight_all = quantity * weight
quantity = "{:,}".format(quantity)
weight_all = "{:,}".format(int(weight_all))
new_message_part = f'{m}:\n'
new_message_part += f"🟢 مرغدار : {poultry_name} ({poultry_mobile})\n"
new_message_part += f"شهر: {city}\n"
new_message_part += f"🔸 خریدار : {buyer_fullname} ({buyer_mobile})\n"
new_message_part += f"شهر: {buyer_city}\n"
new_message_part += f"میانگین وزن : {weight}\n"
new_message_part += f" تعداد : {quantity}\n"
new_message_part += f" وزن تقریبی : {weight_all}\n"
new_message_part += '\n\n'
m += 1
if len(current_message) + len(new_message_part) > 4000:
messages.append(current_message)
current_message = base_message
current_message += new_message_part
if current_message and current_message != base_message:
messages.append(current_message)
if chat_id_eitaa:
chat_id_eitaa = chat_id_eitaa.token
for message in messages:
data = {
'chat_id': chat_id_eitaa,
'text': message,
}
response = requests.post(url, data=data, verify=False)
for message in messages:
data = {
'chat_id': chat_id,
'text': message,
}
response = requests.post(url, data=data, verify=False)
return HttpResponse(f'{len(messages)} پیام ارسال شد.')
def transaction_for_eata(request, transaction):
if transaction.payer_type == 'poultry':
pass
else:
url = f'https://eitaayar.ir/api/{token}/sendMessage'
date = datetime.now().date()
if base_url_for_sms_report == 'ma':
province = 'مرکزی'
elif base_url_for_sms_report == 'ha':
province = 'همدان'
elif base_url_for_sms_report == 'ku':
province = 'کردستان'
elif base_url_for_sms_report == 'bu':
province = 'بوشهر'
else:
province = 'تست'
date_shamsi = shamsi_date(date).replace('-', '_')
base_message = '🗓📢❗ سامانه رصدیار، زنجیره تامین،تولید و توزیع مرغ گوشتی📢❗\n'
base_message += f' #گزارش_تراکنش_پرداختی #{date_shamsi}\n'
base_message += f' #استان_{province}\n\n'
base_message += f'\n'
messages = []
current_message = base_message
from_date = jdatetime.date.fromgregorian(
year=transaction.date.year,
month=transaction.date.month,
day=transaction.date.day
).strftime('%Y-%m-%d')
reversed_date = reversed(from_date.split("-"))
separate = "-"
date = separate.join(reversed_date)
union_share = "{:,}".format(transaction.union_share)
company_share = "{:,}".format(transaction.company_share)
guilds_share = "{:,}".format(transaction.guilds_share)
others_share = "{:,}".format(transaction.other_share)
amount = "{:,}".format(transaction.amount)
if transaction.payer_type == 'kill_house':
if transaction.kill_house.killer == True and transaction.kill_house.type == 'exclusive':
parent = KillHousePercentage.objects.get(kill_house=transaction.kill_house, trash=False)
payer_type = f'کشتارکن اختصاصی {parent.kill_house_for_killer.name}'
elif transaction.kill_house.killer == True and transaction.kill_house.type == 'public':
payer_type = 'کشتارکن عمومی'
else:
payer_type = 'کشتارگاه'
payer_unit_name = transaction.kill_house.name
else:
payer_type = 'مرغدار'
payer_unit_name = transaction.poultry.unit_name
new_message_part = f"🟢 پرداخت کننده : {transaction.payer_fullname}\n"
new_message_part += f"🟢 تلفن : {transaction.payer_mobile}\n"
new_message_part += f"🟢 ماهیت پرداخت کننده : {payer_type}\n"
new_message_part += f"🟢 نام واحد : {payer_unit_name}\n"
new_message_part += f"تاریخ پرداخت: {date}\n"
new_message_part += f"مبلغ کل تراکنش: {amount} ریال \n"
new_message_part += f"\n"
new_message_part += f"🔸 سهم اتحادیه مرغدارن : {union_share} ریال \n"
new_message_part += f"🔸 سهم شرکت : {company_share} ریال \n"
new_message_part += f"🔸 سهم صنف پروتئین : {guilds_share} ریال \n"
new_message_part += f"🔸 سهم دامپزشک : {others_share} ریال \n"
new_message_part += f"\n"
if base_url_for_sms_report == 'ma':
new_message_part += f"‼توجه: سهم صنف پروتئین به حساب اتحادیه مرغدارن واریز شد.‼"
else:
new_message_part += f"‼توجه: سهم صنف پروتئین و مسئول فنی فارم به حساب اتحادیه مرغدارن واریز شد.‼"
new_message_part += '\n\n'
if len(current_message) + len(new_message_part) > 4000:
messages.append(current_message)
current_message = base_message
current_message += new_message_part
if current_message and current_message != base_message:
messages.append(current_message)
for message in messages:
data = {
'chat_id': chat_id_mali,
'text': message,
}
response = requests.post(url, data=data, verify=False)
return HttpResponse('ok')
def daily_cron_job_transaction_for_eata():
total_wage_info = TotalWageInformation.objects.get(trash=False)
serializer = TotalWageInformationSerializer(total_wage_info).data
total_wage = "{:,}".format(int(serializer['wage_info']['total_wage']))
total_unpaid_wage = "{:,}".format(int(serializer['wage_info']['total_unpaid_wage']))
total_paid_wage = "{:,}".format(int(serializer['wage_info']['total_paid_wage']))
company_unpaid_wage = next(
(share["total_unpaid_wage"] for share in serializer['wage_info']['shares'] if share["name"] == "شرکت"), None)
company_total_unpaid_wage = "{:,}".format(int(company_unpaid_wage)) if company_unpaid_wage is not None else "0"
company_total_wage = next(
(share["total_wage"] for share in serializer['wage_info']['shares'] if share["name"] == "شرکت"), None)
company_total_wage = "{:,}".format(int(company_total_wage)) if company_total_wage is not None else "0"
company_paid_wage = next(
(share["total_paid_wage"] for share in serializer['wage_info']['shares'] if share["name"] == "شرکت"),
None)
company_total_paid_wage = "{:,}".format(int(company_paid_wage)) if company_paid_wage is not None else "0"
guilds_unpaid_wage = next(
(share["total_unpaid_wage"] for share in serializer['wage_info']['shares'] if share["name"] == "صنف پروتئین"),
None)
guilds_total_unpaid_wage = "{:,}".format(int(guilds_unpaid_wage)) if guilds_unpaid_wage is not None else "0"
guilds_wage = next(
(share["total_wage"] for share in serializer['wage_info']['shares'] if share["name"] == "صنف پروتئین"), None)
guilds_total_wage = "{:,}".format(int(guilds_wage)) if guilds_wage is not None else "0"
guilds_paid_wage = next(
(share["total_paid_wage"] for share in serializer['wage_info']['shares'] if share["name"] == "صنف پروتئین"),
None)
guilds_total_paid_wage = "{:,}".format(int(guilds_paid_wage)) if guilds_paid_wage is not None else "0"
union_unpaid_wage = next(
(share["total_unpaid_wage"] for share in serializer['wage_info']['shares'] if share["name"] == "اتحادیه"), None)
union_total_unpaid_wage = "{:,}".format(int(union_unpaid_wage)) if union_unpaid_wage is not None else "0"
union_wage = next(
(share["total_wage"] for share in serializer['wage_info']['shares'] if share["name"] == "اتحادیه"), None)
union_total_wage = "{:,}".format(int(union_wage)) if union_wage is not None else "0"
union_paid_wage = next(
(share["total_paid_wage"] for share in serializer['wage_info']['shares'] if share["name"] == "اتحادیه"),
None)
union_total_paid_wage = "{:,}".format(int(union_paid_wage)) if union_paid_wage is not None else "0"
other_unpaid_wage = next(
(share["total_unpaid_wage"] for share in serializer['wage_info']['shares'] if share["name"] == "دامپزشک"), None)
other_total_unpaid_wage = "{:,}".format(int(other_unpaid_wage)) if other_unpaid_wage is not None else "0"
other_wage = next(
(share["total_wage"] for share in serializer['wage_info']['shares'] if share["name"] == "دامپزشک"), None)
other_total_wage = "{:,}".format(int(other_wage)) if other_wage is not None else "0"
other_paid_wage = next(
(share["total_paid_wage"] for share in serializer['wage_info']['shares'] if share["name"] == "دامپزشک"), None)
other_total_paid_wage = "{:,}".format(int(other_paid_wage)) if other_paid_wage is not None else "0"
date = datetime.now().date()
url = f'https://eitaayar.ir/api/{token}/sendMessage'
if base_url_for_sms_report == 'ma':
province = 'مرکزی'
elif base_url_for_sms_report == 'ha':
province = 'همدان'
elif base_url_for_sms_report == 'ku':
province = 'کردستان'
elif base_url_for_sms_report == 'bu':
province = 'بوشهر'
else:
province = 'تست'
date_shamsi = shamsi_date(date).replace('-', '_')
base_message = '🗓📢❗ سامانه رصدیار، زنجیره تامین،تولید و توزیع مرغ گوشتی📢❗\n'
base_message += f' #اطلاعات_جامع_تعرفه #{date_shamsi}\n'
base_message += f' #استان_{province}\n\n'
base_message += f'\n'
messages = []
current_message = base_message
union_share = union_total_paid_wage
company_share = company_total_paid_wage
guilds_share = guilds_total_paid_wage
other_share = other_total_paid_wage
amount = total_paid_wage
new_message_part = f"مجموع تعرفه: {total_wage} ریال \n"
new_message_part += f"مجموع پرداختی: {amount} ریال \n"
new_message_part += f"مجموع باقیمانده: {total_unpaid_wage} ریال \n"
new_message_part += f"\n"
new_message_part += f"🔸 کل سهم اتحادیه مرغدارن : {union_total_wage} ریال \n"
new_message_part += f"🔸واریزی سهم اتحادیه مرغدارن : {union_share} ریال \n"
new_message_part += f"🔸مانده سهم اتحادیه مرغدارن : {union_total_unpaid_wage} ریال \n"
new_message_part += f"\n"
new_message_part += f"🔹کل سهم شرکت : {company_total_wage} ریال \n"
new_message_part += f"🔹واریزی سهم شرکت : {company_share} ریال \n"
new_message_part += f"🔹مانده سهم شرکت : {company_total_unpaid_wage} ریال \n"
new_message_part += f"\n"
new_message_part += f"🔻 کل سهم صنف پروتئین : {guilds_total_wage} ریال \n"
new_message_part += f"🔻 واریزی سهم صنف پروتئین : {guilds_share} ریال \n"
new_message_part += f"🔻 مانده سهم صنف پروتئین : {guilds_total_unpaid_wage} ریال \n"
new_message_part += f"\n"
if base_url_for_sms_report == 'ma':
new_message_part += f"‼توجه: سهم صنف پروتئین به حساب اتحادیه مرغدارن واریز شد.‼"
else:
new_message_part += f"\n"
new_message_part += f"🔻 کل سهم دامپزشک : {other_total_wage} ریال \n"
new_message_part += f"🔻 واریزی سهم دامپزشک : {other_share} ریال \n"
new_message_part += f"🔻 مانده سهم دامپزشک : {other_total_unpaid_wage} ریال \n"
new_message_part += f"\n"
new_message_part += f"‼توجه: سهم صنف پروتئین و مسئول فنی فارم به حساب اتحادیه مرغدارن واریز شد.‼"
new_message_part += '\n\n'
if len(current_message) + len(new_message_part) > 4000:
messages.append(current_message)
current_message = base_message
current_message += new_message_part
if current_message and current_message != base_message:
messages.append(current_message)
for message in messages:
data = {
'chat_id': chat_id_mali,
'text': message,
}
response = requests.post(url, data=data, verify=False)
def bot_eitaa_for_bug_reporter(text):
token = "bot363954:e3d4dca2-f1b3-4f44-b5a9-d48aa11c79b8"
chat_id = 10473672
url = f'https://eitaayar.ir/api/{token}/sendMessage'
t = f"\n"
t += f" {text['result']} \n"
t += f"\n"
t += f"\n"
t += f"عنوان خطا:"
t += f"\n"
t += f"\n"
t += f"{text['error_title']} \n"
t += f"\n"
t += f"\n"
t += f"پیغام خطا:"
t += f"\n"
t += f"\n"
t += f"{text['error_message']} \n"
t += f"\n"
t += f"\n"
t += f"توضیحات بیشتر:"
t += f"\n"
t += f"\n"
t += f"{text['error_traceback']} \n"
data = {
'chat_id': chat_id,
'text': t,
}
response = requests.post(url, data=data, verify=False)
def daily_manual_transaction_for_eata(request):
total_wage_info = TotalWageInformation.objects.get(trash=False)
serializer = TotalWageInformationSerializer(total_wage_info).data
total_wage = "{:,}".format(int(serializer['wage_info']['total_wage']))
total_unpaid_wage = "{:,}".format(int(serializer['wage_info']['total_unpaid_wage']))
total_paid_wage = "{:,}".format(int(serializer['wage_info']['total_paid_wage']))
company_unpaid_wage = next(
(share["total_unpaid_wage"] for share in serializer['wage_info']['shares'] if share["name"] == "شرکت"), None)
company_total_unpaid_wage = "{:,}".format(int(company_unpaid_wage)) if company_unpaid_wage is not None else "0"
company_total_wage = next(
(share["total_wage"] for share in serializer['wage_info']['shares'] if share["name"] == "شرکت"), None)
company_total_wage = "{:,}".format(int(company_total_wage)) if company_total_wage is not None else "0"
company_paid_wage = next(
(share["total_paid_wage"] for share in serializer['wage_info']['shares'] if share["name"] == "شرکت"),
None)
company_total_paid_wage = "{:,}".format(int(company_paid_wage)) if company_paid_wage is not None else "0"
guilds_unpaid_wage = next(
(share["total_unpaid_wage"] for share in serializer['wage_info']['shares'] if share["name"] == "صنف پروتئین"),
None)
guilds_total_unpaid_wage = "{:,}".format(int(guilds_unpaid_wage)) if guilds_unpaid_wage is not None else "0"
guilds_wage = next(
(share["total_wage"] for share in serializer['wage_info']['shares'] if share["name"] == "صنف پروتئین"), None)
guilds_total_wage = "{:,}".format(int(guilds_wage)) if guilds_wage is not None else "0"
guilds_paid_wage = next(
(share["total_paid_wage"] for share in serializer['wage_info']['shares'] if share["name"] == "صنف پروتئین"),
None)
guilds_total_paid_wage = "{:,}".format(int(guilds_paid_wage)) if guilds_paid_wage is not None else "0"
union_unpaid_wage = next(
(share["total_unpaid_wage"] for share in serializer['wage_info']['shares'] if share["name"] == "اتحادیه"), None)
union_total_unpaid_wage = "{:,}".format(int(union_unpaid_wage)) if union_unpaid_wage is not None else "0"
union_wage = next(
(share["total_wage"] for share in serializer['wage_info']['shares'] if share["name"] == "اتحادیه"), None)
union_total_wage = "{:,}".format(int(union_wage)) if union_wage is not None else "0"
union_paid_wage = next(
(share["total_paid_wage"] for share in serializer['wage_info']['shares'] if share["name"] == "اتحادیه"),
None)
union_total_paid_wage = "{:,}".format(int(union_paid_wage)) if union_paid_wage is not None else "0"
other_unpaid_wage = next(
(share["total_unpaid_wage"] for share in serializer['wage_info']['shares'] if share["name"] == "دامپزشک"), None)
other_total_unpaid_wage = "{:,}".format(int(other_unpaid_wage)) if other_unpaid_wage is not None else "0"
other_wage = next(
(share["total_wage"] for share in serializer['wage_info']['shares'] if share["name"] == "دامپزشک"), None)
other_total_wage = "{:,}".format(int(other_wage)) if other_wage is not None else "0"
other_paid_wage = next(
(share["total_paid_wage"] for share in serializer['wage_info']['shares'] if share["name"] == "دامپزشک"), None)
other_total_paid_wage = "{:,}".format(int(other_paid_wage)) if other_paid_wage is not None else "0"
date = datetime.now().date()
url = f'https://eitaayar.ir/api/{token}/sendMessage'
if base_url_for_sms_report == 'ma':
province = 'مرکزی'
elif base_url_for_sms_report == 'ha':
province = 'همدان'
elif base_url_for_sms_report == 'ku':
province = 'کردستان'
elif base_url_for_sms_report == 'bu':
province = 'بوشهر'
else:
province = 'تست'
date_shamsi = shamsi_date(date).replace('-', '_')
base_message = '🗓📢❗ سامانه رصدیار، زنجیره تامین،تولید و توزیع مرغ گوشتی📢❗\n'
base_message += f' #اطلاعات_جامع_تعرفه #{date_shamsi}\n'
base_message += f' #استان_{province}\n\n'
base_message += f'\n'
messages = []
current_message = base_message
union_share = union_total_paid_wage
company_share = company_total_paid_wage
guilds_share = guilds_total_paid_wage
other_share = other_total_paid_wage
amount = total_paid_wage
new_message_part = f"مجموع تعرفه: {total_wage} ریال \n"
new_message_part += f"مجموع پرداختی: {amount} ریال \n"
new_message_part += f"مجموع باقیمانده: {total_unpaid_wage} ریال \n"
new_message_part += f"\n"
new_message_part += f"🔸 کل سهم اتحادیه مرغدارن : {union_total_wage} ریال \n"
new_message_part += f"🔸واریزی سهم اتحادیه مرغدارن : {union_share} ریال \n"
new_message_part += f"🔸مانده سهم اتحادیه مرغدارن : {union_total_unpaid_wage} ریال \n"
new_message_part += f"\n"
new_message_part += f"🔹کل سهم شرکت : {company_total_wage} ریال \n"
new_message_part += f"🔹واریزی سهم شرکت : {company_share} ریال \n"
new_message_part += f"🔹مانده سهم شرکت : {company_total_unpaid_wage} ریال \n"
new_message_part += f"\n"
new_message_part += f"🔻 کل سهم صنف پروتئین : {guilds_total_wage} ریال \n"
new_message_part += f"🔻 واریزی سهم صنف پروتئین : {guilds_share} ریال \n"
new_message_part += f"🔻 مانده سهم صنف پروتئین : {guilds_total_unpaid_wage} ریال \n"
new_message_part += f"\n"
if base_url_for_sms_report == 'ma':
new_message_part += f"‼توجه: سهم صنف پروتئین به حساب اتحادیه مرغدارن واریز شد.‼"
else:
new_message_part += f"\n"
new_message_part += f"🔻 کل سهم دامپزشک : {other_total_wage} ریال \n"
new_message_part += f"🔻 واریزی سهم دامپزشک : {other_share} ریال \n"
new_message_part += f"🔻 مانده سهم دامپزشک : {other_total_unpaid_wage} ریال \n"
new_message_part += f"\n"
new_message_part += f"‼توجه: سهم صنف پروتئین و مسئول فنی فارم به حساب اتحادیه مرغدارن واریز شد.‼"
new_message_part += '\n\n'
if len(current_message) + len(new_message_part) > 4000:
messages.append(current_message)
current_message = base_message
current_message += new_message_part
if current_message and current_message != base_message:
messages.append(current_message)
for message in messages:
data = {
'chat_id': chat_id_mali,
'text': message,
}
response = requests.post(url, data=data, verify=False)
return HttpResponse('ok')
def transaction_for_eata_new(request):
transactions = InternalTransaction.objects.filter(trash=False, status='completed', date__date=datetime.now().date())
for transaction in transactions:
if transaction.payer_type == 'poultry':
pass
else:
url = f'https://eitaayar.ir/api/{token}/sendMessage'
date = datetime.now().date()
if base_url_for_sms_report == 'ma':
province = 'مرکزی'
elif base_url_for_sms_report == 'ha':
province = 'همدان'
elif base_url_for_sms_report == 'ku':
province = 'کردستان'
elif base_url_for_sms_report == 'bu':
province = 'بوشهر'
else:
province = 'تست'
date_shamsi = shamsi_date(date).replace('-', '_')
base_message = '🗓📢❗ سامانه رصدیار، زنجیره تامین،تولید و توزیع مرغ گوشتی📢❗\n'
base_message += f' #گزارش_تراکنش_پرداختی #{date_shamsi}\n'
base_message += f' #استان_{province}\n\n'
base_message += f'\n'
messages = []
current_message = base_message
from_date = jdatetime.date.fromgregorian(
year=transaction.date.year,
month=transaction.date.month,
day=transaction.date.day
).strftime('%Y-%m-%d')
reversed_date = reversed(from_date.split("-"))
separate = "-"
date = separate.join(reversed_date)
union_share = "{:,}".format(transaction.union_share)
company_share = "{:,}".format(transaction.company_share)
guilds_share = "{:,}".format(transaction.guilds_share)
others_share = "{:,}".format(transaction.other_share)
amount = "{:,}".format(transaction.amount)
if transaction.payer_type == 'kill_house':
if transaction.kill_house.killer == True and transaction.kill_house.type == 'exclusive':
parent = KillHousePercentage.objects.get(kill_house=transaction.kill_house, trash=False)
payer_type = f'کشتارکن اختصاصی {parent.kill_house_for_killer.name}'
elif transaction.kill_house.killer == True and transaction.kill_house.type == 'public':
payer_type = 'کشتارکن عمومی'
else:
payer_type = 'کشتارگاه'
payer_unit_name = transaction.kill_house.name
else:
payer_type = 'مرغدار'
payer_unit_name = transaction.poultry.unit_name
new_message_part = f"🟢 پرداخت کننده : {transaction.payer_fullname}\n"
new_message_part += f"🟢 تلفن : {transaction.payer_mobile}\n"
new_message_part += f"🟢 ماهیت پرداخت کننده : {payer_type}\n"
new_message_part += f"🟢 نام واحد : {payer_unit_name}\n"
new_message_part += f"تاریخ پرداخت: {date}\n"
new_message_part += f"مبلغ کل تراکنش: {amount} ریال \n"
new_message_part += f"\n"
new_message_part += f"🔸 سهم اتحادیه مرغدارن : {union_share} ریال \n"
new_message_part += f"🔸 سهم شرکت : {company_share} ریال \n"
new_message_part += f"🔸 سهم صنف پروتئین : {guilds_share} ریال \n"
new_message_part += f"🔸 سهم دامپزشک : {others_share} ریال \n"
new_message_part += f"\n"
if base_url_for_sms_report == 'ma':
new_message_part += f"‼توجه: سهم صنف پروتئین به حساب اتحادیه مرغدارن واریز شد.‼"
else:
new_message_part += f"‼توجه: سهم صنف پروتئین و مسئول فنی فارم به حساب اتحادیه مرغدارن واریز شد.‼"
new_message_part += '\n\n'
if len(current_message) + len(new_message_part) > 4000:
messages.append(current_message)
current_message = base_message
current_message += new_message_part
if current_message and current_message != base_message:
messages.append(current_message)
for message in messages:
data = {
'chat_id': chat_id_mali,
'text': message,
}
response = requests.post(url, data=data, verify=False)
return HttpResponse('ok')
def daily_report_for_each_vet_farm_manual(request):
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
url = f'https://eitaayar.ir/api/{token}/sendMessage'
today = datetime.now().date()
date_time_jalali = format_datetime_to_shamsi(today)
date_shamsi = shamsi_date(date1).replace('-', '_')
date_shamsi2 = shamsi_date(date2).replace('-', '_')
vet_tokens = list(
TokenEitaaForEachVet.objects
.all()
.only("vet_mobile", "token")
.values_list('vet_mobile', flat=True)
.distinct()
)
if not vet_tokens:
return HttpResponse('no vets')
vet_farms_qs = VetFarm.objects.filter(trash=False, vet__user__mobile__in=vet_tokens) \
.only("id", "vet__user__mobile", "poultry__id")
poultry_qs = Poultry.objects.filter(trash=False, id__in=vet_farms_qs.values_list('poultry__id', flat=True)) \
.only("id", "unit_name", "breeding_unique_id")
poultry_map = {p.id: p.breeding_unique_id for p in poultry_qs}
poultry_breeding_ids = set(poultry_map.values())
vet_farm_pairs = list(vet_farms_qs.values_list('vet__user__mobile', 'poultry__id'))
breeding_to_vets = {}
for vet_mobile, poultry_id in vet_farm_pairs:
breeding = poultry_map.get(poultry_id)
if breeding:
breeding_to_vets.setdefault(breeding, set()).add(vet_mobile)
kill_request_qs = KillHouseRequest.objects.filter(
trash=False,
kill_request__recive_date__date__gte=date1,
kill_request__recive_date__date__lte=date2,
province_request__poultry_request__poultry__in=poultry_qs
).only(
"bar_code", "accepted_real_quantity", "clearance_code", "quarantine_quantity",
"quarantine_code_state",
"kill_request__recive_date",
"killhouse_user__name",
"province_request__poultry_request__poultry__unit_name",
)
poultry_request_out_qs = PoultryRequest.objects.filter(
trash=False,
out=True,
send_date__date__gte=date1,
send_date__date__lte=date2,
poultry__in=poultry_qs
).only(
"order_code", "quantity", "send_date", "quarantine_code",
"buyer_fullname", "buyer_province", "buyer_city",
"poultry__unit_name"
)
kill_house_request_code_quarantine = list(kill_request_qs.values_list('clearance_code', flat=True).distinct())
kill_house_free_sale = list(poultry_request_out_qs.filter(quarantine_code__isnull=False)
.values_list('quarantine_code', flat=True).distinct())
result = list(filter(None, kill_house_request_code_quarantine)) + list(filter(None, kill_house_free_sale))
rsi_url = (
f'https://rsibackend.rasadyar.com/app/send_different_bar/?province={base_url_for_sms_report}'
f'&date1={date1}&date2={date2}'
)
try:
rsi_resp = requests.post(rsi_url, json=result, headers={'Content-Type': 'application/json'})
rsi_data = rsi_resp.json() if rsi_resp.status_code == 200 else []
except Exception:
rsi_data = []
diffrent_rsi_by_vet = {vet: {'in': [], 'out': []} for vet in vet_tokens}
for data in rsi_data:
try:
part_code = data['hatching']['poultry']['PartIdCode']
except Exception:
continue
if part_code not in breeding_to_vets:
continue
date_str = str(data.get('Date', '')).split('T')[0]
try:
date_n = datetime.strptime(date_str, '%Y-%m-%d').date()
except Exception:
continue
info = 'کد قرنطینه: {0} - حجم: {1} قطعه-مرغدار:{2} - مقصد بار: {3} - تاریخ بار: ({4})'.format(
data.get('TrackingCode', ''),
to_locale_str(int(data.get('GoodAmount', 0))),
data.get('hatching', {}).get('poultry', {}).get('UnitName', ''),
data.get('DesUnitName', ''),
shamsi_date(date_n),
)
vets_for_part = breeding_to_vets.get(part_code, set())
for v in vets_for_part:
if data.get('Out') is False:
diffrent_rsi_by_vet[v]['in'].append(info)
else:
diffrent_rsi_by_vet[v]['out'].append(info)
for vet_mobile in vet_tokens:
vet_specific_farms_qs = vet_farms_qs.filter(vet__user__mobile=vet_mobile)
if not vet_specific_farms_qs.exists():
continue
vet_poultry_ids = list(vet_specific_farms_qs.values_list('poultry__id', flat=True).distinct())
vet_kill_request = kill_request_qs.filter(
province_request__poultry_request__poultry__in=vet_poultry_ids
)
vet_poultry_request_out = poultry_request_out_qs.filter(poultry__in=vet_poultry_ids)
base_message = (
'🗓📢❗ سامانه رصدیار، زنجیره تامین،تولید و توزیع مرغ گوشتی📢❗\n'
f'{date_time_jalali}\n'
f' #گزارش_بارهای_فاقد_مجوز_از_تاریخ_{date_shamsi}ااریخ_{date_shamsi2} #\n\n'
f'\n'
)
current_message = base_message
messages = []
def _add_text(txt):
nonlocal current_message, messages, base_message
if not txt:
return
if len(current_message) + len(txt) > 4000:
messages.append(current_message)
current_message = base_message
current_message += txt
in_has_code_qs = vet_kill_request.filter(clearance_code__isnull=False)
in_no_code_qs = vet_kill_request.filter(clearance_code__isnull=True)
in_has_code_count = in_has_code_qs.count()
in_no_code_count = in_no_code_qs.count()
base_vet_message = 'دامپزشک محترم فارم({0}) گزارش عملکرد بارها به شرح زیر میباشد:\n'.format(
vet_specific_farms_qs.first()
.vet.user.fullname if vet_specific_farms_qs.first() else '-')
_add_text(base_vet_message)
bars_info = []
for kill_req in in_no_code_qs:
try:
unit_name = kill_req.province_request.poultry_request.poultry.unit_name
except Exception:
unit_name = ''
bars_info.append(
'کد بار: {0} - حجم: {1} قطعه-مرغدار:{4} - مقصد بار: {2} - تاریخ بار: ({3})'.format(
kill_req.bar_code,
to_locale_str(int(kill_req.accepted_real_quantity or 0)),
getattr(kill_req.killhouse_user, 'name', ''),
shamsi_date(kill_req.kill_request.recive_date) if getattr(kill_req.kill_request, 'recive_date',
None) else '',
unit_name
)
)
bars_details = "\n".join([f"{i + 1}. {info}" for i, info in enumerate(bars_info)])
diffrent_bars_info = []
diffrent_qs = in_has_code_qs.filter(~Q(quarantine_quantity=F('quantity')))
for kill_req in diffrent_qs:
if kill_req.quarantine_quantity:
quarantine_quantity = to_locale_str(int(kill_req.quarantine_quantity))
diffrent_quantity = to_locale_str(
int(kill_req.quarantine_quantity) - int(kill_req.accepted_real_quantity))
else:
state = getattr(kill_req, 'quarantine_code_state', None)
if state == 'contradiction':
quarantine_quantity = 'مغایرت کد رهگیری'
elif state == 'noclearance':
quarantine_quantity = 'فاقد کد رهگیری'
elif state == 'notconfirmed':
quarantine_quantity = 'عدم تایید راهداری'
else:
quarantine_quantity = 'ادغام'
diffrent_quantity = 0
diffrent_bars_info.append(
'کد بار: {0} - حجم: {1} قطعه-مرغدار:{4} - کد قرنطینه: {2} - استعلام از قرنطینه: ({3})-اختلاف:{6}- تاریخ بار: ({5})'.format(
kill_req.bar_code,
to_locale_str(int(kill_req.accepted_real_quantity or 0)),
kill_req.clearance_code or '',
quarantine_quantity,
getattr(kill_req.province_request.poultry_request.poultry, 'unit_name', ''),
shamsi_date(kill_req.kill_request.recive_date) if getattr(kill_req.kill_request, 'recive_date',
None) else '',
diffrent_quantity
)
)
diffrent_bars_details = "\n".join([f"{i + 1}. {info}" for i, info in enumerate(diffrent_bars_info)])
new_message_part_in = '❗❗ - تعداد بارهای داخل استان دارای مجوز قرنطینه {0} عدد و تعداد بار های فاقد مجوز {1} عدد میباشد.\n\n'.format(
in_has_code_count, in_no_code_count
)
if bars_info:
new_message_part_in += "بارهای داخل استان فاقد قرنطینه به شرح زیر میباشد:\n"
new_message_part_in += f"{bars_details}\n"
new_message_part_in += "--------------------------------\n"
if diffrent_bars_info:
new_message_part_in += "از بارهای داخل استان دارای مجوز تعداد {} بار دارای مغایرت در داده هستند:\n".format(
diffrent_qs.count())
new_message_part_in += f"{diffrent_bars_details}\n"
new_message_part_in += "--------------------------------\n"
rsi_in_list = diffrent_rsi_by_vet.get(vet_mobile, {}).get('in', [])
if rsi_in_list:
new_message_part_in += "با توجه به رصد هوش مصنوعی سامانه تعداد {} بار داخل استان در سامانه رصدیار ثبت نشده است:\n".format(
len(rsi_in_list))
new_message_part_in += "\n".join([f"{i + 1}. {it}" for i, it in enumerate(rsi_in_list)])
new_message_part_in += "\n--------------------------------\n"
new_message_part_in += "\n\n"
_add_text(new_message_part_in)
out_has_code_count = vet_poultry_request_out.filter(quarantine_code__isnull=False).count()
out_no_code_qs = vet_poultry_request_out.filter(quarantine_code__isnull=True)
out_no_code_count = out_no_code_qs.count()
bars_info_out = []
for poultry_req in out_no_code_qs:
bars_info_out.append(
'کد سفارش: {0} - حجم: {1} قطعه-مرغدار:{4} - خریدار: {2} - استان خریدار:{5} - شهر خریدار:{6} - تاریخ بار: ({3})'.format(
poultry_req.order_code,
to_locale_str(int(poultry_req.quantity or 0)),
poultry_req.buyer_fullname or '',
shamsi_date(poultry_req.send_date) if getattr(poultry_req, 'send_date', None) else '',
getattr(poultry_req.poultry, 'unit_name', ''),
poultry_req.buyer_province or '',
poultry_req.buyer_city or '',
)
)
bars_details_out = "\n".join([f"{i + 1}. {info}" for i, info in enumerate(bars_info_out)])
new_message_part_out = '❗❗ - تعداد بارهای خارج استان دارای مجوز قرنطینه {0} عدد و تعداد بار های فاقد مجوز {1} عدد میباشد.\n\n'.format(
out_has_code_count, out_no_code_count
)
if bars_info_out:
new_message_part_out += "بارهای خارج استان فاقد قرنطینه به شرح زیر میباشد:\n"
new_message_part_out += f"{bars_details_out}\n"
new_message_part_out += "--------------------------------\n"
rsi_out_list = diffrent_rsi_by_vet.get(vet_mobile, {}).get('out', [])
if rsi_out_list:
new_message_part_out += "با توجه به رصد هوش مصنوعی سامانه تعداد {} بار خارج استان در سامانه رصدیار ثبت نشده است:\n".format(
len(rsi_out_list))
new_message_part_out += "\n".join([f"{i + 1}. {it}" for i, it in enumerate(rsi_out_list)])
new_message_part_out += "\n--------------------------------\n"
new_message_part_out += "\n\n"
_add_text(new_message_part_out)
if current_message and current_message != base_message:
messages.append(current_message)
chat_token = TokenEitaaForEachVet.objects.filter(vet_mobile=vet_mobile).values_list('token', flat=True).first()
if chat_token and messages:
for message in messages:
try:
requests.post(url, data={'chat_id': chat_token, 'text': message}, verify=False)
except Exception:
pass
for message in messages:
data = {
'chat_id': chat_id,
'text': message,
}
response = requests.post(url, data=data, verify=False)
return HttpResponse('ok')
def daily_report_for_each_vet_farm_cron():
today = datetime.now().date() - timedelta(days=1)
date1 = today
date2 = today
url = f'https://eitaayar.ir/api/{token}/sendMessage'
date_time_jalali = format_datetime_to_shamsi(today)
date_shamsi = shamsi_date(date1).replace('-', '_')
date_shamsi2 = shamsi_date(date2).replace('-', '_')
vet_tokens = list(
TokenEitaaForEachVet.objects
.all()
.only("vet_mobile", "token")
.values_list('vet_mobile', flat=True)
.distinct()
)
if not vet_tokens:
return HttpResponse('no vets')
vet_farms_qs = VetFarm.objects.filter(trash=False, vet__user__mobile__in=vet_tokens) \
.only("id", "vet__user__mobile", "poultry__id")
poultry_qs = Poultry.objects.filter(trash=False, id__in=vet_farms_qs.values_list('poultry__id', flat=True)) \
.only("id", "unit_name", "breeding_unique_id")
poultry_map = {p.id: p.breeding_unique_id for p in poultry_qs}
poultry_breeding_ids = set(poultry_map.values())
vet_farm_pairs = list(vet_farms_qs.values_list('vet__user__mobile', 'poultry__id'))
breeding_to_vets = {}
for vet_mobile, poultry_id in vet_farm_pairs:
breeding = poultry_map.get(poultry_id)
if breeding:
breeding_to_vets.setdefault(breeding, set()).add(vet_mobile)
kill_request_qs = KillHouseRequest.objects.filter(
trash=False,
kill_request__recive_date__date__gte=date1,
kill_request__recive_date__date__lte=date2,
province_request__poultry_request__poultry__in=poultry_qs
).only(
"bar_code", "accepted_real_quantity", "clearance_code", "quarantine_quantity",
"quarantine_code_state",
"kill_request__recive_date",
"killhouse_user__name",
"province_request__poultry_request__poultry__unit_name",
)
poultry_request_out_qs = PoultryRequest.objects.filter(
trash=False,
out=True,
send_date__date__gte=date1,
send_date__date__lte=date2,
poultry__in=poultry_qs
).only(
"order_code", "quantity", "send_date", "quarantine_code",
"buyer_fullname", "buyer_province", "buyer_city",
"poultry__unit_name"
)
kill_house_request_code_quarantine = list(kill_request_qs.values_list('clearance_code', flat=True).distinct())
kill_house_free_sale = list(poultry_request_out_qs.filter(quarantine_code__isnull=False)
.values_list('quarantine_code', flat=True).distinct())
result = list(filter(None, kill_house_request_code_quarantine)) + list(filter(None, kill_house_free_sale))
rsi_url = (
f'https://rsibackend.rasadyar.com/app/send_different_bar/?province={base_url_for_sms_report}'
f'&date1={date1}&date2={date2}'
)
try:
rsi_resp = requests.post(rsi_url, json=result, headers={'Content-Type': 'application/json'})
rsi_data = rsi_resp.json() if rsi_resp.status_code == 200 else []
except Exception:
rsi_data = []
diffrent_rsi_by_vet = {vet: {'in': [], 'out': []} for vet in vet_tokens}
for data in rsi_data:
try:
part_code = data['hatching']['poultry']['PartIdCode']
except Exception:
continue
if part_code not in breeding_to_vets:
continue
date_str = str(data.get('Date', '')).split('T')[0]
try:
date_n = datetime.strptime(date_str, '%Y-%m-%d').date()
except Exception:
continue
info = 'کد قرنطینه: {0} - حجم: {1} قطعه-مرغدار:{2} - مقصد بار: {3} - تاریخ بار: ({4})'.format(
data.get('TrackingCode', ''),
to_locale_str(int(data.get('GoodAmount', 0))),
data.get('hatching', {}).get('poultry', {}).get('UnitName', ''),
data.get('DesUnitName', ''),
shamsi_date(date_n),
)
vets_for_part = breeding_to_vets.get(part_code, set())
for v in vets_for_part:
if data.get('Out') is False:
diffrent_rsi_by_vet[v]['in'].append(info)
else:
diffrent_rsi_by_vet[v]['out'].append(info)
for vet_mobile in vet_tokens:
vet_specific_farms_qs = vet_farms_qs.filter(vet__user__mobile=vet_mobile)
if not vet_specific_farms_qs.exists():
continue
vet_poultry_ids = list(vet_specific_farms_qs.values_list('poultry__id', flat=True).distinct())
vet_kill_request = kill_request_qs.filter(
province_request__poultry_request__poultry__in=vet_poultry_ids
)
vet_poultry_request_out = poultry_request_out_qs.filter(poultry__in=vet_poultry_ids)
base_message = (
'🗓📢❗ سامانه رصدیار، زنجیره تامین،تولید و توزیع مرغ گوشتی📢❗\n'
f'{date_time_jalali}\n'
f' #گزارش_بارهای_فاقد_مجوز_از_تاریخ_{date_shamsi}ااریخ_{date_shamsi2} #\n\n'
f'\n'
)
current_message = base_message
messages = []
def _add_text(txt):
nonlocal current_message, messages, base_message
if not txt:
return
if len(current_message) + len(txt) > 4000:
messages.append(current_message)
current_message = base_message
current_message += txt
in_has_code_qs = vet_kill_request.filter(clearance_code__isnull=False)
in_no_code_qs = vet_kill_request.filter(clearance_code__isnull=True)
in_has_code_count = in_has_code_qs.count()
in_no_code_count = in_no_code_qs.count()
base_vet_message = 'دامپزشک محترم فارم({0}) گزارش عملکرد بارها به شرح زیر میباشد:\n'.format(
vet_specific_farms_qs.first()
.vet.user.fullname if vet_specific_farms_qs.first() else '-')
_add_text(base_vet_message)
bars_info = []
for kill_req in in_no_code_qs:
try:
unit_name = kill_req.province_request.poultry_request.poultry.unit_name
except Exception:
unit_name = ''
bars_info.append(
'کد بار: {0} - حجم: {1} قطعه-مرغدار:{4} - مقصد بار: {2} - تاریخ بار: ({3})'.format(
kill_req.bar_code,
to_locale_str(int(kill_req.accepted_real_quantity or 0)),
getattr(kill_req.killhouse_user, 'name', ''),
shamsi_date(kill_req.kill_request.recive_date) if getattr(kill_req.kill_request, 'recive_date',
None) else '',
unit_name
)
)
bars_details = "\n".join([f"{i + 1}. {info}" for i, info in enumerate(bars_info)])
diffrent_bars_info = []
diffrent_qs = in_has_code_qs.filter(~Q(quarantine_quantity=F('quantity')))
for kill_req in diffrent_qs:
if kill_req.quarantine_quantity:
quarantine_quantity = to_locale_str(int(kill_req.quarantine_quantity))
diffrent_quantity = to_locale_str(
int(kill_req.quarantine_quantity) - int(kill_req.accepted_real_quantity))
else:
state = getattr(kill_req, 'quarantine_code_state', None)
if state == 'contradiction':
quarantine_quantity = 'مغایرت کد رهگیری'
elif state == 'noclearance':
quarantine_quantity = 'فاقد کد رهگیری'
elif state == 'notconfirmed':
quarantine_quantity = 'عدم تایید راهداری'
else:
quarantine_quantity = 'ادغام'
diffrent_quantity = 0
diffrent_bars_info.append(
'کد بار: {0} - حجم: {1} قطعه-مرغدار:{4} - کد قرنطینه: {2} - استعلام از قرنطینه: ({3})-اختلاف:{6}- تاریخ بار: ({5})'.format(
kill_req.bar_code,
to_locale_str(int(kill_req.accepted_real_quantity or 0)),
kill_req.clearance_code or '',
quarantine_quantity,
getattr(kill_req.province_request.poultry_request.poultry, 'unit_name', ''),
shamsi_date(kill_req.kill_request.recive_date) if getattr(kill_req.kill_request, 'recive_date',
None) else '',
diffrent_quantity
)
)
diffrent_bars_details = "\n".join([f"{i + 1}. {info}" for i, info in enumerate(diffrent_bars_info)])
new_message_part_in = '❗❗ - تعداد بارهای داخل استان دارای مجوز قرنطینه {0} عدد و تعداد بار های فاقد مجوز {1} عدد میباشد.\n\n'.format(
in_has_code_count, in_no_code_count
)
if bars_info:
new_message_part_in += "بارهای داخل استان فاقد قرنطینه به شرح زیر میباشد:\n"
new_message_part_in += f"{bars_details}\n"
new_message_part_in += "--------------------------------\n"
if diffrent_bars_info:
new_message_part_in += "از بارهای داخل استان دارای مجوز تعداد {} بار دارای مغایرت در داده هستند:\n".format(
diffrent_qs.count())
new_message_part_in += f"{diffrent_bars_details}\n"
new_message_part_in += "--------------------------------\n"
rsi_in_list = diffrent_rsi_by_vet.get(vet_mobile, {}).get('in', [])
if rsi_in_list:
new_message_part_in += "با توجه به رصد هوش مصنوعی سامانه تعداد {} بار داخل استان در سامانه رصدیار ثبت نشده است:\n".format(
len(rsi_in_list))
new_message_part_in += "\n".join([f"{i + 1}. {it}" for i, it in enumerate(rsi_in_list)])
new_message_part_in += "\n--------------------------------\n"
new_message_part_in += "\n\n"
_add_text(new_message_part_in)
out_has_code_count = vet_poultry_request_out.filter(quarantine_code__isnull=False).count()
out_no_code_qs = vet_poultry_request_out.filter(quarantine_code__isnull=True)
out_no_code_count = out_no_code_qs.count()
bars_info_out = []
for poultry_req in out_no_code_qs:
bars_info_out.append(
'کد سفارش: {0} - حجم: {1} قطعه-مرغدار:{4} - خریدار: {2} - استان خریدار:{5} - شهر خریدار:{6} - تاریخ بار: ({3})'.format(
poultry_req.order_code,
to_locale_str(int(poultry_req.quantity or 0)),
poultry_req.buyer_fullname or '',
shamsi_date(poultry_req.send_date) if getattr(poultry_req, 'send_date', None) else '',
getattr(poultry_req.poultry, 'unit_name', ''),
poultry_req.buyer_province or '',
poultry_req.buyer_city or '',
)
)
bars_details_out = "\n".join([f"{i + 1}. {info}" for i, info in enumerate(bars_info_out)])
new_message_part_out = '❗❗ - تعداد بارهای خارج استان دارای مجوز قرنطینه {0} عدد و تعداد بار های فاقد مجوز {1} عدد میباشد.\n\n'.format(
out_has_code_count, out_no_code_count
)
if bars_info_out:
new_message_part_out += "بارهای خارج استان فاقد قرنطینه به شرح زیر میباشد:\n"
new_message_part_out += f"{bars_details_out}\n"
new_message_part_out += "--------------------------------\n"
rsi_out_list = diffrent_rsi_by_vet.get(vet_mobile, {}).get('out', [])
if rsi_out_list:
new_message_part_out += "با توجه به رصد هوش مصنوعی سامانه تعداد {} بار خارج استان در سامانه رصدیار ثبت نشده است:\n".format(
len(rsi_out_list))
new_message_part_out += "\n".join([f"{i + 1}. {it}" for i, it in enumerate(rsi_out_list)])
new_message_part_out += "\n--------------------------------\n"
new_message_part_out += "\n\n"
_add_text(new_message_part_out)
if current_message and current_message != base_message:
messages.append(current_message)
chat_token = TokenEitaaForEachVet.objects.filter(vet_mobile=vet_mobile).values_list('token', flat=True).first()
if chat_token and messages:
for message in messages:
try:
requests.post(url, data={'chat_id': chat_token, 'text': message}, verify=False)
except Exception:
pass
for message in messages:
data = {
'chat_id': chat_id,
'text': message,
}
response = requests.post(url, data=data, verify=False)
def send_all_bar_to_eitaa(request):
url = f'https://eitaayar.ir/api/{token}/sendMessage'
date = datetime.now().date()
all_kill_house_requests = KillHouseRequest.objects.filter(
trash=False,
kill_request__recive_date__date=date
).select_related(
'province_request__poultry_request__poultry__user__city',
'kill_request__kill_house__kill_house_operator__user',
'kill_request__kill_house__system_address__city',
'add_car__driver'
)
poultry_ids = all_kill_house_requests.values_list(
'province_request__poultry_request__poultry__id',
flat=True
).distinct()
vet_farms = VetFarm.objects.filter(
trash=False,
poultry__id__in=poultry_ids
).select_related('vet__user', 'poultry')
vet_to_poultries = {}
for vet_farm in vet_farms:
vet_mobile = vet_farm.vet.user.mobile
if vet_mobile not in vet_to_poultries:
vet_to_poultries[vet_mobile] = []
vet_to_poultries[vet_mobile].append(vet_farm.poultry.id)
if not vet_to_poultries:
return HttpResponse('هیچ دامپزشکی یافت نشد.')
for vet_mobile, poultry_list in vet_to_poultries.items():
chat_id_eitaa = TokenEitaaForEachVet.objects.filter(vet_mobile=vet_mobile).first()
if not chat_id_eitaa:
continue
vet_kill_requests = all_kill_house_requests.filter(
province_request__poultry_request__poultry__id__in=poultry_list
)
if not vet_kill_requests.exists():
continue
date_time_jalali = format_datetime_to_shamsi(date)
date_shamsi = shamsi_date(date).replace('-', '_')
base_message = '🗓📢❗ سامانه رصدیار، زنجیره تامین،تولید و توزیع مرغ گوشتی📢❗\n'
base_message += f'{date_time_jalali}\n'
base_message += f' #گزارش_بارها #{date_shamsi}\n\n'
base_message += f'تعداد کل بارها: {vet_kill_requests.count()}\n'
base_message += f'\n'
messages = []
current_message = base_message
m = 1
for entry in vet_kill_requests:
try:
main_quantity = entry.accepted_real_quantity
real_weight = entry.accepted_real_weight
poultry_name = entry.province_request.poultry_request.poultry.unit_name
poultry_mobile = entry.province_request.poultry_request.poultry.user.mobile
city = entry.province_request.poultry_request.poultry.user.city.name
buyer = entry.kill_request.kill_house.name
buyer_city = entry.kill_request.kill_house.system_address.city.name
buyer_mobile = entry.kill_request.kill_house.kill_house_operator.user.mobile
weight = entry.province_request.poultry_request.Index_weight
order_code = entry.bar_code
recive_date = entry.kill_request.recive_date
recive_date_shamsi = shamsi_date(recive_date) if recive_date else ''
main_quantity = "{:,}".format(int(main_quantity))
real_weight = "{:,}".format(int(real_weight))
driver_name = '-'
driver_mobile = '-'
driver_pelak = '-'
driver_health_code = '-'
if entry.add_car and entry.add_car.driver:
driver_name = entry.add_car.driver.driver_name or '-'
driver_mobile = entry.add_car.driver.driver_mobile or '-'
driver_pelak = entry.add_car.driver.pelak or '-'
driver_health_code = entry.add_car.driver.health_code or '-'
if entry.province_request.poultry_request.direct_buying == True:
province_type = 'خرید مستقیم'
elif entry.province_request.poultry_request.export == True:
province_type = 'فروش به خارج استان'
else:
province_type = 'اتحادیه'
driver_info = f' - راننده: {driver_name} ({driver_mobile}) پلاک: {driver_pelak} کد حمل: {driver_health_code}'
new_message_part = f'{m}. کد بار: {order_code} - حجم بار: {main_quantity} قطعه - وزن بار: {real_weight} - میانگین وزن: {weight} - مرغدار: {poultry_name} ({poultry_mobile}) - شهر: {city} - نوع فروش: {province_type} - خریدار: {buyer} ({buyer_mobile}) - شهر خریدار: {buyer_city}{driver_info} - تاریخ بار: ({recive_date_shamsi})\n\n'
m += 1
if len(current_message) + len(new_message_part) > 4000:
messages.append(current_message)
current_message = base_message
current_message += new_message_part
except Exception as e:
continue
if current_message and current_message != base_message:
messages.append(current_message)
chat_id_eitaa_token = chat_id_eitaa.token
for message in messages:
try:
data = {
'chat_id': chat_id_eitaa_token,
'text': message,
}
response = requests.post(url, data=data, verify=False)
except Exception:
pass
return HttpResponse('پیام‌ها ارسال شد.')
def send_all_bar_to_eitaa_cron():
url = f'https://eitaayar.ir/api/{token}/sendMessage'
date = datetime.now().date()
all_kill_house_requests = KillHouseRequest.objects.filter(
trash=False,
kill_request__recive_date__date=date
).select_related(
'province_request__poultry_request__poultry__user__city',
'kill_request__kill_house__kill_house_operator__user',
'kill_request__kill_house__system_address__city',
'add_car__driver'
)
poultry_ids = all_kill_house_requests.values_list(
'province_request__poultry_request__poultry__id',
flat=True
).distinct()
vet_farms = VetFarm.objects.filter(
trash=False,
poultry__id__in=poultry_ids
).select_related('vet__user', 'poultry')
vet_to_poultries = {}
for vet_farm in vet_farms:
vet_mobile = vet_farm.vet.user.mobile
if vet_mobile not in vet_to_poultries:
vet_to_poultries[vet_mobile] = []
vet_to_poultries[vet_mobile].append(vet_farm.poultry.id)
if not vet_to_poultries:
return
for vet_mobile, poultry_list in vet_to_poultries.items():
chat_id_eitaa = TokenEitaaForEachVet.objects.filter(vet_mobile=vet_mobile).first()
if not chat_id_eitaa:
continue
vet_kill_requests = all_kill_house_requests.filter(
province_request__poultry_request__poultry__id__in=poultry_list
)
if not vet_kill_requests.exists():
continue
date_time_jalali = format_datetime_to_shamsi(date)
date_shamsi = shamsi_date(date).replace('-', '_')
base_message = '🗓📢❗ سامانه رصدیار، زنجیره تامین،تولید و توزیع مرغ گوشتی📢❗\n'
base_message += f'{date_time_jalali}\n'
base_message += f' #گزارش_بارها #{date_shamsi}\n\n'
base_message += f'تعداد کل بارها: {vet_kill_requests.count()}\n'
base_message += f'\n'
messages = []
current_message = base_message
m = 1
for entry in vet_kill_requests:
try:
main_quantity = entry.accepted_real_quantity
real_weight = entry.accepted_real_weight
poultry_name = entry.province_request.poultry_request.poultry.unit_name
poultry_mobile = entry.province_request.poultry_request.poultry.user.mobile
city = entry.province_request.poultry_request.poultry.user.city.name
buyer = entry.kill_request.kill_house.name
buyer_city = entry.kill_request.kill_house.system_address.city.name
buyer_mobile = entry.kill_request.kill_house.kill_house_operator.user.mobile
weight = entry.province_request.poultry_request.Index_weight
order_code = entry.bar_code
recive_date = entry.kill_request.recive_date
recive_date_shamsi = shamsi_date(recive_date) if recive_date else ''
main_quantity = "{:,}".format(int(main_quantity))
real_weight = "{:,}".format(int(real_weight))
driver_name = '-'
driver_mobile = '-'
driver_pelak = '-'
driver_health_code = '-'
if entry.add_car and entry.add_car.driver:
driver_name = entry.add_car.driver.driver_name or '-'
driver_mobile = entry.add_car.driver.driver_mobile or '-'
driver_pelak = entry.add_car.driver.pelak or '-'
driver_health_code = entry.add_car.driver.health_code or '-'
if entry.province_request.poultry_request.direct_buying == True:
province_type = 'خرید مستقیم'
elif entry.province_request.poultry_request.export == True:
province_type = 'فروش به خارج استان'
else:
province_type = 'اتحادیه'
driver_info = f' - راننده: {driver_name} ({driver_mobile}) پلاک: {driver_pelak} کد حمل: {driver_health_code}'
new_message_part = f'{m}. کد بار: {order_code} - حجم بار: {main_quantity} قطعه - وزن بار: {real_weight} - میانگین وزن: {weight} - مرغدار: {poultry_name} ({poultry_mobile}) - شهر: {city} - نوع فروش: {province_type} - خریدار: {buyer} ({buyer_mobile}) - شهر خریدار: {buyer_city}{driver_info} - تاریخ بار: ({recive_date_shamsi})\n\n'
m += 1
if len(current_message) + len(new_message_part) > 4000:
messages.append(current_message)
current_message = base_message
current_message += new_message_part
except Exception as e:
continue
if current_message and current_message != base_message:
messages.append(current_message)
chat_id_eitaa_token = chat_id_eitaa.token
for message in messages:
try:
data = {
'chat_id': chat_id_eitaa_token,
'text': message,
}
response = requests.post(url, data=data, verify=False)
except Exception:
pass
return HttpResponse('پیام‌ها ارسال شد.')
def send_single_bar_to_eitaa(kill_house_request):
url = f'https://eitaayar.ir/api/{token}/sendMessage'
date = datetime.now().date()
if not kill_house_request:
return
poultry = kill_house_request.province_request.poultry_request.poultry
vet_farm = VetFarm.objects.filter(
trash=False,
poultry=poultry
).select_related('vet__user').first()
if not vet_farm:
return
vet_mobile = vet_farm.vet.user.mobile
chat_id_eitaa = TokenEitaaForEachVet.objects.filter(vet_mobile=vet_mobile).first()
if not chat_id_eitaa:
return
date_time_jalali = format_datetime_to_shamsi(date)
date_shamsi = shamsi_date(date).replace('-', '_')
base_message = '🗓📢❗ سامانه رصدیار، زنجیره تامین،تولید و توزیع مرغ گوشتی📢❗\n'
base_message += f'{date_time_jalali}\n'
base_message += f' #گزارش_بار_جدید #{date_shamsi}\n\n'
base_message += f'\n'
try:
main_quantity = kill_house_request.accepted_real_quantity
real_weight = kill_house_request.accepted_real_weight
poultry_name = kill_house_request.province_request.poultry_request.poultry.unit_name
poultry_mobile = kill_house_request.province_request.poultry_request.poultry.user.mobile
city = kill_house_request.province_request.poultry_request.poultry.user.city.name
buyer = kill_house_request.kill_request.kill_house.name
buyer_city = kill_house_request.kill_request.kill_house.system_address.city.name
buyer_mobile = kill_house_request.kill_request.kill_house.kill_house_operator.user.mobile
weight = kill_house_request.province_request.poultry_request.Index_weight
order_code = kill_house_request.bar_code
main_quantity = "{:,}".format(int(main_quantity))
real_weight = "{:,}".format(int(real_weight))
if kill_house_request.province_request.poultry_request.direct_buying == True:
province_type = 'خرید مستقیم'
elif kill_house_request.province_request.poultry_request.export == True:
province_type = 'فروش به خارج استان'
else:
province_type = 'اتحادیه'
message = base_message
message += f"🟢 مرغدار : {poultry_name} ({poultry_mobile})\n"
message += f"شهر: {city}\n"
message += f"کد بار: {order_code}\n"
message += f"نوع فروش: {province_type}\n"
message += f" حجم بار :{main_quantity}\n"
message += f" وزن بار :{real_weight}\n"
message += f"میانگین وزن : {weight}\n"
message += f"\n"
message += f"🔴🔴خریدار : {buyer} ({buyer_mobile})\n"
message += f"شهر خریدار: {buyer_city}\n"
message += '\n\n'
chat_id_eitaa_token = chat_id_eitaa.token
data = {
'chat_id': chat_id_eitaa_token,
'text': message,
}
response = requests.post(url, data=data, verify=False)
except Exception as e:
pass