Subversion Repositories SmartDukaan

Rev

Rev 17306 | Rev 17366 | 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, \
12
    to_py_date, CB_REJECTED
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
17365 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',
17365 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
 
14037 kshitij.so 327
def __populateCache(userId):
328
    print "Populating memcache for userId",userId
329
    outer_query = []
16067 kshitij.so 330
    outer_query.append({ "$or": [ { "showDeal": 1} , { "prepaidDeal": 1 } ] })
14037 kshitij.so 331
    query = {}
16170 kshitij.so 332
    query['$gt'] = -100
14037 kshitij.so 333
    outer_query.append({'totalPoints':query})
334
    brandPrefMap = {}
335
    pricePrefMap = {}
336
    actionsMap = {}
337
    brand_p = session.query(price_preferences).filter_by(user_id=userId).all()
338
    for x in brand_p:
339
        pricePrefMap[x.category_id] = [x.min_price,x.max_price]
340
    for x in session.query(brand_preferences).filter_by(user_id=userId).all():
341
        temp_map = {}
342
        if brandPrefMap.has_key((x.brand).strip().upper()):
343
            val = brandPrefMap.get((x.brand).strip().upper())
344
            temp_map[x.category_id] = 1 if x.status == 'show' else 0
345
            val.append(temp_map)
346
        else:
347
            temp = []
348
            temp_map[x.category_id] = 1 if x.status == 'show' else 0
349
            temp.append(temp_map)
350
            brandPrefMap[(x.brand).strip().upper()] = temp
351
 
352
    for x in session.query(user_actions).filter_by(user_id=userId).all():
353
        actionsMap[x.store_product_id] = 1 if x.action == 'like' else 0
17365 kshitij.so 354
    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}).sort([('totalPoints',pymongo.DESCENDING),('bestSellerPoints',pymongo.DESCENDING),('nlcPoints',pymongo.DESCENDING),('rank',pymongo.DESCENDING)]))
14037 kshitij.so 355
    mobile_deals = []
356
    tablet_deals = []
357
    for deal in all_deals:
358
        if actionsMap.get(deal['_id']) == 0:
359
            fav_weight =.25
360
        elif actionsMap.get(deal['_id']) == 1:
361
            fav_weight = 1.5
362
        else:
363
            fav_weight = 1
364
 
365
        if brandPrefMap.get(deal['brand'].strip().upper()) is not None:
366
            brand_weight = 1
367
            for brandInfo in brandPrefMap.get(deal['brand'].strip().upper()):
368
                if brandInfo.get(deal['category_id']) is not None:
369
                    if brandInfo.get(deal['category_id']) == 1:
14055 kshitij.so 370
                        brand_weight = 2.0
14037 kshitij.so 371
        else:
372
            brand_weight = 1
373
 
374
        if pricePrefMap.get(deal['category_id']) is not None:
375
 
376
            if deal['available_price'] >= pricePrefMap.get(deal['category_id'])[0] and deal['available_price'] <= pricePrefMap.get(deal['category_id'])[1]:
377
                asp_weight = 1.5
378
            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]:
379
                asp_weight = 1.2
380
            else:
381
                asp_weight = 1
382
        else:
383
            asp_weight = 1
384
 
385
        persPoints = deal['totalPoints'] * fav_weight * brand_weight * asp_weight
386
        deal['persPoints'] = persPoints
387
 
388
        if deal['category_id'] ==3:
389
            mobile_deals.append(deal)
390
        elif deal['category_id'] ==5:
391
            tablet_deals.append(deal)
392
        else:
393
            continue
394
 
14144 kshitij.so 395
    session.close()
17365 kshitij.so 396
 
397
    mobile_deals = sorted(mobile_deals, key = lambda x: (x['persPoints'],x['totalPoints'],x['bestSellerPoints'], x['nlcPoints'], x['rank']),reverse=True)
398
    tablet_deals = sorted(tablet_deals, key = lambda x: (x['persPoints'],x['totalPoints'],x['bestSellerPoints'], x['nlcPoints'], x['rank']),reverse=True)
399
 
400
    try:
401
        if mc.get("featured_deals") is None:
402
            __populateFeaturedDeals()
403
        featuredDeals = mc.get("featured_deals")
404
 
405
    except Exception as e:
406
        print traceback.print_exc()
407
        featuredDeals = {3:{},5:{}}
408
    print featuredDeals
409
 
410
    sortedMapMobiles = {}
411
    rankMapMobiles = {}
412
    rankMobiles = 0
413
 
414
    blockedRanksMobiles = []
415
    blockedSkuBundlesMobiles = []
416
    blockedInfoMobiles = {}
417
 
418
    featuredDealsMobiles = featuredDeals.get(3)
419
 
420
    for k, v in featuredDealsMobiles.iteritems():
421
        if v.get('category_id') == 3:
422
            blockedRanksMobiles.append(k-1)
423
            blockedSkuBundlesMobiles.append(v.get('skuBundleId'))
424
 
425
    print "Blocked ranks ", blockedRanksMobiles
426
    print "Blocked bundles ", blockedSkuBundlesMobiles 
427
 
428
    for sorted_deal in mobile_deals:
429
        while(True):
430
            if rankMobiles in blockedRanksMobiles:
431
                print "skipping rank ",rankMobiles
432
                rankMobiles = rankMobiles +1
433
            else:
434
                break
435
 
436
        if sorted_deal['skuBundleId'] in blockedSkuBundlesMobiles:
437
            if blockedInfoMobiles.has_key(sorted_deal['skuBundleId']):
438
                blockedInfoMobiles.get(sorted_deal['skuBundleId']).append(sorted_deal)
439
            else:
440
                blockedInfoMobiles[sorted_deal['skuBundleId']] = [sorted_deal]
441
            continue
442
 
443
        if sortedMapMobiles.get(sorted_deal['skuBundleId']) is None:
444
            sortedMapMobiles[sorted_deal['skuBundleId']] = {rankMobiles:[sorted_deal]}
445
            rankMapMobiles[rankMobiles] = (sortedMapMobiles[sorted_deal['skuBundleId']].values())[0]
446
            rankMobiles = rankMobiles +1
447
        else:
448
            for temp_list in sortedMapMobiles.get(sorted_deal['skuBundleId']).itervalues():
449
                temp_list.append(sorted_deal)
450
            rankMapMobiles[(sortedMapMobiles.get(sorted_deal['skuBundleId']).keys())[0]] = temp_list
451
 
452
    for rank in blockedRanksMobiles:
453
        print "Adding rank ",rank 
454
        rankMapMobiles[rank] = blockedInfoMobiles.get((featuredDealsMobiles.get(rank+1)).get('skuBundleId'))
455
        print rankMapMobiles[rank]
456
 
457
 
458
    sortedMapTablets = {}
459
    rankMapTablets = {}
460
    rankTablets = 0
461
 
462
    blockedRanksTablets = []
463
    blockedSkuBundlesTablets = []
464
    blockedInfoTablets = {}
465
 
466
    featuredDealsTablets = featuredDeals.get(5)
467
 
468
 
469
    for k, v in featuredDealsTablets.iteritems():
470
        if v.get('category_id') == 5:
471
            blockedRanksTablets.append(k-1)
472
            blockedSkuBundlesTablets.append(v.get('skuBundleId'))
473
 
474
    print "Blocked ranks ", blockedRanksTablets
475
    print "Blocked bundles ", blockedSkuBundlesTablets 
476
 
477
    for sorted_deal in tablet_deals:
478
        while(True):
479
            if rankTablets in blockedRanksTablets:
480
                print "skipping rank ",rankTablets
481
                rankTablets = rankTablets +1
482
            else:
483
                break
484
 
485
        if sorted_deal['skuBundleId'] in blockedSkuBundlesTablets:
486
            if blockedInfoTablets.has_key(sorted_deal['skuBundleId']):
487
                blockedInfoTablets.get(sorted_deal['skuBundleId']).append(sorted_deal)
488
            else:
489
                blockedInfoTablets[sorted_deal['skuBundleId']] = [sorted_deal]
490
            continue
491
 
492
        if sortedMapTablets.get(sorted_deal['skuBundleId']) is None:
493
            sortedMapTablets[sorted_deal['skuBundleId']] = {rankTablets:[sorted_deal]}
494
            rankMapTablets[rankTablets] = (sortedMapTablets[sorted_deal['skuBundleId']].values())[0]
495
            rankTablets = rankTablets +1
496
        else:
497
            for temp_list in sortedMapTablets.get(sorted_deal['skuBundleId']).itervalues():
498
                temp_list.append(sorted_deal)
499
            rankMapTablets[(sortedMapTablets.get(sorted_deal['skuBundleId']).keys())[0]] = temp_list
500
 
501
    for rank in blockedRanksTablets:
502
        print "Adding rank ",rank 
503
        rankMapTablets[rank] = blockedInfoTablets.get((featuredDealsTablets.get(rank+1)).get('skuBundleId'))
504
        print rankMapTablets[rank]
505
 
506
 
507
 
508
 
509
    mem_cache_val = {3:mobile_deals, 5:tablet_deals, "3_rankMap": rankMapMobiles,"5_rankMap": rankMapTablets }
14037 kshitij.so 510
    mc.set(str(userId), mem_cache_val)
511
 
512
 
14531 kshitij.so 513
def __populateFeaturedDeals():
17365 kshitij.so 514
    print "Populating featured deals....."
515
    featuredDealsMobiles = {}
516
    featuredDealsTablets = {}
517
    activeFeaturedDeals = get_mongo_connection().Catalog.FeaturedDeals.find({'startDate':{'$lte':to_java_date(datetime.now())},'endDate':{'$gte':to_java_date(datetime.now())}}).sort([('rank',pymongo.DESCENDING)])
14531 kshitij.so 518
    for activeFeaturedDeal in activeFeaturedDeals:
17365 kshitij.so 519
        deals = get_mongo_connection().Catalog.Deals.find({"skuBundleId":activeFeaturedDeal.get('skuBundleId'),"$or":[{"showDeal":1}, {"prepaidDeal":1}]})
520
        for deal in deals:
521
            if deal.get('available_price') <= activeFeaturedDeal.get('thresholdPrice'):
522
                f_deal = {'skuBundleId':activeFeaturedDeal.get('skuBundleId'), 'thresholdPrice':activeFeaturedDeal.get('thresholdPrice'), 'rank':activeFeaturedDeal.get('rank'),'category_id':activeFeaturedDeal.get('category_id')}
