Subversion Repositories SmartDukaan

Rev

Rev 18189 | Rev 19194 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
13755 kshitij.so 1
import pymongo
2
from elixir import *
3
from shop2020.model.v1.catalog.impl import DataService
4
from shop2020.model.v1.catalog.impl.DataService import Item
5
from shop2020.clients.InventoryClient import InventoryClient
19144 kshitij.so 6
from dtr.utils.utils import to_java_date, getCashBack
13755 kshitij.so 7
from datetime import datetime, timedelta
8
import time
14258 kshitij.so 9
import optparse
14325 kshitij.so 10
from dtr.storage.MemCache import MemCache
16635 manish.sha 11
import traceback
13755 kshitij.so 12
 
14258 kshitij.so 13
parser = optparse.OptionParser()
14263 kshitij.so 14
parser.add_option("-H", "--host", dest="hostname",
14258 kshitij.so 15
                      default="localhost",
16
                      type="string", help="The HOST where the DB server is running",
17
                      metavar="host")
18
parser.add_option("-m", "--m", dest="mongoHost",
19
                      default="localhost",
20
                      type="string", help="The HOST where the mongo server is running",
21
                      metavar="mongo_host")
13755 kshitij.so 22
 
14258 kshitij.so 23
(options, args) = parser.parse_args()
14325 kshitij.so 24
 
25
mc = MemCache(options.mongoHost)
26
 
14258 kshitij.so 27
DataService.initialize(db_hostname=options.hostname)
28
 
13755 kshitij.so 29
con = None
17034 kshitij.so 30
SOURCE_MAP = {'AMAZON':1,'FLIPKART':2,'SNAPDEAL':3,'SAHOLIC':4, 'SHOPCLUES.COM':5,'PAYTM.COM':6,'HOMESHOP18.COM':7}
13755 kshitij.so 31
DISCOUNT_TYPE = {'MRP':1,'DP':2}
32
LATEST_UPDATED_ITEMS = []
16253 kshitij.so 33
STATUS_WEIGHTAGE = {1 : 1.0, 2 : 2.0, 3 : 1.0, 4 : 0.5}
13755 kshitij.so 34
 
16868 kshitij.so 35
DEAL_POINTS_MAP = {}
36
 
13755 kshitij.so 37
now = datetime.now()
38
 
16868 kshitij.so 39
class __DealPoints:
40
 
41
    def __init__(self, manualDealThresholdPrice, points):
42
        self.manualDealThresholdPrice = manualDealThresholdPrice
43
        self.points = points
44
 
45
 
13755 kshitij.so 46
class __SkuInfo:
47
 
48
    def __init__(self, _id, skuBundleId, category_id, mrp, available_price, source_id, rank, maxNlc, minNlc, schemeAmount, minDiscount, \
16534 kshitij.so 49
                 maxDiscount, discountType, dp, nlcPoints, status, in_stock, maxprice, brand, dealType, brand_id, manualDealThresholdPrice,\
19144 kshitij.so 50
                 codAvailable,showDp,gross_price, subCategoryId,subCategory,shippingCost,netPriceAfterCashBack):
13755 kshitij.so 51
        self._id = _id
52
        self.skuBundleId = skuBundleId
53
        self.category_id = category_id
54
        self.mrp = mrp
55
        self.available_price = available_price
56
        self.source_id = source_id
57
        self.rank = rank
58
        self.maxNlc = maxNlc
59
        self.minNlc = minNlc
60
        self.schemeAmount = schemeAmount
61
        self.minDiscount = minDiscount
62
        self.maxDiscount = maxDiscount
63
        self.discountType = discountType
64
        self.dp = dp
65
        self.nlcPoints = nlcPoints
13824 kshitij.so 66
        self.status = status
67
        self.in_stock = in_stock
68
        self.maxprice = maxprice
14035 kshitij.so 69
        self.brand = brand
14306 kshitij.so 70
        self.dealType = dealType
15063 kshitij.so 71
        self.brand_id = brand_id
