Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
14305 amit.gupta 1
from bson.objectid import ObjectId
2
from datetime import datetime, timedelta
3
from dtr.config import PythonPropertyReader
16894 manish.sha 4
from dtr.dao import FeaturedDeals, AppTransactions, AppOfferObj
14037 kshitij.so 5
from dtr.storage import DataService
6
from dtr.storage.DataService import price_preferences, brand_preferences, \
16789 amit.gupta 7
    user_actions, Brands, app_offers, approved_app_transactions, user_app_cashbacks, \
17280 manish.sha 8
    user_app_installs, appmasters, notification_campaigns
16304 amit.gupta 9
from dtr.storage.MemCache import MemCache
16789 amit.gupta 10
from dtr.utils.MailSender import Email
11
from dtr.utils.utils import to_java_date, CB_PENDING, CB_APPROVED, CB_INIT, \
17604 kshitij.so 12
    to_py_date, CB_REJECTED, SUB_CATEGORY_MAP
16894 manish.sha 13
from sqlalchemy.sql.expression import func, func, or_, desc, asc, case
14305 amit.gupta 14
from elixir import *
15
from operator import itemgetter
16789 amit.gupta 16
from pymongo.command_cursor import CommandCursor
14305 amit.gupta 17
import pymongo
16398 amit.gupta 18
import random
14322 kshitij.so 19
import re
16789 amit.gupta 20
import time
14791 kshitij.so 21
import traceback
16894 manish.sha 22
from itertools import groupby
17280 manish.sha 23
import urllib
24
import urllib2
25
import json
17367 kshitij.so 26
import collections
27
try:
28
    import ordereddict
29
except:
30
    pass
13572 kshitij.so 31
 
18830 kshitij.so 32
 
33
import bson.son as son
13572 kshitij.so 34
con = None
17944 kshitij.so 35
es = None
18052 kshitij.so 36
try:
37
    from elasticsearch import Elasticsearch
38
except:
39
    pass
17936 kshitij.so 40
from shop2020.config.client.ConfigClient import ConfigClient
13572 kshitij.so 41
 
14037 kshitij.so 42
DataService.initialize(db_hostname="localhost")
16304 amit.gupta 43
mc = MemCache("127.0.0.1")
17936 kshitij.so 44
config_client = ConfigClient()
45
elastic_search_host = config_client.get_property('elastic_search_host')
46
elastic_search_port = config_client.get_property('elastic_search_port')
14037 kshitij.so 47
 
17936 kshitij.so 48
 
17944 kshitij.so 49
 
17035 kshitij.so 50
SOURCE_MAP = {1:'AMAZON',2:'FLIPKART',3:'SNAPDEAL',4:'SAHOLIC',5:"SHOPCLUES.COM",6:"PAYTM.COM",7:"HOMESHOP18.COM"}
14482 kshitij.so 51
 
15853 kshitij.so 52
COLLECTION_MAP = {
53
                  'ExceptionalNlc':'skuBundleId',
54
                  'SkuDealerPrices':'skuBundleId',
55
                  'SkuDiscountInfo':'skuBundleId',
56
                  'SkuSchemeDetails':'skuBundleId',
17367 kshitij.so 57
                  'DealPoints':'skuBundleId',
58
                  'FeaturedDeals': 'skuBundleId'
15853 kshitij.so 59
                  }
60
 
17944 kshitij.so 61
def get_elastic_search_connection():
62
    global es
63
    if es is None:
64
        print "Establishing connection with elastic search %s host and port %s"%(elastic_search_host,elastic_search_port)
65
        es = Elasticsearch([{'host': elastic_search_host, 'port': elastic_search_port}])
66
        return es
67
    return es
68
 
69
 
13572 kshitij.so 70
def get_mongo_connection(host='localhost', port=27017):
71
    global con
72
    if con is None:
73
        print "Establishing connection %s host and port %d" %(host,port)
74
        try:
75
            con = pymongo.MongoClient(host, port)
76
        except Exception, e:
77
            print e
78
            return None
79
    return con
80
 
13907 kshitij.so 81
def populateCashBack():
13921 kshitij.so 82
    print "Populating cashback"
83
    cashBackMap = {}
84
    itemCashBackMap = {}
13907 kshitij.so 85
    cashBack = list(get_mongo_connection().Catalog.CategoryCashBack.find())
86
    for row in cashBack:
13970 kshitij.so 87
        temp_map = {}
88
        temp_list = []
13907 kshitij.so 89
        if cashBackMap.has_key(row['source_id']):
90
            arr = cashBackMap.get(row['source_id'])
91
            for val in arr:
92
                temp_list.append(val)
93
            temp_map[row['category_id']] = row
94
            temp_list.append(temp_map)
95
            cashBackMap[row['source_id']] = temp_list 
96
        else:
97
            temp_map[row['category_id']] = row
98
            temp_list.append(temp_map)
99
            cashBackMap[row['source_id']] = temp_list
13921 kshitij.so 100
    itemCashBack = list(get_mongo_connection().Catalog.ItemCashBack.find())
101
    for row in itemCashBack:
102
        if not itemCashBackMap.has_key(row['skuId']):
103
            itemCashBackMap[row['skuId']] = row
14761 kshitij.so 104
    mc.set("item_cash_back", itemCashBackMap, 24 * 60 * 60)
105
    mc.set("category_cash_back", cashBackMap, 24 * 60 * 60)
13907 kshitij.so 106
 
13572 kshitij.so 107
def addCategoryDiscount(data):
13970 kshitij.so 108
    collection = get_mongo_connection().Catalog.CategoryDiscount
13572 kshitij.so 109
    query = []
110
    data['brand'] = data['brand'].strip().upper()
13970 kshitij.so 111
    data['discountType'] = data['discountType'].upper().strip()
13572 kshitij.so 112
    query.append({"brand":data['brand']})
113
    query.append({"category_id":data['category_id']})
114
    r = collection.find({"$and":query})
115
    if r.count() > 0:
13639 kshitij.so 116
        return {0:"Brand & Category info already present."}
13572 kshitij.so 117
    else:
118
        collection.insert(data)
