|  | # -*- coding: utf-8 -*-
from TimeConvert import TimeConvert as tc
from account.models import UserInfo
from coupon.models import CouponInfo, UserCouponInfo
from member.models import RightInfo
def fix_user_coupon_info():
    rights = RightInfo.objects.filter(is_send_coupon=True, status=True)
    coupons = {
        'level1': {},
        'level2': {},
        'level3': {},
        'level4': {},
        'level5': {},
    }
    for right in rights:
        if right.coupon_level1_id:
            if right.coupon_level1_id not in coupons['level1']:
                coupons['level1'][right.coupon_level1_id] = 0
            coupons['level1'][right.coupon_level1_id] += right.coupon_level1_num
            if right.coupon_level1_id not in coupons['level2']:
                coupons['level2'][right.coupon_level1_id] = 0
            coupons['level2'][right.coupon_level1_id] += right.coupon_level1_num
            if right.coupon_level1_id not in coupons['level3']:
                coupons['level3'][right.coupon_level1_id] = 0
            coupons['level3'][right.coupon_level1_id] += right.coupon_level1_num
            if right.coupon_level1_id not in coupons['level4']:
                coupons['level4'][right.coupon_level1_id] = 0
            coupons['level4'][right.coupon_level1_id] += right.coupon_level1_num
            if right.coupon_level1_id not in coupons['level5']:
                coupons['level5'][right.coupon_level1_id] = 0
            coupons['level5'][right.coupon_level1_id] += right.coupon_level1_num
        if right.coupon_level2_id:
            if right.coupon_level2_id not in coupons['level2']:
                coupons['level2'][right.coupon_level2_id] = 0
            coupons['level2'][right.coupon_level2_id] += right.coupon_level2_num
            if right.coupon_level2_id not in coupons['level3']:
                coupons['level3'][right.coupon_level2_id] = 0
            coupons['level3'][right.coupon_level2_id] += right.coupon_level2_num
            if right.coupon_level2_id not in coupons['level4']:
                coupons['level4'][right.coupon_level2_id] = 0
            coupons['level4'][right.coupon_level2_id] += right.coupon_level2_num
            if right.coupon_level2_id not in coupons['level5']:
                coupons['level5'][right.coupon_level2_id] = 0
            coupons['level5'][right.coupon_level2_id] += right.coupon_level2_num
        if right.coupon_level3_id:
            if right.coupon_level3_id not in coupons['level3']:
                coupons['level3'][right.coupon_level3_id] = 0
            coupons['level3'][right.coupon_level3_id] += right.coupon_level3_num
            if right.coupon_level3_id not in coupons['level4']:
                coupons['level4'][right.coupon_level3_id] = 0
            coupons['level4'][right.coupon_level3_id] += right.coupon_level3_num
            if right.coupon_level3_id not in coupons['level5']:
                coupons['level5'][right.coupon_level3_id] = 0
            coupons['level5'][right.coupon_level3_id] += right.coupon_level3_num
        if right.coupon_level4_id:
            if right.coupon_level4_id not in coupons['level4']:
                coupons['level4'][right.coupon_level4_id] = 0
            coupons['level4'][right.coupon_level4_id] += right.coupon_level4_num
            if right.coupon_level4_id not in coupons['level5']:
                coupons['level5'][right.coupon_level4_id] = 0
            coupons['level5'][right.coupon_level4_id] += right.coupon_level4_num
        if right.coupon_level5_id:
            if right.coupon_level5_id not in coupons['level5']:
                coupons['level5'][right.coupon_level5_id] = 0
            coupons['level5'][right.coupon_level5_id] += right.coupon_level5_num
    users = UserInfo.objects.filter(level__gte=1, status=True)
    for user in users:
        level_coupon = coupons.get('level{}'.format(user.level))
        for coupon_id, coupon_num in level_coupon.items():
            real_coupon_num = UserCouponInfo.objects.filter(user_id=user.user_id, coupon_id=coupon_id, coupon_from='MEMBER_BENEFITS', status=True).count()
            if real_coupon_num == coupon_num:
                continue
            print(user.user_id, coupon_id, coupon_num - real_coupon_num)
            if real_coupon_num > coupon_num:
                for _ in range(real_coupon_num - coupon_num):
                    user_coupons = UserCouponInfo.objects.filter(user_id=user.user_id, coupon_id=coupon_id, coupon_from='MEMBER_BENEFITS', status=True).order_by('-pk')
                    user_coupon = user_coupons[0]
                    user_coupon.status = False
                    user_coupon.save()
            else:
                try:
                    coupon = CouponInfo.objects.get(coupon_id=coupon_id)
                except CouponInfo.DoesNotExist:
                    continue
                for _ in range(coupon_num - real_coupon_num):
                    UserCouponInfo.objects.create(
                        brand_id=coupon.brand_id,
                        brand_name=coupon.brand_name,
                        coupon_id=coupon_id,
                        user_id=user.user_id,
                        coupon_title=coupon.coupon_title,
                        coupon_detail=coupon.coupon_detail,
                        coupon_value=coupon.coupon_value,
                        coupon_image=coupon.coupon_image,
                        active_at=tc.utc_datetime(),
                        expire_at=tc.utc_datetime(days=365),
                        coupon_valid_period=coupon.coupon_valid_period,
                        coupon_limit_model_ids=coupon.coupon_limit_model_ids,
                    )
 |