523
                if activeFeaturedDeal.get('category_id') == 3:
524
                    featuredDealsMobiles[activeFeaturedDeal.get('rank')] = f_deal
525
                else:
526
                    featuredDealsTablets[activeFeaturedDeal.get('rank')] = f_deal
527
                break
528
 
529
    mc.set("featured_deals", {3:featuredDealsMobiles,5:featuredDealsTablets}, 600)
530
    print mc.get("featured_deals")
14037 kshitij.so 531
 
14791 kshitij.so 532
def getNewDeals(userId, category_id, offset, limit, sort, direction, filterData=None):
14761 kshitij.so 533
    if not bool(mc.get("category_cash_back")):
13921 kshitij.so 534
        populateCashBack()
14037 kshitij.so 535
 
16079 kshitij.so 536
    dealsListMap = []
14037 kshitij.so 537
    user_specific_deals = mc.get(str(userId))
538
    if user_specific_deals is None:
539
        __populateCache(userId)
540
        user_specific_deals = mc.get(str(userId))
14038 kshitij.so 541
    else:
542
        print "Getting user deals from cache"
14037 kshitij.so 543
    category_specific_deals = user_specific_deals.get(category_id)
544
 
17365 kshitij.so 545
    insert_featured_deals = False
14037 kshitij.so 546
    if sort is None or direction is None:
17365 kshitij.so 547
        insert_featured_deals = True
548
        rankMap = user_specific_deals.get(str(category_id)+"_rankMap")
14037 kshitij.so 549
    else:
550
        if sort == "bestSellerPoints":
551
            sorted_deals = sorted(category_specific_deals, key = lambda x: (x['bestSellerPoints'], x['rank'], x['nlcPoints']),reverse=True)
552
        else:
553
            if direction == -1:
554
                rev = True
555
            else:
556
                rev = False
557
            sorted_deals = sorted(category_specific_deals, key = lambda x: (x['available_price']),reverse=rev)
558
 
14791 kshitij.so 559
 
560
    print "============================"
17365 kshitij.so 561
    filtered_deals = []
14791 kshitij.so 562
    if filterData is not None:
563
        try:
17365 kshitij.so 564
            filtered_deals = filterDeals(category_specific_deals, filterData)
14791 kshitij.so 565
        except:
16067 kshitij.so 566
            traceback.print_exc()
14791 kshitij.so 567
 
17365 kshitij.so 568
    if not insert_featured_deals:
569
        sortedMap = {}
570
        rankMap = {}
571
        rank = 0
572
        for sorted_deal in sorted_deals:
573
 
574
            if len(filtered_deals) > 0 and  sorted_deal['skuBundleId'] not in filtered_deals:
575
                continue
576
 
577
            if sortedMap.get(sorted_deal['skuBundleId']) is None:
578
                sortedMap[sorted_deal['skuBundleId']] = {rank:[sorted_deal]}
579
                rankMap[rank] = (sortedMap[sorted_deal['skuBundleId']].values())[0]
580
                rank = rank +1
581
            else:
582
                for temp_list in sortedMap.get(sorted_deal['skuBundleId']).itervalues():
583
                    temp_list.append(sorted_deal)
584
                rankMap[(sortedMap.get(sorted_deal['skuBundleId']).keys())[0]] = temp_list
585
    else:
586
        filterMap = {}
587
        rank = 0
588
        if len(filtered_deals) > 0:
589
            try:
590
                od = collections.OrderedDict(sorted(rankMap.items()))
591
            except:
592
                od = ordereddict.OrderedDict(sorted(rankMap.items()))
593
            for k, v in od.iteritems():
594
                if v[0].get('skuBundleId') in filtered_deals:
595
                    filterMap[rank] = v
596
                    rank =rank+1
597
            rankMap = filterMap
598
 
16067 kshitij.so 599
    for dealList in [rankMap.get(k, []) for k in range(offset, offset+limit)]:
16079 kshitij.so 600
        temp = []
16067 kshitij.so 601
        for d in dealList:
602
            item = list(get_mongo_connection().Catalog.MasterData.find({'_id':d['_id']}))
16320 kshitij.so 603
            if len(item) ==0:
604
                continue
16079 kshitij.so 605
            item[0]['persPoints'] = d['persPoints']
606
            if d['dealType'] == 1 and d['source_id'] ==1:
16511 kshitij.so 607
                try:
608
                    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())}}))
609
                    item[0]['marketPlaceUrl'] = manualDeal[0]['dealUrl'].strip()
610
                except:
611
                    pass
16079 kshitij.so 612
            elif d['source_id'] ==3:
613
                item[0]['marketPlaceUrl'] = item[0]['marketPlaceUrl']+'?supc='+item[0].get('identifier')
614
            else:
615
                pass 
616
            try:
617
                cashBack = getCashBack(item[0]['_id'], item[0]['source_id'], item[0]['category_id'])
618
                if not cashBack or cashBack.get('cash_back_status')!=1:
14037 kshitij.so 619
                    item[0]['cash_back_type'] = 0
620
                    item[0]['cash_back'] = 0
16079 kshitij.so 621
                else:
17180 kshitij.so 622
                    if cashBack.get('maxCashBack') is not None:
623
 
624
                        if cashBack.get('cash_back_type') ==1 and (float(cashBack.get('cash_back'))*item[0]['available_price'])/100 > cashBack.get('maxCashBack'):
625
                            cashBack['cash_back_type'] = 2
626
                            cashBack['cash_back'] = cashBack['maxCashBack']
627
                        elif cashBack.get('cash_back_type') ==2 and cashBack.get('cash_back') > cashBack.get('maxCashBack'):
628
                            cashBack['cash_back'] = cashBack['maxCashBack']
629
 
16079 kshitij.so 630
                    item[0]['cash_back_type'] = int(cashBack['cash_back_type'])
631
                    item[0]['cash_back'] = cashBack['cash_back']
632
            except:
633
                print "Error in adding cashback to deals"
634
                item[0]['cash_back_type'] = 0
635
                item[0]['cash_back'] = 0
16252 kshitij.so 636
            try:
637
                item[0]['dp'] = d['dp']
638
                item[0]['showDp'] = d['showDp']
639
            except:
640
                item[0]['dp'] = 0.0
641
                item[0]['showDp'] = 0
16483 kshitij.so 642
            try:
643
                item[0]['thumbnail'] = item[0]['thumbnail'].strip()
644
            except:
17115 manish.sha 645
                pass
16079 kshitij.so 646
            temp.append(item[0])
16125 kshitij.so 647
        if len(temp) > 1:
16126 kshitij.so 648
            temp = sorted(temp, key = lambda x: (x['available_price']),reverse=False)
16079 kshitij.so 649
        dealsListMap.append(temp)
650
    return dealsListMap
14037 kshitij.so 651
 
14791 kshitij.so 652
def filterDeals(deals, filterData):
653
    dealFiltered = []
654
    brandsFiltered = []
655
    filterArray = filterData.split('|')
656
    for data in filterArray:
657
        try:
658
            filter, info = data.split(':')
659
        except Exception as ex:
660
            traceback.print_exc()
661
            continue
662
        if filter == 'dealFilter':
663
            toFilter = info.split('^')
664
            print "deal filter ",toFilter
665
            if 'deals' in toFilter:
666
                dealFiltered = deals
667
                continue
668
            for filterVal in toFilter:
669
                if filterVal == 'dod':
670
                    for deal in deals:
671
                        if deal['dealType'] == 1:
672
                            dealFiltered.append(deal)
673
        elif filter == 'brandFilter':
674
            toFilter = info.split('^')
675
            print "brand filter ",toFilter
676
            if len(toFilter) == 0 or (len(toFilter)==1 and toFilter[0]==''):
677
                brandsFiltered = deals
678
            for deal in deals:
15151 kshitij.so 679
                if str(int(deal['brand_id'])) in toFilter:
14791 kshitij.so 680
                    brandsFiltered.append(deal)
15040 kshitij.so 681
    if len(dealFiltered) == 0:
17365 kshitij.so 682
        return [trend['skuBundleId'] for trend in brandsFiltered]
683
    return [i['skuBundleId'] for i in dealFiltered for j in brandsFiltered if i['_id']==j['_id']]
14791 kshitij.so 684
 
685
 
14037 kshitij.so 686
def getDeals(userId, category_id, offset, limit, sort, direction):
14761 kshitij.so 687
    if not bool(mc.get("category_cash_back")):
14037 kshitij.so 688
        populateCashBack()
689
    rank = 1
13771 kshitij.so 690
    deals = {}
13910 kshitij.so 691
    outer_query = []
692
    outer_query.append({"showDeal":1})
693
    query = {}
694
    query['$gt'] = 0
695
    outer_query.append({'totalPoints':query})
696
    if category_id in (3,5):
697
        outer_query.append({'category_id':category_id})
13803 kshitij.so 698
    if sort is None or direction is None:
699
        direct = -1
13910 kshitij.so 700
        print outer_query
701
        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 702
    else:
13910 kshitij.so 703
        print outer_query
13803 kshitij.so 704
        direct = direction
13910 kshitij.so 705
        if sort == "bestSellerPoints":
706
            print "yes,sorting by bestSellerPoints"
707
            data = list(get_mongo_connection().Catalog.Deals.find({"$and":outer_query}).sort([('bestSellerPoints',direct),('rank',direct),('nlcPoints',direct)]).skip(offset).limit(limit))
708
        else:
709
            data = list(get_mongo_connection().Catalog.Deals.find({"$and":outer_query}).sort([(sort,direct)]).skip(offset).limit(limit))
13771 kshitij.so 710
    for d in data:
711
        item = list(get_mongo_connection().Catalog.MasterData.find({'_id':d['_id']}))
712
        if not deals.has_key(item[0]['identifier']):
13921 kshitij.so 713
            item[0]['dealRank'] = rank
714
            try:
14761 kshitij.so 715
                cashBack = getCashBack(item[0]['_id'], item[0]['source_id'], item[0]['category_id'])
13921 kshitij.so 716
                if not cashBack or cashBack.get('cash_back_status')!=1:
13928 kshitij.so 717
                    item[0]['cash_back_type'] = 0
718
                    item[0]['cash_back'] = 0
13921 kshitij.so 719
                else:
14766 kshitij.so 720
                    item[0]['cash_back_type'] = int(cashBack['cash_back_type'])
