| 11653 |
amit.gupta |
1 |
'''
|
|
|
2 |
Created on 06-Dec-2011
|
|
|
3 |
|
|
|
4 |
@author: varungupta
|
|
|
5 |
'''
|
|
|
6 |
|
|
|
7 |
from shop2020.clients.CatalogClient import CatalogClient
|
|
|
8 |
from shop2020.clients.UserClient import UserClient
|
|
|
9 |
from shop2020.model.v1.user.impl.Dataservice import PrivateDealUser
|
|
|
10 |
from shop2020.thriftpy.model.v1.user.ttypes import PromotionException, Discount
|
| 12722 |
amit.gupta |
11 |
import datetime
|
| 11653 |
amit.gupta |
12 |
|
|
|
13 |
|
|
|
14 |
def execute(cart, coupon_code, args):
|
|
|
15 |
user_client = UserClient().get_client()
|
|
|
16 |
user = user_client.getUserByCartId(cart.id)
|
| 11663 |
amit.gupta |
17 |
if user.isAnonymous:
|
|
|
18 |
raise PromotionException(115, 'Please try logging in')
|
|
|
19 |
|
| 12722 |
amit.gupta |
20 |
privateDealUser = PrivateDealUser.get_by(id=user.userId)
|
| 11653 |
amit.gupta |
21 |
#email = user.email.lower().strip()
|
| 12722 |
amit.gupta |
22 |
|
|
|
23 |
|
|
|
24 |
|
| 11666 |
amit.gupta |
25 |
print "privateDealUser.isActive" + `privateDealUser.isActive`
|
| 11664 |
amit.gupta |
26 |
if privateDealUser is not None and privateDealUser.isActive:
|
| 12722 |
amit.gupta |
27 |
#Check if user have any order placed successfully
|
| 11665 |
amit.gupta |
28 |
if cart.lines is not None:
|
| 11653 |
amit.gupta |
29 |
discounts = []
|
|
|
30 |
itemIds = []
|
| 12739 |
amit.gupta |
31 |
[itemIds.append(firstLine.itemId) for firstLine in cart.lines]
|
| 11659 |
amit.gupta |
32 |
catalog_client = CatalogClient().get_client()
|
| 11660 |
amit.gupta |
33 |
privateDeals= catalog_client.getAllActivePrivateDeals(itemIds,0)
|
| 12739 |
amit.gupta |
34 |
if(len(privateDeals) != 0):
|
|
|
35 |
dealItems = privateDeals.keys()
|
|
|
36 |
total_discounts = 0
|
|
|
37 |
discountsMap = {}
|
|
|
38 |
for firstLine in cart.lines:
|
|
|
39 |
if firstLine.itemId in dealItems:
|
|
|
40 |
discountAmount = firstLine.actualPrice - privateDeals[firstLine.itemId].dealPrice
|
|
|
41 |
if discountAmount > 0:
|
|
|
42 |
discount = Discount()
|
|
|
43 |
discount.cart_id = cart.id
|
|
|
44 |
discount.item_id = firstLine.itemId
|
|
|
45 |
discount.quantity = firstLine.quantity
|
|
|
46 |
discount.discount = discountAmount
|
|
|
47 |
discounts.append(discount)
|
|
|
48 |
discountsMap[firstLine.itemId] = discount
|
|
|
49 |
total_discounts = total_discounts + discountAmount*firstLine.quantity
|
|
|
50 |
if privateDeals[firstLine.itemId].dealTextOption==0:
|
|
|
51 |
firstLine.dealText = ''
|
|
|
52 |
cart.message = 'Offer on deal is changed/removed'
|
|
|
53 |
if privateDeals[firstLine.itemId].dealTextOption==2:
|
|
|
54 |
firstLine.dealText = privateDeals[firstLine.itemId].dealText
|
|
|
55 |
cart.message = 'Offer on deal is changed/removed'
|
|
|
56 |
|
|
|
57 |
if privateDeals[firstLine.itemId].dealFreebieOption==0:
|
|
|
58 |
firstLine.freebieId = 0
|
|
|
59 |
if privateDeals[firstLine.itemId].dealFreebieOption==2:
|
|
|
60 |
firstLine.freebieId = privateDeals[firstLine.itemId].dealFreebieItemId
|
|
|
61 |
cart.discountedPrice = cart.totalPrice - round(total_discounts, 0)
|
| 12743 |
amit.gupta |
62 |
if cart.discountedPrice >= 1999:
|
| 12739 |
amit.gupta |
63 |
counter = privateDealUser.counter
|
|
|
64 |
if counter is not None:
|
|
|
65 |
if datetime.datetime.now() - counter.createdOn < datetime.timedelta(30) and counter.lastPurchasedOn is None:
|
|
|
66 |
firstLine = cart.lines[0]
|
|
|
67 |
if discountsMap.has_key(firstLine.itemId):
|
|
|
68 |
discount1 = discountsMap[firstLine.itemId]
|
|
|
69 |
else:
|
|
|
70 |
discount1 = Discount()
|
|
|
71 |
discount1.cart_id = cart.id
|
|
|
72 |
discount1.item_id = firstLine.itemId
|
|
|
73 |
discount1.quantity = firstLine.quantity
|
|
|
74 |
discount1.discount = 0
|
|
|
75 |
discounts.append(discount1)
|
|
|
76 |
discount1.discount += round(200/discount1.quantity, 0)
|
|
|
77 |
cart.discountedPrice -= round(200/discount1.quantity, 0)*discount1.quantity
|
|
|
78 |
else:
|
| 12790 |
amit.gupta |
79 |
counter = privateDealUser.counter
|
|
|
80 |
if cart.totalPrice >= 1999 and counter is not None and datetime.datetime.now() - counter.createdOn < datetime.timedelta(30) and counter.lastPurchasedOn is None:
|
|
|
81 |
firstLine = cart.lines[0]
|
|
|
82 |
discount1 = Discount()
|
|
|
83 |
discount1.cart_id = cart.id
|
|
|
84 |
discount1.item_id = firstLine.itemId
|
|
|
85 |
discount1.quantity = firstLine.quantity
|
|
|
86 |
discount1.discount = 0
|
|
|
87 |
discount1.discount += round(200/discount1.quantity, 0)
|
|
|
88 |
discounts.append(discount1)
|
|
|
89 |
cart.discountedPrice = cart.totalPrice - discount1.discount*discount1.quantity
|
| 12739 |
amit.gupta |
90 |
else:
|
|
|
91 |
raise PromotionException(115, 'None of the products have valid Private Deal')
|
| 11653 |
amit.gupta |
92 |
|
|
|
93 |
return cart, discounts
|
| 11663 |
amit.gupta |
94 |
else:
|
|
|
95 |
raise PromotionException(115, 'Invalid Coupon code')
|
|
|
96 |
|