Subversion Repositories SmartDukaan

Rev

Rev 16553 | Rev 16559 | 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
16546 kshitij.so 4
from dtr.dao import FeaturedDeals, AppTransactions
14037 kshitij.so 5
from dtr.storage import DataService
6
from dtr.storage.DataService import price_preferences, brand_preferences, \
16546 kshitij.so 7
    user_actions, Brands, app_offers
16304 amit.gupta 8
from dtr.storage.MemCache import MemCache
16546 kshitij.so 9
from dtr.utils.utils import to_java_date, CB_PENDING, CB_APPROVED, CB_INIT
14305 amit.gupta 10
from elixir import *
11
from operator import itemgetter
12
import pymongo
16398 amit.gupta 13
import random
14322 kshitij.so 14
import re
14791 kshitij.so 15
import traceback
13572 kshitij.so 16
 
17
con = None
18
 
14037 kshitij.so 19
DataService.initialize(db_hostname="localhost")
16304 amit.gupta 20
mc = MemCache("127.0.0.1")
14037 kshitij.so 21
 
16406 kshitij.so 22
SOURCE_MAP = {1:'AMAZON',2:'FLIPKART',3:'SNAPDEAL',4:'SAHOLIC',5:"SHOPCLUES.COM",6:"PAYTM.COM"}
14482 kshitij.so 23
 
15853 kshitij.so 24
COLLECTION_MAP = {
25
                  'ExceptionalNlc':'skuBundleId',
26
                  'SkuDealerPrices':'skuBundleId',
27
                  'SkuDiscountInfo':'skuBundleId',
28
                  'SkuSchemeDetails':'skuBundleId',
16488 kshitij.so 29
                  'DealPoints':'skuBundleId'
15853 kshitij.so 30
                  }
31
 
13572 kshitij.so 32
def get_mongo_connection(host='localhost', port=27017):
33
    global con
34
    if con is None:
35
        print "Establishing connection %s host and port %d" %(host,port)
36
        try:
37
            con = pymongo.MongoClient(host, port)
38
        except Exception, e:
39
            print e
40
            return None
41
    return con
42
 
13907 kshitij.so 43
def populateCashBack():
13921 kshitij.so 44
    print "Populating cashback"
45
    cashBackMap = {}
46
    itemCashBackMap = {}
13907 kshitij.so 47
    cashBack = list(get_mongo_connection().Catalog.CategoryCashBack.find())
48
    for row in cashBack:
13970 kshitij.so 49
        temp_map = {}
50
        temp_list = []
13907 kshitij.so 51
        if cashBackMap.has_key(row['source_id']):
52
            arr = cashBackMap.get(row['source_id'])
53
            for val in arr:
54
                temp_list.append(val)
55
            temp_map[row['category_id']] = row
56
            temp_list.append(temp_map)
57
            cashBackMap[row['source_id']] = temp_list 
58
        else:
59
            temp_map[row['category_id']] = row
60
            temp_list.append(temp_map)
61
            cashBackMap[row['source_id']] = temp_list
13921 kshitij.so 62
    itemCashBack = list(get_mongo_connection().Catalog.ItemCashBack.find())
63
    for row in itemCashBack:
64
        if not itemCashBackMap.has_key(row['skuId']):
65
            itemCashBackMap[row['skuId']] = row
14761 kshitij.so 66
    mc.set("item_cash_back", itemCashBackMap, 24 * 60 * 60)
67
    mc.set("category_cash_back", cashBackMap, 24 * 60 * 60)
13907 kshitij.so 68
 
13572 kshitij.so 69
def addCategoryDiscount(data):
13970 kshitij.so 70
    collection = get_mongo_connection().Catalog.CategoryDiscount
13572 kshitij.so 71
    query = []
72
    data['brand'] = data['brand'].strip().upper()
13970 kshitij.so 73
    data['discountType'] = data['discountType'].upper().strip()
13572 kshitij.so 74
    query.append({"brand":data['brand']})
75
    query.append({"category_id":data['category_id']})
76
    r = collection.find({"$and":query})
77
    if r.count() > 0:
13639 kshitij.so 78
        return {0:"Brand & Category info already present."}
13572 kshitij.so 79
    else:
80
        collection.insert(data)
13970 kshitij.so 81
        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 82
        return {1:"Data added successfully"}
13572 kshitij.so 83
 
13970 kshitij.so 84
def updateCategoryDiscount(data,_id):
85
    try:
86
        collection = get_mongo_connection().Catalog.CategoryDiscount
87
        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)