13970 kshitij.so 119
        get_mongo_connection().Catalog.MasterData.update({'brand':data['brand'],'category_id':data['category_id']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
13639 kshitij.so 120
        return {1:"Data added successfully"}
13572 kshitij.so 121
 
13970 kshitij.so 122
def updateCategoryDiscount(data,_id):
123
    try:
124
        collection = get_mongo_connection().Catalog.CategoryDiscount
125
        collection.update({'_id':ObjectId(_id)},{"$set":{'min_discount':data['min_discount'],'max_discount':data['max_discount'],'discountType':data['discountType'].upper().strip()}},upsert=False, multi = False)
126
        get_mongo_connection().Catalog.MasterData.update({'brand':data['brand'],'category_id':data['category_id']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
127
        return {1:"Data updated successfully"}
128
    except:
129
        return {0:"Data not updated."}
130
 
131
 
13572 kshitij.so 132
def getAllCategoryDiscount():
133
    data = []
13970 kshitij.so 134
    collection = get_mongo_connection().Catalog.CategoryDiscount
13572 kshitij.so 135
    cursor = collection.find()
136
    for val in cursor:
137
        data.append(val)
138
    return data
139
 
14553 kshitij.so 140
def __getBundledSkusfromSku(sku):
141
    masterData =  get_mongo_connection().Catalog.MasterData.find_one({"_id":sku},{"skuBundleId":1})
142
    if masterData is not None:
143
        return list(get_mongo_connection().Catalog.MasterData.find({"skuBundleId":masterData.get('skuBundleId')},{'_id':1,'skuBundleId':1}))
144
    else:
145
        return []
13572 kshitij.so 146
 
15853 kshitij.so 147
def addSchemeDetailsForSku(data):
148
    collection = get_mongo_connection().Catalog.SkuSchemeDetails
149
    result = collection.find_one({'skuBundleId':data['skuBundleId']})
150
    if result is None:
14553 kshitij.so 151
        collection.insert(data)
15853 kshitij.so 152
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
14553 kshitij.so 153
        return {1:"Data added successfully"}
15853 kshitij.so 154
    return {1:"BundleId info already present"}
155
 
14069 kshitij.so 156
def getAllSkuWiseSchemeDetails(offset, limit):
13572 kshitij.so 157
    data = []
13970 kshitij.so 158
    collection = get_mongo_connection().Catalog.SkuSchemeDetails
14071 kshitij.so 159
    cursor = collection.find().skip(offset).limit(limit)
13572 kshitij.so 160
    for val in cursor:
15853 kshitij.so 161
        master = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':val['skuBundleId']})
162
        if master is not None:
163
            val['brand'] = master['brand']
164
            val['source_product_name'] = master['source_product_name']
14069 kshitij.so 165
        else:
166
            val['brand'] = ""
167
            val['source_product_name'] = ""
13572 kshitij.so 168
        data.append(val)
169
    return data
170
 
15853 kshitij.so 171
def addSkuDiscountInfo(data):
172
    collection = get_mongo_connection().Catalog.SkuDiscountInfo
173
    cursor = collection.find_one({"skuBundleId":data['skuBundleId']})
174
    if cursor is not None:
175
        return {0:"BundleId information already present."}
13572 kshitij.so 176
    else:
15853 kshitij.so 177
        collection.insert(data)
178
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
13639 kshitij.so 179
        return {1:"Data added successfully"}
13572 kshitij.so 180
 
13970 kshitij.so 181
def getallSkuDiscountInfo(offset, limit):
13572 kshitij.so 182
    data = []
13970 kshitij.so 183
    collection = get_mongo_connection().Catalog.SkuDiscountInfo
184
    cursor = collection.find().skip(offset).limit(limit)
13572 kshitij.so 185
    for val in cursor:
15853 kshitij.so 186
        master = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':val['skuBundleId']})
187
        if master is not None:
188
            val['brand'] = master['brand']
189
            val['source_product_name'] = master['source_product_name']
13970 kshitij.so 190
        else:
191
            val['brand'] = ""
192
            val['source_product_name'] = ""
13572 kshitij.so 193
        data.append(val)
194
    return data
195
 
13970 kshitij.so 196
def updateSkuDiscount(data,_id):
197
    try:
198
        collection = get_mongo_connection().Catalog.SkuDiscountInfo
199
        collection.update({'_id':ObjectId(_id)},{"$set":{'min_discount':data['min_discount'],'max_discount':data['max_discount'],'discountType':data['discountType'].upper().strip()}},upsert=False, multi = False)
15853 kshitij.so 200
        get_mongo_connection().Catalog.MasterData.update({'_id':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
13970 kshitij.so 201
        return {1:"Data updated successfully"}
202
    except:
203
        return {0:"Data not updated."}
204
 
205
 
15853 kshitij.so 206
def addExceptionalNlc(data):
207
    collection = get_mongo_connection().Catalog.ExceptionalNlc
208
    cursor = collection.find_one({"skuBundleId":data['skuBundleId']})
209
    if cursor is not None:
210
        return {0:"BundleId information already present."}
13572 kshitij.so 211
    else:
15853 kshitij.so 212
        collection.insert(data)
213
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
13639 kshitij.so 214
        return {1:"Data added successfully"}
13572 kshitij.so 215
 
13970 kshitij.so 216
def getAllExceptionlNlcItems(offset, limit):
13572 kshitij.so 217
    data = []
13970 kshitij.so 218
    collection = get_mongo_connection().Catalog.ExceptionalNlc
14071 kshitij.so 219
    cursor = collection.find().skip(offset).limit(limit)
13572 kshitij.so 220
    for val in cursor:
15853 kshitij.so 221
        master = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':val['skuBundleId']})
222
        if master is not None:
223
            val['brand'] = master['brand']
224
            val['source_product_name'] = master['source_product_name']
13970 kshitij.so 225
        else:
226
            val['brand'] = ""
227
            val['source_product_name'] = ""
13572 kshitij.so 228
        data.append(val)
229
    return data
230
 
14005 amit.gupta 231
def getMerchantOrdersByUser(userId, page=1, window=50, searchMap={}):
232
    if searchMap is None:
233
        searchMap = {}
13603 amit.gupta 234
    if page==None:
235
        page = 1
236
 
237
    if window==None:
238
        window = 50
239
    result = {}
13582 amit.gupta 240
    skip = (page-1)*window
14005 amit.gupta 241
 
14353 amit.gupta 242
    if userId is not None:
243
        searchMap['userId'] = userId
13603 amit.gupta 244
    collection = get_mongo_connection().Dtr.merchantOrder
14609 amit.gupta 245
    cursor = collection.find(searchMap).sort("orderId",-1)
13603 amit.gupta 246
    total_count = cursor.count()
247
    pages = total_count/window + (0 if total_count%window==0 else 1)  
248
    print "total_count", total_count
249
    if total_count > skip:
13999 amit.gupta 250
        cursor = cursor.skip(skip).limit(window)
13603 amit.gupta 251
        orders = []
252
        for order in cursor:
14002 amit.gupta 253
            del(order["_id"])
254
            orders.append(order)
13603 amit.gupta 255
        result['data'] = orders
256
        result['window'] = window
257
        result['totalCount'] = total_count 
258
        result['currCount'] = cursor.count()
259
        result['totalPages'] = pages
260
        result['currPage'] = page    
261
        return result
262
    else:
263
        return result
13630 kshitij.so 264
 
13927 amit.gupta 265
def getRefunds(userId, page=1, window=10):
266
    if page==None:
267
        page = 1
268
 
269
    if window==None:
13995 amit.gupta 270
        window = 10
13927 amit.gupta 271
    result = {}
272
    skip = (page-1)*window
16737 amit.gupta 273
    con = get_mongo_connection()
274
    collection = con.Dtr.refund
275
    user = con.Dtr.user
16754 amit.gupta 276
    credited = user.find_one({"userId":userId})
277
    if credited:
278
        credited = credited.get("credited")
279
    else:
280
        credited=0
281
 
13927 amit.gupta 282
    cursor = collection.find({"userId":userId})
283
    total_count = cursor.count()
284
    pages = total_count/window + (0 if total_count%window==0 else 1)  
285
    print "total_count", total_count
286
    if total_count > skip:
14668 amit.gupta 287
        cursor = cursor.skip(skip).limit(window).sort([('batch',-1)])
13927 amit.gupta 288
        refunds = []
289
        for refund in cursor:
290
            del(refund["_id"])
291
            refunds.append(refund)
16754 amit.gupta 292
        result['credited'] = credited
13927 amit.gupta 293
        result['data'] = refunds
294
        result['window'] = window
295
        result['totalCount'] = total_count 
296
        result['currCount'] = cursor.count()
297
        result['totalPages'] = pages
298
        result['currPage'] = page    
299
        return result
300
    else:
301
        return result
302
 
303
def getPendingRefunds(userId):
13991 amit.gupta 304
    print type(userId)
13927 amit.gupta 305
    result = get_mongo_connection().Dtr.merchantOrder\
306
        .aggregate([
16398 amit.gupta 307
                    {'$match':{'subOrders.cashBackStatus':CB_APPROVED, 'userId':userId}},
13927 amit.gupta 308
                    {'$unwind':"$subOrders"},
16398 amit.gupta 309
                    {'$match':{'subOrders.cashBackStatus':CB_APPROVED}},
13927 amit.gupta 310
                    { 
311
                     '$group':{
312
                               '_id':None,
313
                               'amount': { '$sum':'$subOrders.cashBackAmount'},
314
                               }
315
                     }
13987 amit.gupta 316
                ])['result']
317
 
318
    if len(result)>0:
319
        result = result[0]        
320
        result.pop("_id")
321
    else:
322
        result={}
323
        result['amount'] = 0.0
14305 amit.gupta 324
    result['nextCredit'] = datetime.strftime(next_weekday(datetime.now(), int(PythonPropertyReader.getConfig('CREDIT_DAY_OF_WEEK'))),"%Y-%m-%d %H:%M:%S")
13927 amit.gupta 325
    return result
14037 kshitij.so 326
 
14671 amit.gupta 327
def getPendingCashbacks(userId):
328
    result = get_mongo_connection().Dtr.merchantOrder\
329
        .aggregate([
16398 amit.gupta 330
                    {'$match':{'subOrders.cashBackStatus':CB_PENDING, 'userId':userId}},
14671 amit.gupta 331
                    {'$unwind':"$subOrders"},
16398 amit.gupta 332
                    {'$match':{'subOrders.cashBackStatus':CB_PENDING}},
14671 amit.gupta 333
                    { 
334
                     '$group':{
335
                               '_id':None,
336
                               'amount': { '$sum':'$subOrders.cashBackAmount'},
337
                               }
338
                     }
339
                ])['result']
340
 
341
    if len(result)>0:
342
        result = result[0]        
343
        result.pop("_id")
344
    else:
345
        result={}
346
        result['amount'] = 0.0
347
    return result
348
 
17369 kshitij.so 349
def __constructDummyDealObject(skuBundleId):
350
    temp =[]
19193 kshitij.so 351
    deals = get_mongo_connection().Catalog.Deals.find({"skuBundleId":skuBundleId,"$or":[{"showDeal":1}, {"prepaidDeal":1}]},{'_id':1,'category_id':1,'brand':1,'totalPoints':1,'bestSellerPoints':1,'nlcPoints':1,'rank':1,'available_price':1,'dealType':1,'source_id':1,'brand_id':1,'skuBundleId':1,'dp':1, 'showDp':1, 'gross_price':1,'subCategoryId':1,'netPriceAfterCashBack':1})
17369 kshitij.so 352
    for d in deals:
353
        d['persPoints'] = 0
354
        temp.append(d)
355
    return temp
356
 
357
 
358
 
14037 kshitij.so 359
def __populateCache(userId):
17369 kshitij.so 360
    try:
361
        if mc.get("featured_deals") is None:
362
            __populateFeaturedDeals()
363
        featuredDeals = mc.get("featured_deals")
364
 
365
    except Exception as e:
366
        print traceback.print_exc()
17469 kshitij.so 367
        featuredDeals = {3:{},5:{},6:{}}
17369 kshitij.so 368
 
369
    fd_bundles = []
370
 
371
    for catMap in featuredDeals.itervalues():
372
        for fd_map in catMap.itervalues():
17541 kshitij.so 373
            if not fd_map.get('skuBundleId') in fd_bundles:
374
                fd_bundles.append(fd_map.get('skuBundleId'))
17369 kshitij.so 375
 
14037 kshitij.so 376
    print "Populating memcache for userId",userId
377
    outer_query = []
16067 kshitij.so 378
    outer_query.append({ "$or": [ { "showDeal": 1} , { "prepaidDeal": 1 } ] })
14037 kshitij.so 379
    query = {}
16170 kshitij.so 380
    query['$gt'] = -100
14037 kshitij.so 381
    outer_query.append({'totalPoints':query})
382
    brandPrefMap = {}
383
    pricePrefMap = {}
384
    actionsMap = {}
385
    brand_p = session.query(price_preferences).filter_by(user_id=userId).all()
386
    for x in brand_p:
387
        pricePrefMap[x.category_id] = [x.min_price,x.max_price]
388
    for x in session.query(brand_preferences).filter_by(user_id=userId).all():
389
        temp_map = {}
390
        if brandPrefMap.has_key((x.brand).strip().upper()):
391
            val = brandPrefMap.get((x.brand).strip().upper())
392
            temp_map[x.category_id] = 1 if x.status == 'show' else 0
393
            val.append(temp_map)
394
        else:
395
            temp = []
396
            temp_map[x.category_id] = 1 if x.status == 'show' else 0
397
            temp.append(temp_map)
398
            brandPrefMap[(x.brand).strip().upper()] = temp
399
 
400
    for x in session.query(user_actions).filter_by(user_id=userId).all():
401
        actionsMap[x.store_product_id] = 1 if x.action == 'like' else 0
19193 kshitij.so 402
    all_deals = list(get_mongo_connection().Catalog.Deals.find({"$and":outer_query},{'_id':1,'category_id':1,'brand':1,'totalPoints':1,'bestSellerPoints':1,'nlcPoints':1,'rank':1,'available_price':1,'dealType':1,'source_id':1,'brand_id':1,'skuBundleId':1,'dp':1, 'showDp':1, 'gross_price':1, 'subCategoryId':1,'netPriceAfterCashBack':1}).sort([('totalPoints',pymongo.DESCENDING),('bestSellerPoints',pymongo.DESCENDING),('nlcPoints',pymongo.DESCENDING),('rank',pymongo.DESCENDING)]))
14037 kshitij.so 403
    mobile_deals = []
404
    tablet_deals = []
17469 kshitij.so 405
    accessories_deals = []
14037 kshitij.so 406
    for deal in all_deals:
19135 kshitij.so 407
 
17369 kshitij.so 408
        try:
409
            fd_bundles.remove(deal.get('skuBundleId'))
410
        except:
411
            pass
412
 
14037 kshitij.so 413
        if actionsMap.get(deal['_id']) == 0:
414
            fav_weight =.25
415
        elif actionsMap.get(deal['_id']) == 1:
416
            fav_weight = 1.5
417
        else:
418
            fav_weight = 1
419
 
420
        if brandPrefMap.get(deal['brand'].strip().upper()) is not None:
17469 kshitij.so 421
 
14037 kshitij.so 422
            brand_weight = 1
423
            for brandInfo in brandPrefMap.get(deal['brand'].strip().upper()):
424
                if brandInfo.get(deal['category_id']) is not None:
425
                    if brandInfo.get(deal['category_id']) == 1:
14055 kshitij.so 426
                        brand_weight = 2.0
14037 kshitij.so 427
        else:
428
            brand_weight = 1
429
 
430
        if pricePrefMap.get(deal['category_id']) is not None:
431
 
432
            if deal['available_price'] >= pricePrefMap.get(deal['category_id'])[0] and deal['available_price'] <= pricePrefMap.get(deal['category_id'])[1]:
433
                asp_weight = 1.5
434
            elif  deal['available_price'] >= pricePrefMap.get(deal['category_id'])[0] - 0.5 * pricePrefMap.get(deal['category_id'])[0] and deal['available_price'] <= pricePrefMap.get(deal['category_id'])[1] + 0.5 * pricePrefMap.get(deal['category_id'])[1]:
435
                asp_weight = 1.2
436
            else:
437
                asp_weight = 1
438
        else:
439
            asp_weight = 1
440
 
441
        persPoints = deal['totalPoints'] * fav_weight * brand_weight * asp_weight
442
        deal['persPoints'] = persPoints
443
 
444
        if deal['category_id'] ==3:
445
            mobile_deals.append(deal)
446
        elif deal['category_id'] ==5:
447
            tablet_deals.append(deal)
17469 kshitij.so 448
        elif deal['category_id'] ==6:
449
            accessories_deals.append(deal)
14037 kshitij.so 450
        else:
451
            continue
452
 
14144 kshitij.so 453
    session.close()
17367 kshitij.so 454
 
455
    mobile_deals = sorted(mobile_deals, key = lambda x: (x['persPoints'],x['totalPoints'],x['bestSellerPoints'], x['nlcPoints'], x['rank']),reverse=True)
456
    tablet_deals = sorted(tablet_deals, key = lambda x: (x['persPoints'],x['totalPoints'],x['bestSellerPoints'], x['nlcPoints'], x['rank']),reverse=True)
17469 kshitij.so 457
    accessories_deals = sorted(accessories_deals, key = lambda x: (x['persPoints'],x['totalPoints'],x['bestSellerPoints'], x['nlcPoints'], x['rank']),reverse=True)
17367 kshitij.so 458
 
459
 
17369 kshitij.so 460
    if len(fd_bundles) > 0:
461
        print "There is still bundle in feature deals with points less than -100.Lets add info"
462
        for skuBundleId in fd_bundles:
463
            dummyDealObjList = __constructDummyDealObject(skuBundleId)
464
            for dummyDealObj in dummyDealObjList:
465
                if dummyDealObj['category_id'] ==3:
466
                    mobile_deals.append(dummyDealObj)
467
                elif dummyDealObj['category_id'] ==5:
468
                    tablet_deals.append(dummyDealObj)
17469 kshitij.so 469
                elif dummyDealObj['category_id'] ==6:
470
                    accessories_deals.append(dummyDealObj)
17369 kshitij.so 471
                else:
472
                    pass
473
 
17469 kshitij.so 474
    for super_category, categoryFeaturedDeals in featuredDeals.iteritems():
475
        for val in categoryFeaturedDeals.itervalues():
476
            dummyDealObjList = __constructDummyDealObject(val.get('skuBundleId'))
477
            for dummyDealObj in dummyDealObjList:
478
                if super_category == dummyDealObj['category_id']:
479
                    continue  
480
 
481
                if super_category ==3:
482
                    mobile_deals.append(dummyDealObj)
483
                elif super_category ==5:
484
                    tablet_deals.append(dummyDealObj)
485
                elif super_category ==6:
486
                    accessories_deals.append(dummyDealObj)
487
                else:
488
                    pass
489
 
17367 kshitij.so 490
    sortedMapMobiles = {}
491
    rankMapMobiles = {}
492
    rankMobiles = 0
493
 
494
    blockedRanksMobiles = []
495
    blockedSkuBundlesMobiles = []
496
    blockedInfoMobiles = {}
497
 
498
    featuredDealsMobiles = featuredDeals.get(3)
499
 
500
    for k, v in featuredDealsMobiles.iteritems():
17469 kshitij.so 501
        blockedRanksMobiles.append(k-1)
502
        blockedSkuBundlesMobiles.append(v.get('skuBundleId'))
17367 kshitij.so 503
 
504
 
505
    for sorted_deal in mobile_deals:
17369 kshitij.so 506
 
17367 kshitij.so 507
        while(True):
508
            if rankMobiles in blockedRanksMobiles:
509
                rankMobiles = rankMobiles +1
510
            else:
511
                break
512
 
513
        if sorted_deal['skuBundleId'] in blockedSkuBundlesMobiles:
514
            if blockedInfoMobiles.has_key(sorted_deal['skuBundleId']):
515
                blockedInfoMobiles.get(sorted_deal['skuBundleId']).append(sorted_deal)
516
            else:
517
                blockedInfoMobiles[sorted_deal['skuBundleId']] = [sorted_deal]
518
            continue
519
 
520
        if sortedMapMobiles.get(sorted_deal['skuBundleId']) is None:
521
            sortedMapMobiles[sorted_deal['skuBundleId']] = {rankMobiles:[sorted_deal]}
522
            rankMapMobiles[rankMobiles] = (sortedMapMobiles[sorted_deal['skuBundleId']].values())[0]
523
            rankMobiles = rankMobiles +1
524
        else:
525
            for temp_list in sortedMapMobiles.get(sorted_deal['skuBundleId']).itervalues():
526
                temp_list.append(sorted_deal)
527
            rankMapMobiles[(sortedMapMobiles.get(sorted_deal['skuBundleId']).keys())[0]] = temp_list
528
 
529
 
530
    for rank in blockedRanksMobiles:
17369 kshitij.so 531
        if blockedInfoMobiles.get((featuredDealsMobiles.get(rank+1)).get('skuBundleId')) is not None:
532
            rankMapMobiles[rank] = blockedInfoMobiles.get((featuredDealsMobiles.get(rank+1)).get('skuBundleId'))
17367 kshitij.so 533
 
534
 
535
    sortedMapTablets = {}
536
    rankMapTablets = {}
537
    rankTablets = 0
538
 
539
    blockedRanksTablets = []
540
    blockedSkuBundlesTablets = []
541
    blockedInfoTablets = {}
542
 
543
    featuredDealsTablets = featuredDeals.get(5)
544
 
545
 
546
    for k, v in featuredDealsTablets.iteritems():
17469 kshitij.so 547
        blockedRanksTablets.append(k-1)
548
        blockedSkuBundlesTablets.append(v.get('skuBundleId'))
549
 
17367 kshitij.so 550
 
551
    for sorted_deal in tablet_deals:
552
        while(True):
553
            if rankTablets in blockedRanksTablets:
554
                rankTablets = rankTablets +1
555
            else:
556
                break
557
 
558
        if sorted_deal['skuBundleId'] in blockedSkuBundlesTablets:
559
            if blockedInfoTablets.has_key(sorted_deal['skuBundleId']):
560
                blockedInfoTablets.get(sorted_deal['skuBundleId']).append(sorted_deal)
561
            else:
562
                blockedInfoTablets[sorted_deal['skuBundleId']] = [sorted_deal]
563
            continue
564
 
565
        if sortedMapTablets.get(sorted_deal['skuBundleId']) is None:
566
            sortedMapTablets[sorted_deal['skuBundleId']] = {rankTablets:[sorted_deal]}
567
            rankMapTablets[rankTablets] = (sortedMapTablets[sorted_deal['skuBundleId']].values())[0]
568
            rankTablets = rankTablets +1
569
        else:
570
            for temp_list in sortedMapTablets.get(sorted_deal['skuBundleId']).itervalues():
571
                temp_list.append(sorted_deal)
572
            rankMapTablets[(sortedMapTablets.get(sorted_deal['skuBundleId']).keys())[0]] = temp_list
573
 
574
    for rank in blockedRanksTablets:
17369 kshitij.so 575
        if blockedInfoTablets.get((featuredDealsTablets.get(rank+1)).get('skuBundleId')) is not None:
576
            rankMapTablets[rank] = blockedInfoTablets.get((featuredDealsTablets.get(rank+1)).get('skuBundleId'))
17469 kshitij.so 577
 
17367 kshitij.so 578
 
17469 kshitij.so 579
    sortedMapAccessories = {}
580
    rankMapAccessories = {}
581
    rankAccessories = 0
582
 
583
    blockedRanksAccessories = []
584
    blockedSkuBundlesAccessories = []
585
    blockedInfoAccessories = {}
586
 
587
    featuredDealsAccessories = featuredDeals.get(6)
588
 
589
    for k, v in featuredDealsAccessories.iteritems():
590
        blockedRanksAccessories.append(k-1)
591
        blockedSkuBundlesAccessories.append(v.get('skuBundleId'))
592
 
593
 
594
    for sorted_deal in accessories_deals:
595
 
596
        while(True):
597
            if rankAccessories in blockedRanksAccessories:
598
                rankAccessories = rankAccessories +1
599
            else:
600
                break
601
 
602
        if sorted_deal['skuBundleId'] in blockedSkuBundlesAccessories:
603
            if blockedInfoAccessories.has_key(sorted_deal['skuBundleId']):
604
                blockedInfoAccessories.get(sorted_deal['skuBundleId']).append(sorted_deal)
605
            else:
606
                blockedInfoAccessories[sorted_deal['skuBundleId']] = [sorted_deal]
607
            continue
608
 
609
        if sortedMapAccessories.get(sorted_deal['skuBundleId']) is None:
610
            sortedMapAccessories[sorted_deal['skuBundleId']] = {rankAccessories:[sorted_deal]}
611
            rankMapAccessories[rankAccessories] = (sortedMapAccessories[sorted_deal['skuBundleId']].values())[0]
612
            rankAccessories = rankAccessories +1
613
        else:
614
            for temp_list in sortedMapAccessories.get(sorted_deal['skuBundleId']).itervalues():
615
                temp_list.append(sorted_deal)
616
            rankMapAccessories[(sortedMapAccessories.get(sorted_deal['skuBundleId']).keys())[0]] = temp_list
617
 
618
 
619
    for rank in blockedRanksAccessories:
620
        if blockedInfoAccessories.get((featuredDealsAccessories.get(rank+1)).get('skuBundleId')) is not None:
621
            rankMapAccessories[rank] = blockedInfoAccessories.get((featuredDealsAccessories.get(rank+1)).get('skuBundleId'))
622
 
623
 
624
    mem_cache_val = {3:mobile_deals, 5:tablet_deals, 6: accessories_deals,"3_rankMap": rankMapMobiles,"5_rankMap": rankMapTablets,"6_rankMap": rankMapAccessories }
14037 kshitij.so 625
    mc.set(str(userId), mem_cache_val)
626
 
627
 
14531 kshitij.so 628
def __populateFeaturedDeals():
17367 kshitij.so 629
    print "Populating featured deals....."
630
    featuredDealsMobiles = {}
631
    featuredDealsTablets = {}
17469 kshitij.so 632
    featuredDealsAccessories = {}
17618 kshitij.so 633
    activeFeaturedDeals = get_mongo_connection().Catalog.FeaturedDeals.find({'startDate':{'$lte':to_java_date(datetime.now())},'endDate':{'$gte':to_java_date(datetime.now())}})
14531 kshitij.so 634
    for activeFeaturedDeal in activeFeaturedDeals:
17367 kshitij.so 635
        deals = get_mongo_connection().Catalog.Deals.find({"skuBundleId":activeFeaturedDeal.get('skuBundleId'),"$or":[{"showDeal":1}, {"prepaidDeal":1}]})
636
        for deal in deals:
637
            if deal.get('available_price') <= activeFeaturedDeal.get('thresholdPrice'):
17469 kshitij.so 638
                for category_id, rank  in activeFeaturedDeal['otherInfo'].iteritems():
639
                    f_deal = {'skuBundleId':activeFeaturedDeal.get('skuBundleId'), 'thresholdPrice':activeFeaturedDeal.get('thresholdPrice'), 'rank':rank,'category_id':int(category_id),'totalPoints':activeFeaturedDeal.get('totalPoints')}
640
                    if f_deal['category_id'] == 3:
641
                        featuredDealsMobiles[rank] = f_deal
642
                    elif f_deal['category_id']==5:
643
                        featuredDealsTablets[rank] = f_deal
644
                    elif f_deal['category_id']==6:
645
                        featuredDealsAccessories[rank] = f_deal
17367 kshitij.so 646
                break
17469 kshitij.so 647
 
648
#                f_deal = {'skuBundleId':activeFeaturedDeal.get('skuBundleId'), 'thresholdPrice':activeFeaturedDeal.get('thresholdPrice'), 'rank':activeFeaturedDeal.get('rank'),'category_id':activeFeaturedDeal.get('category_id'),'totalPoints':activeFeaturedDeal.get('totalPoints')}
649
#                 if activeFeaturedDeal.get('category_id') == 3:
650
#                     featuredDealsMobiles[activeFeaturedDeal.get('rank')] = f_deal
651
#                 else:
652
#                     featuredDealsTablets[activeFeaturedDeal.get('rank')] = f_deal
653
#                 break
654
 
17367 kshitij.so 655
 
17469 kshitij.so 656
    mc.set("featured_deals", {3:featuredDealsMobiles,5:featuredDealsTablets,6:featuredDealsAccessories}, 600)
14037 kshitij.so 657
 
17618 kshitij.so 658
def __populateFeaturedDealsForDealObject():
659
    print "Caching deal objects...."
660
    featuredDealObjectMobiles = {}
661
    featuredDealObjectTablets = {}
662
    featuredDealObjectAccessories = {}
663
    dealObjects = get_mongo_connection().Catalog.FeaturedDealsDealObject.find({'startDate':{'$lte':to_java_date(datetime.now())},'endDate':{'$gte':to_java_date(datetime.now())}})
664
    for dealObject in dealObjects:
665
        d_object = list(get_mongo_connection().Catalog.DealObject.find({'_id':dealObject['_id']}))
666
        if len(d_object) == 0:
667
            continue
668
        for category_id, rank  in dealObject['otherInfo'].iteritems():
669
            d_object[0]['dealObject'] = 1
670
            f_deal = {'rank':rank,'category_id':int(category_id),'object':d_object[0]}
671
            if f_deal['category_id'] == 3:
672
                featuredDealObjectMobiles[rank] = f_deal
673
            elif f_deal['category_id']==5:
674
                featuredDealObjectTablets[rank] = f_deal
675
            elif f_deal['category_id']==6:
676
                featuredDealObjectAccessories[rank] = f_deal
677
    mc.set("featured_deals_deal_object", {3:featuredDealObjectMobiles,5:featuredDealObjectTablets,6:featuredDealObjectAccessories}, 600)
17619 kshitij.so 678
    print mc.get('featured_deals_deal_object')
17618 kshitij.so 679
 
14791 kshitij.so 680
def getNewDeals(userId, category_id, offset, limit, sort, direction, filterData=None):
17469 kshitij.so 681
    if mc.get("category_cash_back") is None or not bool(mc.get("category_cash_back")):
13921 kshitij.so 682
        populateCashBack()
14037 kshitij.so 683
 
16079 kshitij.so 684
    dealsListMap = []
14037 kshitij.so 685
    user_specific_deals = mc.get(str(userId))
686
    if user_specific_deals is None:
687
        __populateCache(userId)
688
        user_specific_deals = mc.get(str(userId))
14038 kshitij.so 689
    else:
690
        print "Getting user deals from cache"
14037 kshitij.so 691
    category_specific_deals = user_specific_deals.get(category_id)
692
 
17367 kshitij.so 693
    insert_featured_deals = False
14037 kshitij.so 694
    if sort is None or direction is None:
17367 kshitij.so 695
        insert_featured_deals = True
696
        rankMap = user_specific_deals.get(str(category_id)+"_rankMap")
14037 kshitij.so 697
    else:
698
        if sort == "bestSellerPoints":
699
            sorted_deals = sorted(category_specific_deals, key = lambda x: (x['bestSellerPoints'], x['rank'], x['nlcPoints']),reverse=True)
700
        else:
701
            if direction == -1:
702
                rev = True
703
            else:
704
                rev = False
705
            sorted_deals = sorted(category_specific_deals, key = lambda x: (x['available_price']),reverse=rev)
706
 
14791 kshitij.so 707
 
17367 kshitij.so 708
    filtered_deals = []
17668 kshitij.so 709
    dataExist = True
14791 kshitij.so 710
    if filterData is not None:
711
        try:
17669 kshitij.so 712
            filtered_deals = filterDeals(category_specific_deals, filterData)
713
            if len(filtered_deals)==0:
714
                dataExist = False
14791 kshitij.so 715
        except:
16067 kshitij.so 716
            traceback.print_exc()
17668 kshitij.so 717
    if dataExist:
14791 kshitij.so 718
 
17668 kshitij.so 719
        if not insert_featured_deals:
720
            sortedMap = {}
721
            rankMap = {}
722
            rank = 0
723
            for sorted_deal in sorted_deals:
724
 
725
                if len(filtered_deals) > 0 and  sorted_deal['skuBundleId'] not in filtered_deals:
726
                    continue
727
 
728
                if sortedMap.get(sorted_deal['skuBundleId']) is None:
729
                    sortedMap[sorted_deal['skuBundleId']] = {rank:[sorted_deal]}
730
                    rankMap[rank] = (sortedMap[sorted_deal['skuBundleId']].values())[0]
731
                    rank = rank +1
732
                else:
733
                    for temp_list in sortedMap.get(sorted_deal['skuBundleId']).itervalues():
734
                        temp_list.append(sorted_deal)
735
                    rankMap[(sortedMap.get(sorted_deal['skuBundleId']).keys())[0]] = temp_list
736
        else:
737
            filterMap = {}
738
            rank = 0
739
            if len(filtered_deals) > 0:
740
                try:
741
                    od = collections.OrderedDict(sorted(rankMap.items()))
742
                except:
743
                    od = ordereddict.OrderedDict(sorted(rankMap.items()))
744
                for k, v in od.iteritems():
745
                    if v[0].get('skuBundleId') in filtered_deals:
746
                        filterMap[rank] = v
747
                        rank =rank+1
748
                rankMap = filterMap
749
 
750
        rankCounter = offset
751
        if filterData is None:
752
            if mc.get("featured_deals_deal_object") is None or not bool(mc.get("featured_deals_deal_object")):
753
                try:
754
                    __populateFeaturedDealsForDealObject()
755
                    fd_dealObject = mc.get("featured_deals_deal_object")
756
                except:
757
                    fd_dealObject = {3:{},5:{},6:{}}
17367 kshitij.so 758
            else:
17668 kshitij.so 759
                fd_dealObject = mc.get("featured_deals_deal_object")
760
 
17367 kshitij.so 761
    else:
17668 kshitij.so 762
        rankMap = {}
17618 kshitij.so 763
 
17627 kshitij.so 764
    for dealList in [rankMap.get(k, []) for k in range(offset, offset+limit)]:
17629 kshitij.so 765
        if filterData is None:
17627 kshitij.so 766
            while(True):
767
 
768
                rankCounter = rankCounter+1
769
                if (fd_dealObject.get(category_id).get(rankCounter)) is not None:
770
                    deal_object_temp = []
771
                    deal_object_temp.append(fd_dealObject.get(category_id).get(rankCounter).get('object'))
772
                    dealsListMap.append(deal_object_temp)
773
                else:
774
                    break
17620 kshitij.so 775
 
16079 kshitij.so 776
        temp = []
17367 kshitij.so 777
        if dealList is None or len(dealList)==0:
778
            continue
16067 kshitij.so 779
        for d in dealList:
780
            item = list(get_mongo_connection().Catalog.MasterData.find({'_id':d['_id']}))
16320 kshitij.so 781
            if len(item) ==0:
782
                continue
16079 kshitij.so 783
            item[0]['persPoints'] = d['persPoints']
784
            if d['dealType'] == 1 and d['source_id'] ==1:
16511 kshitij.so 785
                try:
786
                    manualDeal = list(get_mongo_connection().Catalog.ManualDeals.find({'sku':d['_id'],'startDate':{'$lte':to_java_date(datetime.now())},'endDate':{'$gte':to_java_date(datetime.now())}}))
787
                    item[0]['marketPlaceUrl'] = manualDeal[0]['dealUrl'].strip()
788
                except:
789
                    pass
16079 kshitij.so 790
            elif d['source_id'] ==3:
791
                item[0]['marketPlaceUrl'] = item[0]['marketPlaceUrl']+'?supc='+item[0].get('identifier')
792
            else:
793
                pass 
794
            try:
795
                cashBack = getCashBack(item[0]['_id'], item[0]['source_id'], item[0]['category_id'])
796
                if not cashBack or cashBack.get('cash_back_status')!=1:
14037 kshitij.so 797
                    item[0]['cash_back_type'] = 0
798
                    item[0]['cash_back'] = 0
16079 kshitij.so 799
                else:
17180 kshitij.so 800
                    if cashBack.get('maxCashBack') is not None:
801
 
802
                        if cashBack.get('cash_back_type') ==1 and (float(cashBack.get('cash_back'))*item[0]['available_price'])/100 > cashBack.get('maxCashBack'):
803
                            cashBack['cash_back_type'] = 2
804
                            cashBack['cash_back'] = cashBack['maxCashBack']
805
                        elif cashBack.get('cash_back_type') ==2 and cashBack.get('cash_back') > cashBack.get('maxCashBack'):
806
                            cashBack['cash_back'] = cashBack['maxCashBack']
807
 
16079 kshitij.so 808
                    item[0]['cash_back_type'] = int(cashBack['cash_back_type'])
809
                    item[0]['cash_back'] = cashBack['cash_back']
810
            except:
811
                print "Error in adding cashback to deals"
812
                item[0]['cash_back_type'] = 0
813
                item[0]['cash_back'] = 0
16252 kshitij.so 814
            try:
815
                item[0]['dp'] = d['dp']
816
                item[0]['showDp'] = d['showDp']
817
            except:
818
                item[0]['dp'] = 0.0
819
                item[0]['showDp'] = 0
16483 kshitij.so 820
            try:
821
                item[0]['thumbnail'] = item[0]['thumbnail'].strip()
822
            except:
17115 manish.sha 823
                pass
17603 kshitij.so 824
 
825
            try:
826
                if item[0]['showVideo']==0:
827
                    item[0]['videoLink'] =""
828
            except:
829
                item[0]['videoLink'] =""
17937 kshitij.so 830
            try:
831
                if item[0]['quantity'] >1:
832
                    ppq = float(item[0]['available_price'])/item[0]['quantity']
833
 
834
                    if ppq == round(ppq):
835
                        item[0]['ppq'] = int(ppq)
836
                    else:
837
                        item[0]['ppq'] = round(ppq,2)
838
                else:
839
                    item[0]['ppq'] = 0
840
            except:
841
                item[0]['ppq'] = 0
17627 kshitij.so 842
            if filterData is None:
17679 kshitij.so 843
                if item[0]['category_id']!=6:
844
                    try:
18830 kshitij.so 845
                        item[0]['filterLinkBrand'] = '/category/'+str(int(item[0]['category_id']))+'?searchFor='+urllib.quote(item[0]['brand'])+'&filter=brand&brands='+str(int(item[0]['brand_id']))
846
                        item[0]['filterTextBrand'] = (item[0]['brand'])
17679 kshitij.so 847
                    except:
18830 kshitij.so 848
                        pass
17679 kshitij.so 849
                else:
850
                    try:
17756 kshitij.so 851
                        if item[0]['subCategory']=='' or item[0]['subCategory'] is None or item[0]['subCategoryId']==0:
17679 kshitij.so 852
                            raise
18830 kshitij.so 853
                        item[0]['filterLinkSubCategory'] = '/category/'+str(int(item[0]['category_id']))+'?searchFor='+urllib.quote(item[0]['subCategory'])+'&filter=subcategory&subcategories='+str(int(item[0]['subCategoryId']))
854
                        item[0]['filterTextSubCategory'] = (item[0]['subCategory'])
855
                        item[0]['filterLinkBrand'] = '/category/'+str(int(item[0]['category_id']))+'?searchFor='+urllib.quote(item[0]['brand'])+'&filter=brand&brands='+str(int(item[0]['brand_id']))
856
                        item[0]['filterTextBrand'] = (item[0]['brand'])
17679 kshitij.so 857
                    except:
18830 kshitij.so 858
                        pass
17771 kshitij.so 859
            try:
860
                if item[0]['source_id']==4:
861
                    item_availability_info = mc.get("item_availability_"+str(item[0]['identifier']).strip())
862
                    if item_availability_info is None or len(item_availability_info)==0:
863
                        item[0]['availabilityInfo'] = [{}]
864
                    else:
865
                        item[0]['availabilityInfo'] = item_availability_info
866
            except:
867
                item[0]['availabilityInfo'] = [{}]
19193 kshitij.so 868
 
869
            if item[0]['source_id']==4:
870
                for av_info in item[0]['availabilityInfo']:
871
                    if not av_info:
872
                        continue
873
                    av_info['cash_back'] = item[0]['cash_back']
874
                    av_info['cash_back_type'] = item[0]['cash_back_type']
875
                    netPriceAfterCashBack = av_info['sellingPrice'] 
19199 kshitij.so 876
                    if av_info['cash_back_type'] ==1:
19193 kshitij.so 877
                        netPriceAfterCashBack = av_info['sellingPrice'] - float(av_info['sellingPrice'])*av_info['cash_back']/100
19199 kshitij.so 878
                    elif av_info['cash_back_type'] ==2:
19193 kshitij.so 879
                        netPriceAfterCashBack = av_info['sellingPrice'] - av_info['cash_back']
880
                    else:
881
                        pass
882
                    av_info['netPriceAfterCashBack'] = netPriceAfterCashBack
883
 
884
            #item[0]['netPriceAfterCashBack'] = d['netPriceAfterCashBack']
885
 
886
            if item[0]['source_id'] != SOURCE_MAP.get("PAYTM.COM"):
887
                if item[0]['codAvailable'] ==1:
888
                    paytmPrice = item[0]['available_price']
889
                else:
890
                    paytmPrice = item[0]['gross_price']
891
 
892
                if item[0]['cash_back_type'] ==1:
893
                    item[0]['netPriceAfterCashBack'] = paytmPrice -  float(paytmPrice)*item[0]['cash_back']/100
894
                elif item[0]['cash_back_type'] ==2:
895
                    item[0]['netPriceAfterCashBack'] = paytmPrice -  item[0]['cash_back']
896
                else:
897
                    item[0]['netPriceAfterCashBack'] = paytmPrice
898
 
899
            else:
900
                if item[0]['cash_back_type'] ==1:
901
                    item[0]['netPriceAfterCashBack'] = item[0]['available_price'] -  float(item[0]['available_price'])*item[0]['cash_back']/100
902
                elif item[0]['cash_back_type'] ==2:
903
                    item[0]['netPriceAfterCashBack'] = item[0]['available_price'] -  item[0]['cash_back']
904
                else:
905
                    item[0]['netPriceAfterCashBack'] = item[0]['available_price']
906
 
16079 kshitij.so 907
            temp.append(item[0])
16125 kshitij.so 908
        if len(temp) > 1:
16126 kshitij.so 909
            temp = sorted(temp, key = lambda x: (x['available_price']),reverse=False)
16079 kshitij.so 910
        dealsListMap.append(temp)
911
    return dealsListMap
14037 kshitij.so 912
 
14791 kshitij.so 913
def filterDeals(deals, filterData):
17658 kshitij.so 914
    print "Filter data ", filterData
14791 kshitij.so 915
    brandsFiltered = []
17657 kshitij.so 916
    subCategoryFiltered = []
14791 kshitij.so 917
    filterArray = filterData.split('|')
918
    for data in filterArray:
919
        try:
920
            filter, info = data.split(':')
921
        except Exception as ex:
922
            traceback.print_exc()
923
            continue
17657 kshitij.so 924
        if filter == 'brandFilter':
14791 kshitij.so 925
            toFilter = info.split('^')
926
            print "brand filter ",toFilter
927
            for deal in deals:
15151 kshitij.so 928
                if str(int(deal['brand_id'])) in toFilter:
14791 kshitij.so 929
                    brandsFiltered.append(deal)
17657 kshitij.so 930
        elif filter =='subCategoryFilter':
931
            toFilter = info.split('^')
932
            print "Sub Category filter ",toFilter
933
            for deal in deals:
934
                if str(int(deal['subCategoryId'])) in toFilter:
935
                    subCategoryFiltered.append(deal)
17668 kshitij.so 936
    print "No of brand filtered ",len(brandsFiltered)
937
    print "No of sub-cat filtered ",len(subCategoryFiltered)
17657 kshitij.so 938
    if len(subCategoryFiltered) == 0:
17367 kshitij.so 939
        return [trend['skuBundleId'] for trend in brandsFiltered]
17663 kshitij.so 940
    elif len(brandsFiltered) == 0:
941
        return [trend['skuBundleId'] for trend in subCategoryFiltered]
17669 kshitij.so 942
    return [i['skuBundleId'] for i in subCategoryFiltered for j in brandsFiltered if i['_id']==j['_id']]
14791 kshitij.so 943
 
944
 
14037 kshitij.so 945
def getDeals(userId, category_id, offset, limit, sort, direction):
17469 kshitij.so 946
    if mc.get("category_cash_back") is None or not bool(mc.get("category_cash_back")):
14037 kshitij.so 947
        populateCashBack()
948
    rank = 1
13771 kshitij.so 949
    deals = {}
13910 kshitij.so 950
    outer_query = []
951
    outer_query.append({"showDeal":1})
952
    query = {}
953
    query['$gt'] = 0
954
    outer_query.append({'totalPoints':query})
955
    if category_id in (3,5):
956
        outer_query.append({'category_id':category_id})
13803 kshitij.so 957
    if sort is None or direction is None:
958
        direct = -1
13910 kshitij.so 959
        print outer_query
960
        data = list(get_mongo_connection().Catalog.Deals.find({"$and":outer_query}).sort([('totalPoints',direct),('bestSellerPoints',direct),('nlcPoints',direct),('rank',direct)]).skip(offset).limit(limit))
13795 kshitij.so 961
    else:
13910 kshitij.so 962
        print outer_query
13803 kshitij.so 963
        direct = direction
13910 kshitij.so 964
        if sort == "bestSellerPoints":
965
            print "yes,sorting by bestSellerPoints"
966
            data = list(get_mongo_connection().Catalog.Deals.find({"$and":outer_query}).sort([('bestSellerPoints',direct),('rank',direct),('nlcPoints',direct)]).skip(offset).limit(limit))
967
        else:
968
            data = list(get_mongo_connection().Catalog.Deals.find({"$and":outer_query}).sort([(sort,direct)]).skip(offset).limit(limit))
13771 kshitij.so 969
    for d in data:
970
        item = list(get_mongo_connection().Catalog.MasterData.find({'_id':d['_id']}))
971
        if not deals.has_key(item[0]['identifier']):
13921 kshitij.so 972
            item[0]['dealRank'] = rank
973
            try:
14761 kshitij.so 974
                cashBack = getCashBack(item[0]['_id'], item[0]['source_id'], item[0]['category_id'])
13921 kshitij.so 975
                if not cashBack or cashBack.get('cash_back_status')!=1:
13928 kshitij.so 976
                    item[0]['cash_back_type'] = 0
977
                    item[0]['cash_back'] = 0
13921 kshitij.so 978
                else:
14766 kshitij.so 979
                    item[0]['cash_back_type'] = int(cashBack['cash_back_type'])
13928 kshitij.so 980
                    item[0]['cash_back'] = cashBack['cash_back']
13921 kshitij.so 981
            except:
982
                print "Error in adding cashback to deals"
13928 kshitij.so 983
                item[0]['cash_back_type'] = 0
984
                item[0]['cash_back'] = 0
13771 kshitij.so 985
            deals[item[0]['identifier']] = item[0]
13921 kshitij.so 986
 
13771 kshitij.so 987
            rank +=1
13785 kshitij.so 988
    return sorted(deals.values(), key=itemgetter('dealRank'))
989
 
16222 kshitij.so 990
def getItem(skuId,showDp=None):
16224 kshitij.so 991
    temp = []
17469 kshitij.so 992
    if mc.get("category_cash_back") is None or not bool(mc.get("category_cash_back")):
14113 kshitij.so 993
        populateCashBack()
13795 kshitij.so 994
    try:
16222 kshitij.so 995
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'_id':int(skuId)})
996
        if skuData is None:
997
            raise
998
        try:
999
            cashBack = getCashBack(skuData['_id'], skuData['source_id'], skuData['category_id'])
1000
            if not cashBack or cashBack.get('cash_back_status')!=1:
1001
                skuData['cash_back_type'] = 0
1002
                skuData['cash_back'] = 0
1003
            else:
1004
                skuData['cash_back_type'] = cashBack['cash_back_type']
1005
                skuData['cash_back'] = cashBack['cash_back']
1006
        except:
1007
            print "Error in adding cashback to deals"
1008
            skuData['cash_back_type'] = 0
1009
            skuData['cash_back'] = 0
1010
        skuData['in_stock'] = int(skuData['in_stock'])
1011
        skuData['is_shortage'] = int(skuData['is_shortage'])
1012
        skuData['category_id'] = int(skuData['category_id'])
17607 kshitij.so 1013
        skuData['subCategoryId'] = int(skuData['subCategoryId'])
16222 kshitij.so 1014
        skuData['status'] = int(skuData['status'])
16483 kshitij.so 1015
        try:
1016
            skuData['thumbnail'] = skuData['thumbnail'].strip()
1017
        except:
1018
            pass 
16222 kshitij.so 1019
        if showDp is not None:
1020
            dealerPrice = get_mongo_connection().Catalog.SkuDealerPrices.find_one({'skuBundleId':skuData['skuBundleId']})
1021
            skuData['dp'] = 0.0
1022
            skuData['showDp'] = 0
1023
            if dealerPrice is not None:
1024
                skuData['dp'] = dealerPrice['dp']
1025
                skuData['showDp'] = dealerPrice['showDp']
16224 kshitij.so 1026
        temp.append(skuData)
1027
        return temp
13795 kshitij.so 1028
    except:
16224 kshitij.so 1029
        return []
13836 kshitij.so 1030
 
14761 kshitij.so 1031
def getCashBack(skuId, source_id, category_id):
17469 kshitij.so 1032
    if mc.get("category_cash_back") is None or not bool(mc.get("category_cash_back")):
14761 kshitij.so 1033
        populateCashBack()
1034
    itemCashBackMap = mc.get("item_cash_back")
13921 kshitij.so 1035
    itemCashBack = itemCashBackMap.get(skuId)
1036
    if itemCashBack is not None:
1037
        return itemCashBack
14761 kshitij.so 1038
    cashBackMap = mc.get("category_cash_back")
13921 kshitij.so 1039
    sourceCashBack = cashBackMap.get(source_id)
1040
    if sourceCashBack is not None and len(sourceCashBack) > 0:
1041
        for cashBack in sourceCashBack:
1042
            if cashBack.get(category_id) is None:
1043
                continue
1044
            else:
1045
                return cashBack.get(category_id)
1046
    else:
1047
        return {}
16560 amit.gupta 1048
 
1049
def getBundleBySourceSku(source_id, identifier):
17035 kshitij.so 1050
    if source_id in (1,2,4,5,6,7):
16560 amit.gupta 1051
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'identifier':identifier.strip(), 'source_id':source_id}))
1052
    elif source_id == 3:
1053
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'secondaryIdentifier':identifier.strip(), 'source_id':source_id}))
1054
    else:
1055
        return {}
1056
 
1057
    if not skuData:
1058
        return {}
1059
    else:
16564 amit.gupta 1060
        bundleId = skuData[0]["skuBundleId"]
17035 kshitij.so 1061
        itemIds = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':bundleId, 'in_stock':1, 'source_id':{"$in":[1,2,3,5,6,7]}}, 
16580 amit.gupta 1062
                       {"source_id":1, "available_price":1, "marketPlaceUrl":1, "gross_price":1, "codAvailable":1, "source_product_name":1, "offer":1, "coupon":1}))
16579 amit.gupta 1063
        return {'products':itemIds}
16560 amit.gupta 1064
 
1065
 
13921 kshitij.so 1066
 
15129 kshitij.so 1067
def getDealRank(identifier, source_id, userId):
17035 kshitij.so 1068
    if source_id in (1,2,4,5,6,7):
15129 kshitij.so 1069
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'identifier':identifier.strip(), 'source_id':source_id}))
1070
    elif source_id == 3:
1071
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'secondaryIdentifier':identifier.strip(), 'source_id':source_id}))
1072
    else:
16282 amit.gupta 1073
        return {'rank':0, 'description':'Source not valid','maxNlc':None, 'minNlc':None,'status':None,'dp':None}
15349 kshitij.so 1074
    if len(skuData) == 0:
16282 amit.gupta 1075
        return {'rank':0, 'description':'No matching product identifier found','maxNlc':None, 'minNlc':None,'status':None,'dp':None}
15129 kshitij.so 1076
    user_specific_deals = mc.get(str(userId))
1077
    if user_specific_deals is None:
1078
        __populateCache(userId)
1079
        user_specific_deals = mc.get(str(userId))
1080
    else:
1081
        print "Getting user deals from cache"
1082
    category_id = skuData[0]['category_id']
1083
    category_specific_deals = user_specific_deals.get(category_id)
16280 kshitij.so 1084
 
1085
    dealsData = get_mongo_connection().Catalog.Deals.find_one({'skuBundleId':skuData[0]['skuBundleId']})
1086
    if dealsData is None:
1087
        dealsData = {}
1088
 
15129 kshitij.so 1089
    if category_specific_deals is None or len(category_specific_deals) ==0:
16280 kshitij.so 1090
        return {'rank':0,'description':'Category specific deals is empty','maxNlc':dealsData.get('maxNlc'),'minNlc':dealsData.get('minNlc'),'status':dealsData.get('status'),'dp':dealsData.get('dp')}
15129 kshitij.so 1091
    sorted_deals = sorted(category_specific_deals, key = lambda x: (x['persPoints'],x['totalPoints'],x['bestSellerPoints'], x['nlcPoints'], x['rank']),reverse=True)
16168 kshitij.so 1092
    sortedMap = {}
1093
    rankMap = {}
1094
    rank = 0
15129 kshitij.so 1095
    for sorted_deal in sorted_deals:
16168 kshitij.so 1096
        if sortedMap.get(sorted_deal['skuBundleId']) is None:
1097
            sortedMap[sorted_deal['skuBundleId']] = {rank:[sorted_deal]}
1098
            rankMap[rank] = (sortedMap[sorted_deal['skuBundleId']].values())[0]
1099
            rank = rank +1
1100
        else:
1101
            for temp_list in sortedMap.get(sorted_deal['skuBundleId']).itervalues():
1102
                temp_list.append(sorted_deal)
1103
            rankMap[(sortedMap.get(sorted_deal['skuBundleId']).keys())[0]] = temp_list
1104
 
16187 kshitij.so 1105
    for dealRank ,dealList in rankMap.iteritems():
16168 kshitij.so 1106
        for d in dealList:
16186 kshitij.so 1107
            if d['skuBundleId'] == skuData[0]['skuBundleId']:
16280 kshitij.so 1108
                return {'rank':dealRank+1,'description':'Rank found','maxNlc':dealsData.get('maxNlc'),'minNlc':dealsData.get('minNlc'),'status':dealsData.get('status'),'dp':dealsData.get('dp')}
16168 kshitij.so 1109
 
16280 kshitij.so 1110
    return {'rank':0,'description':'Rank not found','maxNlc':dealsData.get('maxNlc'),'minNlc':dealsData.get('minNlc'),'status':dealsData.get('status'),'dp':dealsData.get('dp')}
15129 kshitij.so 1111
 
1112
 
13836 kshitij.so 1113
def getCashBackDetails(identifier, source_id):
17469 kshitij.so 1114
    if mc.get("category_cash_back") is None or not bool(mc.get("category_cash_back")):
13921 kshitij.so 1115
        populateCashBack()
13771 kshitij.so 1116
 
17035 kshitij.so 1117
    if source_id in (1,2,4,5,6,7):
13839 kshitij.so 1118
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'identifier':identifier.strip(), 'source_id':source_id}))
13840 kshitij.so 1119
    elif source_id == 3:
13839 kshitij.so 1120
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'secondaryIdentifier':identifier.strip(), 'source_id':source_id}))
13840 kshitij.so 1121
    else:
1122
        return {}
13836 kshitij.so 1123
    if len(skuData) > 0:
14761 kshitij.so 1124
        itemCashBackMap = mc.get("item_cash_back")
13921 kshitij.so 1125
        itemCashBack = itemCashBackMap.get(skuData[0]['_id'])
1126
        if itemCashBack is not None:
1127
            return itemCashBack
14761 kshitij.so 1128
        cashBackMap = mc.get("category_cash_back")
13921 kshitij.so 1129
        sourceCashBack = cashBackMap.get(source_id)
1130
        if sourceCashBack is not None and len(sourceCashBack) > 0:
1131
            for cashBack in sourceCashBack:
1132
                if cashBack.get(skuData[0]['category_id']) is None:
1133
                    continue
1134
                else:
1135
                    return cashBack.get(skuData[0]['category_id'])
13836 kshitij.so 1136
        else:
1137
            return {} 
1138
    else:
1139
        return {}
13986 amit.gupta 1140
 
14398 amit.gupta 1141
def getImgSrc(identifier, source_id):
1142
    skuData = None
17035 kshitij.so 1143
    if source_id in (1,2,4,5,6,7):
14414 amit.gupta 1144
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'identifier':identifier.strip(), 'source_id':source_id})
14398 amit.gupta 1145
    elif source_id == 3:
14414 amit.gupta 1146
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'secondaryIdentifier':identifier.strip(), 'source_id':source_id})
14398 amit.gupta 1147
    if skuData is None:
1148
        return {}
1149
    else:
16483 kshitij.so 1150
        try:
1151
            return {'thumbnail':skuData.get('thumbnail').strip()}
1152
        except:
1153
            return {'thumbnail':skuData.get('thumbnail')}
13986 amit.gupta 1154
 
1155
def next_weekday(d, weekday):
1156
    days_ahead = weekday - d.weekday()
1157
    if days_ahead <= 0: # Target day already happened this week
1158
        days_ahead += 7
1159
    return d + timedelta(days_ahead)
1160
 
13771 kshitij.so 1161
 
13970 kshitij.so 1162
def getAllDealerPrices(offset, limit):
1163
    data = []
1164
    collection = get_mongo_connection().Catalog.SkuDealerPrices
1165
    cursor = collection.find().skip(offset).limit(limit)
1166
    for val in cursor:
15853 kshitij.so 1167
        master = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':val['skuBundleId']})
1168
        if master is not None:
1169
            val['brand'] = master['brand']
1170
            val['source_product_name'] = master['source_product_name']
13970 kshitij.so 1171
        else:
1172
            val['brand'] = ""
1173
            val['source_product_name'] = ""
16231 kshitij.so 1174
        val['showDp'] = int(val['showDp'])
13970 kshitij.so 1175
        data.append(val)
1176
    return data
1177
 
15853 kshitij.so 1178
def addSkuDealerPrice(data):
1179
    collection = get_mongo_connection().Catalog.SkuDealerPrices
1180
    cursor = collection.find_one({"skuBundleId":data['skuBundleId']})
1181
    if cursor is not None:
1182
        return {0:"BundleId information already present."}
13970 kshitij.so 1183
    else:
15853 kshitij.so 1184
        collection.insert(data)
1185
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
13970 kshitij.so 1186
        return {1:"Data added successfully"}
1187
 
1188
def updateSkuDealerPrice(data, _id):
1189
    try:
1190
        collection = get_mongo_connection().Catalog.SkuDealerPrices
1191
        collection.update({'_id':ObjectId(_id)},{"$set":{'dp':data['dp']}},upsert=False, multi = False)
15853 kshitij.so 1192
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
13970 kshitij.so 1193
        return {1:"Data updated successfully"}
1194
    except:
1195
        return {0:"Data not updated."}
1196
 
1197
def updateExceptionalNlc(data, _id):
1198
    try:
1199
        collection = get_mongo_connection().Catalog.ExceptionalNlc
1200
        collection.update({'_id':ObjectId(_id)},{"$set":{'maxNlc':data['maxNlc'], 'minNlc':data['minNlc'], 'overrideNlc':data['overrideNlc']}},upsert=False, multi = False)
15853 kshitij.so 1201
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
13970 kshitij.so 1202
        return {1:"Data updated successfully"}
1203
    except:
1204
        return {0:"Data not updated."}
1205
 
14041 kshitij.so 1206
def resetCache(userId):
14043 kshitij.so 1207
    try:
1208
        mc.delete(userId)
1209
        return {1:'Cache cleared.'}
1210
    except:
1211
        return {0:'Unable to clear cache.'}
1212
 
15853 kshitij.so 1213
def updateCollection(data):
1214
    try:
1215
        collection = get_mongo_connection().Catalog[data['class']]
1216
        class_name = data.pop('class')
1217
        _id = data.pop('oid')
1218
        result = collection.update({'_id':ObjectId(_id)},{"$set":data},upsert=False, multi = False)
1219
        if class_name != "Notifications":
1220
            record = list(collection.find({'_id':ObjectId(_id)}))
1221
            if class_name !="CategoryDiscount":
1222
                if record[0].has_key('sku'):
1223
                    field = '_id'
1224
                    val = record[0]['sku']
14852 kshitij.so 1225
                else:
15853 kshitij.so 1226
                    field = 'skuBundleId'
1227
                    val = record[0]['skuBundleId']
1228
                get_mongo_connection().Catalog.MasterData.update({field:val},{"$set":{'updatedOn':to_java_date(datetime.now())}},upsert=False, multi = True)
1229
            else:
1230
                get_mongo_connection().Catalog.MasterData.update({'brand':re.compile(record[0]['brand'], re.IGNORECASE),'category_id':record[0]['category_id']}, \
1231
                                                                 {"$set":{'updatedOn':to_java_date(datetime.now())}},upsert=False,multi=True)
16233 kshitij.so 1232
        if class_name =='SkuDealerPrices':
16237 kshitij.so 1233
            get_mongo_connection().Catalog.Deals.update({'skuBundleId':val},{"$set":data},upsert=False, multi=True)
15853 kshitij.so 1234
        return {1:"Data updated successfully"}
1235
    except Exception as e:
1236
        print e
1237
        return {0:"Data not updated."}
14575 kshitij.so 1238
 
14076 kshitij.so 1239
 
14553 kshitij.so 1240
def addNegativeDeals(data, multi):
1241
    if multi !=1: 
1242
        collection = get_mongo_connection().Catalog.NegativeDeals
1243
        cursor = collection.find({"sku":data['sku']})
1244
        if cursor.count() > 0:
1245
            return {0:"Sku information already present."}
1246
        else:
1247
            collection.insert(data)
1248
            return {1:"Data added successfully"}
14481 kshitij.so 1249
    else:
14553 kshitij.so 1250
        skuIds = __getBundledSkusfromSku(data['sku'])
1251
        for sku in skuIds:
1252
            data['sku'] = sku.get('_id')
1253
            collection = get_mongo_connection().Catalog.NegativeDeals
1254
            cursor = collection.find({"sku":data['sku']})
1255
            if cursor.count() > 0:
1256
                continue
1257
            else:
14558 kshitij.so 1258
                data.pop('_id',None)
14553 kshitij.so 1259
                collection.insert(data)
14481 kshitij.so 1260
        return {1:"Data added successfully"}
1261
 
1262
def getAllNegativeDeals(offset, limit):
1263
    data = []
1264
    collection = get_mongo_connection().Catalog.NegativeDeals
1265
    cursor = collection.find().skip(offset).limit(limit)
1266
    for val in cursor:
1267
        master = list(get_mongo_connection().Catalog.MasterData.find({'_id':val['sku']}))
1268
        if len(master) > 0:
1269
            val['brand'] = master[0]['brand']
1270
            val['source_product_name'] = master[0]['source_product_name']
1271
            val['skuBundleId'] = master[0]['skuBundleId']
1272
        else:
1273
            val['brand'] = ""
1274
            val['source_product_name'] = ""
1275
            val['skuBundleId'] = ""
1276
        data.append(val)
1277
    return data
1278
 
1279
def getAllManualDeals(offset, limit):
1280
    data = []
1281
    collection = get_mongo_connection().Catalog.ManualDeals
15090 kshitij.so 1282
    cursor = collection.find().skip(offset).limit(limit)
14481 kshitij.so 1283
    for val in cursor:
1284
        master = list(get_mongo_connection().Catalog.MasterData.find({'_id':val['sku']}))
1285
        if len(master) > 0:
1286
            val['brand'] = master[0]['brand']
1287
            val['source_product_name'] = master[0]['source_product_name']
1288
            val['skuBundleId'] = master[0]['skuBundleId']
1289
        else:
1290
            val['brand'] = ""
1291
            val['source_product_name'] = ""
1292
            val['skuBundleId'] = ""
1293
        data.append(val)
1294
    return data
14076 kshitij.so 1295
 
14553 kshitij.so 1296
def addManualDeal(data, multi):
1297
    if multi !=1:
1298
        collection = get_mongo_connection().Catalog.ManualDeals
15090 kshitij.so 1299
        cursor = collection.find({'sku':data['sku']})
14553 kshitij.so 1300
        if cursor.count() > 0:
1301
            return {0:"Sku information already present."}
1302
        else:
1303
            collection.insert(data)