13928 kshitij.so 721
                    item[0]['cash_back'] = cashBack['cash_back']
13921 kshitij.so 722
            except:
723
                print "Error in adding cashback to deals"
13928 kshitij.so 724
                item[0]['cash_back_type'] = 0
725
                item[0]['cash_back'] = 0
13771 kshitij.so 726
            deals[item[0]['identifier']] = item[0]
13921 kshitij.so 727
 
13771 kshitij.so 728
            rank +=1
13785 kshitij.so 729
    return sorted(deals.values(), key=itemgetter('dealRank'))
730
 
16222 kshitij.so 731
def getItem(skuId,showDp=None):
16224 kshitij.so 732
    temp = []
14761 kshitij.so 733
    if not bool(mc.get("category_cash_back")):
14113 kshitij.so 734
        populateCashBack()
13795 kshitij.so 735
    try:
16222 kshitij.so 736
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'_id':int(skuId)})
737
        if skuData is None:
738
            raise
739
        try:
740
            cashBack = getCashBack(skuData['_id'], skuData['source_id'], skuData['category_id'])
741
            if not cashBack or cashBack.get('cash_back_status')!=1:
742
                skuData['cash_back_type'] = 0
743
                skuData['cash_back'] = 0
744
            else:
745
                skuData['cash_back_type'] = cashBack['cash_back_type']
746
                skuData['cash_back'] = cashBack['cash_back']
747
        except:
748
            print "Error in adding cashback to deals"
749
            skuData['cash_back_type'] = 0
750
            skuData['cash_back'] = 0
751
        skuData['in_stock'] = int(skuData['in_stock'])
752
        skuData['is_shortage'] = int(skuData['is_shortage'])
753
        skuData['category_id'] = int(skuData['category_id'])
754
        skuData['status'] = int(skuData['status'])
16483 kshitij.so 755
        try:
756
            skuData['thumbnail'] = skuData['thumbnail'].strip()
757
        except:
758
            pass 
16222 kshitij.so 759
        if showDp is not None:
760
            dealerPrice = get_mongo_connection().Catalog.SkuDealerPrices.find_one({'skuBundleId':skuData['skuBundleId']})
761
            skuData['dp'] = 0.0
762
            skuData['showDp'] = 0
763
            if dealerPrice is not None:
764
                skuData['dp'] = dealerPrice['dp']
765
                skuData['showDp'] = dealerPrice['showDp']
16224 kshitij.so 766
        temp.append(skuData)
767
        return temp
13795 kshitij.so 768
    except:
16224 kshitij.so 769
        return []
13836 kshitij.so 770
 
14761 kshitij.so 771
def getCashBack(skuId, source_id, category_id):
772
    if not bool(mc.get("category_cash_back")):
773
        populateCashBack()
774
    itemCashBackMap = mc.get("item_cash_back")
13921 kshitij.so 775
    itemCashBack = itemCashBackMap.get(skuId)
776
    if itemCashBack is not None:
777
        return itemCashBack
14761 kshitij.so 778
    cashBackMap = mc.get("category_cash_back")
13921 kshitij.so 779
    sourceCashBack = cashBackMap.get(source_id)
780
    if sourceCashBack is not None and len(sourceCashBack) > 0:
781
        for cashBack in sourceCashBack:
782
            if cashBack.get(category_id) is None:
783
                continue
784
            else:
785
                return cashBack.get(category_id)
786
    else:
787
        return {}
16560 amit.gupta 788
 
789
def getBundleBySourceSku(source_id, identifier):
17035 kshitij.so 790
    if source_id in (1,2,4,5,6,7):
16560 amit.gupta 791
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'identifier':identifier.strip(), 'source_id':source_id}))
792
    elif source_id == 3:
793
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'secondaryIdentifier':identifier.strip(), 'source_id':source_id}))
794
    else:
795
        return {}
796
 
797
    if not skuData:
798
        return {}
799
    else:
16564 amit.gupta 800
        bundleId = skuData[0]["skuBundleId"]
17035 kshitij.so 801
        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 802
                       {"source_id":1, "available_price":1, "marketPlaceUrl":1, "gross_price":1, "codAvailable":1, "source_product_name":1, "offer":1, "coupon":1}))
16579 amit.gupta 803
        return {'products':itemIds}
16560 amit.gupta 804
 
805
 
13921 kshitij.so 806
 
15129 kshitij.so 807
def getDealRank(identifier, source_id, userId):
17035 kshitij.so 808
    if source_id in (1,2,4,5,6,7):
15129 kshitij.so 809
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'identifier':identifier.strip(), 'source_id':source_id}))
810
    elif source_id == 3:
811
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'secondaryIdentifier':identifier.strip(), 'source_id':source_id}))
812
    else:
16282 amit.gupta 813
        return {'rank':0, 'description':'Source not valid','maxNlc':None, 'minNlc':None,'status':None,'dp':None}
15349 kshitij.so 814
    if len(skuData) == 0:
16282 amit.gupta 815
        return {'rank':0, 'description':'No matching product identifier found','maxNlc':None, 'minNlc':None,'status':None,'dp':None}
15129 kshitij.so 816
    user_specific_deals = mc.get(str(userId))
817
    if user_specific_deals is None:
818
        __populateCache(userId)
819
        user_specific_deals = mc.get(str(userId))
820
    else:
821
        print "Getting user deals from cache"
822
    category_id = skuData[0]['category_id']
823
    category_specific_deals = user_specific_deals.get(category_id)
16280 kshitij.so 824
 
825
    dealsData = get_mongo_connection().Catalog.Deals.find_one({'skuBundleId':skuData[0]['skuBundleId']})
826
    if dealsData is None:
827
        dealsData = {}
828
 
15129 kshitij.so 829
    if category_specific_deals is None or len(category_specific_deals) ==0:
16280 kshitij.so 830
        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 831
    sorted_deals = sorted(category_specific_deals, key = lambda x: (x['persPoints'],x['totalPoints'],x['bestSellerPoints'], x['nlcPoints'], x['rank']),reverse=True)
16168 kshitij.so 832
    sortedMap = {}
833
    rankMap = {}
834
    rank = 0
15129 kshitij.so 835
    for sorted_deal in sorted_deals:
16168 kshitij.so 836
        if sortedMap.get(sorted_deal['skuBundleId']) is None:
837
            sortedMap[sorted_deal['skuBundleId']] = {rank:[sorted_deal]}
838
            rankMap[rank] = (sortedMap[sorted_deal['skuBundleId']].values())[0]
839
            rank = rank +1
840
        else:
841
            for temp_list in sortedMap.get(sorted_deal['skuBundleId']).itervalues():
842
                temp_list.append(sorted_deal)
843
            rankMap[(sortedMap.get(sorted_deal['skuBundleId']).keys())[0]] = temp_list
844
 
16187 kshitij.so 845
    for dealRank ,dealList in rankMap.iteritems():
16168 kshitij.so 846
        for d in dealList:
16186 kshitij.so 847
            if d['skuBundleId'] == skuData[0]['skuBundleId']:
16280 kshitij.so 848
                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 849
 
16280 kshitij.so 850
    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 851
 
852
 
13836 kshitij.so 853
def getCashBackDetails(identifier, source_id):
14761 kshitij.so 854
    if not bool(mc.get("category_cash_back")):
13921 kshitij.so 855
        populateCashBack()
13771 kshitij.so 856
 
17035 kshitij.so 857
    if source_id in (1,2,4,5,6,7):
13839 kshitij.so 858
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'identifier':identifier.strip(), 'source_id':source_id}))
13840 kshitij.so 859
    elif source_id == 3:
13839 kshitij.so 860
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'secondaryIdentifier':identifier.strip(), 'source_id':source_id}))
13840 kshitij.so 861
    else:
862
        return {}
13836 kshitij.so 863
    if len(skuData) > 0:
14761 kshitij.so 864
        itemCashBackMap = mc.get("item_cash_back")
13921 kshitij.so 865
        itemCashBack = itemCashBackMap.get(skuData[0]['_id'])
866
        if itemCashBack is not None:
867
            return itemCashBack
14761 kshitij.so 868
        cashBackMap = mc.get("category_cash_back")
13921 kshitij.so 869
        sourceCashBack = cashBackMap.get(source_id)
870
        if sourceCashBack is not None and len(sourceCashBack) > 0:
871
            for cashBack in sourceCashBack:
872
                if cashBack.get(skuData[0]['category_id']) is None:
873
                    continue
874
                else:
875
                    return cashBack.get(skuData[0]['category_id'])
13836 kshitij.so 876
        else:
877
            return {} 
878
    else:
879
        return {}
13986 amit.gupta 880
 
14398 amit.gupta 881
def getImgSrc(identifier, source_id):
882
    skuData = None
17035 kshitij.so 883
    if source_id in (1,2,4,5,6,7):
14414 amit.gupta 884
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'identifier':identifier.strip(), 'source_id':source_id})
14398 amit.gupta 885
    elif source_id == 3:
14414 amit.gupta 886
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'secondaryIdentifier':identifier.strip(), 'source_id':source_id})
14398 amit.gupta 887
    if skuData is None:
888
        return {}
889
    else:
16483 kshitij.so 890
        try:
891
            return {'thumbnail':skuData.get('thumbnail').strip()}
892
        except:
893
            return {'thumbnail':skuData.get('thumbnail')}
13986 amit.gupta 894
 
895
def next_weekday(d, weekday):
896
    days_ahead = weekday - d.weekday()
897
    if days_ahead <= 0: # Target day already happened this week
898
        days_ahead += 7
899
    return d + timedelta(days_ahead)
900
 
13771 kshitij.so 901
 
13970 kshitij.so 902
def getAllDealerPrices(offset, limit):
903
    data = []
904
    collection = get_mongo_connection().Catalog.SkuDealerPrices
905
    cursor = collection.find().skip(offset).limit(limit)
906
    for val in cursor:
15853 kshitij.so 907
        master = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':val['skuBundleId']})
908
        if master is not None:
909
            val['brand'] = master['brand']
910
            val['source_product_name'] = master['source_product_name']
13970 kshitij.so 911
        else:
912
            val['brand'] = ""
913
            val['source_product_name'] = ""
16231 kshitij.so 914
        val['showDp'] = int(val['showDp'])
13970 kshitij.so 915
        data.append(val)
916
    return data
917
 