88
        get_mongo_connection().Catalog.MasterData.update({'brand':data['brand'],'category_id':data['category_id']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
89
        return {1:"Data updated successfully"}
90
    except:
91
        return {0:"Data not updated."}
92
 
93
 
13572 kshitij.so 94
def getAllCategoryDiscount():
95
    data = []
13970 kshitij.so 96
    collection = get_mongo_connection().Catalog.CategoryDiscount
13572 kshitij.so 97
    cursor = collection.find()
98
    for val in cursor:
99
        data.append(val)
100
    return data
101
 
14553 kshitij.so 102
def __getBundledSkusfromSku(sku):
103
    masterData =  get_mongo_connection().Catalog.MasterData.find_one({"_id":sku},{"skuBundleId":1})
104
    if masterData is not None:
105
        return list(get_mongo_connection().Catalog.MasterData.find({"skuBundleId":masterData.get('skuBundleId')},{'_id':1,'skuBundleId':1}))
106
    else:
107
        return []
13572 kshitij.so 108
 
15853 kshitij.so 109
def addSchemeDetailsForSku(data):
110
    collection = get_mongo_connection().Catalog.SkuSchemeDetails
111
    result = collection.find_one({'skuBundleId':data['skuBundleId']})
112
    if result is None:
14553 kshitij.so 113
        collection.insert(data)
15853 kshitij.so 114
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
14553 kshitij.so 115
        return {1:"Data added successfully"}
15853 kshitij.so 116
    return {1:"BundleId info already present"}
117
 
14069 kshitij.so 118
def getAllSkuWiseSchemeDetails(offset, limit):
13572 kshitij.so 119
    data = []
13970 kshitij.so 120
    collection = get_mongo_connection().Catalog.SkuSchemeDetails
14071 kshitij.so 121
    cursor = collection.find().skip(offset).limit(limit)
13572 kshitij.so 122
    for val in cursor:
15853 kshitij.so 123
        master = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':val['skuBundleId']})
124
        if master is not None:
125
            val['brand'] = master['brand']
126
            val['source_product_name'] = master['source_product_name']
14069 kshitij.so 127
        else:
128
            val['brand'] = ""
129
            val['source_product_name'] = ""
13572 kshitij.so 130
        data.append(val)
131
    return data
132
 
15853 kshitij.so 133
def addSkuDiscountInfo(data):
134
    collection = get_mongo_connection().Catalog.SkuDiscountInfo
135
    cursor = collection.find_one({"skuBundleId":data['skuBundleId']})
136
    if cursor is not None:
137
        return {0:"BundleId information already present."}
13572 kshitij.so 138
    else:
15853 kshitij.so 139
        collection.insert(data)
140
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
13639 kshitij.so 141
        return {1:"Data added successfully"}
13572 kshitij.so 142
 
13970 kshitij.so 143
def getallSkuDiscountInfo(offset, limit):
13572 kshitij.so 144
    data = []
13970 kshitij.so 145
    collection = get_mongo_connection().Catalog.SkuDiscountInfo
146
    cursor = collection.find().skip(offset).limit(limit)
13572 kshitij.so 147
    for val in cursor:
15853 kshitij.so 148
        master = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':val['skuBundleId']})
149
        if master is not None:
150
            val['brand'] = master['brand']
151
            val['source_product_name'] = master['source_product_name']
13970 kshitij.so 152
        else:
153
            val['brand'] = ""
154
            val['source_product_name'] = ""
13572 kshitij.so 155
        data.append(val)
156
    return data
157
 
13970 kshitij.so 158
def updateSkuDiscount(data,_id):
159
    try:
160
        collection = get_mongo_connection().Catalog.SkuDiscountInfo
161
        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 162
        get_mongo_connection().Catalog.MasterData.update({'_id':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
13970 kshitij.so 163
        return {1:"Data updated successfully"}
164
    except:
165
        return {0:"Data not updated."}
166
 
167
 
15853 kshitij.so 168
def addExceptionalNlc(data):
169
    collection = get_mongo_connection().Catalog.ExceptionalNlc
170
    cursor = collection.find_one({"skuBundleId":data['skuBundleId']})
171
    if cursor is not None:
172
        return {0:"BundleId information already present."}
13572 kshitij.so 173
    else:
15853 kshitij.so 174
        collection.insert(data)
175
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
13639 kshitij.so 176
        return {1:"Data added successfully"}
13572 kshitij.so 177
 
13970 kshitij.so 178
def getAllExceptionlNlcItems(offset, limit):
13572 kshitij.so 179
    data = []
13970 kshitij.so 180
    collection = get_mongo_connection().Catalog.ExceptionalNlc
14071 kshitij.so 181
    cursor = collection.find().skip(offset).limit(limit)
13572 kshitij.so 182
    for val in cursor:
15853 kshitij.so 183
        master = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':val['skuBundleId']})
184
        if master is not None:
185
            val['brand'] = master['brand']
186
            val['source_product_name'] = master['source_product_name']
13970 kshitij.so 187
        else:
188
            val['brand'] = ""
189
            val['source_product_name'] = ""
13572 kshitij.so 190
        data.append(val)
191
    return data
192
 
14005 amit.gupta 193
def getMerchantOrdersByUser(userId, page=1, window=50, searchMap={}):
194
    if searchMap is None:
195
        searchMap = {}
13603 amit.gupta 196
    if page==None:
197
        page = 1
198
 
199
    if window==None:
200
        window = 50
201
    result = {}
13582 amit.gupta 202
    skip = (page-1)*window
14005 amit.gupta 203
 
14353 amit.gupta 204
    if userId is not None:
205
        searchMap['userId'] = userId
13603 amit.gupta 206
    collection = get_mongo_connection().Dtr.merchantOrder
14609 amit.gupta 207
    cursor = collection.find(searchMap).sort("orderId",-1)
13603 amit.gupta 208
    total_count = cursor.count()
209
    pages = total_count/window + (0 if total_count%window==0 else 1)  
210
    print "total_count", total_count
211
    if total_count > skip:
13999 amit.gupta 212
        cursor = cursor.skip(skip).limit(window)
13603 amit.gupta 213
        orders = []
214
        for order in cursor:
14002 amit.gupta 215
            del(order["_id"])
216
            orders.append(order)
13603 amit.gupta 217
        result['data'] = orders
218
        result['window'] = window
219
        result['totalCount'] = total_count 
220
        result['currCount'] = cursor.count()
221
        result['totalPages'] = pages
222
        result['currPage'] = page    
223
        return result
224
    else:
225
        return result
13630 kshitij.so 226
 
13927 amit.gupta 227
def getRefunds(userId, page=1, window=10):
228
    if page==None:
229
        page = 1
230
 
231
    if window==None:
13995 amit.gupta 232
        window = 10
13927 amit.gupta 233
    result = {}
234
    skip = (page-1)*window
235
    collection = get_mongo_connection().Dtr.refund
236
    cursor = collection.find({"userId":userId})
237
    total_count = cursor.count()
238
    pages = total_count/window + (0 if total_count%window==0 else 1)  
239
    print "total_count", total_count
240
    if total_count > skip:
14668 amit.gupta 241
        cursor = cursor.skip(skip).limit(window).sort([('batch',-1)])
13927 amit.gupta 242
        refunds = []
243
        for refund in cursor:
244
            del(refund["_id"])
245
            refunds.append(refund)
246
        result['data'] = refunds
247
        result['window'] = window
248
        result['totalCount'] = total_count 
249
        result['currCount'] = cursor.count()
250
        result['totalPages'] = pages
251
        result['currPage'] = page    
252
        return result
253
    else:
254
        return result
255
 
256
def getPendingRefunds(userId):
13991 amit.gupta 257
    print type(userId)
13927 amit.gupta 258
    result = get_mongo_connection().Dtr.merchantOrder\
259
        .aggregate([
16398 amit.gupta 260
                    {'$match':{'subOrders.cashBackStatus':CB_APPROVED, 'userId':userId}},
13927 amit.gupta 261
                    {'$unwind':"$subOrders"},
16398 amit.gupta 262
                    {'$match':{'subOrders.cashBackStatus':CB_APPROVED}},
13927 amit.gupta 263
                    { 
264
                     '$group':{
265
                               '_id':None,
266
                               'amount': { '$sum':'$subOrders.cashBackAmount'},
267
                               }
268
                     }
13987 amit.gupta 269
                ])['result']
270
 
271
    if len(result)>0:
272
        result = result[0]        
273
        result.pop("_id")
274
    else:
275
        result={}
276
        result['amount'] = 0.0
14305 amit.gupta 277
    result['nextCredit'] = datetime.strftime(next_weekday(datetime.now(), int(PythonPropertyReader.getConfig('CREDIT_DAY_OF_WEEK'))),"%Y-%m-%d %H:%M:%S")
13927 amit.gupta 278
    return result
14037 kshitij.so 279
 
14671 amit.gupta 280
def getPendingCashbacks(userId):
281
    result = get_mongo_connection().Dtr.merchantOrder\
282
        .aggregate([
16398 amit.gupta 283
                    {'$match':{'subOrders.cashBackStatus':CB_PENDING, 'userId':userId}},
14671 amit.gupta 284
                    {'$unwind':"$subOrders"},
16398 amit.gupta 285
                    {'$match':{'subOrders.cashBackStatus':CB_PENDING}},
14671 amit.gupta 286
                    { 
287
                     '$group':{
288
                               '_id':None,
289
                               'amount': { '$sum':'$subOrders.cashBackAmount'},
290
                               }
291
                     }
292
                ])['result']
293
 
294
    if len(result)>0:
295
        result = result[0]        
296
        result.pop("_id")
297
    else:
298
        result={}
299
        result['amount'] = 0.0
300
    return result
301
 
14037 kshitij.so 302
def __populateCache(userId):
303
    print "Populating memcache for userId",userId
304
    outer_query = []
16067 kshitij.so 305
    outer_query.append({ "$or": [ { "showDeal": 1} , { "prepaidDeal": 1 } ] })
14037 kshitij.so 306
    query = {}
16170 kshitij.so 307
    query['$gt'] = -100
14037 kshitij.so 308
    outer_query.append({'totalPoints':query})
309
    brandPrefMap = {}
310
    pricePrefMap = {}
311
    actionsMap = {}
312
    brand_p = session.query(price_preferences).filter_by(user_id=userId).all()
313
    for x in brand_p:
314
        pricePrefMap[x.category_id] = [x.min_price,x.max_price]
315
    for x in session.query(brand_preferences).filter_by(user_id=userId).all():
316
        temp_map = {}
317
        if brandPrefMap.has_key((x.brand).strip().upper()):
318
            val = brandPrefMap.get((x.brand).strip().upper())
319
            temp_map[x.category_id] = 1 if x.status == 'show' else 0
320
            val.append(temp_map)
321
        else:
322
            temp = []
323
            temp_map[x.category_id] = 1 if x.status == 'show' else 0
324
            temp.append(temp_map)
325
            brandPrefMap[(x.brand).strip().upper()] = temp
326
 
327
    for x in session.query(user_actions).filter_by(user_id=userId).all():
328
        actionsMap[x.store_product_id] = 1 if x.action == 'like' else 0
16458 kshitij.so 329
    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}).sort([('totalPoints',pymongo.DESCENDING),('bestSellerPoints',pymongo.DESCENDING),('nlcPoints',pymongo.DESCENDING),('rank',pymongo.DESCENDING)]))
14037 kshitij.so 330
    all_category_deals = []
331
    mobile_deals = []
332
    tablet_deals = []
333
    for deal in all_deals:
334
        if actionsMap.get(deal['_id']) == 0:
335
            fav_weight =.25
336
        elif actionsMap.get(deal['_id']) == 1:
337
            fav_weight = 1.5
338
        else:
339
            fav_weight = 1
340
 
341
        if brandPrefMap.get(deal['brand'].strip().upper()) is not None:
342
            brand_weight = 1
343
            for brandInfo in brandPrefMap.get(deal['brand'].strip().upper()):
344
                if brandInfo.get(deal['category_id']) is not None:
345
                    if brandInfo.get(deal['category_id']) == 1:
14055 kshitij.so 346
                        brand_weight = 2.0
14037 kshitij.so 347
        else:
348
            brand_weight = 1
349
 
350
        if pricePrefMap.get(deal['category_id']) is not None:
351
 
352
            if deal['available_price'] >= pricePrefMap.get(deal['category_id'])[0] and deal['available_price'] <= pricePrefMap.get(deal['category_id'])[1]:
353
                asp_weight = 1.5
354
            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]:
355
                asp_weight = 1.2
356
            else:
357
                asp_weight = 1
358
        else:
359
            asp_weight = 1
360
 
361
        persPoints = deal['totalPoints'] * fav_weight * brand_weight * asp_weight
362
        deal['persPoints'] = persPoints
363
 
364
        if deal['category_id'] ==3:
365
            mobile_deals.append(deal)
366
        elif deal['category_id'] ==5:
367
            tablet_deals.append(deal)
368
        else:
369
            continue
370
        all_category_deals.append(deal)
371
 
14144 kshitij.so 372
    session.close()
14037 kshitij.so 373
    mem_cache_val = {3:mobile_deals, 5:tablet_deals, 0:all_deals}
374
    mc.set(str(userId), mem_cache_val)
375
 
376
 
14531 kshitij.so 377
def __populateFeaturedDeals():
378
    all_category_fd = []
379
    mobile_fd = []
380
    tablet_fd = []
14550 kshitij.so 381
    activeFeaturedDeals = get_mongo_connection().Catalog.FeaturedDeals.find({'startDate':{'$lte':to_java_date(datetime.now())},'endDate':{'$gte':to_java_date(datetime.now())}}).sort({'rank':pymongo.ASCENDING})
