|  | # -*- coding: utf-8 -*-
from django.conf import settings
from django.contrib.admin.views.decorators import staff_member_required
from django.db import transaction
from django_logit import logit
from django_response import response
from integral.models import SaleclerkIntegralIncomeExpensesInfo, SaleclerkSubmitLogInfo
from mch.models import BrandInfo, DistributorInfo, ModelInfo, SaleclerkInfo, ConsumeInfoSubmitLogInfo, ActivityInfo
from staff.models import StaffDeleteClerkSaleSubmitLogInfo
from coupon.models import CouponInfo, UserCouponInfo
from account.models import UserInfo
from member.models import RightInfo
from statistic.models import (DistributorSaleStatisticInfo, ModelSaleStatisticInfo, ProvinceSaleStatisticInfo,
                              SaleclerkSaleStatisticInfo, SaleStatisticInfo, ConsumeSaleStatisticInfo, ConsumeDistributorSaleStatisticInfo, ConsumeModelSaleStatisticInfo, ConsumeProvinceSaleStatisticInfo, ConsumeUserStatisticInfo)
def exec_del_clerk_sale_submit(pk):
    try:
        ssli = SaleclerkSubmitLogInfo.objects.select_for_update().get(pk=pk)
    except SaleclerkSubmitLogInfo.DoesNotExist:
        return response()
    if not ssli.status:
        return response()
    ssli.status = False
    ssli.is_staff_delete = True
    ssli.save()
    try:
        brand = BrandInfo.objects.get(pk=ssli.brand_pk)
    except BrandInfo.DoesNotExist:
        return response()
    try:
        model = ModelInfo.objects.get(pk=ssli.model_pk)
    except ModelInfo.DoesNotExist:
        return response()
    try:
        clerk = SaleclerkInfo.objects.select_for_update().get(clerk_id=ssli.clerk_id, status=True)
    except SaleclerkInfo.DoesNotExist:
        return response()
    try:
        distributor = DistributorInfo.objects.get(distributor_id=clerk.distributor_id)
    except DistributorInfo.DoesNotExist:
        return response()
    integral = model.integral
    clerk.num -= 1
    clerk.integral -= integral
    clerk.total_integral -= integral
    clerk.save()
    ymd = str(ssli.ymd)
    if not clerk.test_user and not ssli.dupload:
        # 日销量统计
        ssi, _ = SaleStatisticInfo.objects.select_for_update().get_or_create(
            brand_id=brand.brand_id,
            ymd=ymd,
        )
        ssi.num -= 1
        ssi.save()
        # 月销量统计
        ssi, _ = SaleStatisticInfo.objects.select_for_update().get_or_create(
            brand_id=brand.brand_id,
            ymd=ymd[:6],
        )
        ssi.num -= 1
        ssi.save()
        # 年销量统计
        ssi, _ = SaleStatisticInfo.objects.select_for_update().get_or_create(
            brand_id=brand.brand_id,
            ymd=ymd[:4],
        )
        ssi.num -= 1
        ssi.save()
        # 型号销量统计
        mssi, _ = ModelSaleStatisticInfo.objects.select_for_update().get_or_create(
            brand_id=brand.brand_id,
            model_name=model.model_uni_name,
            ymd=ymd,
        )
        try:
            mssi.saleclerks.remove(clerk.clerk_id)
        except ValueError:
            pass
        mssi.num = len(mssi.saleclerks)
        mssi.save()
        mssi, _ = ModelSaleStatisticInfo.objects.select_for_update().get_or_create(
            brand_id=brand.brand_id,
            model_name=model.model_uni_name,
            ymd=ymd[:6],
        )
        try:
            mssi.saleclerks.remove(clerk.clerk_id)
        except ValueError:
            pass
        mssi.num = len(mssi.saleclerks)
        mssi.save()
        mssi, _ = ModelSaleStatisticInfo.objects.select_for_update().get_or_create(
            brand_id=brand.brand_id,
            model_name=model.model_uni_name,
            ymd=ymd[:4],
        )
        try:
            mssi.saleclerks.remove(clerk.clerk_id)
        except ValueError:
            pass
        mssi.num = len(mssi.saleclerks)
        mssi.save()
        # 经销商销量统计
        dssi, _ = DistributorSaleStatisticInfo.objects.select_for_update().get_or_create(
            brand_id=brand.brand_id,
            distributor_id=distributor.distributor_id,
            ymd=ymd,
        )
        dssi.distributor_name = distributor.distributor_name
        dssi.num -= 1
        dssi.save()
        dssi2, _ = DistributorSaleStatisticInfo.objects.select_for_update().get_or_create(
            brand_id=brand.brand_id,
            distributor_id=distributor.distributor_id,
            ymd=0,
        )
        dssi2.distributor_name = distributor.distributor_name
        dssi2.num -= 1
        dssi2.save()
        # 日省份销量统计
        pssi, _ = ProvinceSaleStatisticInfo.objects.select_for_update().get_or_create(
            brand_id=brand.brand_id,
            province_code=distributor.distributor_province_code,
            ymd=ymd,
        )
        pssi.province_name = distributor.distributor_province_name
        pssi.num -= 1
        pssi.save()
        # 月省份销量统计
        pssi, _ = ProvinceSaleStatisticInfo.objects.select_for_update().get_or_create(
            brand_id=brand.brand_id,
            province_code=distributor.distributor_province_code,
            ymd=ymd[:6],
        )
        pssi.province_name = distributor.distributor_province_name
        pssi.num -= 1
        pssi.save()
        # 年省份销量统计
        pssi, _ = ProvinceSaleStatisticInfo.objects.select_for_update().get_or_create(
            brand_id=brand.brand_id,
            province_code=distributor.distributor_province_code,
            ymd=ymd[:4],
        )
        pssi.province_name = distributor.distributor_province_name
        pssi.num -= 1
        pssi.save()
        # 日销售员销量统计
        sssi, _ = SaleclerkSaleStatisticInfo.objects.select_for_update().get_or_create(
            brand_id=brand.brand_id,
            clerk_id=clerk.clerk_id,
            ymd=ymd,
        )
        sssi.distributor_id = distributor.distributor_id
        sssi.distributor_name = distributor.distributor_name
        sssi.distributor_short_name = distributor.distributor_short_name
        sssi.clerk_name = clerk.clerk_name
        sssi.num -= 1
        sssi.save()
        # 月销售员销量统计
        sssi, _ = SaleclerkSaleStatisticInfo.objects.select_for_update().get_or_create(
            brand_id=brand.brand_id,
            clerk_id=clerk.clerk_id,
            ymd=ymd[:6],
        )
        sssi.distributor_id = distributor.distributor_id
        sssi.distributor_name = distributor.distributor_name
        sssi.distributor_short_name = distributor.distributor_short_name
        sssi.clerk_name = clerk.clerk_name
        sssi.num -= 1
        sssi.save()
        # 年销售员销量统计
        sssi, _ = SaleclerkSaleStatisticInfo.objects.select_for_update().get_or_create(
            brand_id=brand.brand_id,
            clerk_id=clerk.clerk_id,
            ymd=ymd[:4],
        )
        sssi.distributor_id = distributor.distributor_id
        sssi.distributor_name = distributor.distributor_name
        sssi.distributor_short_name = distributor.distributor_short_name
        sssi.clerk_name = clerk.clerk_name
        sssi.num -= 1
        sssi.save()