15853 kshitij.so 918
def addSkuDealerPrice(data):
919
    collection = get_mongo_connection().Catalog.SkuDealerPrices
920
    cursor = collection.find_one({"skuBundleId":data['skuBundleId']})
921
    if cursor is not None:
922
        return {0:"BundleId information already present."}
13970 kshitij.so 923
    else:
15853 kshitij.so 924
        collection.insert(data)
925
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
13970 kshitij.so 926
        return {1:"Data added successfully"}
927
 
928
def updateSkuDealerPrice(data, _id):
929
    try:
930
        collection = get_mongo_connection().Catalog.SkuDealerPrices
931
        collection.update({'_id':ObjectId(_id)},{"$set":{'dp':data['dp']}},upsert=False, multi = False)
15853 kshitij.so 932
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
13970 kshitij.so 933
        return {1:"Data updated successfully"}
934
    except:
935
        return {0:"Data not updated."}
936
 
937
def updateExceptionalNlc(data, _id):
938
    try:
939
        collection = get_mongo_connection().Catalog.ExceptionalNlc
940
        collection.update({'_id':ObjectId(_id)},{"$set":{'maxNlc':data['maxNlc'], 'minNlc':data['minNlc'], 'overrideNlc':data['overrideNlc']}},upsert=False, multi = False)
15853 kshitij.so 941
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
13970 kshitij.so 942
        return {1:"Data updated successfully"}
943
    except:
944
        return {0:"Data not updated."}
945
 
14041 kshitij.so 946
def resetCache(userId):
14043 kshitij.so 947
    try:
948
        mc.delete(userId)
949
        return {1:'Cache cleared.'}
950
    except:
951
        return {0:'Unable to clear cache.'}
952
 
15853 kshitij.so 953
def updateCollection(data):
14083 kshitij.so 954
    print data
15853 kshitij.so 955
    try:
956
        collection = get_mongo_connection().Catalog[data['class']]
957
        class_name = data.pop('class')
958
        _id = data.pop('oid')
959
        result = collection.update({'_id':ObjectId(_id)},{"$set":data},upsert=False, multi = False)
960
        if class_name != "Notifications":
961
            record = list(collection.find({'_id':ObjectId(_id)}))
962
            if class_name !="CategoryDiscount":
963
                if record[0].has_key('sku'):
964
                    field = '_id'
965
                    val = record[0]['sku']
14852 kshitij.so 966
                else:
15853 kshitij.so 967
                    field = 'skuBundleId'
968
                    val = record[0]['skuBundleId']
969
                get_mongo_connection().Catalog.MasterData.update({field:val},{"$set":{'updatedOn':to_java_date(datetime.now())}},upsert=False, multi = True)
970
            else:
971
                get_mongo_connection().Catalog.MasterData.update({'brand':re.compile(record[0]['brand'], re.IGNORECASE),'category_id':record[0]['category_id']}, \
972
                                                                 {"$set":{'updatedOn':to_java_date(datetime.now())}},upsert=False,multi=True)
16233 kshitij.so 973
        if class_name =='SkuDealerPrices':
16237 kshitij.so 974
            get_mongo_connection().Catalog.Deals.update({'skuBundleId':val},{"$set":data},upsert=False, multi=True)
15853 kshitij.so 975
        return {1:"Data updated successfully"}
976
    except Exception as e:
977
        print e
978
        return {0:"Data not updated."}
14575 kshitij.so 979
 
14076 kshitij.so 980
 
14553 kshitij.so 981
def addNegativeDeals(data, multi):
982
    if multi !=1: 
983
        collection = get_mongo_connection().Catalog.NegativeDeals
984
        cursor = collection.find({"sku":data['sku']})
985
        if cursor.count() > 0:
986
            return {0:"Sku information already present."}
987
        else:
988
            collection.insert(data)
989
            return {1:"Data added successfully"}
14481 kshitij.so 990
    else:
14553 kshitij.so 991
        skuIds = __getBundledSkusfromSku(data['sku'])
992
        for sku in skuIds:
993
            data['sku'] = sku.get('_id')
994
            collection = get_mongo_connection().Catalog.NegativeDeals
995
            cursor = collection.find({"sku":data['sku']})
996
            if cursor.count() > 0:
997
                continue
998
            else:
14558 kshitij.so 999
                data.pop('_id',None)
14553 kshitij.so 1000
                collection.insert(data)
14481 kshitij.so 1001
        return {1:"Data added successfully"}
1002
 
1003
def getAllNegativeDeals(offset, limit):
1004
    data = []
1005
    collection = get_mongo_connection().Catalog.NegativeDeals
1006
    cursor = collection.find().skip(offset).limit(limit)
1007
    for val in cursor:
1008
        master = list(get_mongo_connection().Catalog.MasterData.find({'_id':val['sku']}))
1009
        if len(master) > 0:
1010
            val['brand'] = master[0]['brand']
1011
            val['source_product_name'] = master[0]['source_product_name']
1012
            val['skuBundleId'] = master[0]['skuBundleId']
1013
        else:
1014
            val['brand'] = ""
1015
            val['source_product_name'] = ""
1016
            val['skuBundleId'] = ""
1017
        data.append(val)
1018
    return data
1019
 
1020
def getAllManualDeals(offset, limit):
1021
    data = []
1022
    collection = get_mongo_connection().Catalog.ManualDeals
15090 kshitij.so 1023
    cursor = collection.find().skip(offset).limit(limit)
14481 kshitij.so 1024
    for val in cursor:
1025
        master = list(get_mongo_connection().Catalog.MasterData.find({'_id':val['sku']}))
1026
        if len(master) > 0:
1027
            val['brand'] = master[0]['brand']
1028
            val['source_product_name'] = master[0]['source_product_name']
1029
            val['skuBundleId'] = master[0]['skuBundleId']
1030
        else:
1031
            val['brand'] = ""
1032
            val['source_product_name'] = ""
1033
            val['skuBundleId'] = ""
1034
        data.append(val)
1035
    return data
14076 kshitij.so 1036
 
14553 kshitij.so 1037
def addManualDeal(data, multi):
1038
    if multi !=1:
1039
        collection = get_mongo_connection().Catalog.ManualDeals
15090 kshitij.so 1040
        cursor = collection.find({'sku':data['sku']})
14553 kshitij.so 1041
        if cursor.count() > 0:
1042
            return {0:"Sku information already present."}
1043
        else:
1044
            collection.insert(data)
