Files
Django/jituan/services/club_penalty.py

103 lines
3.5 KiB
Python
Raw 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 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))