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