Subversion Repositories SmartDukaan

Rev

Rev 19144 | Rev 19211 | 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:
19194 kshitij.so 462
        print "Starting populating stuff ", datetime.now()
14263 kshitij.so 463
        populateStuff()
19194 kshitij.so 464
        print "Starting calculate nlc stuff ", datetime.now()
14263 kshitij.so 465
        calculateNlc()
19194 kshitij.so 466
        print "Starting adding manualdeals stuff ", datetime.now()
14306 kshitij.so 467
        addManualDealsInfo()
14263 kshitij.so 468
    finally:
469
        session.close()
19194 kshitij.so 470
    print "Starting calculate nlc points ", datetime.now()
13755 kshitij.so 471
    calculateNlcPoints()
19194 kshitij.so 472
    print "commiting data ", datetime.now()
13755 kshitij.so 473
    commitData()
19194 kshitij.so 474
    print "Populate deal points bundle ", datetime.now()
16868 kshitij.so 475
    populateDealPointsBundle()
19194 kshitij.so 476
    print "Add best seller points ", datetime.now()
13755 kshitij.so 477
    addBestSellerPoints()
19194 kshitij.so 478
    print "eliminate similar deals ", datetime.now()
16868 kshitij.so 479
    eliminateSimilarDeals()
19194 kshitij.so 480
    print "done ", datetime.now()
13755 kshitij.so 481
 
13828 kshitij.so 482
 
13755 kshitij.so 483
if __name__=='__main__':
14842 kshitij.so 484
    main()