Rev 12743 | Blame | Compare with Previous | Last modification | View Log | RSS feed
'''Created on 06-Dec-2011@author: varungupta'''from shop2020.clients.CatalogClient import CatalogClientfrom shop2020.clients.UserClient import UserClientfrom shop2020.model.v1.user.impl.Dataservice import PrivateDealUserfrom shop2020.thriftpy.model.v1.user.ttypes import PromotionException, Discountimport datetimedef execute(cart, coupon_code, args):user_client = UserClient().get_client()user = user_client.getUserByCartId(cart.id)if user.isAnonymous:raise PromotionException(115, 'Please try logging in')privateDealUser = PrivateDealUser.get_by(id=user.userId)#email = user.email.lower().strip()print "privateDealUser.isActive" + `privateDealUser.isActive`if privateDealUser is not None and privateDealUser.isActive:#Check if user have any order placed successfullyif cart.lines is not None:discounts = []itemIds = [][itemIds.append(firstLine.itemId) for firstLine in cart.lines]catalog_client = CatalogClient().get_client()privateDeals= catalog_client.getAllActivePrivateDeals(itemIds,0)if(len(privateDeals) != 0):dealItems = privateDeals.keys()total_discounts = 0discountsMap = {}for firstLine in cart.lines:if firstLine.itemId in dealItems:discountAmount = firstLine.actualPrice - privateDeals[firstLine.itemId].dealPriceif discountAmount > 0:discount = Discount()discount.cart_id = cart.iddiscount.item_id = firstLine.itemIddiscount.quantity = firstLine.quantitydiscount.discount = discountAmountdiscounts.append(discount)discountsMap[firstLine.itemId] = discounttotal_discounts = total_discounts + discountAmount*firstLine.quantityif privateDeals[firstLine.itemId].dealTextOption==0:firstLine.dealText = ''cart.message = 'Offer on deal is changed/removed'if privateDeals[firstLine.itemId].dealTextOption==2:firstLine.dealText = privateDeals[firstLine.itemId].dealTextcart.message = 'Offer on deal is changed/removed'if privateDeals[firstLine.itemId].dealFreebieOption==0:firstLine.freebieId = 0if privateDeals[firstLine.itemId].dealFreebieOption==2:firstLine.freebieId = privateDeals[firstLine.itemId].dealFreebieItemIdcart.discountedPrice = cart.totalPrice - round(total_discounts, 0)if cart.discountedPrice >= 1999:counter = privateDealUser.counterif counter is not None:if datetime.datetime.now() - counter.createdOn < datetime.timedelta(30) and counter.lastPurchasedOn is None:firstLine = cart.lines[0]if discountsMap.has_key(firstLine.itemId):discount1 = discountsMap[firstLine.itemId]else:discount1 = Discount()discount1.cart_id = cart.iddiscount1.item_id = firstLine.itemIddiscount1.quantity = firstLine.quantitydiscount1.discount = 0discounts.append(discount1)discount1.discount += round(200/discount1.quantity, 0)cart.discountedPrice -= round(200/discount1.quantity, 0)*discount1.quantityelse:counter = privateDealUser.counterif cart.totalPrice >= 1999 and counter is not None and datetime.datetime.now() - counter.createdOn < datetime.timedelta(30) and counter.lastPurchasedOn is None:firstLine = cart.lines[0]discount1 = Discount()discount1.cart_id = cart.iddiscount1.item_id = firstLine.itemIddiscount1.quantity = firstLine.quantitydiscount1.discount = 0discount1.discount += round(200/discount1.quantity, 0)discounts.append(discount1)cart.discountedPrice = cart.totalPrice - discount1.discount*discount1.quantityelse:raise PromotionException(115, 'None of the products have valid Private Deal')return cart, discountselse:raise PromotionException(115, 'Invalid Coupon code')