147 lines
4.3 KiB
Python
147 lines
4.3 KiB
Python
"""罚单 / 管事分红俱乐部隔离与写入。"""
|
||
from rest_framework.response import Response
|
||
|
||
from jituan.constants import CLUB_ID_DEFAULT
|
||
from jituan.services.club_context import (
|
||
DATA_SCOPE_ALL,
|
||
resolve_club_id_from_request,
|
||
resolve_club_scope,
|
||
)
|
||
from jituan.services.club_user import get_user_club_id
|
||
|
||
|
||
def _club_id_from_user_uid(uid):
|
||
if not uid:
|
||
return None
|
||
from users.business_models import User
|
||
u = User.query.filter(UserUID=str(uid)).first()
|
||
if u:
|
||
return get_user_club_id(u)
|
||
return None
|
||
|
||
|
||
def penalty_cz_club_id(fadan):
|
||
"""罚款支付 czjilu.club_id:与罚单归属一致(申请人俱乐部)。"""
|
||
cid = (getattr(fadan, 'ClubID', None) or '').strip()
|
||
return cid or CLUB_ID_DEFAULT
|
||
|
||
|
||
def resolve_penalty_club_id(
|
||
order=None,
|
||
penalized_user_id=None,
|
||
request=None,
|
||
applicant_id=None,
|
||
user=None,
|
||
):
|
||
"""
|
||
创建金额罚单时写入 club_id。
|
||
只认申请人/操作人俱乐部,不看订单、不看被罚人(交款打手)。
|
||
"""
|
||
cid = _club_id_from_user_uid(applicant_id)
|
||
if cid:
|
||
return cid
|
||
|
||
if request is not None or user is not None:
|
||
from jituan.services.club_write import resolve_club_id_for_write
|
||
u = user or getattr(request, 'user', None)
|
||
cid = resolve_club_id_for_write(request, u)
|
||
if cid:
|
||
return cid
|
||
|
||
return CLUB_ID_DEFAULT
|
||
|
||
|
||
def resolve_penalty_record_club_id(
|
||
order_id=None,
|
||
player_id=None,
|
||
request=None,
|
||
applicant_id=None,
|
||
user=None,
|
||
):
|
||
"""
|
||
创建积分处罚(chufajilu)时写入 club_id。
|
||
只认申请人/操作人俱乐部,不看订单、不看被罚打手。
|
||
"""
|
||
cid = _club_id_from_user_uid(applicant_id)
|
||
if cid:
|
||
return cid
|
||
|
||
if request is not None or user is not None:
|
||
from jituan.services.club_write import resolve_club_id_for_write
|
||
u = user or getattr(request, 'user', None)
|
||
cid = resolve_club_id_for_write(request, u)
|
||
if cid:
|
||
return cid
|
||
|
||
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:
|
||
cid = _club_id_from_user_uid(dashouid)
|
||
if cid:
|
||
return cid
|
||
return CLUB_ID_DEFAULT
|
||
|
||
|
||
def _filter_by_penalty_club_id(qs, request):
|
||
"""
|
||
罚单/积分处罚列表:只按记录自身 club_id(=申请人俱乐部)过滤。
|
||
不按被罚人、不按订单、不按交款人俱乐部掺数据。
|
||
"""
|
||
if resolve_club_scope(request) == DATA_SCOPE_ALL:
|
||
return qs
|
||
if not hasattr(qs.model, 'ClubID'):
|
||
return qs
|
||
|
||
from django.db.models import Q
|
||
|
||
club_id = resolve_club_id_from_request(request)
|
||
if club_id == CLUB_ID_DEFAULT:
|
||
return qs.filter(
|
||
Q(ClubID=club_id) | Q(ClubID__isnull=True) | Q(ClubID='')
|
||
)
|
||
return qs.filter(ClubID=club_id)
|
||
|
||
|
||
def filter_penalty_qs(qs, request):
|
||
return _filter_by_penalty_club_id(qs, request)
|
||
|
||
|
||
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 filter_penalty_record_qs(qs, request):
|
||
"""积分处罚记录(chufajilu)按申请人俱乐部 club_id 过滤。"""
|
||
return _filter_by_penalty_club_id(qs, request)
|