14531 kshitij.so 382
    for activeFeaturedDeal in activeFeaturedDeals:
383
        for k,v in activeFeaturedDeal['rankDetails']:
384
            featuredDeal = FeaturedDeals(activeFeaturedDeal['sku'], int(k), activeFeaturedDeal['thresholdPrice'], int(v))
385
            if featuredDeal.category_id == 0:
386
                all_category_fd.append(featuredDeal)
387
            elif featuredDeal.category_id == 3:
388
                mobile_fd.append(featuredDeal)
389
            elif featuredDeal.category_id == 5:
390
                tablet_fd.append(featuredDeal)
391
            else:
392
                continue
14550 kshitij.so 393
    mc.set("featured_deals_category_"+str(0), all_category_fd, 3600)
394
    mc.set("featured_deals_category_"+str(3), mobile_fd, 3600)
395
    mc.set("featured_deals_category_"+str(5), tablet_fd, 3600)
14037 kshitij.so 396
 
14791 kshitij.so 397
def getNewDeals(userId, category_id, offset, limit, sort, direction, filterData=None):
14761 kshitij.so 398
    if not bool(mc.get("category_cash_back")):
13921 kshitij.so 399
        populateCashBack()
14037 kshitij.so 400
 
14550 kshitij.so 401
    try:
402
        if mc.get("featured_deals_category_"+str(category_id)) is None:
403
            __populateFeaturedDeals()
404
    except:
405
        pass 
14531 kshitij.so 406
 
13771 kshitij.so 407
    rank = 1
16079 kshitij.so 408
    dealsListMap = []
14037 kshitij.so 409
    user_specific_deals = mc.get(str(userId))
410
    if user_specific_deals is None:
411
        __populateCache(userId)
412
        user_specific_deals = mc.get(str(userId))
14038 kshitij.so 413
    else:
414
        print "Getting user deals from cache"
14037 kshitij.so 415
    category_specific_deals = user_specific_deals.get(category_id)
416
 
417
    if sort is None or direction is None:
418
        sorted_deals = sorted(category_specific_deals, key = lambda x: (x['persPoints'],x['totalPoints'],x['bestSellerPoints'], x['nlcPoints'], x['rank']),reverse=True)
419
    else:
420
        if sort == "bestSellerPoints":
421
            sorted_deals = sorted(category_specific_deals, key = lambda x: (x['bestSellerPoints'], x['rank'], x['nlcPoints']),reverse=True)
422
        else:
423
            if direction == -1:
424
                rev = True
425
            else:
426
                rev = False
427
            sorted_deals = sorted(category_specific_deals, key = lambda x: (x['available_price']),reverse=rev)
428
 
14791 kshitij.so 429
 
430
    print "============================"
431
    if filterData is not None:
432
        try:
433
            sorted_deals = filterDeals(sorted_deals, filterData)
434
        except:
16067 kshitij.so 435
            traceback.print_exc()
14791 kshitij.so 436
 
16067 kshitij.so 437
 
438
    sortedMap = {}
439
    rankMap = {}
440
    rank = 0
441
    for sorted_deal in sorted_deals:
442
        if sortedMap.get(sorted_deal['skuBundleId']) is None:
443
            sortedMap[sorted_deal['skuBundleId']] = {rank:[sorted_deal]}
444
            rankMap[rank] = (sortedMap[sorted_deal['skuBundleId']].values())[0]
445
            rank = rank +1
446
        else:
447
            for temp_list in sortedMap.get(sorted_deal['skuBundleId']).itervalues():
448
                temp_list.append(sorted_deal)
16079 kshitij.so 449
            rankMap[(sortedMap.get(sorted_deal['skuBundleId']).keys())[0]] = temp_list
16067 kshitij.so 450
 
451
    for dealList in [rankMap.get(k, []) for k in range(offset, offset+limit)]:
16079 kshitij.so 452
        temp = []
16067 kshitij.so 453
        for d in dealList:
454
            item = list(get_mongo_connection().Catalog.MasterData.find({'_id':d['_id']}))
16320 kshitij.so 455
            if len(item) ==0:
456
                continue
16079 kshitij.so 457
            item[0]['persPoints'] = d['persPoints']
458
            if d['dealType'] == 1 and d['source_id'] ==1:
16511 kshitij.so 459
                try:
460
                    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())}}))
461
                    item[0]['marketPlaceUrl'] = manualDeal[0]['dealUrl'].strip()
462
                except:
463
                    pass
16079 kshitij.so 464
            elif d['source_id'] ==3:
465
                item[0]['marketPlaceUrl'] = item[0]['marketPlaceUrl']+'?supc='+item[0].get('identifier')
466
            else:
467
                pass 
468
            try:
469
                cashBack = getCashBack(item[0]['_id'], item[0]['source_id'], item[0]['category_id'])
470
                if not cashBack or cashBack.get('cash_back_status')!=1:
14037 kshitij.so 471
                    item[0]['cash_back_type'] = 0
472
                    item[0]['cash_back'] = 0
16079 kshitij.so 473
                else:
474
                    item[0]['cash_back_type'] = int(cashBack['cash_back_type'])
475
                    item[0]['cash_back'] = cashBack['cash_back']
476
            except:
477
                print "Error in adding cashback to deals"
478
                item[0]['cash_back_type'] = 0
479
                item[0]['cash_back'] = 0
16252 kshitij.so 480
            try:
481
                item[0]['dp'] = d['dp']
482
                item[0]['showDp'] = d['showDp']
483
            except:
484
                item[0]['dp'] = 0.0
485
                item[0]['showDp'] = 0
16483 kshitij.so 486
            try:
487
                item[0]['thumbnail'] = item[0]['thumbnail'].strip()
488
            except:
489
                pass 
16079 kshitij.so 490
            temp.append(item[0])
16125 kshitij.so 491
        if len(temp) > 1:
16126 kshitij.so 492
            temp = sorted(temp, key = lambda x: (x['available_price']),reverse=False)
16079 kshitij.so 493
        dealsListMap.append(temp)
494
    return dealsListMap
14037 kshitij.so 495
 
14791 kshitij.so 496
def filterDeals(deals, filterData):
497
    dealFiltered = []
498
    brandsFiltered = []
499
    filterArray = filterData.split('|')
500
    for data in filterArray:
501
        try:
502
            filter, info = data.split(':')
503
        except Exception as ex:
504
            traceback.print_exc()
505
            continue
506
        if filter == 'dealFilter':
507
            toFilter = info.split('^')
508
            print "deal filter ",toFilter
509
            if 'deals' in toFilter:
510
                dealFiltered = deals
511
                continue
512
            for filterVal in toFilter:
513
                if filterVal == 'dod':
514
                    for deal in deals:
515
                        if deal['dealType'] == 1:
516
                            dealFiltered.append(deal)
517
        elif filter == 'brandFilter':
518
            toFilter = info.split('^')
519
            print "brand filter ",toFilter
520
            if len(toFilter) == 0 or (len(toFilter)==1 and toFilter[0]==''):
521
                brandsFiltered = deals
522
            for deal in deals:
15151 kshitij.so 523
                if str(int(deal['brand_id'])) in toFilter:
14791 kshitij.so 524
                    brandsFiltered.append(deal)
15040 kshitij.so 525
    if len(dealFiltered) == 0:
526
        return brandsFiltered
14791 kshitij.so 527
    return [i for i in dealFiltered for j in brandsFiltered if i['_id']==j['_id']]
528
 
529
 
14037 kshitij.so 530
def getDeals(userId, category_id, offset, limit, sort, direction):
14761 kshitij.so 531
    if not bool(mc.get("category_cash_back")):
14037 kshitij.so 532
        populateCashBack()
533
    rank = 1
13771 kshitij.so 534
    deals = {}
13910 kshitij.so 535
    outer_query = []
536
    outer_query.append({"showDeal":1})
537
    query = {}
538
    query['$gt'] = 0
539
    outer_query.append({'totalPoints':query})
540
    if category_id in (3,5):
541
        outer_query.append({'category_id':category_id})
13803 kshitij.so 542
    if sort is None or direction is None:
543
        direct = -1
13910 kshitij.so 544
        print outer_query
545
        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 546
    else:
13910 kshitij.so 547
        print outer_query
13803 kshitij.so 548
        direct = direction
13910 kshitij.so 549
        if sort == "bestSellerPoints":
550
            print "yes,sorting by bestSellerPoints"
551
            data = list(get_mongo_connection().Catalog.Deals.find({"$and":outer_query}).sort([('bestSellerPoints',direct),('rank',direct),('nlcPoints',direct)]).skip(offset).limit(limit))
552
        else:
553
            data = list(get_mongo_connection().Catalog.Deals.find({"$and":outer_query}).sort([(sort,direct)]).skip(offset).limit(limit))
13771 kshitij.so 554
    for d in data:
555
        item = list(get_mongo_connection().Catalog.MasterData.find({'_id':d['_id']}))
556
        if not deals.has_key(item[0]['identifier']):
