fix: 组队仅队长提交修改,组员可见交付;罚单聚合改撤联动
详情返回 can_submit/can_modify;交付图按订单聚合;组队均摊罚单展示总额并联动修改/撤销;罚单 ClubID 归属订单店。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -642,21 +642,37 @@ class ShangjiaDingdanXiangqingView(APIView):
|
||||
if hasattr(dashou_user, 'DashouProfile') and dashou_user.DashouProfile:
|
||||
dashou_nicheng = dashou_user.DashouProfile.nicheng or ''
|
||||
|
||||
# 6. 罚款数据(如果存在)
|
||||
fadan_obj = Penalty.query.filter(
|
||||
RelatedOrderID=dingdan_id,
|
||||
PenalizedUserID=dashou_yonghuid
|
||||
).first()
|
||||
# 6. 罚款数据(组队均摊:聚合全部罚单;展示总额+明细)
|
||||
from orders.services.team_recruit import list_team_split_penalties
|
||||
split_list = list_team_split_penalties(dingdan_id, include_rejected=True)
|
||||
fadan_qs = Penalty.query.filter(RelatedOrderID=dingdan_id).order_by('id')
|
||||
if split_list:
|
||||
fadan_list = split_list
|
||||
else:
|
||||
fadan_list = list(
|
||||
fadan_qs.filter(PenalizedUserID=dashou_yonghuid)[:1]
|
||||
) or list(fadan_qs[:1])
|
||||
fadan_obj = fadan_list[0] if fadan_list else None
|
||||
fadan_dict = None
|
||||
if fadan_obj:
|
||||
fadan_items = []
|
||||
if fadan_list:
|
||||
total_fine = 0.0
|
||||
total_bonus = 0.0
|
||||
rate = 0.0
|
||||
for p in fadan_list:
|
||||
total_fine += float(p.FineAmount or 0)
|
||||
total_bonus += float(p.ApplicantBonusAmount or 0)
|
||||
if p.ApplicantBonusRate:
|
||||
rate = float(p.ApplicantBonusRate)
|
||||
fadan_items.append({
|
||||
'id': p.id,
|
||||
'beichufa_id': p.PenalizedUserID or '',
|
||||
'fakuanjine': float(p.FineAmount or 0),
|
||||
'zhuangtai': p.Status,
|
||||
'yingde_fenhong': float(p.ApplicantBonusAmount or 0),
|
||||
})
|
||||
ct = fmt_datetime(fadan_obj.CreateTime)
|
||||
ut = fmt_datetime(fadan_obj.UpdateTime)
|
||||
zhengju_urls = list(
|
||||
PenaltyAppealImage.query.filter(Penalty=fadan_obj, Purpose=1).values_list('ImageURL', flat=True)
|
||||
)
|
||||
shensu_urls = list(
|
||||
PenaltyAppealImage.query.filter(Penalty=fadan_obj, Purpose=2).values_list('ImageURL', flat=True)
|
||||
)
|
||||
zhengju_imgs = [
|
||||
{'id': t.id, 'url': t.ImageURL}
|
||||
for t in PenaltyAppealImage.query.filter(Penalty=fadan_obj, Purpose=1)
|
||||
@@ -665,20 +681,23 @@ class ShangjiaDingdanXiangqingView(APIView):
|
||||
{'id': t.id, 'url': t.ImageURL}
|
||||
for t in PenaltyAppealImage.query.filter(Penalty=fadan_obj, Purpose=2)
|
||||
]
|
||||
reason = (fadan_obj.Reason or '').replace('【组队均摊】', '', 1)
|
||||
fadan_dict = {
|
||||
'id': fadan_obj.id,
|
||||
'chufaliyou': fadan_obj.Reason or '',
|
||||
'fakuanjine': float(fadan_obj.FineAmount) if fadan_obj.FineAmount else 0.0,
|
||||
'chufaliyou': reason,
|
||||
'fakuanjine': total_fine,
|
||||
'yingxiang_qiangdan': fadan_obj.AffectsGrabbing,
|
||||
'zhuangtai': fadan_obj.Status,
|
||||
'shensuliyou': fadan_obj.AppealReason or '',
|
||||
'tongyi_chufaliyou': fadan_obj.ApproveReason or '',
|
||||
'bohuiliyou': fadan_obj.RejectReason or '',
|
||||
'yingde_fenhong': float(fadan_obj.ApplicantBonusAmount or 0),
|
||||
'fenhong_lilv': float(fadan_obj.ApplicantBonusRate or 0),
|
||||
'fenhong_yiruzhang': bool(fadan_obj.BonusCredited),
|
||||
'yingde_fenhong': total_bonus,
|
||||
'fenhong_lilv': rate,
|
||||
'fenhong_yiruzhang': all(bool(p.BonusCredited) for p in fadan_list),
|
||||
'zhengju_tupian': zhengju_imgs,
|
||||
'shensu_tupian': shensu_imgs,
|
||||
'is_team_split': len(fadan_list) > 1 or (fadan_obj.Reason or '').startswith('【组队均摊】'),
|
||||
'items': fadan_items,
|
||||
'CreateTime': ct,
|
||||
'create_time': ct,
|
||||
'UpdateTime': ut,
|
||||
|
||||
Reference in New Issue
Block a user