Subversion Repositories SmartDukaan

Rev

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