13921 kshitij.so 557
            item[0]['dealRank'] = rank
558
            try:
14761 kshitij.so 559
                cashBack = getCashBack(item[0]['_id'], item[0]['source_id'], item[0]['category_id'])
13921 kshitij.so 560
                if not cashBack or cashBack.get('cash_back_status')!=1:
13928 kshitij.so 561
                    item[0]['cash_back_type'] = 0
562
                    item[0]['cash_back'] = 0
13921 kshitij.so 563
                else:
14766 kshitij.so 564
                    item[0]['cash_back_type'] = int(cashBack['cash_back_type'])
13928 kshitij.so 565
                    item[0]['cash_back'] = cashBack['cash_back']
13921 kshitij.so 566
            except:
567
                print "Error in adding cashback to deals"
13928 kshitij.so 568
                item[0]['cash_back_type'] = 0
569
                item[0]['cash_back'] = 0
13771 kshitij.so 570
            deals[item[0]['identifier']] = item[0]
13921 kshitij.so 571
 
13771 kshitij.so 572
            rank +=1
13785 kshitij.so 573
    return sorted(deals.values(), key=itemgetter('dealRank'))
574
 
16222 kshitij.so 575
def getItem(skuId,showDp=None):
16224 kshitij.so 576
    temp = []
14761 kshitij.so 577
    if not bool(mc.get("category_cash_back")):
14113 kshitij.so 578
        populateCashBack()
13795 kshitij.so 579
    try:
16222 kshitij.so 580
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'_id':int(skuId)})
581
        if skuData is None:
582
            raise
583
        try:
584
            cashBack = getCashBack(skuData['_id'], skuData['source_id'], skuData['category_id'])
585
            if not cashBack or cashBack.get('cash_back_status')!=1:
586
                skuData['cash_back_type'] = 0
587
                skuData['cash_back'] = 0
588
            else:
589
                skuData['cash_back_type'] = cashBack['cash_back_type']
590
                skuData['cash_back'] = cashBack['cash_back']
591
        except:
592
            print "Error in adding cashback to deals"
593
            skuData['cash_back_type'] = 0
594
            skuData['cash_back'] = 0
595
        skuData['in_stock'] = int(skuData['in_stock'])
596
        skuData['is_shortage'] = int(skuData['is_shortage'])
597
        skuData['category_id'] = int(skuData['category_id'])
598
        skuData['status'] = int(skuData['status'])
16483 kshitij.so 599
        try:
600
            skuData['thumbnail'] = skuData['thumbnail'].strip()
601
        except:
602
            pass 
16222 kshitij.so 603
        if showDp is not None:
604
            dealerPrice = get_mongo_connection().Catalog.SkuDealerPrices.find_one({'skuBundleId':skuData['skuBundleId']})
605
            skuData['dp'] = 0.0
606
            skuData['showDp'] = 0
607
            if dealerPrice is not None:
608
                skuData['dp'] = dealerPrice['dp']
609
                skuData['showDp'] = dealerPrice['showDp']
16224 kshitij.so 610
        temp.append(skuData)
611
        return temp
13795 kshitij.so 612
    except:
16224 kshitij.so 613
        return []
13836 kshitij.so 614
 
14761 kshitij.so 615
def getCashBack(skuId, source_id, category_id):
616
    if not bool(mc.get("category_cash_back")):
617
        populateCashBack()
618
    itemCashBackMap = mc.get("item_cash_back")
13921 kshitij.so 619
    itemCashBack = itemCashBackMap.get(skuId)
620
    if itemCashBack is not None:
621
        return itemCashBack
14761 kshitij.so 622
    cashBackMap = mc.get("category_cash_back")
13921 kshitij.so 623
    sourceCashBack = cashBackMap.get(source_id)
624
    if sourceCashBack is not None and len(sourceCashBack) > 0:
625
        for cashBack in sourceCashBack:
626
            if cashBack.get(category_id) is None:
627
                continue
628
            else:
629
                return cashBack.get(category_id)
630
    else:
631
        return {}
632
 
15129 kshitij.so 633
def getDealRank(identifier, source_id, userId):
16406 kshitij.so 634
    if source_id in (1,2,4,5,6):
15129 kshitij.so 635
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'identifier':identifier.strip(), 'source_id':source_id}))
636
    elif source_id == 3:
637
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'secondaryIdentifier':identifier.strip(), 'source_id':source_id}))
638
    else:
16282 amit.gupta 639
        return {'rank':0, 'description':'Source not valid','maxNlc':None, 'minNlc':None,'status':None,'dp':None}
15349 kshitij.so 640
    if len(skuData) == 0:
16282 amit.gupta 641
        return {'rank':0, 'description':'No matching product identifier found','maxNlc':None, 'minNlc':None,'status':None,'dp':None}
15129 kshitij.so 642
    user_specific_deals = mc.get(str(userId))
643
    if user_specific_deals is None:
644
        __populateCache(userId)
645
        user_specific_deals = mc.get(str(userId))
646
    else:
647
        print "Getting user deals from cache"
648
    category_id = skuData[0]['category_id']
649
    category_specific_deals = user_specific_deals.get(category_id)
16280 kshitij.so 650
 
651
    dealsData = get_mongo_connection().Catalog.Deals.find_one({'skuBundleId':skuData[0]['skuBundleId']})
652
    if dealsData is None:
653
        dealsData = {}
654
 
15129 kshitij.so 655
    if category_specific_deals is None or len(category_specific_deals) ==0:
16280 kshitij.so 656
        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 657
    sorted_deals = sorted(category_specific_deals, key = lambda x: (x['persPoints'],x['totalPoints'],x['bestSellerPoints'], x['nlcPoints'], x['rank']),reverse=True)
16168 kshitij.so 658
    sortedMap = {}
659
    rankMap = {}
660
    rank = 0
15129 kshitij.so 661
    for sorted_deal in sorted_deals:
16168 kshitij.so 662
        if sortedMap.get(sorted_deal['skuBundleId']) is None:
663
            sortedMap[sorted_deal['skuBundleId']] = {rank:[sorted_deal]}
664
            rankMap[rank] = (sortedMap[sorted_deal['skuBundleId']].values())[0]
665
            rank = rank +1
666
        else:
667
            for temp_list in sortedMap.get(sorted_deal['skuBundleId']).itervalues():
668
                temp_list.append(sorted_deal)
669
            rankMap[(sortedMap.get(sorted_deal['skuBundleId']).keys())[0]] = temp_list
670
 
16187 kshitij.so 671
    for dealRank ,dealList in rankMap.iteritems():
16168 kshitij.so 672
        for d in dealList:
16186 kshitij.so 673
            if d['skuBundleId'] == skuData[0]['skuBundleId']:
16280 kshitij.so 674
                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 675
 
16280 kshitij.so 676
    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 677
 
678
 
13836 kshitij.so 679
def getCashBackDetails(identifier, source_id):
14761 kshitij.so 680
    if not bool(mc.get("category_cash_back")):
13921 kshitij.so 681
        populateCashBack()
13771 kshitij.so 682
 
16406 kshitij.so 683
    if source_id in (1,2,4,5,6):
13839 kshitij.so 684
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'identifier':identifier.strip(), 'source_id':source_id}))
13840 kshitij.so 685
    elif source_id == 3:
13839 kshitij.so 686
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'secondaryIdentifier':identifier.strip(), 'source_id':source_id}))
13840 kshitij.so 687
    else:
688
        return {}
13836 kshitij.so 689
    if len(skuData) > 0:
14761 kshitij.so 690
        itemCashBackMap = mc.get("item_cash_back")
13921 kshitij.so 691
        itemCashBack = itemCashBackMap.get(skuData[0]['_id'])
692
        if itemCashBack is not None:
693
            return itemCashBack
14761 kshitij.so 694
        cashBackMap = mc.get("category_cash_back")
13921 kshitij.so 695
        sourceCashBack = cashBackMap.get(source_id)
696
        if sourceCashBack is not None and len(sourceCashBack) > 0:
697
            for cashBack in sourceCashBack:
698
                if cashBack.get(skuData[0]['category_id']) is None:
699
                    continue
700
                else:
701
                    return cashBack.get(skuData[0]['category_id'])
13836 kshitij.so 702
        else:
703
            return {} 
704
    else:
705
        return {}
13986 amit.gupta 706
 
14398 amit.gupta 707
def getImgSrc(identifier, source_id):
708
    skuData = None
16406 kshitij.so 709
    if source_id in (1,2,4,5,6):
14414 amit.gupta 710
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'identifier':identifier.strip(), 'source_id':source_id})
14398 amit.gupta 711
    elif source_id == 3:
14414 amit.gupta 712
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'secondaryIdentifier':identifier.strip(), 'source_id':source_id})
14398 amit.gupta 713
    if skuData is None:
714
        return {}
715
    else:
16483 kshitij.so 716
        try:
717
            return {'thumbnail':skuData.get('thumbnail').strip()}
718
        except:
719
            return {'thumbnail':skuData.get('thumbnail')}
13986 amit.gupta 720
 
721
def next_weekday(d, weekday):
722
    days_ahead = weekday - d.weekday()
