Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
13829 kshitij.so 1
import urllib2
2
import simplejson as json
3
import pymongo
20347 kshitij.so 4
from dtr.utils.utils import to_java_date, getNlcPoints, transformUrl, DEAL_PRIORITY
13918 kshitij.so 5
from datetime import datetime, timedelta
13829 kshitij.so 6
from operator import itemgetter
20313 kshitij.so 7
from shop2020.model.v1.catalog.script import AmazonAsyncScraper
16410 kshitij.so 8
from dtr.utils import FlipkartScraper,NewFlipkartScraper, ShopCluesScraper, \
17013 manish.sha 9
PaytmOfferScraper, PaytmScraper, HomeShop18Scraper
14324 kshitij.so 10
from dtr.storage.MemCache import MemCache
14334 kshitij.so 11
from functools import partial
12
import threading
14760 kshitij.so 13
from dtr.utils.utils import getCashBack
14794 kshitij.so 14
import traceback
15174 kshitij.so 15
from shop2020.config.client.ConfigClient import ConfigClient
16065 kshitij.so 16
import chardet
16415 kshitij.so 17
from dtr.CouponMaster import addToPaytmMaster
19210 kshitij.so 18
from math import floor
13829 kshitij.so 19
 
15174 kshitij.so 20
config_client = ConfigClient()
21
host_memCache = config_client.get_property('mem_cache_host_dtr')
22
host = config_client.get_property('mongo_dtr_host')
14324 kshitij.so 23
 
18722 kshitij.so 24
saholicPricingHost = config_client.get_property('dtr_pricing_host')
25
 
15174 kshitij.so 26
mc = MemCache(host_memCache)
27
 
28
 
15902 kshitij.so 29
con  = None
17043 kshitij.so 30
SOURCE_MAP = {'AMAZON':1,'FLIPKART':2,'SNAPDEAL':3,'SAHOLIC':4, 'SHOPCLUES.COM':5,'PAYTM.COM':6,'HOMESHOP18':7}
13829 kshitij.so 31
 
32
headers = { 
33
           'User-agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11',
34
            'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',      
35
            'Accept-Language' : 'en-US,en;q=0.8',                     
36
            'Accept-Charset' : 'ISO-8859-1,utf-8;q=0.7,*;q=0.3'
37
        }
38
 
20313 kshitij.so 39
amScraper = AmazonAsyncScraper.Products("AKIAII3SGRXBJDPCHSGQ", "B92xTbNBTYygbGs98w01nFQUhbec1pNCkCsKVfpg", "AF6E3O0VE0X4D")
40
marketplaceId = 'A21TJRUUN4KGV'
15608 kshitij.so 41
 
15174 kshitij.so 42
def get_mongo_connection(port=27017):
13829 kshitij.so 43
    global con
44
    if con is None:
45
        print "Establishing connection %s host and port %d" %(host,port)
46
        try:
47
            con = pymongo.MongoClient(host, port)
48
        except Exception, e:
49
            print e
50
            return None
51
    return con
52
 
19153 kshitij.so 53
def calculateCashBack(data, inputPrice):
54
    try:
55
        cashBack = getCashBack(data['_id'], data['source_id'], data['category_id'], mc, 'localhost')
56
        print "CashBack is ",cashBack
57
        if not cashBack or cashBack.get('cash_back_status')!=1:
58
            data['cash_back_type'] = 0
59
            data['cash_back'] = 0
60
        else:
61
            if cashBack['cash_back_type'] in (1,2):
62
 
63
                if cashBack.get('maxCashBack') is not None:
64
 
65
                    if cashBack.get('cash_back_type') ==1 and (float(cashBack.get('cash_back'))*data['available_price'])/100 > cashBack.get('maxCashBack'):
66
                        cashBack['cash_back_type'] = 2
67
                        cashBack['cash_back'] = cashBack['maxCashBack']
68
                    elif cashBack.get('cash_back_type') ==2 and cashBack.get('cash_back') > cashBack.get('maxCashBack'):
69
                        cashBack['cash_back'] = cashBack['maxCashBack']
70
                    else:
71
                        pass
72
 
73
                data['cash_back_type'] = cashBack['cash_back_type']
74
                data['cash_back'] = float(cashBack['cash_back'])
75
            else:
76
                data['cash_back_type'] = 0
77
                data['cash_back'] = 0
78
    except Exception as cashBackEx:
79
        traceback.print_exc()
80
        print "Error calculating cashback."
81
        data['cash_back_type'] = 0
82
        data['cash_back'] = 0
83
 
84
    if data['cash_back_type'] == 1:
19210 kshitij.so 85
        data['netPriceAfterCashBack'] = inputPrice - floor(float(inputPrice)*data['cash_back']/100)
19153 kshitij.so 86
    elif data['cash_back_type'] == 2:
87
        data['netPriceAfterCashBack'] = inputPrice - data['cash_back']
88
    else:
89
        data['netPriceAfterCashBack'] = inputPrice
90
 
91
    return data
92
 
14828 kshitij.so 93
def returnLatestPrice(data, source_id, ignoreLastUpdated = True):
13918 kshitij.so 94
    now = datetime.now()
13829 kshitij.so 95
    if source_id == 1:
96
        try:
20313 kshitij.so 97
            if data['identifier'] is None or len(data['identifier'].strip()) !=10:
13829 kshitij.so 98
                return {}
13918 kshitij.so 99
 
