Subversion Repositories SmartDukaan

Rev

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

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