723
    if days_ahead <= 0: # Target day already happened this week
724
        days_ahead += 7
725
    return d + timedelta(days_ahead)
726
 
13771 kshitij.so 727
 
13970 kshitij.so 728
def getAllDealerPrices(offset, limit):
729
    data = []
730
    collection = get_mongo_connection().Catalog.SkuDealerPrices
731
    cursor = collection.find().skip(offset).limit(limit)
732
    for val in cursor:
15853 kshitij.so 733
        master = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':val['skuBundleId']})
734
        if master is not None:
735
            val['brand'] = master['brand']
736
            val['source_product_name'] = master['source_product_name']
13970 kshitij.so 737
        else:
738
            val['brand'] = ""
739
            val['source_product_name'] = ""
16231 kshitij.so 740
        val['showDp'] = int(val['showDp'])
13970 kshitij.so 741
        data.append(val)
742
    return data
743
 
15853 kshitij.so 744
def addSkuDealerPrice(data):
745
    collection = get_mongo_connection().Catalog.SkuDealerPrices
746
    cursor = collection.find_one({"skuBundleId":data['skuBundleId']})
747
    if cursor is not None:
748
        return {0:"BundleId information already present."}
13970 kshitij.so 749
    else:
15853 kshitij.so 750
        collection.insert(data)
751
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
13970 kshitij.so 752
        return {1:"Data added successfully"}
753
 
754
def updateSkuDealerPrice(data, _id):
755
    try:
756
        collection = get_mongo_connection().Catalog.SkuDealerPrices
757
        collection.update({'_id':ObjectId(_id)},{"$set":{'dp':data['dp']}},upsert=False, multi = False)
15853 kshitij.so 758
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
13970 kshitij.so 759
        return {1:"Data updated successfully"}
760
    except:
761
        return {0:"Data not updated."}
762
 
763
def updateExceptionalNlc(data, _id):
764
    try:
765
        collection = get_mongo_connection().Catalog.ExceptionalNlc
766
        collection.update({'_id':ObjectId(_id)},{"$set":{'maxNlc':data['maxNlc'], 'minNlc':data['minNlc'], 'overrideNlc':data['overrideNlc']}},upsert=False, multi = False)
15853 kshitij.so 767
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
13970 kshitij.so 768
        return {1:"Data updated successfully"}
769
    except:
770
        return {0:"Data not updated."}
771
 
14041 kshitij.so 772
def resetCache(userId):
14043 kshitij.so 773
    try:
774
        mc.delete(userId)
775
        return {1:'Cache cleared.'}
776
    except:
777
        return {0:'Unable to clear cache.'}
778
 
15853 kshitij.so 779
def updateCollection(data):
14083 kshitij.so 780
    print data
15853 kshitij.so 781
    try:
782
        collection = get_mongo_connection().Catalog[data['class']]
783
        class_name = data.pop('class')
784
        _id = data.pop('oid')
785
        result = collection.update({'_id':ObjectId(_id)},{"$set":data},upsert=False, multi = False)
786
        if class_name != "Notifications":
787
            record = list(collection.find({'_id':ObjectId(_id)}))
788
            if class_name !="CategoryDiscount":
789
                if record[0].has_key('sku'):
790
                    field = '_id'
791
                    val = record[0]['sku']
14852 kshitij.so 792
                else:
15853 kshitij.so 793
                    field = 'skuBundleId'
794
                    val = record[0]['skuBundleId']
795
                get_mongo_connection().Catalog.MasterData.update({field:val},{"$set":{'updatedOn':to_java_date(datetime.now())}},upsert=False, multi = True)
796
            else:
797
                get_mongo_connection().Catalog.MasterData.update({'brand':re.compile(record[0]['brand'], re.IGNORECASE),'category_id':record[0]['category_id']}, \
798
                                                                 {"$set":{'updatedOn':to_java_date(datetime.now())}},upsert=False,multi=True)
16233 kshitij.so 799
        if class_name =='SkuDealerPrices':
16237 kshitij.so 800
            get_mongo_connection().Catalog.Deals.update({'skuBundleId':val},{"$set":data},upsert=False, multi=True)
15853 kshitij.so 801
        return {1:"Data updated successfully"}
802
    except Exception as e:
803
        print e
804
        return {0:"Data not updated."}
14575 kshitij.so 805
 
14076 kshitij.so 806
 
14553 kshitij.so 807
def addNegativeDeals(data, multi):
808
    if multi !=1: 
809
        collection = get_mongo_connection().Catalog.NegativeDeals
810
        cursor = collection.find({"sku":data['sku']})
811
        if cursor.count() > 0:
812
            return {0:"Sku information already present."}
813
        else:
814
            collection.insert(data)
815
            return {1:"Data added successfully"}
14481 kshitij.so 816
    else:
14553 kshitij.so 817
        skuIds = __getBundledSkusfromSku(data['sku'])
818
        for sku in skuIds:
819
            data['sku'] = sku.get('_id')
820
            collection = get_mongo_connection().Catalog.NegativeDeals
821
            cursor = collection.find({"sku":data['sku']})
822
            if cursor.count() > 0:
823
                continue
824
            else:
14558 kshitij.so 825
                data.pop('_id',None)
14553 kshitij.so 826
                collection.insert(data)
14481 kshitij.so 827
        return {1:"Data added successfully"}
828
 
829
def getAllNegativeDeals(offset, limit):
830
    data = []
831
    collection = get_mongo_connection().Catalog.NegativeDeals
832
    cursor = collection.find().skip(offset).limit(limit)
833
    for val in cursor:
834
        master = list(get_mongo_connection().Catalog.MasterData.find({'_id':val['sku']}))
835
        if len(master) > 0:
836
            val['brand'] = master[0]['brand']
837
            val['source_product_name'] = master[0]['source_product_name']
838
            val['skuBundleId'] = master[0]['skuBundleId']
839
        else:
840
            val['brand'] = ""
841
            val['source_product_name'] = ""
842
            val['skuBundleId'] = ""
843
        data.append(val)
844
    return data
845
 
846
def getAllManualDeals(offset, limit):
847
    data = []
848
    collection = get_mongo_connection().Catalog.ManualDeals
15090 kshitij.so 849
    cursor = collection.find().skip(offset).limit(limit)
14481 kshitij.so 850
    for val in cursor:
851
        master = list(get_mongo_connection().Catalog.MasterData.find({'_id':val['sku']}))
852
        if len(master) > 0:
853
            val['brand'] = master[0]['brand']
854
            val['source_product_name'] = master[0]['source_product_name']
855
            val['skuBundleId'] = master[0]['skuBundleId']
856
        else:
857
            val['brand'] = ""
858
            val['source_product_name'] = ""
859
            val['skuBundleId'] = ""
860
        data.append(val)
861
    return data
14076 kshitij.so 862
 
14553 kshitij.so 863
def addManualDeal(data, multi):
864
    if multi !=1:
865
        collection = get_mongo_connection().Catalog.ManualDeals
15090 kshitij.so 866
        cursor = collection.find({'sku':data['sku']})
14553 kshitij.so 867
        if cursor.count() > 0:
868
            return {0:"Sku information already present."}
869
        else:
870
            collection.insert(data)
