Subversion Repositories SmartDukaan

Rev

Rev 17663 | Rev 17669 | 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:
17668 kshitij.so 703
            filtered_deals, dataExist = filterDeals(category_specific_deals, filterData)
14791 kshitij.so 704
        except:
16067 kshitij.so 705
            traceback.print_exc()
17668 kshitij.so 706
    if dataExist:
14791 kshitij.so 707
 
17668 kshitij.so 708
        if not insert_featured_deals:
709
            sortedMap = {}
710
            rankMap = {}
711
            rank = 0
712
            for sorted_deal in sorted_deals:
713
 
714
                if len(filtered_deals) > 0 and  sorted_deal['skuBundleId'] not in filtered_deals:
715
                    continue
716
 
717
                if sortedMap.get(sorted_deal['skuBundleId']) is None:
718
                    sortedMap[sorted_deal['skuBundleId']] = {rank:[sorted_deal]}
719
                    rankMap[rank] = (sortedMap[sorted_deal['skuBundleId']].values())[0]
720
                    rank = rank +1
721
                else:
722
                    for temp_list in sortedMap.get(sorted_deal['skuBundleId']).itervalues():
723
                        temp_list.append(sorted_deal)
724
                    rankMap[(sortedMap.get(sorted_deal['skuBundleId']).keys())[0]] = temp_list
725
        else:
726
            filterMap = {}
727
            rank = 0
728
            if len(filtered_deals) > 0:
729
                try:
730
                    od = collections.OrderedDict(sorted(rankMap.items()))
731
                except:
732
                    od = ordereddict.OrderedDict(sorted(rankMap.items()))
733
                for k, v in od.iteritems():
734
                    if v[0].get('skuBundleId') in filtered_deals:
735
                        filterMap[rank] = v
736
                        rank =rank+1
737
                rankMap = filterMap
738
 
739
        rankCounter = offset
740
        if filterData is None:
741
            if mc.get("featured_deals_deal_object") is None or not bool(mc.get("featured_deals_deal_object")):
742
                try:
743
                    __populateFeaturedDealsForDealObject()
744
                    fd_dealObject = mc.get("featured_deals_deal_object")
745
                except:
746
                    fd_dealObject = {3:{},5:{},6:{}}
17367 kshitij.so 747
            else:
17668 kshitij.so 748
                fd_dealObject = mc.get("featured_deals_deal_object")
749
 
17367 kshitij.so 750
    else:
17668 kshitij.so 751
        rankMap = {}
17618 kshitij.so 752
 
17627 kshitij.so 753
    for dealList in [rankMap.get(k, []) for k in range(offset, offset+limit)]:
17629 kshitij.so 754
        if filterData is None:
17627 kshitij.so 755
            while(True):
756
 
757
                rankCounter = rankCounter+1
758
                if (fd_dealObject.get(category_id).get(rankCounter)) is not None:
759
                    deal_object_temp = []
760
                    deal_object_temp.append(fd_dealObject.get(category_id).get(rankCounter).get('object'))
761
                    dealsListMap.append(deal_object_temp)
762
                else:
763
                    break
17620 kshitij.so 764
 
16079 kshitij.so 765
        temp = []
17367 kshitij.so 766
        if dealList is None or len(dealList)==0:
17369 kshitij.so 767
            print "Empty deal;lisr"
17367 kshitij.so 768
            continue
16067 kshitij.so 769
        for d in dealList:
770
            item = list(get_mongo_connection().Catalog.MasterData.find({'_id':d['_id']}))
16320 kshitij.so 771
            if len(item) ==0:
772
                continue
16079 kshitij.so 773
            item[0]['persPoints'] = d['persPoints']
774
            if d['dealType'] == 1 and d['source_id'] ==1:
16511 kshitij.so 775
                try:
776
                    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())}}))
777
                    item[0]['marketPlaceUrl'] = manualDeal[0]['dealUrl'].strip()
778
                except:
779
                    pass
16079 kshitij.so 780
            elif d['source_id'] ==3:
781
                item[0]['marketPlaceUrl'] = item[0]['marketPlaceUrl']+'?supc='+item[0].get('identifier')
782
            else:
783
                pass 
784
            try:
785
                cashBack = getCashBack(item[0]['_id'], item[0]['source_id'], item[0]['category_id'])
786
                if not cashBack or cashBack.get('cash_back_status')!=1:
14037 kshitij.so 787
                    item[0]['cash_back_type'] = 0
788
                    item[0]['cash_back'] = 0
16079 kshitij.so 789
                else:
17180 kshitij.so 790
                    if cashBack.get('maxCashBack') is not None:
791
 
792
                        if cashBack.get('cash_back_type') ==1 and (float(cashBack.get('cash_back'))*item[0]['available_price'])/100 > cashBack.get('maxCashBack'):
793
                            cashBack['cash_back_type'] = 2
794
                            cashBack['cash_back'] = cashBack['maxCashBack']
795
                        elif cashBack.get('cash_back_type') ==2 and cashBack.get('cash_back') > cashBack.get('maxCashBack'):
796
                            cashBack['cash_back'] = cashBack['maxCashBack']
797
 
16079 kshitij.so 798
                    item[0]['cash_back_type'] = int(cashBack['cash_back_type'])
799
                    item[0]['cash_back'] = cashBack['cash_back']
800
            except:
801
                print "Error in adding cashback to deals"
802
                item[0]['cash_back_type'] = 0
803
                item[0]['cash_back'] = 0
16252 kshitij.so 804
            try:
805
                item[0]['dp'] = d['dp']
806
                item[0]['showDp'] = d['showDp']
807
            except:
808
                item[0]['dp'] = 0.0
809
                item[0]['showDp'] = 0
16483 kshitij.so 810
            try:
811
                item[0]['thumbnail'] = item[0]['thumbnail'].strip()
812
            except:
17115 manish.sha 813
                pass
17603 kshitij.so 814
 
815
            try:
816
                if item[0]['showVideo']==0:
817
                    item[0]['videoLink'] =""
818
            except:
819
                item[0]['videoLink'] =""
820
            try:
821
                if item[0]['quantity'] >1:
822
                    ppq = float(item[0]['available_price'])/item[0]['quantity']
823
 
824
                    if ppq == round(ppq):
825
                        item[0]['ppq'] = int(ppq)
826
                    else:
827
                        item[0]['ppq'] = round(ppq,2)
828
                    item[0]['tagline'] = ""
829
                else:
830
                    item[0]['ppq'] = 0
831
            except:
832
                item[0]['ppq'] = 0
17627 kshitij.so 833
            if filterData is None:
834
                try:
835
                    item[0]['filterLink'] = '/category/'+str(int(item[0]['category_id']))+'?filter=brand&brands='+str(int(item[0]['brand_id']))
836
                except:
837
                    item[0]['filterLink'] = ""
16079 kshitij.so 838
            temp.append(item[0])
16125 kshitij.so 839
        if len(temp) > 1:
16126 kshitij.so 840
            temp = sorted(temp, key = lambda x: (x['available_price']),reverse=False)
16079 kshitij.so 841
        dealsListMap.append(temp)
842
    return dealsListMap
14037 kshitij.so 843
 
14791 kshitij.so 844
def filterDeals(deals, filterData):
17658 kshitij.so 845
    print "Filter data ", filterData
14791 kshitij.so 846
    brandsFiltered = []
17657 kshitij.so 847
    subCategoryFiltered = []
14791 kshitij.so 848
    filterArray = filterData.split('|')
849
    for data in filterArray:
850
        try:
851
            filter, info = data.split(':')
852
        except Exception as ex:
853
            traceback.print_exc()
854
            continue
17657 kshitij.so 855
        if filter == 'brandFilter':
14791 kshitij.so 856
            toFilter = info.split('^')
857
            print "brand filter ",toFilter
858
            for deal in deals:
15151 kshitij.so 859
                if str(int(deal['brand_id'])) in toFilter:
14791 kshitij.so 860
                    brandsFiltered.append(deal)
17657 kshitij.so 861
        elif filter =='subCategoryFilter':
862
            toFilter = info.split('^')
863
            print "Sub Category filter ",toFilter
864
            for deal in deals:
865
                if str(int(deal['subCategoryId'])) in toFilter:
866
                    subCategoryFiltered.append(deal)
17668 kshitij.so 867
    print "No of brand filtered ",len(brandsFiltered)
868
    print "No of sub-cat filtered ",len(subCategoryFiltered)
17657 kshitij.so 869
    if len(subCategoryFiltered) == 0:
17367 kshitij.so 870
        return [trend['skuBundleId'] for trend in brandsFiltered]
17663 kshitij.so 871
    elif len(brandsFiltered) == 0:
872
        return [trend['skuBundleId'] for trend in subCategoryFiltered]
17668 kshitij.so 873
    x= [i['skuBundleId'] for i in subCategoryFiltered for j in brandsFiltered if i['_id']==j['_id']]
874
    if len(x) ==0:
875
        return x, False
876
    else:
877
        return x, True
14791 kshitij.so 878
 
879
 
14037 kshitij.so 880
def getDeals(userId, category_id, offset, limit, sort, direction):
17469 kshitij.so 881
    if mc.get("category_cash_back") is None or not bool(mc.get("category_cash_back")):
14037 kshitij.so 882
        populateCashBack()
883
    rank = 1
13771 kshitij.so 884
    deals = {}
13910 kshitij.so 885
    outer_query = []
886
    outer_query.append({"showDeal":1})
887
    query = {}
888
    query['$gt'] = 0
889
    outer_query.append({'totalPoints':query})
890
    if category_id in (3,5):
891
        outer_query.append({'category_id':category_id})
13803 kshitij.so 892
    if sort is None or direction is None:
893
        direct = -1
13910 kshitij.so 894
        print outer_query
895
        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 896
    else:
13910 kshitij.so 897
        print outer_query
13803 kshitij.so 898
        direct = direction
13910 kshitij.so 899
        if sort == "bestSellerPoints":
900
            print "yes,sorting by bestSellerPoints"
901
            data = list(get_mongo_connection().Catalog.Deals.find({"$and":outer_query}).sort([('bestSellerPoints',direct),('rank',direct),('nlcPoints',direct)]).skip(offset).limit(limit))
902
        else:
903
            data = list(get_mongo_connection().Catalog.Deals.find({"$and":outer_query}).sort([(sort,direct)]).skip(offset).limit(limit))
13771 kshitij.so 904
    for d in data:
905
        item = list(get_mongo_connection().Catalog.MasterData.find({'_id':d['_id']}))
906
        if not deals.has_key(item[0]['identifier']):
13921 kshitij.so 907
            item[0]['dealRank'] = rank
908
            try:
