Subversion Repositories SmartDukaan

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
3249 varun.gupt 1
'''
2
Created on 06-Sept-2011
3
 
4
@author: Varun Gupta
3384 varun.gupt 5
 
4278 varun.gupt 6
Max Uses: 1500
3417 varun.gupt 7
 
3491 varun.gupt 8
A user can use the coupon only 2 times.
3417 varun.gupt 9
 
3384 varun.gupt 10
Spice Blueberry Mini QT-58    20% off
11
Spice Blueberry Exp QT-61    20% off
4195 varun.gupt 12
Nokia (All models, other than C2-03 & C2-06, from Rs.3000 to Rs.5000)  Rs.200 off
4360 varun.gupt 13
Nokia (All models, other than Lumia 710, above Rs.5000)    Rs.500 off
3249 varun.gupt 14
'''
15
from shop2020.thriftpy.model.v1.user.ttypes import PromotionException
3417 varun.gupt 16
from shop2020.model.v1.user.impl.PromotionRuleDataUtilities import get_coupon_usage_count, get_coupon_usage_count_by_user
3249 varun.gupt 17
from shop2020.clients.CatalogClient import CatalogClient
3554 varun.gupt 18
from shop2020.thriftpy.model.v1.user.ttypes import Discount
3249 varun.gupt 19
 
20
def execute(cart, coupon_code, args):
21
 
22
    #Allow only first 1000 users to use the coupon
23
    count_coupon_usage = get_coupon_usage_count(coupon_code)
24
 
4278 varun.gupt 25
    if count_coupon_usage >= 1500:
3249 varun.gupt 26
        raise PromotionException(112, 'This promotion is over.')
27
 
3417 varun.gupt 28
    #Allow a user to use the coupon only 5 times max.
29
    count_users_usage = get_coupon_usage_count_by_user(coupon_code, cart.userId)
30
 
3491 varun.gupt 31
    if count_users_usage > 1:
3417 varun.gupt 32
        raise PromotionException(111, 'This promotion is over.')
33
 
3554 varun.gupt 34
    discounts = []
35
 
3249 varun.gupt 36
    if cart.lines:
37
        total_selling_price = 0
38
        total_discounted_price = 0
39
 
40
        has_qualified_model = False
41
 
42
        for line in cart.lines:
43
 
44
            line.discountedPrice = line.actualPrice
3554 varun.gupt 45
            discount_value = 0
3249 varun.gupt 46
 
3716 varun.gupt 47
            if line.itemId in (159, 160, 161, 1557, 1558) and not has_qualified_model:  #Spice QT-58/61
3249 varun.gupt 48
 
49
                has_qualified_model = True
50
 
51
                if line.actualPrice:
52
                    line.discountedPrice = round(line.actualPrice * 0.8)
3554 varun.gupt 53
                    discount_value = round(line.actualPrice * 0.2)
3249 varun.gupt 54
 
4195 varun.gupt 55
            # Excluded: Nokia C2-03, C2-06 and Price above Rs.1,999
4360 varun.gupt 56
            elif line.itemId not in (1590, 2014, 2063, 2035, 2036, 2210, 2478, 2565) and line.actualPrice > 2999 and not has_qualified_model:
3454 varun.gupt 57
 
3249 varun.gupt 58
                catalog_client = CatalogClient().get_client()
59
                item = catalog_client.getItem(line.itemId)
3454 varun.gupt 60
 
3249 varun.gupt 61
                if item.brand.lower() == 'nokia':
3257 varun.gupt 62
                    has_qualified_model = True
63
 
3249 varun.gupt 64
                    discount_value = 200 if line.actualPrice < 5001 else 500
65
                    line.discountedPrice = line.actualPrice - discount_value
66
 
67
            total_selling_price += line.actualPrice * line.quantity
3384 varun.gupt 68
            total_discounted_price += line.discountedPrice + (line.actualPrice * (line.quantity - 1))
3554 varun.gupt 69
 
70
            if discount_value > 0:
71
                discount = Discount()
72
                discount.cart_id = cart.id
73
                discount.item_id = line.itemId
74
                discount.discount = discount_value
75
                discount.quantity = 1
76
 
77
                discounts.append(discount)
3249 varun.gupt 78
 
79
        if has_qualified_model is False:
3401 varun.gupt 80
            raise PromotionException(115, 'This coupon is applicable only for selective handsets.')
3249 varun.gupt 81
 
82
        cart.totalPrice = total_selling_price
83
        cart.discountedPrice = total_discounted_price
84
 
4189 varun.gupt 85
    return cart, discounts
86
 
87
 
88
def getDiscountOnItem(item):
89
    discount_expressions = [
90
            '0.2 * item.sellingPrice if item.id in [159, 160, 161, 1557, 1558] else None',
4228 varun.gupt 91
            '200 if item.brand == "Nokia" and item.sellingPrice > 2999 and item.sellingPrice < 5001 and item.id not in (1590, 2014, 2063, 2035, 2036) else None',
4360 varun.gupt 92
            '500 if item.brand == "Nokia" and item.sellingPrice > 5000 and item.id not in (2210, 2478, 2565) else None'
4189 varun.gupt 93
        ]
94
    for expression in discount_expressions:
95
        discount = eval(expression)
96
 
97
        if discount is not None:
98
            return discount
99
 
100
    return None