103 lines
3.5 KiB
Python
103 lines
3.5 KiB
Python
"""罚单 / 管事分红俱乐部隔离与写入。"""
|
||
from rest_framework.response import Response
|
||
|
||
from jituan.constants import CLUB_ID_DEFAULT
|
||
from jituan.services.club_context import (
|
||
DATA_SCOPE_ALL,
|
||
filter_queryset_by_club,
|
||
resolve_club_id_from_request,
|
||
resolve_club_scope,
|
||
)
|
||
from jituan.services.club_user import get_user_club_id
|
||
|
||
|
||
def resolve_penalty_club_id(order=None, penalized_user_id=None, request=None):
|
||
"""创建罚单时写入 club_id。"""
|
||
if order is not None:
|
||
cid = getattr(order, 'ClubID', None)
|
||
if cid:
|
||
return cid
|
||
if penalized_user_id:
|
||
from users.business_models import User
|
||
u = User.query.filter(UserUID=penalized_user_id).first()
|
||
if u:
|
||
return get_user_club_id(u)
|
||
if request is not None:
|
||
return resolve_club_id_from_request(request)
|
||
return CLUB_ID_DEFAULT
|
||
|
||
|
||
def resolve_gsfenhong_club_id(dingdan_id=None, dashouid=None, order=None, czjilu=None):
|
||
"""管事分红写入 club_id。"""
|
||
if czjilu is not None and getattr(czjilu, 'club_id', None):
|
||
return czjilu.club_id
|
||
if order is not None:
|
||
cid = getattr(order, 'ClubID', None) or getattr(order, 'club_id', None)
|
||
if cid:
|
||
return cid
|
||
if dingdan_id:
|
||
from products.models import Czjilu
|
||
cz = Czjilu.query.filter(dingdan_id=dingdan_id).first()
|
||
if cz and cz.club_id:
|
||
return cz.club_id
|
||
from orders.models import Order
|
||
o = Order.query.filter(OrderID=dingdan_id).first()
|
||
if o and getattr(o, 'ClubID', None):
|
||
return o.ClubID
|
||
if dashouid:
|
||
from users.business_models import User
|
||
u = User.query.filter(UserUID=dashouid).first()
|
||
if u:
|
||
return get_user_club_id(u)
|
||
return CLUB_ID_DEFAULT
|
||
|
||
|
||
def filter_penalty_qs(qs, request):
|
||
return filter_queryset_by_club(qs, request, club_field='ClubID')
|
||
|
||
|
||
def filter_gsfenhong_qs(qs, request):
|
||
if resolve_club_scope(request) == DATA_SCOPE_ALL:
|
||
return qs
|
||
club_id = resolve_club_id_from_request(request)
|
||
return qs.filter(club_id=club_id)
|
||
|
||
|
||
def forbid_penalty_out_of_scope(request, penalty):
|
||
if resolve_club_scope(request) == DATA_SCOPE_ALL:
|
||
return None
|
||
club_id = resolve_club_id_from_request(request)
|
||
penalty_club = getattr(penalty, 'ClubID', None) or CLUB_ID_DEFAULT
|
||
if penalty_club != club_id:
|
||
return Response({'code': 403, 'msg': '该罚单不属于当前俱乐部'})
|
||
return None
|
||
|
||
|
||
def resolve_penalty_record_club_id(order_id=None, player_id=None):
|
||
if order_id:
|
||
from orders.models import Order
|
||
o = Order.query.filter(OrderID=order_id).first()
|
||
if o and getattr(o, 'ClubID', None):
|
||
return o.ClubID
|
||
if player_id:
|
||
from users.business_models import User
|
||
u = User.query.filter(UserUID=player_id).first()
|
||
if u:
|
||
return get_user_club_id(u)
|
||
return CLUB_ID_DEFAULT
|
||
|
||
|
||
def filter_penalty_record_qs(qs, request):
|
||
"""积分处罚记录(chufajilu)按俱乐部过滤。"""
|
||
if resolve_club_scope(request) == DATA_SCOPE_ALL:
|
||
return qs
|
||
club_id = resolve_club_id_from_request(request)
|
||
if hasattr(qs.model, 'ClubID'):
|
||
return qs.filter(ClubID=club_id)
|
||
from django.db.models import Q
|
||
from orders.models import Order
|
||
from users.business_models import User
|
||
user_ids = User.query.filter(ClubID=club_id).values_list('UserUID', flat=True)
|
||
order_ids = Order.query.filter(ClubID=club_id).values_list('OrderID', flat=True)
|
||
return qs.filter(Q(PlayerID__in=user_ids) | Q(OrderID__in=order_ids))
|