Subversion Repositories SmartDukaan

Rev

Rev 20313 | Rev 20347 | 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
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'])
16415 kshitij.so 384
                    try:
385
                        addToPaytmMaster(offers.get('codes'))
386
                    except:
387
                        print "Error in adding coupon"
388
                        traceback.print_exc()
16410 kshitij.so 389
                    bestOffer = {}
390
                    for offer_data in offers.get('codes'):
16415 kshitij.so 391
                        if effective_price > offer_data.get('effective_price'):
16410 kshitij.so 392
                            effective_price = offer_data.get('effective_price')
393
                            bestOffer = offer_data
394
                            coupon = bestOffer.get('code')
395
                except:
396
                    pass
16469 kshitij.so 397
 
398
                """Temp fix"""
399
                if len(coupon) > 0:
400
                    result['codAvailable'] = 0
401
 
16410 kshitij.so 402
                available_price = effective_price 
403
                if result['inStock']:
404
                    inStock = 1
18282 kshitij.so 405
                    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 406
                    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 407
                else:
408
                    inStock = 0
18282 kshitij.so 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,'codAvailable':result.get('codAvailable'),'coupon':coupon,'marketPlaceUrl':shareUrl}})
16415 kshitij.so 410
                    get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':0,'codAvailable':result.get('codAvailable')}})
16410 kshitij.so 411
 
412
            except:
413
                inStock = 0
414
                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}})
415
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':0}})
416
 
417
 
18282 kshitij.so 418
            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 419
        except Exception as e:
420
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
421
            traceback.print_exc()
16462 kshitij.so 422
            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 423
 
424
    elif source_id ==7:
425
        try:
426
            if data['identifier'] is None or len(data['identifier'].strip())==0:
427
                return {}
428
 
429
            if data.get('ignorePricing') ==1:
430
                print "Ignored items returning for %d"%(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
            try:
434
                if ignoreLastUpdated and data['priceUpdatedOn'] > to_java_date(now - timedelta(minutes=5)):
435
                    print "sku id is already updated",data['_id']
436
                    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']}
437
 
438
            except Exception as e:
439
                print "Exception snapdeal"
440
                print e
441
 
442
            response = None
443
 
444
            try:
17043 kshitij.so 445
                scraper = HomeShop18Scraper.HomeShop18Scraper()
17013 manish.sha 446
                response = scraper.read('http://m.homeshop18.com/product.mobi?productId=%s'%(str(data['identifier'])))
447
            except Exception as e:
448
                print e
17043 kshitij.so 449
                scraper = HomeShop18Scraper.HomeShop18Scraper()
17013 manish.sha 450
                response = scraper.read('http://m.homeshop18.com/product.mobi?productId=%s'%(str(data['identifier'])))
451
 
452
            lowestOfferPrice = 0
453
            inStock = 0
454
 
455
            if response is not None:
17043 kshitij.so 456
                lowestOfferPrice = float(response['price']+response['shippingCharge'])
17013 manish.sha 457
                inStock = response['inStock']          
458
 
459
            print lowestOfferPrice
460
            print inStock
461
            print "*************"
462
 
17036 kshitij.so 463
            if lowestOfferPrice ==0:
464
                inStock = 0
17013 manish.sha 465
 
17036 kshitij.so 466
 
17013 manish.sha 467
            if inStock  == 1:
17036 kshitij.so 468
                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 469
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'available_price':lowestOfferPrice , 'in_stock':inStock,'codAvailable':data['codAvailable']}}, multi=True)
470
            else:
471
                lowestOfferPrice = data['available_price']
17036 kshitij.so 472
                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 473
                get_mongo_connection().Catalog.Deals.update({'_id':data['_id']}, {'$set' : {'in_stock':inStock,'codAvailable':data['codAvailable']}}, multi=True)
474
 
475
            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']}
476
        except Exception as e:
477
            print traceback.print_exc()
478
            print "Exception for _id %d and source %s"%(data['_id'], source_id)
479
            print e
480
            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 481
 
13829 kshitij.so 482
    else:
483
        return {}
15902 kshitij.so 484
 
485
 
13918 kshitij.so 486
 
16498 kshitij.so 487
def recomputePoints(deal):
15253 kshitij.so 488
    try:
16498 kshitij.so 489
        nlcPoints = getNlcPoints(deal)
15253 kshitij.so 490
    except:
16498 kshitij.so 491
        traceback.print_exc()