14761 kshitij.so 909
                cashBack = getCashBack(item[0]['_id'], item[0]['source_id'], item[0]['category_id'])
13921 kshitij.so 910
                if not cashBack or cashBack.get('cash_back_status')!=1:
13928 kshitij.so 911
                    item[0]['cash_back_type'] = 0
912
                    item[0]['cash_back'] = 0
13921 kshitij.so 913
                else:
14766 kshitij.so 914
                    item[0]['cash_back_type'] = int(cashBack['cash_back_type'])
13928 kshitij.so 915
                    item[0]['cash_back'] = cashBack['cash_back']
13921 kshitij.so 916
            except:
917
                print "Error in adding cashback to deals"
13928 kshitij.so 918
                item[0]['cash_back_type'] = 0
919
                item[0]['cash_back'] = 0
13771 kshitij.so 920
            deals[item[0]['identifier']] = item[0]
13921 kshitij.so 921
 
13771 kshitij.so 922
            rank +=1
13785 kshitij.so 923
    return sorted(deals.values(), key=itemgetter('dealRank'))
924
 
16222 kshitij.so 925
def getItem(skuId,showDp=None):
16224 kshitij.so 926
    temp = []
17469 kshitij.so 927
    if mc.get("category_cash_back") is None or not bool(mc.get("category_cash_back")):
14113 kshitij.so 928
        populateCashBack()
13795 kshitij.so 929
    try:
16222 kshitij.so 930
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'_id':int(skuId)})
931
        if skuData is None:
932
            raise
933
        try:
934
            cashBack = getCashBack(skuData['_id'], skuData['source_id'], skuData['category_id'])
935
            if not cashBack or cashBack.get('cash_back_status')!=1:
936
                skuData['cash_back_type'] = 0
937
                skuData['cash_back'] = 0
938
            else:
939
                skuData['cash_back_type'] = cashBack['cash_back_type']
940
                skuData['cash_back'] = cashBack['cash_back']
941
        except:
942
            print "Error in adding cashback to deals"
943
            skuData['cash_back_type'] = 0
944
            skuData['cash_back'] = 0
945
        skuData['in_stock'] = int(skuData['in_stock'])
946
        skuData['is_shortage'] = int(skuData['is_shortage'])
947
        skuData['category_id'] = int(skuData['category_id'])
17607 kshitij.so 948
        skuData['subCategoryId'] = int(skuData['subCategoryId'])
16222 kshitij.so 949
        skuData['status'] = int(skuData['status'])
16483 kshitij.so 950
        try:
951
            skuData['thumbnail'] = skuData['thumbnail'].strip()
952
        except:
953
            pass 
16222 kshitij.so 954
        if showDp is not None:
955
            dealerPrice = get_mongo_connection().Catalog.SkuDealerPrices.find_one({'skuBundleId':skuData['skuBundleId']})
956
            skuData['dp'] = 0.0
957
            skuData['showDp'] = 0
958
            if dealerPrice is not None:
959
                skuData['dp'] = dealerPrice['dp']
960
                skuData['showDp'] = dealerPrice['showDp']
16224 kshitij.so 961
        temp.append(skuData)
962
        return temp
13795 kshitij.so 963
    except:
16224 kshitij.so 964
        return []
13836 kshitij.so 965
 
14761 kshitij.so 966
def getCashBack(skuId, source_id, category_id):
17469 kshitij.so 967
    if mc.get("category_cash_back") is None or not bool(mc.get("category_cash_back")):
14761 kshitij.so 968
        populateCashBack()
969
    itemCashBackMap = mc.get("item_cash_back")
13921 kshitij.so 970
    itemCashBack = itemCashBackMap.get(skuId)
971
    if itemCashBack is not None:
972
        return itemCashBack
14761 kshitij.so 973
    cashBackMap = mc.get("category_cash_back")
13921 kshitij.so 974
    sourceCashBack = cashBackMap.get(source_id)
975
    if sourceCashBack is not None and len(sourceCashBack) > 0:
976
        for cashBack in sourceCashBack:
977
            if cashBack.get(category_id) is None:
978
                continue
979
            else:
980
                return cashBack.get(category_id)
981
    else:
982
        return {}
16560 amit.gupta 983
 
984
def getBundleBySourceSku(source_id, identifier):
17035 kshitij.so 985
    if source_id in (1,2,4,5,6,7):
16560 amit.gupta 986
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'identifier':identifier.strip(), 'source_id':source_id}))
987
    elif source_id == 3:
988
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'secondaryIdentifier':identifier.strip(), 'source_id':source_id}))
989
    else:
990
        return {}
991
 
992
    if not skuData:
993
        return {}
994
    else:
16564 amit.gupta 995
        bundleId = skuData[0]["skuBundleId"]
17035 kshitij.so 996
        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 997
                       {"source_id":1, "available_price":1, "marketPlaceUrl":1, "gross_price":1, "codAvailable":1, "source_product_name":1, "offer":1, "coupon":1}))
16579 amit.gupta 998
        return {'products':itemIds}
16560 amit.gupta 999
 
1000
 
13921 kshitij.so 1001
 
15129 kshitij.so 1002
def getDealRank(identifier, source_id, userId):
17035 kshitij.so 1003
    if source_id in (1,2,4,5,6,7):
15129 kshitij.so 1004
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'identifier':identifier.strip(), 'source_id':source_id}))
1005
    elif source_id == 3:
1006
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'secondaryIdentifier':identifier.strip(), 'source_id':source_id}))
1007
    else:
16282 amit.gupta 1008
        return {'rank':0, 'description':'Source not valid','maxNlc':None, 'minNlc':None,'status':None,'dp':None}
15349 kshitij.so 1009
    if len(skuData) == 0:
16282 amit.gupta 1010
        return {'rank':0, 'description':'No matching product identifier found','maxNlc':None, 'minNlc':None,'status':None,'dp':None}
15129 kshitij.so 1011
    user_specific_deals = mc.get(str(userId))
1012
    if user_specific_deals is None:
1013
        __populateCache(userId)
1014
        user_specific_deals = mc.get(str(userId))
1015
    else:
1016
        print "Getting user deals from cache"
1017
    category_id = skuData[0]['category_id']
1018
    category_specific_deals = user_specific_deals.get(category_id)
16280 kshitij.so 1019
 
1020
    dealsData = get_mongo_connection().Catalog.Deals.find_one({'skuBundleId':skuData[0]['skuBundleId']})
1021
    if dealsData is None:
1022
        dealsData = {}
1023
 
15129 kshitij.so 1024
    if category_specific_deals is None or len(category_specific_deals) ==0:
16280 kshitij.so 1025
        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 1026
    sorted_deals = sorted(category_specific_deals, key = lambda x: (x['persPoints'],x['totalPoints'],x['bestSellerPoints'], x['nlcPoints'], x['rank']),reverse=True)
16168 kshitij.so 1027
    sortedMap = {}
1028
    rankMap = {}
1029
    rank = 0
15129 kshitij.so 1030
    for sorted_deal in sorted_deals:
16168 kshitij.so 1031
        if sortedMap.get(sorted_deal['skuBundleId']) is None:
1032
            sortedMap[sorted_deal['skuBundleId']] = {rank:[sorted_deal]}
1033
            rankMap[rank] = (sortedMap[sorted_deal['skuBundleId']].values())[0]
1034
            rank = rank +1
1035
        else:
1036
            for temp_list in sortedMap.get(sorted_deal['skuBundleId']).itervalues():
1037
                temp_list.append(sorted_deal)
1038
            rankMap[(sortedMap.get(sorted_deal['skuBundleId']).keys())[0]] = temp_list
1039
 
16187 kshitij.so 1040
    for dealRank ,dealList in rankMap.iteritems():
16168 kshitij.so 1041
        for d in dealList:
16186 kshitij.so 1042
            if d['skuBundleId'] == skuData[0]['skuBundleId']:
16280 kshitij.so 1043
                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 1044
 
16280 kshitij.so 1045
    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 1046
 
1047
 
13836 kshitij.so 1048
def getCashBackDetails(identifier, source_id):
17469 kshitij.so 1049
    if mc.get("category_cash_back") is None or not bool(mc.get("category_cash_back")):
13921 kshitij.so 1050
        populateCashBack()
13771 kshitij.so 1051
 
17035 kshitij.so 1052
    if source_id in (1,2,4,5,6,7):
13839 kshitij.so 1053
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'identifier':identifier.strip(), 'source_id':source_id}))
13840 kshitij.so 1054
    elif source_id == 3:
13839 kshitij.so 1055
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'secondaryIdentifier':identifier.strip(), 'source_id':source_id}))
13840 kshitij.so 1056
    else:
1057
        return {}
13836 kshitij.so 1058
    if len(skuData) > 0:
14761 kshitij.so 1059
        itemCashBackMap = mc.get("item_cash_back")
13921 kshitij.so 1060
        itemCashBack = itemCashBackMap.get(skuData[0]['_id'])
1061
        if itemCashBack is not None:
1062
            return itemCashBack
14761 kshitij.so 1063
        cashBackMap = mc.get("category_cash_back")
13921 kshitij.so 1064
        sourceCashBack = cashBackMap.get(source_id)
1065
        if sourceCashBack is not None and len(sourceCashBack) > 0:
1066
            for cashBack in sourceCashBack:
1067
                if cashBack.get(skuData[0]['category_id']) is None:
1068
                    continue
1069
                else:
1070
                    return cashBack.get(skuData[0]['category_id'])
13836 kshitij.so 1071
        else:
1072
            return {} 
1073
    else:
1074
        return {}
13986 amit.gupta 1075
 
14398 amit.gupta 1076
def getImgSrc(identifier, source_id):
1077
    skuData = None
17035 kshitij.so 1078
    if source_id in (1,2,4,5,6,7):
14414 amit.gupta 1079
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'identifier':identifier.strip(), 'source_id':source_id})
14398 amit.gupta 1080
    elif source_id == 3:
14414 amit.gupta 1081
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'secondaryIdentifier':identifier.strip(), 'source_id':source_id})
14398 amit.gupta 1082
    if skuData is None:
1083
        return {}
1084
    else:
16483 kshitij.so 1085
        try:
1086
            return {'thumbnail':skuData.get('thumbnail').strip()}
1087
        except:
1088
            return {'thumbnail':skuData.get('thumbnail')}
13986 amit.gupta 1089
 
1090
def next_weekday(d, weekday):
1091
    days_ahead = weekday - d.weekday()
1092
    if days_ahead <= 0: # Target day already happened this week
1093
        days_ahead += 7
1094
    return d + timedelta(days_ahead)
1095
 
13771 kshitij.so 1096
 
13970 kshitij.so 1097
def getAllDealerPrices(offset, limit):
1098
    data = []
1099
    collection = get_mongo_connection().Catalog.SkuDealerPrices
