115 lines
4.2 KiB
Python
115 lines
4.2 KiB
Python
from .models import *
|
|
from django.template.loader import render_to_string
|
|
from django.utils.translation import get_language, activate
|
|
from datetime import datetime, timedelta
|
|
import json
|
|
|
|
|
|
def get_cur_user_subscribe(user):
|
|
|
|
user_subscribe = None
|
|
try:
|
|
user_subscribe = SubscribeForUser.objects.get(enable=True, user=user)
|
|
except Exception as e:
|
|
pass
|
|
|
|
return user_subscribe
|
|
|
|
|
|
def get_subscribes_w_options(user=None, check_subscribe_orders=False):
|
|
all_options = SubscribeOption.objects.filter(enable=True)
|
|
subscribes = Subscribe.objects.filter(enable=True)
|
|
for subscribe in subscribes:
|
|
subscribe_options_ids = subscribe.options.values_list('id', flat=True)
|
|
subscribe.disabled_options = all_options.exclude(id__in=subscribe_options_ids)
|
|
if user and check_subscribe_orders:
|
|
order = subscribe.get_last_order(user)
|
|
if order and order.status not in ['charged']:
|
|
error = f'{order.status}'
|
|
if 'status' in order.json_data and 'failure_message' in order.json_data['status']:
|
|
error = f'{error} ({order.json_data["status"]["failure_message"]})'
|
|
subscribe.order_error = error
|
|
|
|
return subscribes, all_options
|
|
|
|
|
|
def check_n_enable_subscribe_by_order(order):
|
|
|
|
if order and order.enable:
|
|
if order.status == 'charged':
|
|
order = order.activate_subscribe_for_user()
|
|
|
|
return order
|
|
|
|
|
|
def get_profile_subscribe_page_content_Dict(request, check_orders_required=False):
|
|
|
|
try:
|
|
|
|
from GeneralApp.funcs import get_and_set_lang
|
|
lang = get_and_set_lang(request)
|
|
|
|
data = {}
|
|
if request.body:
|
|
data = json.loads(request.body)
|
|
# check_orders_required = False
|
|
if data and 'check_orders_required' in data: #Требуется проверка статусов заказов
|
|
check_orders_required = data['check_orders_required']
|
|
# all_options = SubscribeOption.objects.filter(enable=True)
|
|
|
|
|
|
subscribes = []
|
|
subscribe_for_user = None
|
|
all_options = []
|
|
|
|
orders = None
|
|
if request.user and request.user.is_authenticated:
|
|
from BillingApp.funcs import get_orders_for_user, get_order_status
|
|
orders = get_orders_for_user(request.user)
|
|
if orders:
|
|
if check_orders_required:
|
|
for order in orders:
|
|
order = get_order_status(order)
|
|
order = check_n_enable_subscribe_by_order(order)
|
|
subscribe_for_user = order.subscribe_for_user
|
|
|
|
subscribes, all_options = get_subscribes_w_options(
|
|
request.user, check_subscribe_orders=True)
|
|
|
|
check_orders_required = False
|
|
else:
|
|
check_orders_required = True
|
|
|
|
if not subscribes:
|
|
subscribes, all_options = get_subscribes_w_options()
|
|
|
|
# if not subscribes_for_user:
|
|
subscribes_for_user = SubscribeForUser.objects.filter(enable=True, user=request.user)
|
|
|
|
if not subscribes_for_user:
|
|
tpl_name = 'blocks/profile/b_subscribe_variants.html'
|
|
else:
|
|
tpl_name = 'blocks/profile/b_subscribe_current.html'
|
|
subscribe_for_user = subscribes_for_user[0]
|
|
subscribe_options_ids = subscribe_for_user.subscribe.options.values_list('id', flat=True)
|
|
subscribe_for_user.subscribe.disabled_options = all_options.exclude(id__in=subscribe_options_ids)
|
|
|
|
# subscribes = Subscribe.objects.filter(enable=True)
|
|
# for subscribe in subscribes:
|
|
# subscribe_options_ids = subscribe.options.values_list('id', flat=True)
|
|
# subscribe.disabled_options = all_options.exclude(id__in=subscribe_options_ids)
|
|
|
|
Dict = {
|
|
'subscribe_for_user': subscribe_for_user,
|
|
'subscribes': subscribes,
|
|
}
|
|
|
|
html = render_to_string(tpl_name, Dict, request=request)
|
|
return {
|
|
'html': html,
|
|
'check_orders_required': check_orders_required,
|
|
}
|
|
|
|
except Exception as e:
|
|
msg = f'show_cur_subscribe_ajax Error = {str(e)}'
|
|
return msg |