19153 kshitij.so 100
            if data['dealFlag'] ==1 and data['dealType'] ==1:
101
                data['marketPlaceUrl'] = data['dealUrl'].strip()
102
 
103
 
16500 kshitij.so 104
            if data.get('ignorePricing') ==1:
16117 kshitij.so 105
                return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':1,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
15615 kshitij.so 106
 
13918 kshitij.so 107
            try:
14828 kshitij.so 108
                if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
13918 kshitij.so 109
                    print "sku id is already updated",data['_id'] 
16117 kshitij.so 110
                    return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':1,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
13918 kshitij.so 111
            except:
112
                pass
113
 
114
 
13829 kshitij.so 115
            lowestPrice = 0.0
20313 kshitij.so 116
            asinPricingMap = amScraper.get_competitive_pricing_for_asin(marketplaceId, [data['identifier'].strip().upper()])
20314 kshitij.so 117
            print "asinPricingMap ",asinPricingMap
20313 kshitij.so 118
            lowestPrice = asinPricingMap.get(data['identifier'].strip().upper()) 
13929 kshitij.so 119
            print "LowestPrice ",lowestPrice
13829 kshitij.so 120
            inStock = 0
121
            if lowestPrice > 0:
122
                inStock = 1
123
            if lowestPrice > 0:
13971 kshitij.so 124
                get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'available_price':lowestPrice,'updatedOn':to_java_date(now),'priceUpdatedOn':to_java_date(now),'in_stock':inStock}}, multi=True)
16024 kshitij.so 125
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'available_price':lowestPrice , 'in_stock':inStock,'dealType':data['dealType'],'codAvailable':data['codAvailable']}}, multi=True)
13829 kshitij.so 126
            else:
13929 kshitij.so 127
                lowestPrice = data['available_price']
13977 kshitij.so 128
                get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'updatedOn':to_java_date(now),'in_stock':0,'priceUpdatedOn':to_java_date(now)}}, multi=True)
16024 kshitij.so 129
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':0,'dealType':data['dealType'],'codAvailable':data['codAvailable']}}, multi=True)
13918 kshitij.so 130
 
16117 kshitij.so 131
            return {'_id':data['_id'],'available_price':lowestPrice,'in_stock':inStock,'source_id':1,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'], 'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
14834 kshitij.so 132
        except Exception as e:
133
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
134
            print e
16117 kshitij.so 135
            return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':1,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'], 'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
13829 kshitij.so 136
 
14203 kshitij.so 137
    elif source_id ==4:
14207 kshitij.so 138
 
14203 kshitij.so 139
        try:
14212 kshitij.so 140
            if data['identifier'] is None or len(data['identifier'].strip())==0:
141
                return {}
142
 
16500 kshitij.so 143
            if data.get('ignorePricing') ==1:
18739 kshitij.so 144
                return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':4,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'], 'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer'], 'packQuantity':data['quantity']}
16500 kshitij.so 145
 
18722 kshitij.so 146
#             try:
147
#                 if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
148
#                     print "sku id is already updated",data['_id'] 
149
#                     return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':4,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'], 'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
150
#             except:
151
#                 pass
152
#             
153
            url = "http://"+saholicPricingHost+":8080/mobileapi/dtr-pricing?id=%s"%(data['identifier'])
14212 kshitij.so 154
            lowestPrice = 0.0
155
            instock = 0
156
            req = urllib2.Request(url,headers=headers)
157
            response = urllib2.urlopen(req)
158
            json_input = response.read()
159
            response.close()
160
            priceInfo = json.loads(json_input)
17456 kshitij.so 161
            print "PriceInfo ",data['identifier']
162
            print priceInfo
14212 kshitij.so 163
            lowestPrice = priceInfo['response']['sellingPrice']
18722 kshitij.so 164
            cheapestBulkPrice = None
165
            try:
166
                bulkPricing = priceInfo['response']['bulkPricing']
167
                for k,v in bulkPricing.iteritems():
168
                    if cheapestBulkPrice is None:
169
                        cheapestBulkPrice = v
170
                        continue
171
                    if cheapestBulkPrice > v:
172
                        cheapestBulkPrice = v
173
            except:
174
                cheapestBulkPrice = 0
175
 
14212 kshitij.so 176
            if lowestPrice > 0:
177
                instock = 1
178
            if instock  == 1:
179
                get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'available_price':lowestPrice,'updatedOn':to_java_date(now),'priceUpdatedOn':to_java_date(now),'in_stock':instock}}, multi=True)
16024 kshitij.so 180
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'available_price':lowestPrice , 'in_stock':instock,'codAvailable':data['codAvailable']}}, multi=True)
14212 kshitij.so 181
            else:
182
                lowestPrice = data['available_price']
183
                get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'updatedOn':to_java_date(now),'in_stock':instock,'priceUpdatedOn':to_java_date(now)}}, multi=True)
16024 kshitij.so 184
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':instock,'codAvailable':data['codAvailable']}}, multi=True)
14212 kshitij.so 185
 
18739 kshitij.so 186
            return {'_id':data['_id'],'available_price':lowestPrice,'in_stock':instock,'source_id':4,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'],'tagline': data['tagline'], 'offer': data['offer'], 'cheapestBulkPrice': cheapestBulkPrice, 'packQuantity':data['quantity']}
14834 kshitij.so 187
 
188
        except Exception as e:
189
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
190
            print e
18739 kshitij.so 191
            return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':4,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'],'tagline': data['tagline'], 'offer': data['offer'],'packQuantity':data['quantity']}
