Subversion Repositories SmartDukaan

Rev

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