Subversion Repositories SmartDukaan

Rev

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