|
|
|
@ -12,6 +12,7 @@ from restoran_max_bot.bot_message import bot_message, bot_promo
|
|
|
|
from restoran_max_bot.common import common_get_contact, common_check_registration
|
|
|
|
from restoran_max_bot.common import common_get_contact, common_check_registration
|
|
|
|
from restoran_max_bot.settings import DEBUG
|
|
|
|
from restoran_max_bot.settings import DEBUG
|
|
|
|
from restoran_max_bot.utils import is_json, has_key
|
|
|
|
from restoran_max_bot.utils import is_json, has_key
|
|
|
|
|
|
|
|
from django.shortcuts import render
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def api_decorator(func):
|
|
|
|
def api_decorator(func):
|
|
|
|
@ -61,6 +62,7 @@ def api_decorator(func):
|
|
|
|
@csrf_exempt
|
|
|
|
@csrf_exempt
|
|
|
|
@api_decorator
|
|
|
|
@api_decorator
|
|
|
|
def api_start_max_v1(request, token, **kwargs):
|
|
|
|
def api_start_max_v1(request, token, **kwargs):
|
|
|
|
|
|
|
|
# основной обработчик MAX-БОТ
|
|
|
|
data = json.loads(request.body.decode('utf-8'))
|
|
|
|
data = json.loads(request.body.decode('utf-8'))
|
|
|
|
client = kwargs['client']
|
|
|
|
client = kwargs['client']
|
|
|
|
settings_max = kwargs['settings_max']
|
|
|
|
settings_max = kwargs['settings_max']
|
|
|
|
@ -137,58 +139,22 @@ def iiko_send_message(request: WSGIRequest, token):
|
|
|
|
return JsonResponse(rt, status=200)
|
|
|
|
return JsonResponse(rt, status=200)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def promo_status(request, promo_code, chat_id):
|
|
|
|
def promo_status(request, promo_code, chat_id, client_id):
|
|
|
|
try:
|
|
|
|
try:
|
|
|
|
promo = PromoCode.objects.get(promo=promo_code, chat_id=chat_id)
|
|
|
|
promo = PromoCode.objects.get(
|
|
|
|
|
|
|
|
promo=promo_code,
|
|
|
|
|
|
|
|
chat_id=chat_id,
|
|
|
|
|
|
|
|
client_id=client_id
|
|
|
|
|
|
|
|
)
|
|
|
|
except PromoCode.DoesNotExist:
|
|
|
|
except PromoCode.DoesNotExist:
|
|
|
|
return HttpResponse("Промокод не найден для данного чата", status=404)
|
|
|
|
return HttpResponse("Промокод не найден", status=404)
|
|
|
|
|
|
|
|
|
|
|
|
# Если промокод уже использован, просто показываем статус
|
|
|
|
context = {'promo': promo}
|
|
|
|
if promo.used:
|
|
|
|
return render(request, 'max_bot/promo_status.html', context)
|
|
|
|
html = f"""
|
|
|
|
|
|
|
|
<html>
|
|
|
|
|
|
|
|
<body>
|
|
|
|
|
|
|
|
<h1>Промокод: {promo.promo}</h1>
|
|
|
|
|
|
|
|
<p>ID чата: {promo.chat_id}</p>
|
|
|
|
|
|
|
|
<p>Статус: <strong>Использован</strong></p>
|
|
|
|
|
|
|
|
<p>Время использования: {promo.used_at}</p>
|
|
|
|
|
|
|
|
</body>
|
|
|
|
|
|
|
|
</html>
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
return HttpResponse(html)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Если не использован, показываем кнопку с запросом PIN-кода
|
|
|
|
|
|
|
|
html = f"""
|
|
|
|
|
|
|
|
<html>
|
|
|
|
|
|
|
|
<body>
|
|
|
|
|
|
|
|
<h1>Промокод: {promo.promo}</h1>
|
|
|
|
|
|
|
|
<p>ID чата: {promo.chat_id}</p>
|
|
|
|
|
|
|
|
<p>Статус: <strong style="color:green;">Не использован</strong></p>
|
|
|
|
|
|
|
|
<button onclick="activate()">Активировать</button>
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
|
|
|
function activate() {{
|
|
|
|
|
|
|
|
var pin = prompt("Введите PIN-код администратора:");
|
|
|
|
|
|
|
|
if (pin) {{
|
|
|
|
|
|
|
|
fetch('/promo/activate/{promo_code}/{chat_id}', {{
|
|
|
|
|
|
|
|
method: 'POST',
|
|
|
|
|
|
|
|
headers: {{'Content-Type': 'application/json'}},
|
|
|
|
|
|
|
|
body: JSON.stringify({{pin: pin}})
|
|
|
|
|
|
|
|
}})
|
|
|
|
|
|
|
|
.then(res => res.json())
|
|
|
|
|
|
|
|
.then(data => {{
|
|
|
|
|
|
|
|
alert(data.message);
|
|
|
|
|
|
|
|
if (data.success) location.reload();
|
|
|
|
|
|
|
|
}});
|
|
|
|
|
|
|
|
}}
|
|
|
|
|
|
|
|
}}
|
|
|
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
</body>
|
|
|
|
|
|
|
|
</html>
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
return HttpResponse(html)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@csrf_exempt
|
|
|
|
@csrf_exempt
|
|
|
|
def promo_activate(request, promo_code, chat_id):
|
|
|
|
def promo_activate(request, promo_code, chat_id, client_id):
|
|
|
|
if request.method != 'POST':
|
|
|
|
if request.method != 'POST':
|
|
|
|
return JsonResponse({'error': 'Method not allowed'}, status=405)
|
|
|
|
return JsonResponse({'error': 'Method not allowed'}, status=405)
|
|
|
|
|
|
|
|
|
|
|
|
@ -202,7 +168,12 @@ def promo_activate(request, promo_code, chat_id):
|
|
|
|
return JsonResponse({'error': 'Неверный PIN-код'}, status=403)
|
|
|
|
return JsonResponse({'error': 'Неверный PIN-код'}, status=403)
|
|
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
try:
|
|
|
|
promo = PromoCode.objects.get(promo=promo_code, chat_id=chat_id, used=False)
|
|
|
|
promo = PromoCode.objects.get(
|
|
|
|
|
|
|
|
promo=promo_code,
|
|
|
|
|
|
|
|
chat_id=chat_id,
|
|
|
|
|
|
|
|
client_id=client_id,
|
|
|
|
|
|
|
|
used=False
|
|
|
|
|
|
|
|
)
|
|
|
|
except PromoCode.DoesNotExist:
|
|
|
|
except PromoCode.DoesNotExist:
|
|
|
|
return JsonResponse({'error': 'Промокод не найден или уже использован'}, status=404)
|
|
|
|
return JsonResponse({'error': 'Промокод не найден или уже использован'}, status=404)
|
|
|
|
|
|
|
|
|
|
|
|
@ -210,13 +181,12 @@ def promo_activate(request, promo_code, chat_id):
|
|
|
|
promo.used_at = datetime.now()
|
|
|
|
promo.used_at = datetime.now()
|
|
|
|
promo.save()
|
|
|
|
promo.save()
|
|
|
|
|
|
|
|
|
|
|
|
# Отправляем уведомление клиенту
|
|
|
|
|
|
|
|
integration = Integration.objects.filter(client=promo.client, partner__slug='max_bot', status=True).first()
|
|
|
|
integration = Integration.objects.filter(client=promo.client, partner__slug='max_bot', status=True).first()
|
|
|
|
if integration:
|
|
|
|
if integration:
|
|
|
|
maxbot_send_text_message(
|
|
|
|
maxbot_send_text_message(
|
|
|
|
chat_id=promo.chat_id,
|
|
|
|
chat_id=promo.chat_id,
|
|
|
|
max_token=integration.token,
|
|
|
|
max_token=integration.token,
|
|
|
|
message="🎉 Ваш подарок активирован! Спасибо, что посетили нас."
|
|
|
|
message="🎉 Ваш QR код активирован! Спасибо, что посетили нас!"
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
return JsonResponse({'success': True, 'message': 'Промокод активирован, клиент получил уведомление'})
|
|
|
|
return JsonResponse({'success': True, 'message': 'Промокод активирован, клиент получил уведомление'})
|