15253 kshitij.so 492
        nlcPoints = deal['nlcPoints']
16498 kshitij.so 493
 
494
    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())}}))
495
    if len(bundleDealPoints) > 0:
496
        manualDealThresholdPrice = bundleDealPoints[0]['dealThresholdPrice']
497
        dealPoints = bundleDealPoints[0]['dealPoints']
15253 kshitij.so 498
    else:
499
        dealPoints = 0
16498 kshitij.so 500
        manualDealThresholdPrice = None
16508 kshitij.so 501
 
502
    if deal['available_price'] > manualDealThresholdPrice:
503
        dealPoints = 0
504
 
16498 kshitij.so 505
 
506
    if dealPoints != deal['dealPoints'] or manualDealThresholdPrice != deal['manualDealThresholdPrice'] or nlcPoints != deal['nlcPoints']:
507
        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 508
 
15266 kshitij.so 509
 
510
def populateNegativeDeals():
511
    negativeDeals = get_mongo_connection().Catalog.NegativeDeals.find().distinct('sku')
512
    mc.set("negative_deals", negativeDeals, 600)
513
 
514
def recomputeDeal(item):
16017 kshitij.so 515
 
13918 kshitij.so 516
    """Lets recompute deal for this bundle"""
15266 kshitij.so 517
    print "Recomputing for bundleId",item.get('skuBundleId')
518
    skuBundleId = item['skuBundleId']
13829 kshitij.so 519
 
19153 kshitij.so 520
    similarItems = list(get_mongo_connection().Catalog.Deals.find({'skuBundleId':skuBundleId}).sort([('netPriceAfterCashBack',pymongo.ASCENDING)]))
13918 kshitij.so 521
    bestPrice = float("inf")
522
    bestOne = None
523
    bestSellerPoints = 0
524
    toUpdate = []
16017 kshitij.so 525
    prepaidBestPrice = float("inf")
526
    prepaidBestOne = None
527
    prepaidBestSellerPoints = 0
13918 kshitij.so 528
    for similarItem in similarItems:
16498 kshitij.so 529
        try:
530
            recomputePoints(similarItem)
531
        except:
532
            traceback.print_exc()
16017 kshitij.so 533
        if similarItem['codAvailable'] ==1:
534
            if mc.get("negative_deals") is None:
535
                populateNegativeDeals()
16172 kshitij.so 536
            if similarItem['in_stock'] == 0  or similarItem['_id'] in mc.get("negative_deals"):
16017 kshitij.so 537
                get_mongo_connection().Catalog.Deals.update({ '_id' : similarItem['_id'] }, {'$set':{'showDeal':0, 'prepaidDeal':0 }})
538
                continue
17674 kshitij.so 539
            if similarItem['source_id'] == SOURCE_MAP.get('SHOPCLUES.COM') and similarItem['rank']==0 and similarItem['category_id']!=6:
16017 kshitij.so 540
                get_mongo_connection().Catalog.Deals.update({ '_id' : similarItem['_id'] }, {'$set':{'showDeal':0,'prepaidDeal':0 }})
541
                continue
19153 kshitij.so 542
            if similarItem['netPriceAfterCashBack'] < bestPrice:
16017 kshitij.so 543
                bestOne = similarItem
19153 kshitij.so 544
                bestPrice = similarItem['netPriceAfterCashBack']
16017 kshitij.so 545
                bestSellerPoints = similarItem['bestSellerPoints']
19153 kshitij.so 546
            elif similarItem['netPriceAfterCashBack'] == bestPrice and bestSellerPoints < similarItem['bestSellerPoints']:
16017 kshitij.so 547
                bestOne = similarItem
19153 kshitij.so 548
                bestPrice = similarItem['netPriceAfterCashBack']
16017 kshitij.so 549
                bestSellerPoints = similarItem['bestSellerPoints']
550
            else:
551
                pass
13918 kshitij.so 552
        else:
16017 kshitij.so 553
            if mc.get("negative_deals") is None:
554
                populateNegativeDeals()
16172 kshitij.so 555
            if similarItem['in_stock'] == 0  or similarItem['_id'] in mc.get("negative_deals"):
16017 kshitij.so 556
                get_mongo_connection().Catalog.Deals.update({ '_id' : similarItem['_id'] }, {'$set':{'showDeal':0, 'prepaidDeal':0 }})
557
                continue
17751 kshitij.so 558
            if similarItem['source_id'] == SOURCE_MAP.get('SHOPCLUES.COM') and similarItem['rank']==0 and similarItem['category_id']!=6:
16017 kshitij.so 559
                get_mongo_connection().Catalog.Deals.update({ '_id' : similarItem['_id'] }, {'$set':{'showDeal':0,'prepaidDeal':0 }})
560
                continue
19153 kshitij.so 561
            if similarItem['netPriceAfterCashBack'] < prepaidBestPrice:
16017 kshitij.so 562
                prepaidBestOne = similarItem
19153 kshitij.so 563
                prepaidBestPrice = similarItem['netPriceAfterCashBack']
16017 kshitij.so 564
                prepaidBestSellerPoints = similarItem['bestSellerPoints']
19153 kshitij.so 565
            elif similarItem['netPriceAfterCashBack'] == prepaidBestPrice and prepaidBestSellerPoints < similarItem['bestSellerPoints']:
16017 kshitij.so 566
                prepaidBestOne = similarItem
19153 kshitij.so 567
                prepaidBestPrice = similarItem['netPriceAfterCashBack']
16017 kshitij.so 568
                prepaidBestSellerPoints = similarItem['bestSellerPoints']
569
            else:
570
                pass
17456 kshitij.so 571
    #print "bestOne ", bestOne
572
    #print "prepaid best one",  prepaidBestOne
16024 kshitij.so 573
    if bestOne is not None or prepaidBestOne is not None:
13918 kshitij.so 574
        for similarItem in similarItems:
575
            toUpdate.append(similarItem['_id'])
16023 kshitij.so 576
        if bestOne is not None:
577
            toUpdate.remove(bestOne['_id'])
578
            get_mongo_connection().Catalog.Deals.update({ '_id' : bestOne['_id'] }, {'$set':{'showDeal':1,'prepaidDeal':0 }})
579
        if prepaidBestOne is not None:
16069 kshitij.so 580
            if bestOne is not None:
19153 kshitij.so 581
                if prepaidBestOne['netPriceAfterCashBack'] < bestOne['netPriceAfterCashBack']: 
16069 kshitij.so 582
                    toUpdate.remove(prepaidBestOne['_id'])
583
                    get_mongo_connection().Catalog.Deals.update({ '_id' : prepaidBestOne['_id'] }, {'$set':{'showDeal':0,'prepaidDeal':1 }})
16072 kshitij.so 584
            else:
585
                toUpdate.remove(prepaidBestOne['_id'])
586
                get_mongo_connection().Catalog.Deals.update({ '_id' : prepaidBestOne['_id'] }, {'$set':{'showDeal':0,'prepaidDeal':1 }})
13918 kshitij.so 587
    if len(toUpdate) > 0:
16017 kshitij.so 588
        get_mongo_connection().Catalog.Deals.update({ '_id' : { "$in": toUpdate } }, {'$set':{'showDeal':0,'prepaidDeal':0 }},upsert=False, multi=True)
589
 
14342 kshitij.so 590
    print "Done with recomputing"
13829 kshitij.so 591
 
592
def getLatestPrice(skuBundleId, source_id):
593
    temp = []
594
    itemIds = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':skuBundleId,'source_id' : source_id}))
16026 kshitij.so 595
    item = None
13829 kshitij.so 596
    for item in itemIds:
14309 kshitij.so 597
        item['dealFlag'] = 0
598
        item['dealType'] = 0
16510 kshitij.so 599
        item['dealUrl'] = ""
17674 kshitij.so 600
        if item['source_id'] ==5 and item['rank'] == 0 and item['category_id']!=6:
15912 kshitij.so 601
            continue
15187 kshitij.so 602
        if item['source_id'] ==3:
603
            item['marketPlaceUrl'] = item['marketPlaceUrl']+'?supc='+item.get('identifier')
14309 kshitij.so 604
        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']}))
605
        if len(manualDeals) > 0:
606
            item['dealFlag'] = 1
14760 kshitij.so 607
            item['dealType'] =manualDeals[0]['dealType']
16510 kshitij.so 608
            item['dealUrl'] = manualDeals[0]['dealUrl']
14760 kshitij.so 609
        info = returnLatestPrice(item, source_id)
19153 kshitij.so 610
        if item['source_id'] != SOURCE_MAP.get('PAYTM.COM'):
611
            data = calculateCashBack(item, info['available_price'])
612
        else:
613
            if info['codAvailable'] ==0:
614
                data = calculateCashBack(item, info['gross_price'])