1100
    cursor = collection.find().skip(offset).limit(limit)
1101
    for val in cursor:
15853 kshitij.so 1102
        master = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':val['skuBundleId']})
1103
        if master is not None:
1104
            val['brand'] = master['brand']
1105
            val['source_product_name'] = master['source_product_name']
13970 kshitij.so 1106
        else:
1107
            val['brand'] = ""
1108
            val['source_product_name'] = ""
16231 kshitij.so 1109
        val['showDp'] = int(val['showDp'])
13970 kshitij.so 1110
        data.append(val)
1111
    return data
1112
 
15853 kshitij.so 1113
def addSkuDealerPrice(data):
1114
    collection = get_mongo_connection().Catalog.SkuDealerPrices
1115
    cursor = collection.find_one({"skuBundleId":data['skuBundleId']})
1116
    if cursor is not None:
1117
        return {0:"BundleId information already present."}
13970 kshitij.so 1118
    else:
15853 kshitij.so 1119
        collection.insert(data)
1120
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
13970 kshitij.so 1121
        return {1:"Data added successfully"}
1122
 
1123
def updateSkuDealerPrice(data, _id):
1124
    try:
1125
        collection = get_mongo_connection().Catalog.SkuDealerPrices
1126
        collection.update({'_id':ObjectId(_id)},{"$set":{'dp':data['dp']}},upsert=False, multi = False)
15853 kshitij.so 1127
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
13970 kshitij.so 1128
        return {1:"Data updated successfully"}
1129
    except:
1130
        return {0:"Data not updated."}
1131
 
1132
def updateExceptionalNlc(data, _id):
1133
    try:
1134
        collection = get_mongo_connection().Catalog.ExceptionalNlc
1135
        collection.update({'_id':ObjectId(_id)},{"$set":{'maxNlc':data['maxNlc'], 'minNlc':data['minNlc'], 'overrideNlc':data['overrideNlc']}},upsert=False, multi = False)
15853 kshitij.so 1136
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
13970 kshitij.so 1137
        return {1:"Data updated successfully"}
1138
    except:
1139
        return {0:"Data not updated."}
1140
 
14041 kshitij.so 1141
def resetCache(userId):
14043 kshitij.so 1142
    try:
1143
        mc.delete(userId)
1144
        return {1:'Cache cleared.'}
1145
    except:
1146
        return {0:'Unable to clear cache.'}
1147
 
15853 kshitij.so 1148
def updateCollection(data):
14083 kshitij.so 1149
    print data
15853 kshitij.so 1150
    try:
1151
        collection = get_mongo_connection().Catalog[data['class']]
1152
        class_name = data.pop('class')
1153
        _id = data.pop('oid')
1154
        result = collection.update({'_id':ObjectId(_id)},{"$set":data},upsert=False, multi = False)
1155
        if class_name != "Notifications":
1156
            record = list(collection.find({'_id':ObjectId(_id)}))
1157
            if class_name !="CategoryDiscount":
1158
                if record[0].has_key('sku'):
1159
                    field = '_id'
1160
                    val = record[0]['sku']
14852 kshitij.so 1161
                else:
15853 kshitij.so 1162
                    field = 'skuBundleId'
1163
                    val = record[0]['skuBundleId']
1164
                get_mongo_connection().Catalog.MasterData.update({field:val},{"$set":{'updatedOn':to_java_date(datetime.now())}},upsert=False, multi = True)
1165
            else:
1166
                get_mongo_connection().Catalog.MasterData.update({'brand':re.compile(record[0]['brand'], re.IGNORECASE),'category_id':record[0]['category_id']}, \
1167
                                                                 {"$set":{'updatedOn':to_java_date(datetime.now())}},upsert=False,multi=True)
16233 kshitij.so 1168
        if class_name =='SkuDealerPrices':
16237 kshitij.so 1169
            get_mongo_connection().Catalog.Deals.update({'skuBundleId':val},{"$set":data},upsert=False, multi=True)
15853 kshitij.so 1170
        return {1:"Data updated successfully"}
1171
    except Exception as e:
1172
        print e
1173
        return {0:"Data not updated."}
14575 kshitij.so 1174
 
14076 kshitij.so 1175
 
14553 kshitij.so 1176
def addNegativeDeals(data, multi):
1177
    if multi !=1: 
1178
        collection = get_mongo_connection().Catalog.NegativeDeals
1179
        cursor = collection.find({"sku":data['sku']})
1180
        if cursor.count() > 0:
1181
            return {0:"Sku information already present."}
1182
        else:
1183
            collection.insert(data)
1184
            return {1:"Data added successfully"}
14481 kshitij.so 1185
    else:
14553 kshitij.so 1186
        skuIds = __getBundledSkusfromSku(data['sku'])
1187
        for sku in skuIds:
1188
            data['sku'] = sku.get('_id')
1189
            collection = get_mongo_connection().Catalog.NegativeDeals
1190
            cursor = collection.find({"sku":data['sku']})
1191
            if cursor.count() > 0:
1192
                continue
1193
            else:
14558 kshitij.so 1194
                data.pop('_id',None)
14553 kshitij.so 1195
                collection.insert(data)
14481 kshitij.so 1196
        return {1:"Data added successfully"}
1197
 
1198
def getAllNegativeDeals(offset, limit):
1199
    data = []
1200
    collection = get_mongo_connection().Catalog.NegativeDeals
1201
    cursor = collection.find().skip(offset).limit(limit)
1202
    for val in cursor:
1203
        master = list(get_mongo_connection().Catalog.MasterData.find({'_id':val['sku']}))
1204
        if len(master) > 0:
1205
            val['brand'] = master[0]['brand']
1206
            val['source_product_name'] = master[0]['source_product_name']
1207
            val['skuBundleId'] = master[0]['skuBundleId']
1208
        else:
1209
            val['brand'] = ""
1210
            val['source_product_name'] = ""
1211
            val['skuBundleId'] = ""
1212
        data.append(val)
1213
    return data
1214
 
1215
def getAllManualDeals(offset, limit):
1216
    data = []
1217
    collection = get_mongo_connection().Catalog.ManualDeals
15090 kshitij.so 1218
    cursor = collection.find().skip(offset).limit(limit)
14481 kshitij.so 1219
    for val in cursor:
1220
        master = list(get_mongo_connection().Catalog.MasterData.find({'_id':val['sku']}))
1221
        if len(master) > 0:
1222
            val['brand'] = master[0]['brand']
1223
            val['source_product_name'] = master[0]['source_product_name']
1224
            val['skuBundleId'] = master[0]['skuBundleId']
1225
        else:
1226
            val['brand'] = ""
1227
            val['source_product_name'] = ""
1228
            val['skuBundleId'] = ""
1229
        data.append(val)
1230
    return data
14076 kshitij.so 1231
 
14553 kshitij.so 1232
def addManualDeal(data, multi):
1233
    if multi !=1:
1234
        collection = get_mongo_connection().Catalog.ManualDeals
15090 kshitij.so 1235
        cursor = collection.find({'sku':data['sku']})
14553 kshitij.so 1236
        if cursor.count() > 0:
1237
            return {0:"Sku information already present."}
1238
        else:
1239
            collection.insert(data)