1304
            get_mongo_connection().Catalog.MasterData.update({'_id':data['sku']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=False)
1305
            return {1:"Data added successfully"}
14481 kshitij.so 1306
    else:
14553 kshitij.so 1307
        skuIds = __getBundledSkusfromSku(data['sku'])
1308
        for sku in skuIds:
1309
            data['sku'] = sku.get('_id')
1310
            collection = get_mongo_connection().Catalog.ManualDeals
15090 kshitij.so 1311
            cursor = collection.find({'sku':data['sku']})
14553 kshitij.so 1312
            if cursor.count() > 0:
1313
                continue
1314
            else:
14558 kshitij.so 1315
                data.pop('_id',None)
14553 kshitij.so 1316
                collection.insert(data)
1317
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':sku.get('skuBundleId')},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
14481 kshitij.so 1318
        return {1:"Data added successfully"}
14553 kshitij.so 1319
 
14481 kshitij.so 1320
def deleteDocument(data):
15853 kshitij.so 1321
    print "inside detete document"
14481 kshitij.so 1322
    print data
1323
    try:
1324
        collection = get_mongo_connection().Catalog[data['class']]
1325
        class_name = data.pop('class')
1326
        _id = data.pop('oid')
1327
        record = list(collection.find({'_id':ObjectId(_id)}))
1328
        collection.remove({'_id':ObjectId(_id)})
15075 kshitij.so 1329
        if class_name != "Notifications":
1330
            if class_name !="CategoryDiscount":
15853 kshitij.so 1331
                print record[0]
1332
                if record[0].has_key('sku'):
1333
                    field = '_id'
1334
                    val = record[0]['sku']
1335
                else:
1336
                    field = 'skuBundleId'
1337
                    val = record[0]['skuBundleId']
1338
                print "Updating master"
1339
                print field
1340
                print val
1341
                get_mongo_connection().Catalog.MasterData.update({field:val},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
15075 kshitij.so 1342
            else:
1343
                get_mongo_connection().Catalog.MasterData.update({'brand':re.compile(record[0]['brand'], re.IGNORECASE),'category_id':record[0]['category_id']}, \
1344
                                                                 {"$set":{'updatedOn':to_java_date(datetime.now())}},upsert=False,multi=True)
14481 kshitij.so 1345
        return {1:"Document deleted successfully"}
1346
    except Exception as e:
1347
        print e
1348
        return {0:"Document not deleted."}
13970 kshitij.so 1349
 
14482 kshitij.so 1350
def searchMaster(offset, limit, search_term):
1351
    data = []
14531 kshitij.so 1352
    if search_term is not None:
14551 kshitij.so 1353
        terms = search_term.split(' ')
1354
        outer_query = []
1355
        for term in terms:
1356
            outer_query.append({"source_product_name":re.compile(term, re.IGNORECASE)})
14531 kshitij.so 1357
        try:
14551 kshitij.so 1358
            collection = get_mongo_connection().Catalog.MasterData.find({"$and":outer_query,'source_id':{'$in':SOURCE_MAP.keys()}}).skip(offset).limit(limit)
14531 kshitij.so 1359
            for record in collection:
1360
                data.append(record)
1361
        except:
1362
            pass
1363
    else:
1364
        collection = get_mongo_connection().Catalog.MasterData.find({'source_id':{'$in':SOURCE_MAP.keys()}}).skip(offset).limit(limit)
14482 kshitij.so 1365
        for record in collection:
1366
            data.append(record)
1367
    return data
14481 kshitij.so 1368
 
14495 kshitij.so 1369
def getAllFeaturedDeals(offset, limit):
1370
    data = []
1371
    collection = get_mongo_connection().Catalog.FeaturedDeals
17561 kshitij.so 1372
    cursor = collection.find({}).skip(offset).limit(limit)
14495 kshitij.so 1373
    for val in cursor:
17367 kshitij.so 1374
        master = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':val['skuBundleId']}))
14495 kshitij.so 1375
        if len(master) > 0:
1376
            val['brand'] = master[0]['brand']
1377
            val['source_product_name'] = master[0]['source_product_name']
1378
            val['skuBundleId'] = master[0]['skuBundleId']
1379
        else:
1380
            val['brand'] = ""
1381
            val['source_product_name'] = ""
1382
            val['skuBundleId'] = ""
1383
        data.append(val)
1384
    return data
1385
 
14553 kshitij.so 1386
def addFeaturedDeal(data, multi):
17367 kshitij.so 1387
    collection = get_mongo_connection().Catalog.FeaturedDeals
1388
    cursor = collection.find({'skuBundleId':data['skuBundleId']})
1389
    master = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':data['skuBundleId']})
1390
    if master is None:
1391
        return {0:"BundleId is wrong"}
17469 kshitij.so 1392
    otherInfoObj = data['otherInfo']
1393
    toPop = []
1394
    for x,y in otherInfoObj.iteritems():
1395
        if y==0:
1396
            toPop.append(x)
1397
 
1398
    for popItem in toPop:
1399
        otherInfoObj.pop(popItem)
1400
    if len(otherInfoObj.keys())==0:
1401
        return {0:"No rank info to add"}
1402
 
1403
    for x,y in otherInfoObj.iteritems():
1404
        exist = get_mongo_connection().Catalog.FeaturedDeals.find({'otherInfo.'+x:y})
1405
        if exist.count() >0:
1406
            return {0:"Rank already assigned bundleId %s"%(exist[0]['skuBundleId'])}
17367 kshitij.so 1407
    if cursor.count() > 0:
1408
        return {0:"SkuBundleId information already present."}
14495 kshitij.so 1409
    else:
17367 kshitij.so 1410
        collection.insert(data)
14495 kshitij.so 1411
        return {1:"Data added successfully"}
1412
 
14499 kshitij.so 1413
def searchCollection(class_name, sku, skuBundleId):
14497 kshitij.so 1414
    data = []
1415
    collection = get_mongo_connection().Catalog[class_name]
15076 kshitij.so 1416
    if class_name == "Notifications":
1417
        cursor = collection.find({'skuBundleId':skuBundleId})
1418
        for val in cursor:
1419
            master = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':val['skuBundleId']}))
1420
            if len(master) > 0:
1421
                val['brand'] = master[0]['brand']
1422
                val['model_name'] = master[0]['model_name']
1423
                val['skuBundleId'] = master[0]['skuBundleId']
1424
            else:
1425
                val['brand'] = ""
1426
                val['model_name'] = ""
1427
                val['skuBundleId'] = val['skuBundleId']
1428
            data.append(val)
15095 kshitij.so 1429
        return data
15853 kshitij.so 1430
    master = None
14499 kshitij.so 1431
    if sku is not None:
15853 kshitij.so 1432
        if COLLECTION_MAP.has_key(class_name):
1433
            master = get_mongo_connection().Catalog.MasterData.find_one({'_id':sku})
1434
            cursor = collection.find({'skuBundleId':master['skuBundleId']})
1435
        else:
1436
            cursor = collection.find({'sku':sku})
14499 kshitij.so 1437
        for val in cursor:
15853 kshitij.so 1438
            if master is None:
1439
                master = get_mongo_connection().Catalog.MasterData.find_one({'_id':val['sku']})
1440
            if master is not None:
1441
                val['brand'] = master['brand']
1442
                val['source_product_name'] = master['source_product_name']
1443
                val['skuBundleId'] = master['skuBundleId']
14499 kshitij.so 1444
            else:
1445
                val['brand'] = ""
1446
                val['source_product_name'] = ""
1447
                val['skuBundleId'] = ""
1448
            data.append(val)
1449
        return data
1450
    else:
15853 kshitij.so 1451
        if not COLLECTION_MAP.has_key(class_name):
1452
            skuIds = get_mongo_connection().Catalog.MasterData.find({'skuBundleId':skuBundleId}).distinct('_id')
1453
            for sku in skuIds:
1454
                cursor = collection.find({'sku':sku})
1455
                for val in cursor:
1456
                    master = list(get_mongo_connection().Catalog.MasterData.find({'_id':val['sku']}))
1457
                    if len(master) > 0:
1458
                        val['brand'] = master[0]['brand']
1459
                        val['source_product_name'] = master[0]['source_product_name']
1460
                        val['skuBundleId'] = master[0]['skuBundleId']
1461
                    else:
1462
                        val['brand'] = ""
1463
                        val['source_product_name'] = ""
1464
                        val['skuBundleId'] = ""
1465
                    data.append(val)
1466
            return data
1467
        else:
1468
            cursor = collection.find({'skuBundleId':skuBundleId})
14499 kshitij.so 1469
            for val in cursor:
15853 kshitij.so 1470
                master = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':val['skuBundleId']}))
14499 kshitij.so 1471
                if len(master) > 0:
1472
                    val['brand'] = master[0]['brand']
1473
                    val['source_product_name'] = master[0]['source_product_name']
1474
                else:
1475
                    val['brand'] = ""
1476
                    val['source_product_name'] = ""
1477
                data.append(val)
15853 kshitij.so 1478
            return data
14495 kshitij.so 1479
 
15074 kshitij.so 1480
def __getBrandIdForBrand(brandName, category_id):
1481
    brandInfo = Brands.query.filter(Brands.category_id==category_id).filter(Brands.name == brandName).all()
1482
    if brandInfo is None or len(brandInfo)!=1:
1483
        raise
1484
    else:
1485
        return brandInfo[0].id
1486
 
14588 kshitij.so 1487
def addNewItem(data):
14594 kshitij.so 1488
    try:
1489
        data['updatedOn'] = to_java_date(datetime.now())
1490
        data['addedOn'] = to_java_date(datetime.now())
1491
        data['priceUpdatedOn'] = to_java_date(datetime.now())
1492
        max_id = list(get_mongo_connection().Catalog.MasterData.find().sort([('_id',pymongo.DESCENDING)]).limit(1))
1493
        max_bundle = list(get_mongo_connection().Catalog.MasterData.find().sort([('skuBundleId',pymongo.DESCENDING)]).limit(1))
1494
        data['_id'] = max_id[0]['_id'] + 1
1495
        data['skuBundleId'] = max_bundle[0]['skuBundleId'] + 1
1496
        data['identifier'] = str(data['identifier'])
1497
        data['secondaryIdentifier'] = str(data['secondaryIdentifier'])
17115 manish.sha 1498
        data['model_name'] = str(data['model_name'])
15074 kshitij.so 1499
        data['brand_id'] = __getBrandIdForBrand(data['brand'], data['category_id'])
17746 kshitij.so 1500
        data['shippingCost'] = float(data['shippingCost'])
17603 kshitij.so 1501
        if data['category_id'] ==6 and data['subCategoryId'] ==0:
17606 kshitij.so 1502
            return {0:'Sub-Category not selected'}
17608 kshitij.so 1503
        elif data['category_id'] !=6 and data['subCategoryId'] !=0:
1504
            return {0:'Sub-Category not valid'}
1505
        else:
1506
            pass
17604 kshitij.so 1507
        data['subCategory'] = SUB_CATEGORY_MAP.get(data['subCategoryId'])
14594 kshitij.so 1508
        get_mongo_connection().Catalog.MasterData.insert(data)
1509
        return {1:'Data added successfully'}
1510
    except Exception as e:
1511
        print e
1512
        return {0:'Unable to add data.'}
15130 kshitij.so 1513
    finally:
1514
        session.close()
14588 kshitij.so 1515
 
1516
def addItemToExistingBundle(data):
1517
    try:
1518
        data['updatedOn'] = to_java_date(datetime.now())
1519
        data['addedOn'] = to_java_date(datetime.now())
1520
        data['priceUpdatedOn'] = to_java_date(datetime.now())
14593 kshitij.so 1521
        max_id = list(get_mongo_connection().Catalog.MasterData.find().sort([('_id',pymongo.DESCENDING)]).limit(1))
14590 kshitij.so 1522
        data['_id'] = max_id[0]['_id'] + 1
14594 kshitij.so 1523
        data['identifier'] = str(data['identifier'])
1524
        data['secondaryIdentifier'] = str(data['secondaryIdentifier'])
17115 manish.sha 1525
        data['model_name'] = str(data['model_name'])
15074 kshitij.so 1526
        data['brand_id'] = __getBrandIdForBrand(data['brand'], data['category_id'])
17746 kshitij.so 1527
        data['shippingCost'] = float(data['shippingCost'])
17603 kshitij.so 1528
        if data['category_id'] ==6 and data['subCategoryId'] ==0:
17606 kshitij.so 1529
            return {0:'Sub-Category not selected'}
17608 kshitij.so 1530
        elif data['category_id'] !=6 and data['subCategoryId'] !=0:
1531
            return {0:'Sub-Category not valid'}
1532
        else:
1533
            pass
17604 kshitij.so 1534
        data['subCategory'] = SUB_CATEGORY_MAP.get(data['subCategoryId'])
14588 kshitij.so 1535
        get_mongo_connection().Catalog.MasterData.insert(data)
1536
        return {1:'Data added successfully.'}
14594 kshitij.so 1537
    except Exception as e:
1538
        print e
14588 kshitij.so 1539
        return {0:'Unable to add data.'}
15130 kshitij.so 1540
    finally:
1541
        session.close()
14588 kshitij.so 1542
 
1543
def updateMaster(data, multi):
15130 kshitij.so 1544
    try:
1545
        print data
1546
        if multi != 1:
1547
            _id = data.pop('_id')
1548
            skuBundleId = data.pop('skuBundleId')
1549
            data['updatedOn'] = to_java_date(datetime.now())
1550
            data['identifier'] = str(data['identifier'])
1551
            data['secondaryIdentifier'] = str(data['secondaryIdentifier'])
17115 manish.sha 1552
            data['model_name'] = str(data['model_name'])
17746 kshitij.so 1553
            data['shippingCost'] = float(data['shippingCost'])
15130 kshitij.so 1554
            data['brand_id'] = __getBrandIdForBrand(data['brand'], data['category_id'])
17603 kshitij.so 1555
            if data['category_id'] ==6 and data['subCategoryId'] ==0:
17606 kshitij.so 1556
                return {0:'Sub-Category not selected'}
17608 kshitij.so 1557
            elif data['category_id'] !=6 and data['subCategoryId'] !=0:
1558
                return {0:'Sub-Category not valid'}
1559
            else:
1560
                pass
17604 kshitij.so 1561
            data['subCategory'] = SUB_CATEGORY_MAP.get(data['subCategoryId'])
15130 kshitij.so 1562
            get_mongo_connection().Catalog.MasterData.update({'_id':_id},{"$set":data},upsert=False)
1563
            return {1:'Data updated successfully.'}
1564
        else:
1565
            _id = data.pop('_id')
1566
            skuBundleId = data.pop('skuBundleId')
1567
            data['updatedOn'] = to_java_date(datetime.now())
1568
            data['identifier'] = str(data['identifier'])
1569
            data['secondaryIdentifier'] = str(data['secondaryIdentifier'])
1570
            data['brand_id'] = __getBrandIdForBrand(data['brand'], data['category_id'])
17115 manish.sha 1571
            data['model_name'] = str(data['model_name'])
17746 kshitij.so 1572
            data['shippingCost'] = float(data['shippingCost'])
17603 kshitij.so 1573
            if data['category_id'] ==6 and data['subCategoryId'] ==0:
17606 kshitij.so 1574
                return {0:'Sub-Category not selected'}
17608 kshitij.so 1575
            elif data['category_id'] !=6 and data['subCategoryId'] !=0:
1576
                return {0:'Sub-Category not valid'}
1577
            else:
1578
                pass
17604 kshitij.so 1579
            data['subCategory'] = SUB_CATEGORY_MAP.get(data['subCategoryId'])
15130 kshitij.so 1580
            get_mongo_connection().Catalog.MasterData.update({'_id':_id},{"$set":data},upsert=False)
1581
            similarItems = get_mongo_connection().Catalog.MasterData.find({'skuBundleId':skuBundleId})
1582
            for item in similarItems:
1583
                if item['_id'] == _id:
1584
                    continue
1585
                item['updatedOn'] = to_java_date(datetime.now())
1586
                item['thumbnail'] = data['thumbnail']
1587
                item['category'] = data['category']
1588
                item['category_id'] = data['category_id']
1589
                item['is_shortage'] = data['is_shortage']
1590
                item['mrp'] = data['mrp']
1591
                item['status'] = data['status']
1592
                item['maxPrice'] = data['maxPrice']
1593
                item['brand_id'] = data['brand_id']
17603 kshitij.so 1594
                item['subCategoryId'] = data['subCategoryId']
1595
                item['subCategory'] = data['subCategory']
15130 kshitij.so 1596
                similar_item_id = item.pop('_id')
1597
                get_mongo_connection().Catalog.MasterData.update({'_id':similar_item_id},{"$set":item},upsert=False)
1598
            return {1:'Data updated successfully.'}
17603 kshitij.so 1599
    except:
1600
        return {0:'Unable to update data'}
15130 kshitij.so 1601
    finally:
1602
        session.close()
14619 kshitij.so 1603
 
1604
def getLiveCricScore():
1605
    return mc.get('liveScore')
14852 kshitij.so 1606
 
1607
def addBundleToNotification(data):
1608
    try:
15069 kshitij.so 1609
        collection = get_mongo_connection().Catalog.Notifications
14852 kshitij.so 1610
        cursor = collection.find({'skuBundleId':data['skuBundleId']})
1611
        if cursor.count() > 0:
1612
            return {0:"SkuBundleId information already present."}
1613
        else:
1614
            collection.insert(data)
1615
            return {1:'Data updated successfully.'}
1616
    except:
1617
        return {0:'Unable to add data.'}
1618
 
1619
def getAllNotifications(offset, limit):
1620
    data = []
15069 kshitij.so 1621
    collection = get_mongo_connection().Catalog.Notifications
16450 kshitij.so 1622
    cursor = collection.find().sort([('endDate',pymongo.DESCENDING)]).skip(offset).limit(limit)
14852 kshitij.so 1623
    for val in cursor:
15072 kshitij.so 1624
        master = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':val['skuBundleId']}))
14852 kshitij.so 1625
        if len(master) > 0:
1626
            val['brand'] = master[0]['brand']
15071 kshitij.so 1627
            val['model_name'] = master[0]['model_name']
14852 kshitij.so 1628
            val['skuBundleId'] = master[0]['skuBundleId']
1629
        else:
1630
            val['brand'] = ""
15071 kshitij.so 1631
            val['model_name'] = ""
1632
            val['skuBundleId'] = val['skuBundleId']
14852 kshitij.so 1633
        data.append(val)
1634
    return data
14997 kshitij.so 1635
 
1636
def getBrandsForFilter(category_id):
1637
    if mc.get("brandFilter") is None:
15095 kshitij.so 1638
        print "Populating brand data for category_id %d" %(category_id)
17469 kshitij.so 1639
        tabData, mobData, accData = [], [], []
14997 kshitij.so 1640
        mobileDeals = get_mongo_connection().Catalog.Deals.aggregate([
16170 kshitij.so 1641
                                                                      {"$match":{"category_id":3,"showDeal":1,"totalPoints":{"$gt":-100}}
14997 kshitij.so 1642
                                                                    },
1643
                                                                 {"$group" : 
1644
                                                                  {'_id':{'brand_id':'$brand_id','brand':'$brand'},'count':{'$sum':1}}
1645
                                                                  }
1646
                                                                ])
14588 kshitij.so 1647
 
14997 kshitij.so 1648
        tabletDeals = get_mongo_connection().Catalog.Deals.aggregate([
16170 kshitij.so 1649
                                                                      {"$match":{"category_id":5,"showDeal":1,"totalPoints":{"$gt":-100}}
14997 kshitij.so 1650
                                                                    },
1651
                                                                 {"$group" : 
1652
                                                                  {'_id':{'brand_id':'$brand_id','brand':'$brand'},'count':{'$sum':1}}
1653
                                                                  }
1654
                                                                ])
1655
 
17469 kshitij.so 1656
        accessoriesDeals = get_mongo_connection().Catalog.Deals.aggregate([
1657
                                                                      {"$match":{"category_id":6,"showDeal":1,"totalPoints":{"$gt":-100}}
1658
                                                                    },
1659
                                                                 {"$group" : 
1660
                                                                  {'_id':{'brand_id':'$brand_id','brand':'$brand'},'count':{'$sum':1}}
1661
                                                                  }
1662
                                                                ])
1663
 
14997 kshitij.so 1664
        allDeals = get_mongo_connection().Catalog.Deals.aggregate([
16170 kshitij.so 1665
                                                                   {"$match":{"showDeal":1,"totalPoints":{"$gt":-100}}
14997 kshitij.so 1666
                                                                    },
1667
                                                                 {"$group" : 
1668
                                                                  {'_id':{'brand_id':'$brand_id','brand':'$brand'},'count':{'$sum':1}}
1669
                                                                  }
1670
                                                                ])
1671
        #print mobileDeals
1672
        #print "==========Mobile data ends=========="
1673
 
1674
        #print tabletDeals
1675
        #print "==========Tablet data ends=========="
1676
 
1677
        #print allDeals
1678
        #print "==========All deal data ends========="
1679
 
1680
        for mobileDeal in mobileDeals['result']:
1681
            if mobileDeal.get('_id').get('brand_id') != 0:
1682
                tempMap = {}
1683
                tempMap['brand'] = mobileDeal.get('_id').get('brand')
1684
                tempMap['brand_id'] = mobileDeal.get('_id').get('brand_id')
1685
                tempMap['count'] = mobileDeal.get('count')
1686
                mobData.append(tempMap)
1687
 
1688
        for tabletDeal in tabletDeals['result']:
1689
            if tabletDeal.get('_id').get('brand_id') != 0:
1690
                tempMap = {}
1691
                tempMap['brand'] = tabletDeal.get('_id').get('brand')
1692
                tempMap['brand_id'] = tabletDeal.get('_id').get('brand_id')
1693
                tempMap['count'] = tabletDeal.get('count')
1694
                tabData.append(tempMap)
1695
 
17469 kshitij.so 1696
        for accessoryDeal in accessoriesDeals['result']:
1697
            if accessoryDeal.get('_id').get('brand_id') != 0:
1698
                tempMap = {}
1699
                tempMap['brand'] = accessoryDeal.get('_id').get('brand')
1700
                tempMap['brand_id'] = accessoryDeal.get('_id').get('brand_id')
1701
                tempMap['count'] = accessoryDeal.get('count')
1702
                accData.append(tempMap)
14997 kshitij.so 1703
 
17469 kshitij.so 1704
 
14997 kshitij.so 1705
        brandMap = {}
1706
        for allDeal in allDeals['result']:
1707
            if allDeal.get('_id').get('brand_id') != 0:
1708
                if brandMap.has_key(allDeal.get('_id').get('brand')):
15002 kshitij.so 1709
                    brand_ids = brandMap.get(allDeal.get('_id').get('brand')).get('brand_ids')
14997 kshitij.so 1710
                    brand_ids.append(allDeal.get('_id').get('brand_id'))
15003 kshitij.so 1711
                    brandMap[allDeal.get('_id').get('brand')] = {'brand_ids':brand_ids,'count':brandMap.get(allDeal.get('_id').get('brand')).get('count') + allDeal.get('count')}
14997 kshitij.so 1712
                else:
1713
                    temp = []
1714
                    temp.append(allDeal.get('_id').get('brand_id'))
15002 kshitij.so 1715
                    brandMap[allDeal.get('_id').get('brand')] = {'brand_ids':temp,'count':allDeal.get('count')}
14997 kshitij.so 1716
 
17469 kshitij.so 1717
        mc.set("brandFilter",{0:brandMap, 3:mobData, 5:tabData, 6:accData}, 600)  
14997 kshitij.so 1718
 
15062 kshitij.so 1719
    return sorted(mc.get("brandFilter").get(category_id), key = lambda x: (-x['count'], x['brand']))
15375 kshitij.so 1720
 
15459 kshitij.so 1721
def getStaticDeals(offset, limit, category_id, direction):
15375 kshitij.so 1722
    user_specific_deals = mc.get("staticDeals")
1723
    if user_specific_deals is None:
1724
        __populateStaticDeals()
1725
        user_specific_deals = mc.get("staticDeals")
15459 kshitij.so 1726
    rev = False
1727
    if direction is None or direction == -1:
1728
        rev=True
1729
    return sorted((user_specific_deals.get(category_id))[offset:offset+limit],reverse=rev)
15375 kshitij.so 1730
 
1731
def __populateStaticDeals():
1732
    print "Populating memcache for static deals"
1733
    outer_query = []
1734
    outer_query.append({"showDeal":1})
1735
    query = {}
16170 kshitij.so 1736
    query['$gt'] = -100
15375 kshitij.so 1737
    outer_query.append({'totalPoints':query})
1738
    all_deals = list(get_mongo_connection().Catalog.Deals.find({"$and":outer_query},{'_id':1,'category_id':1,'brand':1,'totalPoints':1,'bestSellerPoints':1,'nlcPoints':1,'rank':1,'available_price':1,'dealType':1,'source_id':1,'brand_id':1,'skuBundleId':1}).sort([('totalPoints',pymongo.DESCENDING),('bestSellerPoints',pymongo.DESCENDING),('nlcPoints',pymongo.DESCENDING),('rank',pymongo.DESCENDING)]))
1739
    mobile_deals = []
1740
    tablet_deals = []
1741
    for deal in all_deals:
1742
        item = get_mongo_connection().Catalog.MasterData.find({'_id':deal['_id']})
1743
        if deal['category_id'] ==3:
1744
            mobile_deals.append(getItemObjForStaticDeals(item[0]))
1745
        elif deal['category_id'] ==5:
1746
            tablet_deals.append(getItemObjForStaticDeals(item[0]))
1747
        else:
1748
            continue
1749
 
1750
    random.shuffle(mobile_deals,random.random)
1751
    random.shuffle(tablet_deals,random.random)
1752
 
1753
    mem_cache_val = {3:mobile_deals, 5:tablet_deals}
1754
    mc.set("staticDeals", mem_cache_val, 3600)
1755
 
17733 kshitij.so 1756
def getItemObjForStaticDeals(item,transform=None):
1757
    mpu = str(item.get('marketPlaceUrl'))
1758
    if transform:
1759
        if mpu.find("snapdeal")!=-1:
1760
            mpu = "http://m.snapdeal.com"+mpu[mpu.find("/product"):]
1761
        elif mpu.find("homeshop18")!=-1:
1762
            mpu = "http://m.homeshop18.com/product.mobi?productId="+item['identifier']
17735 kshitij.so 1763
        elif mpu.find("saholic.com")!=-1:
17746 kshitij.so 1764
            mpu = "http://m."+mpu[mpu.find("saholic.com"):]
17735 kshitij.so 1765
        elif mpu.find("shopclues.com")!=-1:
17733 kshitij.so 1766
            mpu = "http://m."+mpu[mpu.find("shopclues.com"):]
1767
        else:
1768
            pass
1769
 
1770
    return {'marketPlaceUrl':mpu,'available_price':int(item.get('available_price')),'source_product_name':item.get('source_product_name'),'thumbnail':item.get('thumbnail'),'source_id':int(item.get('source_id'))}
16300 manas 1771
 
1772
def getItemByMerchantIdentifier(identifier, source_id):
1773
    skuData = None
17035 kshitij.so 1774
    if source_id in (1,2,4,5,6,7):
16300 manas 1775
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'identifier':identifier.strip(), 'source_id':source_id})
1776
    elif source_id == 3:
