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

3070 lines
156 KiB
Python
Raw Permalink 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
import threading
import jdatetime
from django.db.models import Q, Sum, F
from rest_framework import status, viewsets
from rest_framework.decorators import permission_classes, api_view
from rest_framework.permissions import AllowAny
from authentication.models import SystemUserProfile, UserMessageSend
from django.views.decorators.csrf import csrf_exempt
from oauth2_provider.contrib.rest_framework import (
TokenHasReadWriteScope,
)
from django.http import HttpResponse
import xml.etree.ElementTree as ET
import requests
from rest_framework.response import Response
from deposit_percent import wage_percent
from general_urls import base_url_sms, base_url_for_sms_report, base_pos_id
from panel.KillHouse.helpers import get_finance_info
from panel.helper import UNION_NUMBER, COMPANY_NUMBER, GUILD_NUMBER, UNION_SECOND_NUMBER, SUPPORTER_NUMBER, \
UNION_THIRD_NUMBER, UNION_FOURTH_NUMBER, UNION_NUMBER_2, COMPANY_NUMBER2, UNION_FIFTH_NUMBER, UNION_SIXTH_NUMBER
from panel.helper_excel import shamsi_date, to_locale_str
from panel.models import KillHouseRequest, VetCheckRequest, KillHouseVet, VetCheckAllocations, KillHouse, \
KillHouseFreeBarInformation, InternalTransaction, ProvinceKillRequest, Poultry, VetFarm, KillHousePurchaseRequest, \
OutProvincePoultryRequestBuyer, CityOperator, UserReports, ReportsUsers, LastUpdate, PoultryRequest, \
CompanyBeneficiaryAccount, ManagementSendSms, StewardAllocation, SmsRecipient
from .sahandsms.sms import USERNAME_SMS, PASSWORD_SMS, USERNAME_SMS_FINANCIAL, PASSWORD_SMS_FINANCIAL, \
USERNAME_SMS_HAMEDAN, PASSWORD_SMS_HAMEDAN, OUT_SMS_USER, OUT_SMS_PASS
from panel.helper import check_mobile_number
from .serializers import ManagementSendSmsSerializer
management_sms = ManagementSendSms.objects.all()
gate_way = management_sms.filter(name='ارسال بدهی').first()
send_deactivate = management_sms.filter(name='ارسال مسدودی ها').first()
direct_buying = management_sms.filter(name='خرید مستقیم').first()
poultry_request = management_sms.filter(name='درخواست کشتار جدید').first()
poultry_link_out_sale = management_sms.filter(name='ارسال پیامک لینک فروش مرغ به خارج استان').first()
kill_req_market = management_sms.filter(name='پیامک پنل بورسی').first()
poultry_req_market = management_sms.filter(name='پیامک به مرغدار درخواست کشتار مرغدار برای پنل بورسی').first()
steward_allocation = management_sms.filter(name='پیامک کد احراز به مباشر').first()
guild_register = management_sms.filter(name='پیامک کد احراز برای ثبت صنف/مباشر').first()
sms_recipient = management_sms.filter(name='پیامک مرغ زنده و لاشه به شماره های خاص').first()
gate_way_username = gate_way.username
gate_way_password = gate_way.password
send_deactivate_username = send_deactivate.username
send_deactivate_password = send_deactivate.password
direct_buying_username = direct_buying.username
direct_buying_password = direct_buying.password
poultry_request_username = poultry_request.username
poultry_request_password = poultry_request.password
poultry_link_out_sale_username = poultry_link_out_sale.username
poultry_link_out_sale_password = poultry_link_out_sale.password
kill_req_market_username = kill_req_market.username
kill_req_market_password = kill_req_market.password
poultry_req_market_username = poultry_req_market.username
poultry_req_market_password = poultry_req_market.password
steward_allocation_username = steward_allocation.username
steward_allocation_password = steward_allocation.password
guild_register_username = guild_register.username
guild_register_password = guild_register.password
sms_recipient_username = sms_recipient.username
sms_recipient_password = sms_recipient.password
def sanitize_sms_message(message):
if not message:
return message
forbidden_words = {'شاه': 'ش..ه', 'SHAH': 'SH..AH', 'Shah': 'Sh..ah', 'shah': 'sh..ah'}
cleaned_message = message
for forbidden, replacement in forbidden_words.items():
cleaned_message = cleaned_message.replace(forbidden, replacement)
return cleaned_message
def send_sms_request(url):
if 'message=' in url:
parts = url.split('message=')
if len(parts) == 2:
before_message = parts[0] + 'message='
message_and_after = parts[1]
if '&' in message_and_after:
message = message_and_after.split('&')[0]
after_message = '&' + '&'.join(message_and_after.split('&')[1:])
else:
message = message_and_after
after_message = ''
cleaned_message = sanitize_sms_message(message)
url = before_message + cleaned_message + after_message
return requests.get(url)
def transaction_sms_threading(*mobile):
percentage = CompanyBeneficiaryAccount.objects.filter(trash=False)
mother_percent = percentage.filter(unique_code=1).first().percent
for m in mobile:
for k, v in m.items():
if k == 'payer':
payer = v
if k == 'date':
date = v
if k == 'share':
share = v
mother_share = ((int(v) * mother_percent) / 100) if mother_percent > 0 else 0
share = "{:,}".format(int(share))
mother_share = "{:,}".format(int(mother_share))
if k == 'mobile':
phone = v
if k == 'province':
province = v
if k == 'killer':
killer = v
check_mobile = check_mobile_number(phone)
if check_mobile:
if phone == COMPANY_NUMBER:
# message = f'تراکنش موفق استان {province} (سهم شرکت)' \
# f'\n' \
# f'پرداخت کننده: {killer} {payer} ' \
# f'\n' \
# f'تاریخ : {date}' \
# f'\n' \
# f' مبلغ سهم شما : {share} ریال '
# if COMPANY_NUMBER2 is not None:
# req = send_sms_request(
# f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS}&password={PASSWORD_SMS}&from=30002501&to={COMPANY_NUMBER2}&message={message}")
message1 = f'تراکنش موفق استان {province} (سهم شرکت مادر)' \
f'\n' \
f'پرداخت کننده: {killer} {payer} ' \
f'\n' \
f'تاریخ : {date}' \
f'\n' \
f' مبلغ سهم شما : {mother_share} ریال '
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={OUT_SMS_USER}&password={OUT_SMS_USER}&from=30002501&to=09121355674&message={message1}")
# message_kiani = f'تراکنش موفق استان {province} (سهم محمد کیانی)' \
# f'\n' \
# f'پرداخت کننده: {killer} {payer} ' \
# f'\n' \
# f'تاریخ : {date}' \
# f'\n' \
# f' مبلغ سهم شما : {kiani_share} ریال '
# req_kiani = send_sms_request(
# f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS}&password={PASSWORD_SMS}&from=30002501&to=09364415690&message={message_kiani}")
# message_momeni = f'تراکنش موفق استان {province} (سهم مومنی)' \
# f'\n' \
# f'پرداخت کننده: {killer} {payer} ' \
# f'\n' \
# f'تاریخ : {date}' \
# f'\n' \
# f' مبلغ سهم شما : {momeni_share} ریال '
# req_momeni = send_sms_request(
# f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS}&password={PASSWORD_SMS}&from=30002501&to=09201917727&message={message_momeni}")
# req = send_sms_request(
# f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS}&password={PASSWORD_SMS}&from=30002501&to={COMPANY_NUMBER}&message={message1}")
# elif phone == UNION_NUMBER:
# message = f'تراکنش موفق استان {province} (سهم اتحادیه)' \
# f'\n' \
# f'پرداخت کننده: {killer} {payer} ' \
# f'\n' \
# f'تاریخ : {date}' \
# f'\n' \
# f' مبلغ سهم شما : {share} ریال '
# if UNION_THIRD_NUMBER is not None:
# req = send_sms_request(
# f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS}&password={PASSWORD_SMS}&from=30002501&to={UNION_THIRD_NUMBER}&message={message}")
# req = send_sms_request(
# f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS}&password={PASSWORD_SMS}&from=30002501&to={COMPANY_NUMBER}&message={message}")
# elif phone == GUILD_NUMBER:
# message = f'تراکنش موفق {province} (سهم صنف)' \
# f'\n' \
# f'پرداخت کننده: {killer} {payer} ' \
# f'\n' \
# f'تاریخ : {date}' \
# f'\n' \
# f' مبلغ سهم شما : {share} ریال '
# if UNION_THIRD_NUMBER is not None:
# req = send_sms_request(
# f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS}&password={PASSWORD_SMS}&from=30002501&to={UNION_THIRD_NUMBER}&message={message}")
# req = send_sms_request(
# f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS}&password={PASSWORD_SMS}&from=30002501&to={COMPANY_NUMBER}&message={message}")
# else:
# message = f'تراکنش موفق' \
# f'\n' \
# f'پرداخت کننده: {payer}' \
# f'\n' \
# f'تاریخ : {date}' \
# f'\n' \
# f' مبلغ سهم شما : {share} ریال '
# req = send_sms_request(
# url=f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendFromUrl?username={USERNAME_SMS}&password={PASSWORD_SMS}&message={message}&fromNumber=30002501&toNumber={phone}")
def transaction_sms_threading_in_province(*mobile):
percentage = CompanyBeneficiaryAccount.objects.filter(trash=False)
kiani_percent = percentage.filter(unique_code=2).first().percent
momen_percent = percentage.filter(unique_code=3).first().percent
for m in mobile:
for k, v in m.items():
if k == 'payer':
payer = v
if k == 'date':
date = v
if k == 'share':
share = v
# mother_share=int(v) * 0.06
kiani_share = ((int(v) * kiani_percent) / 100) if kiani_percent > 0 else 0
# momeni_share=((int(v) * momen_percent) / 100) if kiani_percent > 0 else 0
share = "{:,}".format(int(share))
# mother_share = "{:,}".format(int(mother_share))
kiani_share = "{:,}".format(int(kiani_share))
# momeni_share = "{:,}".format(int(momeni_share))
if k == 'mobile':
phone = v
if k == 'province':
province = v
if k == 'killer':
killer = v
check_mobile = check_mobile_number(phone)
if check_mobile:
if phone == COMPANY_NUMBER:
# message = f'تراکنش موفق استان {province} (سهم شرکت)' \
# f'\n' \
# f'پرداخت کننده: {killer} {payer} ' \
# f'\n' \
# f'تاریخ : {date}' \
# f'\n' \
# f' مبلغ سهم شما : {share} ریال '
# if COMPANY_NUMBER2 is not None:
# req = send_sms_request(
# f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS}&password={PASSWORD_SMS}&from=30002501&to={COMPANY_NUMBER2}&message={message}")
# message1 = f'تراکنش موفق استان {province} (سهم شرکت مادر)' \
# f'\n' \
# f'پرداخت کننده: {killer} {payer} ' \
# f'\n' \
# f'تاریخ : {date}' \
# f'\n' \
# f' مبلغ سهم شما : {mother_share} ریال '
# req = send_sms_request(
# f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS}&password={PASSWORD_SMS}&from=30002501&to=09121355674&message={message1}")
message_kiani = f'تراکنش موفق استان {province} (سهم محمد کیانی)' \
f'\n' \
f'پرداخت کننده: {killer} {payer} ' \
f'\n' \
f'تاریخ : {date}' \
f'\n' \
f' مبلغ سهم شما : {kiani_share} ریال '
req_kiani = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={OUT_SMS_USER}&password={OUT_SMS_PASS}&from=30002501&to=09364415690&message={message_kiani}")
# message_momeni = f'تراکنش موفق استان {province} (سهم مومنی)' \
# f'\n' \
# f'پرداخت کننده: {killer} {payer} ' \
# f'\n' \
# f'تاریخ : {date}' \
# f'\n' \
# f' مبلغ سهم شما : {momeni_share} ریال '
req_momeni = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={OUT_SMS_USER}&password={OUT_SMS_PASS}&from=30002501&to=09201917727&message={message_kiani}")
# req = send_sms_request(
# f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS}&password={PASSWORD_SMS}&from=30002501&to={COMPANY_NUMBER}&message={message1}")
# elif phone == UNION_NUMBER:
# message = f'تراکنش موفق استان {province} (سهم اتحادیه)' \
# f'\n' \
# f'پرداخت کننده: {killer} {payer} ' \
# f'\n' \
# f'تاریخ : {date}' \
# f'\n' \
# f' مبلغ سهم شما : {share} ریال '
# if UNION_THIRD_NUMBER is not None:
# req = send_sms_request(
# f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS}&password={PASSWORD_SMS}&from=30002501&to={UNION_THIRD_NUMBER}&message={message}")
# req = send_sms_request(
# f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS}&password={PASSWORD_SMS}&from=30002501&to={COMPANY_NUMBER}&message={message}")
# elif phone == GUILD_NUMBER:
# message = f'تراکنش موفق {province} (سهم صنف)' \
# f'\n' \
# f'پرداخت کننده: {killer} {payer} ' \
# f'\n' \
# f'تاریخ : {date}' \
# f'\n' \
# f' مبلغ سهم شما : {share} ریال '
# if UNION_THIRD_NUMBER is not None:
# req = send_sms_request(
# f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS}&password={PASSWORD_SMS}&from=30002501&to={UNION_THIRD_NUMBER}&message={message}")
# req = send_sms_request(
# f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS}&password={PASSWORD_SMS}&from=30002501&to={COMPANY_NUMBER}&message={message}")
# else:
# message = f'تراکنش موفق' \
# f'\n' \
# f'پرداخت کننده: {payer}' \
# f'\n' \
# f'تاریخ : {date}' \
# f'\n' \
# f' مبلغ سهم شما : {share} ریال '
# req = send_sms_request(
# url=f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendFromUrl?username={USERNAME_SMS}&password={PASSWORD_SMS}&message={message}&fromNumber=30002501&toNumber={phone}")
def transaction_sms_threading_for_company(*mobile):
pass
# for m in mobile:
# for k, v in m.items():
# if k == 'payer':
# payer = v
# if k == 'date':
# date = v
# if k == 'share':
# share = v
# share = "{:,}".format(int(share))
# if k == 'mobile':
# phone = v
# if k == 'province':
# province=v
# if k == 'killer':
# killer=v
# message = f'تراکنش موفق استان {province} (کل سهم)' \
# f'\n' \
# f'پرداخت کننده: {killer} {payer} ' \
# f'\n' \
# f'تاریخ : {date}' \
# f'\n' \
# f' مبلغ کل سهم : {share} ریال '
# req = send_sms_request(
# url=f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendFromUrl?username={USERNAME_SMS}&password={PASSWORD_SMS}&message={message}&fromNumber=30002501&toNumber={phone}")
def transaction_sms_threading_appreciation(user, mobile):
message = f'کاربر گرامی {user}' \
'\n' \
'از پرداخت شما سپاسگزاریم.' \
'\n' \
'(سامانه رصدیار)'
check_mobile = check_mobile_number(mobile)
if check_mobile:
req = send_sms_request(
url=f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendFromUrl?username={USERNAME_SMS_FINANCIAL}&password={PASSWORD_SMS_FINANCIAL}&message={message}&fromNumber=30002501&toNumber={mobile}")
def user_sms_threading(mobile, message):
for i in mobile:
check_mobile = check_mobile_number(i)
if check_mobile:
req = send_sms_request(
url=f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendFromUrl?username={USERNAME_SMS}&password={PASSWORD_SMS}&message={message}&fromNumber=30002501&toNumber={i}")
msg = UserMessageSend(
message=str(message),
)
msg.save()
@api_view(["POST"])
@csrf_exempt
@permission_classes([TokenHasReadWriteScope])
def user_sms(request):
operator = SystemUserProfile.objects.get(user=request.user)
roles = None
users = None
message = request.data['message']
if 'role' in request.data.keys():
roles = request.data['role']
if 'user' in request.data.keys():
users = request.data['user']
if roles != None and users != None:
users = SystemUserProfile.objects.filter(role__name__in=roles, key__in=users,
province=operator.province).only('mobile').order_by('id').values_list(
'mobile', flat=True)
elif roles != None:
users = SystemUserProfile.objects.filter(role__name__in=roles, province=operator.province).only(
'mobile').order_by('id').values_list('mobile', flat=True)
else:
users = SystemUserProfile.objects.filter(key__in=users, province=operator.province).only('mobile').order_by(
'id').values_list('mobile', flat=True)
send_sms = threading.Thread(target=user_sms_threading, args=(users, message))
send_sms.start()
return Response({'msg': 'send'})
def hatching_sms(mobile, poultry_fullname, quantity, date, chicken_breed, province, city
):
message = ' ثبت جوجه ریزی جدید:\n مرغدار:{0}\nتعداد:{1}\nتاریخ:{2}\nنژاد:{3}\nآدرس:استان {4},شهر {5}'.format(
poultry_fullname, quantity, date, chicken_breed, province, city)
check_mobile = check_mobile_number(mobile)
if check_mobile:
u = "http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={}&password={}&from=30002501&to={}&message={}".format(
USERNAME_SMS, PASSWORD_SMS,
mobile, message)
url = u.format()
payload = {}
headers = {"Content-Type": "application/x-www-form-urlencoded"}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
def operator_hatching_sms(mobile, poultry_fullname, quantity, date, chicken_breed, province, city,
):
message = ' ثبت جوجه ریزی جدید:\n مرغدار:{0}\nتعداد:{1}\nتاریخ:{2}\nنژاد:{3}\nآدرس:استان {4},شهر {5}'.format(
poultry_fullname, quantity, date, chicken_breed, province, city)
check_mobile = check_mobile_number(mobile)
if check_mobile:
u = "http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={}&password={}&from=30002501&to={}&message={}".format(
USERNAME_SMS, PASSWORD_SMS,
mobile, message)
url = u.format()
payload = {}
headers = {"Content-Type": "application/x-www-form-urlencoded"}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
# USERNAME_SMS
def operator_poultry_request_sms(mobile, poultry_fullname, quantity, chicken_breed,
order_code, send_date, sale_in_province, amount, request_kill_house, poultry_mobile
):
sale_type = 'آزاد' if sale_in_province == True else 'دولتی'
amount = "{:,}".format(int(amount))
quantity = "{:,}".format(int(quantity))
message = 'درخواست کشتار جدید' \
f'\n' \
f'تعداد:{quantity}' \
f'\n' \
f'نژاد:{chicken_breed}' \
f'\n' \
f'تاریخ کشتار:{send_date}' \
f'\n' \
f'نوع فروش:{sale_type}' \
f'\n' \
f'مرغدار:{poultry_fullname}' \
f'\n' \
f'کدسفارش:{order_code}' \
f'\n' \
f'قیمت مرغدار:{amount}' \
f'\n' \
f'(سامانه رصدیار)' \
# message = 'درخواست کشتار\n مرغدار:{0}\nتعداد:{1}\nنژاد:{2}\n کدسفارش:{3}\nتاریخ کشتار:{4}'.format(
# poultry_fullname, quantity, chicken_breed,
# order_code, send_date)
check_mobile = check_mobile_number(mobile)
if check_mobile:
u = "http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={}&password={}&from=30002501&to={}&message={}".format(
poultry_request_username, poultry_request_password,
mobile, message)
url = u.format()
payload = {}
headers = {"Content-Type": "application/x-www-form-urlencoded"}
response = requests.request("GET", url, headers=headers, data=payload)
if UNION_NUMBER_2 is not None:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={poultry_request_username}&password={poultry_request_password}&from=30002501&to={UNION_NUMBER_2}&message={message}")
message2 = 'درخواست کشتار جدید' \
f'\n' \
f'مرغدار:{poultry_fullname}' \
f'\n' \
f'تعداد:{quantity}' \
f'\n' \
f'نژاد:{chicken_breed}' \
f'\n' \
f'تاریخ کشتار:{send_date}' \
f'\n' \
f'نوع فروش:{sale_type}' \
f'\n' \
f'کشتارگاه:{request_kill_house}' \
f'\n' \
f'کدسفارش:{order_code}' \
f'\n' \
f'قیمت :{amount} ریال' \
f'\n' \
f'(سامانه رصدیار)'
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={poultry_request_username}&password={poultry_request_password}&from=30002501&to={poultry_mobile}&message={message2}")
# USERNAME_SMS
def operator_out_poultry_request_sms(mobile, poultry_fullname, quantity, chicken_breed,
order_code, send_date, sale_in_province, amount, vet_mobile=None
):
sale_type = 'آزاد' if sale_in_province == True else 'دولتی'
amount = "{:,}".format(int(amount))
quantity = "{:,}".format(int(quantity))
message = 'درخواست کشتار آزاد' \
f'\n' \
f'تعداد:{quantity}' \
f'\n' \
f'نژاد:{chicken_breed}' \
f'\n' \
f'تاریخ کشتار:{send_date}' \
f'\n' \
f'نوع فروش:{sale_type}' \
f'\n' \
f'مرغدار:{poultry_fullname}' \
f'\n' \
f'کدسفارش:{order_code}' \
f'\n' \
f'قیمت مرغدار:{amount}' \
f'\n' \
f'(سامانه رصدیار)' \
# message = 'درخواست کشتار آزاد\n مرغدار:{0}\nتعداد:{1}\nنژاد:{2}\n کدسفارش:{3}\nتاریخ کشتار:{4}'.format(
# poultry_fullname, quantity, chicken_breed,
# order_code, send_date)
check_mobile = check_mobile_number(mobile)
if check_mobile:
u = "http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={}&password={}&from=30002501&to={}&message={}".format(
USERNAME_SMS, PASSWORD_SMS,
mobile, message)
url = u.format()
payload = {}
headers = {"Content-Type": "application/x-www-form-urlencoded"}
response = requests.request("GET", url, headers=headers, data=payload)
if UNION_NUMBER_2 is not None:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS}&password={PASSWORD_SMS}&from=30002501&to={UNION_NUMBER_2}&message={message}")
if vet_mobile is not None:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS}&password={PASSWORD_SMS}&from=30002501&to={vet_mobile}&message={message}")
def poultry_request_receive_city_accept_sms(mobile, send_date, order_code, free_sale_in_province
):
sale_type = 'آزاد' if free_sale_in_province == True else 'دولتی'
message = ' مرغدار گرامی درخواست کشتار شما با نوع:{2} به تاریخ {0} با شماره سفارش:{1} توسط شهرستان تایید شد.'.format(
send_date, order_code, sale_type)
check_mobile = check_mobile_number(mobile)
if check_mobile:
u = "http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={}&password={}&from=30002501&to={}&message={}".format(
USERNAME_SMS, PASSWORD_SMS,
mobile, message)
url = u.format()
payload = {}
headers = {"Content-Type": "application/x-www-form-urlencoded"}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
def poultry_request_receive_province_accept_sms(mobile, order_code
):
message = 'درخواست کشتار با کد سفارش:{0} توسط استان تایید شد.'.format(
order_code)
check_mobile = check_mobile_number(mobile)
if check_mobile:
u = "http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={}&password={}&from=30002501&to={}&message={}".format(
USERNAME_SMS, PASSWORD_SMS,
mobile, message)
url = u.format()
payload = {}
headers = {"Content-Type": "application/x-www-form-urlencoded"}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
# USERNAME_SMS
def confirm_price_poultry_request_sms(mobile, poultry_fullname, quantity, chicken_breed, order_code, send_date,
free_sale_in_province, amount, request_kill_house, confirm_code):
sale_type = 'آزاد' if free_sale_in_province == True else 'دولتی'
message = 'درخواست کشتار جدید' \
f'\n' \
f'مرغدار:{poultry_fullname}' \
f'\n' \
f'تعداد:{quantity}' \
f'\n' \
f'نژاد:{chicken_breed}' \
f'\n' \
f'تاریخ کشتار:{send_date}' \
f'\n' \
f'نوع فروش:{sale_type}' \
f'\n' \
f'کشتارگاه:{request_kill_house}' \
f'\n' \
f'کدسفارش:{order_code}' \
f'\n' \
f'قیمت :{amount} ریال' \
f'\n' \
f'کداحراز :{confirm_code}' \
f'\n' \
f'(سامانه رصدیار)'
check_mobile = check_mobile_number(mobile)
if check_mobile:
u = "http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={}&password={}&from=30002501&to={}&message={}".format(
poultry_request_username, poultry_request_password,
mobile, message)
url = u.format()
payload = {}
headers = {"Content-Type": "application/x-www-form-urlencoded"}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
# USERNAME_SMS
def confirm_price_poultry_request_direct_buying_sms(mobile, poultry_fullname, quantity, chicken_breed, send_date,
free_sale_in_province, amount, request_kill_house, confirm_code):
sale_type = 'آزاد' if free_sale_in_province == True else 'دولتی'
message = 'درخواست خرید مستقیم:' \
f'\n' \
f'تعداد:{quantity}' \
f'\n' \
f'تاریخ کشتار:{send_date}' \
f'\n' \
f'نوع فروش:{sale_type}' \
f'\n' \
f'خریدار:{request_kill_house}' \
f'\n' \
f'قیمت :{int(amount)} ریال' \
f'\n' \
f'کداحراز :{confirm_code}' \
f'\n' \
f'(سامانه رصدیار)'
# message = 'درخواست خرید مستقیم:' \
# f'\n' \
# f'مرغدار:{poultry_fullname}' \
# f'\n' \
# f'تعداد:{quantity}' \
# f'\n' \
# f'نژاد:{chicken_breed}' \
# f'\n' \
# f'تاریخ کشتار:{send_date}' \
# f'\n' \
# f'نوع فروش:{sale_type}' \
# f'\n' \
# f'خریدار:{request_kill_house}' \
# f'\n' \
# f'قیمت :{int(amount)} ریال' \
# f'\n' \
# f'کداحراز :{confirm_code}' \
# f'\n' \
# f'(سامانه رصدیار)'
check_mobile = check_mobile_number(mobile)
if check_mobile:
u = "http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={}&password={}&from=30002501&to={}&message={}".format(
direct_buying_username, direct_buying_password,
mobile, message)
url = u.format()
payload = {}
headers = {"Content-Type": "application/x-www-form-urlencoded"}
response = requests.request("GET", url, headers=headers, data=payload)
# USERNAME_SMS
def kill_request_province_sms(mobile, kill_house_name, quantity, chicken_breed, send_date, province, city,
):
message = ' اعلام نیاز جدید کشتارگاه:\n {0}\n تعداد درخواست:{1}\nنژاد:{2}\nتاریخ کشتار:{3}\nآدرس:استان {4}, شهر {5}\n'.format(
kill_house_name, quantity, chicken_breed, send_date, province, city)
check_mobile = check_mobile_number(mobile)
if check_mobile:
u = "http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={}&password={}&from=30002501&to={}&message={}".format(
USERNAME_SMS, PASSWORD_SMS,
mobile, message)
url = u.format()
payload = {}
headers = {"Content-Type": "application/x-www-form-urlencoded"}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
if UNION_NUMBER_2 is not None:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS}&password={PASSWORD_SMS}&from=30002501&to={UNION_NUMBER_2}&message={message}")
def kill_request_delete_province_sms(mobile, kill_house_name, quantity, chicken_breed, send_date, province, city,
):
message = 'لغو درخواست کشتار:\n {0}\n تعداد درخواست:{1}\nنژاد:{2}\nتاریخ کشتار:{3}\nآدرس:استان {4}, شهر {5}'.format(
kill_house_name, quantity, chicken_breed, send_date, province, city)
check_mobile = check_mobile_number(mobile)
if check_mobile:
u = "http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={}&password={}&from=30002501&to={}&message={}".format(
USERNAME_SMS, PASSWORD_SMS,
mobile, message)
url = u.format()
payload = {}
headers = {"Content-Type": "application/x-www-form-urlencoded"}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
def province_kill_request_to_kill_house_sms(mobile, quantity, chicken_breed, send_date, poultry_name,
poultry_mobile, province, city, sale_in_province, amount, kill_house_name
):
sale_type = 'آزاد' if sale_in_province == True else 'دولتی'
amount = "{:,}".format(int(amount))
quantity = "{:,}".format(int(quantity))
message = 'تخصیص کشتار جدید' \
f'\n' \
f'تعداد:{quantity}' \
f'\n' \
f'نژاد:{chicken_breed}' \
f'\n' \
f'تاریخ کشتار:{send_date}' \
f'\n' \
f'نوع فروش:{sale_type}' \
f'\n' \
f'خریدار:{kill_house_name}' \
f'\n' \
f'مرغدار:{poultry_name}' \
f'\n' \
f'تلفن مرغدار:{poultry_mobile}' \
f'\n' \
f'آدرس:{province} - {city}' \
f'\n' \
f'قیمت مرغدار:{amount}' \
f'\n' \
f'(سامانه رصدیار)' \
# message = 'تخصیص کشتار جدید:\n تعداد:{0}\n نژاد: {1}\nتاریخ کشتار:{2}\nمرغدار:{3}\n تلفن مرغدار:{4}\nآدرس:استان {5}, شهر {6}\n '.format(
# quantity, chicken_breed, send_date, poultry_name, poultry_mobile, province, city,
# )
check_mobile = check_mobile_number(mobile)
if check_mobile:
u = "http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={}&password={}&from=30002501&to={}&message={}".format(
USERNAME_SMS, PASSWORD_SMS,
mobile, message)
url = u.format()
payload = {}
headers = {"Content-Type": "application/x-www-form-urlencoded"}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
if UNION_NUMBER_2 is not None:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS}&password={PASSWORD_SMS}&from=30002501&to={UNION_NUMBER_2}&message={message}")
def kill_house_province_kill_request_accept_to_province_sms(mobile, provice_operator_name, quantity,
chicken_breed, send_date, poultry_name,
poultry_mobile, province, city, kill_house_name,
):
message = ' اپراتور گرامی: {0}\n تعداد {1} مرغ با نژاد: {2}\nدر تاریخ کشتار:{3}\n از مرغدار:{4} با شماره تماس:{5}\nبه آدرس:استان {6}, شهر {7}\n توسط:{8} تایید شد.'.format(
provice_operator_name, quantity, chicken_breed, send_date, poultry_name, poultry_mobile, province, city,
kill_house_name
)
check_mobile = check_mobile_number(mobile)
if check_mobile:
u = "http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={}&password={}&from=30002501&to={}&message={}".format(
USERNAME_SMS, PASSWORD_SMS,
mobile, message)
url = u.format()
payload = {}
headers = {"Content-Type": "application/x-www-form-urlencoded"}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
def kill_house_request_to_poultry_sms(mobile, quantity, kill_house_name, send_date, driver_name,
driver_mobile,
type_car, pelak
):
message = 'اطلاعات تحویل بار:\n تعداد:{0}\nخریدار:{1}\nتاریخ تحویل:{2}\n راننده:{3}\n تلفن راننده:{4}\n ماشین:{5}\n با پلاک {6}'.format(
quantity, kill_house_name, send_date, driver_name, driver_mobile, type_car, pelak
)
check_mobile = check_mobile_number(mobile)
if check_mobile:
u = "http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={}&password={}&from=30002501&to={}&message={}".format(
USERNAME_SMS, PASSWORD_SMS,
mobile, message)
url = u.format()
payload = {}
headers = {"Content-Type": "application/x-www-form-urlencoded"}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
def kill_house_request_to_vet_farm_clearnce_sms(mobile, quantity, index_weight, total_weight, poultry_name,
poultry_mobile, kill_house_user_name, kill_house_user_mobile, send_date,
driver_name,
driver_mobile,
type_car, pelak
):
message = 'اطلاعات بار(کد قرنطینه):\n تعداد:{0}\nمیانگین وزن:{1}\nوزن کل:{2}\nفروشنده:{3}-{4}\nخریدار:{5}-{6}\nتاریخ تحویل:{7}\nراننده:{8}-{9}\nماشین:{10}-{11}'.format(
quantity, index_weight, total_weight, poultry_name, poultry_mobile, kill_house_user_name,
kill_house_user_mobile, send_date, driver_name,
driver_mobile,
type_car, pelak
)
check_mobile = check_mobile_number(mobile)
if check_mobile:
u = "http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={}&password={}&from=30002501&to={}&message={}".format(
USERNAME_SMS, PASSWORD_SMS,
mobile, message)
url = u.format()
payload = {}
headers = {"Content-Type": "application/x-www-form-urlencoded"}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
def kill_house_request_to_driver_sms(mobile, send_date, receive_time, quantity, chicken_breed, poultry_name,
poultry_mobile,
poultry_province, poultry_city, poultry_address,
kill_house_name,
kill_house_mobile,
kill_house_province,
kill_house_city, kill_house_address
):
message = 'اطلاعات تحویل بار:\nتاریخ:{0}\nازه زمانی:{1}\nتعداد:{2}\nنژاد:{3}\n مبدا:\nمرغدار:{4}\nشماره تماس:{5}\nآدرس:{6},{7},{8}\n مقصد:\nکشتارگاه:{9}\nشماره تماس:{10}\nآدرس:{11},{12},{13}\n'.format(
send_date, receive_time, quantity, chicken_breed, poultry_name, poultry_mobile,
poultry_province, poultry_city, poultry_address,
kill_house_name,
kill_house_mobile,
kill_house_province,
kill_house_city, kill_house_address
)
check_mobile = check_mobile_number(mobile)
if check_mobile:
u = "http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={}&password={}&from=30002501&to={}&message={}".format(
USERNAME_SMS, PASSWORD_SMS,
mobile, message)
url = u.format()
payload = {}
headers = {"Content-Type": "application/x-www-form-urlencoded"}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
def kill_house_request_to_vet_farm_sms(mobile, send_date, receive_time, quantity, chicken_breed, poultry_name,
poultry_mobile,
poultry_province, poultry_city, poultry_address,
kill_house_name,
kill_house_mobile,
kill_house_province,
kill_house_city, kill_house_address,
driver_name,
driver_mobile,
driver_car,
pelak,
):
message = 'اعلام کد ترخیص:\nتاریخ:{0}\nبازه زمانی:{1}\nتعداد:{2}\nنژاد:{3}\n مبدا:\nمرغدار:{4}\nشماره تماس:{5}\nآدرس:{6},{7},{8}\n مقصد:\nکشتارگاه:{9}\nشماره تماس:{10}\nآدرس:{11},{12},{13}\راننده:{14}\n تلفن راننده:{15}\n ماشین:{16}\n با پلاک {17}'.format(
send_date, receive_time, quantity, chicken_breed, poultry_name, poultry_mobile,
poultry_province, poultry_city, poultry_address,
kill_house_name,
kill_house_mobile,
kill_house_province,
kill_house_city, kill_house_address,
driver_name,
driver_mobile,
driver_car,
pelak,
)
check_mobile = check_mobile_number(mobile)
if check_mobile:
u = "http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={}&password={}&from=30002501&to={}&message={}".format(
USERNAME_SMS, PASSWORD_SMS,
mobile, message)
url = u.format()
payload = {}
headers = {"Content-Type": "application/x-www-form-urlencoded"}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
def kill_house_request_to_kill_house_vet_sms(mobile, send_date, receive_time, quantity, chicken_breed, poultry_name,
driver_name,
driver_car,
pelak,
):
message = 'اعلام تحویل بار:\nتاریخ:{0}\nبازه زمانی:{1}\nتعداد:{2}\nنژاد:{3}\nاز مرغدار:{4}\nراننده:{5}\nماشین:{6}\nبا پلاک {7}\nتحویل شما داده میشود.'.format(
send_date, receive_time, quantity, chicken_breed, poultry_name,
driver_name,
driver_car,
pelak,
)
check_mobile = check_mobile_number(mobile)
if check_mobile:
u = "http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={}&password={}&from=30002501&to={}&message={}".format(
USERNAME_SMS, PASSWORD_SMS,
mobile, message)
url = u.format()
payload = {}
headers = {"Content-Type": "application/x-www-form-urlencoded"}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
def kill_house_vet_to_poultry_sms(mobile, send_date, receive_time, quantity, chicken_breed, poultry_name,
driver_name,
driver_car,
pelak,
):
message = 'اعلام تاییدتحویل بار:\nتاریخ:{0}\nبازه زمانی:{1}\nتعداد:{2}\nنژاد:{3}\nاز مرغدار:{4}\nراننده:{5}\nماشین:{6}\nبا پلاک {7}\nتحویل کشتارگاه شد.'.format(
send_date, receive_time, quantity, chicken_breed, poultry_name,
driver_name,
driver_car,
pelak,
)
check_mobile = check_mobile_number(mobile)
if check_mobile:
u = "http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={}&password={}&from=30002501&to={}&message={}".format(
USERNAME_SMS, PASSWORD_SMS,
mobile, message)
url = u.format()
payload = {}
headers = {"Content-Type": "application/x-www-form-urlencoded"}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
def kill_house_vet_to_province_sms(mobile, send_date, receive_time, quantity, chicken_breed, poultry_name,
driver_name,
driver_car,
pelak,
):
message = 'اعلام تاییدتحویل بار:\nتاریخ:{0}\nبازه زمانی:{1}\nتعداد:{2}\nنژاد:{3}\nاز مرغدار:{4}\nراننده:{5}\nماشین:{6}\nبا پلاک {7}\nتحویل کشتارگاه شد.'.format(
send_date, receive_time, quantity, chicken_breed, poultry_name,
driver_name,
driver_car,
pelak,
)
check_mobile = check_mobile_number(mobile)
if check_mobile:
u = "http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={}&password={}&from=30002501&to={}&message={}".format(
USERNAME_SMS, PASSWORD_SMS,
mobile, message)
url = u.format()
payload = {}
headers = {"Content-Type": "application/x-www-form-urlencoded"}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
def kill_house_vet_to_kill_house_sms(mobile, send_date, receive_time, quantity, chicken_breed, poultry_name,
driver_name,
driver_car,
pelak,
):
message = 'اعلام تاییدتحویل بار:\nتاریخ:{0}\nبازه زمانی:{1}\nتعداد:{2}\nنژاد:{3}\nاز مرغدار:{4}\nراننده:{5}\nماشین:{6}\nبا پلاک {7}\nتحویل کشتارگاه شد.'.format(
send_date, receive_time, quantity, chicken_breed, poultry_name,
driver_name,
driver_car,
pelak,
)
check_mobile = check_mobile_number(mobile)
if check_mobile:
u = "http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={}&password={}&from=30002501&to={}&message={}".format(
USERNAME_SMS, PASSWORD_SMS,
mobile, message)
url = u.format()
payload = {}
headers = {"Content-Type": "application/x-www-form-urlencoded"}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
def province_kill_request_reject_sms(mobile, kill_house_name
):
message = ' کاربر گرامی: {0}\n درخواست اولیه کشتار شما توسط استان رد شد.'.format(
kill_house_name
)
check_mobile = check_mobile_number(mobile)
if check_mobile:
u = "http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={}&password={}&from=30002501&to={}&message={}".format(
USERNAME_SMS, PASSWORD_SMS,
mobile, message)
url = u.format()
payload = {}
headers = {"Content-Type": "application/x-www-form-urlencoded"}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
def allow_poultry_city_province_sms(mobile, Poultry_name
):
message = ' کاربر گرامی:\nوکالت ثبت درخواست کشتار توسط مرغدار:{} برای شما صادر شد.'.format(
Poultry_name
)
check_mobile = check_mobile_number(mobile)
if check_mobile:
u = "http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={}&password={}&from=30002501&to={}&message={}".format(
USERNAME_SMS, PASSWORD_SMS,
mobile, message)
url = u.format()
payload = {}
headers = {"Content-Type": "application/x-www-form-urlencoded"}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
def allow_poultry_city_for_poultry_sms(mobile, Poultry_name
):
message = ' مرغدار گرامی:{0}\n وکالت ثبت درخواست کشتار توسط شما برای شهرستان ثیت شد.'.format(
Poultry_name
)
check_mobile = check_mobile_number(mobile)
if check_mobile:
u = "http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={}&password={}&from=30002501&to={}&message={}".format(
USERNAME_SMS, PASSWORD_SMS,
mobile, message)
url = u.format()
payload = {}
headers = {"Content-Type": "application/x-www-form-urlencoded"}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
def allow_poultry_province_for_poultry_sms(mobile, Poultry_name
):
message = ' مرغدار گرامی:{0}\n وکالت ثبت درخواست کشتار توسط شما برای استان ثیت شد.'.format(
Poultry_name
)
check_mobile = check_mobile_number(mobile)
if check_mobile:
u = "http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={}&password={}&from=30002501&to={}&message={}".format(
USERNAME_SMS, PASSWORD_SMS,
mobile, message)
url = u.format()
payload = {}
headers = {"Content-Type": "application/x-www-form-urlencoded"}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
def kill_house_vet_check_receive_sms(request):
url = 'http://webservice.sahandsms.com/NewSMSWebService.asmx/RecieveSMS'
params = {'Username': USERNAME_SMS, 'password': PASSWORD_SMS, 'phNo': '30002501', 'startdate': '5/1/2023',
'enddate': '6/2/2023'}
response = send_sms_request(url, params=params)
if response.status_code != 200:
pass
else:
xml_str = response.content
root = ET.fromstring(xml_str)
mobile = root.iter('RcvSmsfrom')
text = root.iter('RcvSmsText')
for m, t in zip(mobile, text):
kill_house_request = KillHouseRequest.objects.filter(trash=False, bar_code=t.text).first()
if kill_house_request:
vet = KillHouseVet.objects.filter(vet__user__mobile=m.text
, trash=False,
kill_house=kill_house_request.killhouse_user).first()
if vet:
kill_house_request.vet_state = "accepted"
kill_house_request.save()
vet_check_request = VetCheckRequest(
kill_house_vet=vet,
kill_house_request=kill_house_request,
state='accepted'
)
vet_check_request.save()
def steward_allocation_sms(mobile, date, weight, seller, number,
buyer, amount):
message = 'اطلاعات خرید گوشت مرغ\n' \
'فروشنده: {0} \n' \
'تاریخ فروش: {1}\n' \
'وزن سفارش: {2} (کیلوگرم)\n' \
'مبلغ هر کیلو: {3} (ریال)\n' \
'کد احراز: {4}\n' \
'سامانه رصدیار'.format(seller, date, to_locale_str(weight), to_locale_str(amount), number)
check_mobile = check_mobile_number(mobile)
if check_mobile:
u = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={steward_allocation_username}"
f"&password={steward_allocation_password}&from=30002501&to={mobile}&message={message}")
def direct_buying_code_sms(mobile, buyer, buyer_mobile, quantity, kill_place, date, code
):
message = 'درخواست خرید مستقیم:\nخریدار:{0}-{1}\nتعداد:{2}\nمحل کشتار:{3}\nتاریخ:{4}\nکد احراز:{5}'.format(
buyer, buyer_mobile, quantity, kill_place, date, code
)
check_mobile = check_mobile_number(mobile)
if check_mobile:
u = "http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={}&password={}&from=30002501&to={}&message={}".format(
USERNAME_SMS, PASSWORD_SMS,
mobile, message)
url = u.format()
payload = {}
headers = {"Content-Type": "application/x-www-form-urlencoded"}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
# USERNAME_SMS
def export_code_sms(mobile, buyer, buyer_mobile, quantity, kill_place, date, export_country, code
, poultry_name, province_mobile):
message = f'درخواست خرید برای صادرات:' \
f'\n' \
f'مرغدار:{poultry_name}' \
f'\n' \
f'تلفن مرغدار:{mobile}' \
f'\n' \
f'خریدار:{buyer}' \
f'\n' \
f'تلفن خریدار:{buyer_mobile}' \
f'\n' \
f'تعداد:{quantity}' \
f'\n' \
f'محل کشتار:{kill_place}' \
f'\n' \
f'تاریخ:{date}' \
f'\n' \
f'کشور مقصد:{export_country}' \
f'\n' \
f'کد احراز:{code}' \
f'\n' \
f'(سامانه رصدیار)'
check_mobile = check_mobile_number(mobile)
if check_mobile:
send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS}&password="
f"{PASSWORD_SMS}&from=30002501&to={mobile}&message={message}")
send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS}&password="
f"{PASSWORD_SMS}&from=30002501&to={province_mobile}&message={message}")
def steward2_allocation_sms(mobile=None):
message = 'مورخ تعداد با وزن کیلوگرم از طرف کشتارگاه به شما تخصیص داده شد \n کد احراز:'
check_mobile = check_mobile_number(mobile)
if check_mobile:
u = "http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={}&password={}&from=30002501&to={}&message={}".format(
USERNAME_SMS, PASSWORD_SMS,
mobile, message)
url = u.format()
payload = {}
headers = {"Content-Type": "application/x-www-form-urlencoded"}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
def send_discharge_bar(text, mobile):
user_name = USERNAME_SMS
password = PASSWORD_SMS
message = f' بار با شماره {text} با موفقیت تایید تخلیه شد.'
check_mobile = check_mobile_number(mobile)
if check_mobile:
u = (f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username="
f"{user_name}&password={password}&from=30002501&to={mobile}&message={message}")
url = u.format()
payload = {}
headers = {"Content-Type": "application/x-www-form-urlencoded"}
requests.request("GET", url, headers=headers, data=payload)
def receive_sms_panel():
now = datetime.now().date()
user_name = USERNAME_SMS
password = PASSWORD_SMS
url = 'http://webservice.sahandsms.com/NewSMSWebService.asmx/RecieveSMS'
params = {f'Username': {user_name}, 'password': {password}, 'phNo': '30002501', 'startdate': {now},
'enddate': {now}}
response = send_sms_request(url, params=params)
xml_str = response.content
root = ET.fromstring(xml_str)
mobile = root.iter('RcvSmsfrom')
text = root.iter('RcvSmsText')
for m, t in zip(mobile, text):
try:
kill_house_request = KillHouseRequest.objects.filter(trash=False, bar_code=t.text,
vet_state='pending').first()
except:
continue
if kill_house_request:
kill_house_vet = KillHouseVet.objects.filter(vet__user__mobile=m.text,
kill_house=kill_house_request.killhouse_user).first()
if kill_house_vet:
kill_house_request.vet_state = 'complate'
VetCheckRequest.objects.create(
kill_house_vet=kill_house_vet,
kill_house_request=kill_house_request,
state='complete'
)
VetCheckAllocations.objects.create(
vet=kill_house_vet.vet,
kill_house_request=kill_house_request
)
kill_house_request.save()
send_sms = threading.Thread(target=send_discharge_bar, args=(t.text, m.text))
send_sms.start()
def condition_of_sms(request):
query = UserMessageSend.objects.filter(trash=False).select_related('user')
list1 = []
for q in query:
if len(q.receive_code) > 3:
req = send_sms_request(
url=f"http://webservice.sahandsms.com/newsmswebservice.asmx/GetQueueMessageStatus?username={USERNAME_SMS}&password={PASSWORD_SMS}&MessageIds={q.receive_code}"
)
root = ET.fromstring(req.content)
int_value = int(root.find('.//{http://tempuri.org/}int').text)
else:
int_value = None
dict1 = {
"role": q.user.role.name,
"user": q.user.fullname,
"mobile": q.user.mobile,
"message": q.message,
"create_date": q.create_date,
'receive_code': int_value,
}
list1.append(dict1)
return HttpResponse(list1)
def send_gate_way_sms():
kill_houses = KillHouse.objects.filter(trash=False, out_province=False).select_related('kill_house_operator__user') \
.only('name', 'killer', 'kill_house_operator__user__user_gate_way_id', 'kill_house_operator__user__mobile')
for kill_house in kill_houses:
total_paid_wage = 0
total_unpaid_wage = get_finance_info(kill_house)['total_price']
# province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user=kill_house,
# state__in=('pending', 'accepted'),
# trash=False,
# return_to_province=False,
# first_car_allocated_quantity=0,
# archive_wage=False,
# ).exclude(union_share=0, company_share=0,
# guilds_share=0).only(
# 'total_killed_weight', 'union_share', 'company_share',
# 'guilds_share', 'total_wage_amount', 'total_killed_quantity')
# freezing_province_kill_requests = province_kill_requests.filter(
# province_request__poultry_request__freezing=True).only('total_killed_weight', 'union_share',
# 'company_share',
# 'guilds_share', 'total_wage_amount',
# 'total_killed_quantity')
#
# kill_house_requests = KillHouseRequest.objects.filter(
# Q(Q(killer=kill_house) & Q(killhouse_user=kill_house)) | Q(
# Q(killer__isnull=True) & Q(killhouse_user=kill_house)) | Q(
# Q(killer__isnull=True) | Q(killer=kill_house)),
# archive_wage=False,
# trash=False
# ).select_related('province_kill_request').only('accepted_real_weight',
# 'province_kill_request__union_share_percent',
# 'province_kill_request__wage', 'accepted_real_weight',
# 'province_kill_request__guilds_share_percent',
# 'province_kill_request__company_share_percent',
# 'accepted_real_quantity', 'accepted_real_quantity')
# kill_house_requests = kill_house_requests.filter(
# Q(killer=kill_house) | Q(killhouse_user=kill_house)).select_related(
# 'province_kill_request').only(
# 'accepted_real_weight', 'province_kill_request__union_share_percent',
# 'province_kill_request__wage', 'accepted_real_weight', 'province_kill_request__guilds_share_percent',
# 'province_kill_request__company_share_percent', 'accepted_real_quantity')
#
# freezing_kill_house_requests = kill_house_requests.filter(
# province_kill_request__province_request__poultry_request__freezing=True).select_related(
# 'province_kill_request').only('accepted_real_weight', 'province_kill_request__union_share_percent',
# 'province_kill_request__wage', 'accepted_real_weight',
# 'province_kill_request__guilds_share_percent',
# 'province_kill_request__company_share_percent', 'accepted_real_quantity')
#
# free_bars = KillHouseFreeBarInformation.objects.filter(kill_house=kill_house, archive_wage=False,
# trash=False).only('live_weight', 'union_share',
# 'weight_of_carcasses',
# 'company_share',
# 'guilds_share',
# 'total_wage_amount')
# free_bars_live = free_bars.filter(buy_type='live', trash=False).only('live_weight', 'union_share',
# 'weight_of_carcasses',
# 'company_share',
# 'guilds_share',
# 'total_wage_amount')
# free_bars_carcases = free_bars.filter(buy_type='carcass', trash=False).only('live_weight', 'union_share',
# 'weight_of_carcasses',
# 'company_share',
# 'guilds_share',
# 'total_wage_amount'
# )
#
#
# province_kill_requests_total_wage = \
# province_kill_requests.filter(province_request__poultry_request__freezing=False).aggregate(
# total=Sum('total_wage_amount'))[
# 'total'] or 0
# if wage_percent > 0:
# province_kill_requests_total_wage -= province_kill_requests_total_wage * wage_percent
# freezing_province_kill_request_total_wage = \
# freezing_province_kill_requests.aggregate(total=Sum('total_wage_amount'))['total'] or 0
#
# kill_house_reqest_total_wage = \
# kill_house_requests.filter(
# province_kill_request__province_request__poultry_request__freezing=False).aggregate(
# total=Sum(F('accepted_real_weight') * F('province_kill_request__wage')))[
# 'total'] or 0
# if wage_percent > 0:
# kill_house_reqest_total_wage -= kill_house_reqest_total_wage * wage_percent
# freezing_kill_house_reqest_total_wage = \
# freezing_kill_house_requests.aggregate(
# total=Sum(F('accepted_real_weight') * F('province_kill_request__wage')))[
# 'total'] or 0
#
# free_bars_live_total_wage = free_bars_live.aggregate(total=Sum('total_wage_amount'))[
# 'total'] or 0
#
# free_bars_carcases_total_wage = free_bars_carcases.aggregate(total=Sum('total_wage_amount'))[
# 'total'] or 0
# total_unpaid_wage = free_bars_carcases_total_wage + kill_house_reqest_total_wage + \
# freezing_kill_house_reqest_total_wage + province_kill_requests_total_wage + \
# freezing_province_kill_request_total_wage + free_bars_live_total_wage
slaughter_transactions = InternalTransaction.objects.filter(
Q(kill_house=kill_house) | Q(parent_kill_house=kill_house), status='completed',
trash=False).only('union_share', 'company_share', 'guilds_share', 'amount')
total_paid_wage = slaughter_transactions.aggregate(total=Sum('amount'))[
'total'] or 0
if kill_house.killer == False:
killer = 'کشتارگاه'
else:
killer = 'کشتارکن'
kill_house_purchase = KillHousePurchaseRequest.objects.filter(kill_house=kill_house).first()
total_wage = total_unpaid_wage - (total_paid_wage + kill_house.off)
unpaid = "{:,}".format(int(total_wage))
user_token = 'k' + kill_house.kill_house_operator.user.user_gate_way_id
message = f'کاربر گرامی {killer + "(" + kill_house.name + ")"}' \
'\n' \
'باسلام' \
'\n' \
f'مبلغ بدهی تعرفه شما {unpaid} ریال می باشدبا توجه به سقف مجاز بدهی تعیین شده، در اسرع وقت اقدام به پرداخت تعرفه خود کنید.' \
'\n' \
f'https://rasadyar.net/pay/{base_pos_id}/{user_token}' \
f'\n' \
f'(سامانه رصدیار)'
if kill_house_purchase and kill_house_purchase.limitation_number <= total_wage and \
kill_house_purchase.limitation == True:
continue
else:
if int(total_wage) > 0:
# if kill_house_purchase.limitation_number > total_wage:
# debt=int(kill_house_purchase.limitation_number*0.5)
# if int(total_wage >= debt):
check_mobile = check_mobile_number(kill_house.kill_house_operator.user.mobile)
if check_mobile:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={gate_way_username}&password={gate_way_password}&from=30002501&to={kill_house.kill_house_operator.user.mobile}&message={message}")
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={gate_way_username}&password={gate_way_password}&from=30002501&to={COMPANY_NUMBER}&message={message}")
if UNION_THIRD_NUMBER is not None:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={gate_way_username}&password={gate_way_password}&from=30002501&to={UNION_THIRD_NUMBER}&message={message}")
if UNION_FOURTH_NUMBER is not None:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={gate_way_username}&password={gate_way_password}&from=30002501&to={UNION_FOURTH_NUMBER}&message={message}")
# OUT_SMS_PASS
def send_gate_way_sms_manual(request):
kill_houses = KillHouse.objects.filter(trash=False, out_province=False).select_related('kill_house_operator__user') \
.only('name', 'killer', 'kill_house_operator__user__user_gate_way_id', 'kill_house_operator__user__mobile')
for kill_house in kill_houses:
total_paid_wage = 0
total_unpaid_wage = get_finance_info(kill_house)['total_price']
# province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user=kill_house,
# state__in=('pending', 'accepted'),
# trash=False,
# return_to_province=False,
# first_car_allocated_quantity=0,
# archive_wage=False,
# ).exclude(union_share=0, company_share=0,
# guilds_share=0).only(
# 'total_killed_weight', 'union_share', 'company_share',
# 'guilds_share', 'total_wage_amount', 'total_killed_quantity')
# freezing_province_kill_requests = province_kill_requests.filter(
# province_request__poultry_request__freezing=True).only('total_killed_weight', 'union_share',
# 'company_share',
# 'guilds_share', 'total_wage_amount',
# 'total_killed_quantity')
#
# kill_house_requests = KillHouseRequest.objects.filter(
# Q(Q(killer=kill_house) & Q(killhouse_user=kill_house)) | Q(
# Q(killer__isnull=True) & Q(killhouse_user=kill_house)) | Q(
# Q(killer__isnull=True) | Q(killer=kill_house)),
# archive_wage=False,
# trash=False
# ).select_related('province_kill_request').only('accepted_real_weight',
# 'province_kill_request__union_share_percent',
# 'province_kill_request__wage', 'accepted_real_weight',
# 'province_kill_request__guilds_share_percent',
# 'province_kill_request__company_share_percent',
# 'accepted_real_quantity', 'accepted_real_quantity')
# kill_house_requests = kill_house_requests.filter(
# Q(killer=kill_house) | Q(killhouse_user=kill_house)).select_related(
# 'province_kill_request').only(
# 'accepted_real_weight', 'province_kill_request__union_share_percent',
# 'province_kill_request__wage', 'accepted_real_weight', 'province_kill_request__guilds_share_percent',
# 'province_kill_request__company_share_percent', 'accepted_real_quantity')
#
# freezing_kill_house_requests = kill_house_requests.filter(
# province_kill_request__province_request__poultry_request__freezing=True).select_related(
# 'province_kill_request').only('accepted_real_weight', 'province_kill_request__union_share_percent',
# 'province_kill_request__wage', 'accepted_real_weight',
# 'province_kill_request__guilds_share_percent',
# 'province_kill_request__company_share_percent', 'accepted_real_quantity')
#
# free_bars = KillHouseFreeBarInformation.objects.filter(kill_house=kill_house, archive_wage=False,
# trash=False).only('live_weight', 'union_share',
# 'weight_of_carcasses',
# 'company_share',
# 'guilds_share',
# 'total_wage_amount')
# free_bars_live = free_bars.filter(buy_type='live', trash=False).only('live_weight', 'union_share',
# 'weight_of_carcasses',
# 'company_share',
# 'guilds_share',
# 'total_wage_amount')
# free_bars_carcases = free_bars.filter(buy_type='carcass', trash=False).only('live_weight', 'union_share',
# 'weight_of_carcasses',
# 'company_share',
# 'guilds_share',
# 'total_wage_amount'
# )
#
#
# province_kill_requests_total_wage = \
# province_kill_requests.filter(province_request__poultry_request__freezing=False).aggregate(
# total=Sum('total_wage_amount'))[
# 'total'] or 0
# if wage_percent > 0:
# province_kill_requests_total_wage -= province_kill_requests_total_wage * wage_percent
# freezing_province_kill_request_total_wage = \
# freezing_province_kill_requests.aggregate(total=Sum('total_wage_amount'))['total'] or 0
#
# kill_house_reqest_total_wage = \
# kill_house_requests.filter(
# province_kill_request__province_request__poultry_request__freezing=False).aggregate(
# total=Sum(F('accepted_real_weight') * F('province_kill_request__wage')))[
# 'total'] or 0
# if wage_percent > 0:
# kill_house_reqest_total_wage -= kill_house_reqest_total_wage * wage_percent
# freezing_kill_house_reqest_total_wage = \
# freezing_kill_house_requests.aggregate(
# total=Sum(F('accepted_real_weight') * F('province_kill_request__wage')))[
# 'total'] or 0
#
# free_bars_live_total_wage = free_bars_live.aggregate(total=Sum('total_wage_amount'))[
# 'total'] or 0
#
# free_bars_carcases_total_wage = free_bars_carcases.aggregate(total=Sum('total_wage_amount'))[
# 'total'] or 0
# total_unpaid_wage = free_bars_carcases_total_wage + kill_house_reqest_total_wage + \
# freezing_kill_house_reqest_total_wage + province_kill_requests_total_wage + \
# freezing_province_kill_request_total_wage + free_bars_live_total_wage
slaughter_transactions = InternalTransaction.objects.filter(
Q(kill_house=kill_house) | Q(parent_kill_house=kill_house), status='completed',
trash=False).only('union_share', 'company_share', 'guilds_share', 'amount')
total_paid_wage = slaughter_transactions.aggregate(total=Sum('amount'))[
'total'] or 0
if kill_house.killer == False:
killer = 'کشتارگاه'
else:
killer = 'کشتارکن'
kill_house_purchase = KillHousePurchaseRequest.objects.filter(kill_house=kill_house).first()
total_wage = total_unpaid_wage - (total_paid_wage + kill_house.off)
unpaid = "{:,}".format(int(total_wage))
user_token = 'k' + kill_house.kill_house_operator.user.user_gate_way_id
message = f'کاربر گرامی {killer + "(" + kill_house.name + ")"}' \
'\n' \
'باسلام' \
'\n' \
f'مبلغ بدهی تعرفه شما {unpaid} ریال می باشدبا توجه به سقف مجاز بدهی تعیین شده، در اسرع وقت اقدام به پرداخت تعرفه خود کنید.' \
'\n' \
f'https://rasadyar.net/pay/{base_pos_id}/{user_token}' \
f'\n' \
f'(سامانه رصدیار)'
if kill_house_purchase and kill_house_purchase.limitation_number <= total_wage and \
kill_house_purchase.limitation == True:
continue
else:
if int(total_wage) > 0:
# if kill_house_purchase.limitation_number > total_wage:
# debt=int(kill_house_purchase.limitation_number*0.5)
# if int(total_wage >= debt):
check_mobile = check_mobile_number(kill_house.kill_house_operator.user.mobile)
if check_mobile:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={gate_way_username}&password={gate_way_password}&from=30002501&to={kill_house.kill_house_operator.user.mobile}&message={message}")
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={gate_way_username}&password={gate_way_password}&from=30002501&to={COMPANY_NUMBER}&message={message}")
if UNION_THIRD_NUMBER is not None:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={gate_way_username}&password={gate_way_password}&from=30002501&to={UNION_THIRD_NUMBER}&message={message}")
if UNION_FOURTH_NUMBER is not None:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={gate_way_username}&password={gate_way_password}&from=30002501&to={UNION_FOURTH_NUMBER}&message={message}")
return HttpResponse('ok')
def send_province_request_pdf_sms():
mobile = [UNION_NUMBER]
date = datetime.now().date()
province_kill_requests = ProvinceKillRequest.objects.filter(kill_request__recive_date__date=date, trash=False,
state__in=('pending', 'accepted'),
return_to_province=False)
poultry = Poultry.objects.filter(
key__in=province_kill_requests.values_list('province_request__poultry_request__poultry__key', flat=True))
vat_farm = VetFarm.objects.filter(trash=False, poultry__in=poultry).values_list('vet__user__mobile',
flat=True).distinct()
mobile.extend(vat_farm)
message = 'کاربرگرامی' \
'\n' \
'جهت دریافت گزارش روزانه تخصیص مرغ استان بر روی لینک کلیک کنید:' \
'\n' \
f'https://{base_url_sms}.rasadyaar.ir/reports/ds'
for m in mobile:
check_mobile = check_mobile_number(m)
if check_mobile:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS_FINANCIAL}&password={PASSWORD_SMS_FINANCIAL}&from=30002501&to={m}&message={message}")
def send_deactivate_panel_debt_sms():
kill_houses = KillHouse.objects.filter(trash=False, out_province=False)
for kill_house in kill_houses:
kill_house_purchase = KillHousePurchaseRequest.objects.filter(limitation=True, kill_house=kill_house).first()
if kill_house_purchase:
total_unpaid_wage = get_finance_info(kill_house)['total_price']
total_paid_wage = 0
# province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user=kill_house,
# state__in=('pending', 'accepted'),
# trash=False,
# return_to_province=False,
# first_car_allocated_quantity=0,
# archive_wage=False,
# ).exclude(union_share=0, company_share=0,
# guilds_share=0).only(
# 'total_killed_weight', 'union_share', 'company_share',
# 'guilds_share', 'total_wage_amount', 'total_killed_quantity')
# freezing_province_kill_requests = province_kill_requests.filter(
# province_request__poultry_request__freezing=True).only('total_killed_weight', 'union_share',
# 'company_share',
# 'guilds_share', 'total_wage_amount',
# 'total_killed_quantity')
#
# kill_house_requests = KillHouseRequest.objects.filter(
# Q(Q(killer=kill_house) & Q(killhouse_user=kill_house)) | Q(
# Q(killer__isnull=True) & Q(killhouse_user=kill_house)) | Q(
# Q(killer__isnull=True) | Q(killer=kill_house)),
# archive_wage=False,
# trash=False
# ).select_related('province_kill_request').only('accepted_real_weight',
# 'province_kill_request__union_share_percent',
# 'province_kill_request__wage', 'accepted_real_weight',
# 'province_kill_request__guilds_share_percent',
# 'province_kill_request__company_share_percent',
# 'accepted_real_quantity', 'accepted_real_quantity')
# kill_house_requests = kill_house_requests.filter(Q(killer=kill_house) | Q(killhouse_user=kill_house)).select_related(
# 'province_kill_request').only(
# 'accepted_real_weight', 'province_kill_request__union_share_percent',
# 'province_kill_request__wage', 'accepted_real_weight', 'province_kill_request__guilds_share_percent',
# 'province_kill_request__company_share_percent', 'accepted_real_quantity')
#
# freezing_kill_house_requests = kill_house_requests.filter(
# province_kill_request__province_request__poultry_request__freezing=True).select_related(
# 'province_kill_request').only('accepted_real_weight', 'province_kill_request__union_share_percent',
# 'province_kill_request__wage', 'accepted_real_weight',
# 'province_kill_request__guilds_share_percent',
# 'province_kill_request__company_share_percent', 'accepted_real_quantity')
#
# free_bars = KillHouseFreeBarInformation.objects.filter(kill_house=kill_house, archive_wage=False,
# trash=False).only('live_weight', 'union_share',
# 'weight_of_carcasses',
# 'company_share',
# 'guilds_share',
# 'total_wage_amount')
# free_bars_live = free_bars.filter(buy_type='live', trash=False).only('live_weight', 'union_share',
# 'weight_of_carcasses',
# 'company_share',
# 'guilds_share',
# 'total_wage_amount')
# free_bars_carcases = free_bars.filter(buy_type='carcass', trash=False).only('live_weight', 'union_share',
# 'weight_of_carcasses',
# 'company_share',
# 'guilds_share',
# 'total_wage_amount'
# )
slaughter_transactions = InternalTransaction.objects.filter(
Q(kill_house=kill_house) | Q(parent_kill_house=kill_house),
status='completed',
trash=False).only('union_share', 'company_share', 'guilds_share', 'amount')
# province_kill_requests_total_wage = \
# province_kill_requests.filter(province_request__poultry_request__freezing=False).aggregate(
# total=Sum('total_wage_amount'))[
# 'total'] or 0
# if wage_percent > 0:
# province_kill_requests_total_wage -= province_kill_requests_total_wage * wage_percent
# freezing_province_kill_request_total_wage = \
# freezing_province_kill_requests.aggregate(total=Sum('total_wage_amount'))['total'] or 0
#
# kill_house_reqest_total_wage = \
# kill_house_requests.filter(
# province_kill_request__province_request__poultry_request__freezing=False).aggregate(
# total=Sum(F('accepted_real_weight') * F('province_kill_request__wage')))[
# 'total'] or 0
# if wage_percent > 0:
# kill_house_reqest_total_wage -= kill_house_reqest_total_wage * wage_percent
# freezing_kill_house_reqest_total_wage = \
# freezing_kill_house_requests.aggregate(
# total=Sum(F('accepted_real_weight') * F('province_kill_request__wage')))[
# 'total'] or 0
#
# free_bars_live_total_wage = free_bars_live.aggregate(total=Sum('total_wage_amount'))[
# 'total'] or 0
#
# free_bars_carcases_total_wage = free_bars_carcases.aggregate(total=Sum('total_wage_amount'))[
# 'total'] or 0
# total_unpaid_wage = free_bars_carcases_total_wage + kill_house_reqest_total_wage + \
# freezing_kill_house_reqest_total_wage + province_kill_requests_total_wage + \
# freezing_province_kill_request_total_wage + free_bars_live_total_wage
total_paid_wage = slaughter_transactions.aggregate(total=Sum('amount'))[
'total'] or 0
total_wage = total_unpaid_wage - (total_paid_wage + kill_house.off)
if kill_house_purchase.limitation_number <= total_wage:
unpaid = "{:,}".format(int(total_wage))
if kill_house.killer == False:
killer = 'کشتارگاه'
else:
killer = 'کشتارکن'
amount = "{:,}".format(int(kill_house_purchase.limitation_number))
user_token = 'k' + kill_house.kill_house_operator.user.user_gate_way_id
message = f'کاربر گرامی {killer + "(" + kill_house.name + ")"}' \
f'\n' \
f'باسلام واحترام ' \
f'\n' \
f'باتوجه به عدم پرداخت بدهی تعرفه سامانه به مبلغ{unpaid} امکان ثبت کشتار برای شما وجود ندارد.جهت فعال سازی پنل، بدهی شما باید کمتر از {amount} ریال باشد.' \
f'\n' \
f'لازم به توضیح است که کشتار خارج از سامانه به عنوان کشتار و عرضه خارج از شبکه محسوب میگردد.' \
f'\n' \
f'لینک مشاهده و پرداخت بدهی:' \
f'\n' \
f'https://rasadyar.net/pay/{base_pos_id}/{user_token} \n' \
f'\n' \
f'(سامانه رصدیار)'
check_mobile = check_mobile_number(kill_house.kill_house_operator.user.mobile)
if check_mobile:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={send_deactivate_username}&password={send_deactivate_password}&from=30002501&to={kill_house.kill_house_operator.user.mobile}&message={message}")
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={send_deactivate_username}&password={send_deactivate_password}&from=30002501&to={COMPANY_NUMBER}&message={message}")
if UNION_SECOND_NUMBER is not None:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={send_deactivate_username}&password={send_deactivate_password}&from=30002501&to={UNION_SECOND_NUMBER}&message={message}")
if UNION_THIRD_NUMBER is not None:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={send_deactivate_username}&password={send_deactivate_password}&from=30002501&to={UNION_THIRD_NUMBER}&message={message}")
if UNION_FIFTH_NUMBER is not None:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={send_deactivate_username}&password={send_deactivate_password}&from=30002501&to={UNION_FIFTH_NUMBER}&message={message}")
if UNION_SIXTH_NUMBER is not None:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={send_deactivate_username}&password={send_deactivate_password}&from=30002501&to={UNION_SIXTH_NUMBER}&message={message}")
# OUT_SMS_PASS
def send_deactivate_panel_debt_sms_manual(request):
kill_houses = KillHouse.objects.filter(trash=False, out_province=False)
for kill_house in kill_houses:
kill_house_purchase = KillHousePurchaseRequest.objects.filter(limitation=True, kill_house=kill_house).first()
if kill_house_purchase:
total_unpaid_wage = get_finance_info(kill_house)['total_price']
total_paid_wage = 0
# province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user=kill_house,
# state__in=('pending', 'accepted'),
# trash=False,
# return_to_province=False,
# first_car_allocated_quantity=0,
# archive_wage=False,
# ).exclude(union_share=0, company_share=0,
# guilds_share=0).only(
# 'total_killed_weight', 'union_share', 'company_share',
# 'guilds_share', 'total_wage_amount', 'total_killed_quantity')
# freezing_province_kill_requests = province_kill_requests.filter(
# province_request__poultry_request__freezing=True).only('total_killed_weight', 'union_share',
# 'company_share',
# 'guilds_share', 'total_wage_amount',
# 'total_killed_quantity')
#
# kill_house_requests = KillHouseRequest.objects.filter(
# Q(Q(killer=kill_house) & Q(killhouse_user=kill_house)) | Q(
# Q(killer__isnull=True) & Q(killhouse_user=kill_house)) | Q(
# Q(killer__isnull=True) | Q(killer=kill_house)),
# archive_wage=False,
# trash=False
# ).select_related('province_kill_request').only('accepted_real_weight',
# 'province_kill_request__union_share_percent',
# 'province_kill_request__wage', 'accepted_real_weight',
# 'province_kill_request__guilds_share_percent',
# 'province_kill_request__company_share_percent',
# 'accepted_real_quantity', 'accepted_real_quantity')
# kill_house_requests = kill_house_requests.filter(Q(killer=kill_house) | Q(killhouse_user=kill_house)).select_related(
# 'province_kill_request').only(
# 'accepted_real_weight', 'province_kill_request__union_share_percent',
# 'province_kill_request__wage', 'accepted_real_weight', 'province_kill_request__guilds_share_percent',
# 'province_kill_request__company_share_percent', 'accepted_real_quantity')
#
# freezing_kill_house_requests = kill_house_requests.filter(
# province_kill_request__province_request__poultry_request__freezing=True).select_related(
# 'province_kill_request').only('accepted_real_weight', 'province_kill_request__union_share_percent',
# 'province_kill_request__wage', 'accepted_real_weight',
# 'province_kill_request__guilds_share_percent',
# 'province_kill_request__company_share_percent', 'accepted_real_quantity')
#
# free_bars = KillHouseFreeBarInformation.objects.filter(kill_house=kill_house, archive_wage=False,
# trash=False).only('live_weight', 'union_share',
# 'weight_of_carcasses',
# 'company_share',
# 'guilds_share',
# 'total_wage_amount')
# free_bars_live = free_bars.filter(buy_type='live', trash=False).only('live_weight', 'union_share',
# 'weight_of_carcasses',
# 'company_share',
# 'guilds_share',
# 'total_wage_amount')
# free_bars_carcases = free_bars.filter(buy_type='carcass', trash=False).only('live_weight', 'union_share',
# 'weight_of_carcasses',
# 'company_share',
# 'guilds_share',
# 'total_wage_amount'
# )
slaughter_transactions = InternalTransaction.objects.filter(
Q(kill_house=kill_house) | Q(parent_kill_house=kill_house),
status='completed',
trash=False).only('union_share', 'company_share', 'guilds_share', 'amount')
# province_kill_requests_total_wage = \
# province_kill_requests.filter(province_request__poultry_request__freezing=False).aggregate(
# total=Sum('total_wage_amount'))[
# 'total'] or 0
# if wage_percent > 0:
# province_kill_requests_total_wage -= province_kill_requests_total_wage * wage_percent
# freezing_province_kill_request_total_wage = \
# freezing_province_kill_requests.aggregate(total=Sum('total_wage_amount'))['total'] or 0
#
# kill_house_reqest_total_wage = \
# kill_house_requests.filter(
# province_kill_request__province_request__poultry_request__freezing=False).aggregate(
# total=Sum(F('accepted_real_weight') * F('province_kill_request__wage')))[
# 'total'] or 0
# if wage_percent > 0:
# kill_house_reqest_total_wage -= kill_house_reqest_total_wage * wage_percent
# freezing_kill_house_reqest_total_wage = \
# freezing_kill_house_requests.aggregate(
# total=Sum(F('accepted_real_weight') * F('province_kill_request__wage')))[
# 'total'] or 0
#
# free_bars_live_total_wage = free_bars_live.aggregate(total=Sum('total_wage_amount'))[
# 'total'] or 0
#
# free_bars_carcases_total_wage = free_bars_carcases.aggregate(total=Sum('total_wage_amount'))[
# 'total'] or 0
# total_unpaid_wage = free_bars_carcases_total_wage + kill_house_reqest_total_wage + \
# freezing_kill_house_reqest_total_wage + province_kill_requests_total_wage + \
# freezing_province_kill_request_total_wage + free_bars_live_total_wage
total_paid_wage = slaughter_transactions.aggregate(total=Sum('amount'))[
'total'] or 0
total_wage = total_unpaid_wage - (total_paid_wage + kill_house.off)
if kill_house_purchase.limitation_number <= total_wage:
unpaid = "{:,}".format(int(total_wage))
if kill_house.killer == False:
killer = 'کشتارگاه'
else:
killer = 'کشتارکن'
amount = "{:,}".format(int(kill_house_purchase.limitation_number))
user_token = 'k' + kill_house.kill_house_operator.user.user_gate_way_id
message = f'کاربر گرامی {killer + "(" + kill_house.name + ")"}' \
f'\n' \
f'باسلام واحترام ' \
f'\n' \
f'باتوجه به عدم پرداخت بدهی تعرفه سامانه به مبلغ{unpaid} امکان ثبت کشتار برای شما وجود ندارد.جهت فعال سازی پنل، بدهی شما باید کمتر از {amount} ریال باشد.' \
f'\n' \
f'لازم به توضیح است که کشتار خارج از سامانه به عنوان کشتار و عرضه خارج از شبکه محسوب میگردد.' \
f'\n' \
f'لینک مشاهده و پرداخت بدهی:' \
f'\n' \
f'https://rasadyar.net/pay/{base_pos_id}/{user_token} \n' \
f'\n' \
f'(سامانه رصدیار)'
check_mobile = check_mobile_number(kill_house.kill_house_operator.user.mobile)
if check_mobile:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={send_deactivate_username}&password={send_deactivate_password}&from=30002501&to={kill_house.kill_house_operator.user.mobile}&message={message}")
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={send_deactivate_username}&password={send_deactivate_password}&from=30002501&to={COMPANY_NUMBER}&message={message}")
if UNION_SECOND_NUMBER is not None:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={send_deactivate_username}&password={send_deactivate_password}&from=30002501&to={UNION_SECOND_NUMBER}&message={message}")
if UNION_THIRD_NUMBER is not None:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={send_deactivate_username}&password={send_deactivate_password}&from=30002501&to={UNION_THIRD_NUMBER}&message={message}")
if UNION_FIFTH_NUMBER is not None:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={send_deactivate_username}&password={send_deactivate_password}&from=30002501&to={UNION_FIFTH_NUMBER}&message={message}")
if UNION_SIXTH_NUMBER is not None:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={send_deactivate_username}&password={send_deactivate_password}&from=30002501&to={UNION_SIXTH_NUMBER}&message={message}")
return HttpResponse('ok')
# USERNAME_SMS_FINANCIAL
def province_out_request_transaction_sms(province, buyer, poultry_name, quantity, index_weight, wage, mobile,
order_code, date, amount, sale_type):
date1 = datetime.strptime(str(date),
'%Y-%m-%d').date()
from_date = jdatetime.date.fromgregorian(
year=date1.year,
month=date1.month,
day=date1.day
).strftime('%Y-%m-%d')
reversed_date = reversed(from_date.split("-"))
separate = "-"
date = separate.join(reversed_date)
all_wage = "{:,}".format(int(wage))
amount = "{:,}".format(int(amount))
sale_type_free = 'آزاد' if sale_type == False else 'دولتی'
message = f'سفارش فروش مرغ زنده استان {province}' \
'\n' \
f'تاریخ: {date}' \
f'\n' \
f'خریدار: {buyer}' \
'\n' \
f'مرغدار: {poultry_name}' \
'\n' \
f'نوع فروش:{sale_type_free}' \
'\n' \
f'تعداد: {quantity}' \
'\n' \
f'وزن تقریبی سفارش: {index_weight}' \
f'\n' \
f'وزن تقریبی کل سفارش: {int(index_weight * quantity)}' \
f'\n' \
f'قیمت مرغدار:{amount}' \
f'\n' \
f'مبلغ کل تعرفه:{all_wage} ریال ' \
f'\n' \
f'لینک مشاهده و پرداخت تعرفه:' \
f'\n' \
f'https://rasadyar.net/pay/{base_pos_id}/{order_code}' \
f'\n' \
f'سامانه رصدیار'
check_mobile = check_mobile_number(mobile)
if check_mobile:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS_FINANCIAL}&password={PASSWORD_SMS_FINANCIAL}&from=30002501&to={mobile}&message={message}")
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS_FINANCIAL}&password={PASSWORD_SMS_FINANCIAL}&from=30002501&to={COMPANY_NUMBER}&message={message}")
# def daily_report_excel_and_pdf_send_from_sms():
# message = f'سفارش فروش مرغ زنده استان {province}' \
# '\n' \
# f'تاریخ: {date}' \
# f'\n' \
# f'خریدار: {buyer}' \
# '\n' \
# f'مرغدار: {poultry_name}' \
# '\n' \
# f'تعداد: {quantity}' \
# '\n' \
# f'وزن تقریبی سفارش: {index_weight}' \
# f'\n' \
# f'مبلغ کل تعرفه:{all_wage} ریال ' \
# f'\n' \
# f'لینک مشاهده و پرداخت تعرفه:' \
# f'\n' \
# f'https://{base_url_sms}.rasadyar.net/pay/{order_code}' \
# f'\n' \
# f'سامانه رصدیار'
# check_mobile = check_mobile_number(mobile)
# if check_mobile:
# req = send_sms_request(
# f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS_FINANCIAL}&password={PASSWORD_SMS_FINANCIAL}&from=30002501&to={mobile}&message={message}")
# USERNAME_SMS_FINANCIAL
def send_sms_for_final_approval_out_province_threading(buyer_list, poultry_request_list):
# users = SystemUserProfile.objects.filter(id__in=poultry_list).select_related('province').only('mobile', 'user_gate_way_id','province__name','fullname')
if base_url_sms == 'ha':
province_name = 'همدان'
elif base_url_sms == 'ku':
province_name = 'کردستان'
elif base_url_sms == 'ma':
province_name = 'مرکزی'
else:
province_name = 'تست'
base_url = f'rasadyar.net/pay/{base_pos_id}'
if poultry_request_list is not None:
poultry_requests = PoultryRequest.objects.filter(trash=False, id__in=poultry_request_list)
for poultry_request in poultry_requests:
if poultry_request.interface_number is not None:
mobile = poultry_request.interface_number
else:
mobile = poultry_request.poultry.user.mobile
token_user = 'p' + poultry_request.poultry.user.user_gate_way_id
message = f' مرغدار محترم {poultry_request.poultry.user.fullname} ' \
f'\n' \
f'سفارش خرید مرغ زنده(فروش خارج از استان) با کد سفارش {poultry_request.order_code} برای شما در سامانه رصدیار استان {province_name} ثبت گردید جهت پرداخت تعرفه از طریق لینک زیر اقدام نمایید.' \
f'\n' \
f'**لازم به ذکر است: در صورت عدم پرداخت تعرفه تا پایان وقت امروز(16 بعد از ظهر) سفارشات شما لغو میگردد!' \
f'\n' \
f'لینک مشاهده و پرداخت تعرفه :' \
f'\n' \
f'https://{base_url}/{token_user}{poultry_request.order_code}' \
f'\n' \
f'سامانه رصدیار'
check_mobile = check_mobile_number(mobile)
if check_mobile:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={poultry_link_out_sale_username}&password={poultry_link_out_sale_password}&from=30002501&to={mobile}&message={message}")
users = SystemUserProfile.objects.filter(id__in=buyer_list).select_related('province').only('mobile',
'user_gate_way_id',
'province__name',
'fullname')
for user in users:
mobile = user.mobile
token_user = 'b' + user.user_gate_way_id
message = f' خریدار محترم {user.fullname} ' \
f'\n' \
f'سفارش خرید مرغ زنده(فروش خارج از استان) برای شما در سامانه رصدیار استان {province_name} ثبت گردید جهت پرداخت تعرفه از طریق لینک زیر اقدام نمایید.' \
f'\n' \
f'**لازم به ذکر است: در صورت عدم پرداخت تعرفه تا پایان وقت امروز(16 بعد از ظهر) سفارشات شما لغو میگردد!' \
f'\n' \
f'لینک مشاهده و پرداخت تعرفه :' \
f'\n' \
f'https://{base_url}/{token_user}' \
f'\n' \
f'سامانه رصدیار'
check_mobile = check_mobile_number(mobile)
if check_mobile:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={poultry_link_out_sale_username}&password={poultry_link_out_sale_password}&from=30002501&to={mobile}&message={message}")
def send_sms_for_final_approval_out_province_buyer_threading(buyer_list):
users = SystemUserProfile.objects.filter(id__in=buyer_list).select_related('province').only('mobile',
'user_gate_way_id',
'province__name',
'fullname')
for user in users:
mobile = user.mobile
token_user = 'b' + user.user_gate_way_id
message = f' خریدار محترم {user.fullname} ' \
f'\n' \
f'سفارش خرید مرغ زنده برای شما در سامانه رصدیار استان {user.province.name} ثبت گردید جهت پرداخت تعرفه از طریق لینک زیر اقدام نمایید.' \
f'\n' \
f'لازم به ذکر است در صورت عدم پرداخت تعرفه تا پایان وقت امروز(۱۲ شب) سفارشات شما لغو میگردد!' \
f'\n' \
f'لینک مشاهده و پرداخت تعرفه :' \
f'\n' \
f'https://rasadyar.net/pay/{base_pos_id}/{token_user}' \
f'\n' \
f'سامانه رصدیار'
check_mobile = check_mobile_number(mobile)
if check_mobile:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS_FINANCIAL}&password={PASSWORD_SMS_FINANCIAL}&from=30002501&to={mobile}&message={message}")
print({"status": req.status_code, "mobile": user.mobile})
def sms_allocation_for_vet_farm(poultry_name, poultry_mobile, quantity, Index_weight, kill_house_name, kill_house_mobile
, city, send_date, mobile):
quantity_1 = "{:,}".format(int(quantity))
message = f'تخصیص مرغ زنده (کشتار داخل استان)' \
f'\n' \
f'مرغدار:{poultry_name}' \
f'\n' \
f'تلفن:{poultry_mobile}' \
f'\n' \
f'تعداد:{quantity_1}' \
f'\n' \
f'میانگین وزن: {Index_weight}' \
f'\n' \
f'خریدار:{kill_house_name}' \
f'\n' \
f'تلفن:{kill_house_mobile}' \
f'\n' \
f'ادرس:{city}' \
f'\n' \
f'تاریخ کشتار:{send_date}' \
f'\n' \
f'توضیحات: قبل از صدور مجوز حمل با مرغدار هماهنگی های لازم انجام دهید و کد قرنطینه در سامانه رصدیار ثبت گردد.(اتحادیه مرغداران گوشتی استان همدان)' \
f'\n' \
f'(سامانه رصدیار)'
check_mobile = check_mobile_number(mobile)
if check_mobile:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS}&password={PASSWORD_SMS}&from=30002501&to={mobile}&message={message}")
def sms_chain_company_for_ver_farm(poultry_name, poultry_mobile, quantity, Index_weight, kill_house_name,
kill_house_mobile
, city, send_date, mobile, province):
quantity_1 = "{:,}".format(int(quantity))
message = f'تخصیص مرغ زنده (کشتار زنجیره ها)' \
f'\n' \
f'مرغدار:{poultry_name}' \
f'\n' \
f'تلفن:{poultry_mobile}' \
f'\n' \
f'تعداد:{quantity_1}' \
f'\n' \
f'میانگین وزن: {Index_weight}' \
f'\n' \
f'خریدار:{kill_house_name}' \
f'\n' \
f'تلفن:{kill_house_mobile}' \
f'\n' \
f'ادرس:{city}' \
f'\n' \
f'تاریخ کشتار:{send_date}' \
f'\n' \
f'اتحادیه مرغداران گوشتی استان {province}' \
f'\n' \
f'(سامانه رصدیار)'
check_mobile = check_mobile_number(mobile)
if check_mobile:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS_FINANCIAL}&password={PASSWORD_SMS_FINANCIAL}&from=30002501&to={mobile}&message={message}")
def sms_ticket(province, fullname):
message = f'یک تیکت جدید از استان {province} دارید .' \
'\n' \
f'کاربر: {fullname}'
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS_FINANCIAL}&password={PASSWORD_SMS_FINANCIAL}&from=30002501&to={SUPPORTER_NUMBER}&message={message}")
def document_discrepancy_sms(killer, name, bar_code, doc, mobile, date):
killer_user = 'کشتارکن' if killer == True else 'کشتارگاه'
date1 = datetime.strptime(str(date),
'%Y-%m-%d').date()
from_date = jdatetime.date.fromgregorian(
year=date1.year,
month=date1.month,
day=date1.day
).strftime('%Y-%m-%d')
reversed_date = reversed(from_date.split("-"))
separate = "-"
date = separate.join(reversed_date)
message = f' کاربر گرامی {killer_user} {name}' \
'\n' \
f'بار به شماره {bar_code} در تاریخ({date}) به علت وضعیت ({doc}) نیازمند ویرایش میباشد.' \
f'\n' \
f'جهت ویرایش اطلاعات به پنل کاربری خود مراجعه فرمایید.' \
f'\n' \
f'(سامانه رصدیار)'
check_mobile = check_mobile_number(mobile)
if check_mobile:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS}&password={PASSWORD_SMS}&from=30002501&to={mobile}&message={message}")
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS}&password={PASSWORD_SMS}&from=30002501&to={COMPANY_NUMBER}&message={message}")
def confirmation_of_the_need_for_slaughterhouse_sms_threading(name):
city_operator = CityOperator.objects.filter(trash=False).select_related('user').only('user__mobile')
mobiles = city_operator.values_list('user__mobile', flat=True).distinct()
message = f' کاربر گرامی {name}' \
'\n' \
'باسلام' \
'\n' \
'صرفا جهت اطلاع' \
'\n' \
f'درخواست نیاز شما مورد تایید قرار گرفت و امکان ثبت درخواست کشتار را دارید.' \
f'\n' \
f'(سامانه رصدیار)'
for mobile in mobiles:
check_mobile = check_mobile_number(mobile)
if check_mobile:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS}&password={PASSWORD_SMS}&from=30002501&to={mobile}&message={message}")
# USERNAME_SMS
def province_kill_request_accept_sms(kill_house_name
):
city_operator = CityOperator.objects.filter(trash=False).select_related('user').only('user__mobile')
mobiles = city_operator.values_list('user__mobile', flat=True).distinct()
message = f' کاربر گرامی {kill_house_name}' \
'\n' \
'باسلام' \
'\n' \
'صرفا جهت اطلاع' \
'\n' \
f'درخواست نیاز شما مورد تایید قرار گرفت و امکان ثبت درخواست کشتار را دارید.' \
f'\n' \
f'(سامانه رصدیار)'
for mobile in mobiles:
check_mobile = check_mobile_number(mobile)
if check_mobile:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS}&password={PASSWORD_SMS}&from=30002501&to={mobile}&message={message}")
def reporting_sms():
now = datetime.now().date()
from_date = jdatetime.date.fromgregorian(
year=now.year,
month=now.month,
day=now.day
).strftime('%Y-%m-%d')
reversed_date = reversed(from_date.split("-"))
separate = "-"
date = separate.join(reversed_date)
reporst = ReportsUsers.objects.filter(active=True)
for r in reporst:
user_reporst = UserReports.objects.filter(active=True, user=r).order_by('id')
message = f'کاربرگرامی {r.fullname}' \
'\n' \
'با سلام' \
'\n' \
f'احتراماً لیست گزارشات کشتار و توزیع مرغ گوشتی استان مورخ {date} جهت اطلاع بحضورتان ارسال میگردد.' \
'\n'
l = 1
if user_reporst:
for user in user_reporst:
message = message + '\n' \
f'{l}_{user.report.title}' \
'\n' \
f'https://{base_url_for_sms_report}backend.rasadyaar.ir/{user.report.end_point}/?key={r.user_token}' \
'\n'
l += 1
else:
message = message + '\n' \
'(سامانه رصدیار)'
check_mobile = check_mobile_number(r.mobile)
if check_mobile:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS}&password={PASSWORD_SMS}&from=30002501&to={r.mobile}&message={message}")
def car_allocation_vet_farm_sms(date, poultry, age, quantity, car, code, pelak, kill_house, mobile, amount,
free_sale_in_province):
date1 = datetime.strptime(str(date),
'%Y-%m-%d').date()
date = shamsi_date(date1)
quantity = "{:,}".format(int(quantity))
amount = "{:,}".format(int(amount))
sale_type = 'آزاد' if free_sale_in_province == False else 'دولتی'
message = f'اطلاعات بار' \
f'\n' \
f'تاریخ کشتار: {date}' \
f'\n' \
f'نوع کشتار:{sale_type}' \
f'\n' \
f'مرغدار: {poultry}' \
f'\n' \
f'سن: {age}' \
f'\n' \
f'قطعه: {quantity}' \
f'\n' \
f'قیمت مرغدار:{amount}' \
f'\n' \
f'ماشین: {car}' \
f'\n' \
f'کد حمل: {code}' \
f'\n' \
f'پلاک: {pelak}' \
f'\n' \
f'کشتارگاه: {kill_house}' \
'\n' \
'(سامانه رصدیار)'
check_mobile = check_mobile_number(mobile)
if check_mobile:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS}&password={PASSWORD_SMS}&from=30002501&to={mobile}&message={message}")
def delete_car_allocation_vet_farm_sms(date, poultry, age, quantity, car, code, pelak, kill_house, mobile, amount,
free_sale_in_province):
date1 = datetime.strptime(str(date),
'%Y-%m-%d').date()
date = shamsi_date(date1)
quantity = "{:,}".format(int(quantity))
amount = "{:,}".format(int(amount))
sale_type = 'آزاد' if free_sale_in_province == False else 'دولتی'
message = f'اطلاعات بار حذف شده' \
f'\n' \
f'تاریخ کشتار: {date}' \
f'\n' \
f'نوع کشتار:{sale_type}' \
f'\n' \
f'مرغدار: {poultry}' \
f'\n' \
f'سن: {age}' \
f'\n' \
f'قطعه: {quantity}' \
f'\n' \
f'قیمت مرغدار:{amount}' \
f'\n' \
f'ماشین: {car}' \
f'\n' \
f'کد حمل: {code}' \
f'\n' \
f'پلاک: {pelak}' \
f'\n' \
f'کشتارگاه: {kill_house}' \
'\n' \
'(سامانه رصدیار)'
check_mobile = check_mobile_number(mobile)
if check_mobile:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS}&password={PASSWORD_SMS}&from=30002501&to={mobile}&message={message}")
def cron_for_update_sms():
update_date = LastUpdate.objects.first().update_date.date()
num_list = [SUPPORTER_NUMBER, COMPANY_NUMBER, '09201917727']
if base_url_for_sms_report == 'ha':
base = 'همدان'
elif base_url_for_sms_report == 'ma':
base = 'مرکزی'
else:
base = 'بوشهر'
if not update_date == datetime.now().date():
message = f'جوجه ریزی آپدیت نشده است. استان {base}'
for num in num_list:
send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS_FINANCIAL}"
f"&password={PASSWORD_SMS_FINANCIAL}&from=30002501&to={num}&message={message}")
def ticket_answered(mobile):
message = f'تیکت شما پاسخ داده شد.' \
'\n' \
f'(سامانه رصدیار)'
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS_FINANCIAL}&password={PASSWORD_SMS_FINANCIAL}&from=30002501&to={mobile}&message={message}")
@api_view(["GET"])
@csrf_exempt
@permission_classes([AllowAny])
def send_again_sms_for_final_approval_out_province(request):
key = request.GET['key']
poultry_request = PoultryRequest.objects.get(trash=False, key=key)
if base_url_sms == 'ha':
province_name = 'همدان'
elif base_url_sms == 'ku':
province_name = 'کردستان'
elif base_url_sms == 'ma':
province_name = 'مرکزی'
else:
province_name = 'تست'
base_url = f'rasadyar.net/pay/{base_pos_id}'
if poultry_request.payer_type == 'poultry':
if poultry_request.interface_number is not None:
mobile = poultry_request.interface_number
else:
mobile = poultry_request.poultry.user.mobile
token_user = 'p' + poultry_request.poultry.user.user_gate_way_id
message = f' مرغدار محترم {poultry_request.poultry.user.fullname} ' \
f'\n' \
f'سفارش خرید مرغ زنده(فروش خارج از استان) با کد سفارش {poultry_request.order_code} برای شما در سامانه رصدیار استان {province_name} ثبت گردید جهت پرداخت تعرفه از طریق لینک زیر اقدام نمایید.' \
f'\n' \
f'**لازم به ذکر است: در صورت عدم پرداخت تعرفه تا پایان وقت امروز(16 بعد از ظهر) سفارشات شما لغو میگردد!' \
f'\n' \
f'لینک مشاهده و پرداخت تعرفه :' \
f'\n' \
f'https://{base_url}/{token_user}{poultry_request.order_code}' \
f'\n' \
f'سامانه رصدیار'
check_mobile = check_mobile_number(mobile)
if check_mobile:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={poultry_link_out_sale_username}&password={poultry_link_out_sale_password}&from=30002501&to={mobile}&message={message}")
else:
mobile = poultry_request.buyer_mobile
user = SystemUserProfile.objects.filter(mobile=mobile).first()
token_user = 'b' + user.user_gate_way_id
message = f' خریدار محترم {user.fullname} ' \
f'\n' \
f'سفارش خرید مرغ زنده(فروش خارج از استان) برای شما در سامانه رصدیار استان {province_name} ثبت گردید جهت پرداخت تعرفه از طریق لینک زیر اقدام نمایید.' \
f'\n' \
f'**لازم به ذکر است: در صورت عدم پرداخت تعرفه تا پایان وقت امروز(16 بعد از ظهر) سفارشات شما لغو میگردد!' \
f'\n' \
f'لینک مشاهده و پرداخت تعرفه :' \
f'\n' \
f'https://{base_url}/{token_user}' \
f'\n' \
f'سامانه رصدیار'
check_mobile = check_mobile_number(mobile)
if check_mobile:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={poultry_link_out_sale_username}&password={poultry_link_out_sale_password}&from=30002501&to={mobile}&message={message}")
return HttpResponse('ok', status=status.HTTP_200_OK)
def vet_farm_out_poultry_request_sms(mobile, poultry_fullname, quantity, chicken_breed,
order_code, send_date, sale_in_province, amount):
sale_type = 'آزاد' if sale_in_province == True else 'دولتی'
amount = "{:,}".format(int(amount))
quantity = "{:,}".format(int(quantity))
message = 'درخواست فروش به خارج از استان' \
f'\n' \
f'تعداد:{quantity}' \
f'\n' \
f'نژاد:{chicken_breed}' \
f'\n' \
f'تاریخ کشتار:{send_date}' \
f'\n' \
f'نوع فروش:{sale_type}' \
f'\n' \
f'مرغدار:{poultry_fullname}' \
f'\n' \
f'کدسفارش:{order_code}' \
f'\n' \
f'قیمت مرغدار:{amount}' \
f'\n' \
f'(سامانه رصدیار)'
check_mobile = check_mobile_number(mobile)
if check_mobile:
u = "http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={}&password={}&from=30002501&to={}&message={}".format(
USERNAME_SMS, PASSWORD_SMS,
mobile, message)
def send_sms_for_kill_house_not_add_to_inventory(mobile, quantity):
quantity = "{:,}".format(int(quantity))
message = 'درخواست فروش به خارج از استان' \
f'\n' \
f'تعداد:{quantity}' \
f'\n' \
f'\n' \
f'(سامانه رصدیار)'
check_mobile = check_mobile_number(mobile)
if check_mobile:
u = "http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={}&password={}&from=30002501&to={}&message={}".format(
USERNAME_SMS, PASSWORD_SMS,
mobile, message)
def send_sms_for_bar_difference_request(mobile, quantity, poultry):
message = 'با سلام و احترام' \
'\n' \
f'کاربر گرامی برای شما حجم {quantity} قطعه اختلاف کشتار از مرغدار {poultry} ثبت گردیده لطفا جهت تعیین تکلیف به بخش مدیریت بار قسمت اختلاف کشتار مراجعه نمایید.باتشکر سامانه رصدیار '
check_mobile = check_mobile_number(mobile)
if check_mobile:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS_FINANCIAL}&password={PASSWORD_SMS_FINANCIAL}&from=30002501&to={mobile}&message={message}")
class ManagementSendSmsViewSet(viewsets.ModelViewSet):
queryset = ManagementSendSms.objects.all().order_by('id')
serializer_class = ManagementSendSmsSerializer
permission_classes = [TokenHasReadWriteScope]
def send_sms_fro_kill_request_market(kill_req):
poultry_name = kill_req.poultry.unit_name
mobile = kill_req.poultry.user.mobile
kill_house_name = kill_req.kill_house.name
kill_house_mobile = kill_req.kill_house.kill_house_operator.user.mobile
message = f' مرغدار محترم {poultry_name} ' \
f'\n' \
f'سفارش مرغ زنده در پنل بورسی برای شما ثبت شد:' \
f'\n' \
f'خریدار:{kill_house_name}({kill_house_mobile})' \
f'\n' \
f'حجم:{to_locale_str(kill_req.kill_capacity)}(قطعه)' \
f'\n' \
f'وزن:{to_locale_str(int(kill_req.kill_capacity * kill_req.Index_weight))}(کیلوگرم)' \
f'\n' \
f'مبلغ هر کیلو:{to_locale_str(kill_req.amount)}(ریال)' \
f'\n' \
f'حداکثر مهلت تسویه:{shamsi_date(kill_req.payment_deadline_date)}' \
f'\n' \
f'کد احراز:{kill_req.market_code}' \
f'\n' \
f'مهلت وارد کردن کد احراز 30 دقیقه میباشد و پس از آن درخواست لغو خواهد شد و گزارش برای دستگاه نظارتی ارسال میگردد.' \
f'\n' \
'سامانه رصدیار'
check_mobile = check_mobile_number(mobile)
if check_mobile:
u = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={kill_req_market_username}"
f"&password={kill_req_market_password}&from=30002501&to={mobile}&message={message}")
def send_sms_for_poultry_market(poultry_req):
poultry_name = poultry_req.poultry.unit_name
mobile = poultry_req.poultry.user.mobile
quantity = to_locale_str(poultry_req.quantity)
amount = to_locale_str(poultry_req.amount)
send_date = shamsi_date(poultry_req.send_date)
message = 'مرغدار محترم {0}' \
'\n' \
'تعداد {1} قطعه مرغ گوشتی سهمیه کشتار در تاریخ {3} با قیمت مصوب {2} (ریال) برای شما در پنل بورسی سامانه رصدیار ثبت شده است.' \
'\n' \
'درصورت عدم موجوی و یا عدم امکان تحویل تعداد مذکور با تعاونی شهرستان خود یا کاربر سامانه در اتحادیه استان تماس حاصل فرمایید.' \
'\n' \
'سامانه رصدیار'.format(poultry_name, quantity, amount, send_date)
check_mobile = check_mobile_number(mobile)
if check_mobile:
u = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={poultry_req_market_username}"
f"&password={poultry_req_market_password}&from=30002501&to={mobile}&message={message}")
def send_sms_for_guild(guilds):
mobile = guilds.user.mobile
type_role = 'مباشر' if guilds.steward == True else 'صنف'
message = 'کاربر گرامی\n' \
'برای شما کاربری {5} توسط {6}({7}) در سامانه رصدیار ثبت شده است.\n' \
'نام و نام خانوادگی: {0}\n' \
'نام واحد صنفی: {1}\n' \
'شهر: {2}\n' \
'آدرس: {3}\n' \
'درصورتی که اطلاعات مورد تایید شما میباشد کد احراز را به ثبت کننده تحویل دهید.\n' \
'کد احراز: {4}\n' \
'سامانه رصدیار'.format(guilds.user.fullname, guilds.guilds_name, guilds.address.city.name,
guilds.address.address, guilds.register_code, type_role,
guilds.registerar_fullname,
guilds.registerar_mobile)
check_mobile = check_mobile_number(mobile)
if check_mobile:
u = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={guild_register_username}"
f"&password={guild_register_password}&from=30002501&to={mobile}&message={message}")
def send_sms_for_guild_for_register(guilds):
mobile = guilds.user.mobile
type_role = 'مباشر' if guilds.steward == True else 'صنف'
message = 'کاربر گرامی\n' \
'برای شما کاربری {5} در سامانه رصدیار ثبت شده است.\n' \
'نام و نام خانوادگی: {0}\n' \
'نام واحد صنفی: {1}\n' \
'شهر: {2}\n' \
'آدرس: {3}\n' \
'درصورتی که اطلاعات مورد تایید شما میباشد برای احراز شما در سامانه لطفا کد رو تحویل ثبت کننده دهید.\n' \
'کد احراز: {4}\n' \
'سامانه رصدیار'.format(guilds.user.fullname, guilds.guilds_name, guilds.address.city.name,
guilds.address.address, guilds.register_code, type_role,
guilds.registerar_fullname if guilds.registerar_fullname else '-',
guilds.registerar_mobile if guilds.registerar_mobile else '-')
check_mobile = check_mobile_number(mobile)
if check_mobile:
u = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={guild_register_username}"
f"&password={guild_register_password}&from=30002501&to={mobile}&message={message}")
def send_sms_for_sale_bar(bar):
mobile = bar.buyer_mobile
date = shamsi_date(bar.date)
seller = bar.kill_house.name
weight = bar.weight_of_carcasses
number = bar.registration_code
buyer = bar.buyer_name
quanarntine_code = bar.clearance_code
provicne = bar.province
city = bar.city
message = 'اطلاعات توزیع لاشه به خارج استان\n' \
'فروشنده: {0} \n' \
'تاریخ فروش: {1}\n' \
'خریدار: {2}\n' \
'استان: {6}\n' \
'شهر: {7}\n' \
'وزن لاشه: {3} (کیلوگرم)\n' \
'کد قرنطینه: {4} \n' \
'کد احراز: {5}\n' \
'سامانه رصدیار'.format(seller, date, buyer, to_locale_str(weight), quanarntine_code, number, provicne,
city)
check_mobile = check_mobile_number(mobile)
if check_mobile:
u = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={steward_allocation_username}"
f"&password={steward_allocation_password}&from=30002501&to={mobile}&message={message}")
def send_sms_for_sale_bar_for_steward(bar):
mobile = bar.buyer_mobile
date = shamsi_date(bar.date)
seller = bar.steward.guilds_name
weight = bar.weight_of_carcasses
number = bar.registration_code
buyer = bar.buyer_name
quanarntine_code = bar.clearance_code
provicne = bar.province
city = bar.city
message = 'اطلاعات توزیع لاشه به خارج استان\n' \
'فروشنده: {0} \n' \
'تاریخ فروش: {1}\n' \
'خریدار: {2}\n' \
'استان: {6}\n' \
'شهر: {7}\n' \
'وزن لاشه: {3} (کیلوگرم)\n' \
'کد قرنطینه: {4} \n' \
'کد احراز: {5}\n' \
'سامانه رصدیار'.format(seller, date, buyer, to_locale_str(weight), quanarntine_code, number, provicne,
city)
check_mobile = check_mobile_number(mobile)
if check_mobile:
u = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={steward_allocation_username}"
f"&password={steward_allocation_password}&from=30002501&to={mobile}&message={message}")
def send_daily_slaughter_statistics_sms():
mobile_objects = SmsRecipient.objects.filter(is_active=True)
mobile_numbers = [obj.phone_number for obj in mobile_objects]
# mobile_numbers = [
# '09188176737',
# '09011110919',
# '09181112717',
# '09185914818',
# '09187040838',
# '09393946626',
# '09127687317',
# '09033073493',
# ]
target_date = datetime.now().date()
date_shamsi = shamsi_date(target_date)
if base_url_for_sms_report == 'ha':
province_name = 'همدان'
elif base_url_for_sms_report == 'ku':
province_name = 'کردستان'
elif base_url_for_sms_report == 'ma':
province_name = 'مرکزی'
else:
province_name = 'تست'
province_kill_requests = ProvinceKillRequest.objects.filter(
trash=False,
return_to_province=False,
archive_wage=False,
state__in=('pending', 'accepted'),
kill_request__recive_date__date=target_date
).aggregate(
total_orders=Sum('id'),
total_quantity=Sum('total_killed_quantity'),
total_live_weight=Sum('total_killed_weight'),
)
orders_count = ProvinceKillRequest.objects.filter(
trash=False,
return_to_province=False,
archive_wage=False,
state__in=('pending', 'accepted'),
kill_request__recive_date__date=target_date
).count()
total_quantity = province_kill_requests['total_quantity'] or 0
total_live_weight = province_kill_requests['total_live_weight'] or 0
total_carcass_weight = int(total_live_weight * 0.75)
average_weight = round(total_live_weight / total_quantity, 1) if total_quantity > 0 else 0
kill_house_requests = KillHouseRequest.objects.filter(
kill_request__recive_date__date=target_date,
trash=False
).aggregate(
total_quantity=Sum('accepted_real_quantity'),
total_weight=Sum('accepted_real_weight')
)
loads_count = KillHouseRequest.objects.filter(
kill_request__recive_date__date=target_date,
trash=False
).count()
loads_quantity = kill_house_requests['total_quantity'] or 0
loads_weight = kill_house_requests['total_weight'] or 0
formatted_quantity = to_locale_str(int(total_quantity))
formatted_live_weight = to_locale_str(int(total_live_weight))
formatted_carcass_weight = to_locale_str(int(total_carcass_weight))
formatted_loads_quantity = to_locale_str(int(loads_quantity))
formatted_loads_weight = to_locale_str(int(loads_weight))
message = f'اطلاعات کشتار مرغ گوشتی مورخ {date_shamsi} استان {province_name}\n' \
f'تعداد سفارشات: {orders_count}\n' \
f'حجم سفارش کشتار: {formatted_quantity} قطعه\n' \
f'وزن تقریبی زنده: {formatted_live_weight} کیلوگرم\n' \
f'وزن تقریبی لاشه: {formatted_carcass_weight} کیلوگرم\n' \
f'میانگین وزن زنده: {average_weight} کیلوگرم\n' \
f'اطلاعات بارایجاد شده:\n' \
f'تعداد بار: {loads_count}\n' \
f'حجم بارها: {formatted_loads_quantity} قطعه\n' \
f'وزن بارها(زنده): {formatted_loads_weight} کیلوگرم\n' \
f'سامانه رصدیار'
for mobile in mobile_numbers:
check_mobile = check_mobile_number(mobile)
if check_mobile:
try:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={sms_recipient_username}"
f"&password={sms_recipient_password}&from=30002501&to={mobile}&message={message}")
except Exception as e:
print(f"Error sending SMS to {mobile}: {str(e)}")
def send_daily_distribution_report_sms():
mobile_objects = SmsRecipient.objects.filter(is_active=True)
mobile_numbers = [obj.phone_number for obj in mobile_objects]
# mobile_numbers = [
# '09188176737',
# '09011110919',
# '09181112717',
# '09185914818',
# '09187040838',
# '09393946626',
# '09127687317',
# '09033073493',
# ]
target_date = datetime.now().date()
date_shamsi = shamsi_date(target_date)
if base_url_for_sms_report == 'ha':
province_name = 'همدان'
elif base_url_for_sms_report == 'ku':
province_name = 'کردستان'
elif base_url_for_sms_report == 'ma':
province_name = 'مرکزی'
else:
province_name = 'تست'
kill_houses = KillHouse.objects.filter(out_province=False, active=True, trash=False).order_by('name')
distribution_data = []
total_distribution_weight = 0
for kill_house in kill_houses:
kill_house_allocations = StewardAllocation.objects.filter(
kill_house=kill_house,
trash=False,
receiver_state__in=('pending', 'accepted'),
to_cold_house__isnull=True,
date__date=target_date,
warehouse=True
).aggregate(
total_weight=Sum('real_weight_of_carcasses')
)
allocation_weight = kill_house_allocations['total_weight']
if allocation_weight and allocation_weight > 0:
distribution_data.append({
'name': kill_house.name,
'weight': allocation_weight
})
total_distribution_weight += allocation_weight
if not distribution_data:
return HttpResponse('هیچ توزیعی برای امروز ثبت نشده است', status=status.HTTP_200_OK)
message_lines = [f'گزارش توزیع گوشت مرغ داخل استان']
message_lines.append(f'مورخ {date_shamsi} استان {province_name}')
for item in distribution_data:
formatted_weight = to_locale_str(int(item['weight']))
message_lines.append("kg {1}: {0}".format(item['name'], formatted_weight))
message_lines.append('-------------------------')
formatted_total = to_locale_str(int(total_distribution_weight))
message_lines.append(' مجموع کل توزیع: {} kg'.format(formatted_total))
message_lines.append('سامانه رصدیار')
message = '\n'.join(message_lines)
for mobile in mobile_numbers:
check_mobile = check_mobile_number(mobile)
if check_mobile:
try:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={sms_recipient_username}"
f"&password={sms_recipient_password}&from=30002501&to={mobile}&message={message}")
except Exception as e:
print(f"Error sending SMS to {mobile}: {str(e)}")
@api_view(["GET"])
@csrf_exempt
@permission_classes([AllowAny])
def send_daily_distribution_report_sms_manual(request):
mobile_objects = SmsRecipient.objects.filter(is_active=True)
mobile_numbers = [obj.phone_number for obj in mobile_objects]
# mobile_numbers = [
# '09188176737',
# '09011110919',
# '09181112717',
# '09185914818',
# '09187040838',
# '09393946626',
# '09127687317',
# '09033073493',
# ]
target_date = datetime.now().date()
date_shamsi = shamsi_date(target_date)
if base_url_for_sms_report == 'ha':
province_name = 'همدان'
elif base_url_for_sms_report == 'ku':
province_name = 'کردستان'
elif base_url_for_sms_report == 'ma':
province_name = 'مرکزی'
else:
province_name = 'تست'
kill_houses = KillHouse.objects.filter(out_province=False, active=True, trash=False).order_by('name')
distribution_data = []
total_distribution_weight = 0
for kill_house in kill_houses:
kill_house_allocations = StewardAllocation.objects.filter(
kill_house=kill_house,
trash=False,
receiver_state__in=('pending', 'accepted'),
to_cold_house__isnull=True,
date__date=target_date,
warehouse=True
).aggregate(
total_weight=Sum('real_weight_of_carcasses')
)
allocation_weight = kill_house_allocations['total_weight']
if allocation_weight and allocation_weight > 0:
distribution_data.append({
'name': kill_house.name,
'weight': allocation_weight
})
total_distribution_weight += allocation_weight
if not distribution_data:
return HttpResponse('هیچ توزیعی برای امروز ثبت نشده است', status=status.HTTP_200_OK)
message_lines = [f'گزارش توزیع گوشت مرغ داخل استان']
message_lines.append(f'مورخ {date_shamsi} استان {province_name}')
for item in distribution_data:
formatted_weight = to_locale_str(int(item['weight']))
message_lines.append("kg {1}: {0}".format(item['name'], formatted_weight))
message_lines.append('-------------------------')
formatted_total = to_locale_str(int(total_distribution_weight))
message_lines.append(' مجموع کل توزیع: {} kg'.format(formatted_total))
message_lines.append('سامانه رصدیار')
message = '\n'.join(message_lines)
success_count = 0
failed_numbers = []
for mobile in mobile_numbers:
check_mobile = check_mobile_number(mobile)
if check_mobile:
try:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={sms_recipient_username}"
f"&password={sms_recipient_password}&from=30002501&to={mobile}&message={message}")
success_count += 1
except Exception as e:
failed_numbers.append(mobile)
print(f"Error sending SMS to {mobile}: {str(e)}")
else:
failed_numbers.append(mobile)
return HttpResponse(
f'گزارش توزیع با موفقیت برای {success_count} شماره ارسال شد. تعداد کشتارگاه: {len(distribution_data)}. شماره های ناموفق: {failed_numbers if failed_numbers else "ندارد"}',
status=status.HTTP_200_OK)
@api_view(["GET"])
@csrf_exempt
@permission_classes([AllowAny])
def send_daily_slaughter_statistics_sms_manual(request):
mobile_objects = SmsRecipient.objects.filter(is_active=True)
mobile_numbers = [obj.phone_number for obj in mobile_objects]
# mobile_numbers = [
# '09188176737',
# '09011110919',
# '09181112717',
# '09185914818',
# '09187040838',
# '09393946626',
# '09127687317',
# '09033073493',
# ]
target_date = datetime.now().date()
date_shamsi = shamsi_date(target_date)
if base_url_for_sms_report == 'ha':
province_name = 'همدان'
elif base_url_for_sms_report == 'ku':
province_name = 'کردستان'
elif base_url_for_sms_report == 'ma':
province_name = 'مرکزی'
else:
province_name = 'تست'
province_kill_requests = ProvinceKillRequest.objects.filter(
trash=False,
return_to_province=False,
archive_wage=False,
state__in=('pending', 'accepted'),
kill_request__recive_date__date=target_date
).aggregate(
total_orders=Sum('id'),
total_quantity=Sum('total_killed_quantity'),
total_live_weight=Sum('total_killed_weight'),
)
orders_count = ProvinceKillRequest.objects.filter(
trash=False,
return_to_province=False,
archive_wage=False,
state__in=('pending', 'accepted'),
kill_request__recive_date__date=target_date
).count()
total_quantity = province_kill_requests['total_quantity'] or 0
total_live_weight = province_kill_requests['total_live_weight'] or 0
total_carcass_weight = int(total_live_weight * 0.75)
average_weight = round(total_live_weight / total_quantity, 1) if total_quantity > 0 else 0
kill_house_requests = KillHouseRequest.objects.filter(
kill_request__recive_date__date=target_date,
trash=False
).aggregate(
total_quantity=Sum('accepted_real_quantity'),
total_weight=Sum('accepted_real_weight')
)
loads_count = KillHouseRequest.objects.filter(
kill_request__recive_date__date=target_date,
trash=False
).count()
loads_quantity = kill_house_requests['total_quantity'] or 0
loads_weight = kill_house_requests['total_weight'] or 0
formatted_quantity = to_locale_str(int(total_quantity))
formatted_live_weight = to_locale_str(int(total_live_weight))
formatted_carcass_weight = to_locale_str(int(total_carcass_weight))
formatted_loads_quantity = to_locale_str(int(loads_quantity))
formatted_loads_weight = to_locale_str(int(loads_weight))
message = f'اطلاعات کشتار مرغ گوشتی مورخ {date_shamsi} استان {province_name}\n' \
f'تعداد سفارشات: {orders_count}\n' \
f'حجم سفارش کشتار: {formatted_quantity} قطعه\n' \
f'وزن تقریبی زنده: {formatted_live_weight} کیلوگرم\n' \
f'وزن تقریبی لاشه: {formatted_carcass_weight} کیلوگرم\n' \
f'میانگین وزن زنده: {average_weight} کیلوگرم\n' \
f'اطلاعات بارایجاد شده:\n' \
f'تعداد بار: {loads_count}\n' \
f'حجم بارها: {formatted_loads_quantity} قطعه\n' \
f'وزن بارها(زنده): {formatted_loads_weight} کیلوگرم\n' \
f'سامانه رصدیار'
success_count = 0
failed_numbers = []
for mobile in mobile_numbers:
check_mobile = check_mobile_number(mobile)
if check_mobile:
try:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={sms_recipient_username}"
f"&password={sms_recipient_password}&from=30002501&to={mobile}&message={message}")
success_count += 1
except Exception as e:
failed_numbers.append(mobile)
print(f"Error sending SMS to {mobile}: {str(e)}")
else:
failed_numbers.append(mobile)
return HttpResponse(
f'پیامک با موفقیت برای {success_count} شماره ارسال شد. شماره های ناموفق: {failed_numbers if failed_numbers else "ندارد"}',
status=status.HTTP_200_OK)
def test_sms_simple():
"""
تابع ساده برای تست ارسال پیامک
"""
mobile = '09165597588'
message = 'تست ارسال پیامک از سامانه رصدیار'
check_mobile = check_mobile_number(mobile)
if check_mobile:
try:
req = send_sms_request(
f"http://webservice.sahandsms.com/newsmswebservice.asmx/SendPostUrl?username={USERNAME_SMS}&password={PASSWORD_SMS}&from=30002501&to={mobile}&message={message}")
print(f"SMS sent successfully. Status: {req.status_code}")
return f"پیامک با موفقیت ارسال شد. Status: {req.status_code}"
except Exception as e:
print(f"Error sending SMS: {str(e)}")
return f"خطا در ارسال پیامک: {str(e)}"
else:
return "شماره موبایل معتبر نیست"
@api_view(["GET"])
@csrf_exempt
@permission_classes([AllowAny])
def test_sms_endpoint(request):
print('so')
"""
Endpoint برای تست ارسال پیامک
"""
result = test_sms_simple()
return HttpResponse(result, status=status.HTTP_200_OK)