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