@logit
@transaction.atomic
def del_clerk_sale_submit_api(request):
    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
    pk = int(request.POST.get('pk', ''))
    exec_del_clerk_sale_submit(pk)
    return response(200, 'Del Success', u'删除成功')
def exec_del_consumer_submit(pk):
    try:
        ssli = ConsumeInfoSubmitLogInfo.objects.select_for_update().get(pk=pk)
    except ConsumeInfoSubmitLogInfo.DoesNotExist:
        return response()
    if not ssli.status:
        return response()
    sn = ssli.serialNo
    ssli.status = False
    ssli.save()
    ConsumeInfoSubmitLogInfo.objects.filter(serialNo=sn, model_id=ssli.model_id, dupload=True, status=True).update(status=False)
    
    if ssli.dupload:
        return response()
    try:
        brand = BrandInfo.objects.get(brand_id=ssli.brand_id)
    except BrandInfo.DoesNotExist:
        return response()
    try:
        model = ModelInfo.objects.get(model_id=ssli.model_id)
    except ModelInfo.DoesNotExist:
        return response()
    try:
        user = UserInfo.objects.select_for_update().get(user_id=ssli.user_id)
    except UserInfo.DoesNotExist:
        return response()
    #消除用户劵
    if user.shots_num <= 5:
        rights = RightInfo.objects.filter(is_send_coupon=True, status=True)
        for right in rights:
            if user.level == UserInfo.MEMBER_LRC:
                coupon_id = right.coupon_level1_id
                coupon_num = right.coupon_level1_num
            elif user.level == UserInfo.MEMBER_SILVER:
                coupon_id = right.coupon_level2_id
                coupon_num = right.coupon_level2_num
            elif user.level == UserInfo.MEMBER_GOLD:
                coupon_id = right.coupon_level3_id
                coupon_num = right.coupon_level3_num
            elif user.level == UserInfo.MEMBER_WHITE_GOLD:
                coupon_id = right.coupon_level4_id
                coupon_num = right.coupon_level4_num
            elif user.level == UserInfo.MEMBER_BLACK_GOLD:
                coupon_id = right.coupon_level5_id
                coupon_num = right.coupon_level5_num
            else:
                continue
            try:
                coupon = CouponInfo.objects.get(coupon_id=coupon_id)
            except CouponInfo.DoesNotExist:
                continue
            user_coupons = UserCouponInfo.objects.filter(user_id=user.user_id, coupon_id=coupon_id, coupon_from='MEMBER_BENEFITS', status=True, has_used=False).values_list('pk', flat=True)
            # 防止用户部分劵已使用,不够消除
            UserCouponInfo.objects.filter(pk__in=list(user_coupons)[0:min(coupon_num, len(user_coupons))]).update(status=False)
    
    # 消除活动劵
    if ssli.submit_during_activity:
        UserCouponInfo.objects.filter(user_id=user.user_id, coupon_from='PROMOTION', submit_pk=ssli.pk).update(status=False)
    #消除积分及会员等级
    integral = model.shot_member_integral
    if user.shots_num <= 5:
        user.level -= 1
    user.shots_num -= 1
    user.integral -= integral
    user.integral = max(user.integral, 0)
    user.save()
    # 消除统计记录
    ymd = str(ssli.ymd)
    if not user.test_user:
        # 日销量统计
        ssi, _ = ConsumeSaleStatisticInfo.objects.select_for_update().get_or_create(
            brand_id=brand.brand_id,
            ymd=ymd,
        )
        ssi.num -= 1
        ssi.save()
        # 月销量统计
        ssi, _ = ConsumeSaleStatisticInfo.objects.select_for_update().get_or_create(
            brand_id=brand.brand_id,
            ymd=ymd[:6],
        )
        ssi.num -= 1
        ssi.save()
        # 年销量统计
        ssi, _ = ConsumeSaleStatisticInfo.objects.select_for_update().get_or_create(
            brand_id=brand.brand_id,
            ymd=ymd[:4],
        )
        ssi.num -= 1
        ssi.save()
        # 日用户统计
        ussi, _ = ConsumeUserStatisticInfo.objects.select_for_update().get_or_create(
            brand_id=brand.brand_id,
            ymd=ymd,
        )
        try:
            ussi.users.remove(user.user_id)
        except ValueError:
            pass
        ussi.num = len(ussi.users)
        ussi.save()
        # 月用户统计
        ussi, _ = ConsumeUserStatisticInfo.objects.select_for_update().get_or_create(
            brand_id=brand.brand_id,
            ymd=ymd[:6],
        )
        try:
            ussi.users.remove(user.user_id)
        except ValueError:
            pass
        ussi.num = len(ussi.users)
        ussi.save()
        # 年用户统计
        ussi, _ = ConsumeUserStatisticInfo.objects.select_for_update().get_or_create(
            brand_id=brand.brand_id,
            ymd=ymd[:4],
        )
        try:
            ussi.users.remove(user.user_id)
        except ValueError:
            pass
        ussi.num = len(ussi.users)
        ussi.save()
        # 型号日销量统计
        mssi, _ = ConsumeModelSaleStatisticInfo.objects.select_for_update().get_or_create(
            brand_id=brand.brand_id,
            model_name=model.model_uni_name,
            ymd=ymd,
        )
        try:
            mssi.users.remove(user.user_id)
        except ValueError:
            pass
        mssi.num = len(mssi.users)
        mssi.save()
        # 型号月销量统计
        mssi, _ = ConsumeModelSaleStatisticInfo.objects.select_for_update().get_or_create(
            brand_id=brand.brand_id,
            model_name=model.model_uni_name,
            ymd=ymd[:6],
        )
        try:
            mssi.users.remove(user.user_id)
        except ValueError:
            pass
        mssi.num = len(mssi.users)
        mssi.save()
        # 型号年销量统计
        mssi, _ = ConsumeModelSaleStatisticInfo.objects.select_for_update().get_or_create(
            brand_id=brand.brand_id,
            model_name=model.model_uni_name,
            ymd=ymd[:4],
        )
        try:
            mssi.users.remove(user.user_id)
        except ValueError:
            pass
        mssi.num = len(mssi.users)
        mssi.save()
        # 省份日销量统计
        pssi, _ = ProvinceSaleStatisticInfo.objects.select_for_update().get_or_create(
            brand_id=brand.brand_id,
            province_name=ssli.province,
            ymd=ymd,
        )
        pssi.province_name = ssli.province
        pssi.num -= 1
        pssi.save()
        # 省份月销量统计
        pssi, _ = ProvinceSaleStatisticInfo.objects.select_for_update().get_or_create(
            brand_id=brand.brand_id,
            province_name=ssli.province,
            ymd=ymd[:6],
        )
        pssi.province_name = ssli.province
        pssi.num -= 1
        pssi.save()
        # 省份年销量统计
        pssi, _ = ProvinceSaleStatisticInfo.objects.select_for_update().get_or_create(
            brand_id=brand.brand_id,
            province_name=ssli.province,
            ymd=ymd[:4],
        )
        pssi.province_name = ssli.province
        pssi.num -= 1
        pssi.save()
@logit
@transaction.atomic
def del_consumer_submit_api(request):
    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
    pk = int(request.POST.get('pk', ''))
    exec_del_consumer_submit(pk)
    return response(200, 'Del Success', u'删除成功')
 |