Subversion Repositories SmartDukaan

Rev

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