Subversion Repositories SmartDukaan

Rev

Rev 17616 | Rev 17619 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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