14760 kshitij.so 615
            else:
19153 kshitij.so 616
                data = calculateCashBack(item, info['available_price'])  #No need, can be done in if with or clause.
617
 
618
        info['cash_back'] = data['cash_back']
619
        info['cash_back_type'] = data['cash_back_type']
620
        info['netPriceAfterCashBack'] = data['netPriceAfterCashBack']
621
        info['showNetPrice'] = data['showNetPrice']
19317 kshitij.so 622
        info['category_id'] = item['category_id']
623
        info['subCategoryId'] = item['subCategoryId']
19153 kshitij.so 624
        get_mongo_connection().Catalog.Deals.update({'_id':item['_id']},{"$set":{'netPriceAfterCashBack':info['netPriceAfterCashBack']}})
14760 kshitij.so 625
        temp.append(info)
16026 kshitij.so 626
    if item is not None:
627
        try:
628
            thread = threading.Thread(target=recomputeDeal, args = (item,))
629
            thread.daemon = True
630
            thread.start()    
631
        except:
632
            print traceback.print_exc()
633
            print "Unable to compute deal for ",skuBundleId
13829 kshitij.so 634
    return temp
635
 
13864 kshitij.so 636
def getLatestPriceById(id):
637
    item = list(get_mongo_connection().Catalog.MasterData.find({'_id':id}))
14309 kshitij.so 638
    item[0]['dealFlag'] = 0
639
    item[0]['dealType'] = 0
16510 kshitij.so 640
    item[0]['dealUrl'] = ""
641
 
14309 kshitij.so 642
    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']}))
643
    if len(manualDeals) > 0:
644
        item[0]['dealFlag'] = 1
15266 kshitij.so 645
        item[0]['dealType'] =manualDeals[0]['dealType']
16510 kshitij.so 646
        item[0]['dealUrl'] = manualDeals[0]['dealUrl']
14367 kshitij.so 647
 
14431 kshitij.so 648
    info = returnLatestPrice(item[0], item[0]['source_id'])
19153 kshitij.so 649
    if item[0]['source_id'] != SOURCE_MAP.get('PAYTM.COM'):
650
        data = calculateCashBack(item[0], info['available_price'])
651
    else:
652
        if info['codAvailable'] ==0:
653
            data = calculateCashBack(item[0], info['gross_price'])
654
        else:
655
            data = calculateCashBack(item[0], info['available_price'])  #No need, can be done in if with or clause.
656
 
657
    info['cash_back'] = data['cash_back']
658
    info['cash_back_type'] = data['cash_back_type']
659
    info['netPriceAfterCashBack'] = data['netPriceAfterCashBack']
660
    info['showNetPrice'] = data['showNetPrice']
661
    get_mongo_connection().Catalog.Deals.update({'_id':item[0]['_id']},{"$set":{'netPriceAfterCashBack':info['netPriceAfterCashBack']}})
14794 kshitij.so 662
    print info
14367 kshitij.so 663
    try:
15273 kshitij.so 664
        thread = threading.Thread(target=recomputeDeal, args = (item[0],))
14367 kshitij.so 665
        thread.daemon = True
666
        thread.start()    
667
    except:
668
        print "Unable to compute deal for ",item[0]['skuBundleId']
14431 kshitij.so 669
    return info
13829 kshitij.so 670
 
14828 kshitij.so 671
def updatePriceForNotificationBundles(skuBundleId):
15266 kshitij.so 672
    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 673
    for item in itemIds:
14833 kshitij.so 674
        print item['_id']
14828 kshitij.so 675
        item['dealFlag'] = 0
676
        item['dealType'] = 0
16510 kshitij.so 677
        item['dealUrl'] = ""
14828 kshitij.so 678
        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']}))
679
        if len(manualDeals) > 0:
680
            item['dealFlag'] = 1
681
            item['dealType'] =manualDeals[0]['dealType']
16510 kshitij.so 682
            item['dealUrl'] = manualDeals[0]['dealUrl']
14828 kshitij.so 683
        info = returnLatestPrice(item, item['source_id'],False)
684
        print info
685
 
13829 kshitij.so 686
def main():
15956 kshitij.so 687
    print datetime.now()
20313 kshitij.so 688
    print "returned %s"%(str(getLatestPriceById(23014)))
15956 kshitij.so 689
    print datetime.now()
13829 kshitij.so 690
if __name__=='__main__':
13971 kshitij.so 691
    main()
692