15271 kshitij.so 72
        self.manualDealThresholdPrice = manualDealThresholdPrice
16019 kshitij.so 73
        self.codAvailable = codAvailable
16253 kshitij.so 74
        self.showDp = showDp
16456 kshitij.so 75
        self.gross_price = gross_price
17649 kshitij.so 76
        self.subCategoryId = subCategoryId
17678 kshitij.so 77
        self.subCategory = subCategory
17713 kshitij.so 78
        self.shippingCost = shippingCost
19144 kshitij.so 79
        self.netPriceAfterCashBack = netPriceAfterCashBack
13755 kshitij.so 80
 
81
 
14258 kshitij.so 82
def get_mongo_connection(host=options.mongoHost, port=27017):
13755 kshitij.so 83
    global con
84
    if con is None:
85
        print "Establishing connection %s host and port %d" %(host,port)
86
        try:
87
            con = pymongo.MongoClient(host, port)
88
        except Exception, e:
89
            print e
90
            return None
91
    return con
92
 
93
def populateStuff():
94
    print "Inside populate"
95
    global LATEST_UPDATED_ITEMS
96
    """Fetch latest updated items across portals
97
       and calculate max and min R-Nlc"""
98
    offset= 0
99
    while(True):
100
        print "Fetching records offset %d and limit %d" %(offset,300)
18189 kshitij.so 101
        topSkus = list(get_mongo_connection().Catalog.MasterData.find( {"$and":[{'updatedOn': { "$gt": to_java_date(now - timedelta(hours=1))} }, { 'source_id' : { "$in": SOURCE_MAP.values() } }] }).skip(offset).limit(300))
13755 kshitij.so 102
        if len((topSkus)) == 0:
103
            break
104
        #topSkus = collection.find( {'_id':664})
105
        for sku in topSkus:
13908 kshitij.so 106
            """Fix this """
107
            #TODO Compute deal flags else where.
19144 kshitij.so 108
            if sku['source_id'] != SOURCE_MAP.get('PAYTM.COM'):
109
                netPriceAfterCashBack = getNetPriceForItem(sku['_id'], sku['source_id'], sku['category_id'], sku['available_price'])
110
            else:
111
                if sku['codAvailable'] ==0:
112
                    netPriceAfterCashBack = getNetPriceForItem(sku['_id'], sku['source_id'], sku['category_id'], sku['gross_price'])
113
                else:
114
                    netPriceAfterCashBack = getNetPriceForItem(sku['_id'], sku['source_id'], sku['category_id'], sku['available_price'])
115
 
13755 kshitij.so 116
            info = __SkuInfo(sku['_id'], sku['skuBundleId'], sku['category_id'], sku['mrp'], sku['available_price'], sku['source_id'], sku['rank'], None, None, 0.0, None, \
17678 kshitij.so 117
                             None, None, None, None, sku['status'], sku['in_stock'],sku['maxPrice'],sku['brand'].strip().upper(), 0, sku['brand_id'], None, sku['codAvailable'], 0, sku['gross_price'], sku['subCategoryId'], \
19144 kshitij.so 118
                             sku['subCategory'],sku['shippingCost'],netPriceAfterCashBack)
15854 kshitij.so 119
            exceptionalNlc = list(get_mongo_connection().Catalog.ExceptionalNlc.find( {"$and" : [ {'skuBundleId':info.skuBundleId}, {'overrideNlc':1} ]} ))
13755 kshitij.so 120
            if len(exceptionalNlc) > 0:
121
                """Exceptional nlc found, no need to calculate max and min R-nlc"""
122
                info.maxNlc = exceptionalNlc[0]['maxNlc']
123
                info.minNlc = exceptionalNlc[0]['minNlc']
14842 kshitij.so 124
                if info.maxprice == 0:
125
                    info.maxprice = exceptionalNlc[0]['maxNlc']
13755 kshitij.so 126
                LATEST_UPDATED_ITEMS.append(info)
127
                continue
128
 