1777
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'secondaryIdentifier':identifier.strip(), 'source_id':source_id})
1778
    if skuData is None:
1779
        return {}
1780
    else:
1781
        return skuData
15375 kshitij.so 1782
 
17936 kshitij.so 1783
def getDealsForNotification(skuBundleIds,skipSplitting=False):
1784
    if not skipSplitting:
1785
        bundles= [int(skuBundleId) for skuBundleId in skuBundleIds.split(',')]
1786
        print bundles
1787
    else:
1788
        bundles = skuBundleIds
16406 kshitij.so 1789
    dealsList = []
16364 kshitij.so 1790
    dealsListMap = []
16406 kshitij.so 1791
    for bundleId in bundles:
1792
        outer_query = []
1793
        outer_query.append({ "$or": [ { "showDeal": 1} , { "prepaidDeal": 1 } ] })
1794
        outer_query.append({'skuBundleId':bundleId})
1795
        deals = get_mongo_connection().Catalog.Deals.find({"$and":outer_query})
1796
        for deal in deals:
1797
            dealsList.append(deal)
16364 kshitij.so 1798
    sortedMap = {}
1799
    rankMap = {}
1800
    rank = 0
16406 kshitij.so 1801
    for sorted_deal in dealsList:
16364 kshitij.so 1802
        if sortedMap.get(sorted_deal['skuBundleId']) is None:
1803
            sortedMap[sorted_deal['skuBundleId']] = {rank:[sorted_deal]}
1804
            rankMap[rank] = (sortedMap[sorted_deal['skuBundleId']].values())[0]
1805
            rank = rank +1
1806
        else:
1807
            for temp_list in sortedMap.get(sorted_deal['skuBundleId']).itervalues():
1808
                temp_list.append(sorted_deal)
1809
            rankMap[(sortedMap.get(sorted_deal['skuBundleId']).keys())[0]] = temp_list
1810
 
16367 kshitij.so 1811
    for dealList in [rankMap.get(k, []) for k in range(0, len(bundles))]:
16364 kshitij.so 1812
        temp = []
1813
        for d in dealList:
1814
            item = list(get_mongo_connection().Catalog.MasterData.find({'_id':d['_id']}))
1815
            if len(item) ==0:
1816
                continue
1817
            if d['dealType'] == 1 and d['source_id'] ==1:
1818
                item[0]['marketPlaceUrl'] = "http://www.amazon.in/dp/%s"%(item[0]['identifier'].strip())
1819
            elif d['source_id'] ==3:
1820
                item[0]['marketPlaceUrl'] = item[0]['marketPlaceUrl']+'?supc='+item[0].get('identifier')
1821
            else:
1822
                pass 
1823
            try:
1824
                cashBack = getCashBack(item[0]['_id'], item[0]['source_id'], item[0]['category_id'])
1825
                if not cashBack or cashBack.get('cash_back_status')!=1:
1826
                    item[0]['cash_back_type'] = 0
1827
                    item[0]['cash_back'] = 0
1828
                else:
1829
                    item[0]['cash_back_type'] = int(cashBack['cash_back_type'])
1830
                    item[0]['cash_back'] = cashBack['cash_back']
1831
            except:
1832
                print "Error in adding cashback to deals"
1833
                item[0]['cash_back_type'] = 0
1834
                item[0]['cash_back'] = 0
1835
            try:
1836
                item[0]['dp'] = d['dp']
1837
                item[0]['showDp'] = d['showDp']
1838
            except:
1839
                item[0]['dp'] = 0.0
1840
                item[0]['showDp'] = 0
17727 kshitij.so 1841
 
1842
            try:
1843
                if item[0]['showVideo']==0:
1844
                    item[0]['videoLink'] =""
1845
            except:
1846
                item[0]['videoLink'] =""
1847
            try:
1848
                if item[0]['quantity'] >1:
1849
                    ppq = float(item[0]['available_price'])/item[0]['quantity']
1850
 
1851
                    if ppq == round(ppq):
1852
                        item[0]['ppq'] = int(ppq)
1853
                    else:
1854
                        item[0]['ppq'] = round(ppq,2)
1855
                else:
1856
                    item[0]['ppq'] = 0
1857
            except:
1858
                item[0]['ppq'] = 0
1859
            if item[0]['category_id']!=6:
1860
                try:
18830 kshitij.so 1861
                    item[0]['filterLinkBrand'] = '/category/'+str(int(item[0]['category_id']))+'?searchFor='+urllib.quote(item[0]['brand'])+'&filter=brand&brands='+str(int(item[0]['brand_id']))
1862
                    item[0]['filterTextBrand'] = (item[0]['brand'])
17727 kshitij.so 1863
                except:
18830 kshitij.so 1864
                    pass
17727 kshitij.so 1865
            else:
1866
                try:
18051 kshitij.so 1867
                    if item[0]['subCategory']=='' or item[0]['subCategory'] is None or item[0]['subCategoryId']==0:
17727 kshitij.so 1868
                        raise
18830 kshitij.so 1869
                    item[0]['filterLinkSubCategory'] = '/category/'+str(int(item[0]['category_id']))+'?searchFor='+urllib.quote(item[0]['subCategory'])+'&filter=subcategory&subcategories='+str(int(item[0]['subCategoryId']))
1870
                    item[0]['filterTextSubCategory'] = (item[0]['subCategory'])
1871
                    item[0]['filterLinkBrand'] = '/category/'+str(int(item[0]['category_id']))+'?searchFor='+urllib.quote(item[0]['brand'])+'&filter=brand&brands='+str(int(item[0]['brand_id']))
1872
                    item[0]['filterTextBrand'] = (item[0]['brand'])
17727 kshitij.so 1873
                except:
18830 kshitij.so 1874
                    pass
17944 kshitij.so 1875
            try:
1876
                if item[0]['source_id']==4:
1877
                    item_availability_info = mc.get("item_availability_"+str(item[0]['identifier']).strip())
1878
                    if item_availability_info is None or len(item_availability_info)==0:
1879
                        item[0]['availabilityInfo'] = [{}]
1880
                    else:
1881
                        item[0]['availabilityInfo'] = item_availability_info
1882
            except:
1883
                item[0]['availabilityInfo'] = [{}]
19135 kshitij.so 1884
 
19193 kshitij.so 1885
            if item[0]['source_id']==4:
1886
                for av_info in item[0]['availabilityInfo']:
1887
                    if not av_info:
1888
                        continue
1889
                    av_info['cash_back'] = item[0]['cash_back']
1890
                    av_info['cash_back_type'] = item[0]['cash_back_type']
1891
                    netPriceAfterCashBack = av_info['sellingPrice'] 
19199 kshitij.so 1892
                    if av_info['cash_back_type'] ==1:
19193 kshitij.so 1893
                        netPriceAfterCashBack = av_info['sellingPrice'] - float(av_info['sellingPrice'])*av_info['cash_back']/100
19199 kshitij.so 1894
                    elif av_info['cash_back_type'] ==2:
19193 kshitij.so 1895
                        netPriceAfterCashBack = av_info['sellingPrice'] - av_info['cash_back']
1896
                    else:
1897
                        pass
1898
                    av_info['netPriceAfterCashBack'] = netPriceAfterCashBack
1899
 
1900
            if item[0]['source_id'] != SOURCE_MAP.get("PAYTM.COM"):
1901
                if item[0]['codAvailable'] ==1:
1902
                    paytmPrice = item[0]['available_price']
1903
                else:
1904
                    paytmPrice = item[0]['gross_price']
1905
 
1906
                if item[0]['cash_back_type'] ==1:
1907
                    item[0]['netPriceAfterCashBack'] = paytmPrice -  float(paytmPrice)*item[0]['cash_back']/100
1908
                elif item[0]['cash_back_type'] ==2:
1909
                    item[0]['netPriceAfterCashBack'] = paytmPrice -  item[0]['cash_back']
1910
                else:
1911
                    item[0]['netPriceAfterCashBack'] = paytmPrice
1912
 
1913
            else:
1914
                if item[0]['cash_back_type'] ==1:
1915
                    item[0]['netPriceAfterCashBack'] = item[0]['available_price'] -  float(item[0]['available_price'])*item[0]['cash_back']/100
1916
                elif item[0]['cash_back_type'] ==2:
1917
                    item[0]['netPriceAfterCashBack'] = item[0]['available_price'] -  item[0]['cash_back']
1918
                else:
1919
                    item[0]['netPriceAfterCashBack'] = item[0]['available_price']
1920
 
1921
 
19135 kshitij.so 1922
            item[0]['totalPoints'] = d['totalPoints']
17727 kshitij.so 1923
 
16364 kshitij.so 1924
            temp.append(item[0])
1925
        if len(temp) > 1:
1926
            temp = sorted(temp, key = lambda x: (x['available_price']),reverse=False)
1927
        dealsListMap.append(temp)
1928
    return dealsListMap
1929
 
16373 manas 1930
def getSkuBrandData(sku):
1931
    if sku is None:
1932
        return {}
1933
    else:
1934
        orders = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':sku})
1935
        if orders is None:
1936
            return {}
1937
        return orders
16488 kshitij.so 1938
 
1939
def addDealPoints(data):
1940
    collection = get_mongo_connection().Catalog.DealPoints
1941
    cursor = collection.find({'skuBundleId':data['skuBundleId']})
1942
    if cursor.count() > 0:
1943
        return {0:"Sku information already present."}
1944
    else:
1945
        collection.insert(data)
1946
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
1947
        return {1:"Data added successfully"}
1948
 
1949
def getAllBundlesWithDealPoints(offset, limit):
1950
    data = []
1951
    collection = get_mongo_connection().Catalog.DealPoints
1952
    cursor = collection.find().sort([('endDate',pymongo.DESCENDING)]).skip(offset).limit(limit)
1953
    for val in cursor:
1954
        master = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':val.get('skuBundleId')})
1955
        if master is not None:
1956
            val['brand'] = master['brand']
1957
            val['source_product_name'] = master['product_name']
1958
        else:
1959
            val['brand'] = ""
1960
            val['source_product_name'] = ""
1961
        data.append(val)
1962
    return data
16546 kshitij.so 1963
 
1964
def generateRedirectUrl(retailer_id, app_id):
1965
    try:
16663 manish.sha 1966
        if retailer_id <= 0:
1967
            return {'url':"","message":"Retailer Id not valid"}
16546 kshitij.so 1968
        d_app_offer = app_offers.get_by(id=app_id)
16605 manish.sha 1969
    except:
1970
        traceback.print_exc()
16546 kshitij.so 1971
    finally:
1972
        session.close()
1973
    if d_app_offer is None:
1974
        return {'url':"","message":"App id doesn't exist"}
16364 kshitij.so 1975
 
16915 manish.sha 1976
    final_user_payout = 0
1977
    if d_app_offer.override_payout:
1978
        final_user_payout = d_app_offer.overriden_payout
1979
    else:
1980
        final_user_payout = d_app_offer.user_payout
16546 kshitij.so 1981
 
16915 manish.sha 1982
    appTransactions = AppTransactions(app_id, retailer_id, to_java_date(datetime.now()), None, 1, CB_INIT, 1, CB_INIT, None, None, d_app_offer.offer_price, d_app_offer.overriden_payout, d_app_offer.override_payout, d_app_offer.user_payout, final_user_payout)
1983
 
16546 kshitij.so 1984
    get_mongo_connection().AppOrder.AppTransaction.insert(appTransactions.__dict__)
1985
    embedd = str((appTransactions.__dict__).get('_id'))
16548 kshitij.so 1986
    try:
1987
        index = d_app_offer.link.index(".freeb.co.in")
1988
    except:
16605 manish.sha 1989
        traceback.print_exc()
16548 kshitij.so 1990
        return {'url':"","message":"Substring not found"}
1991
    redirect_url = d_app_offer.link[0:index]+"."+embedd+d_app_offer.link[index:]
16546 kshitij.so 1992
    get_mongo_connection().AppOrder.AppTransaction.update({'_id':ObjectId(embedd)},{"$set":{'redirect_url':redirect_url}})
16548 kshitij.so 1993
    return {'url':redirect_url,"message":"Success"}
16556 kshitij.so 1994
 
1995
def addPayout(payout, transaction_id):
1996
    try:
16764 manish.sha 1997
        print 'Got Response for Transaction Id:- '+ str(transaction_id)+ ' and Actual Payout:- '+str(payout)
16556 kshitij.so 1998
        transaction = list(get_mongo_connection().AppOrder.AppTransaction.find({'_id':ObjectId(transaction_id)}))
1999
        if len(transaction) > 0:
2000
            if (transaction[0])['payout_status'] ==1:
16753 manish.sha 2001
                get_mongo_connection().AppOrder.AppTransaction.update({'_id':ObjectId(transaction_id)},{"$set":{'payout_amount':float(payout), 'payout_description': CB_APPROVED,'payout_status':2, 'cashback_status': 2, 'cash_back_description': CB_APPROVED, 'payout_time':to_java_date(datetime.now())}})
16782 manish.sha 2002
 
2003
                approvedAppTransaction = approved_app_transactions.get_by(transaction_id=transaction_id)
2004
                if approvedAppTransaction is None:
2005
                    approvedAppTransaction = approved_app_transactions()
16919 manish.sha 2006
                    approvedAppTransaction.app_id = transaction[0].get('app_id')
16782 manish.sha 2007
                    approvedAppTransaction.cash_back_description = CB_APPROVED
16919 manish.sha 2008
                    approvedAppTransaction.retailer_id = transaction[0].get('retailer_id')
16782 manish.sha 2009
                    approvedAppTransaction.transaction_id = transaction_id
16919 manish.sha 2010
                    approvedAppTransaction.transaction_time = to_py_date(long(transaction[0].get('transaction_time')))
2011
                    approvedAppTransaction.redirect_url = transaction[0].get('redirect_url')
16782 manish.sha 2012
                    approvedAppTransaction.payout_status = 2
2013
                    approvedAppTransaction.payout_description = CB_APPROVED
2014
                    approvedAppTransaction.cashback_status = 2 
2015
                    approvedAppTransaction.payout_amount = long(payout)
2016
                    approvedAppTransaction.payout_time = datetime.now()
16919 manish.sha 2017
                    approvedAppTransaction.offer_price = long(transaction[0].get('offer_price')) 
2018
                    approvedAppTransaction.overridenCashBack = transaction[0].get('overridenCashBack')