1045
            get_mongo_connection().Catalog.MasterData.update({'_id':data['sku']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=False)
1046
            return {1:"Data added successfully"}
14481 kshitij.so 1047
    else:
14553 kshitij.so 1048
        skuIds = __getBundledSkusfromSku(data['sku'])
1049
        for sku in skuIds:
1050
            data['sku'] = sku.get('_id')
1051
            collection = get_mongo_connection().Catalog.ManualDeals
15090 kshitij.so 1052
            cursor = collection.find({'sku':data['sku']})
14553 kshitij.so 1053
            if cursor.count() > 0:
1054
                continue
1055
            else:
14558 kshitij.so 1056
                data.pop('_id',None)
14553 kshitij.so 1057
                collection.insert(data)
1058
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':sku.get('skuBundleId')},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
14481 kshitij.so 1059
        return {1:"Data added successfully"}
14553 kshitij.so 1060
 
14481 kshitij.so 1061
def deleteDocument(data):
15853 kshitij.so 1062
    print "inside detete document"
14481 kshitij.so 1063
    print data
1064
    try:
1065
        collection = get_mongo_connection().Catalog[data['class']]
1066
        class_name = data.pop('class')
1067
        _id = data.pop('oid')
1068
        record = list(collection.find({'_id':ObjectId(_id)}))
1069
        collection.remove({'_id':ObjectId(_id)})
15075 kshitij.so 1070
        if class_name != "Notifications":
1071
            if class_name !="CategoryDiscount":
15853 kshitij.so 1072
                print record[0]
1073
                if record[0].has_key('sku'):
1074
                    field = '_id'
1075
                    val = record[0]['sku']
1076
                else:
1077
                    field = 'skuBundleId'
1078
                    val = record[0]['skuBundleId']
1079
                print "Updating master"
1080
                print field
1081
                print val
1082
                get_mongo_connection().Catalog.MasterData.update({field:val},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
15075 kshitij.so 1083
            else:
1084
                get_mongo_connection().Catalog.MasterData.update({'brand':re.compile(record[0]['brand'], re.IGNORECASE),'category_id':record[0]['category_id']}, \
1085
                                                                 {"$set":{'updatedOn':to_java_date(datetime.now())}},upsert=False,multi=True)
14481 kshitij.so 1086
        return {1:"Document deleted successfully"}
1087
    except Exception as e:
1088
        print e
1089
        return {0:"Document not deleted."}
13970 kshitij.so 1090
 
14482 kshitij.so 1091
def searchMaster(offset, limit, search_term):
1092
    data = []
14531 kshitij.so 1093
    if search_term is not None:
14551 kshitij.so 1094
        terms = search_term.split(' ')
1095
        outer_query = []
1096
        for term in terms:
1097
            outer_query.append({"source_product_name":re.compile(term, re.IGNORECASE)})
14531 kshitij.so 1098
        try:
14551 kshitij.so 1099
            collection = get_mongo_connection().Catalog.MasterData.find({"$and":outer_query,'source_id':{'$in':SOURCE_MAP.keys()}}).skip(offset).limit(limit)
14531 kshitij.so 1100
            for record in collection:
1101
                data.append(record)
1102
        except:
1103
            pass
1104
    else:
1105
        collection = get_mongo_connection().Catalog.MasterData.find({'source_id':{'$in':SOURCE_MAP.keys()}}).skip(offset).limit(limit)
14482 kshitij.so 1106
        for record in collection:
1107
            data.append(record)
1108
    return data
14481 kshitij.so 1109
 
14495 kshitij.so 1110
def getAllFeaturedDeals(offset, limit):
1111
    data = []
1112
    collection = get_mongo_connection().Catalog.FeaturedDeals
17365 kshitij.so 1113
    cursor = collection.find({})
14495 kshitij.so 1114
    for val in cursor:
17365 kshitij.so 1115
        master = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':val['skuBundleId']}))
14495 kshitij.so 1116
        if len(master) > 0:
1117
            val['brand'] = master[0]['brand']
1118
            val['source_product_name'] = master[0]['source_product_name']
1119
            val['skuBundleId'] = master[0]['skuBundleId']
17365 kshitij.so 1120
            val['category'] = 'Mobiles' if val['category_id'] == 3 else 'Tablets'
14495 kshitij.so 1121
        else:
1122
            val['brand'] = ""
1123
            val['source_product_name'] = ""
1124
            val['skuBundleId'] = ""
17365 kshitij.so 1125
            val['category'] = ""
14495 kshitij.so 1126
        data.append(val)
1127
    return data
1128
 
14553 kshitij.so 1129
def addFeaturedDeal(data, multi):
17365 kshitij.so 1130
    collection = get_mongo_connection().Catalog.FeaturedDeals
1131
    cursor = collection.find({'skuBundleId':data['skuBundleId']})
1132
    master = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':data['skuBundleId']})
1133
    if master is None:
1134
        return {0:"BundleId is wrong"}
1135
    data['category_id'] = master['category_id']
1136
    exist = collection.find({'rank':data['rank'],'category_id':data['category_id']})
1137
    if cursor.count() > 0:
1138
        return {0:"SkuBundleId information already present."}
1139
    elif exist.count() >0:
1140
        return {0:"Rank already assigned bundleId %s"%(exist[0]['skuBundleId'])}
14495 kshitij.so 1141
    else:
17365 kshitij.so 1142
        collection.insert(data)
14495 kshitij.so 1143
        return {1:"Data added successfully"}
1144
 
14499 kshitij.so 1145
def searchCollection(class_name, sku, skuBundleId):
14497 kshitij.so 1146
    data = []
1147
    collection = get_mongo_connection().Catalog[class_name]
15076 kshitij.so 1148
    if class_name == "Notifications":
1149
        cursor = collection.find({'skuBundleId':skuBundleId})
1150
        for val in cursor:
1151
            master = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':val['skuBundleId']}))
1152
            if len(master) > 0:
1153
                val['brand'] = master[0]['brand']
1154
                val['model_name'] = master[0]['model_name']
1155
                val['skuBundleId'] = master[0]['skuBundleId']
1156
            else:
1157
                val['brand'] = ""
1158
                val['model_name'] = ""
1159
                val['skuBundleId'] = val['skuBundleId']
1160
            data.append(val)
15095 kshitij.so 1161
        return data
15853 kshitij.so 1162
    master = None
14499 kshitij.so 1163
    if sku is not None:
15853 kshitij.so 1164
        if COLLECTION_MAP.has_key(class_name):
1165
            master = get_mongo_connection().Catalog.MasterData.find_one({'_id':sku})
1166
            cursor = collection.find({'skuBundleId':master['skuBundleId']})
1167
        else:
1168
            cursor = collection.find({'sku':sku})
14499 kshitij.so 1169
        for val in cursor:
15853 kshitij.so 1170
            if master is None:
1171
                master = get_mongo_connection().Catalog.MasterData.find_one({'_id':val['sku']})
1172
            if master is not None:
1173
                val['brand'] = master['brand']
1174
                val['source_product_name'] = master['source_product_name']
1175
                val['skuBundleId'] = master['skuBundleId']
14499 kshitij.so 1176
            else:
1177
                val['brand'] = ""
1178
                val['source_product_name'] = ""
1179
                val['skuBundleId'] = ""
1180
            data.append(val)
1181
        return data
1182
    else:
15853 kshitij.so 1183
        if not COLLECTION_MAP.has_key(class_name):
1184
            skuIds = get_mongo_connection().Catalog.MasterData.find({'skuBundleId':skuBundleId}).distinct('_id')
1185
            for sku in skuIds:
1186
                cursor = collection.find({'sku':sku})
1187
                for val in cursor:
1188
                    master = list(get_mongo_connection().Catalog.MasterData.find({'_id':val['sku']}))
1189
                    if len(master) > 0:
1190
                        val['brand'] = master[0]['brand']
1191
                        val['source_product_name'] = master[0]['source_product_name']
1192
                        val['skuBundleId'] = master[0]['skuBundleId']
1193
                    else:
1194
                        val['brand'] = ""
1195
                        val['source_product_name'] = ""
1196
                        val['skuBundleId'] = ""
1197
                    data.append(val)
1198
            return data
1199
        else:
1200
            cursor = collection.find({'skuBundleId':skuBundleId})
14499 kshitij.so 1201
            for val in cursor:
15853 kshitij.so 1202
                master = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':val['skuBundleId']}))
14499 kshitij.so 1203
                if len(master) > 0:
1204
                    val['brand'] = master[0]['brand']
1205
                    val['source_product_name'] = master[0]['source_product_name']
1206
                else:
1207
                    val['brand'] = ""
1208
                    val['source_product_name'] = ""
1209
                data.append(val)
15853 kshitij.so 1210
            return data
14495 kshitij.so 1211
 
15074 kshitij.so 1212
def __getBrandIdForBrand(brandName, category_id):
1213
    brandInfo = Brands.query.filter(Brands.category_id==category_id).filter(Brands.name == brandName).all()
1214
    if brandInfo is None or len(brandInfo)!=1:
1215
        raise
1216
    else:
1217
        return brandInfo[0].id
1218
 
14588 kshitij.so 1219
def addNewItem(data):
14594 kshitij.so 1220
    try:
1221
        data['updatedOn'] = to_java_date(datetime.now())
1222
        data['addedOn'] = to_java_date(datetime.now())
1223
        data['priceUpdatedOn'] = to_java_date(datetime.now())
1224
        max_id = list(get_mongo_connection().Catalog.MasterData.find().sort([('_id',pymongo.DESCENDING)]).limit(1))
1225
        max_bundle = list(get_mongo_connection().Catalog.MasterData.find().sort([('skuBundleId',pymongo.DESCENDING)]).limit(1))
1226
        data['_id'] = max_id[0]['_id'] + 1
1227
        data['skuBundleId'] = max_bundle[0]['skuBundleId'] + 1
1228
        data['identifier'] = str(data['identifier'])
1229
        data['secondaryIdentifier'] = str(data['secondaryIdentifier'])
17115 manish.sha 1230
        data['model_name'] = str(data['model_name'])
15074 kshitij.so 1231
        data['brand_id'] = __getBrandIdForBrand(data['brand'], data['category_id'])
14594 kshitij.so 1232
        get_mongo_connection().Catalog.MasterData.insert(data)
1233
        return {1:'Data added successfully'}
1234
    except Exception as e:
1235
        print e
1236
        return {0:'Unable to add data.'}
15130 kshitij.so 1237
    finally:
1238
        session.close()
14588 kshitij.so 1239
 
1240
def addItemToExistingBundle(data):
1241
    try:
1242
        data['updatedOn'] = to_java_date(datetime.now())
1243
        data['addedOn'] = to_java_date(datetime.now())
1244
        data['priceUpdatedOn'] = to_java_date(datetime.now())
14593 kshitij.so 1245
        max_id = list(get_mongo_connection().Catalog.MasterData.find().sort([('_id',pymongo.DESCENDING)]).limit(1))
14590 kshitij.so 1246
        data['_id'] = max_id[0]['_id'] + 1
14594 kshitij.so 1247
        data['identifier'] = str(data['identifier'])
1248
        data['secondaryIdentifier'] = str(data['secondaryIdentifier'])
17115 manish.sha 1249
        data['model_name'] = str(data['model_name'])
15074 kshitij.so 1250
        data['brand_id'] = __getBrandIdForBrand(data['brand'], data['category_id'])
14588 kshitij.so 1251
        get_mongo_connection().Catalog.MasterData.insert(data)
1252
        return {1:'Data added successfully.'}
14594 kshitij.so 1253
    except Exception as e:
1254
        print e
14588 kshitij.so 1255
        return {0:'Unable to add data.'}
15130 kshitij.so 1256
    finally:
1257
        session.close()
14588 kshitij.so 1258
 
1259
def updateMaster(data, multi):
15130 kshitij.so 1260
    try:
1261
        print data
1262
        if multi != 1:
1263
            _id = data.pop('_id')
1264
            skuBundleId = data.pop('skuBundleId')
1265
            data['updatedOn'] = to_java_date(datetime.now())
1266
            data['identifier'] = str(data['identifier'])
1267
            data['secondaryIdentifier'] = str(data['secondaryIdentifier'])
17115 manish.sha 1268
            data['model_name'] = str(data['model_name'])
15130 kshitij.so 1269
            data['brand_id'] = __getBrandIdForBrand(data['brand'], data['category_id'])
1270
            get_mongo_connection().Catalog.MasterData.update({'_id':_id},{"$set":data},upsert=False)
1271
            return {1:'Data updated successfully.'}
1272
        else:
1273
            _id = data.pop('_id')
1274
            skuBundleId = data.pop('skuBundleId')
1275
            data['updatedOn'] = to_java_date(datetime.now())
1276
            data['identifier'] = str(data['identifier'])
1277
            data['secondaryIdentifier'] = str(data['secondaryIdentifier'])
1278
            data['brand_id'] = __getBrandIdForBrand(data['brand'], data['category_id'])
17115 manish.sha 1279
            data['model_name'] = str(data['model_name'])
15130 kshitij.so 1280
            get_mongo_connection().Catalog.MasterData.update({'_id':_id},{"$set":data},upsert=False)
1281
            similarItems = get_mongo_connection().Catalog.MasterData.find({'skuBundleId':skuBundleId})
1282
            for item in similarItems:
1283
                if item['_id'] == _id:
1284
                    continue
1285
                item['updatedOn'] = to_java_date(datetime.now())
1286
                item['thumbnail'] = data['thumbnail']
1287
                item['category'] = data['category']
1288
                item['category_id'] = data['category_id']
1289
                item['tagline'] = data['tagline']
1290
                item['is_shortage'] = data['is_shortage']
1291
                item['mrp'] = data['mrp']
1292
                item['status'] = data['status']
1293
                item['maxPrice'] = data['maxPrice']
1294
                item['brand_id'] = data['brand_id']
1295
                similar_item_id = item.pop('_id')
1296
                get_mongo_connection().Catalog.MasterData.update({'_id':similar_item_id},{"$set":item},upsert=False)
1297
            return {1:'Data updated successfully.'}
1298
    finally:
1299
        session.close()
14619 kshitij.so 1300
 
1301
def getLiveCricScore():
1302
    return mc.get('liveScore')
14852 kshitij.so 1303
 
1304
def addBundleToNotification(data):
1305
    try:
15069 kshitij.so 1306
        collection = get_mongo_connection().Catalog.Notifications
14852 kshitij.so 1307
        cursor = collection.find({'skuBundleId':data['skuBundleId']})
1308
        if cursor.count() > 0:
1309
            return {0:"SkuBundleId information already present."}
1310
        else:
1311
            collection.insert(data)
1312
            return {1:'Data updated successfully.'}
1313
    except:
1314
        return {0:'Unable to add data.'}
1315
 
1316
def getAllNotifications(offset, limit):
1317
    data = []
15069 kshitij.so 1318
    collection = get_mongo_connection().Catalog.Notifications
16450 kshitij.so 1319
    cursor = collection.find().sort([('endDate',pymongo.DESCENDING)]).skip(offset).limit(limit)
14852 kshitij.so 1320
    for val in cursor:
15072 kshitij.so 1321
        master = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':val['skuBundleId']}))
14852 kshitij.so 1322
        if len(master) > 0:
1323
            val['brand'] = master[0]['brand']
15071 kshitij.so 1324
            val['model_name'] = master[0]['model_name']
14852 kshitij.so 1325
            val['skuBundleId'] = master[0]['skuBundleId']
1326
        else:
1327
            val['brand'] = ""
15071 kshitij.so 1328
            val['model_name'] = ""
1329
            val['skuBundleId'] = val['skuBundleId']
14852 kshitij.so 1330
        data.append(val)
1331
    return data
14997 kshitij.so 1332
 
1333
def getBrandsForFilter(category_id):
1334
    if mc.get("brandFilter") is None:
15095 kshitij.so 1335
        print "Populating brand data for category_id %d" %(category_id)
14997 kshitij.so 1336
        tabData, mobData = [], []
1337
        mobileDeals = get_mongo_connection().Catalog.Deals.aggregate([
16170 kshitij.so 1338
                                                                      {"$match":{"category_id":3,"showDeal":1,"totalPoints":{"$gt":-100}}
14997 kshitij.so 1339
                                                                    },
1340
                                                                 {"$group" : 
1341
                                                                  {'_id':{'brand_id':'$brand_id','brand':'$brand'},'count':{'$sum':1}}
1342
                                                                  }
1343
                                                                ])
14588 kshitij.so 1344
 
14997 kshitij.so 1345
        tabletDeals = get_mongo_connection().Catalog.Deals.aggregate([
16170 kshitij.so 1346
                                                                      {"$match":{"category_id":5,"showDeal":1,"totalPoints":{"$gt":-100}}
14997 kshitij.so 1347
                                                                    },
1348
                                                                 {"$group" : 
1349
                                                                  {'_id':{'brand_id':'$brand_id','brand':'$brand'},'count':{'$sum':1}}
1350
                                                                  }
1351
                                                                ])
1352
 
1353
        allDeals = get_mongo_connection().Catalog.Deals.aggregate([
16170 kshitij.so 1354
                                                                   {"$match":{"showDeal":1,"totalPoints":{"$gt":-100}}
14997 kshitij.so 1355
                                                                    },
1356
                                                                 {"$group" : 
1357
                                                                  {'_id':{'brand_id':'$brand_id','brand':'$brand'},'count':{'$sum':1}}
1358
                                                                  }
1359
                                                                ])
1360
        #print mobileDeals
1361
        #print "==========Mobile data ends=========="
1362
 
1363
        #print tabletDeals
1364
        #print "==========Tablet data ends=========="
1365
 
1366
        #print allDeals
1367
        #print "==========All deal data ends========="
1368
 
1369
        for mobileDeal in mobileDeals['result']:
1370
            if mobileDeal.get('_id').get('brand_id') != 0:
1371
                tempMap = {}
1372
                tempMap['brand'] = mobileDeal.get('_id').get('brand')
1373
                tempMap['brand_id'] = mobileDeal.get('_id').get('brand_id')
1374
                tempMap['count'] = mobileDeal.get('count')
1375
                mobData.append(tempMap)
1376
 
1377
        for tabletDeal in tabletDeals['result']:
1378
            if tabletDeal.get('_id').get('brand_id') != 0:
1379
                tempMap = {}
1380
                tempMap['brand'] = tabletDeal.get('_id').get('brand')
1381
                tempMap['brand_id'] = tabletDeal.get('_id').get('brand_id')
1382
                tempMap['count'] = tabletDeal.get('count')
1383
                tabData.append(tempMap)
1384
 
1385
 
1386
        brandMap = {}
1387
        for allDeal in allDeals['result']:
1388
            if allDeal.get('_id').get('brand_id') != 0:
1389
                if brandMap.has_key(allDeal.get('_id').get('brand')):
15002 kshitij.so 1390
                    brand_ids = brandMap.get(allDeal.get('_id').get('brand')).get('brand_ids')
14997 kshitij.so 1391
                    brand_ids.append(allDeal.get('_id').get('brand_id'))
15003 kshitij.so 1392
                    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 1393
                else:
1394
                    temp = []
1395
                    temp.append(allDeal.get('_id').get('brand_id'))
15002 kshitij.so 1396
                    brandMap[allDeal.get('_id').get('brand')] = {'brand_ids':temp,'count':allDeal.get('count')}
14997 kshitij.so 1397
 
1398
        mc.set("brandFilter",{0:brandMap, 3:mobData, 5:tabData}, 600)  
1399
 
15062 kshitij.so 1400
    return sorted(mc.get("brandFilter").get(category_id), key = lambda x: (-x['count'], x['brand']))
15375 kshitij.so 1401
 
15459 kshitij.so 1402
def getStaticDeals(offset, limit, category_id, direction):
15375 kshitij.so 1403
    user_specific_deals = mc.get("staticDeals")
1404
    if user_specific_deals is None:
1405
        __populateStaticDeals()
1406
        user_specific_deals = mc.get("staticDeals")
15459 kshitij.so 1407
    rev = False
1408
    if direction is None or direction == -1:
1409
        rev=True
1410
    return sorted((user_specific_deals.get(category_id))[offset:offset+limit],reverse=rev)
15375 kshitij.so 1411
 
1412
def __populateStaticDeals():
1413
    print "Populating memcache for static deals"
1414
    outer_query = []
1415
    outer_query.append({"showDeal":1})
1416
    query = {}
16170 kshitij.so 1417
    query['$gt'] = -100
15375 kshitij.so 1418
    outer_query.append({'totalPoints':query})
1419
    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)]))
