Subversion Repositories SmartDukaan

Rev

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