2019
                    approvedAppTransaction.isCashBackOverriden = transaction[0].get('isCashBackOverriden')
2020
                    approvedAppTransaction.user_payout = transaction[0].get('user_payout')
16782 manish.sha 2021
                    approvedAppTransaction.cashBackConsidered = False
16915 manish.sha 2022
                    if transaction[0].get('final_user_payout') is not None:
2023
                        approvedAppTransaction.final_user_payout = transaction[0].get('final_user_payout')
2024
                    else:
16919 manish.sha 2025
                        if transaction[0].get('isCashBackOverriden'):
2026
                            approvedAppTransaction.final_user_payout = transaction[0].get('overridenCashBack')
16915 manish.sha 2027
                        else:
16919 manish.sha 2028
                            approvedAppTransaction.final_user_payout = transaction[0].get('user_payout')
16782 manish.sha 2029
                    session.commit()
2030
 
2031
                    updateResult = _updateApprovedCashbackToUser(approvedAppTransaction.id)
16631 manish.sha 2032
                else:
16783 manish.sha 2033
                    approvedAppTransaction.payout_amount = long(payout)
2034
                    approvedAppTransaction.payout_time = datetime.now()
2035
                    if approvedAppTransaction.cashBackConsidered == False:
2036
                        updateResult = _updateApprovedCashbackToUser(approvedAppTransaction.id)
2037
                    session.commit()
16782 manish.sha 2038
 
2039
                    '''
2040
                    try:
2041
                        if int(transaction[0]['offer_price']) != payout or int(transaction[0]['user_payout']) < payout:
2042
                            _sendAlertForAppPayouts(int(transaction[0]['app_id']), int(transaction[0]['offer_price']), int(transaction[0]['user_payout']), payout)
2043
                    except:
2044
                        print traceback.print_exc()
2045
                    '''
16556 kshitij.so 2046
                return {'status':'ok','message':'Payout updated'}
2047
            elif (transaction[0])['payout_status'] ==2:
2048
                return {'status':'ok','message':'Payout already processed'}
2049
            else:
2050
                return {'status':'fail','message':'Something is wrong'}
2051
        else:
2052
            return {'status':'fail','message':'transaction_id not found'}
2053
    except:
16657 manish.sha 2054
        print traceback.print_exc()
16631 manish.sha 2055
        try:
16753 manish.sha 2056
            get_mongo_connection().AppOrder.AppTransaction.update({'_id':ObjectId(transaction_id)},{"$set":{'payout_amount':None, 'payout_description': CB_INIT,'payout_status':1, 'cashback_status': 1, 'cash_back_description': CB_INIT, 'payout_time':None}})
16631 manish.sha 2057
        except:
2058
            print 'Data Inconsistency in Cashback Process'
16636 manish.sha 2059
            print traceback.print_exc()
16559 kshitij.so 2060
        return  {'status':'fail','message':'Something is wrong'}
16885 kshitij.so 2061
    finally:
2062
        session.close()
16556 kshitij.so 2063
 
16631 manish.sha 2064
def _updateApprovedCashbackToUser(approvedAppTransactionId):
2065
    approvedAppTransaction = approved_app_transactions.get_by(id=approvedAppTransactionId)
16915 manish.sha 2066
    if approvedAppTransaction.retailer_id < 0:
2067
        return False
2068
 
16631 manish.sha 2069
    currentMonth = datetime.today().month
2070
    currentDay = datetime.today().day
2071
    currentYear = datetime.today().year
2072
    fortNight = (currentMonth - 1)*2 + (currentDay/15)
2073
    if currentDay == 30 or currentDay ==31:
2074
        fortNight = fortNight-1
2075
    userAppCashbackObj = user_app_cashbacks.query.filter(user_app_cashbacks.yearVal==currentYear).filter(user_app_cashbacks.user_id==approvedAppTransaction.retailer_id).filter(user_app_cashbacks.fortnightOfYear==fortNight).filter(user_app_cashbacks.status=='Approved').first()
2076
    userAppInstallObj = user_app_installs.query.filter(user_app_installs.user_id==approvedAppTransaction.retailer_id).filter(user_app_installs.app_id==approvedAppTransaction.app_id).filter(user_app_installs.transaction_date==datetime(currentYear, currentMonth, currentDay, 0, 0, 0, 0).date()).first()
2077
    try:
2078
        if userAppCashbackObj is None:
2079
            userAppCashbackObj = user_app_cashbacks()
2080
            userAppCashbackObj.user_id = approvedAppTransaction.retailer_id
2081
            userAppCashbackObj.status = 'Approved'
16915 manish.sha 2082
            userAppCashbackObj.amount = approvedAppTransaction.final_user_payout
16631 manish.sha 2083
            userAppCashbackObj.fortnightOfYear = fortNight
2084
            userAppCashbackObj.yearVal = currentYear
2085
        else:
16915 manish.sha 2086
            userAppCashbackObj.amount = userAppCashbackObj.amount + approvedAppTransaction.final_user_payout
16631 manish.sha 2087
 
2088
        if userAppInstallObj is None:
2089
            app_offer = app_offers.get_by(id=approvedAppTransaction.app_id)
2090
            userAppInstallObj = user_app_installs()
2091
            userAppInstallObj.user_id = approvedAppTransaction.retailer_id
2092
            userAppInstallObj.fortnightOfYear = fortNight
2093
            userAppInstallObj.transaction_date = datetime(currentYear, currentMonth, currentDay, 0, 0, 0, 0).date()
2094
            userAppInstallObj.app_id = approvedAppTransaction.app_id
2095
            userAppInstallObj.app_name = app_offer.app_name
2096
            userAppInstallObj.installCount = 1
16915 manish.sha 2097
            userAppInstallObj.payoutAmount = approvedAppTransaction.final_user_payout
16631 manish.sha 2098
        else:
2099
            userAppInstallObj.installCount = userAppInstallObj.installCount + 1
16915 manish.sha 2100
            userAppInstallObj.payoutAmount = userAppInstallObj.payoutAmount +approvedAppTransaction.final_user_payout
16631 manish.sha 2101
 
2102
        approvedAppTransaction.cashBackConsidered = True
2103
        session.commit()
2104
        return True
2105
    except:
2106
        session.rollback()
16636 manish.sha 2107
        print traceback.print_exc()
16631 manish.sha 2108
        return False
16693 manish.sha 2109
 
2110
def _sendAlertForAppPayouts(app_id, offerPrice, userPayout, payout):
2111
    m = Email('localhost')
2112
    mFrom = "dtr@shop2020.in"
2113
    m.setFrom(mFrom)
2114
    mTo = ['rajneesh.arora@saholic.com','kshitij.sood@saholic.com','chaitnaya.vats@saholic.com','manoj.kumar@saholic.com','manish.sharma@shop2020.in']
2115
    for receipient in mTo:
2116
        m.addRecipient(receipient)
2117
    appOffer = app_offers.get_by(id=app_id)
2118
    if offerPrice != payout:
2119
        m.setSubject("Mismatch in Offer Price and Actual Pay Out for App Id:- "+str(appOffer.id)+" App Name:- "+str(appOffer.app_name))
2120
        message1 = "Offer Price:- "+ str(appOffer.offer_price) + "\n" + "Actual Pay Out:- "+ str(payout)
2121
        m.setTextBody(message1)
2122
    if userPayout > payout:
2123
        m.setSubject("User Pay Out greater than actual PayOut for App Id:- "+str(appOffer.id)+" App Name:- "+str(appOffer.app_name))
2124
        message2 = "User Pay Out Price:- "+ str(appOffer.user_payout) + "\n" + "Actual Pay Out:- "+ str(payout)
2125
        m.setTextBody(message2)
2126
    m.send()
16631 manish.sha 2127
 
16789 amit.gupta 2128
def rejectCashback(orderId, subOrderId):
16833 amit.gupta 2129
    cashBack = get_mongo_connection().Dtr.merchantOrder.update({"orderId":orderId, "subOrders.merchantSubOrderId":subOrderId}, 
16789 amit.gupta 2130
                                                               {"$set":{"subOrders.$.cashBackStatus":CB_REJECTED}})
16837 amit.gupta 2131
    print cashBack
16836 amit.gupta 2132
    return cashBack.get("nModified")
16894 manish.sha 2133
 
2134
def getAppOffers(retailer_id):
2135
    if not bool(mc.get("cached_app_offers_"+str(retailer_id))):
2136
        populateAppOffers(retailer_id)
2137
    return mc.get("cached_app_offers_"+str(retailer_id)) 
2138
 
2139
def populateAppOffers(retailerId):
2140
    retailerId = int(retailerId)
2141
    #offset = req.get_param_as_int("offset")
2142
    #limit = req.get_param_as_int("limit")
16941 manish.sha 2143
    nonPriortizedOffers = session.query(app_offers.id).join((appmasters,appmasters.id==app_offers.appmaster_id)).filter(app_offers.affiliate_id==retailerId).filter(appmasters.showApp==True).filter(app_offers.show==True).filter(app_offers.offer_active==True).filter(app_offers.offer_price>0).filter(appmasters.rank==0).order_by(desc('user_payout')).all()
2144
    priortizeders = session.query(app_offers.id, appmasters.rank).join((appmasters,appmasters.id==app_offers.appmaster_id)).filter(app_offers.affiliate_id==retailerId).filter(appmasters.showApp==True).filter(app_offers.show==True).filter(app_offers.offer_active==True).filter(app_offers.offer_price>0).filter(appmasters.rank>0).order_by(asc(appmasters.rank)).all()
16894 manish.sha 2145
    #session.query(app_offers.id,app_offers.appmaster_id, app_offers.app_name, app_offers.affiliate_offer_id, app_offers.image_url, app_offers.downloads, app_offers.link, app_offers.offer_price, app_offers.offerCategory, app_offers.package_name, app_offers.promoImage, app_offers.ratings, case([(app_offers.override_payout == True, app_offers.overriden_payout)], else_=app_offers.user_payout).label('user_payout'), case([(appmasters.shortDescription != None, appmasters.shortDescription)], else_=None).label('shortDescription'), case([(appmasters.longDescription != None, appmasters.longDescription)], else_=None).label('longDescription'), appmasters.customerOneLiner, appmasters.retailerOneLiner,app_offers.priority, app_offers.offerCondition, app_offers.location).join((appmasters,appmasters.id==app_offers.appmaster_id)).filter(app_offers.affiliate_id==retailerId).filter(appmasters.showApp==True).filter(app_offers.show==True).filter(app_offers.offer_active==True).filter(app_offers.offer_price>0).order_by(case([(app_offers.priority.in_(tuple(nullCheckList)), 1)], else_=0), asc(app_offers.priority),desc('user_payout')).all()
2146
 
2147
    appOffersMap = {}
2148
    priorityList = []
2149
    priorityMap = {}
2150
    for offer in priortizeders:
16941 manish.sha 2151
        if priorityMap.has_key(long(offer[1])):
2152
            offersVal = priorityMap.get(long(offer[1]))
2153
            offersVal.append(offer)
2154
            priorityMap[long(offer[1])]=offersVal
2155
        else:
2156
            offersVal = []
2157
            offersVal.append(offer)
2158
            priorityMap[long(offer[1])]=offersVal
2159
 
16894 manish.sha 2160
    priorityList = sorted(priorityMap)
2161
 
2162
    maxCount = len(nonPriortizedOffers) + len(priortizeders)
2163
 
16909 manish.sha 2164
    if priorityList is not None and len(priorityList)>0:
2165
        if maxCount < max(priorityList):
2166
            maxCount = max(priorityList)
16894 manish.sha 2167
 
2168
    count = 1
2169
    blockedPlaces = []
2170
    availablePlaces = []
2171
    while count <= maxCount:
2172
        if count in priorityList:
2173
            blockedPlaces.append(count)
2174
        else:
2175
            availablePlaces.append(count)
2176
        count = count +1
16941 manish.sha 2177
    print 'Blocked Places', blockedPlaces
16894 manish.sha 2178
    for val in blockedPlaces:
16941 manish.sha 2179
        key = val
2180
        for offerObj in priorityMap.get(val):
2181
            while appOffersMap.has_key(key):
2182
                key = key+1
2183
            appOffersMap[key] = long(offerObj[0])
2184
            if key in availablePlaces:
2185
                availablePlaces.remove(key)
2186
 
2187
    print 'Available Places', availablePlaces
2188
 
16894 manish.sha 2189
    i=0
2190
    for val in availablePlaces:
16899 manish.sha 2191
        if i<len(nonPriortizedOffers):
16902 manish.sha 2192
            appOffersMap[val]= long(nonPriortizedOffers[i][0])
16899 manish.sha 2193
        else:
2194
            break
2195
        i=i+1
16901 manish.sha 2196
    print 'AppOffersMap', appOffersMap
16894 manish.sha 2197
 
2198
    finalAppOffersMap = {}
2199
    if len(appOffersMap) > 0:
2200
        for key in sorted(appOffersMap):               
2201
            finalAppOffersMap[key] = appOffersMap[key]
2202
 
2203
        mc.set("cached_app_offers_"+str(retailerId), finalAppOffersMap, 120)
2204
    else:
2205
        print 'No Offers'
2206
        mc.set("cached_app_offers_"+str(retailerId), {}, 10)              
17280 manish.sha 2207
 
18384 amit.gupta 2208
def sendNotification(userIds, campaignName, title, message,notificationtype, url, expiresat='2999-01-01', sendsms=False, smstext=None):
2209
    campaignId = addNotificationCampaign(campaignName, title, message, notificationtype, url, None, sendsms, smstext)
17280 manish.sha 2210
    payload = {}
2211
    payload["user_id"]= userIds[0]
2212
    payload["type"]="pending"
2213
    payload["notification_campaign_id"]= campaignId
2214
    payload["status"]=0
16546 kshitij.so 2215
 
17280 manish.sha 2216
    payloadList = []
2217
    payloadList.append(payload)
17281 manish.sha 2218
    jsonObj = json.dumps([dict(pn) for pn in payloadList])
2219
    print jsonObj
2220
    pushpostrequest = urllib2.Request("http://45.33.50.227:3001/addPushNotification")
2221
    pushpostrequest.add_header('Content-Type', 'application/json')
2222
    response = urllib2.urlopen(pushpostrequest, jsonObj).read()
17280 manish.sha 2223
    print response
2224
 
18384 amit.gupta 2225
def addNotificationCampaign(name, title, message, type, url, sql, sendsms, smstext):
17280 manish.sha 2226
    notificationCampaign = notification_campaigns()
2227
    notificationCampaign.name = name
2228
    notificationCampaign.title = title
2229
    notificationCampaign.type = type
2230
    notificationCampaign.message = message
2231
    notificationCampaign.url = url
2232
    notificationCampaign.sql = sql
2233
    notificationCampaign.expiresat = datetime(2999, 1, 1)
2234
    notificationCampaign.status = 'active'
2235
    notificationCampaign.created = datetime.now()
18384 amit.gupta 2236
    notificationCampaign.sendsms = sendsms
2237
    notificationCampaign.messagetext = smstext
17280 manish.sha 2238
 
2239
    session.commit()
2240
    campaignId = notificationCampaign.id
2241
 
2242
    session.close()
2243
    return campaignId
17302 kshitij.so 2244
 
2245
def getDummyDeals(categoryId, offset, limit):
2246
    outer_query = []
2247
    outer_query.append({"showDeal":1})
2248
    outer_query.append({"category_id":categoryId})
2249
    query = {}
2250
    query['$gt'] = -100
2251
    outer_query.append({'totalPoints':query})
2252
    all_deals = list(get_mongo_connection().Catalog.Deals.find({"$and":outer_query},{'_id':1}).sort([('totalPoints',pymongo.DESCENDING),('bestSellerPoints',pymongo.DESCENDING),('nlcPoints',pymongo.DESCENDING),('rank',pymongo.DESCENDING)]).skip(offset).limit(limit))
2253
    returnObj = []
2254
    for deal in all_deals:
17306 kshitij.so 2255
        item = list(get_mongo_connection().Catalog.MasterData.find({'_id':deal['_id']}))
17734 kshitij.so 2256
        returnObj.append(getItemObjForStaticDeals(item[0],transform=True))
17302 kshitij.so 2257
    return returnObj
17367 kshitij.so 2258
 
17469 kshitij.so 2259
def searchDummyDeals(search_term , limit, offset):
17367 kshitij.so 2260
    data = []
2261
    uniqueMap = {}
2262
    if search_term is not None:
2263
        terms = search_term.split(' ')
2264
        outer_query = []
2265
        for term in terms:
2266
            outer_query.append({"source_product_name":re.compile(term, re.IGNORECASE)})
2267
        try:
2268
            collection = get_mongo_connection().Catalog.MasterData.find({"$and":outer_query,'source_id':{'$in':SOURCE_MAP.keys()}})
2269
            for record in collection:
2270
                data.append(record)
2271
        except:
2272
            pass
2273
    else:
2274
        collection = get_mongo_connection().Catalog.MasterData.find({'source_id':{'$in':SOURCE_MAP.keys()}})
2275
        for record in collection:
2276
            data.append(record)
2277
    for x in data:
2278
        if not uniqueMap.has_key(x['skuBundleId']):
17469 kshitij.so 2279
            uniqueMap[x['skuBundleId']] = {'source_product_name':x['source_product_name'],'skuBundleId':x['skuBundleId'],'thumbnail':x['thumbnail']}
17367 kshitij.so 2280
 
17469 kshitij.so 2281
    if (offset + limit) > len(uniqueMap.values()):
2282
        limit = len(uniqueMap.values()) - offset - 1
2283
 
2284
    count = 0
2285
#     for x in uniqueMap.values():
2286
#         print count,
2287
#         print '\t',
2288
#         print x
2289
#         count = count+1
17555 kshitij.so 2290
 
17469 kshitij.so 2291
    print offset
2292
    print limit
2293
 
2294
    return uniqueMap.values()[offset:limit+offset]
17367 kshitij.so 2295
 
17469 kshitij.so 2296
 
2297
def getDummyPricing(skuBundleId):
2298
    collection = get_mongo_connection().Catalog.MasterData.find({'source_id':{'$in':SOURCE_MAP.keys()},'skuBundleId':skuBundleId,'in_stock':1})
2299
    print collection.count()
2300
    cheapest = 99999999
2301
    cheapestDetails= None
2302
    returnMap = {}
2303
 
2304
    for d in collection:
2305
        if d['available_price'] < cheapest:
2306
            cheapestDetails = d
2307
            cheapest = int(d['available_price'])
2308
        if returnMap.has_key(d['source_id']):
17733 kshitij.so 2309
            d = getItemObjForStaticDeals(d,transform=True)
17469 kshitij.so 2310
            d['toShowStore'] = 0
2311
            returnMap[d['source_id']].append(d)
2312
        else:
2313
            temp = []
17733 kshitij.so 2314
            d = getItemObjForStaticDeals(d,transform=True)
