Subversion Repositories SmartDukaan

Rev

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