1240
            get_mongo_connection().Catalog.MasterData.update({'_id':data['sku']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=False)
1241
            return {1:"Data added successfully"}
14481 kshitij.so 1242
    else:
14553 kshitij.so 1243
        skuIds = __getBundledSkusfromSku(data['sku'])
1244
        for sku in skuIds:
1245
            data['sku'] = sku.get('_id')
1246
            collection = get_mongo_connection().Catalog.ManualDeals
15090 kshitij.so 1247
            cursor = collection.find({'sku':data['sku']})
14553 kshitij.so 1248
            if cursor.count() > 0:
1249
                continue
1250
            else:
14558 kshitij.so 1251
                data.pop('_id',None)
14553 kshitij.so 1252
                collection.insert(data)
1253
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':sku.get('skuBundleId')},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
14481 kshitij.so 1254
        return {1:"Data added successfully"}
14553 kshitij.so 1255
 
14481 kshitij.so 1256
def deleteDocument(data):
15853 kshitij.so 1257
    print "inside detete document"
14481 kshitij.so 1258
    print data
1259
    try:
1260
        collection = get_mongo_connection().Catalog[data['class']]
1261
        class_name = data.pop('class')
1262
        _id = data.pop('oid')
1263
        record = list(collection.find({'_id':ObjectId(_id)}))
1264
        collection.remove({'_id':ObjectId(_id)})
15075 kshitij.so 1265
        if class_name != "Notifications":
1266
            if class_name !="CategoryDiscount":
15853 kshitij.so 1267
                print record[0]
1268
                if record[0].has_key('sku'):
1269
                    field = '_id'
1270
                    val = record[0]['sku']
1271
                else:
1272
                    field = 'skuBundleId'
1273
                    val = record[0]['skuBundleId']
1274
                print "Updating master"
1275
                print field
1276
                print val
1277
                get_mongo_connection().Catalog.MasterData.update({field:val},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
15075 kshitij.so 1278
            else:
1279
                get_mongo_connection().Catalog.MasterData.update({'brand':re.compile(record[0]['brand'], re.IGNORECASE),'category_id':record[0]['category_id']}, \
1280
                                                                 {"$set":{'updatedOn':to_java_date(datetime.now())}},upsert=False,multi=True)
14481 kshitij.so 1281
        return {1:"Document deleted successfully"}
1282
    except Exception as e:
1283
        print e
1284
        return {0:"Document not deleted."}
13970 kshitij.so 1285
 
14482 kshitij.so 1286
def searchMaster(offset, limit, search_term):
1287
    data = []
14531 kshitij.so 1288
    if search_term is not None:
14551 kshitij.so 1289
        terms = search_term.split(' ')
1290
        outer_query = []
1291
        for term in terms:
1292
            outer_query.append({"source_product_name":re.compile(term, re.IGNORECASE)})
14531 kshitij.so 1293
        try:
14551 kshitij.so 1294
            collection = get_mongo_connection().Catalog.MasterData.find({"$and":outer_query,'source_id':{'$in':SOURCE_MAP.keys()}}).skip(offset).limit(limit)
14531 kshitij.so 1295
            for record in collection:
1296
                data.append(record)
1297
        except:
1298
            pass
1299
    else:
1300
        collection = get_mongo_connection().Catalog.MasterData.find({'source_id':{'$in':SOURCE_MAP.keys()}}).skip(offset).limit(limit)
14482 kshitij.so 1301
        for record in collection:
1302
            data.append(record)
1303
    return data
14481 kshitij.so 1304
 
14495 kshitij.so 1305
def getAllFeaturedDeals(offset, limit):
1306
    data = []
1307
    collection = get_mongo_connection().Catalog.FeaturedDeals
17561 kshitij.so 1308
    cursor = collection.find({}).skip(offset).limit(limit)
14495 kshitij.so 1309
    for val in cursor:
17367 kshitij.so 1310
        master = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':val['skuBundleId']}))
14495 kshitij.so 1311
        if len(master) > 0:
1312
            val['brand'] = master[0]['brand']
1313
            val['source_product_name'] = master[0]['source_product_name']
1314
            val['skuBundleId'] = master[0]['skuBundleId']
1315
        else:
1316
            val['brand'] = ""
1317
            val['source_product_name'] = ""
1318
            val['skuBundleId'] = ""
1319
        data.append(val)
1320
    return data
1321
 
14553 kshitij.so 1322
def addFeaturedDeal(data, multi):
17367 kshitij.so 1323
    collection = get_mongo_connection().Catalog.FeaturedDeals
1324
    cursor = collection.find({'skuBundleId':data['skuBundleId']})
1325
    master = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':data['skuBundleId']})
1326
    if master is None:
1327
        return {0:"BundleId is wrong"}
17469 kshitij.so 1328
    otherInfoObj = data['otherInfo']
1329
    toPop = []
1330
    for x,y in otherInfoObj.iteritems():
1331
        if y==0:
1332
            toPop.append(x)
1333
 
1334
    for popItem in toPop:
1335
        otherInfoObj.pop(popItem)
1336
    if len(otherInfoObj.keys())==0:
1337
        return {0:"No rank info to add"}
1338
 
1339
    for x,y in otherInfoObj.iteritems():
1340
        exist = get_mongo_connection().Catalog.FeaturedDeals.find({'otherInfo.'+x:y})
1341
        if exist.count() >0:
1342
            return {0:"Rank already assigned bundleId %s"%(exist[0]['skuBundleId'])}
17367 kshitij.so 1343
    if cursor.count() > 0:
1344
        return {0:"SkuBundleId information already present."}
14495 kshitij.so 1345
    else:
17367 kshitij.so 1346
        collection.insert(data)
14495 kshitij.so 1347
        return {1:"Data added successfully"}
1348
 
14499 kshitij.so 1349
def searchCollection(class_name, sku, skuBundleId):
14497 kshitij.so 1350
    data = []
1351
    collection = get_mongo_connection().Catalog[class_name]
15076 kshitij.so 1352
    if class_name == "Notifications":
1353
        cursor = collection.find({'skuBundleId':skuBundleId})
1354
        for val in cursor:
1355
            master = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':val['skuBundleId']}))
1356
            if len(master) > 0:
1357
                val['brand'] = master[0]['brand']
1358
                val['model_name'] = master[0]['model_name']
1359
                val['skuBundleId'] = master[0]['skuBundleId']
1360
            else:
1361
                val['brand'] = ""
1362
                val['model_name'] = ""
1363
                val['skuBundleId'] = val['skuBundleId']
1364
            data.append(val)
15095 kshitij.so 1365
        return data
15853 kshitij.so 1366
    master = None
14499 kshitij.so 1367
    if sku is not None:
15853 kshitij.so 1368
        if COLLECTION_MAP.has_key(class_name):
1369
            master = get_mongo_connection().Catalog.MasterData.find_one({'_id':sku})
1370
            cursor = collection.find({'skuBundleId':master['skuBundleId']})
1371
        else:
1372
            cursor = collection.find({'sku':sku})
14499 kshitij.so 1373
        for val in cursor:
15853 kshitij.so 1374
            if master is None:
1375
                master = get_mongo_connection().Catalog.MasterData.find_one({'_id':val['sku']})
1376
            if master is not None:
1377
                val['brand'] = master['brand']
1378
                val['source_product_name'] = master['source_product_name']
1379
                val['skuBundleId'] = master['skuBundleId']
14499 kshitij.so 1380
            else:
1381
                val['brand'] = ""
1382
                val['source_product_name'] = ""
1383
                val['skuBundleId'] = ""
1384
            data.append(val)
1385
        return data
1386
    else:
15853 kshitij.so 1387
        if not COLLECTION_MAP.has_key(class_name):
1388
            skuIds = get_mongo_connection().Catalog.MasterData.find({'skuBundleId':skuBundleId}).distinct('_id')
1389
            for sku in skuIds:
1390
                cursor = collection.find({'sku':sku})
1391
                for val in cursor:
1392
                    master = list(get_mongo_connection().Catalog.MasterData.find({'_id':val['sku']}))
1393
                    if len(master) > 0:
1394
                        val['brand'] = master[0]['brand']
1395
                        val['source_product_name'] = master[0]['source_product_name']
1396
                        val['skuBundleId'] = master[0]['skuBundleId']
1397
                    else:
1398
                        val['brand'] = ""
1399
                        val['source_product_name'] = ""
1400
                        val['skuBundleId'] = ""
1401
                    data.append(val)
1402
            return data
1403
        else:
1404
            cursor = collection.find({'skuBundleId':skuBundleId})
14499 kshitij.so 1405
            for val in cursor:
15853 kshitij.so 1406
                master = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':val['skuBundleId']}))
14499 kshitij.so 1407
                if len(master) > 0:
1408
                    val['brand'] = master[0]['brand']
1409
                    val['source_product_name'] = master[0]['source_product_name']
1410
                else:
1411
                    val['brand'] = ""
1412
                    val['source_product_name'] = ""
1413
                data.append(val)
15853 kshitij.so 1414
            return data
14495 kshitij.so 1415
 
15074 kshitij.so 1416
def __getBrandIdForBrand(brandName, category_id):
1417
    brandInfo = Brands.query.filter(Brands.category_id==category_id).filter(Brands.name == brandName).all()
1418
    if brandInfo is None or len(brandInfo)!=1:
1419
        raise
1420
    else:
1421
        return brandInfo[0].id
1422
 
14588 kshitij.so 1423
def addNewItem(data):
14594 kshitij.so 1424
    try:
1425
        data['updatedOn'] = to_java_date(datetime.now())
1426
        data['addedOn'] = to_java_date(datetime.now())
1427
        data['priceUpdatedOn'] = to_java_date(datetime.now())
1428
        max_id = list(get_mongo_connection().Catalog.MasterData.find().sort([('_id',pymongo.DESCENDING)]).limit(1))
1429
        max_bundle = list(get_mongo_connection().Catalog.MasterData.find().sort([('skuBundleId',pymongo.DESCENDING)]).limit(1))
1430
        data['_id'] = max_id[0]['_id'] + 1
1431
        data['skuBundleId'] = max_bundle[0]['skuBundleId'] + 1
1432
        data['identifier'] = str(data['identifier'])
1433
        data['secondaryIdentifier'] = str(data['secondaryIdentifier'])
17115 manish.sha 1434
        data['model_name'] = str(data['model_name'])
15074 kshitij.so 1435
        data['brand_id'] = __getBrandIdForBrand(data['brand'], data['category_id'])
17603 kshitij.so 1436
        if data['category_id'] ==6 and data['subCategoryId'] ==0:
17606 kshitij.so 1437
            return {0:'Sub-Category not selected'}
17608 kshitij.so 1438
        elif data['category_id'] !=6 and data['subCategoryId'] !=0:
1439
            return {0:'Sub-Category not valid'}
1440
        else:
1441
            pass
17604 kshitij.so 1442
        data['subCategory'] = SUB_CATEGORY_MAP.get(data['subCategoryId'])
14594 kshitij.so 1443
        get_mongo_connection().Catalog.MasterData.insert(data)
1444
        return {1:'Data added successfully'}
1445
    except Exception as e:
1446
        print e
1447
        return {0:'Unable to add data.'}
15130 kshitij.so 1448
    finally:
1449
        session.close()
14588 kshitij.so 1450
 
1451
def addItemToExistingBundle(data):
1452
    try:
1453
        data['updatedOn'] = to_java_date(datetime.now())
1454
        data['addedOn'] = to_java_date(datetime.now())
1455
        data['priceUpdatedOn'] = to_java_date(datetime.now())
14593 kshitij.so 1456
        max_id = list(get_mongo_connection().Catalog.MasterData.find().sort([('_id',pymongo.DESCENDING)]).limit(1))
14590 kshitij.so 1457
        data['_id'] = max_id[0]['_id'] + 1
14594 kshitij.so 1458
        data['identifier'] = str(data['identifier'])
1459
        data['secondaryIdentifier'] = str(data['secondaryIdentifier'])
17115 manish.sha 1460
        data['model_name'] = str(data['model_name'])
15074 kshitij.so 1461
        data['brand_id'] = __getBrandIdForBrand(data['brand'], data['category_id'])
17603 kshitij.so 1462
        if data['category_id'] ==6 and data['subCategoryId'] ==0:
17606 kshitij.so 1463
            return {0:'Sub-Category not selected'}
17608 kshitij.so 1464
        elif data['category_id'] !=6 and data['subCategoryId'] !=0:
1465
            return {0:'Sub-Category not valid'}
1466
        else:
1467
            pass
17604 kshitij.so 1468
        data['subCategory'] = SUB_CATEGORY_MAP.get(data['subCategoryId'])
14588 kshitij.so 1469
        get_mongo_connection().Catalog.MasterData.insert(data)
1470
        return {1:'Data added successfully.'}
14594 kshitij.so 1471
    except Exception as e:
1472
        print e
14588 kshitij.so 1473
        return {0:'Unable to add data.'}
15130 kshitij.so 1474
    finally:
1475
        session.close()
14588 kshitij.so 1476
 
1477
def updateMaster(data, multi):
15130 kshitij.so 1478
    try:
1479
        print data
1480
        if multi != 1:
1481
            _id = data.pop('_id')
1482
            skuBundleId = data.pop('skuBundleId')
1483
            data['updatedOn'] = to_java_date(datetime.now())
1484
            data['identifier'] = str(data['identifier'])
1485
            data['secondaryIdentifier'] = str(data['secondaryIdentifier'])
17115 manish.sha 1486
            data['model_name'] = str(data['model_name'])
15130 kshitij.so 1487
            data['brand_id'] = __getBrandIdForBrand(data['brand'], data['category_id'])
17603 kshitij.so 1488
            if data['category_id'] ==6 and data['subCategoryId'] ==0:
17606 kshitij.so 1489
                return {0:'Sub-Category not selected'}
17608 kshitij.so 1490
            elif data['category_id'] !=6 and data['subCategoryId'] !=0:
1491
                return {0:'Sub-Category not valid'}
1492
            else:
1493
                pass
17604 kshitij.so 1494
            data['subCategory'] = SUB_CATEGORY_MAP.get(data['subCategoryId'])
15130 kshitij.so 1495
            get_mongo_connection().Catalog.MasterData.update({'_id':_id},{"$set":data},upsert=False)
1496
            return {1:'Data updated successfully.'}
1497
        else:
1498
            _id = data.pop('_id')
1499
            skuBundleId = data.pop('skuBundleId')
1500
            data['updatedOn'] = to_java_date(datetime.now())
1501
            data['identifier'] = str(data['identifier'])
1502
            data['secondaryIdentifier'] = str(data['secondaryIdentifier'])
1503
            data['brand_id'] = __getBrandIdForBrand(data['brand'], data['category_id'])
17115 manish.sha 1504
            data['model_name'] = str(data['model_name'])
17603 kshitij.so 1505
            if data['category_id'] ==6 and data['subCategoryId'] ==0:
17606 kshitij.so 1506
                return {0:'Sub-Category not selected'}
17608 kshitij.so 1507
            elif data['category_id'] !=6 and data['subCategoryId'] !=0:
1508
                return {0:'Sub-Category not valid'}
1509
            else:
1510
                pass
17604 kshitij.so 1511
            data['subCategory'] = SUB_CATEGORY_MAP.get(data['subCategoryId'])
15130 kshitij.so 1512
            get_mongo_connection().Catalog.MasterData.update({'_id':_id},{"$set":data},upsert=False)
1513
            similarItems = get_mongo_connection().Catalog.MasterData.find({'skuBundleId':skuBundleId})
1514
            for item in similarItems:
1515
                if item['_id'] == _id:
1516
                    continue
1517
                item['updatedOn'] = to_java_date(datetime.now())
1518
                item['thumbnail'] = data['thumbnail']
1519
                item['category'] = data['category']
1520
                item['category_id'] = data['category_id']
1521
                item['tagline'] = data['tagline']
1522
                item['is_shortage'] = data['is_shortage']
1523
                item['mrp'] = data['mrp']
1524
                item['status'] = data['status']
1525
                item['maxPrice'] = data['maxPrice']
1526
                item['brand_id'] = data['brand_id']
17603 kshitij.so 1527
                item['subCategoryId'] = data['subCategoryId']
1528
                item['subCategory'] = data['subCategory']
15130 kshitij.so 1529
                similar_item_id = item.pop('_id')
1530
                get_mongo_connection().Catalog.MasterData.update({'_id':similar_item_id},{"$set":item},upsert=False)
1531
            return {1:'Data updated successfully.'}
17603 kshitij.so 1532
    except:
1533
        return {0:'Unable to update data'}
15130 kshitij.so 1534
    finally:
1535
        session.close()
14619 kshitij.so 1536
 
1537
def getLiveCricScore():
1538
    return mc.get('liveScore')
14852 kshitij.so 1539
 
1540
def addBundleToNotification(data):
1541
    try:
15069 kshitij.so 1542
        collection = get_mongo_connection().Catalog.Notifications
14852 kshitij.so 1543
        cursor = collection.find({'skuBundleId':data['skuBundleId']})
1544
        if cursor.count() > 0:
1545
            return {0:"SkuBundleId information already present."}
1546
        else:
1547
            collection.insert(data)
1548
            return {1:'Data updated successfully.'}
1549
    except:
1550
        return {0:'Unable to add data.'}
1551
 
1552
def getAllNotifications(offset, limit):
1553
    data = []
15069 kshitij.so 1554
    collection = get_mongo_connection().Catalog.Notifications
16450 kshitij.so 1555
    cursor = collection.find().sort([('endDate',pymongo.DESCENDING)]).skip(offset).limit(limit)
14852 kshitij.so 1556
    for val in cursor:
15072 kshitij.so 1557
        master = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':val['skuBundleId']}))
14852 kshitij.so 1558
        if len(master) > 0:
1559
            val['brand'] = master[0]['brand']
15071 kshitij.so 1560
            val['model_name'] = master[0]['model_name']
14852 kshitij.so 1561
            val['skuBundleId'] = master[0]['skuBundleId']
1562
        else:
1563
            val['brand'] = ""
15071 kshitij.so 1564
            val['model_name'] = ""
1565
            val['skuBundleId'] = val['skuBundleId']
14852 kshitij.so 1566
        data.append(val)
1567
    return data
14997 kshitij.so 1568
 
1569
def getBrandsForFilter(category_id):
1570
    if mc.get("brandFilter") is None:
15095 kshitij.so 1571
        print "Populating brand data for category_id %d" %(category_id)
17469 kshitij.so 1572
        tabData, mobData, accData = [], [], []
14997 kshitij.so 1573
        mobileDeals = get_mongo_connection().Catalog.Deals.aggregate([
16170 kshitij.so 1574
                                                                      {"$match":{"category_id":3,"showDeal":1,"totalPoints":{"$gt":-100}}
14997 kshitij.so 1575
                                                                    },
1576
                                                                 {"$group" : 
1577
                                                                  {'_id':{'brand_id':'$brand_id','brand':'$brand'},'count':{'$sum':1}}
1578
                                                                  }
1579
                                                                ])
14588 kshitij.so 1580
 
14997 kshitij.so 1581
        tabletDeals = get_mongo_connection().Catalog.Deals.aggregate([
16170 kshitij.so 1582
                                                                      {"$match":{"category_id":5,"showDeal":1,"totalPoints":{"$gt":-100}}
14997 kshitij.so 1583
                                                                    },
1584
                                                                 {"$group" : 
1585
                                                                  {'_id':{'brand_id':'$brand_id','brand':'$brand'},'count':{'$sum':1}}
1586
                                                                  }
1587
                                                                ])
1588
 
17469 kshitij.so 1589
        accessoriesDeals = get_mongo_connection().Catalog.Deals.aggregate([
1590
                                                                      {"$match":{"category_id":6,"showDeal":1,"totalPoints":{"$gt":-100}}
1591
                                                                    },
1592
                                                                 {"$group" : 
1593
                                                                  {'_id':{'brand_id':'$brand_id','brand':'$brand'},'count':{'$sum':1}}
1594
                                                                  }
1595
                                                                ])
1596
 
14997 kshitij.so 1597
        allDeals = get_mongo_connection().Catalog.Deals.aggregate([
16170 kshitij.so 1598
                                                                   {"$match":{"showDeal":1,"totalPoints":{"$gt":-100}}
14997 kshitij.so 1599
                                                                    },
1600
                                                                 {"$group" : 
1601
                                                                  {'_id':{'brand_id':'$brand_id','brand':'$brand'},'count':{'$sum':1}}
1602
                                                                  }
1603
                                                                ])
1604
        #print mobileDeals
1605
        #print "==========Mobile data ends=========="
1606
 
1607
        #print tabletDeals
1608
        #print "==========Tablet data ends=========="
1609
 
1610
        #print allDeals
1611
        #print "==========All deal data ends========="
1612
 
1613
        for mobileDeal in mobileDeals['result']:
1614
            if mobileDeal.get('_id').get('brand_id') != 0:
1615
                tempMap = {}
1616
                tempMap['brand'] = mobileDeal.get('_id').get('brand')
1617
                tempMap['brand_id'] = mobileDeal.get('_id').get('brand_id')
1618
                tempMap['count'] = mobileDeal.get('count')
1619
                mobData.append(tempMap)
1620
 
1621
        for tabletDeal in tabletDeals['result']:
1622
            if tabletDeal.get('_id').get('brand_id') != 0:
1623
                tempMap = {}
1624
                tempMap['brand'] = tabletDeal.get('_id').get('brand')
1625
                tempMap['brand_id'] = tabletDeal.get('_id').get('brand_id')
1626
                tempMap['count'] = tabletDeal.get('count')
1627
                tabData.append(tempMap)
1628
 
17469 kshitij.so 1629
        for accessoryDeal in accessoriesDeals['result']:
1630
            if accessoryDeal.get('_id').get('brand_id') != 0:
1631
                tempMap = {}
1632
                tempMap['brand'] = accessoryDeal.get('_id').get('brand')
1633
                tempMap['brand_id'] = accessoryDeal.get('_id').get('brand_id')
1634
                tempMap['count'] = accessoryDeal.get('count')
1635
                accData.append(tempMap)
14997 kshitij.so 1636
 
17469 kshitij.so 1637
 
14997 kshitij.so 1638
        brandMap = {}
1639
        for allDeal in allDeals['result']:
1640
            if allDeal.get('_id').get('brand_id') != 0:
1641
                if brandMap.has_key(allDeal.get('_id').get('brand')):
15002 kshitij.so 1642
                    brand_ids = brandMap.get(allDeal.get('_id').get('brand')).get('brand_ids')
14997 kshitij.so 1643
                    brand_ids.append(allDeal.get('_id').get('brand_id'))
15003 kshitij.so 1644
                    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 1645
                else:
1646
                    temp = []
1647
                    temp.append(allDeal.get('_id').get('brand_id'))
15002 kshitij.so 1648
                    brandMap[allDeal.get('_id').get('brand')] = {'brand_ids':temp,'count':allDeal.get('count')}
14997 kshitij.so 1649
 
17469 kshitij.so 1650
        mc.set("brandFilter",{0:brandMap, 3:mobData, 5:tabData, 6:accData}, 600)  
14997 kshitij.so 1651
 
15062 kshitij.so 1652
    return sorted(mc.get("brandFilter").get(category_id), key = lambda x: (-x['count'], x['brand']))
15375 kshitij.so 1653
 
15459 kshitij.so 1654
def getStaticDeals(offset, limit, category_id, direction):
15375 kshitij.so 1655
    user_specific_deals = mc.get("staticDeals")
1656
    if user_specific_deals is None:
1657
        __populateStaticDeals()
1658
        user_specific_deals = mc.get("staticDeals")
15459 kshitij.so 1659
    rev = False
1660
    if direction is None or direction == -1:
1661
        rev=True
1662
    return sorted((user_specific_deals.get(category_id))[offset:offset+limit],reverse=rev)
15375 kshitij.so 1663
 
1664
def __populateStaticDeals():
1665
    print "Populating memcache for static deals"
1666
    outer_query = []
1667
    outer_query.append({"showDeal":1})
1668
    query = {}
16170 kshitij.so 1669
    query['$gt'] = -100
15375 kshitij.so 1670
    outer_query.append({'totalPoints':query})
1671
    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)]))
