Subversion Repositories SmartDukaan

Rev

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