14203 kshitij.so 192
 
14207 kshitij.so 193
 
13829 kshitij.so 194
    elif source_id ==3:
195
        try:
13918 kshitij.so 196
            if data['identifier'] is None or len(data['identifier'].strip())==0:
13829 kshitij.so 197
                return {}
13918 kshitij.so 198
 
16500 kshitij.so 199
            if data.get('ignorePricing') ==1:
16206 kshitij.so 200
                print "Ignored items returning for %d"%(data['_id'])
16265 kshitij.so 201
                return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':3,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
16206 kshitij.so 202
 
13918 kshitij.so 203
            try:
14828 kshitij.so 204
                if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
13920 kshitij.so 205
                    print "sku id is already updated",data['_id']
16205 kshitij.so 206
                    return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':3,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'],'tagline': data['tagline'], 'offer': data['offer']}
13919 kshitij.so 207
 
208
            except Exception as e:
13920 kshitij.so 209
                print "Exception snapdeal"
13919 kshitij.so 210
                print e
13918 kshitij.so 211
 
17295 kshitij.so 212
            url="http://www.snapdeal.com/acors/json/v2/gvbps?supc=%s&catUrl=&bn=&catId=175&start=0&count=10000&scoreCategoryUrl=mobiles-mobile-phones&make2Order=false&auto=false&isO2OVendorRequired=true"%(data['identifier'])
13829 kshitij.so 213
            req = urllib2.Request(url,headers=headers)
214
            response = urllib2.urlopen(req)
16065 kshitij.so 215
            snapdeal_data = response.read()
216
            encoding =  chardet.detect(snapdeal_data)
217
            try:
218
                snapdeal_data = snapdeal_data.decode(encoding.get('encoding'))
219
            except:
220
                snapdeal_data = snapdeal_data.decode(encoding.get('latin-1'))
221
            vendorInfo = json.loads(snapdeal_data)
14188 kshitij.so 222
            response.close()
13829 kshitij.so 223
            lowestOfferPrice = 0
224
            inStock = 0
15253 kshitij.so 225
            buyBoxPrice = 0
226
            isBuyBox = 1
15819 kshitij.so 227
            try:
228
                buyBoxStock = vendorInfo['primaryVendor']['buyableInventory']
229
                if buyBoxStock >0:
230
                    buyBoxPrice = vendorInfo['primaryVendor']['sellingPrice']
231
            except:
232
                pass
233
            sortedVendorsData = sorted(vendorInfo['vendors'], key=itemgetter('sellingPrice'))
15253 kshitij.so 234
            for sortedVendorData in sortedVendorsData:
235
                lowestOfferPrice = float(sortedVendorData['sellingPrice'])
236
                try:
237
                    stock = sortedVendorData['buyableInventory']
238
                except:
239
                    stock = 0
13829 kshitij.so 240
                if stock > 0 and lowestOfferPrice > 0:
241
                    inStock = 1
242
                    break
243
 
244
            print lowestOfferPrice
245
            print inStock
246
            print "*************"
15253 kshitij.so 247
 
248
            if buyBoxPrice != lowestOfferPrice:
249
                isBuyBox = 0
250
 
13829 kshitij.so 251
            if inStock  == 1:
15253 kshitij.so 252
                get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'available_price':lowestOfferPrice,'updatedOn':to_java_date(now),'priceUpdatedOn':to_java_date(now),'in_stock':inStock,'buyBoxFlag':isBuyBox}}, multi=True)
16024 kshitij.so 253
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'available_price':lowestOfferPrice , 'in_stock':inStock,'codAvailable':data['codAvailable']}}, multi=True)
13829 kshitij.so 254
            else:
13929 kshitij.so 255
                lowestOfferPrice = data['available_price']
15253 kshitij.so 256
                get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'updatedOn':to_java_date(now),'in_stock':inStock,'priceUpdatedOn':to_java_date(now),'buyBoxFlag':isBuyBox}}, multi=True)
16024 kshitij.so 257
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':inStock,'codAvailable':data['codAvailable']}}, multi=True)
13918 kshitij.so 258
 
16117 kshitij.so 259
            return {'_id':data['_id'],'available_price':lowestOfferPrice,'in_stock':inStock,'source_id':3,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
14834 kshitij.so 260
        except Exception as e:
15266 kshitij.so 261
            print traceback.print_exc()
14834 kshitij.so 262
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
263
            print e
16117 kshitij.so 264
            return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':3,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
13829 kshitij.so 265
 
266
    elif source_id == 2:
267
        try:
13918 kshitij.so 268
            if data['identifier'] is None or len(data['identifier'].strip())==0:
13829 kshitij.so 269
                return {}
13918 kshitij.so 270
 
16500 kshitij.so 271
            if data.get('ignorePricing') ==1:
15608 kshitij.so 272
                print "Ignored items returning for %d"%(data['_id'])
16117 kshitij.so 273
                return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':2,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
15608 kshitij.so 274
 
13918 kshitij.so 275
            try:
14828 kshitij.so 276
                if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
13918 kshitij.so 277
                    print "sku id is already updated",data['_id']
16117 kshitij.so 278
                    return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':2,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']} 
13918 kshitij.so 279
            except:
280
                pass
281
 
282
            lowestSp = 0
283
            inStock = 0