1672
    mobile_deals = []
1673
    tablet_deals = []
1674
    for deal in all_deals:
1675
        item = get_mongo_connection().Catalog.MasterData.find({'_id':deal['_id']})
1676
        if deal['category_id'] ==3:
1677
            mobile_deals.append(getItemObjForStaticDeals(item[0]))
1678
        elif deal['category_id'] ==5:
1679
            tablet_deals.append(getItemObjForStaticDeals(item[0]))
1680
        else:
1681
            continue
1682
 
1683
    random.shuffle(mobile_deals,random.random)
1684
    random.shuffle(tablet_deals,random.random)
1685
 
1686
    mem_cache_val = {3:mobile_deals, 5:tablet_deals}
1687
    mc.set("staticDeals", mem_cache_val, 3600)
1688
 
1689
def getItemObjForStaticDeals(item):
17469 kshitij.so 1690
    return {'marketPlaceUrl':item.get('marketPlaceUrl'),'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 1691
 
1692
def getItemByMerchantIdentifier(identifier, source_id):
1693
    skuData = None
17035 kshitij.so 1694
    if source_id in (1,2,4,5,6,7):
16300 manas 1695
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'identifier':identifier.strip(), 'source_id':source_id})
1696
    elif source_id == 3:
1697
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'secondaryIdentifier':identifier.strip(), 'source_id':source_id})
1698
    if skuData is None:
1699
        return {}
1700
    else:
1701
        return skuData
15375 kshitij.so 1702
 
16364 kshitij.so 1703
def getDealsForNotification(skuBundleIds):
1704
    bundles= [int(skuBundleId) for skuBundleId in skuBundleIds.split(',')]
1705
    print bundles
16406 kshitij.so 1706
    dealsList = []
16364 kshitij.so 1707
    dealsListMap = []
16406 kshitij.so 1708
    for bundleId in bundles:
1709
        outer_query = []
1710
        outer_query.append({ "$or": [ { "showDeal": 1} , { "prepaidDeal": 1 } ] })
1711
        outer_query.append({'skuBundleId':bundleId})
1712
        deals = get_mongo_connection().Catalog.Deals.find({"$and":outer_query})
1713
        for deal in deals:
1714
            dealsList.append(deal)
16364 kshitij.so 1715
    sortedMap = {}
1716
    rankMap = {}
1717
    rank = 0
16406 kshitij.so 1718
    for sorted_deal in dealsList:
16364 kshitij.so 1719
        if sortedMap.get(sorted_deal['skuBundleId']) is None:
1720
            sortedMap[sorted_deal['skuBundleId']] = {rank:[sorted_deal]}
1721
            rankMap[rank] = (sortedMap[sorted_deal['skuBundleId']].values())[0]
1722
            rank = rank +1
1723
        else:
1724
            for temp_list in sortedMap.get(sorted_deal['skuBundleId']).itervalues():
1725
                temp_list.append(sorted_deal)
1726
            rankMap[(sortedMap.get(sorted_deal['skuBundleId']).keys())[0]] = temp_list
1727
 
16367 kshitij.so 1728
    for dealList in [rankMap.get(k, []) for k in range(0, len(bundles))]:
16364 kshitij.so 1729
        temp = []
1730
        for d in dealList:
1731
            item = list(get_mongo_connection().Catalog.MasterData.find({'_id':d['_id']}))
1732
            if len(item) ==0:
1733
                continue
1734
            if d['dealType'] == 1 and d['source_id'] ==1:
1735
                item[0]['marketPlaceUrl'] = "http://www.amazon.in/dp/%s"%(item[0]['identifier'].strip())
1736
            elif d['source_id'] ==3:
1737
                item[0]['marketPlaceUrl'] = item[0]['marketPlaceUrl']+'?supc='+item[0].get('identifier')
1738
            else:
1739
                pass 
1740
            try:
1741
                cashBack = getCashBack(item[0]['_id'], item[0]['source_id'], item[0]['category_id'])
1742
                if not cashBack or cashBack.get('cash_back_status')!=1:
1743
                    item[0]['cash_back_type'] = 0
1744
                    item[0]['cash_back'] = 0
1745
                else:
1746
                    item[0]['cash_back_type'] = int(cashBack['cash_back_type'])
1747
                    item[0]['cash_back'] = cashBack['cash_back']
1748
            except:
1749
                print "Error in adding cashback to deals"
1750
                item[0]['cash_back_type'] = 0
1751
                item[0]['cash_back'] = 0
1752
            try:
1753
                item[0]['dp'] = d['dp']
1754
                item[0]['showDp'] = d['showDp']
1755
            except:
1756
                item[0]['dp'] = 0.0
1757
                item[0]['showDp'] = 0
1758
            temp.append(item[0])
1759
        if len(temp) > 1:
1760
            temp = sorted(temp, key = lambda x: (x['available_price']),reverse=False)
1761
        dealsListMap.append(temp)
1762
    return dealsListMap
1763
 
16373 manas 1764
def getSkuBrandData(sku):
1765
    if sku is None:
1766
        return {}
1767
    else:
1768
        orders = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':sku})
1769
        if orders is None:
1770
            return {}
1771
        return orders
16488 kshitij.so 1772
 
1773
def addDealPoints(data):
1774
    collection = get_mongo_connection().Catalog.DealPoints
1775
    cursor = collection.find({'skuBundleId':data['skuBundleId']})
1776
    if cursor.count() > 0:
1777
        return {0:"Sku information already present."}
1778
    else:
1779
        collection.insert(data)
1780
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
1781
        return {1:"Data added successfully"}
1782
 
1783
def getAllBundlesWithDealPoints(offset, limit):
1784
    data = []
1785
    collection = get_mongo_connection().Catalog.DealPoints
1786
    cursor = collection.find().sort([('endDate',pymongo.DESCENDING)]).skip(offset).limit(limit)
1787
    for val in cursor:
1788
        master = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':val.get('skuBundleId')})
1789
        if master is not None:
1790
            val['brand'] = master['brand']
1791
            val['source_product_name'] = master['product_name']
1792
        else:
1793
            val['brand'] = ""
1794
            val['source_product_name'] = ""
1795
        data.append(val)
1796
    return data
16546 kshitij.so 1797
 
1798
def generateRedirectUrl(retailer_id, app_id):
1799
    try:
16663 manish.sha 1800
        if retailer_id <= 0:
1801
            return {'url':"","message":"Retailer Id not valid"}
16546 kshitij.so 1802
        d_app_offer = app_offers.get_by(id=app_id)
16605 manish.sha 1803
    except:
1804
        traceback.print_exc()
16546 kshitij.so 1805
    finally:
1806
        session.close()
1807
    if d_app_offer is None:
1808
        return {'url':"","message":"App id doesn't exist"}
16364 kshitij.so 1809
 
16915 manish.sha 1810
    final_user_payout = 0
1811
    if d_app_offer.override_payout:
1812
        final_user_payout = d_app_offer.overriden_payout
1813
    else:
1814
        final_user_payout = d_app_offer.user_payout
16546 kshitij.so 1815
 
16915 manish.sha 1816
    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)
1817
 
16546 kshitij.so 1818
    get_mongo_connection().AppOrder.AppTransaction.insert(appTransactions.__dict__)
1819
    embedd = str((appTransactions.__dict__).get('_id'))
16548 kshitij.so 1820
    try:
1821
        index = d_app_offer.link.index(".freeb.co.in")
1822
    except:
16605 manish.sha 1823
        traceback.print_exc()
16548 kshitij.so 1824
        return {'url':"","message":"Substring not found"}
1825
    redirect_url = d_app_offer.link[0:index]+"."+embedd+d_app_offer.link[index:]
16546 kshitij.so 1826
    get_mongo_connection().AppOrder.AppTransaction.update({'_id':ObjectId(embedd)},{"$set":{'redirect_url':redirect_url}})
16548 kshitij.so 1827
    return {'url':redirect_url,"message":"Success"}
16556 kshitij.so 1828
 
1829
def addPayout(payout, transaction_id):
1830
    try:
16764 manish.sha 1831
        print 'Got Response for Transaction Id:- '+ str(transaction_id)+ ' and Actual Payout:- '+str(payout)
16556 kshitij.so 1832
        transaction = list(get_mongo_connection().AppOrder.AppTransaction.find({'_id':ObjectId(transaction_id)}))
1833
        if len(transaction) > 0:
1834
            if (transaction[0])['payout_status'] ==1:
16753 manish.sha 1835
                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 1836
 
1837
                approvedAppTransaction = approved_app_transactions.get_by(transaction_id=transaction_id)
1838
                if approvedAppTransaction is None:
1839
                    approvedAppTransaction = approved_app_transactions()
16919 manish.sha 1840
                    approvedAppTransaction.app_id = transaction[0].get('app_id')
16782 manish.sha 1841
                    approvedAppTransaction.cash_back_description = CB_APPROVED
16919 manish.sha 1842
                    approvedAppTransaction.retailer_id = transaction[0].get('retailer_id')
16782 manish.sha 1843
                    approvedAppTransaction.transaction_id = transaction_id
16919 manish.sha 1844
                    approvedAppTransaction.transaction_time = to_py_date(long(transaction[0].get('transaction_time')))
1845
                    approvedAppTransaction.redirect_url = transaction[0].get('redirect_url')
16782 manish.sha 1846
                    approvedAppTransaction.payout_status = 2
1847
                    approvedAppTransaction.payout_description = CB_APPROVED
1848
                    approvedAppTransaction.cashback_status = 2 
1849
                    approvedAppTransaction.payout_amount = long(payout)
1850
                    approvedAppTransaction.payout_time = datetime.now()
16919 manish.sha 1851
                    approvedAppTransaction.offer_price = long(transaction[0].get('offer_price')) 
1852
                    approvedAppTransaction.overridenCashBack = transaction[0].get('overridenCashBack')
1853
                    approvedAppTransaction.isCashBackOverriden = transaction[0].get('isCashBackOverriden')
1854
                    approvedAppTransaction.user_payout = transaction[0].get('user_payout')
16782 manish.sha 1855
                    approvedAppTransaction.cashBackConsidered = False
16915 manish.sha 1856
                    if transaction[0].get('final_user_payout') is not None:
1857
                        approvedAppTransaction.final_user_payout = transaction[0].get('final_user_payout')
1858
                    else:
16919 manish.sha 1859
                        if transaction[0].get('isCashBackOverriden'):
1860
                            approvedAppTransaction.final_user_payout = transaction[0].get('overridenCashBack')
16915 manish.sha 1861
                        else:
16919 manish.sha 1862
                            approvedAppTransaction.final_user_payout = transaction[0].get('user_payout')
16782 manish.sha 1863
                    session.commit()
1864
 
1865
                    updateResult = _updateApprovedCashbackToUser(approvedAppTransaction.id)
16631 manish.sha 1866
                else:
16783 manish.sha 1867
                    approvedAppTransaction.payout_amount = long(payout)
1868
                    approvedAppTransaction.payout_time = datetime.now()
1869
                    if approvedAppTransaction.cashBackConsidered == False:
1870
                        updateResult = _updateApprovedCashbackToUser(approvedAppTransaction.id)