15854 kshitij.so 129
            skuSchemeDetails = list(get_mongo_connection().Catalog.SkuSchemeDetails.find( {'skuBundleId':info.skuBundleId}))
13755 kshitij.so 130
            if len(skuSchemeDetails) > 0:
131
                """Sku scheme details, populate scheme amount (Recently added)"""
13824 kshitij.so 132
 
133
                #TODO Add start date and end date of scehems
134
 
13755 kshitij.so 135
                info.schemeAmount = float(skuSchemeDetails[0]['schemeAmount'])
136
 
15854 kshitij.so 137
            skuDealerPrices = list(get_mongo_connection().Catalog.SkuDealerPrices.find( {'skuBundleId':info.skuBundleId} ) )
13755 kshitij.so 138
            if len(skuDealerPrices) > 0:
139
                info.dp = skuDealerPrices[0]['dp']
16253 kshitij.so 140
                info.showDp = skuDealerPrices[0]['showDp']
15854 kshitij.so 141
            skuDiscount = list(get_mongo_connection().Catalog.SkuDiscountInfo.find( {'skuBundleId':info.skuBundleId} ) )
13755 kshitij.so 142
            if len(skuDiscount) > 0:
143
                """Sku rule found, populate max , min Discount and discount type"""
144
                info.maxDiscount = skuDiscount[0]['max_discount']
145
                info.minDiscount = skuDiscount[0]['min_discount']
146
                info.discountType = DISCOUNT_TYPE.get(skuDiscount[0]['discountType'].upper())
147
                LATEST_UPDATED_ITEMS.append(info)
148
                continue
149
 
14035 kshitij.so 150
            categoryDiscount = list(get_mongo_connection().Catalog.CategoryDiscount.find( {"$and" : [{'brand':sku['brand'].strip().upper()}, {'category_id':sku['category_id']} ]} ))
13755 kshitij.so 151
            if len(categoryDiscount) > 0:
152
                info.maxDiscount = categoryDiscount[0]['max_discount']
153
                info.minDiscount = categoryDiscount[0]['min_discount']
154
                info.discountType = DISCOUNT_TYPE.get(categoryDiscount[0]['discountType'].upper())
155
 
156
            LATEST_UPDATED_ITEMS.append(info)
157
        offset = offset + 300
158
    for lol in LATEST_UPDATED_ITEMS:
159
        print lol.__dict__
160
 
161
 
162
def calculateNlc():
163
    global LATEST_UPDATED_ITEMS
164
    populated = 0
165
    while(populated <= len(LATEST_UPDATED_ITEMS)):
166
        inventory_client = InventoryClient().get_client()
167
        for obj in LATEST_UPDATED_ITEMS[populated:300+populated]:
168
            if obj.maxNlc > 0 and obj.minNlc > 0:
169
                continue
170
            saholic_sku = list(get_mongo_connection().Catalog.MasterData.find( {"$and":[{'skuBundleId': obj.skuBundleId}, { 'source_id' : SOURCE_MAP.get('SAHOLIC')}] }))
171
            identifier = None
172
            if len(saholic_sku) > 0:
173
                identifier = saholic_sku[0]['identifier']
174
            if obj.discountType == DISCOUNT_TYPE.get('MRP'):
175
                if obj.mrp == 0:
176
                    """Now mrp is zero, so we have to use saholic MRP"""
177
                    if identifier is not None:
178
                        it = Item.query.filter_by(catalog_item_id=identifier).first()
179
                        obj.mrp = it.mrp
180
                if obj.mrp > 0:
14842 kshitij.so 181
                    print obj._id
13755 kshitij.so 182
                    obj.minNlc = obj.mrp - (obj.mrp * obj.maxDiscount/100) - obj.schemeAmount
13824 kshitij.so 183
                    obj.maxNlc = obj.mrp - (obj.mrp * obj.minDiscount/100) - obj.schemeAmount
14842 kshitij.so 184
                    if obj.maxprice == 0:
185
                        obj.maxprice = obj.maxNlc  
13755 kshitij.so 186
            elif obj.discountType == DISCOUNT_TYPE.get('DP'):
