Files
Rasadyar_Marzaki/bot_eata.py

1855 lines
89 KiB
Python
Raw Normal View History

2026-01-18 11:45:53 +03:30
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"‼توجه: سهم صنف پروتئین به حساب اتحادیه مرغدارن واریز شد.‼"
if base_url_for_sms_report == 'ha':
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"‼توجه: سهم صنف پروتئین به حساب اتحادیه مرغدارن واریز شد.‼"
if base_url_for_sms_report == 'ha':
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"‼توجه: سهم صنف پروتئین به حساب اتحادیه مرغدارن واریز شد.‼"
if base_url_for_sms_report == 'ha':
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"‼توجه: سهم صنف پروتئین به حساب اتحادیه مرغدارن واریز شد.‼"
if base_url_for_sms_report == 'ha':
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