17469 kshitij.so 2315
            d['toShowStore'] = 1
2316
            temp.append(d)
2317
            returnMap[d['source_id']] = temp
2318
    returnMap['cheapest'] = cheapestDetails
2319
    for y in returnMap.itervalues():
2320
        if isinstance(y, (list, tuple)):
2321
            (y[len(y)-1])['lastElement'] = 1
2322
        else:
2323
            pass
2324
    if returnMap['cheapest'] ==None:
2325
        dum = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':skuBundleId,'source_id':{"$in":SOURCE_MAP.keys()}})
2326
        returnMap['cheapest'] = {'thumbnail':dum['thumbnail'],'source_product_name':dum['source_product_name']}
2327
    return returnMap
17555 kshitij.so 2328
 
17603 kshitij.so 2329
 
17555 kshitij.so 2330
def addDealObject(data):
17570 kshitij.so 2331
    if data.get('img_url') is None or data.get('img_url')=="" or data.get('name') is None or data.get('name')=="":
2332
        return {0:'Invalid data'}   
17555 kshitij.so 2333
    try:
2334
        max_id = list(get_mongo_connection().Catalog.DealObject.find().sort([('_id',pymongo.DESCENDING)]).limit(1))
2335
        if len(max_id) ==0:
2336
            max_id = 0
17559 kshitij.so 2337
        else:
2338
            max_id = max_id[0]['_id']
2339
        data['_id'] = max_id +1
17555 kshitij.so 2340
        get_mongo_connection().Catalog.DealObject.insert(data)
2341
        return {1:'Data added successfully'}
2342
    except:
2343
        return {0:'Error in adding data'}
2344
 
17561 kshitij.so 2345
def getAllDealObjects(offset, limit):
2346
    data = []
2347
    collection = get_mongo_connection().Catalog.DealObject
2348
    cursor = collection.find({}).skip(offset).limit(limit)
2349
    for val in cursor:
17564 kshitij.so 2350
        data.append({'_id':val['_id'],'name':val['name']})
17561 kshitij.so 2351
    return data
17564 kshitij.so 2352
 
2353
def deleteDealObject(id):
2354
    try:
2355
        get_mongo_connection().Catalog.DealObject.remove({'_id':id})
17616 kshitij.so 2356
        get_mongo_connection().Catalog.FeaturedDealsDealObject.remove({'_id':id})
17564 kshitij.so 2357
        return {1:"Deal Object deleted"}
2358
    except:
2359
        return {0:"Error in deleting object"}
17566 kshitij.so 2360
 
2361
def getDealObjectById(id):
2362
    try:
2363
        data = get_mongo_connection().Catalog.DealObject.find({'_id':id})
2364
        return data
2365
    except:
17570 kshitij.so 2366
        return {}
17561 kshitij.so 2367
 
17570 kshitij.so 2368
def updateDealObject(data):
2369
    try:
2370
        _id = data['_id']
2371
        data.pop('_id')
2372
        get_mongo_connection().Catalog.DealObject.update({'_id':_id},{"$set":data},upsert=False)
2373
        return {1:"Data updated successfully"}
2374
    except:
2375
        return {0:"Error in updating data"}
2376
 
17610 kshitij.so 2377
def getAllFeaturedDealsForDealObject(offset, limit):
2378
    data = []
2379
    collection = get_mongo_connection().Catalog.FeaturedDealsDealObject
2380
    cursor = collection.find({}).skip(offset).limit(limit)
2381
    for val in cursor:
2382
        data.append(val)
2383
    return data
2384
 
2385
def addFeaturedDealForDealObject(data):
2386
    collection = get_mongo_connection().Catalog.FeaturedDealsDealObject
2387
    cursor = collection.find({'_id':data['_id']})
2388
    master = get_mongo_connection().Catalog.DealObject.find_one({'_id':data['_id']})
2389
    if master is None:
2390
        return {0:"Deal Object id wrong"}
2391
    otherInfoObj = data['otherInfo']
2392
    toPop = []
2393
    for x,y in otherInfoObj.iteritems():
2394
        if y==0:
2395
            toPop.append(x)
2396
 
2397
    for popItem in toPop:
2398
        otherInfoObj.pop(popItem)
2399
    if len(otherInfoObj.keys())==0:
2400
        return {0:"No rank info to add"}
2401
 
2402
    for x,y in otherInfoObj.iteritems():
2403
        exist = get_mongo_connection().Catalog.FeaturedDealsDealObject.find({'otherInfo.'+x:y})
2404
        if exist.count() >0:
2405
            return {0:"Rank already assigned Deal Object Id %s"%(exist[0]['_id'])}
2406
    if cursor.count() > 0:
2407
        return {0:"Deal Object Id information already present."}
2408
    else:
2409
        collection.insert(data)
2410
        return {1:"Data added successfully"}
2411
 
17616 kshitij.so 2412
def deleteFeaturedDealObject(id):
2413
    try:
2414
        get_mongo_connection().Catalog.FeaturedDealsDealObject.remove({'_id':id})
2415
        return {1:"Deal Object deleted"}
2416
    except:
2417
        return {0:"Error in deleting object"}
17654 kshitij.so 2418
 
2419
def getSubCategoryForFilter(category_id):
2420
    if mc.get("subCategoryFilter") is None:
2421
        print "Populating subcategory data for category_id %d" %(category_id)
2422
        tabData, mobData, accData = [], [], []
2423
 
2424
        accessoriesDeals = get_mongo_connection().Catalog.Deals.aggregate([
2425
                                                                      {"$match":{"category_id":6,"showDeal":1,"totalPoints":{"$gt":-100}}
2426
                                                                    },
2427
                                                                 {"$group" : 
2428
                                                                  {'_id':{'subCategoryId':'$subCategoryId','subCategory':'$subCategory'},'count':{'$sum':1}}
2429
                                                                  }
2430
                                                                ])
2431
 
2432
        for accessoryDeal in accessoriesDeals['result']:
2433
            if accessoryDeal.get('_id').get('subCategoryId') != 0:
2434
                tempMap = {}
2435
                tempMap['subCategory'] = accessoryDeal.get('_id').get('subCategory')
2436
                tempMap['subCategoryId'] = accessoryDeal.get('_id').get('subCategoryId')
2437
                tempMap['count'] = accessoryDeal.get('count')
2438
                accData.append(tempMap)
2439
 
2440
 
2441
        mc.set("subCategoryFilter",{3:mobData, 5:tabData, 6:accData}, 600)  
2442
 
2443
    return sorted(mc.get("subCategoryFilter").get(category_id), key = lambda x: (-x['count'], x['subCategory']))
17610 kshitij.so 2444
 
17727 kshitij.so 2445
def dummyLogin(data):
17731 kshitij.so 2446
    exist = list(get_mongo_connection().Catalog.DummyUser.find({'email':data['email'],'password':data['password']}))
17727 kshitij.so 2447
    if len(exist) > 0:
17728 kshitij.so 2448
        return {'user_id':exist[0]['_id'],'fullName':exist[0]['fullName']}
17727 kshitij.so 2449
    else:
2450
        return {'user_id':0}
17616 kshitij.so 2451
 
17727 kshitij.so 2452
def dummyRegister(data):
2453
    try:
2454
        exist = list(get_mongo_connection().Catalog.DummyUser.find({'email':data['email']}))
2455
        if len(exist) > 0:
2456
            return {'msg':"Email already registered",'user_id':0}
2457
        else:
2458
            max_id = list(get_mongo_connection().Catalog.DummyUser.find().sort([('_id',pymongo.DESCENDING)]).limit(1))
2459
            if len(max_id) ==0:
2460
                max_id = 0
2461
            else:
2462
                max_id = max_id[0]['_id']
2463
            data['_id'] = max_id +1
2464
            get_mongo_connection().Catalog.DummyUser.insert(data)
17728 kshitij.so 2465
            return {'msg':"Registration successful",'user_id':data['_id'],'fullName':data['fullName']}
17727 kshitij.so 2466
    except:
2467
        return {'msg':"Error in registration.",'user_id':0}
2468
 
17731 kshitij.so 2469
def getDummyUser(user_id):
2470
    exist = list(get_mongo_connection().Catalog.DummyUser.find({'_id':user_id}))
2471
    if len(exist) > 0:
2472
        return exist[0]
2473
    else:
2474
        return {'user_id':0,'fullName':"",'email':"","contactNumber":""}
2475
 
2476
def updateDummyUser(data):
2477
    try:
17732 kshitij.so 2478
        get_mongo_connection().Catalog.DummyUser.update({'_id':data['user_id']},{"$set":data},upsert=False)
17731 kshitij.so 2479
        return {'msg':"Data updated successfuly",'response':1}
2480
    except:
2481
        return {'msg':"Unable to update data",'response':0}
17936 kshitij.so 2482
 
18089 kshitij.so 2483
def getDealsForSearchText(subCategoryIds, searchTerm, offset, limit):
2484
    subCategories= [int(subCategoryId) for subCategoryId in subCategoryIds.split('^')]
18106 kshitij.so 2485
    print "SubCategories are ",subCategories
17936 kshitij.so 2486
    payload = {
18106 kshitij.so 2487
    "query": {
17936 kshitij.so 2488
        "bool": {
18106 kshitij.so 2489
            "must": [{
2490
                    "match": {
2491
                        "title": {
2492
                            "query": searchTerm,
2493
                            "operator": "and"
2494
                        }
17936 kshitij.so 2495
                    }
18106 kshitij.so 2496
                },
2497
 
2498
                {
2499
                    "in": {
2500
                        "subCategoryId": subCategories
2501
                    }
17936 kshitij.so 2502
                }
18106 kshitij.so 2503
 
2504
            ]
17936 kshitij.so 2505
        }
19135 kshitij.so 2506
    },
2507
    "sort": { "dealPoints": { "order": "desc" }}
18106 kshitij.so 2508
}
17944 kshitij.so 2509
    result =  get_elastic_search_connection().search(index="my_index", body=payload, from_=offset, size=limit)
17936 kshitij.so 2510
    totalCount= result['hits']['total']
2511
    temp = []
2512
    bundles = []
2513
    if len(result['hits']['hits']) > 0:
2514
        for x in result['hits']['hits']:
2515
            tempMap = {}
2516
            tempMap = {'skuBundleId':x['_source']['id'],'title':x['_source']['title']}
2517
            temp.append(tempMap)
2518
            bundles.append(x['_source']['id'])
18271 kshitij.so 2519
    #return temp
17936 kshitij.so 2520
    return getDealsForNotification(bundles, skipSplitting=True)
17731 kshitij.so 2521
 
18089 kshitij.so 2522
def getCountForSearchText(subCategoryIds, searchTerm):
2523
    subCategories= [int(subCategoryId) for subCategoryId in subCategoryIds.split('^')]
17936 kshitij.so 2524
    payload = {
18106 kshitij.so 2525
    "query": {
17936 kshitij.so 2526
        "bool": {
18106 kshitij.so 2527
            "must": [{
2528
                    "match": {
2529
                        "title": {
2530
                            "query": searchTerm,
2531
                            "operator": "and"
2532
                        }
17936 kshitij.so 2533
                    }
18106 kshitij.so 2534
                },
2535
 
2536
                {
2537
                    "in": {
2538
                        "subCategoryId": subCategories
2539
                    }
17936 kshitij.so 2540
                }
18106 kshitij.so 2541
 
2542
            ]
17936 kshitij.so 2543
        }
2544
    }
18106 kshitij.so 2545
}
17731 kshitij.so 2546
 
17944 kshitij.so 2547
    result =  get_elastic_search_connection().search(index="my_index", body=payload)
17936 kshitij.so 2548
    totalCount= result['hits']['total']
2549
    return {'searchTerm':searchTerm,'count':totalCount}
18271 kshitij.so 2550
 
2551
def getDealById(id):
2552
    item = list(get_mongo_connection().Catalog.MasterData.find({'_id':int(id)}))
2553
    d = get_mongo_connection().Catalog.Deals.find_one({'_id':int(id)})
19193 kshitij.so 2554
    if len(item) ==0:
2555
        return {}
18271 kshitij.so 2556
    if d is None:
2557
        d = {'showDp':0,'dp':0}
2558
    try:
2559
        cashBack = getCashBack(item[0]['_id'], item[0]['source_id'], item[0]['category_id'])
2560
        if not cashBack or cashBack.get('cash_back_status')!=1:
2561
            item[0]['cash_back_type'] = 0
2562
            item[0]['cash_back'] = 0
2563
        else:
2564
            if cashBack.get('maxCashBack') is not None:
2565
 
2566
                if cashBack.get('cash_back_type') ==1 and (float(cashBack.get('cash_back'))*item[0]['available_price'])/100 > cashBack.get('maxCashBack'):
2567
                    cashBack['cash_back_type'] = 2
2568
                    cashBack['cash_back'] = cashBack['maxCashBack']
2569
                elif cashBack.get('cash_back_type') ==2 and cashBack.get('cash_back') > cashBack.get('maxCashBack'):
2570
                    cashBack['cash_back'] = cashBack['maxCashBack']
17936 kshitij.so 2571
 
18271 kshitij.so 2572
            item[0]['cash_back_type'] = int(cashBack['cash_back_type'])
2573
            item[0]['cash_back'] = cashBack['cash_back']
2574
    except:
2575
        print "Error in adding cashback to deals"
2576
        item[0]['cash_back_type'] = 0
2577
        item[0]['cash_back'] = 0
2578
    try:
2579
        item[0]['dp'] = d['dp']
2580
        item[0]['showDp'] = d['showDp']
2581
    except:
2582
        item[0]['dp'] = 0.0
2583
        item[0]['showDp'] = 0
2584
    try:
2585
        item[0]['thumbnail'] = item[0]['thumbnail'].strip()
2586
    except:
2587
        pass
2588
 
2589
    try:
2590
        if item[0]['showVideo']==0:
2591
            item[0]['videoLink'] =""
2592
    except:
2593
        item[0]['videoLink'] =""
2594
    try:
2595
        if item[0]['quantity'] >1:
2596
            ppq = float(item[0]['available_price'])/item[0]['quantity']
2597
 
2598
            if ppq == round(ppq):
2599
                item[0]['ppq'] = int(ppq)
2600
            else:
2601
                item[0]['ppq'] = round(ppq,2)
2602
        else:
2603
            item[0]['ppq'] = 0
2604
    except:
2605
        item[0]['ppq'] = 0
2606
    if item[0]['category_id']!=6:
2607
        try:
18830 kshitij.so 2608
            item[0]['filterLinkBrand'] = '/category/'+str(int(item[0]['category_id']))+'?searchFor='+urllib.quote(item[0]['brand'])+'&filter=brand&brands='+str(int(item[0]['brand_id']))
2609
            item[0]['filterTextBrand'] = (item[0]['brand'])
18271 kshitij.so 2610
        except:
18830 kshitij.so 2611
            pass
18271 kshitij.so 2612
    else:
2613
        try:
2614
            if item[0]['subCategory']=='' or item[0]['subCategory'] is None or item[0]['subCategoryId']==0:
2615
                raise
18830 kshitij.so 2616
            item[0]['filterLinkSubCategory'] = '/category/'+str(int(item[0]['category_id']))+'?searchFor='+urllib.quote(item[0]['subCategory'])+'&filter=subcategory&subcategories='+str(int(item[0]['subCategoryId']))
2617
            item[0]['filterTextSubCategory'] = (item[0]['subCategory'])
2618
            item[0]['filterLinkBrand'] = '/category/'+str(int(item[0]['category_id']))+'?searchFor='+urllib.quote(item[0]['brand'])+'&filter=brand&brands='+str(int(item[0]['brand_id']))
2619
            item[0]['filterTextBrand'] = (item[0]['brand'])
18271 kshitij.so 2620
        except:
18830 kshitij.so 2621
            pass
18271 kshitij.so 2622
    try:
2623
        if item[0]['source_id']==4:
2624
            item_availability_info = mc.get("item_availability_"+str(item[0]['identifier']).strip())
2625
            if item_availability_info is None or len(item_availability_info)==0:
2626
                item[0]['availabilityInfo'] = [{}]
2627
            else:
2628
                item[0]['availabilityInfo'] = item_availability_info
2629
    except:
2630
        item[0]['availabilityInfo'] = [{}]
19193 kshitij.so 2631
 
2632
    if item[0]['source_id']==4:
2633
        for av_info in item[0]['availabilityInfo']:
2634
            if not av_info:
2635
                continue
2636
            av_info['cash_back'] = item[0]['cash_back']
2637
            av_info['cash_back_type'] = item[0]['cash_back_type']
2638
            netPriceAfterCashBack = av_info['sellingPrice'] 
19199 kshitij.so 2639
            if av_info['cash_back_type'] ==1:
19193 kshitij.so 2640
                netPriceAfterCashBack = av_info['sellingPrice'] - float(av_info['sellingPrice'])*av_info['cash_back']/100
19199 kshitij.so 2641
            elif av_info['cash_back_type'] ==2:
19193 kshitij.so 2642
                netPriceAfterCashBack = av_info['sellingPrice'] - av_info['cash_back']
2643
            else:
2644
                pass
2645
            av_info['netPriceAfterCashBack'] = netPriceAfterCashBack
2646
 
2647
    if item[0]['source_id'] != SOURCE_MAP.get("PAYTM.COM"):
2648
        if item[0]['codAvailable'] ==1:
2649
            paytmPrice = item[0]['available_price']
2650
        else:
2651
            paytmPrice = item[0]['gross_price']
2652
 
2653
        if item[0]['cash_back_type'] ==1:
2654
            item[0]['netPriceAfterCashBack'] = paytmPrice -  float(paytmPrice)*item[0]['cash_back']/100
2655
        elif item[0]['cash_back_type'] ==2:
2656
            item[0]['netPriceAfterCashBack'] = paytmPrice -  item[0]['cash_back']
2657
        else:
2658
            item[0]['netPriceAfterCashBack'] = paytmPrice
2659
 
2660
    else:
2661
        if item[0]['cash_back_type'] ==1:
2662
            item[0]['netPriceAfterCashBack'] = item[0]['available_price'] -  float(item[0]['available_price'])*item[0]['cash_back']/100
2663
        elif item[0]['cash_back_type'] ==2:
2664
            item[0]['netPriceAfterCashBack'] = item[0]['available_price'] -  item[0]['cash_back']
2665
        else:
2666
            item[0]['netPriceAfterCashBack'] = item[0]['available_price']
2667
 
18271 kshitij.so 2668
    return item[0]
2669
 
2670
 
13572 kshitij.so 2671
def main():
19135 kshitij.so 2672
    getDealsForSearchText("20", 'Samsung', 0, 10)
17944 kshitij.so 2673
 
13572 kshitij.so 2674
if __name__=='__main__':
13932 amit.gupta 2675
    main()
17469 kshitij.so 2676
 
17936 kshitij.so 2677