123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- # coding=utf-8
- from django.utils import timezone
- from apps.rebate.models import CashRebate, PointRebate, CashRebateLog, PointRebateLog, PointGive, PointGiveLog
- from apps.customer.models import SuperiorDistributor
- from apps.order.models import Order
- from apps.config.models import Config
- class CustomerRebate(object):
- def __init__(self, pay):
- self.pay = pay
- self.order = Order.objects.filter(pay=self.pay).first()
- def cash_rebate(self, ratio, amount, customer):
- '''
- 计算现金返利 1、2、3级分销商 返现金
- :param ratio:
- :param amount:
- :param customer:
- :return:
- '''
- rebate = CashRebate.objects.create(
- order=self.order,
- ratio=ratio,
- amount=amount,
- customer=customer,
- create_time=timezone.now()
- )
- CashRebateLog.addnew(rebate)
- def point_rebate(self, ratio, amount, customer):
- '''
- 计算积分返利 4、5级分销商 返积分
- :param ratio:
- :param amount:
- :param customer:
- :return:
- '''
- rebate = PointRebate.objects.create(
- order=self.order,
- ratio=ratio,
- amount=amount,
- customer=customer,
- create_time=timezone.now()
- )
- PointRebateLog.addnew(rebate)
- def point_give(self, ratio, amount, customer):
- '''
- 计算购买商品赠送的积分 购买商品时根据后台设置的比例赠送相应的积分给购买者
- :param ratio:
- :param amount:
- :param customer:
- :return:
- '''
- give = PointGive.objects.create(
- order=self.order,
- ratio=ratio,
- amount=amount,
- customer=customer,
- create_time=timezone.now()
- )
- PointGiveLog.addnew(give)
- def calcul_rebate(self):
- '''
- 计算返利并保存log
- :return:
- '''
- if not self.order:
- return
- if self.order.total_amount <= 0:
- return
- if self.order.status == Order.WAIT_PAY or self.order.status == Order.CANCEL:
- return
- customer = self.order.customer
- sd = SuperiorDistributor.objects.filter(customer=customer).first()
- if not sd:
- return
- # 判断是首次购买还是再次购买 首次购买与再次购买返利的比例不同
- count = Order.objects.filter(customer=customer, status__in=[Order.WAIT_DISPATCH, Order.CONFIRM_DISPATCH]).count()
- rebate_dic = {}
- if count > 1:
- rebate_dic = Config.get_rebate(False)
- elif count == 1:
- rebate_dic = Config.get_rebate(True)
- # 现金保留两位小数, 积分整数
- total_amount = float(self.order.total_amount or 0)
- if sd.one_level and sd.one_level.is_distributor and rebate_dic['one_level'] > 0:
- amount = int(round(total_amount * rebate_dic['one_level'] / 100.0, 0))
- self.cash_rebate(rebate_dic['one_level'], amount, sd.one_level)
- if sd.two_level and sd.two_level.is_distributor and rebate_dic['two_level'] > 0:
- amount = int(round(total_amount * rebate_dic['two_level']/ 100.0, 0))
- self.cash_rebate(rebate_dic['two_level'], amount, sd.two_level)
- if sd.three_level and sd.three_level.is_distributor and rebate_dic['three_level'] > 0:
- amount = int(round(total_amount * rebate_dic['three_level'] / 100.0, 0))
- self.cash_rebate(rebate_dic['three_level'], amount, sd.three_level)
- if sd.four_level and sd.four_level.is_distributor and rebate_dic['four_level'] > 0:
- amount = int(round((total_amount / 100.0) * (rebate_dic['four_level'] / 100.0), 0))
- self.point_rebate(rebate_dic['four_level'], amount, sd.four_level)
- if sd.five_level and sd.five_level.is_distributor and rebate_dic['five_level'] > 0:
- amount = int(round((total_amount / 100.0) * (rebate_dic['five_level'] / 100.0), 0))
- self.point_rebate(rebate_dic['five_level'], amount, sd.five_level)
- # 计算购买商品 赠送积分
- rule = Config.get_value(Config.KEY_POINT_RULE)
- if rule > 0:
- amount = int(round((total_amount / 100.0) * (rule / 100.0), 0))
- self.point_give(rule, amount, customer)
|