Subversion Repositories SmartDukaan

Rev

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

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