15253 kshitij.so 284
            buyBoxPrice = 0
285
            isBuyBox = 0
14189 kshitij.so 286
            scraperProductPage = NewFlipkartScraper.FlipkartProductPageScraper()
14121 kshitij.so 287
            try:
17262 kshitij.so 288
                result = scraperProductPage.read(data['identifier'])
289
                print result
290
                if result.get('lowestSp')!=0:
291
                    lowestSp = result.get('lowestSp')
292
                    inStock = result.get('inStock')
293
                    buyBoxPrice = result.get('buyBoxPrice')
14121 kshitij.so 294
            except:
295
                print "Unable to scrape product page ",data['identifier']
13829 kshitij.so 296
            print lowestSp
297
            print inStock
15253 kshitij.so 298
            if buyBoxPrice is not None and buyBoxPrice == lowestSp:
299
                isBuyBox = 1
13829 kshitij.so 300
            if lowestSp > 0:
15253 kshitij.so 301
                get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'available_price':lowestSp,'updatedOn':to_java_date(now),'priceUpdatedOn':to_java_date(now),'in_stock':inStock,'buyBoxFlag':isBuyBox}}, multi=True)
16024 kshitij.so 302
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'available_price':lowestSp , 'in_stock':inStock,'codAvailable':data['codAvailable']}}, multi=True)
13829 kshitij.so 303
            else:
13929 kshitij.so 304
                lowestSp = data['available_price']
15253 kshitij.so 305
                get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'updatedOn':to_java_date(now),'in_stock':inStock,'priceUpdatedOn':to_java_date(now),'buyBoxFlag':isBuyBox}}, multi=True)
16024 kshitij.so 306
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':inStock,'codAvailable':data['codAvailable']}}, multi=True)
13918 kshitij.so 307
 
16117 kshitij.so 308
            return {'_id':data['_id'],'available_price':lowestSp,'in_stock':inStock,'source_id':2,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
14342 kshitij.so 309
 
14834 kshitij.so 310
        except Exception as e:
311
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
312
            print e
16117 kshitij.so 313
            return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':2,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
15902 kshitij.so 314
 
315
    elif source_id == 5:
316
        try:
16500 kshitij.so 317
            if data.get('ignorePricing') ==1:
15902 kshitij.so 318
                print "Ignored items returning for %d"%(data['_id'])
16117 kshitij.so 319
                return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':5,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
15902 kshitij.so 320
 
321
            try:
322
                if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
323
                    print "sku id is already updated",data['_id'] 
16117 kshitij.so 324
                    return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':5,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
15902 kshitij.so 325
            except:
326
                pass
327
 
328
 
329
            url = data['marketPlaceUrl']
330
            lowestPrice = 0.0
331
            try:
332
                sc = ShopCluesScraper.ShopCluesScraper()
15951 kshitij.so 333
                url = transformUrl(url, 5)
15902 kshitij.so 334
                productInfo = sc.read(url)
335
            except Exception as e:
16177 kshitij.so 336
                traceback.print_exc()
16176 kshitij.so 337
                productInfo = {}
16022 kshitij.so 338
                productInfo['price'] = 0.0
339
                productInfo['inStock'] = 0
340
                productInfo['isCod'] = 0
16178 kshitij.so 341
                productInfo['coupon'] = ""
16022 kshitij.so 342
 
15902 kshitij.so 343
            print "LowestPrice ",productInfo['price']
344
            if productInfo['price'] > 0 and productInfo['inStock']==1:
345
                get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'available_price':productInfo['price'],'coupon':productInfo['coupon'],'codAvailable':productInfo['isCod'],'updatedOn':to_java_date(now),'priceUpdatedOn':to_java_date(now),'in_stock':productInfo['inStock']}})
16024 kshitij.so 346
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'available_price':productInfo['price'] , 'in_stock':productInfo['inStock'],'dealType':data['dealType'], 'rank':data['rank'],'codAvailable':productInfo['isCod']}})
15902 kshitij.so 347
            else:
348
                lowestPrice = data['available_price']
349
                get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'updatedOn':to_java_date(now),'in_stock':0,'priceUpdatedOn':to_java_date(now)}})
16024 kshitij.so 350
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':0,'dealType':data['dealType'],'rank':data['rank'],'codAvailable':productInfo['isCod']}})
15902 kshitij.so 351
 
16117 kshitij.so 352
            return {'_id':data['_id'],'available_price':productInfo['price'],'in_stock':productInfo['inStock'],'source_id':5,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'], 'coupon':productInfo['coupon'],'codAvailable':productInfo['isCod'], 'tagline': data['tagline'], 'offer': data['offer']}
15902 kshitij.so 353
        except Exception as e:
354
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
16177 kshitij.so 355
            traceback.print_exc()
16117 kshitij.so 356
            return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':5,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
16410 kshitij.so 357
 
358
    elif source_id == 6:
359
        try:
16500 kshitij.so 360
            if data.get('ignorePricing') ==1:
16410 kshitij.so 361
                print "Ignored items returning for %d"%(data['_id'])
16491 kshitij.so 362
                return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':6,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer'],'gross_price':data.get('gross_price')}
16410 kshitij.so 363
 
364
            try:
365
                if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
366
                    print "sku id is already updated",data['_id'] 
16491 kshitij.so 367
                    return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':6,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer'],'gross_price':data.get('gross_price')}
16410 kshitij.so 368
            except:
369
                pass
