Subversion Repositories SmartDukaan

Rev

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