871
            get_mongo_connection().Catalog.MasterData.update({'_id':data['sku']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=False)
872
            return {1:"Data added successfully"}
14481 kshitij.so 873
    else:
14553 kshitij.so 874
        skuIds = __getBundledSkusfromSku(data['sku'])
875
        for sku in skuIds:
876
            data['sku'] = sku.get('_id')
877
            collection = get_mongo_connection().Catalog.ManualDeals
15090 kshitij.so 878
            cursor = collection.find({'sku':data['sku']})
14553 kshitij.so 879
            if cursor.count() > 0:
880
                continue
881
            else:
14558 kshitij.so 882
                data.pop('_id',None)
14553 kshitij.so 883
                collection.insert(data)
884
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':sku.get('skuBundleId')},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
14481 kshitij.so 885
        return {1:"Data added successfully"}
14553 kshitij.so 886
 
14481 kshitij.so 887
def deleteDocument(data):
15853 kshitij.so 888
    print "inside detete document"
14481 kshitij.so 889
    print data
890
    try:
891
        collection = get_mongo_connection().Catalog[data['class']]
892
        class_name = data.pop('class')
893
        _id = data.pop('oid')
894
        record = list(collection.find({'_id':ObjectId(_id)}))
895
        collection.remove({'_id':ObjectId(_id)})
15075 kshitij.so 896
        if class_name != "Notifications":
897
            if class_name !="CategoryDiscount":
15853 kshitij.so 898
                print record[0]
899
                if record[0].has_key('sku'):
900
                    field = '_id'
901
                    val = record[0]['sku']
902
                else:
903
                    field = 'skuBundleId'
904
                    val = record[0]['skuBundleId']
905
                print "Updating master"
906
                print field
907
                print val
908
                get_mongo_connection().Catalog.MasterData.update({field:val},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
15075 kshitij.so 909
            else:
910
                get_mongo_connection().Catalog.MasterData.update({'brand':re.compile(record[0]['brand'], re.IGNORECASE),'category_id':record[0]['category_id']}, \
911
                                                                 {"$set":{'updatedOn':to_java_date(datetime.now())}},upsert=False,multi=True)
14481 kshitij.so 912
        return {1:"Document deleted successfully"}
913
    except Exception as e:
914
        print e
915
        return {0:"Document not deleted."}
13970 kshitij.so 916
 
14482 kshitij.so 917
def searchMaster(offset, limit, search_term):
918
    data = []
14531 kshitij.so 919
    if search_term is not None:
14551 kshitij.so 920
        terms = search_term.split(' ')
921
        outer_query = []
922
        for term in terms:
923
            outer_query.append({"source_product_name":re.compile(term, re.IGNORECASE)})
14531 kshitij.so 924
        try:
14551 kshitij.so 925
            collection = get_mongo_connection().Catalog.MasterData.find({"$and":outer_query,'source_id':{'$in':SOURCE_MAP.keys()}}).skip(offset).limit(limit)
14531 kshitij.so 926
            for record in collection:
927
                data.append(record)
928
        except:
929
            pass
930
    else:
931
        collection = get_mongo_connection().Catalog.MasterData.find({'source_id':{'$in':SOURCE_MAP.keys()}}).skip(offset).limit(limit)
14482 kshitij.so 932
        for record in collection:
933
            data.append(record)
934
    return data
14481 kshitij.so 935
 
14495 kshitij.so 936
def getAllFeaturedDeals(offset, limit):
937
    data = []
938
    collection = get_mongo_connection().Catalog.FeaturedDeals
939
    cursor = collection.find({'endDate':{'$gte':to_java_date(datetime.now())}}).skip(offset).limit(limit)
940
    for val in cursor:
941
        master = list(get_mongo_connection().Catalog.MasterData.find({'_id':val['sku']}))
942
        if len(master) > 0:
943
            val['brand'] = master[0]['brand']
944
            val['source_product_name'] = master[0]['source_product_name']
945
            val['skuBundleId'] = master[0]['skuBundleId']
946
        else:
947
            val['brand'] = ""
948
            val['source_product_name'] = ""
949
            val['skuBundleId'] = ""
950
        data.append(val)
951
    return data
952
 
14553 kshitij.so 953
def addFeaturedDeal(data, multi):
954
    if multi !=1:
955
        collection = get_mongo_connection().Catalog.FeaturedDeals
956
        cursor = collection.find({'sku':data['sku'],'startDate':{'$lte':data['startDate']},'endDate':{'$gte':data['endDate']}})
957
        if cursor.count() > 0:
958
            return {0:"Sku information already present."}
959
        else:
960
            collection.insert(data)
961
            get_mongo_connection().Catalog.MasterData.update({'_id':data['sku']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=False)
962
            return {1:"Data added successfully"}
14495 kshitij.so 963
    else:
14553 kshitij.so 964
        skuIds = __getBundledSkusfromSku(data['sku'])
965
        for sku in skuIds:
966
            data['sku'] = sku.get('_id')
967
            collection = get_mongo_connection().Catalog.FeaturedDeals
968
            cursor = collection.find({'sku':data['sku'],'startDate':{'$lte':data['startDate']},'endDate':{'$gte':data['endDate']}})
969
            if cursor.count() > 0:
970
                continue
971
            else:
14558 kshitij.so 972
                data.pop('_id',None)
14553 kshitij.so 973
                collection.insert(data)
974
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':sku.get('skuBundleId')},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
14495 kshitij.so 975
        return {1:"Data added successfully"}
976
 
14499 kshitij.so 977
def searchCollection(class_name, sku, skuBundleId):
14497 kshitij.so 978
    data = []
979
    collection = get_mongo_connection().Catalog[class_name]
15076 kshitij.so 980
    if class_name == "Notifications":
981
        cursor = collection.find({'skuBundleId':skuBundleId})
982
        for val in cursor:
983
            master = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':val['skuBundleId']}))
984
            if len(master) > 0:
985
                val['brand'] = master[0]['brand']
986
                val['model_name'] = master[0]['model_name']
987
                val['skuBundleId'] = master[0]['skuBundleId']
988
            else:
989
                val['brand'] = ""
990
                val['model_name'] = ""
991
                val['skuBundleId'] = val['skuBundleId']
992
            data.append(val)
15095 kshitij.so 993
        return data
15853 kshitij.so 994
    master = None
14499 kshitij.so 995
    if sku is not None:
15853 kshitij.so 996
        if COLLECTION_MAP.has_key(class_name):
997
            master = get_mongo_connection().Catalog.MasterData.find_one({'_id':sku})
998
            cursor = collection.find({'skuBundleId':master['skuBundleId']})
999
        else:
1000
            cursor = collection.find({'sku':sku})
14499 kshitij.so 1001
        for val in cursor:
15853 kshitij.so 1002
            if master is None:
1003
                master = get_mongo_connection().Catalog.MasterData.find_one({'_id':val['sku']})
1004
            if master is not None:
1005
                val['brand'] = master['brand']
1006
                val['source_product_name'] = master['source_product_name']
1007
                val['skuBundleId'] = master['skuBundleId']
14499 kshitij.so 1008
            else:
1009
                val['brand'] = ""
1010
                val['source_product_name'] = ""
1011
                val['skuBundleId'] = ""
1012
            data.append(val)
1013
        return data
1014
    else:
15853 kshitij.so 1015
        if not COLLECTION_MAP.has_key(class_name):
1016
            skuIds = get_mongo_connection().Catalog.MasterData.find({'skuBundleId':skuBundleId}).distinct('_id')
1017
            for sku in skuIds:
1018
                cursor = collection.find({'sku':sku})
1019
                for val in cursor:
1020
                    master = list(get_mongo_connection().Catalog.MasterData.find({'_id':val['sku']}))
1021
                    if len(master) > 0:
1022
                        val['brand'] = master[0]['brand']
1023
                        val['source_product_name'] = master[0]['source_product_name']
1024
                        val['skuBundleId'] = master[0]['skuBundleId']
1025
                    else:
1026
                        val['brand'] = ""
1027
                        val['source_product_name'] = ""
1028
                        val['skuBundleId'] = ""
1029
                    data.append(val)
1030
            return data
1031
        else:
1032
            cursor = collection.find({'skuBundleId':skuBundleId})
14499 kshitij.so 1033
            for val in cursor:
15853 kshitij.so 1034
                master = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':val['skuBundleId']}))
14499 kshitij.so 1035
                if len(master) > 0:
1036
                    val['brand'] = master[0]['brand']
1037
                    val['source_product_name'] = master[0]['source_product_name']
1038
                else:
1039
                    val['brand'] = ""
1040
                    val['source_product_name'] = ""
1041
                data.append(val)
15853 kshitij.so 1042
            return data
14495 kshitij.so 1043
 
15074 kshitij.so 1044
def __getBrandIdForBrand(brandName, category_id):
1045
    brandInfo = Brands.query.filter(Brands.category_id==category_id).filter(Brands.name == brandName).all()
1046
    if brandInfo is None or len(brandInfo)!=1:
1047
        raise
1048
    else:
1049
        return brandInfo[0].id
1050
 
14588 kshitij.so 1051
def addNewItem(data):
14594 kshitij.so 1052
    try:
1053
        data['updatedOn'] = to_java_date(datetime.now())
1054
        data['addedOn'] = to_java_date(datetime.now())
1055
        data['priceUpdatedOn'] = to_java_date(datetime.now())
1056
        max_id = list(get_mongo_connection().Catalog.MasterData.find().sort([('_id',pymongo.DESCENDING)]).limit(1))
1057
        max_bundle = list(get_mongo_connection().Catalog.MasterData.find().sort([('skuBundleId',pymongo.DESCENDING)]).limit(1))
1058
        data['_id'] = max_id[0]['_id'] + 1
1059
        data['skuBundleId'] = max_bundle[0]['skuBundleId'] + 1
1060
        data['identifier'] = str(data['identifier'])
1061
        data['secondaryIdentifier'] = str(data['secondaryIdentifier'])
15074 kshitij.so 1062
        data['brand_id'] = __getBrandIdForBrand(data['brand'], data['category_id'])
14594 kshitij.so 1063
        get_mongo_connection().Catalog.MasterData.insert(data)
1064
        return {1:'Data added successfully'}
1065
    except Exception as e:
1066
        print e
1067
        return {0:'Unable to add data.'}
15130 kshitij.so 1068
    finally:
1069
        session.close()
14588 kshitij.so 1070
 
1071
def addItemToExistingBundle(data):
1072
    try:
1073
        data['updatedOn'] = to_java_date(datetime.now())
1074
        data['addedOn'] = to_java_date(datetime.now())
1075
        data['priceUpdatedOn'] = to_java_date(datetime.now())
14593 kshitij.so 1076
        max_id = list(get_mongo_connection().Catalog.MasterData.find().sort([('_id',pymongo.DESCENDING)]).limit(1))
14590 kshitij.so 1077
        data['_id'] = max_id[0]['_id'] + 1
14594 kshitij.so 1078
        data['identifier'] = str(data['identifier'])
1079
        data['secondaryIdentifier'] = str(data['secondaryIdentifier'])
15074 kshitij.so 1080
        data['brand_id'] = __getBrandIdForBrand(data['brand'], data['category_id'])
14588 kshitij.so 1081
        get_mongo_connection().Catalog.MasterData.insert(data)
1082
        return {1:'Data added successfully.'}
14594 kshitij.so 1083
    except Exception as e:
1084
        print e
14588 kshitij.so 1085
        return {0:'Unable to add data.'}
15130 kshitij.so 1086
    finally:
1087
        session.close()
14588 kshitij.so 1088
 
1089
def updateMaster(data, multi):
15130 kshitij.so 1090
    try:
1091
        print data
1092
        if multi != 1:
1093
            _id = data.pop('_id')
1094
            skuBundleId = data.pop('skuBundleId')
1095
            data['updatedOn'] = to_java_date(datetime.now())
1096
            data['identifier'] = str(data['identifier'])
1097
            data['secondaryIdentifier'] = str(data['secondaryIdentifier'])
1098
            data['brand_id'] = __getBrandIdForBrand(data['brand'], data['category_id'])
1099
            get_mongo_connection().Catalog.MasterData.update({'_id':_id},{"$set":data},upsert=False)
1100
            return {1:'Data updated successfully.'}
1101
        else:
1102
            _id = data.pop('_id')
1103
            skuBundleId = data.pop('skuBundleId')
1104
            data['updatedOn'] = to_java_date(datetime.now())
1105
            data['identifier'] = str(data['identifier'])
1106
            data['secondaryIdentifier'] = str(data['secondaryIdentifier'])
1107
            data['brand_id'] = __getBrandIdForBrand(data['brand'], data['category_id'])
1108
            get_mongo_connection().Catalog.MasterData.update({'_id':_id},{"$set":data},upsert=False)
1109
            similarItems = get_mongo_connection().Catalog.MasterData.find({'skuBundleId':skuBundleId})
1110
            for item in similarItems:
1111
                if item['_id'] == _id:
1112
                    continue
1113
                item['updatedOn'] = to_java_date(datetime.now())
1114
                item['thumbnail'] = data['thumbnail']
1115
                item['category'] = data['category']
1116
                item['category_id'] = data['category_id']
1117
                item['tagline'] = data['tagline']
1118
                item['is_shortage'] = data['is_shortage']
1119
                item['mrp'] = data['mrp']
1120
                item['status'] = data['status']
1121
                item['maxPrice'] = data['maxPrice']
1122
                item['brand_id'] = data['brand_id']
1123
                similar_item_id = item.pop('_id')
1124
                get_mongo_connection().Catalog.MasterData.update({'_id':similar_item_id},{"$set":item},upsert=False)
1125
            return {1:'Data updated successfully.'}
1126
    finally:
1127
        session.close()
14619 kshitij.so 1128
 
1129
def getLiveCricScore():
1130
    return mc.get('liveScore')
14852 kshitij.so 1131
 
1132
def addBundleToNotification(data):
1133
    try:
15069 kshitij.so 1134
        collection = get_mongo_connection().Catalog.Notifications
14852 kshitij.so 1135
        cursor = collection.find({'skuBundleId':data['skuBundleId']})
1136
        if cursor.count() > 0:
1137
            return {0:"SkuBundleId information already present."}
1138
        else:
1139
            collection.insert(data)
1140
            return {1:'Data updated successfully.'}
1141
    except:
1142
        return {0:'Unable to add data.'}
1143
 
1144
def getAllNotifications(offset, limit):
1145
    data = []
15069 kshitij.so 1146
    collection = get_mongo_connection().Catalog.Notifications
16450 kshitij.so 1147
    cursor = collection.find().sort([('endDate',pymongo.DESCENDING)]).skip(offset).limit(limit)
14852 kshitij.so 1148
    for val in cursor:
15072 kshitij.so 1149
        master = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':val['skuBundleId']}))
14852 kshitij.so 1150
        if len(master) > 0:
1151
            val['brand'] = master[0]['brand']
15071 kshitij.so 1152
            val['model_name'] = master[0]['model_name']
14852 kshitij.so 1153
            val['skuBundleId'] = master[0]['skuBundleId']
1154
        else:
1155
            val['brand'] = ""
15071 kshitij.so 1156
            val['model_name'] = ""
1157
            val['skuBundleId'] = val['skuBundleId']
14852 kshitij.so 1158
        data.append(val)
1159
    return data
14997 kshitij.so 1160
 
1161
def getBrandsForFilter(category_id):
1162
    if mc.get("brandFilter") is None:
15095 kshitij.so 1163
        print "Populating brand data for category_id %d" %(category_id)
14997 kshitij.so 1164
        tabData, mobData = [], []
1165
        mobileDeals = get_mongo_connection().Catalog.Deals.aggregate([
16170 kshitij.so 1166
                                                                      {"$match":{"category_id":3,"showDeal":1,"totalPoints":{"$gt":-100}}
14997 kshitij.so 1167
                                                                    },
1168
                                                                 {"$group" : 
1169
                                                                  {'_id':{'brand_id':'$brand_id','brand':'$brand'},'count':{'$sum':1}}
1170
                                                                  }
1171
                                                                ])
14588 kshitij.so 1172
 
14997 kshitij.so 1173
        tabletDeals = get_mongo_connection().Catalog.Deals.aggregate([
16170 kshitij.so 1174
                                                                      {"$match":{"category_id":5,"showDeal":1,"totalPoints":{"$gt":-100}}
14997 kshitij.so 1175
                                                                    },
1176
                                                                 {"$group" : 
1177
                                                                  {'_id':{'brand_id':'$brand_id','brand':'$brand'},'count':{'$sum':1}}
1178
                                                                  }
1179
                                                                ])
1180
 
1181
        allDeals = get_mongo_connection().Catalog.Deals.aggregate([
16170 kshitij.so 1182
                                                                   {"$match":{"showDeal":1,"totalPoints":{"$gt":-100}}
14997 kshitij.so 1183
                                                                    },
1184
                                                                 {"$group" : 
1185
                                                                  {'_id':{'brand_id':'$brand_id','brand':'$brand'},'count':{'$sum':1}}
1186
                                                                  }
1187
                                                                ])
1188
        #print mobileDeals
1189
        #print "==========Mobile data ends=========="
1190
 
1191
        #print tabletDeals
1192
        #print "==========Tablet data ends=========="
1193
 
1194
        #print allDeals
1195
        #print "==========All deal data ends========="
1196
 
1197
        for mobileDeal in mobileDeals['result']:
1198
            if mobileDeal.get('_id').get('brand_id') != 0:
1199
                tempMap = {}
1200
                tempMap['brand'] = mobileDeal.get('_id').get('brand')
1201
                tempMap['brand_id'] = mobileDeal.get('_id').get('brand_id')
1202
                tempMap['count'] = mobileDeal.get('count')
1203
                mobData.append(tempMap)
1204
 
1205
        for tabletDeal in tabletDeals['result']:
1206
            if tabletDeal.get('_id').get('brand_id') != 0:
1207
                tempMap = {}
1208
                tempMap['brand'] = tabletDeal.get('_id').get('brand')
1209
                tempMap['brand_id'] = tabletDeal.get('_id').get('brand_id')
1210
                tempMap['count'] = tabletDeal.get('count')
1211
                tabData.append(tempMap)
1212
 
1213
 
1214
        brandMap = {}
1215
        for allDeal in allDeals['result']:
1216
            if allDeal.get('_id').get('brand_id') != 0:
1217
                if brandMap.has_key(allDeal.get('_id').get('brand')):
15002 kshitij.so 1218
                    brand_ids = brandMap.get(allDeal.get('_id').get('brand')).get('brand_ids')
14997 kshitij.so 1219
                    brand_ids.append(allDeal.get('_id').get('brand_id'))
15003 kshitij.so 1220
                    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 1221
                else:
1222
                    temp = []
1223
                    temp.append(allDeal.get('_id').get('brand_id'))
15002 kshitij.so 1224
                    brandMap[allDeal.get('_id').get('brand')] = {'brand_ids':temp,'count':allDeal.get('count')}
14997 kshitij.so 1225
 
1226
        mc.set("brandFilter",{0:brandMap, 3:mobData, 5:tabData}, 600)  
1227
 
15062 kshitij.so 1228
    return sorted(mc.get("brandFilter").get(category_id), key = lambda x: (-x['count'], x['brand']))
15375 kshitij.so 1229
 
15459 kshitij.so 1230
def getStaticDeals(offset, limit, category_id, direction):
15375 kshitij.so 1231
    user_specific_deals = mc.get("staticDeals")
1232
    if user_specific_deals is None:
1233
        __populateStaticDeals()
1234
        user_specific_deals = mc.get("staticDeals")
15459 kshitij.so 1235
    rev = False
1236
    if direction is None or direction == -1:
1237
        rev=True
1238
    return sorted((user_specific_deals.get(category_id))[offset:offset+limit],reverse=rev)
15375 kshitij.so 1239
 
1240
def __populateStaticDeals():
1241
    print "Populating memcache for static deals"
1242
    outer_query = []
1243
    outer_query.append({"showDeal":1})
1244
    query = {}
16170 kshitij.so 1245
    query['$gt'] = -100
15375 kshitij.so 1246
    outer_query.append({'totalPoints':query})
1247
    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)]))