1871
                    session.commit()
16782 manish.sha 1872
 
1873
                    '''
1874
                    try:
1875
                        if int(transaction[0]['offer_price']) != payout or int(transaction[0]['user_payout']) < payout:
1876
                            _sendAlertForAppPayouts(int(transaction[0]['app_id']), int(transaction[0]['offer_price']), int(transaction[0]['user_payout']), payout)
1877
                    except:
1878
                        print traceback.print_exc()
1879
                    '''
16556 kshitij.so 1880
                return {'status':'ok','message':'Payout updated'}
1881
            elif (transaction[0])['payout_status'] ==2:
1882
                return {'status':'ok','message':'Payout already processed'}
1883
            else:
1884
                return {'status':'fail','message':'Something is wrong'}
1885
        else:
1886
            return {'status':'fail','message':'transaction_id not found'}
1887
    except:
16657 manish.sha 1888
        print traceback.print_exc()
16631 manish.sha 1889
        try:
16753 manish.sha 1890
            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 1891
        except:
1892
            print 'Data Inconsistency in Cashback Process'
16636 manish.sha 1893
            print traceback.print_exc()
16559 kshitij.so 1894
        return  {'status':'fail','message':'Something is wrong'}
16885 kshitij.so 1895
    finally:
1896
        session.close()
16556 kshitij.so 1897
 
16631 manish.sha 1898
def _updateApprovedCashbackToUser(approvedAppTransactionId):
1899
    approvedAppTransaction = approved_app_transactions.get_by(id=approvedAppTransactionId)
16915 manish.sha 1900
    if approvedAppTransaction.retailer_id < 0:
1901
        return False
1902
 
16631 manish.sha 1903
    currentMonth = datetime.today().month
1904
    currentDay = datetime.today().day
1905
    currentYear = datetime.today().year
1906
    fortNight = (currentMonth - 1)*2 + (currentDay/15)
1907
    if currentDay == 30 or currentDay ==31:
1908
        fortNight = fortNight-1
1909
    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()
1910
    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()
1911
    try:
1912
        if userAppCashbackObj is None:
1913
            userAppCashbackObj = user_app_cashbacks()
1914
            userAppCashbackObj.user_id = approvedAppTransaction.retailer_id
1915
            userAppCashbackObj.status = 'Approved'
16915 manish.sha 1916
            userAppCashbackObj.amount = approvedAppTransaction.final_user_payout
16631 manish.sha 1917
            userAppCashbackObj.fortnightOfYear = fortNight
1918
            userAppCashbackObj.yearVal = currentYear
1919
        else:
16915 manish.sha 1920
            userAppCashbackObj.amount = userAppCashbackObj.amount + approvedAppTransaction.final_user_payout
16631 manish.sha 1921
 
1922
        if userAppInstallObj is None:
1923
            app_offer = app_offers.get_by(id=approvedAppTransaction.app_id)
1924
            userAppInstallObj = user_app_installs()
1925
            userAppInstallObj.user_id = approvedAppTransaction.retailer_id
1926
            userAppInstallObj.fortnightOfYear = fortNight
1927
            userAppInstallObj.transaction_date = datetime(currentYear, currentMonth, currentDay, 0, 0, 0, 0).date()
1928
            userAppInstallObj.app_id = approvedAppTransaction.app_id
1929
            userAppInstallObj.app_name = app_offer.app_name
1930
            userAppInstallObj.installCount = 1
16915 manish.sha 1931
            userAppInstallObj.payoutAmount = approvedAppTransaction.final_user_payout
16631 manish.sha 1932
        else:
1933
            userAppInstallObj.installCount = userAppInstallObj.installCount + 1
16915 manish.sha 1934
            userAppInstallObj.payoutAmount = userAppInstallObj.payoutAmount +approvedAppTransaction.final_user_payout
16631 manish.sha 1935
 
1936
        approvedAppTransaction.cashBackConsidered = True
1937
        session.commit()
1938
        return True
1939
    except:
1940
        session.rollback()
16636 manish.sha 1941
        print traceback.print_exc()
16631 manish.sha 1942
        return False
16693 manish.sha 1943
 
1944
def _sendAlertForAppPayouts(app_id, offerPrice, userPayout, payout):
1945
    m = Email('localhost')
1946
    mFrom = "dtr@shop2020.in"
1947
    m.setFrom(mFrom)
1948
    mTo = ['rajneesh.arora@saholic.com','kshitij.sood@saholic.com','chaitnaya.vats@saholic.com','manoj.kumar@saholic.com','manish.sharma@shop2020.in']
1949
    for receipient in mTo:
1950
        m.addRecipient(receipient)
1951
    appOffer = app_offers.get_by(id=app_id)
1952
    if offerPrice != payout:
1953
        m.setSubject("Mismatch in Offer Price and Actual Pay Out for App Id:- "+str(appOffer.id)+" App Name:- "+str(appOffer.app_name))
1954
        message1 = "Offer Price:- "+ str(appOffer.offer_price) + "\n" + "Actual Pay Out:- "+ str(payout)
1955
        m.setTextBody(message1)
1956
    if userPayout > payout:
1957
        m.setSubject("User Pay Out greater than actual PayOut for App Id:- "+str(appOffer.id)+" App Name:- "+str(appOffer.app_name))
1958
        message2 = "User Pay Out Price:- "+ str(appOffer.user_payout) + "\n" + "Actual Pay Out:- "+ str(payout)
1959
        m.setTextBody(message2)
1960
    m.send()
16631 manish.sha 1961
 
16789 amit.gupta 1962
def rejectCashback(orderId, subOrderId):
16833 amit.gupta 1963
    cashBack = get_mongo_connection().Dtr.merchantOrder.update({"orderId":orderId, "subOrders.merchantSubOrderId":subOrderId}, 
16789 amit.gupta 1964
                                                               {"$set":{"subOrders.$.cashBackStatus":CB_REJECTED}})
16837 amit.gupta 1965
    print cashBack
16836 amit.gupta 1966
    return cashBack.get("nModified")
16894 manish.sha 1967
 
1968
def getAppOffers(retailer_id):
1969
    if not bool(mc.get("cached_app_offers_"+str(retailer_id))):
1970
        populateAppOffers(retailer_id)
1971
    return mc.get("cached_app_offers_"+str(retailer_id)) 
1972
 
1973
def populateAppOffers(retailerId):
1974
    retailerId = int(retailerId)
1975
    #offset = req.get_param_as_int("offset")
1976
    #limit = req.get_param_as_int("limit")
16941 manish.sha 1977
    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()
1978
    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 1979
    #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()
1980
 
1981
    appOffersMap = {}
1982
    priorityList = []
1983
    priorityMap = {}
1984
    for offer in priortizeders:
16941 manish.sha 1985
        if priorityMap.has_key(long(offer[1])):
1986
            offersVal = priorityMap.get(long(offer[1]))
1987
            offersVal.append(offer)
1988
            priorityMap[long(offer[1])]=offersVal
1989
        else:
1990
            offersVal = []
1991
            offersVal.append(offer)
1992
            priorityMap[long(offer[1])]=offersVal
1993
 
16894 manish.sha 1994
    priorityList = sorted(priorityMap)
1995
 
1996
    maxCount = len(nonPriortizedOffers) + len(priortizeders)
1997
 
16909 manish.sha 1998
    if priorityList is not None and len(priorityList)>0:
1999
        if maxCount < max(priorityList):
2000
            maxCount = max(priorityList)
16894 manish.sha 2001
 
2002
    count = 1
2003
    blockedPlaces = []
2004
    availablePlaces = []
2005
    while count <= maxCount:
2006
        if count in priorityList:
2007
            blockedPlaces.append(count)
2008
        else:
2009
            availablePlaces.append(count)
2010
        count = count +1
16941 manish.sha 2011
    print 'Blocked Places', blockedPlaces
16894 manish.sha 2012
    for val in blockedPlaces:
16941 manish.sha 2013
        key = val
2014
        for offerObj in priorityMap.get(val):
2015
            while appOffersMap.has_key(key):
2016
                key = key+1
2017
            appOffersMap[key] = long(offerObj[0])
2018
            if key in availablePlaces:
2019
                availablePlaces.remove(key)
2020
 
2021
    print 'Available Places', availablePlaces
2022
 
16894 manish.sha 2023
    i=0
2024
    for val in availablePlaces:
16899 manish.sha 2025
        if i<len(nonPriortizedOffers):
16902 manish.sha 2026
            appOffersMap[val]= long(nonPriortizedOffers[i][0])
16899 manish.sha 2027
        else:
2028
            break
2029
        i=i+1
16901 manish.sha 2030
    print 'AppOffersMap', appOffersMap
16894 manish.sha 2031
 
2032
    finalAppOffersMap = {}
2033
    if len(appOffersMap) > 0:
2034
        for key in sorted(appOffersMap):               
2035
            finalAppOffersMap[key] = appOffersMap[key]
2036
 
2037
        mc.set("cached_app_offers_"+str(retailerId), finalAppOffersMap, 120)
2038
    else:
2039
        print 'No Offers'
2040
        mc.set("cached_app_offers_"+str(retailerId), {}, 10)              
17280 manish.sha 2041
 
2042
def sendNotification(userIds, campaignName, title, message,notificationtype, url, expiresat='2999-01-01'):
2043
    campaignId = addNotificationCampaign(campaignName, title, message, notificationtype, url, None)
2044
    payload = {}
2045
    payload["user_id"]= userIds[0]
2046
    payload["type"]="pending"
2047
    payload["notification_campaign_id"]= campaignId
2048
    payload["status"]=0
16546 kshitij.so 2049
 
17280 manish.sha 2050
    payloadList = []
2051
    payloadList.append(payload)
17281 manish.sha 2052
    jsonObj = json.dumps([dict(pn) for pn in payloadList])
2053
    print jsonObj
2054
    pushpostrequest = urllib2.Request("http://45.33.50.227:3001/addPushNotification")
2055
    pushpostrequest.add_header('Content-Type', 'application/json')
2056
    response = urllib2.urlopen(pushpostrequest, jsonObj).read()
17280 manish.sha 2057
    print response
2058
 
2059
def addNotificationCampaign(name, title, message, type, url, sql):
2060
    notificationCampaign = notification_campaigns()
2061
    notificationCampaign.name = name
2062
    notificationCampaign.title = title
2063
    notificationCampaign.type = type
2064
    notificationCampaign.message = message
2065
    notificationCampaign.url = url
2066
    notificationCampaign.sql = sql
2067
    notificationCampaign.expiresat = datetime(2999, 1, 1)
2068
    notificationCampaign.status = 'active'
2069
    notificationCampaign.created = datetime.now()
2070
 
2071
    session.commit()