1420
    mobile_deals = []
1421
    tablet_deals = []
1422
    for deal in all_deals:
1423
        item = get_mongo_connection().Catalog.MasterData.find({'_id':deal['_id']})
1424
        if deal['category_id'] ==3:
1425
            mobile_deals.append(getItemObjForStaticDeals(item[0]))
1426
        elif deal['category_id'] ==5:
1427
            tablet_deals.append(getItemObjForStaticDeals(item[0]))
1428
        else:
1429
            continue
1430
 
1431
    random.shuffle(mobile_deals,random.random)
1432
    random.shuffle(tablet_deals,random.random)
1433
 
1434
    mem_cache_val = {3:mobile_deals, 5:tablet_deals}
1435
    mc.set("staticDeals", mem_cache_val, 3600)
1436
 
1437
def getItemObjForStaticDeals(item):
15379 kshitij.so 1438
    return {'marketPlaceUrl':item.get('marketPlaceUrl'),'available_price':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 1439
 
1440
def getItemByMerchantIdentifier(identifier, source_id):
1441
    skuData = None
17035 kshitij.so 1442
    if source_id in (1,2,4,5,6,7):
16300 manas 1443
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'identifier':identifier.strip(), 'source_id':source_id})
1444
    elif source_id == 3:
1445
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'secondaryIdentifier':identifier.strip(), 'source_id':source_id})
1446
    if skuData is None:
1447
        return {}
1448
    else:
1449
        return skuData
15375 kshitij.so 1450
 
16364 kshitij.so 1451
def getDealsForNotification(skuBundleIds):
1452
    bundles= [int(skuBundleId) for skuBundleId in skuBundleIds.split(',')]
1453
    print bundles
16406 kshitij.so 1454
    dealsList = []
16364 kshitij.so 1455
    dealsListMap = []
16406 kshitij.so 1456
    for bundleId in bundles:
1457
        outer_query = []
1458
        outer_query.append({ "$or": [ { "showDeal": 1} , { "prepaidDeal": 1 } ] })
1459
        outer_query.append({'skuBundleId':bundleId})
1460
        deals = get_mongo_connection().Catalog.Deals.find({"$and":outer_query})
1461
        for deal in deals:
1462
            dealsList.append(deal)
16364 kshitij.so 1463
    sortedMap = {}
1464
    rankMap = {}
1465
    rank = 0
16406 kshitij.so 1466
    for sorted_deal in dealsList:
16364 kshitij.so 1467
        if sortedMap.get(sorted_deal['skuBundleId']) is None:
1468
            sortedMap[sorted_deal['skuBundleId']] = {rank:[sorted_deal]}
1469
            rankMap[rank] = (sortedMap[sorted_deal['skuBundleId']].values())[0]
1470
            rank = rank +1
1471
        else:
1472
            for temp_list in sortedMap.get(sorted_deal['skuBundleId']).itervalues():
1473
                temp_list.append(sorted_deal)
1474
            rankMap[(sortedMap.get(sorted_deal['skuBundleId']).keys())[0]] = temp_list
1475
 
16367 kshitij.so 1476
    for dealList in [rankMap.get(k, []) for k in range(0, len(bundles))]:
16364 kshitij.so 1477
        temp = []
1478
        for d in dealList:
1479
            item = list(get_mongo_connection().Catalog.MasterData.find({'_id':d['_id']}))
1480
            if len(item) ==0:
1481
                continue
1482
            if d['dealType'] == 1 and d['source_id'] ==1:
1483
                item[0]['marketPlaceUrl'] = "http://www.amazon.in/dp/%s"%(item[0]['identifier'].strip())
1484
            elif d['source_id'] ==3:
1485
                item[0]['marketPlaceUrl'] = item[0]['marketPlaceUrl']+'?supc='+item[0].get('identifier')
1486
            else:
1487
                pass 
1488
            try:
1489
                cashBack = getCashBack(item[0]['_id'], item[0]['source_id'], item[0]['category_id'])
1490
                if not cashBack or cashBack.get('cash_back_status')!=1:
1491
                    item[0]['cash_back_type'] = 0