370
 
371
            paytmScraper = PaytmScraper.PaytmScraper()
372
            url = "https://catalog.paytm.com/v1/mobile/product/%s"%(data['identifier'].strip())
373
            try:
374
                result = paytmScraper.read(url)
18282 kshitij.so 375
                print result
16410 kshitij.so 376
                effective_price = result.get('offerPrice')
16462 kshitij.so 377
                gross_price = effective_price
18282 kshitij.so 378
                shareUrl = result.get('shareUrl')
379
                if shareUrl is None:
380
                    shareUrl = data['marketPlaceUrl']
16410 kshitij.so 381
                coupon = ""
382
                try:
383
                    offers = PaytmOfferScraper.fetchOffers(result['offerUrl'])
384
                    bestOffer = {}
385
                    for offer_data in offers.get('codes'):
16415 kshitij.so 386
                        if effective_price > offer_data.get('effective_price'):
16410 kshitij.so 387
                            effective_price = offer_data.get('effective_price')
388
                            bestOffer = offer_data
389
                            coupon = bestOffer.get('code')
390
                except:
391
                    pass
16469 kshitij.so 392
 
393
                """Temp fix"""
394
                if len(coupon) > 0:
395
                    result['codAvailable'] = 0
396
 
16410 kshitij.so 397
                available_price = effective_price 
398
                if result['inStock']:
399
                    inStock = 1
18282 kshitij.so 400
                    get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'available_price':available_price,'updatedOn':to_java_date(datetime.now()),'priceUpdatedOn':to_java_date(datetime.now()),'in_stock':1,'buyBoxFlag':1,'codAvailable':result.get('codAvailable'),'coupon':coupon,'gross_price':gross_price,'marketPlaceUrl':shareUrl}})
16462 kshitij.so 401
                    get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'available_price':available_price , 'in_stock':1,'codAvailable':result.get('codAvailable'),'gross_price':gross_price}})
16410 kshitij.so 402
                else:
403
                    inStock = 0
18282 kshitij.so 404
                    get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'updatedOn':to_java_date(datetime.now()),'in_stock':0,'priceUpdatedOn':to_java_date(datetime.now()),'buyBoxFlag':1,'codAvailable':result.get('codAvailable'),'coupon':coupon,'marketPlaceUrl':shareUrl}})
16415 kshitij.so 405
                    get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':0,'codAvailable':result.get('codAvailable')}})
16410 kshitij.so 406
 
407
            except:
408
                inStock = 0
409
                get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'updatedOn':to_java_date(datetime.now()),'in_stock':0,'priceUpdatedOn':to_java_date(datetime.now()),'buyBoxFlag':1}})
410
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':0}})
411
 
412
 
18282 kshitij.so 413
            return {'_id':data['_id'],'available_price':available_price,'in_stock':inStock,'source_id':6,'source_product_name':data['source_product_name'],'marketPlaceUrl':shareUrl,'thumbnail':data['thumbnail'], 'coupon':coupon,'codAvailable':result['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer'],'gross_price':gross_price}
16410 kshitij.so 414
        except Exception as e:
415
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
416
            traceback.print_exc()
16462 kshitij.so 417
            return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':6,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer'],'gross_price':data.get('gross_price')}
17013 manish.sha 418
 
419
    elif source_id ==7:
420
        try:
421
            if data['identifier'] is None or len(data['identifier'].strip())==0:
422
                return {}
423
 
424
            if data.get('ignorePricing') ==1:
425
                print "Ignored items returning for %d"%(data['_id'])
426
                return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':7,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
427
 
428
            try:
429
                if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
430
                    print "sku id is already updated",data['_id']
431
                    return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':7,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'],'tagline': data['tagline'], 'offer': data['offer']}
432
 
433
            except Exception as e:
434
                print "Exception snapdeal"
435
                print e
436
 
437
            response = None
438
 
439
            try:
17043 kshitij.so 440
                scraper = HomeShop18Scraper.HomeShop18Scraper()
17013 manish.sha 441
                response = scraper.read('http://m.homeshop18.com/product.mobi?productId=%s'%(str(data['identifier'])))
442
            except Exception as e:
443
                print e
17043 kshitij.so 444
                scraper = HomeShop18Scraper.HomeShop18Scraper()
17013 manish.sha 445
                response = scraper.read('http://m.homeshop18.com/product.mobi?productId=%s'%(str(data['identifier'])))
446
 
447
            lowestOfferPrice = 0
448
            inStock = 0
449
 
450
            if response is not None:
17043 kshitij.so 451
                lowestOfferPrice = float(response['price']+response['shippingCharge'])
17013 manish.sha 452
                inStock = response['inStock']          
453
 
454
            print lowestOfferPrice
455
            print inStock
456
            print "*************"
457
 
17036 kshitij.so 458
            if lowestOfferPrice ==0:
459
                inStock = 0
17013 manish.sha 460
 
17036 kshitij.so 461
 
17013 manish.sha 462
            if inStock  == 1:
17036 kshitij.so 463
                get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'available_price':lowestOfferPrice,'updatedOn':to_java_date(now),'priceUpdatedOn':to_java_date(now),'in_stock':inStock}}, multi=True)
17013 manish.sha 464
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'available_price':lowestOfferPrice , 'in_stock':inStock,'codAvailable':data['codAvailable']}}, multi=True)
465
            else:
466
                lowestOfferPrice = data['available_price']