2072
    campaignId = notificationCampaign.id
2073
 
2074
    session.close()
2075
    return campaignId
17302 kshitij.so 2076
 
2077
def getDummyDeals(categoryId, offset, limit):
2078
    outer_query = []
2079
    outer_query.append({"showDeal":1})
2080
    outer_query.append({"category_id":categoryId})
2081
    query = {}
2082
    query['$gt'] = -100
2083
    outer_query.append({'totalPoints':query})
2084
    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))
2085
    returnObj = []
2086
    for deal in all_deals:
17306 kshitij.so 2087
        item = list(get_mongo_connection().Catalog.MasterData.find({'_id':deal['_id']}))
17305 kshitij.so 2088
        returnObj.append(getItemObjForStaticDeals(item[0]))
17302 kshitij.so 2089
    return returnObj
17367 kshitij.so 2090
 
17469 kshitij.so 2091
def searchDummyDeals(search_term , limit, offset):
17367 kshitij.so 2092
    data = []
2093
    uniqueMap = {}
2094
    if search_term is not None:
2095
        terms = search_term.split(' ')
2096
        outer_query = []
2097
        for term in terms:
2098
            outer_query.append({"source_product_name":re.compile(term, re.IGNORECASE)})
2099
        try:
2100
            collection = get_mongo_connection().Catalog.MasterData.find({"$and":outer_query,'source_id':{'$in':SOURCE_MAP.keys()}})
2101
            for record in collection:
2102
                data.append(record)
2103
        except:
2104
            pass
2105
    else:
2106
        collection = get_mongo_connection().Catalog.MasterData.find({'source_id':{'$in':SOURCE_MAP.keys()}})
2107
        for record in collection:
2108
            data.append(record)
2109
    for x in data:
2110
        if not uniqueMap.has_key(x['skuBundleId']):
17469 kshitij.so 2111
            uniqueMap[x['skuBundleId']] = {'source_product_name':x['source_product_name'],'skuBundleId':x['skuBundleId'],'thumbnail':x['thumbnail']}
17367 kshitij.so 2112
 
17469 kshitij.so 2113
    if (offset + limit) > len(uniqueMap.values()):
2114
        limit = len(uniqueMap.values()) - offset - 1
2115
 
2116
    count = 0
2117
#     for x in uniqueMap.values():
2118
#         print count,
2119
#         print '\t',
2120
#         print x
2121
#         count = count+1
17555 kshitij.so 2122
 
17469 kshitij.so 2123
    print offset
2124
    print limit
2125
 
2126
    return uniqueMap.values()[offset:limit+offset]
17367 kshitij.so 2127
 
17469 kshitij.so 2128
 
2129
def getDummyPricing(skuBundleId):
2130
    collection = get_mongo_connection().Catalog.MasterData.find({'source_id':{'$in':SOURCE_MAP.keys()},'skuBundleId':skuBundleId,'in_stock':1})
2131
    print collection.count()
2132
    cheapest = 99999999
2133
    cheapestDetails= None
2134
    returnMap = {}
2135
 
2136
    for d in collection:
2137
        if d['available_price'] < cheapest:
2138
            cheapestDetails = d
2139
            cheapest = int(d['available_price'])
2140
        if returnMap.has_key(d['source_id']):
2141
            d = getItemObjForStaticDeals(d)
2142
            d['toShowStore'] = 0
2143
            returnMap[d['source_id']].append(d)
2144
        else:
2145
            temp = []
2146
            d = getItemObjForStaticDeals(d)
2147
            d['toShowStore'] = 1
2148
            temp.append(d)
2149
            returnMap[d['source_id']] = temp
2150
    returnMap['cheapest'] = cheapestDetails
2151
    for y in returnMap.itervalues():
2152
        if isinstance(y, (list, tuple)):
2153
            (y[len(y)-1])['lastElement'] = 1
2154
        else:
2155
            pass
2156
    if returnMap['cheapest'] ==None:
2157
        dum = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':skuBundleId,'source_id':{"$in":SOURCE_MAP.keys()}})
2158
        returnMap['cheapest'] = {'thumbnail':dum['thumbnail'],'source_product_name':dum['source_product_name']}
2159
    return returnMap
17555 kshitij.so 2160
 
17603 kshitij.so 2161
 
17555 kshitij.so 2162
def addDealObject(data):
17570 kshitij.so 2163
    if data.get('img_url') is None or data.get('img_url')=="" or data.get('name') is None or data.get('name')=="":
2164
        return {0:'Invalid data'}   
17555 kshitij.so 2165
    try:
2166
        max_id = list(get_mongo_connection().Catalog.DealObject.find().sort([('_id',pymongo.DESCENDING)]).limit(1))
2167
        if len(max_id) ==0:
2168
            max_id = 0
17559 kshitij.so 2169
        else:
2170
            max_id = max_id[0]['_id']
2171
        data['_id'] = max_id +1
17555 kshitij.so 2172
        get_mongo_connection().Catalog.DealObject.insert(data)
2173
        return {1:'Data added successfully'}
2174
    except:
2175
        return {0:'Error in adding data'}
2176
 
17561 kshitij.so 2177
def getAllDealObjects(offset, limit):
2178
    data = []
2179
    collection = get_mongo_connection().Catalog.DealObject
2180
    cursor = collection.find({}).skip(offset).limit(limit)
2181
    for val in cursor:
17564 kshitij.so 2182
        data.append({'_id':val['_id'],'name':val['name']})
17561 kshitij.so 2183
    return data
17564 kshitij.so 2184
 
2185
def deleteDealObject(id):
2186
    try:
2187
        get_mongo_connection().Catalog.DealObject.remove({'_id':id})
17616 kshitij.so 2188
        get_mongo_connection().Catalog.FeaturedDealsDealObject.remove({'_id':id})
17564 kshitij.so 2189
        return {1:"Deal Object deleted"}
2190
    except:
2191
        return {0:"Error in deleting object"}
17566 kshitij.so 2192
 
2193
def getDealObjectById(id):
2194
    try:
2195
        data = get_mongo_connection().Catalog.DealObject.find({'_id':id})
2196
        return data
2197
    except:
17570 kshitij.so 2198
        return {}
17561 kshitij.so 2199
 
17570 kshitij.so 2200
def updateDealObject(data):
2201
    try:
2202
        _id = data['_id']
2203
        data.pop('_id')
2204
        get_mongo_connection().Catalog.DealObject.update({'_id':_id},{"$set":data},upsert=False)
2205
        return {1:"Data updated successfully"}
2206
    except:
2207
        return {0:"Error in updating data"}
2208
 
17610 kshitij.so 2209
def getAllFeaturedDealsForDealObject(offset, limit):
2210
    data = []
2211
    collection = get_mongo_connection().Catalog.FeaturedDealsDealObject
2212
    cursor = collection.find({}).skip(offset).limit(limit)
2213
    for val in cursor:
2214
        data.append(val)
2215
    return data
2216
 
2217
def addFeaturedDealForDealObject(data):
2218
    collection = get_mongo_connection().Catalog.FeaturedDealsDealObject
2219
    cursor = collection.find({'_id':data['_id']})
2220
    master = get_mongo_connection().Catalog.DealObject.find_one({'_id':data['_id']})
2221
    if master is None:
2222
        return {0:"Deal Object id wrong"}
2223
    otherInfoObj = data['otherInfo']
2224
    toPop = []
2225
    for x,y in otherInfoObj.iteritems():
2226
        if y==0:
2227
            toPop.append(x)
2228
 
2229
    for popItem in toPop:
2230
        otherInfoObj.pop(popItem)
2231
    if len(otherInfoObj.keys())==0:
2232
        return {0:"No rank info to add"}
2233
 
2234
    for x,y in otherInfoObj.iteritems():
2235
        exist = get_mongo_connection().Catalog.FeaturedDealsDealObject.find({'otherInfo.'+x:y})
2236
        if exist.count() >0:
2237
            return {0:"Rank already assigned Deal Object Id %s"%(exist[0]['_id'])}
2238
    if cursor.count() > 0:
2239
        return {0:"Deal Object Id information already present."}
2240
    else:
2241
        collection.insert(data)
2242
        return {1:"Data added successfully"}
2243
 
17616 kshitij.so 2244
def deleteFeaturedDealObject(id):
2245
    try:
2246
        get_mongo_connection().Catalog.FeaturedDealsDealObject.remove({'_id':id})
2247
        return {1:"Deal Object deleted"}
2248
    except:
2249
        return {0:"Error in deleting object"}
17654 kshitij.so 2250
 
2251
def getSubCategoryForFilter(category_id):
2252
    if mc.get("subCategoryFilter") is None:
2253
        print "Populating subcategory data for category_id %d" %(category_id)
2254
        tabData, mobData, accData = [], [], []
2255
 
2256
        accessoriesDeals = get_mongo_connection().Catalog.Deals.aggregate([
2257
                                                                      {"$match":{"category_id":6,"showDeal":1,"totalPoints":{"$gt":-100}}
2258
                                                                    },
2259
                                                                 {"$group" : 
2260
                                                                  {'_id':{'subCategoryId':'$subCategoryId','subCategory':'$subCategory'},'count':{'$sum':1}}
2261
                                                                  }
2262
                                                                ])
2263
 
2264
        for accessoryDeal in accessoriesDeals['result']:
2265
            if accessoryDeal.get('_id').get('subCategoryId') != 0:
2266
                tempMap = {}
2267
                tempMap['subCategory'] = accessoryDeal.get('_id').get('subCategory')
2268
                tempMap['subCategoryId'] = accessoryDeal.get('_id').get('subCategoryId')
2269
                tempMap['count'] = accessoryDeal.get('count')
2270
                accData.append(tempMap)
2271
 
2272
 
2273
        mc.set("subCategoryFilter",{3:mobData, 5:tabData, 6:accData}, 600)  
2274
 
2275
    return sorted(mc.get("subCategoryFilter").get(category_id), key = lambda x: (-x['count'], x['subCategory']))
17610 kshitij.so 2276
 
17616 kshitij.so 2277
 
13572 kshitij.so 2278
def main():
17618 kshitij.so 2279
    featuredDeals = mc.get("featured_deals")
2280
    print resetCache("47")
2281
    print datetime.now()
2282
    x=  getNewDeals(47, 6, 0, 20, None, None, None)
2283
    print "=========================="
2284
    for y in x:
2285
        print y[0]['skuBundleId'],
2286
        print '\t',
2287
        print y[0]['brand']
2288
    print datetime.now()
17469 kshitij.so 2289
 
17618 kshitij.so 2290
 
17469 kshitij.so 2291
 
2292
 
13572 kshitij.so 2293
if __name__=='__main__':
13932 amit.gupta 2294
    main()
17469 kshitij.so 2295