1492
                    item[0]['cash_back'] = 0
1493
                else:
1494
                    item[0]['cash_back_type'] = int(cashBack['cash_back_type'])
1495
                    item[0]['cash_back'] = cashBack['cash_back']
1496
            except:
1497
                print "Error in adding cashback to deals"
1498
                item[0]['cash_back_type'] = 0
1499
                item[0]['cash_back'] = 0
1500
            try:
1501
                item[0]['dp'] = d['dp']
1502
                item[0]['showDp'] = d['showDp']
1503
            except:
1504
                item[0]['dp'] = 0.0
1505
                item[0]['showDp'] = 0
1506
            temp.append(item[0])
1507
        if len(temp) > 1:
1508
            temp = sorted(temp, key = lambda x: (x['available_price']),reverse=False)
1509
        dealsListMap.append(temp)
1510
    return dealsListMap
1511
 
16373 manas 1512
def getSkuBrandData(sku):
1513
    if sku is None:
1514
        return {}
1515
    else:
1516
        orders = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':sku})
1517
        if orders is None:
1518
            return {}
1519
        return orders
16488 kshitij.so 1520
 
1521
def addDealPoints(data):
1522
    collection = get_mongo_connection().Catalog.DealPoints
1523
    cursor = collection.find({'skuBundleId':data['skuBundleId']})
1524
    if cursor.count() > 0:
1525
        return {0:"Sku information already present."}
1526
    else:
1527
        collection.insert(data)
1528
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
1529
        return {1:"Data added successfully"}
1530
 
1531
def getAllBundlesWithDealPoints(offset, limit):
1532
    data = []
1533
    collection = get_mongo_connection().Catalog.DealPoints
1534
    cursor = collection.find().sort([('endDate',pymongo.DESCENDING)]).skip(offset).limit(limit)
1535
    for val in cursor:
1536
        master = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':val.get('skuBundleId')})
1537
        if master is not None:
1538
            val['brand'] = master['brand']
1539
            val['source_product_name'] = master['product_name']
1540
        else:
1541
            val['brand'] = ""
1542
            val['source_product_name'] = ""
1543
        data.append(val)
1544
    return data
16546 kshitij.so 1545
 
1546
def generateRedirectUrl(retailer_id, app_id):
1547
    try:
16663 manish.sha 1548
        if retailer_id <= 0:
1549
            return {'url':"","message":"Retailer Id not valid"}
16546 kshitij.so 1550
        d_app_offer = app_offers.get_by(id=app_id)
16605 manish.sha 1551
    except:
1552
        traceback.print_exc()
16546 kshitij.so 1553
    finally:
1554
        session.close()
1555
    if d_app_offer is None:
1556
        return {'url':"","message":"App id doesn't exist"}
16364 kshitij.so 1557
 
16915 manish.sha 1558
    final_user_payout = 0
1559
    if d_app_offer.override_payout:
1560
        final_user_payout = d_app_offer.overriden_payout
1561
    else:
1562
        final_user_payout = d_app_offer.user_payout
16546 kshitij.so 1563
 
16915 manish.sha 1564
    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)
1565
 
16546 kshitij.so 1566
    get_mongo_connection().AppOrder.AppTransaction.insert(appTransactions.__dict__)
1567
    embedd = str((appTransactions.__dict__).get('_id'))
16548 kshitij.so 1568
    try:
1569
        index = d_app_offer.link.index(".freeb.co.in")
1570
    except:
16605 manish.sha 1571
        traceback.print_exc()
16548 kshitij.so 1572
        return {'url':"","message":"Substring not found"}
1573
    redirect_url = d_app_offer.link[0:index]+"."+embedd+d_app_offer.link[index:]
16546 kshitij.so 1574
    get_mongo_connection().AppOrder.AppTransaction.update({'_id':ObjectId(embedd)},{"$set":{'redirect_url':redirect_url}})
16548 kshitij.so 1575
    return {'url':redirect_url,"message":"Success"}
16556 kshitij.so 1576
 
1577
def addPayout(payout, transaction_id):
1578
    try:
16764 manish.sha 1579
        print 'Got Response for Transaction Id:- '+ str(transaction_id)+ ' and Actual Payout:- '+str(payout)
16556 kshitij.so 1580
        transaction = list(get_mongo_connection().AppOrder.AppTransaction.find({'_id':ObjectId(transaction_id)}))
1581
        if len(transaction) > 0:
1582
            if (transaction[0])['payout_status'] ==1:
16753 manish.sha 1583
                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 1584
 
1585
                approvedAppTransaction = approved_app_transactions.get_by(transaction_id=transaction_id)
1586
                if approvedAppTransaction is None:
1587
                    approvedAppTransaction = approved_app_transactions()
16919 manish.sha 1588
                    approvedAppTransaction.app_id = transaction[0].get('app_id')
16782 manish.sha 1589
                    approvedAppTransaction.cash_back_description = CB_APPROVED
16919 manish.sha 1590
                    approvedAppTransaction.retailer_id = transaction[0].get('retailer_id')
16782 manish.sha 1591
                    approvedAppTransaction.transaction_id = transaction_id
16919 manish.sha 1592
                    approvedAppTransaction.transaction_time = to_py_date(long(transaction[0].get('transaction_time')))
1593
                    approvedAppTransaction.redirect_url = transaction[0].get('redirect_url')
16782 manish.sha 1594
                    approvedAppTransaction.payout_status = 2
1595
                    approvedAppTransaction.payout_description = CB_APPROVED
1596
                    approvedAppTransaction.cashback_status = 2 
1597
                    approvedAppTransaction.payout_amount = long(payout)
1598
                    approvedAppTransaction.payout_time = datetime.now()
16919 manish.sha 1599
                    approvedAppTransaction.offer_price = long(transaction[0].get('offer_price')) 
1600
                    approvedAppTransaction.overridenCashBack = transaction[0].get('overridenCashBack')
1601
                    approvedAppTransaction.isCashBackOverriden = transaction[0].get('isCashBackOverriden')
1602
                    approvedAppTransaction.user_payout = transaction[0].get('user_payout')
16782 manish.sha 1603
                    approvedAppTransaction.cashBackConsidered = False
16915 manish.sha 1604
                    if transaction[0].get('final_user_payout') is not None:
1605
                        approvedAppTransaction.final_user_payout = transaction[0].get('final_user_payout')
1606
                    else:
16919 manish.sha 1607
                        if transaction[0].get('isCashBackOverriden'):
1608
                            approvedAppTransaction.final_user_payout = transaction[0].get('overridenCashBack')
16915 manish.sha 1609
                        else:
16919 manish.sha 1610
                            approvedAppTransaction.final_user_payout = transaction[0].get('user_payout')
16782 manish.sha 1611
                    session.commit()
1612
 
1613
                    updateResult = _updateApprovedCashbackToUser(approvedAppTransaction.id)
16631 manish.sha 1614
                else:
16783 manish.sha 1615
                    approvedAppTransaction.payout_amount = long(payout)
1616
                    approvedAppTransaction.payout_time = datetime.now()
1617
                    if approvedAppTransaction.cashBackConsidered == False:
1618
                        updateResult = _updateApprovedCashbackToUser(approvedAppTransaction.id)
1619
                    session.commit()
16782 manish.sha 1620
 
1621
                    '''
1622
                    try:
1623
                        if int(transaction[0]['offer_price']) != payout or int(transaction[0]['user_payout']) < payout:
1624
                            _sendAlertForAppPayouts(int(transaction[0]['app_id']), int(transaction[0]['offer_price']), int(transaction[0]['user_payout']), payout)
1625
                    except:
1626
                        print traceback.print_exc()
1627
                    '''
16556 kshitij.so 1628
                return {'status':'ok','message':'Payout updated'}
1629
            elif (transaction[0])['payout_status'] ==2:
1630
                return {'status':'ok','message':'Payout already processed'}
1631
            else:
1632
                return {'status':'fail','message':'Something is wrong'}
1633
        else:
1634
            return {'status':'fail','message':'transaction_id not found'}
1635
    except:
16657 manish.sha 1636
        print traceback.print_exc()
16631 manish.sha 1637
        try:
16753 manish.sha 1638
            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 1639
        except:
1640
            print 'Data Inconsistency in Cashback Process'
16636 manish.sha 1641
            print traceback.print_exc()
16559 kshitij.so 1642
        return  {'status':'fail','message':'Something is wrong'}
16885 kshitij.so 1643
    finally:
1644
        session.close()
16556 kshitij.so 1645
 
16631 manish.sha 1646
def _updateApprovedCashbackToUser(approvedAppTransactionId):
1647
    approvedAppTransaction = approved_app_transactions.get_by(id=approvedAppTransactionId)
16915 manish.sha 1648
    if approvedAppTransaction.retailer_id < 0:
1649
        return False
1650
 
16631 manish.sha 1651
    currentMonth = datetime.today().month
1652
    currentDay = datetime.today().day
1653
    currentYear = datetime.today().year
1654
    fortNight = (currentMonth - 1)*2 + (currentDay/15)
1655
    if currentDay == 30 or currentDay ==31:
1656
        fortNight = fortNight-1
1657
    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()
1658
    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()
1659
    try:
1660
        if userAppCashbackObj is None:
1661
            userAppCashbackObj = user_app_cashbacks()
1662
            userAppCashbackObj.user_id = approvedAppTransaction.retailer_id
1663
            userAppCashbackObj.status = 'Approved'
16915 manish.sha 1664
            userAppCashbackObj.amount = approvedAppTransaction.final_user_payout
16631 manish.sha 1665
            userAppCashbackObj.fortnightOfYear = fortNight
1666
            userAppCashbackObj.yearVal = currentYear
1667
        else:
16915 manish.sha 1668
            userAppCashbackObj.amount = userAppCashbackObj.amount + approvedAppTransaction.final_user_payout
16631 manish.sha 1669
 
1670
        if userAppInstallObj is None:
1671
            app_offer = app_offers.get_by(id=approvedAppTransaction.app_id)
1672
            userAppInstallObj = user_app_installs()
1673
            userAppInstallObj.user_id = approvedAppTransaction.retailer_id
1674
            userAppInstallObj.fortnightOfYear = fortNight
1675
            userAppInstallObj.transaction_date = datetime(currentYear, currentMonth, currentDay, 0, 0, 0, 0).date()
1676
            userAppInstallObj.app_id = approvedAppTransaction.app_id
