Subversion Repositories SmartDukaan

Rev

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