187
                if obj.dp == 0:
188
                    """Now dp is zero, so we have to use saholic minimum dp for item"""
189
                    if identifier is not None:
190
                        it = Item.query.filter_by(catalog_item_id=identifier).first()
191
                        try:
192
                            vendorPricing = inventory_client.getAllItemPricing(it.id)
193
                            min_dp = min(pricing.dealerPrice for pricing in vendorPricing)
194
                            obj.dp = min_dp 
16253 kshitij.so 195
                            obj.showDp = 1
13755 kshitij.so 196
                        except:
197
                            pass
198
                if obj.dp > 0:
199
                    obj.minNlc = obj.dp - (obj.dp * obj.maxDiscount/100) - obj.schemeAmount
13824 kshitij.so 200
                    obj.maxNlc = obj.dp - (obj.dp * obj.minDiscount/100) - obj.schemeAmount
14842 kshitij.so 201
                    if obj.maxprice == 0:
202
                        obj.maxprice = obj.maxNlc  
13755 kshitij.so 203
            else:
204
                """No rule found, use saholic min nlc as max and min R-Nlc"""
205
                if identifier is not None:
206
                    it = Item.query.filter_by(catalog_item_id=identifier).first()
207
                    try:
208
                        vendorPricing = inventory_client.getAllItemPricing(it.id)
209
                        min_nlc = min(pricing.nlc for pricing in vendorPricing)
210
                        obj.maxNlc = min_nlc
13824 kshitij.so 211
                        obj.minNlc = min_nlc
14842 kshitij.so 212
                        if obj.maxprice == 0:
213
                            obj.maxprice = obj.maxNlc   
13755 kshitij.so 214
                    except:
215
                        pass
216
        populated = populated + 300
217
        time.sleep(10) 
218
 
14306 kshitij.so 219
def addManualDealsInfo():
220
    for sku in LATEST_UPDATED_ITEMS:
221
        manualDeal = list(get_mongo_connection().Catalog.ManualDeals.find({'startDate':{'$lte':to_java_date(datetime.now())},'endDate':{'$gte':to_java_date(datetime.now())},'source_id':sku.source_id, 'sku':sku._id}))
222
        if len(manualDeal) > 0:
223
            sku.dealType = manualDeal[0]['dealType']
14310 kshitij.so 224
 
225
    """Remove deal flag from expired deals"""
14311 kshitij.so 226
    manualDeals = list(get_mongo_connection().Catalog.Deals.find({'dealType':1}))
14310 kshitij.so 227
    for manualDeal in manualDeals:
14389 kshitij.so 228
        d_manualDeal = list(get_mongo_connection().Catalog.ManualDeals.find({'startDate':{'$lte':to_java_date(datetime.now())},'endDate':{'$gte':to_java_date(datetime.now())},'source_id':manualDeal['source_id'], 'sku':manualDeal['_id']}))
229
        if len(d_manualDeal) > 0:
14310 kshitij.so 230
            continue
231
        else:
16507 kshitij.so 232
            get_mongo_connection().Catalog.Deals.update({'_id':manualDeal['_id']},{"$set":{'dealType':0}},upsert=False, multi=False)
14306 kshitij.so 233
 
13755 kshitij.so 234
def calculateNlcPoints():
235
    global LATEST_UPDATED_ITEMS
14842 kshitij.so 236
    print "inside nlc oints"
13755 kshitij.so 237
    for sku in LATEST_UPDATED_ITEMS:
238
        if sku.maxNlc and sku.minNlc:
14842 kshitij.so 239
            print sku._id
13824 kshitij.so 240
 
241
            """Create map - TODO"""
242
 
243
            if sku.status == 2:
244
                eolWeight = .60
245
            else:
246
                eolWeight = 1.0
247
            if sku.category_id == 3:
248
                basePointPercentage = 5.0
249
                maxNlcPoints = 200
250
            elif sku.category_id == 5:
251
                basePointPercentage = 8.0
252
                maxNlcPoints = 150