1677
            userAppInstallObj.app_name = app_offer.app_name
1678
            userAppInstallObj.installCount = 1
16915 manish.sha 1679
            userAppInstallObj.payoutAmount = approvedAppTransaction.final_user_payout
16631 manish.sha 1680
        else:
1681
            userAppInstallObj.installCount = userAppInstallObj.installCount + 1
16915 manish.sha 1682
            userAppInstallObj.payoutAmount = userAppInstallObj.payoutAmount +approvedAppTransaction.final_user_payout
16631 manish.sha 1683
 
1684
        approvedAppTransaction.cashBackConsidered = True
1685
        session.commit()
1686
        return True
1687
    except:
1688
        session.rollback()
16636 manish.sha 1689
        print traceback.print_exc()
16631 manish.sha 1690
        return False
16693 manish.sha 1691
 
1692
def _sendAlertForAppPayouts(app_id, offerPrice, userPayout, payout):
1693
    m = Email('localhost')
1694
    mFrom = "dtr@shop2020.in"
1695
    m.setFrom(mFrom)
1696
    mTo = ['rajneesh.arora@saholic.com','kshitij.sood@saholic.com','chaitnaya.vats@saholic.com','manoj.kumar@saholic.com','manish.sharma@shop2020.in']
1697
    for receipient in mTo:
1698
        m.addRecipient(receipient)
1699
    appOffer = app_offers.get_by(id=app_id)
1700
    if offerPrice != payout:
1701
        m.setSubject("Mismatch in Offer Price and Actual Pay Out for App Id:- "+str(appOffer.id)+" App Name:- "+str(appOffer.app_name))
1702
        message1 = "Offer Price:- "+ str(appOffer.offer_price) + "\n" + "Actual Pay Out:- "+ str(payout)
1703
        m.setTextBody(message1)
1704
    if userPayout > payout:
1705
        m.setSubject("User Pay Out greater than actual PayOut for App Id:- "+str(appOffer.id)+" App Name:- "+str(appOffer.app_name))
1706
        message2 = "User Pay Out Price:- "+ str(appOffer.user_payout) + "\n" + "Actual Pay Out:- "+ str(payout)
1707
        m.setTextBody(message2)
1708
    m.send()
16631 manish.sha 1709
 
16789 amit.gupta 1710
def rejectCashback(orderId, subOrderId):
16833 amit.gupta 1711
    cashBack = get_mongo_connection().Dtr.merchantOrder.update({"orderId":orderId, "subOrders.merchantSubOrderId":subOrderId}, 
16789 amit.gupta 1712
                                                               {"$set":{"subOrders.$.cashBackStatus":CB_REJECTED}})
16837 amit.gupta 1713
    print cashBack
16836 amit.gupta 1714
    return cashBack.get("nModified")
16894 manish.sha 1715
 
1716
def getAppOffers(retailer_id):
1717
    if not bool(mc.get("cached_app_offers_"+str(retailer_id))):
1718
        populateAppOffers(retailer_id)
1719
    return mc.get("cached_app_offers_"+str(retailer_id)) 
1720
 
1721
def populateAppOffers(retailerId):
1722
    retailerId = int(retailerId)
1723
    #offset = req.get_param_as_int("offset")
1724
    #limit = req.get_param_as_int("limit")
16941 manish.sha 1725
    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()
1726
    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 1727
    #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()
1728
 
1729
    appOffersMap = {}
1730
    priorityList = []
1731
    priorityMap = {}
1732
    for offer in priortizeders:
16941 manish.sha 1733
        if priorityMap.has_key(long(offer[1])):
1734
            offersVal = priorityMap.get(long(offer[1]))
1735
            offersVal.append(offer)
1736
            priorityMap[long(offer[1])]=offersVal
1737
        else:
1738
            offersVal = []
1739
            offersVal.append(offer)
1740
            priorityMap[long(offer[1])]=offersVal
1741
 
16894 manish.sha 1742
    priorityList = sorted(priorityMap)
1743
 
1744
    maxCount = len(nonPriortizedOffers) + len(priortizeders)
1745
 
16909 manish.sha 1746
    if priorityList is not None and len(priorityList)>0:
1747
        if maxCount < max(priorityList):
1748
            maxCount = max(priorityList)
16894 manish.sha 1749
 
1750
    count = 1
1751
    blockedPlaces = []
1752
    availablePlaces = []
1753
    while count <= maxCount:
1754
        if count in priorityList:
1755
            blockedPlaces.append(count)
1756
        else:
1757
            availablePlaces.append(count)
1758
        count = count +1
16941 manish.sha 1759
    print 'Blocked Places', blockedPlaces
16894 manish.sha 1760
    for val in blockedPlaces:
16941 manish.sha 1761
        key = val
1762
        for offerObj in priorityMap.get(val):
1763
            while appOffersMap.has_key(key):
1764
                key = key+1
1765
            appOffersMap[key] = long(offerObj[0])
1766
            if key in availablePlaces:
1767
                availablePlaces.remove(key)
1768
 
1769
    print 'Available Places', availablePlaces
1770
 
16894 manish.sha 1771
    i=0
1772
    for val in availablePlaces:
16899 manish.sha 1773
        if i<len(nonPriortizedOffers):
16902 manish.sha 1774
            appOffersMap[val]= long(nonPriortizedOffers[i][0])
16899 manish.sha 1775
        else:
1776
            break
1777
        i=i+1
16901 manish.sha 1778
    print 'AppOffersMap', appOffersMap
16894 manish.sha 1779
 
1780
    finalAppOffersMap = {}
1781
    if len(appOffersMap) > 0:
1782
        for key in sorted(appOffersMap):               
1783
            finalAppOffersMap[key] = appOffersMap[key]
1784
 
1785
        mc.set("cached_app_offers_"+str(retailerId), finalAppOffersMap, 120)
1786
    else:
1787
        print 'No Offers'
1788
        mc.set("cached_app_offers_"+str(retailerId), {}, 10)              
17280 manish.sha 1789
 
1790
def sendNotification(userIds, campaignName, title, message,notificationtype, url, expiresat='2999-01-01'):
1791
    campaignId = addNotificationCampaign(campaignName, title, message, notificationtype, url, None)
1792
    payload = {}
1793
    payload["user_id"]= userIds[0]
1794
    payload["type"]="pending"
1795
    payload["notification_campaign_id"]= campaignId
1796
    payload["status"]=0
16546 kshitij.so 1797
 
17280 manish.sha 1798
    payloadList = []
1799
    payloadList.append(payload)
17281 manish.sha 1800
    jsonObj = json.dumps([dict(pn) for pn in payloadList])
1801
    print jsonObj
1802
    pushpostrequest = urllib2.Request("http://45.33.50.227:3001/addPushNotification")
1803
    pushpostrequest.add_header('Content-Type', 'application/json')
1804
    response = urllib2.urlopen(pushpostrequest, jsonObj).read()
17280 manish.sha 1805
    print response
1806
 
1807
def addNotificationCampaign(name, title, message, type, url, sql):
1808
    notificationCampaign = notification_campaigns()
1809
    notificationCampaign.name = name
1810
    notificationCampaign.title = title
1811
    notificationCampaign.type = type
1812
    notificationCampaign.message = message
1813
    notificationCampaign.url = url
1814
    notificationCampaign.sql = sql
1815
    notificationCampaign.expiresat = datetime(2999, 1, 1)
1816
    notificationCampaign.status = 'active'
1817
    notificationCampaign.created = datetime.now()
1818
 
1819
    session.commit()
1820
    campaignId = notificationCampaign.id
1821
 
1822
    session.close()
1823
    return campaignId
17302 kshitij.so 1824
 
1825
def getDummyDeals(categoryId, offset, limit):
1826
    outer_query = []
1827
    outer_query.append({"showDeal":1})
1828
    outer_query.append({"category_id":categoryId})
1829
    query = {}
1830
    query['$gt'] = -100
1831
    outer_query.append({'totalPoints':query})
1832
    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))
1833
    returnObj = []
1834
    for deal in all_deals:
17306 kshitij.so 1835
        item = list(get_mongo_connection().Catalog.MasterData.find({'_id':deal['_id']}))
17305 kshitij.so 1836
        returnObj.append(getItemObjForStaticDeals(item[0]))
17302 kshitij.so 1837
    return returnObj
17365 kshitij.so 1838
 
1839
def searchDummyDeals(search_term , limit):
1840
    data = []
1841
    uniqueMap = {}
1842
    if search_term is not None:
1843
        terms = search_term.split(' ')
1844
        outer_query = []
1845
        for term in terms:
1846
            outer_query.append({"source_product_name":re.compile(term, re.IGNORECASE)})
1847
        try:
1848
            collection = get_mongo_connection().Catalog.MasterData.find({"$and":outer_query,'source_id':{'$in':SOURCE_MAP.keys()}})
1849
            for record in collection:
1850
                data.append(record)
1851
        except:
1852
            pass
1853
    else:
1854
        collection = get_mongo_connection().Catalog.MasterData.find({'source_id':{'$in':SOURCE_MAP.keys()}})
1855
        for record in collection:
1856
            data.append(record)
1857
    for x in data:
1858
        if not uniqueMap.has_key(x['skuBundleId']):
1859
            uniqueMap[x['skuBundleId']] = {'source_product_name':x['source_product_name'],'skuBundleId':x['skuBundleId']}
1860
    return uniqueMap.values()[0:limit]
1861
 
1862
 
1863
 
1864
 
1865
 
17280 manish.sha 1866
 
13572 kshitij.so 1867
def main():
17035 kshitij.so 1868
    #generateRedirectUrl(101,1)
17365 kshitij.so 1869
    print datetime.now()
1870
    x=  getNewDeals(47, 3, 0, 500, None, None, None)
1871
    print datetime.now()
16781 manish.sha 1872
    #print addPayout("10", "55db82c0bcabd7fc59e0a71")
17365 kshitij.so 1873
    #data = {'skuBundleId':32111,'rank':200,'thresholdPrice':10000,'startDate':to_java_date(datetime.now()),'endDate':to_java_date(datetime.now)}
1874
    #print addFeaturedDeal(data, None)
1875
    #getAllFeaturedDeals(0, 50)
13811 kshitij.so 1876
 
13921 kshitij.so 1877
 
15375 kshitij.so 1878
 
13572 kshitij.so 1879
if __name__=='__main__':
13932 amit.gupta 1880
    main()