1248
    mobile_deals = []
1249
    tablet_deals = []
1250
    for deal in all_deals:
1251
        item = get_mongo_connection().Catalog.MasterData.find({'_id':deal['_id']})
1252
        if deal['category_id'] ==3:
1253
            mobile_deals.append(getItemObjForStaticDeals(item[0]))
1254
        elif deal['category_id'] ==5:
1255
            tablet_deals.append(getItemObjForStaticDeals(item[0]))
1256
        else:
1257
            continue
1258
 
1259
    random.shuffle(mobile_deals,random.random)
1260
    random.shuffle(tablet_deals,random.random)
1261
 
1262
    mem_cache_val = {3:mobile_deals, 5:tablet_deals}
1263
    mc.set("staticDeals", mem_cache_val, 3600)
1264
 
1265
def getItemObjForStaticDeals(item):
15379 kshitij.so 1266
    return {'marketPlaceUrl':item.get('marketPlaceUrl'),'available_price':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 1267
 
1268
def getItemByMerchantIdentifier(identifier, source_id):
1269
    skuData = None
16406 kshitij.so 1270
    if source_id in (1,2,4,5,6):
16300 manas 1271
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'identifier':identifier.strip(), 'source_id':source_id})
1272
    elif source_id == 3:
1273
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'secondaryIdentifier':identifier.strip(), 'source_id':source_id})
1274
    if skuData is None:
1275
        return {}
1276
    else:
1277
        return skuData
15375 kshitij.so 1278
 
16364 kshitij.so 1279
def getDealsForNotification(skuBundleIds):
1280
    bundles= [int(skuBundleId) for skuBundleId in skuBundleIds.split(',')]
1281
    print bundles
16406 kshitij.so 1282
    dealsList = []
16364 kshitij.so 1283
    dealsListMap = []
16406 kshitij.so 1284
    for bundleId in bundles:
1285
        outer_query = []
1286
        outer_query.append({ "$or": [ { "showDeal": 1} , { "prepaidDeal": 1 } ] })
1287
        outer_query.append({'skuBundleId':bundleId})
1288
        deals = get_mongo_connection().Catalog.Deals.find({"$and":outer_query})
1289
        for deal in deals:
1290
            dealsList.append(deal)
16364 kshitij.so 1291
    sortedMap = {}
1292
    rankMap = {}
1293
    rank = 0
16406 kshitij.so 1294
    for sorted_deal in dealsList:
16364 kshitij.so 1295
        if sortedMap.get(sorted_deal['skuBundleId']) is None:
1296
            sortedMap[sorted_deal['skuBundleId']] = {rank:[sorted_deal]}
1297
            rankMap[rank] = (sortedMap[sorted_deal['skuBundleId']].values())[0]
1298
            rank = rank +1
1299
        else:
1300
            for temp_list in sortedMap.get(sorted_deal['skuBundleId']).itervalues():
1301
                temp_list.append(sorted_deal)
1302
            rankMap[(sortedMap.get(sorted_deal['skuBundleId']).keys())[0]] = temp_list
1303
 
16367 kshitij.so 1304
    for dealList in [rankMap.get(k, []) for k in range(0, len(bundles))]:
16364 kshitij.so 1305
        temp = []
1306
        for d in dealList:
1307
            item = list(get_mongo_connection().Catalog.MasterData.find({'_id':d['_id']}))
1308
            if len(item) ==0:
1309
                continue
1310
            if d['dealType'] == 1 and d['source_id'] ==1:
1311
                item[0]['marketPlaceUrl'] = "http://www.amazon.in/dp/%s"%(item[0]['identifier'].strip())
1312
            elif d['source_id'] ==3:
1313
                item[0]['marketPlaceUrl'] = item[0]['marketPlaceUrl']+'?supc='+item[0].get('identifier')
1314
            else:
1315
                pass 
1316
            try:
1317
                cashBack = getCashBack(item[0]['_id'], item[0]['source_id'], item[0]['category_id'])
1318
                if not cashBack or cashBack.get('cash_back_status')!=1:
1319
                    item[0]['cash_back_type'] = 0
1320
                    item[0]['cash_back'] = 0
1321
                else:
1322
                    item[0]['cash_back_type'] = int(cashBack['cash_back_type'])
1323
                    item[0]['cash_back'] = cashBack['cash_back']
1324
            except:
1325
                print "Error in adding cashback to deals"
1326
                item[0]['cash_back_type'] = 0
1327
                item[0]['cash_back'] = 0
1328
            try:
1329
                item[0]['dp'] = d['dp']
1330
                item[0]['showDp'] = d['showDp']
1331
            except:
1332
                item[0]['dp'] = 0.0
1333
                item[0]['showDp'] = 0
1334
            temp.append(item[0])
1335
        if len(temp) > 1:
1336
            temp = sorted(temp, key = lambda x: (x['available_price']),reverse=False)
1337
        dealsListMap.append(temp)
1338
    return dealsListMap
1339
 
16373 manas 1340
def getSkuBrandData(sku):
1341
    if sku is None:
1342
        return {}
1343
    else:
1344
        orders = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':sku})
1345
        if orders is None:
1346
            return {}
1347
        return orders
16488 kshitij.so 1348
 
1349
def addDealPoints(data):
1350
    collection = get_mongo_connection().Catalog.DealPoints
1351
    cursor = collection.find({'skuBundleId':data['skuBundleId']})
1352
    if cursor.count() > 0:
1353
        return {0:"Sku information already present."}
1354
    else:
1355
        collection.insert(data)
1356
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
1357
        return {1:"Data added successfully"}
1358
 
1359
def getAllBundlesWithDealPoints(offset, limit):
1360
    data = []
1361
    collection = get_mongo_connection().Catalog.DealPoints
1362
    cursor = collection.find().sort([('endDate',pymongo.DESCENDING)]).skip(offset).limit(limit)
1363
    for val in cursor:
1364
        master = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':val.get('skuBundleId')})
1365
        if master is not None:
1366
            val['brand'] = master['brand']
1367
            val['source_product_name'] = master['product_name']
1368
        else:
1369
            val['brand'] = ""
1370
            val['source_product_name'] = ""
1371
        data.append(val)
1372
    return data
16546 kshitij.so 1373
 
1374
def generateRedirectUrl(retailer_id, app_id):
1375
    try:
1376
        d_app_offer = app_offers.get_by(id=app_id)
1377
    finally:
1378
        session.close()
1379
    if d_app_offer is None:
1380
        return {'url':"","message":"App id doesn't exist"}
16364 kshitij.so 1381
 
16553 kshitij.so 1382
    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)
16546 kshitij.so 1383
 
1384
    get_mongo_connection().AppOrder.AppTransaction.insert(appTransactions.__dict__)
1385
    embedd = str((appTransactions.__dict__).get('_id'))
16548 kshitij.so 1386
    try:
1387
        index = d_app_offer.link.index(".freeb.co.in")
1388
    except:
1389
        return {'url':"","message":"Substring not found"}
1390
    redirect_url = d_app_offer.link[0:index]+"."+embedd+d_app_offer.link[index:]
16546 kshitij.so 1391
    get_mongo_connection().AppOrder.AppTransaction.update({'_id':ObjectId(embedd)},{"$set":{'redirect_url':redirect_url}})
16548 kshitij.so 1392
    return {'url':redirect_url,"message":"Success"}
16556 kshitij.so 1393
 
1394
def addPayout(payout, transaction_id):
1395
    try:
1396
        transaction = list(get_mongo_connection().AppOrder.AppTransaction.find({'_id':ObjectId(transaction_id)}))
1397
        if len(transaction) > 0:
1398
            if (transaction[0])['payout_status'] ==1:
1399
                get_mongo_connection().AppOrder.AppTransaction.update({'_id':ObjectId(transaction_id)},{"$set":{'payout_amount':float(payout), 'payout_description': CB_APPROVED,'payout_status':2}})
1400
                return {'status':'ok','message':'Payout updated'}
1401
            elif (transaction[0])['payout_status'] ==2:
1402
                return {'status':'ok','message':'Payout already processed'}
1403
            else:
1404
                return {'status':'fail','message':'Something is wrong'}
1405
        else:
1406
            return {'status':'fail','message':'transaction_id not found'}
1407
    except:
1408
        return {'status':'fail','message':'transaction_id not found'}
1409
 
16546 kshitij.so 1410
 
1411
 
1412
 
13572 kshitij.so 1413
def main():
16556 kshitij.so 1414
    #generateRedirectUrl(101,1
1415
    print addPayout("10", "55db82c0bcabd7fc59e0a71")
13811 kshitij.so 1416
 
13921 kshitij.so 1417
 
15375 kshitij.so 1418
 
13572 kshitij.so 1419
if __name__=='__main__':
13932 amit.gupta 1420
    main()