17540 kshitij.so 253
            elif sku.category_id == 6:
254
                basePointPercentage = 5.0
255
                maxNlcPoints = 200
256
 
13824 kshitij.so 257
            else:
258
                basePointPercentage = 10.0
259
                maxNlcPoints = 150
14842 kshitij.so 260
            discFromMinNlc = float((sku.minNlc - sku.available_price))/sku.available_price *100
261
            discFromMaxNlc = float((sku.maxNlc - sku.available_price))/sku.available_price *100
262
            print discFromMinNlc
263
            print discFromMaxNlc
13755 kshitij.so 264
            if discFromMinNlc > 0:
13824 kshitij.so 265
                nlcPoints = 100/basePointPercentage * discFromMinNlc
13755 kshitij.so 266
            elif discFromMinNlc < 0 and discFromMaxNlc > 0:
267
                nlcPoints = 0
268
            else:
13824 kshitij.so 269
                nlcPoints = 100/basePointPercentage * discFromMinNlc
270
            if (min(nlcPoints,maxNlcPoints)) > 0:
271
                sku.nlcPoints = (min(nlcPoints,maxNlcPoints)) * eolWeight
272
            else:
273
                sku.nlcPoints = (min(nlcPoints,maxNlcPoints))
13755 kshitij.so 274
        else:
275
            sku.nlcPoints = 0
276
 
277
def commitData():
278
    global LATEST_UPDATED_ITEMS
279
    for sku in LATEST_UPDATED_ITEMS:
280
        #get_mongo_connection().Catalog.Deals.update({'_id':sku._id},{'$set' : sku.__dict__},upsert=True,multi=True)
14020 amit.gupta 281
        get_mongo_connection().Catalog.Deals.update({'_id':sku._id},{"$set":sku.__dict__},upsert=True)
13755 kshitij.so 282
 
283
 
284
def addBestSellerPoints():
285
    allItems = list(get_mongo_connection().Catalog.Deals.find({})) 
286
    for sku in allItems:
13824 kshitij.so 287
        bestSellerPoints = list(get_mongo_connection().Catalog.BestSellerPoints.find( {"$and":[{'min_rank': { "$lte": sku['rank'] } }, {'max_rank': { "$gte": sku['rank'] } } , { 'category_id' : sku['category_id'] }, { 'source_id' : sku['source_id'] }] } ))
13755 kshitij.so 288
        if len(bestSellerPoints) > 0:
13824 kshitij.so 289
            print bestSellerPoints[0]['points']
290
            if (bestSellerPoints[0]['points']) > 0:
16253 kshitij.so 291
                sku['bestSellerPoints'] = (bestSellerPoints[0]['points']) * bestSellerPoints[0]['weightage'] * STATUS_WEIGHTAGE.get(sku['status'])
13824 kshitij.so 292
            else:
293
                sku['bestSellerPoints'] = (bestSellerPoints[0]['points'])
13755 kshitij.so 294
        else:
17708 kshitij.so 295
            if sku['category_id'] == 6:
17763 kshitij.so 296
                sku['bestSellerPoints'] = 0
17708 kshitij.so 297
            else:
298
                sku['bestSellerPoints'] = -120
14114 kshitij.so 299
        #sku['totalPoints'] = sku['bestSellerPoints'] + sku['nlcPoints']
300
        get_mongo_connection().Catalog.Deals.update({'_id':sku['_id']},{'$set':{'bestSellerPoints':sku['bestSellerPoints']}},multi=False)
301
 
14390 kshitij.so 302
    shortageSkus = get_mongo_connection().Catalog.MasterData.find({"$and":[{'is_shortage': 1 }, { 'source_id' : { "$in": SOURCE_MAP.values() } }] }).distinct('_id')
303
    print "Shortage skus"
304
    print shortageSkus
14388 kshitij.so 305
 
14114 kshitij.so 306
    for sku in allItems:
307
        deal_item = list(get_mongo_connection().Catalog.Deals.find({'skuBundleId':sku['skuBundleId']}).sort('bestSellerPoints',pymongo.DESCENDING).limit(1))