17036 kshitij.so 467
                get_mongo_connection().Catalog.MasterData.update({'_id':data['_id']}, {'$set' : {'updatedOn':to_java_date(now),'in_stock':inStock,'priceUpdatedOn':to_java_date(now)}}, multi=True)
17013 manish.sha 468
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':inStock,'codAvailable':data['codAvailable']}}, multi=True)
469
 
470
            return {'_id':data['_id'],'available_price':lowestOfferPrice,'in_stock':inStock,'source_id':7,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
471
        except Exception as e:
472
            print traceback.print_exc()
473
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
474
            print e
475
            return {'_id':data['_id'],'available_price':data['available_price'],'in_stock':data['in_stock'],'source_id':7,'source_product_name':data['source_product_name'],'marketPlaceUrl':data['marketPlaceUrl'],'thumbnail':data['thumbnail'],'coupon':data['coupon'], 'codAvailable':data['codAvailable'], 'tagline': data['tagline'], 'offer': data['offer']}
15902 kshitij.so 476
 
13829 kshitij.so 477
    else:
478
        return {}
15902 kshitij.so 479
 
480
 
13918 kshitij.so 481
 
16498 kshitij.so 482
def recomputePoints(deal):
15253 kshitij.so 483
    try:
16498 kshitij.so 484
        nlcPoints = getNlcPoints(deal)
15253 kshitij.so 485
    except:
16498 kshitij.so 486
        traceback.print_exc()
15253 kshitij.so 487
        nlcPoints = deal['nlcPoints']
16498 kshitij.so 488
 
489
    bundleDealPoints = list(get_mongo_connection().Catalog.DealPoints.find({'skuBundleId':deal['skuBundleId'],'startDate':{'$lte':to_java_date(datetime.now())},'endDate':{'$gte':to_java_date(datetime.now())}}))
490
    if len(bundleDealPoints) > 0:
491
        manualDealThresholdPrice = bundleDealPoints[0]['dealThresholdPrice']
492
        dealPoints = bundleDealPoints[0]['dealPoints']
15253 kshitij.so 493
    else:
494
        dealPoints = 0
16498 kshitij.so 495
        manualDealThresholdPrice = None
16508 kshitij.so 496
 
497
    if deal['available_price'] > manualDealThresholdPrice:
498
        dealPoints = 0
499
 
16498 kshitij.so 500
 
501
    if dealPoints != deal['dealPoints'] or manualDealThresholdPrice != deal['manualDealThresholdPrice'] or nlcPoints != deal['nlcPoints']:
502
        get_mongo_connection().Catalog.Deals.update({'_id':deal['_id']},{"$set":{'totalPoints':deal['totalPoints'] - deal['nlcPoints'] + nlcPoints - deal['dealPoints'] +dealPoints , 'nlcPoints': nlcPoints, 'dealPoints': dealPoints, 'manualDealThresholdPrice': manualDealThresholdPrice}})
15253 kshitij.so 503
 
15266 kshitij.so 504
 
505
def populateNegativeDeals():
506
    negativeDeals = get_mongo_connection().Catalog.NegativeDeals.find().distinct('sku')
507
    mc.set("negative_deals", negativeDeals, 600)
508
 
509
def recomputeDeal(item):
16017 kshitij.so 510
 
13918 kshitij.so 511
    """Lets recompute deal for this bundle"""
15266 kshitij.so 512
    print "Recomputing for bundleId",item.get('skuBundleId')
513
    skuBundleId = item['skuBundleId']
13829 kshitij.so 514
 
19153 kshitij.so 515
    similarItems = list(get_mongo_connection().Catalog.Deals.find({'skuBundleId':skuBundleId}).sort([('netPriceAfterCashBack',pymongo.ASCENDING)]))
13918 kshitij.so 516
    bestPrice = float("inf")
517
    bestOne = None
518
    toUpdate = []
16017 kshitij.so 519
    prepaidBestPrice = float("inf")
520
    prepaidBestOne = None
13918 kshitij.so 521
    for similarItem in similarItems:
16498 kshitij.so 522
        try:
523
            recomputePoints(similarItem)
524
        except:
525
            traceback.print_exc()
16017 kshitij.so 526
        if similarItem['codAvailable'] ==1:
527
            if mc.get("negative_deals") is None:
528
                populateNegativeDeals()
16172 kshitij.so 529
            if similarItem['in_stock'] == 0  or similarItem['_id'] in mc.get("negative_deals"):
16017 kshitij.so 530
                get_mongo_connection().Catalog.Deals.update({ '_id' : similarItem['_id'] }, {'$set':{'showDeal':0, 'prepaidDeal':0 }})
531
                continue
17674 kshitij.so 532
            if similarItem['source_id'] == SOURCE_MAP.get('SHOPCLUES.COM') and similarItem['rank']==0 and similarItem['category_id']!=6:
16017 kshitij.so 533
                get_mongo_connection().Catalog.Deals.update({ '_id' : similarItem['_id'] }, {'$set':{'showDeal':0,'prepaidDeal':0 }})
534
                continue
19153 kshitij.so 535
            if similarItem['netPriceAfterCashBack'] < bestPrice:
16017 kshitij.so 536
                bestOne = similarItem
19153 kshitij.so 537
                bestPrice = similarItem['netPriceAfterCashBack']
20347 kshitij.so 538
            elif similarItem['netPriceAfterCashBack'] == bestPrice:
539
 
540
                try:
541
                    if (DEAL_PRIORITY.index(int(similarItem['source_id'])) > DEAL_PRIORITY.index(int(bestOne['source_id']))):
542
                        continue
543
                except:
544
                    traceback.print_exc()
545
 
16017 kshitij.so 546
                bestOne = similarItem
19153 kshitij.so 547
                bestPrice = similarItem['netPriceAfterCashBack']
16017 kshitij.so 548
            else:
549
                pass
13918 kshitij.so 550
        else:
16017 kshitij.so 551
            if mc.get("negative_deals") is None:
552
                populateNegativeDeals()
16172 kshitij.so 553
            if similarItem['in_stock'] == 0  or similarItem['_id'] in mc.get("negative_deals"):
16017 kshitij.so 554
                get_mongo_connection().Catalog.Deals.update({ '_id' : similarItem['_id'] }, {'$set':{'showDeal':0, 'prepaidDeal':0 }})
555
                continue
17751 kshitij.so 556
            if similarItem['source_id'] == SOURCE_MAP.get('SHOPCLUES.COM') and similarItem['rank']==0 and similarItem['category_id']!=6:
16017 kshitij.so 557
                get_mongo_connection().Catalog.Deals.update({ '_id' : similarItem['_id'] }, {'$set':{'showDeal':0,'prepaidDeal':0 }})
558
                continue
19153 kshitij.so 559
            if similarItem['netPriceAfterCashBack'] < prepaidBestPrice:
16017 kshitij.so 560
                prepaidBestOne = similarItem
19153 kshitij.so 561
                prepaidBestPrice = similarItem['netPriceAfterCashBack']
20347 kshitij.so 562
            elif similarItem['netPriceAfterCashBack'] == prepaidBestPrice:
563
 
564
                try:
20366 kshitij.so 565
                    if (DEAL_PRIORITY.index(int(similarItem['source_id'])) > DEAL_PRIORITY.index(int(prepaidBestOne['source_id']))):
20347 kshitij.so 566
                        continue
567
                except:
568
                    traceback.print_exc()
569
 
16017 kshitij.so 570
                prepaidBestOne = similarItem
19153 kshitij.so 571
                prepaidBestPrice = similarItem['netPriceAfterCashBack']
16017 kshitij.so 572
            else:
573
                pass
16024 kshitij.so 574
    if bestOne is not None or prepaidBestOne is not None:
13918 kshitij.so 575
        for similarItem in similarItems:
576
            toUpdate.append(similarItem['_id'])
16023 kshitij.so 577
        if bestOne is not None:
578
            toUpdate.remove(bestOne['_id'])
579
            get_mongo_connection().Catalog.Deals.update({ '_id' : bestOne['_id'] }, {'$set':{'showDeal':1,'prepaidDeal':0 }})
580
        if prepaidBestOne is not None:
16069 kshitij.so 581
            if bestOne is not None:
19153 kshitij.so 582
                if prepaidBestOne['netPriceAfterCashBack'] < bestOne['netPriceAfterCashBack']: 
16069 kshitij.so 583
                    toUpdate.remove(prepaidBestOne['_id'])
584
                    get_mongo_connection().Catalog.Deals.update({ '_id' : prepaidBestOne['_id'] }, {'$set':{'showDeal':0,'prepaidDeal':1 }})
16072 kshitij.so 585
            else:
586
                toUpdate.remove(prepaidBestOne['_id'])
587
                get_mongo_connection().Catalog.Deals.update({ '_id' : prepaidBestOne['_id'] }, {'$set':{'showDeal':0,'prepaidDeal':1 }})
13918 kshitij.so 588
    if len(toUpdate) > 0:
16017 kshitij.so 589
        get_mongo_connection().Catalog.Deals.update({ '_id' : { "$in": toUpdate } }, {'$set':{'showDeal':0,'prepaidDeal':0 }},upsert=False, multi=True)
590
 
14342 kshitij.so 591
    print "Done with recomputing"
13829 kshitij.so 592
 
593
def getLatestPrice(skuBundleId, source_id):
594
    temp = []
595
    itemIds = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':skuBundleId,'source_id' : source_id}))
16026 kshitij.so 596
    item = None
13829 kshitij.so 597
    for item in itemIds:
14309 kshitij.so 598
        item['dealFlag'] = 0
599
        item['dealType'] = 0
16510 kshitij.so 600
        item['dealUrl'] = ""
17674 kshitij.so 601
        if item['source_id'] ==5 and item['rank'] == 0 and item['category_id']!=6:
15912 kshitij.so 602
            continue
15187 kshitij.so 603
        if item['source_id'] ==3:
604
            item['marketPlaceUrl'] = item['marketPlaceUrl']+'?supc='+item.get('identifier')
14309 kshitij.so 605
        manualDeals = list(get_mongo_connection().Catalog.ManualDeals.find({'startDate':{'$lte':to_java_date(datetime.now())},'endDate':{'$gte':to_java_date(datetime.now())},'source_id':source_id, 'sku':item['_id']}))
606
        if len(manualDeals) > 0:
607
            item['dealFlag'] = 1
14760 kshitij.so 608
            item['dealType'] =manualDeals[0]['dealType']
16510 kshitij.so 609
            item['dealUrl'] = manualDeals[0]['dealUrl']
14760 kshitij.so 610
        info = returnLatestPrice(item, source_id)
19153 kshitij.so 611
        if item['source_id'] != SOURCE_MAP.get('PAYTM.COM'):
612
            data = calculateCashBack(item, info['available_price'])
613
        else:
614
            if info['codAvailable'] ==0:
615
                data = calculateCashBack(item, info['gross_price'])
14760 kshitij.so 616
            else:
19153 kshitij.so 617
                data = calculateCashBack(item, info['available_price'])  #No need, can be done in if with or clause.
618
 
619
        info['cash_back'] = data['cash_back']
620
        info['cash_back_type'] = data['cash_back_type']
621
        info['netPriceAfterCashBack'] = data['netPriceAfterCashBack']
622
        info['showNetPrice'] = data['showNetPrice']
19317 kshitij.so 623
        info['category_id'] = item['category_id']
624
        info['subCategoryId'] = item['subCategoryId']
19153 kshitij.so 625
        get_mongo_connection().Catalog.Deals.update({'_id':item['_id']},{"$set":{'netPriceAfterCashBack':info['netPriceAfterCashBack']}})
14760 kshitij.so 626
        temp.append(info)
16026 kshitij.so 627
    if item is not None:
628
        try:
629
            thread = threading.Thread(target=recomputeDeal, args = (item,))
630
            thread.daemon = True
631
            thread.start()    
632
        except:
633
            print traceback.print_exc()
634
            print "Unable to compute deal for ",skuBundleId
13829 kshitij.so 635
    return temp
636
 
13864 kshitij.so 637
def getLatestPriceById(id):
638
    item = list(get_mongo_connection().Catalog.MasterData.find({'_id':id}))
14309 kshitij.so 639
    item[0]['dealFlag'] = 0
640
    item[0]['dealType'] = 0
16510 kshitij.so 641
    item[0]['dealUrl'] = ""
642
 
14309 kshitij.so 643
    manualDeals = list(get_mongo_connection().Catalog.ManualDeals.find({'startDate':{'$lte':to_java_date(datetime.now())},'endDate':{'$gte':to_java_date(datetime.now())},'source_id':item[0]['source_id'], 'sku':item[0]['_id']}))
644
    if len(manualDeals) > 0:
645
        item[0]['dealFlag'] = 1
15266 kshitij.so 646
        item[0]['dealType'] =manualDeals[0]['dealType']
16510 kshitij.so 647
        item[0]['dealUrl'] = manualDeals[0]['dealUrl']
14367 kshitij.so 648
 
14431 kshitij.so 649
    info = returnLatestPrice(item[0], item[0]['source_id'])
19153 kshitij.so 650
    if item[0]['source_id'] != SOURCE_MAP.get('PAYTM.COM'):
651
        data = calculateCashBack(item[0], info['available_price'])
652
    else:
653
        if info['codAvailable'] ==0:
654
            data = calculateCashBack(item[0], info['gross_price'])
655
        else:
656
            data = calculateCashBack(item[0], info['available_price'])  #No need, can be done in if with or clause.
657
 
658
    info['cash_back'] = data['cash_back']
659
    info['cash_back_type'] = data['cash_back_type']
660
    info['netPriceAfterCashBack'] = data['netPriceAfterCashBack']
661
    info['showNetPrice'] = data['showNetPrice']
662
    get_mongo_connection().Catalog.Deals.update({'_id':item[0]['_id']},{"$set":{'netPriceAfterCashBack':info['netPriceAfterCashBack']}})
14794 kshitij.so 663
    print info
14367 kshitij.so 664
    try:
15273 kshitij.so 665
        thread = threading.Thread(target=recomputeDeal, args = (item[0],))
14367 kshitij.so 666
        thread.daemon = True
667
        thread.start()    
668
    except:
669
        print "Unable to compute deal for ",item[0]['skuBundleId']
14431 kshitij.so 670
    return info
13829 kshitij.so 671
 
14828 kshitij.so 672
def updatePriceForNotificationBundles(skuBundleId):
15266 kshitij.so 673
    itemIds = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':skuBundleId,'priceUpdatedOn':{'$lte':to_java_date(datetime.now() - timedelta(minutes=2))},'source_id':{"$in":SOURCE_MAP.values()}}))
14828 kshitij.so 674
    for item in itemIds:
14833 kshitij.so 675
        print item['_id']
14828 kshitij.so 676
        item['dealFlag'] = 0
677
        item['dealType'] = 0
16510 kshitij.so 678
        item['dealUrl'] = ""
14828 kshitij.so 679
        manualDeals = list(get_mongo_connection().Catalog.ManualDeals.find({'startDate':{'$lte':to_java_date(datetime.now())},'endDate':{'$gte':to_java_date(datetime.now())},'source_id':item['source_id'], 'sku':item['_id']}))
680
        if len(manualDeals) > 0:
681
            item['dealFlag'] = 1
682
            item['dealType'] =manualDeals[0]['dealType']
16510 kshitij.so 683
            item['dealUrl'] = manualDeals[0]['dealUrl']
14828 kshitij.so 684
        info = returnLatestPrice(item, item['source_id'],False)
685
        print info
686
 
13829 kshitij.so 687
def main():
15956 kshitij.so 688
    print datetime.now()
20313 kshitij.so 689
    print "returned %s"%(str(getLatestPriceById(23014)))
15956 kshitij.so 690
    print datetime.now()
13829 kshitij.so 691
if __name__=='__main__':
13971 kshitij.so 692
    main()
693