Files
Django/jituan/services/club_penalty.py

147 lines
4.3 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,
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)