14142 kshitij.so 308
        sku['catalogBestSellerPoints'] = deal_item[0]['bestSellerPoints']
14388 kshitij.so 309
        shortagePoints = 50 if sku['_id'] in shortageSkus else 0
14391 kshitij.so 310
        print "Shortage points for ",sku['_id']
311
        print shortagePoints
16868 kshitij.so 312
 
313
        dealPoints = DEAL_POINTS_MAP.get(sku['skuBundleId'])
314
 
315
        if dealPoints is not None and dealPoints.manualDealThresholdPrice >= sku['available_price']:
316
            sku['dealPoints'] = dealPoints.points
317
            sku['manualDealThresholdPrice'] = dealPoints.manualDealThresholdPrice
318
        else:
319
            sku['dealPoints'] = 0
320
            sku['manualDealThresholdPrice'] = None
321
 
322
 
323
        sku['totalPoints'] = sku['catalogBestSellerPoints'] + sku['nlcPoints'] + shortagePoints + sku['dealPoints'] 
324
        get_mongo_connection().Catalog.Deals.update({'_id':sku['_id']},{'$set':{'catalogBestSellerPoints':sku['catalogBestSellerPoints'],'totalPoints':sku['totalPoints'],'dealPoints':sku['dealPoints'], \
325
                                                                                    'manualDealThresholdPrice':sku['manualDealThresholdPrice']}},multi=False)
15271 kshitij.so 326
 
327
 
13755 kshitij.so 328
 
14325 kshitij.so 329
def populateNegativeDeals():
330
    negativeDeals = get_mongo_connection().Catalog.NegativeDeals.find().distinct('sku')
331
    mc.set("negative_deals", negativeDeals, 600)   
332
 
16868 kshitij.so 333
def eliminateSimilarDeals():
13912 kshitij.so 334
    allItems = get_mongo_connection().Catalog.Deals.find().distinct('skuBundleId')
335
    for skuBundleId in allItems:
336
        print skuBundleId
19144 kshitij.so 337
        similarItems = list(get_mongo_connection().Catalog.Deals.find({'skuBundleId':skuBundleId}).sort([('netPriceAfterCashBack',pymongo.ASCENDING)]))
13828 kshitij.so 338
        bestPrice = float("inf")
339
        bestOne = None
340
        bestSellerPoints = 0
341
        toUpdate = []
16019 kshitij.so 342
        prepaidBestPrice = float("inf")
343
        prepaidBestOne = None
344
        prepaidBestSellerPoints = 0
13828 kshitij.so 345
        for similarItem in similarItems:
16019 kshitij.so 346
            if similarItem['codAvailable'] ==1:
347
                if mc.get("negative_deals") is None:
348
                    populateNegativeDeals()
16171 kshitij.so 349
                if similarItem['in_stock'] == 0  or similarItem['_id'] in mc.get("negative_deals"):
16019 kshitij.so 350
                    get_mongo_connection().Catalog.Deals.update({ '_id' : similarItem['_id'] }, {'$set':{'showDeal':0, 'prepaidDeal':0 }})
351
                    continue
17675 kshitij.so 352
                if similarItem['source_id'] == SOURCE_MAP.get('SHOPCLUES.COM') and similarItem['rank']==0 and similarItem['category_id']!=6:
16019 kshitij.so 353
                    get_mongo_connection().Catalog.Deals.update({ '_id' : similarItem['_id'] }, {'$set':{'showDeal':0,'prepaidDeal':0 }})
354
                    continue
19144 kshitij.so 355
                if similarItem['netPriceAfterCashBack'] < bestPrice:
16019 kshitij.so 356
                    bestOne = similarItem
19144 kshitij.so 357
                    bestPrice = similarItem['netPriceAfterCashBack']
16019 kshitij.so 358
                    bestSellerPoints = similarItem['bestSellerPoints']
19144 kshitij.so 359
                elif similarItem['netPriceAfterCashBack'] == bestPrice and bestSellerPoints < similarItem['bestSellerPoints']:
16019 kshitij.so 360
                    bestOne = similarItem
19144 kshitij.so 361
                    bestPrice = similarItem['netPriceAfterCashBack']
16019 kshitij.so 362
                    bestSellerPoints = similarItem['bestSellerPoints']
363
                else:
364
                    pass
13828 kshitij.so 365
            else:
16019 kshitij.so 366
                if mc.get("negative_deals") is None:
367
                    populateNegativeDeals()
16171 kshitij.so 368
                if similarItem['in_stock'] == 0  or similarItem['_id'] in mc.get("negative_deals"):
16019 kshitij.so 369
                    get_mongo_connection().Catalog.Deals.update({ '_id' : similarItem['_id'] }, {'$set':{'showDeal':0, 'prepaidDeal':0 }})
370
                    continue
17750 kshitij.so 371
                if similarItem['source_id'] == SOURCE_MAP.get('SHOPCLUES.COM') and similarItem['rank']==0 and similarItem['category_id']!=6:
16019 kshitij.so 372
                    get_mongo_connection().Catalog.Deals.update({ '_id' : similarItem['_id'] }, {'$set':{'showDeal':0,'prepaidDeal':0 }})
373
                    continue
19144 kshitij.so 374
                if similarItem['netPriceAfterCashBack'] < prepaidBestPrice:
16019 kshitij.so 375
                    prepaidBestOne = similarItem
19144 kshitij.so 376
                    prepaidBestPrice = similarItem['netPriceAfterCashBack']
16019 kshitij.so 377
                    prepaidBestSellerPoints = similarItem['bestSellerPoints']
19144 kshitij.so 378
                elif similarItem['netPriceAfterCashBack'] == prepaidBestPrice and prepaidBestSellerPoints < similarItem['bestSellerPoints']:
16019 kshitij.so 379
                    prepaidBestOne = similarItem
19144 kshitij.so 380
                    prepaidBestPrice = similarItem['netPriceAfterCashBack']
16019 kshitij.so 381
                    prepaidBestSellerPoints = similarItem['bestSellerPoints']
382
                else:
383
                    pass
16026 kshitij.so 384
        if bestOne is not None or prepaidBestOne is not None:
13828 kshitij.so 385
            for similarItem in similarItems:
386
                toUpdate.append(similarItem['_id'])
16026 kshitij.so 387
            if bestOne is not None:
388
                toUpdate.remove(bestOne['_id'])
389
                get_mongo_connection().Catalog.Deals.update({ '_id' : bestOne['_id'] }, {'$set':{'showDeal':1,'prepaidDeal':0 }})
390
            if prepaidBestOne is not None:
16071 kshitij.so 391
                if bestOne is not None:
19144 kshitij.so 392
                    if prepaidBestOne['netPriceAfterCashBack'] < bestOne['netPriceAfterCashBack']: 
16071 kshitij.so 393
                        toUpdate.remove(prepaidBestOne['_id'])
394
                        get_mongo_connection().Catalog.Deals.update({ '_id' : prepaidBestOne['_id'] }, {'$set':{'showDeal':0,'prepaidDeal':1 }})
395
                else:
396
                    toUpdate.remove(prepaidBestOne['_id'])
397
                    get_mongo_connection().Catalog.Deals.update({ '_id' : prepaidBestOne['_id'] }, {'$set':{'showDeal':0,'prepaidDeal':1 }})
13828 kshitij.so 398
        if len(toUpdate) > 0:
16019 kshitij.so 399
            get_mongo_connection().Catalog.Deals.update({ '_id' : { "$in": toUpdate } }, {'$set':{'showDeal':0,'prepaidDeal':0 }},upsert=False, multi=True)
13755 kshitij.so 400
 
16868 kshitij.so 401
def populateDealPointsBundle():
402
    global DEAL_POINTS_MAP
403
    activeDealPoints = get_mongo_connection().Catalog.DealPoints.find({'startDate':{'$lte':to_java_date(datetime.now())},'endDate':{'$gte':to_java_date(datetime.now())}})
404
    for activeDeal in activeDealPoints:
405
        dealPoints = __DealPoints(activeDeal['dealThresholdPrice'], activeDeal['dealPoints'])
19144 kshitij.so 406
        DEAL_POINTS_MAP[activeDeal['skuBundleId']] = dealPoints
16868 kshitij.so 407
 
19144 kshitij.so 408
def getNetPriceForItem(itemId, source_id, category_id ,price):
409
    cash_back_type = 0
410
    cash_back = 0
411
    try:
412
        cashBack = getCashBack(itemId, source_id, category_id, mc, options.mongoHost)
413
        if not cashBack or cashBack.get('cash_back_status')!=1:
414
            cash_back_type = 0
415
            cash_back = 0 
416
 
417
        else:
418
            if cashBack['cash_back_type'] in (1,2):
419
 
420
                if cashBack.get('maxCashBack') is not None:
421
 
422
                    if cashBack.get('cash_back_type') ==1 and (float(cashBack.get('cash_back'))*price)/100 > cashBack.get('maxCashBack'):
423
                        cashBack['cash_back_type'] = 2
424
                        cashBack['cash_back'] = cashBack['maxCashBack']
425
                    elif cashBack.get('cash_back_type') ==2 and cashBack.get('cash_back') > cashBack.get('maxCashBack'):
426
                        cashBack['cash_back'] = cashBack['maxCashBack']
427
                    else:
428
                        pass
429
 
430
 
431
 
432
                cash_back_type = cashBack['cash_back_type']
433
                cash_back = float(cashBack['cash_back'])
434
    except Exception as cashBackEx:
435
        pass
436
 
437
    if cash_back_type ==1:
438
        return (price - float(cash_back)*price/100)
439
    elif cash_back_type ==2:
440
        return (price - cash_back)
441
    else:
442
        return price
443
 
444
 
445
 
446
# def calculateNetPriceAfterCashback():
447
#     for data in LATEST_UPDATED_ITEMS:
448
#         master = list(get_mongo_connection().Catalog.MasterData.find({'_id':data._id}))
449
#         if master[0]['source_id'] != SOURCE_MAP.get('PAYTM.COM'):
450
#             netPriceAfterCashBack = getNetPriceForItem(data._id, master[0]['source_id'], master[0]['category_id'], master[0]['available_price'])
451
#             get_mongo_connection().Catalog.Deals.update({'_id':data._id},{"$set":{'available_price':master[0]['available_price'],'in_stock':master[0]['in_stock'],'netPriceAfterCashBack':netPriceAfterCashBack}})
452
#         else:
453
#             if master[0]['codAvailable'] ==0:
454
#                 netPriceAfterCashBack = getNetPriceForItem(data._id, master[0]['source_id'], master[0]['category_id'], master[0]['gross_price'])
455
#             else:
456
#                 netPriceAfterCashBack = getNetPriceForItem(data._id, master[0]['source_id'], master[0]['category_id'], master[0]['available_price'])
457
#             get_mongo_connection().Catalog.Deals.update({'_id':data._id},{"$set":{'available_price':master[0]['available_price'],'gross_price':master[0]['gross_price'],'in_stock':master[0]['in_stock'],'netPriceAfterCashBack':netPriceAfterCashBack}})
458
#         
459
 
13755 kshitij.so 460
def main():
14263 kshitij.so 461
    try:
462
        populateStuff()
463
        calculateNlc()
14306 kshitij.so 464
        addManualDealsInfo()
14263 kshitij.so 465
    finally:
466
        session.close()
13755 kshitij.so 467
    calculateNlcPoints()
468
    commitData()
16868 kshitij.so 469
    populateDealPointsBundle()
13755 kshitij.so 470
    addBestSellerPoints()
16868 kshitij.so 471
    eliminateSimilarDeals()
13755 kshitij.so 472
 
13828 kshitij.so 473
 
13755 kshitij.so 474
if __name__=='__main__':
14842 kshitij.so 475
    main()