Subversion Repositories SmartDukaan

Rev

Rev 22261 | Rev 22266 | 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
19451 manas 4
from dtr.dao import FeaturedDeals, AppTransactions, AppOfferObj, Promotion, NotificationCampaign,CrmRefundWallet
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, \
19577 manas 8
    user_app_installs, appmasters, notification_campaigns, user_accounts
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, \
19556 manas 12
    to_py_date, CB_REJECTED, SUB_CATEGORY_MAP,CREDIT_TYPE_REFUND,CREDIT_TYPE_OFFER,CREDIT_TYPE_ADJUSTMENT,REFUND_ADJUSTMENT_MAP, todict,REVERSE_SOURCE_MAP,\
19654 kshitij.so 13
    get_mongo_connection_dtr_data, SUB_CATEGORY_HEADER_RANKING
16894 manish.sha 14
from sqlalchemy.sql.expression import func, func, or_, desc, asc, case
14305 amit.gupta 15
from elixir import *
16
from operator import itemgetter
16789 amit.gupta 17
from pymongo.command_cursor import CommandCursor
14305 amit.gupta 18
import pymongo
16398 amit.gupta 19
import random
14322 kshitij.so 20
import re
16789 amit.gupta 21
import time
14791 kshitij.so 22
import traceback
16894 manish.sha 23
from itertools import groupby
17280 manish.sha 24
import urllib
25
import urllib2
26
import json
17367 kshitij.so 27
import collections
19451 manas 28
from string import lower
17367 kshitij.so 29
try:
30
    import ordereddict
31
except:
32
    pass
13572 kshitij.so 33
 
18830 kshitij.so 34
 
35
import bson.son as son
19207 kshitij.so 36
import math
37
 
13572 kshitij.so 38
con = None
17944 kshitij.so 39
es = None
18052 kshitij.so 40
try:
41
    from elasticsearch import Elasticsearch
42
except:
43
    pass
17936 kshitij.so 44
from shop2020.config.client.ConfigClient import ConfigClient
13572 kshitij.so 45
 
21889 kshitij.so 46
DataService.initialize()
16304 amit.gupta 47
mc = MemCache("127.0.0.1")
17936 kshitij.so 48
config_client = ConfigClient()
49
elastic_search_host = config_client.get_property('elastic_search_host')
50
elastic_search_port = config_client.get_property('elastic_search_port')
14037 kshitij.so 51
 
17936 kshitij.so 52
 
17944 kshitij.so 53
 
17035 kshitij.so 54
SOURCE_MAP = {1:'AMAZON',2:'FLIPKART',3:'SNAPDEAL',4:'SAHOLIC',5:"SHOPCLUES.COM",6:"PAYTM.COM",7:"HOMESHOP18.COM"}
22256 amit.gupta 55
ONLINE_DEAL_SOURCE_MAP = {1:'AMAZON',2:'FLIPKART',3:'SNAPDEAL',5:"SHOPCLUES.COM",6:"PAYTM.COM",7:"HOMESHOP18.COM"}
14482 kshitij.so 56
 
15853 kshitij.so 57
COLLECTION_MAP = {
58
                  'ExceptionalNlc':'skuBundleId',
59
                  'SkuDealerPrices':'skuBundleId',
60
                  'SkuDiscountInfo':'skuBundleId',
61
                  'SkuSchemeDetails':'skuBundleId',
17367 kshitij.so 62
                  'DealPoints':'skuBundleId',
63
                  'FeaturedDeals': 'skuBundleId'
15853 kshitij.so 64
                  }
65
 
19337 manish.sha 66
 
17944 kshitij.so 67
def get_elastic_search_connection():
68
    global es
69
    if es is None:
70
        print "Establishing connection with elastic search %s host and port %s"%(elastic_search_host,elastic_search_port)
71
        es = Elasticsearch([{'host': elastic_search_host, 'port': elastic_search_port}])
72
        return es
73
    return es
74
 
75
 
13572 kshitij.so 76
def get_mongo_connection(host='localhost', port=27017):
77
    global con
78
    if con is None:
79
        print "Establishing connection %s host and port %d" %(host,port)
80
        try:
81
            con = pymongo.MongoClient(host, port)
82
        except Exception, e:
83
            print e
84
            return None
85
    return con
86
 
13907 kshitij.so 87
def populateCashBack():
13921 kshitij.so 88
    print "Populating cashback"
89
    cashBackMap = {}
90
    itemCashBackMap = {}
13907 kshitij.so 91
    cashBack = list(get_mongo_connection().Catalog.CategoryCashBack.find())
92
    for row in cashBack:
13970 kshitij.so 93
        temp_map = {}
94
        temp_list = []
13907 kshitij.so 95
        if cashBackMap.has_key(row['source_id']):
96
            arr = cashBackMap.get(row['source_id'])
97
            for val in arr:
98
                temp_list.append(val)
99
            temp_map[row['category_id']] = row
100
            temp_list.append(temp_map)
101
            cashBackMap[row['source_id']] = temp_list 
102
        else:
103
            temp_map[row['category_id']] = row
104
            temp_list.append(temp_map)
105
            cashBackMap[row['source_id']] = temp_list
13921 kshitij.so 106
    itemCashBack = list(get_mongo_connection().Catalog.ItemCashBack.find())
107
    for row in itemCashBack:
20434 kshitij.so 108
        if not itemCashBackMap.has_key(row['sku']):
109
            itemCashBackMap[row['sku']] = row
14761 kshitij.so 110
    mc.set("item_cash_back", itemCashBackMap, 24 * 60 * 60)
111
    mc.set("category_cash_back", cashBackMap, 24 * 60 * 60)
13907 kshitij.so 112
 
13572 kshitij.so 113
def addCategoryDiscount(data):
13970 kshitij.so 114
    collection = get_mongo_connection().Catalog.CategoryDiscount
13572 kshitij.so 115
    query = []
116
    data['brand'] = data['brand'].strip().upper()
13970 kshitij.so 117
    data['discountType'] = data['discountType'].upper().strip()
13572 kshitij.so 118
    query.append({"brand":data['brand']})
119
    query.append({"category_id":data['category_id']})
120
    r = collection.find({"$and":query})
121
    if r.count() > 0:
13639 kshitij.so 122
        return {0:"Brand & Category info already present."}
13572 kshitij.so 123
    else:
124
        collection.insert(data)
13970 kshitij.so 125
        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 126
        return {1:"Data added successfully"}
13572 kshitij.so 127
 
13970 kshitij.so 128
def updateCategoryDiscount(data,_id):
129
    try:
130
        collection = get_mongo_connection().Catalog.CategoryDiscount
131
        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)
132
        get_mongo_connection().Catalog.MasterData.update({'brand':data['brand'],'category_id':data['category_id']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
133
        return {1:"Data updated successfully"}
134
    except:
135
        return {0:"Data not updated."}
136
 
137
 
13572 kshitij.so 138
def getAllCategoryDiscount():
139
    data = []
13970 kshitij.so 140
    collection = get_mongo_connection().Catalog.CategoryDiscount
13572 kshitij.so 141
    cursor = collection.find()
142
    for val in cursor:
143
        data.append(val)
144
    return data
145
 
14553 kshitij.so 146
def __getBundledSkusfromSku(sku):
147
    masterData =  get_mongo_connection().Catalog.MasterData.find_one({"_id":sku},{"skuBundleId":1})
148
    if masterData is not None:
149
        return list(get_mongo_connection().Catalog.MasterData.find({"skuBundleId":masterData.get('skuBundleId')},{'_id':1,'skuBundleId':1}))
150
    else:
151
        return []
13572 kshitij.so 152
 
15853 kshitij.so 153
def addSchemeDetailsForSku(data):
154
    collection = get_mongo_connection().Catalog.SkuSchemeDetails
155
    result = collection.find_one({'skuBundleId':data['skuBundleId']})
156
    if result is None:
14553 kshitij.so 157
        collection.insert(data)
15853 kshitij.so 158
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
14553 kshitij.so 159
        return {1:"Data added successfully"}
15853 kshitij.so 160
    return {1:"BundleId info already present"}
161
 
14069 kshitij.so 162
def getAllSkuWiseSchemeDetails(offset, limit):
13572 kshitij.so 163
    data = []
13970 kshitij.so 164
    collection = get_mongo_connection().Catalog.SkuSchemeDetails
14071 kshitij.so 165
    cursor = collection.find().skip(offset).limit(limit)
13572 kshitij.so 166
    for val in cursor:
15853 kshitij.so 167
        master = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':val['skuBundleId']})
168
        if master is not None:
169
            val['brand'] = master['brand']
170
            val['source_product_name'] = master['source_product_name']
14069 kshitij.so 171
        else:
172
            val['brand'] = ""
173
            val['source_product_name'] = ""
13572 kshitij.so 174
        data.append(val)
175
    return data
176
 
15853 kshitij.so 177
def addSkuDiscountInfo(data):
178
    collection = get_mongo_connection().Catalog.SkuDiscountInfo
179
    cursor = collection.find_one({"skuBundleId":data['skuBundleId']})
180
    if cursor is not None:
181
        return {0:"BundleId information already present."}
13572 kshitij.so 182
    else:
15853 kshitij.so 183
        collection.insert(data)
184
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
13639 kshitij.so 185
        return {1:"Data added successfully"}
13572 kshitij.so 186
 
13970 kshitij.so 187
def getallSkuDiscountInfo(offset, limit):
13572 kshitij.so 188
    data = []
13970 kshitij.so 189
    collection = get_mongo_connection().Catalog.SkuDiscountInfo
190
    cursor = collection.find().skip(offset).limit(limit)
13572 kshitij.so 191
    for val in cursor:
15853 kshitij.so 192
        master = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':val['skuBundleId']})
193
        if master is not None:
194
            val['brand'] = master['brand']
195
            val['source_product_name'] = master['source_product_name']
13970 kshitij.so 196
        else:
197
            val['brand'] = ""
198
            val['source_product_name'] = ""
13572 kshitij.so 199
        data.append(val)
200
    return data
201
 
13970 kshitij.so 202
def updateSkuDiscount(data,_id):
203
    try:
204
        collection = get_mongo_connection().Catalog.SkuDiscountInfo
205
        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 206
        get_mongo_connection().Catalog.MasterData.update({'_id':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
13970 kshitij.so 207
        return {1:"Data updated successfully"}
208
    except:
209
        return {0:"Data not updated."}
210
 
211
 
15853 kshitij.so 212
def addExceptionalNlc(data):
213
    collection = get_mongo_connection().Catalog.ExceptionalNlc
214
    cursor = collection.find_one({"skuBundleId":data['skuBundleId']})
215
    if cursor is not None:
216
        return {0:"BundleId information already present."}
13572 kshitij.so 217
    else:
15853 kshitij.so 218
        collection.insert(data)
219
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
13639 kshitij.so 220
        return {1:"Data added successfully"}
13572 kshitij.so 221
 
13970 kshitij.so 222
def getAllExceptionlNlcItems(offset, limit):
13572 kshitij.so 223
    data = []
13970 kshitij.so 224
    collection = get_mongo_connection().Catalog.ExceptionalNlc
14071 kshitij.so 225
    cursor = collection.find().skip(offset).limit(limit)
13572 kshitij.so 226
    for val in cursor:
15853 kshitij.so 227
        master = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':val['skuBundleId']})
228
        if master is not None:
229
            val['brand'] = master['brand']
230
            val['source_product_name'] = master['source_product_name']
13970 kshitij.so 231
        else:
232
            val['brand'] = ""
233
            val['source_product_name'] = ""
13572 kshitij.so 234
        data.append(val)
235
    return data
236
 
14005 amit.gupta 237
def getMerchantOrdersByUser(userId, page=1, window=50, searchMap={}):
238
    if searchMap is None:
239
        searchMap = {}
13603 amit.gupta 240
    if page==None:
241
        page = 1
242
 
243
    if window==None:
244
        window = 50
245
    result = {}
13582 amit.gupta 246
    skip = (page-1)*window
14005 amit.gupta 247
 
14353 amit.gupta 248
    if userId is not None:
249
        searchMap['userId'] = userId
13603 amit.gupta 250
    collection = get_mongo_connection().Dtr.merchantOrder
14609 amit.gupta 251
    cursor = collection.find(searchMap).sort("orderId",-1)
13603 amit.gupta 252
    total_count = cursor.count()
253
    pages = total_count/window + (0 if total_count%window==0 else 1)  
254
    print "total_count", total_count
255
    if total_count > skip:
13999 amit.gupta 256
        cursor = cursor.skip(skip).limit(window)
13603 amit.gupta 257
        orders = []
258
        for order in cursor:
14002 amit.gupta 259
            del(order["_id"])
260
            orders.append(order)
13603 amit.gupta 261
        result['data'] = orders
262
        result['window'] = window
263
        result['totalCount'] = total_count 
264
        result['currCount'] = cursor.count()
265
        result['totalPages'] = pages
266
        result['currPage'] = page    
267
        return result
268
    else:
269
        return result
13630 kshitij.so 270
 
13927 amit.gupta 271
def getRefunds(userId, page=1, window=10):
272
    if page==None:
273
        page = 1
274
 
275
    if window==None:
13995 amit.gupta 276
        window = 10
13927 amit.gupta 277
    result = {}
278
    skip = (page-1)*window
16737 amit.gupta 279
    con = get_mongo_connection()
280
    collection = con.Dtr.refund
281
    user = con.Dtr.user
16754 amit.gupta 282
    credited = user.find_one({"userId":userId})
283
    if credited:
284
        credited = credited.get("credited")
285
    else:
286
        credited=0
287
 
13927 amit.gupta 288
    cursor = collection.find({"userId":userId})
289
    total_count = cursor.count()
290
    pages = total_count/window + (0 if total_count%window==0 else 1)  
291
    print "total_count", total_count
292
    if total_count > skip:
14668 amit.gupta 293
        cursor = cursor.skip(skip).limit(window).sort([('batch',-1)])
13927 amit.gupta 294
        refunds = []
295
        for refund in cursor:
296
            del(refund["_id"])
19511 manas 297
            if (refund["type"]) == CREDIT_TYPE_REFUND:
19493 manas 298
                batchDetails = fetchCrmRefundByBatchId(refund["batch"])
299
                referenceNumber = batchDetails.get('reference_no')                
19511 manas 300
                refund["description"] = "Refunded against Saholic order #%s"%(referenceNumber)
301
            elif (refund["type"]) == CREDIT_TYPE_ADJUSTMENT:
19493 manas 302
                batchDetails = fetchCrmRefundByBatchId(refund["batch"])
303
                referenceNumber = batchDetails.get('reference_no')
19517 manas 304
                referenceStore = REVERSE_SOURCE_MAP.get(batchDetails.get('store'))
19784 manas 305
                refund["description"] = "Adjusted against %s order #%s"%(referenceStore,referenceNumber)
306
            elif (refund["type"]) == CREDIT_TYPE_OFFER:
307
                refund["description"] = "April Accessories Cashback Offer"                
19493 manas 308
            else:
309
                refund["description"] = ""
13927 amit.gupta 310
            refunds.append(refund)
16754 amit.gupta 311
        result['credited'] = credited
13927 amit.gupta 312
        result['data'] = refunds
313
        result['window'] = window
314
        result['totalCount'] = total_count 
315
        result['currCount'] = cursor.count()
316
        result['totalPages'] = pages
317
        result['currPage'] = page    
318
        return result
319
    else:
320
        return result
321
 
322
def getPendingRefunds(userId):
13991 amit.gupta 323
    print type(userId)
13927 amit.gupta 324
    result = get_mongo_connection().Dtr.merchantOrder\
325
        .aggregate([
16398 amit.gupta 326
                    {'$match':{'subOrders.cashBackStatus':CB_APPROVED, 'userId':userId}},
13927 amit.gupta 327
                    {'$unwind':"$subOrders"},
16398 amit.gupta 328
                    {'$match':{'subOrders.cashBackStatus':CB_APPROVED}},
13927 amit.gupta 329
                    { 
330
                     '$group':{
331
                               '_id':None,
332
                               'amount': { '$sum':'$subOrders.cashBackAmount'},
333
                               }
334
                     }
13987 amit.gupta 335
                ])['result']
336
 
337
    if len(result)>0:
338
        result = result[0]        
339
        result.pop("_id")
340
    else:
341
        result={}
342
        result['amount'] = 0.0
14305 amit.gupta 343
    result['nextCredit'] = datetime.strftime(next_weekday(datetime.now(), int(PythonPropertyReader.getConfig('CREDIT_DAY_OF_WEEK'))),"%Y-%m-%d %H:%M:%S")
13927 amit.gupta 344
    return result
14037 kshitij.so 345
 
14671 amit.gupta 346
def getPendingCashbacks(userId):
347
    result = get_mongo_connection().Dtr.merchantOrder\
348
        .aggregate([
16398 amit.gupta 349
                    {'$match':{'subOrders.cashBackStatus':CB_PENDING, 'userId':userId}},
14671 amit.gupta 350
                    {'$unwind':"$subOrders"},
16398 amit.gupta 351
                    {'$match':{'subOrders.cashBackStatus':CB_PENDING}},
14671 amit.gupta 352
                    { 
353
                     '$group':{
354
                               '_id':None,
355
                               'amount': { '$sum':'$subOrders.cashBackAmount'},
356
                               }
357
                     }
358
                ])['result']
359
 
360
    if len(result)>0:
361
        result = result[0]        
362
        result.pop("_id")
363
    else:
364
        result={}
365
        result['amount'] = 0.0
366
    return result
367
 
17369 kshitij.so 368
def __constructDummyDealObject(skuBundleId):
369
    temp =[]
19193 kshitij.so 370
    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,'subCategoryId':1,'netPriceAfterCashBack':1})
17369 kshitij.so 371
    for d in deals:
372
        d['persPoints'] = 0
19575 kshitij.so 373
        d['dealRankPoints'] = 0
17369 kshitij.so 374
        temp.append(d)
375
    return temp
376
 
377
 
378
 
14037 kshitij.so 379
def __populateCache(userId):
17369 kshitij.so 380
    try:
381
        if mc.get("featured_deals") is None:
382
            __populateFeaturedDeals()
383
        featuredDeals = mc.get("featured_deals")
384
 
385
    except Exception as e:
386
        print traceback.print_exc()
17469 kshitij.so 387
        featuredDeals = {3:{},5:{},6:{}}
17369 kshitij.so 388
 
19559 kshitij.so 389
 
22240 amit.gupta 390
    #Not taking accessories into account
19559 kshitij.so 391
    featuredDeals.pop(6,None)
19597 kshitij.so 392
    print featuredDeals
19559 kshitij.so 393
 
17369 kshitij.so 394
    fd_bundles = []
395
 
396
    for catMap in featuredDeals.itervalues():
397
        for fd_map in catMap.itervalues():
17541 kshitij.so 398
            if not fd_map.get('skuBundleId') in fd_bundles:
399
                fd_bundles.append(fd_map.get('skuBundleId'))
17369 kshitij.so 400
 
14037 kshitij.so 401
    print "Populating memcache for userId",userId
402
    outer_query = []
16067 kshitij.so 403
    outer_query.append({ "$or": [ { "showDeal": 1} , { "prepaidDeal": 1 } ] })
14037 kshitij.so 404
    query = {}
16170 kshitij.so 405
    query['$gt'] = -100
14037 kshitij.so 406
    outer_query.append({'totalPoints':query})
19559 kshitij.so 407
    outer_query.append({'category_id':{"$in":[3,5]}})
14037 kshitij.so 408
    brandPrefMap = {}
409
    pricePrefMap = {}
410
    actionsMap = {}
19596 kshitij.so 411
    try:
412
        brand_p = session.query(price_preferences).filter_by(user_id=userId).all()
413
        for x in brand_p:
414
            pricePrefMap[x.category_id] = [x.min_price,x.max_price]
415
        for x in session.query(brand_preferences).filter_by(user_id=userId).all():
416
            temp_map = {}
417
            if brandPrefMap.has_key((x.brand).strip().upper()):
418
                val = brandPrefMap.get((x.brand).strip().upper())
419
                temp_map[x.category_id] = 1 if x.status == 'show' else 0
420
                val.append(temp_map)
421
            else:
422
                temp = []
423
                temp_map[x.category_id] = 1 if x.status == 'show' else 0
424
                temp.append(temp_map)
425
                brandPrefMap[(x.brand).strip().upper()] = temp
426
 
427
        for x in session.query(user_actions).filter_by(user_id=userId).all():
428
            actionsMap[x.store_product_id] = 1 if x.action == 'like' else 0
429
    except:
430
        pass
431
    finally:
432
        session.close()
19575 kshitij.so 433
 
19193 kshitij.so 434
    all_deals = list(get_mongo_connection().Catalog.Deals.find({"$and":outer_query},{'_id':1,'category_id':1,'brand':1,'totalPoints':1,'bestSellerPoints':1,'nlcPoints':1,'rank':1,'available_price':1,'dealType':1,'source_id':1,'brand_id':1,'skuBundleId':1,'dp':1, 'showDp':1, 'gross_price':1, 'subCategoryId':1,'netPriceAfterCashBack':1}).sort([('totalPoints',pymongo.DESCENDING),('bestSellerPoints',pymongo.DESCENDING),('nlcPoints',pymongo.DESCENDING),('rank',pymongo.DESCENDING)]))
14037 kshitij.so 435
    mobile_deals = []
436
    tablet_deals = []
19559 kshitij.so 437
    #accessories_deals = []
14037 kshitij.so 438
    for deal in all_deals:
19135 kshitij.so 439
 
17369 kshitij.so 440
        try:
441
            fd_bundles.remove(deal.get('skuBundleId'))
442
        except:
443
            pass
444
 
14037 kshitij.so 445
        if actionsMap.get(deal['_id']) == 0:
446
            fav_weight =.25
447
        elif actionsMap.get(deal['_id']) == 1:
448
            fav_weight = 1.5
449
        else:
450
            fav_weight = 1
451
 
452
        if brandPrefMap.get(deal['brand'].strip().upper()) is not None:
17469 kshitij.so 453
 
14037 kshitij.so 454
            brand_weight = 1
455
            for brandInfo in brandPrefMap.get(deal['brand'].strip().upper()):
456
                if brandInfo.get(deal['category_id']) is not None:
457
                    if brandInfo.get(deal['category_id']) == 1:
14055 kshitij.so 458
                        brand_weight = 2.0
14037 kshitij.so 459
        else:
460
            brand_weight = 1
461
 
462
        if pricePrefMap.get(deal['category_id']) is not None:
463
 
464
            if deal['available_price'] >= pricePrefMap.get(deal['category_id'])[0] and deal['available_price'] <= pricePrefMap.get(deal['category_id'])[1]:
465
                asp_weight = 1.5
466
            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]:
467
                asp_weight = 1.2
468
            else:
469
                asp_weight = 1
470
        else:
471
            asp_weight = 1
472
 
473
        persPoints = deal['totalPoints'] * fav_weight * brand_weight * asp_weight
474
        deal['persPoints'] = persPoints
475
 
476
        if deal['category_id'] ==3:
477
            mobile_deals.append(deal)
478
        elif deal['category_id'] ==5:
479
            tablet_deals.append(deal)
19559 kshitij.so 480
        #elif deal['category_id'] ==6:
481
        #    accessories_deals.append(deal)
14037 kshitij.so 482
        else:
483
            continue
484
 
17367 kshitij.so 485
    mobile_deals = sorted(mobile_deals, key = lambda x: (x['persPoints'],x['totalPoints'],x['bestSellerPoints'], x['nlcPoints'], x['rank']),reverse=True)
486
    tablet_deals = sorted(tablet_deals, key = lambda x: (x['persPoints'],x['totalPoints'],x['bestSellerPoints'], x['nlcPoints'], x['rank']),reverse=True)
19559 kshitij.so 487
    #accessories_deals = sorted(accessories_deals, key = lambda x: (x['persPoints'],x['totalPoints'],x['bestSellerPoints'], x['nlcPoints'], x['rank']),reverse=True)
17367 kshitij.so 488
 
489
 
17369 kshitij.so 490
    if len(fd_bundles) > 0:
491
        print "There is still bundle in feature deals with points less than -100.Lets add info"
492
        for skuBundleId in fd_bundles:
493
            dummyDealObjList = __constructDummyDealObject(skuBundleId)
494
            for dummyDealObj in dummyDealObjList:
495
                if dummyDealObj['category_id'] ==3:
496
                    mobile_deals.append(dummyDealObj)
497
                elif dummyDealObj['category_id'] ==5:
498
                    tablet_deals.append(dummyDealObj)
19559 kshitij.so 499
                #elif dummyDealObj['category_id'] ==6:
500
                #    accessories_deals.append(dummyDealObj)
17369 kshitij.so 501
                else:
502
                    pass
503
 
17469 kshitij.so 504
    for super_category, categoryFeaturedDeals in featuredDeals.iteritems():
505
        for val in categoryFeaturedDeals.itervalues():
506
            dummyDealObjList = __constructDummyDealObject(val.get('skuBundleId'))
507
            for dummyDealObj in dummyDealObjList:
508
                if super_category == dummyDealObj['category_id']:
509
                    continue  
510
 
511
                if super_category ==3:
512
                    mobile_deals.append(dummyDealObj)
513
                elif super_category ==5:
514
                    tablet_deals.append(dummyDealObj)
19559 kshitij.so 515
                #elif super_category ==6:
516
                #    accessories_deals.append(dummyDealObj)
17469 kshitij.so 517
                else:
518
                    pass
519
 
17367 kshitij.so 520
    sortedMapMobiles = {}
521
    rankMapMobiles = {}
522
    rankMobiles = 0
523
 
524
    blockedRanksMobiles = []
525
    blockedSkuBundlesMobiles = []
526
    blockedInfoMobiles = {}
527
 
528
    featuredDealsMobiles = featuredDeals.get(3)
529
 
530
    for k, v in featuredDealsMobiles.iteritems():
17469 kshitij.so 531
        blockedRanksMobiles.append(k-1)
532
        blockedSkuBundlesMobiles.append(v.get('skuBundleId'))
17367 kshitij.so 533
 
534
 
535
    for sorted_deal in mobile_deals:
17369 kshitij.so 536
 
17367 kshitij.so 537
        while(True):
538
            if rankMobiles in blockedRanksMobiles:
539
                rankMobiles = rankMobiles +1
540
            else:
541
                break
542
 
543
        if sorted_deal['skuBundleId'] in blockedSkuBundlesMobiles:
544
            if blockedInfoMobiles.has_key(sorted_deal['skuBundleId']):
545
                blockedInfoMobiles.get(sorted_deal['skuBundleId']).append(sorted_deal)
546
            else:
547
                blockedInfoMobiles[sorted_deal['skuBundleId']] = [sorted_deal]
548
            continue
549
 
550
        if sortedMapMobiles.get(sorted_deal['skuBundleId']) is None:
551
            sortedMapMobiles[sorted_deal['skuBundleId']] = {rankMobiles:[sorted_deal]}
552
            rankMapMobiles[rankMobiles] = (sortedMapMobiles[sorted_deal['skuBundleId']].values())[0]
553
            rankMobiles = rankMobiles +1
554
        else:
555
            for temp_list in sortedMapMobiles.get(sorted_deal['skuBundleId']).itervalues():
556
                temp_list.append(sorted_deal)
557
            rankMapMobiles[(sortedMapMobiles.get(sorted_deal['skuBundleId']).keys())[0]] = temp_list
558
 
559
 
560
    for rank in blockedRanksMobiles:
17369 kshitij.so 561
        if blockedInfoMobiles.get((featuredDealsMobiles.get(rank+1)).get('skuBundleId')) is not None:
562
            rankMapMobiles[rank] = blockedInfoMobiles.get((featuredDealsMobiles.get(rank+1)).get('skuBundleId'))
17367 kshitij.so 563
 
564
 
565
    sortedMapTablets = {}
566
    rankMapTablets = {}
567
    rankTablets = 0
568
 
569
    blockedRanksTablets = []
570
    blockedSkuBundlesTablets = []
571
    blockedInfoTablets = {}
572
 
573
    featuredDealsTablets = featuredDeals.get(5)
574
 
575
 
576
    for k, v in featuredDealsTablets.iteritems():
17469 kshitij.so 577
        blockedRanksTablets.append(k-1)
578
        blockedSkuBundlesTablets.append(v.get('skuBundleId'))
579
 
17367 kshitij.so 580
 
581
    for sorted_deal in tablet_deals:
582
        while(True):
583
            if rankTablets in blockedRanksTablets:
584
                rankTablets = rankTablets +1
585
            else:
586
                break
587
 
588
        if sorted_deal['skuBundleId'] in blockedSkuBundlesTablets:
589
            if blockedInfoTablets.has_key(sorted_deal['skuBundleId']):
590
                blockedInfoTablets.get(sorted_deal['skuBundleId']).append(sorted_deal)
591
            else:
592
                blockedInfoTablets[sorted_deal['skuBundleId']] = [sorted_deal]
593
            continue
594
 
595
        if sortedMapTablets.get(sorted_deal['skuBundleId']) is None:
596
            sortedMapTablets[sorted_deal['skuBundleId']] = {rankTablets:[sorted_deal]}
597
            rankMapTablets[rankTablets] = (sortedMapTablets[sorted_deal['skuBundleId']].values())[0]
598
            rankTablets = rankTablets +1
599
        else:
600
            for temp_list in sortedMapTablets.get(sorted_deal['skuBundleId']).itervalues():
601
                temp_list.append(sorted_deal)
602
            rankMapTablets[(sortedMapTablets.get(sorted_deal['skuBundleId']).keys())[0]] = temp_list
603
 
604
    for rank in blockedRanksTablets:
17369 kshitij.so 605
        if blockedInfoTablets.get((featuredDealsTablets.get(rank+1)).get('skuBundleId')) is not None:
606
            rankMapTablets[rank] = blockedInfoTablets.get((featuredDealsTablets.get(rank+1)).get('skuBundleId'))
17469 kshitij.so 607
 
17367 kshitij.so 608
 
19559 kshitij.so 609
#     sortedMapAccessories = {}
610
#     rankMapAccessories = {}
611
#     rankAccessories = 0
612
#     
613
#     blockedRanksAccessories = []
614
#     blockedSkuBundlesAccessories = []
615
#     blockedInfoAccessories = {}
616
#     
617
#     featuredDealsAccessories = featuredDeals.get(6)
618
#     
619
#     for k, v in featuredDealsAccessories.iteritems():
620
#         blockedRanksAccessories.append(k-1)
621
#         blockedSkuBundlesAccessories.append(v.get('skuBundleId'))
622
#     
623
#     
624
#     for sorted_deal in accessories_deals:
625
#        
626
#         while(True):
627
#             if rankAccessories in blockedRanksAccessories:
628
#                 rankAccessories = rankAccessories +1
629
#             else:
630
#                 break
631
#              
632
#         if sorted_deal['skuBundleId'] in blockedSkuBundlesAccessories:
633
#             if blockedInfoAccessories.has_key(sorted_deal['skuBundleId']):
634
#                 blockedInfoAccessories.get(sorted_deal['skuBundleId']).append(sorted_deal)
635
#             else:
636
#                 blockedInfoAccessories[sorted_deal['skuBundleId']] = [sorted_deal]
637
#             continue
638
#          
639
#         if sortedMapAccessories.get(sorted_deal['skuBundleId']) is None:
640
#             sortedMapAccessories[sorted_deal['skuBundleId']] = {rankAccessories:[sorted_deal]}
641
#             rankMapAccessories[rankAccessories] = (sortedMapAccessories[sorted_deal['skuBundleId']].values())[0]
642
#             rankAccessories = rankAccessories +1
643
#         else:
644
#             for temp_list in sortedMapAccessories.get(sorted_deal['skuBundleId']).itervalues():
645
#                 temp_list.append(sorted_deal)
646
#             rankMapAccessories[(sortedMapAccessories.get(sorted_deal['skuBundleId']).keys())[0]] = temp_list
647
#     
648
#             
649
#     for rank in blockedRanksAccessories:
650
#         if blockedInfoAccessories.get((featuredDealsAccessories.get(rank+1)).get('skuBundleId')) is not None:
651
#             rankMapAccessories[rank] = blockedInfoAccessories.get((featuredDealsAccessories.get(rank+1)).get('skuBundleId'))
652
#     
22240 amit.gupta 653
#    specialOffer = None
654
#    promoOffer = get_mongo_connection().Catalog.PromoOffer.find_one({'user_id':userId})
655
#    try:
656
#        if promoOffer is not None:
657
#            offer = get_mongo_connection().Catalog.Promotions.find_one({'_id':promoOffer.get('offer_id')})
658
#            if offer is None:
659
#                raise
660
#            promo = Promotion(offer.get('_id'),offer.get('offer_name'),offer.get('offer_description') , offer.get('categories_applicable'), offer.get('sub_categories_not_applicable'),
661
#                     offer.get('startDate'), offer.get('endDate'), promoOffer.get('target1'), promoOffer.get('target1_cash_back_percetage'), promoOffer.get('target2'), promoOffer.get('target2_cash_back_percetage'), promoOffer.get('maxCashBack'),offer.get('url'),
662
#                     promoOffer.get('pending_order_value'), promoOffer.get('delivered_order_value'), promoOffer.get('last_run_timestamp'))
663
#    
664
#            specialOffer = promo
665
#    except:
666
#        traceback.print_exc()
19559 kshitij.so 667
 
668
 
22240 amit.gupta 669
    mem_cache_val = {3:mobile_deals, 5:tablet_deals,"3_rankMap": rankMapMobiles,"5_rankMap": rankMapTablets}
19559 kshitij.so 670
    mc.set(str(userId), mem_cache_val)
671
 
672
def __populateCacheForAccessories(userId):
673
    try:
674
        if mc.get("featured_deals") is None:
675
            __populateFeaturedDeals()
676
        featuredDeals = mc.get("featured_deals")
677
 
678
    except Exception as e:
679
        print traceback.print_exc()
680
        featuredDeals = {3:{},5:{},6:{}}
681
 
682
 
683
    #Not taking into account mobiles, tablets
684
    featuredDeals.pop(3,None)
685
    featuredDeals.pop(5,None)
686
 
20009 kshitij.so 687
    print "featuredDeals are ",featuredDeals
688
 
19559 kshitij.so 689
    fd_bundles = []
690
 
691
    for catMap in featuredDeals.itervalues():
692
        for fd_map in catMap.itervalues():
693
            if not fd_map.get('skuBundleId') in fd_bundles:
694
                fd_bundles.append(fd_map.get('skuBundleId'))
695
 
696
    print "Populating accessory memcache for userId",userId
697
    outer_query = []
698
    outer_query.append({ "$or": [ { "showDeal": 1} , { "prepaidDeal": 1 } ] })
699
    query = {}
19570 kshitij.so 700
    query['$gt'] = 0
19575 kshitij.so 701
    outer_query.append({'dealRankPoints':query})
19559 kshitij.so 702
    outer_query.append({'category_id':{"$in":[6]}})
703
 
19581 kshitij.so 704
    accessories_deals = list(get_mongo_connection().Catalog.Deals.find({"$and":outer_query},{'_id':1,'category_id':1,'brand':1,'bestSellerPoints':1,'nlcPoints':1,'totalPoints':1,'dealRankPoints':1,'rank':1,'available_price':1,'dealType':1,'source_id':1,'brand_id':1,'skuBundleId':1,'dp':1, 'showDp':1, 'gross_price':1, 'subCategoryId':1,'netPriceAfterCashBack':1}).sort([('dealRankPoints',pymongo.DESCENDING),('bestSellerPoints',pymongo.DESCENDING)]))
19559 kshitij.so 705
 
706
    actionsMap = {}
19580 kshitij.so 707
    actionRank = 3
19596 kshitij.so 708
    try:
19599 kshitij.so 709
        favourite_data = session.query(user_actions).filter_by(user_id=userId).order_by(asc(user_actions.created)).all()
710
        favourite_ids = [x.store_product_id for x in favourite_data]
711
        master_ids = list(get_mongo_connection().Catalog.MasterData.find({'_id':{"$in":favourite_ids},'category_id':6},{'_id':1}))
712
        accessory_ids = [x['_id'] for x in master_ids]
713
        for x in favourite_data:
714
            if x.store_product_id not in accessory_ids:
715
                continue
19596 kshitij.so 716
            action = 1 if x.action == 'like' else 0
717
            if action==1:
718
                actionsMap[x.store_product_id] = {'action':action,'rank':actionRank,'dealRankPoints':None}
719
                actionRank = actionRank+3
720
            else:
721
                actionsMap[x.store_product_id] = {'action':action,'rank':None,'dealRankPoints':None}
722
    except:
19614 kshitij.so 723
        traceback.print_exc()
19599 kshitij.so 724
        print "Exception in actionsMap creation"
19596 kshitij.so 725
    finally:    
726
        session.close()
19559 kshitij.so 727
 
19583 kshitij.so 728
    pseudo_count = 1
729
    inserted_count = 0
730
    try:
731
        if actionsMap:
732
            for k,v in actionsMap.iteritems():
733
                tmp_deal = get_mongo_connection().Catalog.Deals.find_one({'_id':k})
19599 kshitij.so 734
                if tmp_deal is None:
19580 kshitij.so 735
                    v['rank'] = None
736
                    continue
19599 kshitij.so 737
                if tmp_deal['category_id']!=6 and (tmp_deal['showDeal']!=1 or tmp_deal['prepaidDeal']!=1) :
738
                    v['rank'] = None
739
                    continue
19583 kshitij.so 740
                if v['action'] ==0:
741
                    leastDealRankPoints = list(get_mongo_connection().Catalog.Deals.find({'subCategoryId':tmp_deal.get('subCategoryId')}).sort([('dealRankPoints',pymongo.ASCENDING)]).limit(1))
742
                    if len(leastDealRankPoints) == 0 or leastDealRankPoints[0].get('dealRankPoints') is None:
743
                        v['rank'] = None
744
                        continue
745
                    v['dealRankPoints'] = leastDealRankPoints[0]['dealRankPoints'] - 1
746
                    v['rank'] = 999999
747
                else:
748
                    v['dealRankPoints'] = tmp_deal.get('dealRankPoints')
749
    except:
750
        print "Exception in action map"
751
        traceback.print_exc()         
752
 
19559 kshitij.so 753
    for deal in accessories_deals:
754
 
755
        try:
756
            fd_bundles.remove(deal.get('skuBundleId'))
757
        except:
758
            pass
19583 kshitij.so 759
        try:
760
            if actionsMap and actionsMap.get(deal['_id'])!=None:
761
                if actionsMap.get(deal['_id']).get('action') ==1 and actionsMap.get(deal['_id']).get('rank')!=None:
762
                    actionRank = actionsMap.get(deal['_id']).get('rank')
763
                    if actionRank < pseudo_count:
764
                        deal['dealRankPoints'] = accessories_deals[actionRank-1]['dealRankPoints'] +.5 + inserted_count
765
                        actionsMap.get(deal['_id'])['dealRankPoints'] = deal['dealRankPoints'] 
766
                        inserted_count = inserted_count+1
19580 kshitij.so 767
                elif actionsMap.get(deal['_id']).get('action') ==0 and actionsMap.get(deal['_id']).get('rank')!=None:
768
                    deal['dealRankPoints'] = actionsMap.get(deal['_id']).get('dealRankPoints')
19583 kshitij.so 769
                    actionsMap.get(deal['_id'])['dealRankPoints'] = deal['dealRankPoints']
770
                else:
771
                    pass
772
            pseudo_count = pseudo_count+1
773
        except:
774
            print "Exception while arranging dealRankPoints"
775
            traceback.print_exc()
19580 kshitij.so 776
 
777
    accessories_deals = sorted(accessories_deals, key = lambda x: (x['dealRankPoints'],x['bestSellerPoints'], x['nlcPoints'], x['rank']),reverse=True)
19575 kshitij.so 778
 
19559 kshitij.so 779
    if len(fd_bundles) > 0:
780
        print "There is still bundle in feature deals.Lets add info"
781
        for skuBundleId in fd_bundles:
782
            dummyDealObjList = __constructDummyDealObject(skuBundleId)
783
            for dummyDealObj in dummyDealObjList:
784
                if dummyDealObj['category_id'] ==6:
785
                    accessories_deals.append(dummyDealObj)
786
 
787
    for super_category, categoryFeaturedDeals in featuredDeals.iteritems():
788
        for val in categoryFeaturedDeals.itervalues():
789
            dummyDealObjList = __constructDummyDealObject(val.get('skuBundleId'))
790
            for dummyDealObj in dummyDealObjList:
791
                if super_category == dummyDealObj['category_id']:
792
                    continue  
793
                if super_category ==6:
794
                    accessories_deals.append(dummyDealObj)
795
 
796
 
17469 kshitij.so 797
    sortedMapAccessories = {}
798
    rankMapAccessories = {}
799
    rankAccessories = 0
19559 kshitij.so 800
 
17469 kshitij.so 801
    blockedRanksAccessories = []
802
    blockedSkuBundlesAccessories = []
803
    blockedInfoAccessories = {}
19559 kshitij.so 804
 
17469 kshitij.so 805
    featuredDealsAccessories = featuredDeals.get(6)
19559 kshitij.so 806
 
17469 kshitij.so 807
    for k, v in featuredDealsAccessories.iteritems():
808
        blockedRanksAccessories.append(k-1)
809
        blockedSkuBundlesAccessories.append(v.get('skuBundleId'))
19559 kshitij.so 810
 
811
 
17469 kshitij.so 812
    for sorted_deal in accessories_deals:
19559 kshitij.so 813
 
17469 kshitij.so 814
        while(True):
815
            if rankAccessories in blockedRanksAccessories:
816
                rankAccessories = rankAccessories +1
817
            else:
818
                break
19559 kshitij.so 819
 
17469 kshitij.so 820
        if sorted_deal['skuBundleId'] in blockedSkuBundlesAccessories:
821
            if blockedInfoAccessories.has_key(sorted_deal['skuBundleId']):
822
                blockedInfoAccessories.get(sorted_deal['skuBundleId']).append(sorted_deal)
823
            else:
824
                blockedInfoAccessories[sorted_deal['skuBundleId']] = [sorted_deal]
825
            continue
19559 kshitij.so 826
 
17469 kshitij.so 827
        if sortedMapAccessories.get(sorted_deal['skuBundleId']) is None:
828
            sortedMapAccessories[sorted_deal['skuBundleId']] = {rankAccessories:[sorted_deal]}
829
            rankMapAccessories[rankAccessories] = (sortedMapAccessories[sorted_deal['skuBundleId']].values())[0]
830
            rankAccessories = rankAccessories +1
831
        else:
832
            for temp_list in sortedMapAccessories.get(sorted_deal['skuBundleId']).itervalues():
833
                temp_list.append(sorted_deal)
834
            rankMapAccessories[(sortedMapAccessories.get(sorted_deal['skuBundleId']).keys())[0]] = temp_list
19559 kshitij.so 835
 
836
 
17469 kshitij.so 837
    for rank in blockedRanksAccessories:
838
        if blockedInfoAccessories.get((featuredDealsAccessories.get(rank+1)).get('skuBundleId')) is not None:
839
            rankMapAccessories[rank] = blockedInfoAccessories.get((featuredDealsAccessories.get(rank+1)).get('skuBundleId'))
19559 kshitij.so 840
 
19288 kshitij.so 841
    specialOffer = None
842
    promoOffer = get_mongo_connection().Catalog.PromoOffer.find_one({'user_id':userId})
843
    try:
844
        if promoOffer is not None:
845
            offer = get_mongo_connection().Catalog.Promotions.find_one({'_id':promoOffer.get('offer_id')})
846
            if offer is None:
847
                raise
19352 kshitij.so 848
            promo = Promotion(offer.get('_id'),offer.get('offer_name'),offer.get('offer_description') , offer.get('categories_applicable'), offer.get('sub_categories_not_applicable'),
19331 kshitij.so 849
                     offer.get('startDate'), offer.get('endDate'), promoOffer.get('target1'), promoOffer.get('target1_cash_back_percetage'), promoOffer.get('target2'), promoOffer.get('target2_cash_back_percetage'), promoOffer.get('maxCashBack'),offer.get('url'),
19350 kshitij.so 850
                     promoOffer.get('pending_order_value'), promoOffer.get('delivered_order_value'), promoOffer.get('last_run_timestamp'))
17469 kshitij.so 851
 
19288 kshitij.so 852
            specialOffer = promo
853
    except:
19559 kshitij.so 854
        traceback.print_exc()
19288 kshitij.so 855
 
856
 
19559 kshitij.so 857
    mem_cache_val = {6:accessories_deals,"6_rankMap": rankMapAccessories, "specialOffer":specialOffer }
858
    mc.set(str(userId)+'_acc', mem_cache_val)
859
 
14037 kshitij.so 860
 
861
 
14531 kshitij.so 862
def __populateFeaturedDeals():
17367 kshitij.so 863
    print "Populating featured deals....."
864
    featuredDealsMobiles = {}
865
    featuredDealsTablets = {}
17469 kshitij.so 866
    featuredDealsAccessories = {}
17618 kshitij.so 867
    activeFeaturedDeals = get_mongo_connection().Catalog.FeaturedDeals.find({'startDate':{'$lte':to_java_date(datetime.now())},'endDate':{'$gte':to_java_date(datetime.now())}})
14531 kshitij.so 868
    for activeFeaturedDeal in activeFeaturedDeals:
17367 kshitij.so 869
        deals = get_mongo_connection().Catalog.Deals.find({"skuBundleId":activeFeaturedDeal.get('skuBundleId'),"$or":[{"showDeal":1}, {"prepaidDeal":1}]})
870
        for deal in deals:
871
            if deal.get('available_price') <= activeFeaturedDeal.get('thresholdPrice'):
17469 kshitij.so 872
                for category_id, rank  in activeFeaturedDeal['otherInfo'].iteritems():
873
                    f_deal = {'skuBundleId':activeFeaturedDeal.get('skuBundleId'), 'thresholdPrice':activeFeaturedDeal.get('thresholdPrice'), 'rank':rank,'category_id':int(category_id),'totalPoints':activeFeaturedDeal.get('totalPoints')}
874
                    if f_deal['category_id'] == 3:
875
                        featuredDealsMobiles[rank] = f_deal
876
                    elif f_deal['category_id']==5:
877
                        featuredDealsTablets[rank] = f_deal
878
                    elif f_deal['category_id']==6:
879
                        featuredDealsAccessories[rank] = f_deal
17367 kshitij.so 880
                break
17469 kshitij.so 881
 
882
#                f_deal = {'skuBundleId':activeFeaturedDeal.get('skuBundleId'), 'thresholdPrice':activeFeaturedDeal.get('thresholdPrice'), 'rank':activeFeaturedDeal.get('rank'),'category_id':activeFeaturedDeal.get('category_id'),'totalPoints':activeFeaturedDeal.get('totalPoints')}
883
#                 if activeFeaturedDeal.get('category_id') == 3:
884
#                     featuredDealsMobiles[activeFeaturedDeal.get('rank')] = f_deal
885
#                 else:
886
#                     featuredDealsTablets[activeFeaturedDeal.get('rank')] = f_deal
887
#                 break
888
 
17367 kshitij.so 889
 
17469 kshitij.so 890
    mc.set("featured_deals", {3:featuredDealsMobiles,5:featuredDealsTablets,6:featuredDealsAccessories}, 600)
14037 kshitij.so 891
 
17618 kshitij.so 892
def __populateFeaturedDealsForDealObject():
893
    print "Caching deal objects...."
894
    featuredDealObjectMobiles = {}
895
    featuredDealObjectTablets = {}
896
    featuredDealObjectAccessories = {}
897
    dealObjects = get_mongo_connection().Catalog.FeaturedDealsDealObject.find({'startDate':{'$lte':to_java_date(datetime.now())},'endDate':{'$gte':to_java_date(datetime.now())}})
898
    for dealObject in dealObjects:
899
        d_object = list(get_mongo_connection().Catalog.DealObject.find({'_id':dealObject['_id']}))
900
        if len(d_object) == 0:
901
            continue
902
        for category_id, rank  in dealObject['otherInfo'].iteritems():
903
            d_object[0]['dealObject'] = 1
19288 kshitij.so 904
            f_deal = {'rank':rank,'category_id':int(category_id),'object':d_object[0],'offer_id':dealObject.get('offer_id')}
17618 kshitij.so 905
            if f_deal['category_id'] == 3:
906
                featuredDealObjectMobiles[rank] = f_deal
907
            elif f_deal['category_id']==5:
908
                featuredDealObjectTablets[rank] = f_deal
909
            elif f_deal['category_id']==6:
910
                featuredDealObjectAccessories[rank] = f_deal
911
    mc.set("featured_deals_deal_object", {3:featuredDealObjectMobiles,5:featuredDealObjectTablets,6:featuredDealObjectAccessories}, 600)
17619 kshitij.so 912
    print mc.get('featured_deals_deal_object')
17618 kshitij.so 913
 
22256 amit.gupta 914
#introducing online/deals with fofo flag
915
def getNewDeals(userId, category_id, offset, limit, sort, direction, filterData=None, source=None, tag_ids=None):
17469 kshitij.so 916
    if mc.get("category_cash_back") is None or not bool(mc.get("category_cash_back")):
13921 kshitij.so 917
        populateCashBack()
14037 kshitij.so 918
 
16079 kshitij.so 919
    dealsListMap = []
14037 kshitij.so 920
    user_specific_deals = mc.get(str(userId))
921
    if user_specific_deals is None:
922
        __populateCache(userId)
923
        user_specific_deals = mc.get(str(userId))
14038 kshitij.so 924
    else:
925
        print "Getting user deals from cache"
14037 kshitij.so 926
    category_specific_deals = user_specific_deals.get(category_id)
22256 amit.gupta 927
    #filter categores on basis of source and tags
928
    if source=="online":
22262 amit.gupta 929
        category_specific_deals = filter(lambda x: x['source_id'] in ONLINE_DEAL_SOURCE_MAP.keys(), category_specific_deals)
930
    #For saholic specific deals
22256 amit.gupta 931
    elif source=="deals":
22262 amit.gupta 932
        category_specific_deals = filter(lambda x: x['source_id'] == 4, category_specific_deals)        
22256 amit.gupta 933
 
14037 kshitij.so 934
 
17367 kshitij.so 935
    insert_featured_deals = False
14037 kshitij.so 936
    if sort is None or direction is None:
17367 kshitij.so 937
        insert_featured_deals = True
938
        rankMap = user_specific_deals.get(str(category_id)+"_rankMap")
14037 kshitij.so 939
    else:
940
        if sort == "bestSellerPoints":
941
            sorted_deals = sorted(category_specific_deals, key = lambda x: (x['bestSellerPoints'], x['rank'], x['nlcPoints']),reverse=True)
942
        else:
943
            if direction == -1:
944
                rev = True
945
            else:
946
                rev = False
947
            sorted_deals = sorted(category_specific_deals, key = lambda x: (x['available_price']),reverse=rev)
948
 
14791 kshitij.so 949
 
17367 kshitij.so 950
    filtered_deals = []
17668 kshitij.so 951
    dataExist = True
14791 kshitij.so 952
    if filterData is not None:
953
        try:
17669 kshitij.so 954
            filtered_deals = filterDeals(category_specific_deals, filterData)
955
            if len(filtered_deals)==0:
956
                dataExist = False
14791 kshitij.so 957
        except:
16067 kshitij.so 958
            traceback.print_exc()
17668 kshitij.so 959
    if dataExist:
14791 kshitij.so 960
 
17668 kshitij.so 961
        if not insert_featured_deals:
962
            sortedMap = {}
963
            rankMap = {}
964
            rank = 0
965
            for sorted_deal in sorted_deals:
966
 
967
                if len(filtered_deals) > 0 and  sorted_deal['skuBundleId'] not in filtered_deals:
968
                    continue
969
 
970
                if sortedMap.get(sorted_deal['skuBundleId']) is None:
971
                    sortedMap[sorted_deal['skuBundleId']] = {rank:[sorted_deal]}
972
                    rankMap[rank] = (sortedMap[sorted_deal['skuBundleId']].values())[0]
973
                    rank = rank +1
974
                else:
975
                    for temp_list in sortedMap.get(sorted_deal['skuBundleId']).itervalues():
976
                        temp_list.append(sorted_deal)
977
                    rankMap[(sortedMap.get(sorted_deal['skuBundleId']).keys())[0]] = temp_list
978
        else:
979
            filterMap = {}
980
            rank = 0
981
            if len(filtered_deals) > 0:
982
                try:
983
                    od = collections.OrderedDict(sorted(rankMap.items()))
984
                except:
985
                    od = ordereddict.OrderedDict(sorted(rankMap.items()))
986
                for k, v in od.iteritems():
987
                    if v[0].get('skuBundleId') in filtered_deals:
988
                        filterMap[rank] = v
989
                        rank =rank+1
990
                rankMap = filterMap
991
 
992
        rankCounter = offset
993
        if filterData is None:
994
            if mc.get("featured_deals_deal_object") is None or not bool(mc.get("featured_deals_deal_object")):
995
                try:
996
                    __populateFeaturedDealsForDealObject()
997
                    fd_dealObject = mc.get("featured_deals_deal_object")
998
                except:
999
                    fd_dealObject = {3:{},5:{},6:{}}
17367 kshitij.so 1000
            else:
17668 kshitij.so 1001
                fd_dealObject = mc.get("featured_deals_deal_object")
1002
 
17367 kshitij.so 1003
    else:
17668 kshitij.so 1004
        rankMap = {}
17618 kshitij.so 1005
 
19288 kshitij.so 1006
 
1007
    specialOffer = user_specific_deals.get('specialOffer')
1008
 
17627 kshitij.so 1009
    for dealList in [rankMap.get(k, []) for k in range(offset, offset+limit)]:
17629 kshitij.so 1010
        if filterData is None:
17627 kshitij.so 1011
            while(True):
1012
 
1013
                rankCounter = rankCounter+1
1014
                if (fd_dealObject.get(category_id).get(rankCounter)) is not None:
19288 kshitij.so 1015
                    if (fd_dealObject.get(category_id).get(rankCounter).get('offer_id') !=0):
1016
                        #Check whether user can see offer
19518 manas 1017
                        if specialOffer is None or specialOffer.endDate < to_java_date(datetime.now()):
19288 kshitij.so 1018
                            continue
19334 kshitij.so 1019
                    deal_object_temp = []
1020
                    deal_object_temp.append(fd_dealObject.get(category_id).get(rankCounter).get('object'))
1021
                    dealsListMap.append(deal_object_temp)
17627 kshitij.so 1022
                else:
1023
                    break
17620 kshitij.so 1024
 
16079 kshitij.so 1025
        temp = []
17367 kshitij.so 1026
        if dealList is None or len(dealList)==0:
1027
            continue
16067 kshitij.so 1028
        for d in dealList:
1029
            item = list(get_mongo_connection().Catalog.MasterData.find({'_id':d['_id']}))
16320 kshitij.so 1030
            if len(item) ==0:
1031
                continue
16079 kshitij.so 1032
            item[0]['persPoints'] = d['persPoints']
1033
            if d['dealType'] == 1 and d['source_id'] ==1:
16511 kshitij.so 1034
                try:
1035
                    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())}}))
1036
                    item[0]['marketPlaceUrl'] = manualDeal[0]['dealUrl'].strip()
1037
                except:
1038
                    pass
16079 kshitij.so 1039
            elif d['source_id'] ==3:
1040
                item[0]['marketPlaceUrl'] = item[0]['marketPlaceUrl']+'?supc='+item[0].get('identifier')
1041
            else:
1042
                pass 
1043
            try:
1044
                cashBack = getCashBack(item[0]['_id'], item[0]['source_id'], item[0]['category_id'])
1045
                if not cashBack or cashBack.get('cash_back_status')!=1:
14037 kshitij.so 1046
                    item[0]['cash_back_type'] = 0
1047
                    item[0]['cash_back'] = 0
16079 kshitij.so 1048
                else:
17180 kshitij.so 1049
                    if cashBack.get('maxCashBack') is not None:
1050
 
1051
                        if cashBack.get('cash_back_type') ==1 and (float(cashBack.get('cash_back'))*item[0]['available_price'])/100 > cashBack.get('maxCashBack'):
1052
                            cashBack['cash_back_type'] = 2
1053
                            cashBack['cash_back'] = cashBack['maxCashBack']
1054
                        elif cashBack.get('cash_back_type') ==2 and cashBack.get('cash_back') > cashBack.get('maxCashBack'):
1055
                            cashBack['cash_back'] = cashBack['maxCashBack']
1056
 
16079 kshitij.so 1057
                    item[0]['cash_back_type'] = int(cashBack['cash_back_type'])
1058
                    item[0]['cash_back'] = cashBack['cash_back']
1059
            except:
1060
                print "Error in adding cashback to deals"
1061
                item[0]['cash_back_type'] = 0
1062
                item[0]['cash_back'] = 0
16252 kshitij.so 1063
            try:
1064
                item[0]['dp'] = d['dp']
1065
                item[0]['showDp'] = d['showDp']
1066
            except:
1067
                item[0]['dp'] = 0.0
1068
                item[0]['showDp'] = 0
16483 kshitij.so 1069
            try:
1070
                item[0]['thumbnail'] = item[0]['thumbnail'].strip()
1071
            except:
17115 manish.sha 1072
                pass
17603 kshitij.so 1073
 
1074
            try:
1075
                if item[0]['showVideo']==0:
1076
                    item[0]['videoLink'] =""
1077
            except:
1078
                item[0]['videoLink'] =""
17937 kshitij.so 1079
            try:
1080
                if item[0]['quantity'] >1:
1081
                    ppq = float(item[0]['available_price'])/item[0]['quantity']
1082
 
1083
                    if ppq == round(ppq):
1084
                        item[0]['ppq'] = int(ppq)
1085
                    else:
1086
                        item[0]['ppq'] = round(ppq,2)
1087
                else:
1088
                    item[0]['ppq'] = 0
1089
            except:
1090
                item[0]['ppq'] = 0
17627 kshitij.so 1091
            if filterData is None:
17679 kshitij.so 1092
                if item[0]['category_id']!=6:
1093
                    try:
18830 kshitij.so 1094
                        item[0]['filterLinkBrand'] = '/category/'+str(int(item[0]['category_id']))+'?searchFor='+urllib.quote(item[0]['brand'])+'&filter=brand&brands='+str(int(item[0]['brand_id']))
1095
                        item[0]['filterTextBrand'] = (item[0]['brand'])
17679 kshitij.so 1096
                    except:
18830 kshitij.so 1097
                        pass
17679 kshitij.so 1098
                else:
1099
                    try:
17756 kshitij.so 1100
                        if item[0]['subCategory']=='' or item[0]['subCategory'] is None or item[0]['subCategoryId']==0:
17679 kshitij.so 1101
                            raise
18830 kshitij.so 1102
                        item[0]['filterLinkSubCategory'] = '/category/'+str(int(item[0]['category_id']))+'?searchFor='+urllib.quote(item[0]['subCategory'])+'&filter=subcategory&subcategories='+str(int(item[0]['subCategoryId']))
1103
                        item[0]['filterTextSubCategory'] = (item[0]['subCategory'])
1104
                        item[0]['filterLinkBrand'] = '/category/'+str(int(item[0]['category_id']))+'?searchFor='+urllib.quote(item[0]['brand'])+'&filter=brand&brands='+str(int(item[0]['brand_id']))
1105
                        item[0]['filterTextBrand'] = (item[0]['brand'])
17679 kshitij.so 1106
                    except:
18830 kshitij.so 1107
                        pass
17771 kshitij.so 1108
            try:
1109
                if item[0]['source_id']==4:
1110
                    item_availability_info = mc.get("item_availability_"+str(item[0]['identifier']).strip())
1111
                    if item_availability_info is None or len(item_availability_info)==0:
1112
                        item[0]['availabilityInfo'] = [{}]
1113
                    else:
22256 amit.gupta 1114
                        #remove items that are mapped with tag_ids recieved
1115
                        if tag_ids:
1116
                            #construct item_availability_info TAGS not matched 
1117
                            item_availability_info = [av_info for av_info in item_availability_info if not (av_info.has_key('tag_ids') and not set(tag_ids).isdisjoint(av_info.get('tag_ids')))]
1118
                            if len(item_availability_info)==0:
1119
                                item_availability_info = [{}]
17771 kshitij.so 1120
                        item[0]['availabilityInfo'] = item_availability_info
1121
            except:
1122
                item[0]['availabilityInfo'] = [{}]
19193 kshitij.so 1123
 
1124
            if item[0]['source_id']==4:
1125
                for av_info in item[0]['availabilityInfo']:
1126
                    if not av_info:
1127
                        continue
1128
                    av_info['cash_back'] = item[0]['cash_back']
1129
                    av_info['cash_back_type'] = item[0]['cash_back_type']
1130
                    netPriceAfterCashBack = av_info['sellingPrice'] 
19199 kshitij.so 1131
                    if av_info['cash_back_type'] ==1:
19207 kshitij.so 1132
                        netPriceAfterCashBack = av_info['sellingPrice'] - math.floor(float(av_info['sellingPrice'])*av_info['cash_back']/100)
19199 kshitij.so 1133
                    elif av_info['cash_back_type'] ==2:
19207 kshitij.so 1134
                        netPriceAfterCashBack = av_info['sellingPrice'] - math.floor(av_info['cash_back'])
19193 kshitij.so 1135
                    else:
1136
                        pass
1137
                    av_info['netPriceAfterCashBack'] = netPriceAfterCashBack
1138
 
1139
            #item[0]['netPriceAfterCashBack'] = d['netPriceAfterCashBack']
1140
 
19896 kshitij.so 1141
            if item[0]['source_id'] == SOURCE_MAP.get("PAYTM.COM"):
19193 kshitij.so 1142
                if item[0]['codAvailable'] ==1:
1143
                    paytmPrice = item[0]['available_price']
1144
                else:
1145
                    paytmPrice = item[0]['gross_price']
1146
 
1147
                if item[0]['cash_back_type'] ==1:
19207 kshitij.so 1148
                    item[0]['netPriceAfterCashBack'] = paytmPrice -  math.floor(float(paytmPrice)*item[0]['cash_back']/100)
19193 kshitij.so 1149
                elif item[0]['cash_back_type'] ==2:
19207 kshitij.so 1150
                    item[0]['netPriceAfterCashBack'] = paytmPrice -  math.floor(item[0]['cash_back'])
19193 kshitij.so 1151
                else:
1152
                    item[0]['netPriceAfterCashBack'] = paytmPrice
1153
 
1154
            else:
1155
                if item[0]['cash_back_type'] ==1:
19207 kshitij.so 1156
                    item[0]['netPriceAfterCashBack'] = item[0]['available_price'] -  math.floor(float(item[0]['available_price'])*item[0]['cash_back']/100)
19193 kshitij.so 1157
                elif item[0]['cash_back_type'] ==2:
19207 kshitij.so 1158
                    item[0]['netPriceAfterCashBack'] = item[0]['available_price'] -  math.floor(item[0]['cash_back'])
19193 kshitij.so 1159
                else:
1160
                    item[0]['netPriceAfterCashBack'] = item[0]['available_price']
1161
 
19559 kshitij.so 1162
            temp.append(item[0])
1163
        if len(temp) > 1:
1164
            temp = sorted(temp, key = lambda x: (x['available_price']),reverse=False)
1165
        dealsListMap.append(temp)
1166
    return dealsListMap
1167
 
1168
 
22261 amit.gupta 1169
def getAccesoryDeals(userId, category_id, offset, limit, sort, direction, filterData=None, source=None, tag_ids=None):
19559 kshitij.so 1170
    if mc.get("category_cash_back") is None or not bool(mc.get("category_cash_back")):
1171
        populateCashBack()
1172
 
1173
    dealsListMap = []
1174
    user_specific_deals = mc.get(str(userId)+'_acc')
1175
    if user_specific_deals is None:
1176
        __populateCacheForAccessories(userId)
1177
        user_specific_deals = mc.get(str(userId)+'_acc')
1178
    else:
1179
        print "Getting user deals from accessory cache"
1180
    category_specific_deals = user_specific_deals.get(category_id)
1181
 
22256 amit.gupta 1182
    #filter categores on basis of source and tags
1183
    if source=="online":
22262 amit.gupta 1184
        category_specific_deals = filter(lambda x: x['source_id'] in ONLINE_DEAL_SOURCE_MAP.keys(), category_specific_deals)
1185
    #For saholic specific deals
22256 amit.gupta 1186
    elif source=="deals":
22262 amit.gupta 1187
        category_specific_deals = filter(lambda x: x['source_id'] == 4, category_specific_deals)
22256 amit.gupta 1188
 
19559 kshitij.so 1189
    insert_featured_deals = False
1190
    if sort is None or direction is None:
1191
        insert_featured_deals = True
1192
        rankMap = user_specific_deals.get(str(category_id)+"_rankMap")
1193
    else:
1194
        if sort == "bestSellerPoints":
19597 kshitij.so 1195
            sorted_deals = sorted(category_specific_deals, key = lambda x: (x['bestSellerPoints'], x['dealRankPoints'], x['nlcPoints']),reverse=True)
19559 kshitij.so 1196
        else:
1197
            if direction == -1:
1198
                rev = True
1199
            else:
1200
                rev = False
1201
            sorted_deals = sorted(category_specific_deals, key = lambda x: (x['available_price']),reverse=rev)
1202
 
1203
 
1204
    filtered_deals = []
1205
    dataExist = True
1206
    if filterData is not None:
1207
        try:
1208
            filtered_deals = filterDeals(category_specific_deals, filterData)
1209
            if len(filtered_deals)==0:
1210
                dataExist = False
1211
        except:
1212
            traceback.print_exc()
1213
    if dataExist:
1214
 
1215
        if not insert_featured_deals:
1216
            sortedMap = {}
1217
            rankMap = {}
1218
            rank = 0
1219
            for sorted_deal in sorted_deals:
1220
 
1221
                if len(filtered_deals) > 0 and  sorted_deal['skuBundleId'] not in filtered_deals:
1222
                    continue
1223
 
1224
                if sortedMap.get(sorted_deal['skuBundleId']) is None:
1225
                    sortedMap[sorted_deal['skuBundleId']] = {rank:[sorted_deal]}
1226
                    rankMap[rank] = (sortedMap[sorted_deal['skuBundleId']].values())[0]
1227
                    rank = rank +1
1228
                else:
1229
                    for temp_list in sortedMap.get(sorted_deal['skuBundleId']).itervalues():
1230
                        temp_list.append(sorted_deal)
1231
                    rankMap[(sortedMap.get(sorted_deal['skuBundleId']).keys())[0]] = temp_list
1232
        else:
1233
            filterMap = {}
1234
            rank = 0
1235
            if len(filtered_deals) > 0:
1236
                try:
1237
                    od = collections.OrderedDict(sorted(rankMap.items()))
1238
                except:
1239
                    od = ordereddict.OrderedDict(sorted(rankMap.items()))
1240
                for k, v in od.iteritems():
1241
                    if v[0].get('skuBundleId') in filtered_deals:
1242
                        filterMap[rank] = v
1243
                        rank =rank+1
1244
                rankMap = filterMap
1245
 
1246
        rankCounter = offset
1247
        if filterData is None:
1248
            if mc.get("featured_deals_deal_object") is None or not bool(mc.get("featured_deals_deal_object")):
1249
                try:
1250
                    __populateFeaturedDealsForDealObject()
1251
                    fd_dealObject = mc.get("featured_deals_deal_object")
1252
                except:
1253
                    fd_dealObject = {3:{},5:{},6:{}}
1254
            else:
1255
                fd_dealObject = mc.get("featured_deals_deal_object")
1256
 
1257
    else:
1258
        rankMap = {}
1259
 
1260
 
1261
    specialOffer = user_specific_deals.get('specialOffer')
1262
 
1263
    for dealList in [rankMap.get(k, []) for k in range(offset, offset+limit)]:
1264
        if filterData is None:
1265
            while(True):
1266
 
1267
                rankCounter = rankCounter+1
1268
                if (fd_dealObject.get(category_id).get(rankCounter)) is not None:
1269
                    if (fd_dealObject.get(category_id).get(rankCounter).get('offer_id') !=0):
1270
                        #Check whether user can see offer
1271
                        if specialOffer is None or specialOffer.endDate < to_java_date(datetime.now()):
1272
                            continue
1273
                    deal_object_temp = []
1274
                    deal_object_temp.append(fd_dealObject.get(category_id).get(rankCounter).get('object'))
1275
                    dealsListMap.append(deal_object_temp)
1276
                else:
1277
                    break
1278
 
1279
        temp = []
1280
        if dealList is None or len(dealList)==0:
1281
            continue
1282
        for d in dealList:
1283
            item = list(get_mongo_connection().Catalog.MasterData.find({'_id':d['_id']}))
1284
            if len(item) ==0:
1285
                continue
19575 kshitij.so 1286
            item[0]['dealRankPoints'] = d.get('dealRankPoints')
19559 kshitij.so 1287
            if d['dealType'] == 1 and d['source_id'] ==1:
1288
                try:
1289
                    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())}}))
1290
                    item[0]['marketPlaceUrl'] = manualDeal[0]['dealUrl'].strip()
1291
                except:
1292
                    pass
1293
            elif d['source_id'] ==3:
1294
                item[0]['marketPlaceUrl'] = item[0]['marketPlaceUrl']+'?supc='+item[0].get('identifier')
1295
            else:
1296
                pass 
1297
            try:
1298
                cashBack = getCashBack(item[0]['_id'], item[0]['source_id'], item[0]['category_id'])
1299
                if not cashBack or cashBack.get('cash_back_status')!=1:
1300
                    item[0]['cash_back_type'] = 0
1301
                    item[0]['cash_back'] = 0
1302
                else:
1303
                    if cashBack.get('maxCashBack') is not None:
1304
 
1305
                        if cashBack.get('cash_back_type') ==1 and (float(cashBack.get('cash_back'))*item[0]['available_price'])/100 > cashBack.get('maxCashBack'):
1306
                            cashBack['cash_back_type'] = 2
1307
                            cashBack['cash_back'] = cashBack['maxCashBack']
1308
                        elif cashBack.get('cash_back_type') ==2 and cashBack.get('cash_back') > cashBack.get('maxCashBack'):
1309
                            cashBack['cash_back'] = cashBack['maxCashBack']
1310
 
1311
                    item[0]['cash_back_type'] = int(cashBack['cash_back_type'])
1312
                    item[0]['cash_back'] = cashBack['cash_back']
1313
            except:
1314
                print "Error in adding cashback to deals"
1315
                item[0]['cash_back_type'] = 0
1316
                item[0]['cash_back'] = 0
1317
            try:
1318
                item[0]['dp'] = d['dp']
1319
                item[0]['showDp'] = d['showDp']
1320
            except:
1321
                item[0]['dp'] = 0.0
1322
                item[0]['showDp'] = 0
1323
            try:
1324
                item[0]['thumbnail'] = item[0]['thumbnail'].strip()
1325
            except:
1326
                pass
1327
 
1328
            try:
1329
                if item[0]['showVideo']==0:
1330
                    item[0]['videoLink'] =""
1331
            except:
1332
                item[0]['videoLink'] =""
1333
            try:
1334
                if item[0]['quantity'] >1:
1335
                    ppq = float(item[0]['available_price'])/item[0]['quantity']
1336
 
1337
                    if ppq == round(ppq):
1338
                        item[0]['ppq'] = int(ppq)
1339
                    else:
1340
                        item[0]['ppq'] = round(ppq,2)
1341
                else:
1342
                    item[0]['ppq'] = 0
1343
            except:
1344
                item[0]['ppq'] = 0
1345
            if filterData is None:
1346
                if item[0]['category_id']!=6:
1347
                    try:
1348
                        item[0]['filterLinkBrand'] = '/category/'+str(int(item[0]['category_id']))+'?searchFor='+urllib.quote(item[0]['brand'])+'&filter=brand&brands='+str(int(item[0]['brand_id']))
1349
                        item[0]['filterTextBrand'] = (item[0]['brand'])
1350
                    except:
1351
                        pass
1352
                else:
1353
                    try:
1354
                        if item[0]['subCategory']=='' or item[0]['subCategory'] is None or item[0]['subCategoryId']==0:
1355
                            raise
1356
                        item[0]['filterLinkSubCategory'] = '/category/'+str(int(item[0]['category_id']))+'?searchFor='+urllib.quote(item[0]['subCategory'])+'&filter=subcategory&subcategories='+str(int(item[0]['subCategoryId']))
1357
                        item[0]['filterTextSubCategory'] = (item[0]['subCategory'])
1358
                        item[0]['filterLinkBrand'] = '/category/'+str(int(item[0]['category_id']))+'?searchFor='+urllib.quote(item[0]['brand'])+'&filter=brand&brands='+str(int(item[0]['brand_id']))
1359
                        item[0]['filterTextBrand'] = (item[0]['brand'])
1360
                    except:
1361
                        pass
1362
            try:
1363
                if item[0]['source_id']==4:
1364
                    item_availability_info = mc.get("item_availability_"+str(item[0]['identifier']).strip())
1365
                    if item_availability_info is None or len(item_availability_info)==0:
1366
                        item[0]['availabilityInfo'] = [{}]
1367
                    else:
22256 amit.gupta 1368
                        #remove items that are mapped with tag_ids recieved
1369
                        if tag_ids:
1370
                            #construct item_availability_info TAGS not matched 
1371
                            item_availability_info = [av_info for av_info in item_availability_info if not (av_info.has_key('tag_ids') and not set(tag_ids).isdisjoint(av_info.get('tag_ids')))]
1372
                            if len(item_availability_info)==0:
1373
                                item_availability_info = [{}]
19559 kshitij.so 1374
                        item[0]['availabilityInfo'] = item_availability_info
1375
            except:
1376
                item[0]['availabilityInfo'] = [{}]
1377
 
1378
            if item[0]['source_id']==4:
1379
                for av_info in item[0]['availabilityInfo']:
1380
                    if not av_info:
1381
                        continue
1382
                    av_info['cash_back'] = item[0]['cash_back']
1383
                    av_info['cash_back_type'] = item[0]['cash_back_type']
21889 kshitij.so 1384
                    netPriceAfterCashBack = av_info['sellingPrice']
19559 kshitij.so 1385
                    if av_info['cash_back_type'] ==1:
1386
                        netPriceAfterCashBack = av_info['sellingPrice'] - math.floor(float(av_info['sellingPrice'])*av_info['cash_back']/100)
1387
                    elif av_info['cash_back_type'] ==2:
1388
                        netPriceAfterCashBack = av_info['sellingPrice'] - math.floor(av_info['cash_back'])
1389
                    else:
1390
                        pass
1391
                    av_info['netPriceAfterCashBack'] = netPriceAfterCashBack
1392
 
1393
            #item[0]['netPriceAfterCashBack'] = d['netPriceAfterCashBack']
1394
 
19896 kshitij.so 1395
            if item[0]['source_id'] == SOURCE_MAP.get("PAYTM.COM"):
19559 kshitij.so 1396
                if item[0]['codAvailable'] ==1:
1397
                    paytmPrice = item[0]['available_price']
1398
                else:
1399
                    paytmPrice = item[0]['gross_price']
1400
 
1401
                if item[0]['cash_back_type'] ==1:
1402
                    item[0]['netPriceAfterCashBack'] = paytmPrice -  math.floor(float(paytmPrice)*item[0]['cash_back']/100)
1403
                elif item[0]['cash_back_type'] ==2:
1404
                    item[0]['netPriceAfterCashBack'] = paytmPrice -  math.floor(item[0]['cash_back'])
1405
                else:
1406
                    item[0]['netPriceAfterCashBack'] = paytmPrice
1407
 
1408
            else:
1409
                if item[0]['cash_back_type'] ==1:
1410
                    item[0]['netPriceAfterCashBack'] = item[0]['available_price'] -  math.floor(float(item[0]['available_price'])*item[0]['cash_back']/100)
1411
                elif item[0]['cash_back_type'] ==2:
1412
                    item[0]['netPriceAfterCashBack'] = item[0]['available_price'] -  math.floor(item[0]['cash_back'])
1413
                else:
1414
                    item[0]['netPriceAfterCashBack'] = item[0]['available_price']
1415
 
19320 kshitij.so 1416
#             if specialOffer is not None and item[0]['source_id']==4:
1417
#                 if item[0]['category_id'] in specialOffer.categories_applicable and item[0]['subCategoryId'] not in specialOffer.sub_categories_not_applicable:
1418
#                     item[0]['specialOffer'] = specialOffer.__dict__
1419
#             else:
1420
#                 item[0]['specialOffer'] = {}
19288 kshitij.so 1421
 
16079 kshitij.so 1422
            temp.append(item[0])
16125 kshitij.so 1423
        if len(temp) > 1:
16126 kshitij.so 1424
            temp = sorted(temp, key = lambda x: (x['available_price']),reverse=False)
16079 kshitij.so 1425
        dealsListMap.append(temp)
1426
    return dealsListMap
14037 kshitij.so 1427
 
14791 kshitij.so 1428
def filterDeals(deals, filterData):
20009 kshitij.so 1429
    print "Filter data ",filterData
20011 kshitij.so 1430
    print "Length deals before filter ", len(deals)
20009 kshitij.so 1431
    brandsToFilter = []
1432
    subCategoryToFilter = []
1433
    priceToFilter = []
20019 kshitij.so 1434
    sourceToFilter = []
14791 kshitij.so 1435
    filterArray = filterData.split('|')
1436
    for data in filterArray:
1437
        try:
1438
            filter, info = data.split(':')
1439
        except Exception as ex:
1440
            traceback.print_exc()
1441
            continue
17657 kshitij.so 1442
        if filter == 'brandFilter':
20009 kshitij.so 1443
            brandsToFilter = info.split('^')
1444
        if filter == 'subCategoryFilter':
1445
            subCategoryToFilter = info.split('^')
1446
        if filter == 'priceFilter':
1447
            priceToFilter = info.split('^')
20019 kshitij.so 1448
        if filter == 'sourceFilter':
1449
            sourceToFilter = info.split('^')
20009 kshitij.so 1450
 
1451
    if brandsToFilter:
1452
        temp = []    
1453
        for deal in deals:
1454
            if str(int(deal['brand_id'])) in brandsToFilter:
1455
                temp.append(deal)
1456
        deals = temp
14791 kshitij.so 1457
 
20011 kshitij.so 1458
    print "Length deals after brandfilter ", len(deals)
1459
 
20009 kshitij.so 1460
    if subCategoryToFilter:
1461
        temp = []
1462
        for deal in deals:
1463
            if str(int(deal['subCategoryId'])) in subCategoryToFilter:
1464
                temp.append(deal)
1465
        deals = temp
1466
 
20011 kshitij.so 1467
    print "Length deals after subCatfilter ", len(deals)
1468
 
20019 kshitij.so 1469
    if sourceToFilter:
1470
        temp = []
1471
        for deal in deals:
1472
            if str(int(deal['source_id'])) in sourceToFilter:
1473
                temp.append(deal)
1474
        deals = temp
1475
 
1476
    print "Length deals after source filter ", len(deals)
1477
 
20009 kshitij.so 1478
    if priceToFilter and len(priceToFilter) ==2:
20011 kshitij.so 1479
        print "Inside price filter ",priceToFilter 
20009 kshitij.so 1480
        temp = []
1481
        for deal in deals:
20011 kshitij.so 1482
            if deal.get('available_price') > float(priceToFilter[0]) and deal.get('available_price') <= float(priceToFilter[1]):
20009 kshitij.so 1483
                temp.append(deal)
1484
        deals = temp
20011 kshitij.so 1485
 
1486
    print "Length deals after price filter ", len(deals)
20009 kshitij.so 1487
 
1488
    return [trend['skuBundleId'] for trend in temp]
14791 kshitij.so 1489
 
14037 kshitij.so 1490
def getDeals(userId, category_id, offset, limit, sort, direction):
17469 kshitij.so 1491
    if mc.get("category_cash_back") is None or not bool(mc.get("category_cash_back")):
14037 kshitij.so 1492
        populateCashBack()
1493
    rank = 1
13771 kshitij.so 1494
    deals = {}
13910 kshitij.so 1495
    outer_query = []
1496
    outer_query.append({"showDeal":1})
1497
    query = {}
1498
    query['$gt'] = 0
1499
    outer_query.append({'totalPoints':query})
1500
    if category_id in (3,5):
1501
        outer_query.append({'category_id':category_id})
13803 kshitij.so 1502
    if sort is None or direction is None:
1503
        direct = -1
13910 kshitij.so 1504
        print outer_query
1505
        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 1506
    else:
13910 kshitij.so 1507
        print outer_query
13803 kshitij.so 1508
        direct = direction
13910 kshitij.so 1509
        if sort == "bestSellerPoints":
1510
            print "yes,sorting by bestSellerPoints"
1511
            data = list(get_mongo_connection().Catalog.Deals.find({"$and":outer_query}).sort([('bestSellerPoints',direct),('rank',direct),('nlcPoints',direct)]).skip(offset).limit(limit))
1512
        else:
1513
            data = list(get_mongo_connection().Catalog.Deals.find({"$and":outer_query}).sort([(sort,direct)]).skip(offset).limit(limit))
13771 kshitij.so 1514
    for d in data:
1515
        item = list(get_mongo_connection().Catalog.MasterData.find({'_id':d['_id']}))
1516
        if not deals.has_key(item[0]['identifier']):
13921 kshitij.so 1517
            item[0]['dealRank'] = rank
1518
            try:
14761 kshitij.so 1519
                cashBack = getCashBack(item[0]['_id'], item[0]['source_id'], item[0]['category_id'])
13921 kshitij.so 1520
                if not cashBack or cashBack.get('cash_back_status')!=1:
13928 kshitij.so 1521
                    item[0]['cash_back_type'] = 0
1522
                    item[0]['cash_back'] = 0
13921 kshitij.so 1523
                else:
14766 kshitij.so 1524
                    item[0]['cash_back_type'] = int(cashBack['cash_back_type'])
13928 kshitij.so 1525
                    item[0]['cash_back'] = cashBack['cash_back']
13921 kshitij.so 1526
            except:
1527
                print "Error in adding cashback to deals"
13928 kshitij.so 1528
                item[0]['cash_back_type'] = 0
1529
                item[0]['cash_back'] = 0
13771 kshitij.so 1530
            deals[item[0]['identifier']] = item[0]
13921 kshitij.so 1531
 
13771 kshitij.so 1532
            rank +=1
13785 kshitij.so 1533
    return sorted(deals.values(), key=itemgetter('dealRank'))
1534
 
16222 kshitij.so 1535
def getItem(skuId,showDp=None):
16224 kshitij.so 1536
    temp = []
17469 kshitij.so 1537
    if mc.get("category_cash_back") is None or not bool(mc.get("category_cash_back")):
14113 kshitij.so 1538
        populateCashBack()
13795 kshitij.so 1539
    try:
16222 kshitij.so 1540
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'_id':int(skuId)})
1541
        if skuData is None:
1542
            raise
1543
        try:
1544
            cashBack = getCashBack(skuData['_id'], skuData['source_id'], skuData['category_id'])
1545
            if not cashBack or cashBack.get('cash_back_status')!=1:
1546
                skuData['cash_back_type'] = 0
1547
                skuData['cash_back'] = 0
1548
            else:
1549
                skuData['cash_back_type'] = cashBack['cash_back_type']
1550
                skuData['cash_back'] = cashBack['cash_back']
1551
        except:
1552
            print "Error in adding cashback to deals"
1553
            skuData['cash_back_type'] = 0
1554
            skuData['cash_back'] = 0
1555
        skuData['in_stock'] = int(skuData['in_stock'])
1556
        skuData['is_shortage'] = int(skuData['is_shortage'])
1557
        skuData['category_id'] = int(skuData['category_id'])
17607 kshitij.so 1558
        skuData['subCategoryId'] = int(skuData['subCategoryId'])
16222 kshitij.so 1559
        skuData['status'] = int(skuData['status'])
16483 kshitij.so 1560
        try:
1561
            skuData['thumbnail'] = skuData['thumbnail'].strip()
1562
        except:
1563
            pass 
16222 kshitij.so 1564
        if showDp is not None:
1565
            dealerPrice = get_mongo_connection().Catalog.SkuDealerPrices.find_one({'skuBundleId':skuData['skuBundleId']})
1566
            skuData['dp'] = 0.0
1567
            skuData['showDp'] = 0
1568
            if dealerPrice is not None:
1569
                skuData['dp'] = dealerPrice['dp']
1570
                skuData['showDp'] = dealerPrice['showDp']
16224 kshitij.so 1571
        temp.append(skuData)
1572
        return temp
13795 kshitij.so 1573
    except:
16224 kshitij.so 1574
        return []
13836 kshitij.so 1575
 
14761 kshitij.so 1576
def getCashBack(skuId, source_id, category_id):
17469 kshitij.so 1577
    if mc.get("category_cash_back") is None or not bool(mc.get("category_cash_back")):
14761 kshitij.so 1578
        populateCashBack()
1579
    itemCashBackMap = mc.get("item_cash_back")
13921 kshitij.so 1580
    itemCashBack = itemCashBackMap.get(skuId)
1581
    if itemCashBack is not None:
1582
        return itemCashBack
14761 kshitij.so 1583
    cashBackMap = mc.get("category_cash_back")
13921 kshitij.so 1584
    sourceCashBack = cashBackMap.get(source_id)
1585
    if sourceCashBack is not None and len(sourceCashBack) > 0:
1586
        for cashBack in sourceCashBack:
1587
            if cashBack.get(category_id) is None:
1588
                continue
1589
            else:
1590
                return cashBack.get(category_id)
1591
    else:
1592
        return {}
16560 amit.gupta 1593
 
1594
def getBundleBySourceSku(source_id, identifier):
17035 kshitij.so 1595
    if source_id in (1,2,4,5,6,7):
16560 amit.gupta 1596
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'identifier':identifier.strip(), 'source_id':source_id}))
1597
    elif source_id == 3:
1598
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'secondaryIdentifier':identifier.strip(), 'source_id':source_id}))
1599
    else:
1600
        return {}
1601
 
1602
    if not skuData:
1603
        return {}
1604
    else:
16564 amit.gupta 1605
        bundleId = skuData[0]["skuBundleId"]
17035 kshitij.so 1606
        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 1607
                       {"source_id":1, "available_price":1, "marketPlaceUrl":1, "gross_price":1, "codAvailable":1, "source_product_name":1, "offer":1, "coupon":1}))
16579 amit.gupta 1608
        return {'products':itemIds}
16560 amit.gupta 1609
 
1610
 
13921 kshitij.so 1611
 
15129 kshitij.so 1612
def getDealRank(identifier, source_id, userId):
17035 kshitij.so 1613
    if source_id in (1,2,4,5,6,7):
15129 kshitij.so 1614
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'identifier':identifier.strip(), 'source_id':source_id}))
1615
    elif source_id == 3:
1616
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'secondaryIdentifier':identifier.strip(), 'source_id':source_id}))
1617
    else:
16282 amit.gupta 1618
        return {'rank':0, 'description':'Source not valid','maxNlc':None, 'minNlc':None,'status':None,'dp':None}
15349 kshitij.so 1619
    if len(skuData) == 0:
16282 amit.gupta 1620
        return {'rank':0, 'description':'No matching product identifier found','maxNlc':None, 'minNlc':None,'status':None,'dp':None}
19580 kshitij.so 1621
    category_id = skuData[0]['category_id']
1622
    if category_id != 6:
15129 kshitij.so 1623
        user_specific_deals = mc.get(str(userId))
19580 kshitij.so 1624
        if user_specific_deals is None:
1625
            __populateCache(userId)
1626
            user_specific_deals = mc.get(str(userId))
1627
        else:
1628
            print "Getting user deals from cache mobiles/tablets"
15129 kshitij.so 1629
    else:
19580 kshitij.so 1630
        user_specific_deals = mc.get(str(userId)+'_acc')
1631
        if user_specific_deals is None:
1632
            __populateCacheForAccessories(userId)
1633
            user_specific_deals = mc.get(str(userId)+'_acc')
1634
        else:
1635
            print "Getting user deals from accessory cache"
1636
 
15129 kshitij.so 1637
    category_specific_deals = user_specific_deals.get(category_id)
16280 kshitij.so 1638
 
1639
    dealsData = get_mongo_connection().Catalog.Deals.find_one({'skuBundleId':skuData[0]['skuBundleId']})
1640
    if dealsData is None:
1641
        dealsData = {}
19580 kshitij.so 1642
        return {'rank':0, 'description':'Deal deleted from system','maxNlc':None, 'minNlc':None,'status':None,'dp':None}
16280 kshitij.so 1643
 
15129 kshitij.so 1644
    if category_specific_deals is None or len(category_specific_deals) ==0:
16280 kshitij.so 1645
        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')}
19580 kshitij.so 1646
 
1647
    if category_id!=6:
1648
        sorted_deals = sorted(category_specific_deals, key = lambda x: (x['persPoints'],x['totalPoints'],x['bestSellerPoints'], x['nlcPoints'], x['rank']),reverse=True)
1649
    else:
1650
        sorted_deals = sorted(category_specific_deals, key = lambda x: (x['dealRankPoints'],x['totalPoints'],x['bestSellerPoints'], x['nlcPoints']),reverse=True)
1651
 
16168 kshitij.so 1652
    sortedMap = {}
1653
    rankMap = {}
1654
    rank = 0
15129 kshitij.so 1655
    for sorted_deal in sorted_deals:
16168 kshitij.so 1656
        if sortedMap.get(sorted_deal['skuBundleId']) is None:
1657
            sortedMap[sorted_deal['skuBundleId']] = {rank:[sorted_deal]}
1658
            rankMap[rank] = (sortedMap[sorted_deal['skuBundleId']].values())[0]
1659
            rank = rank +1
1660
        else:
1661
            for temp_list in sortedMap.get(sorted_deal['skuBundleId']).itervalues():
1662
                temp_list.append(sorted_deal)
1663
            rankMap[(sortedMap.get(sorted_deal['skuBundleId']).keys())[0]] = temp_list
1664
 
16187 kshitij.so 1665
    for dealRank ,dealList in rankMap.iteritems():
16168 kshitij.so 1666
        for d in dealList:
16186 kshitij.so 1667
            if d['skuBundleId'] == skuData[0]['skuBundleId']:
16280 kshitij.so 1668
                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 1669
 
16280 kshitij.so 1670
    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 1671
 
1672
 
13836 kshitij.so 1673
def getCashBackDetails(identifier, source_id):
17469 kshitij.so 1674
    if mc.get("category_cash_back") is None or not bool(mc.get("category_cash_back")):
13921 kshitij.so 1675
        populateCashBack()
13771 kshitij.so 1676
 
17035 kshitij.so 1677
    if source_id in (1,2,4,5,6,7):
13839 kshitij.so 1678
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'identifier':identifier.strip(), 'source_id':source_id}))
13840 kshitij.so 1679
    elif source_id == 3:
13839 kshitij.so 1680
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'secondaryIdentifier':identifier.strip(), 'source_id':source_id}))
13840 kshitij.so 1681
    else:
1682
        return {}
13836 kshitij.so 1683
    if len(skuData) > 0:
14761 kshitij.so 1684
        itemCashBackMap = mc.get("item_cash_back")
13921 kshitij.so 1685
        itemCashBack = itemCashBackMap.get(skuData[0]['_id'])
1686
        if itemCashBack is not None:
1687
            return itemCashBack
14761 kshitij.so 1688
        cashBackMap = mc.get("category_cash_back")
13921 kshitij.so 1689
        sourceCashBack = cashBackMap.get(source_id)
1690
        if sourceCashBack is not None and len(sourceCashBack) > 0:
1691
            for cashBack in sourceCashBack:
1692
                if cashBack.get(skuData[0]['category_id']) is None:
1693
                    continue
1694
                else:
1695
                    return cashBack.get(skuData[0]['category_id'])
20698 amit.gupta 1696
            return {}
13836 kshitij.so 1697
        else:
1698
            return {} 
1699
    else:
1700
        return {}
13986 amit.gupta 1701
 
14398 amit.gupta 1702
def getImgSrc(identifier, source_id):
1703
    skuData = None
17035 kshitij.so 1704
    if source_id in (1,2,4,5,6,7):
14414 amit.gupta 1705
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'identifier':identifier.strip(), 'source_id':source_id})
14398 amit.gupta 1706
    elif source_id == 3:
14414 amit.gupta 1707
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'secondaryIdentifier':identifier.strip(), 'source_id':source_id})
14398 amit.gupta 1708
    if skuData is None:
1709
        return {}
1710
    else:
16483 kshitij.so 1711
        try:
1712
            return {'thumbnail':skuData.get('thumbnail').strip()}
1713
        except:
1714
            return {'thumbnail':skuData.get('thumbnail')}
13986 amit.gupta 1715
 
1716
def next_weekday(d, weekday):
1717
    days_ahead = weekday - d.weekday()
1718
    if days_ahead <= 0: # Target day already happened this week
1719
        days_ahead += 7
1720
    return d + timedelta(days_ahead)
1721
 
13771 kshitij.so 1722
 
13970 kshitij.so 1723
def getAllDealerPrices(offset, limit):
1724
    data = []
1725
    collection = get_mongo_connection().Catalog.SkuDealerPrices
1726
    cursor = collection.find().skip(offset).limit(limit)
1727
    for val in cursor:
15853 kshitij.so 1728
        master = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':val['skuBundleId']})
1729
        if master is not None:
1730
            val['brand'] = master['brand']
1731
            val['source_product_name'] = master['source_product_name']
13970 kshitij.so 1732
        else:
1733
            val['brand'] = ""
1734
            val['source_product_name'] = ""
16231 kshitij.so 1735
        val['showDp'] = int(val['showDp'])
13970 kshitij.so 1736
        data.append(val)
1737
    return data
1738
 
15853 kshitij.so 1739
def addSkuDealerPrice(data):
1740
    collection = get_mongo_connection().Catalog.SkuDealerPrices
1741
    cursor = collection.find_one({"skuBundleId":data['skuBundleId']})
1742
    if cursor is not None:
1743
        return {0:"BundleId information already present."}
13970 kshitij.so 1744
    else:
15853 kshitij.so 1745
        collection.insert(data)
1746
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
13970 kshitij.so 1747
        return {1:"Data added successfully"}
1748
 
1749
def updateSkuDealerPrice(data, _id):
1750
    try:
1751
        collection = get_mongo_connection().Catalog.SkuDealerPrices
1752
        collection.update({'_id':ObjectId(_id)},{"$set":{'dp':data['dp']}},upsert=False, multi = False)
15853 kshitij.so 1753
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
13970 kshitij.so 1754
        return {1:"Data updated successfully"}
1755
    except:
1756
        return {0:"Data not updated."}
1757
 
1758
def updateExceptionalNlc(data, _id):
1759
    try:
1760
        collection = get_mongo_connection().Catalog.ExceptionalNlc
1761
        collection.update({'_id':ObjectId(_id)},{"$set":{'maxNlc':data['maxNlc'], 'minNlc':data['minNlc'], 'overrideNlc':data['overrideNlc']}},upsert=False, multi = False)
15853 kshitij.so 1762
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
13970 kshitij.so 1763
        return {1:"Data updated successfully"}
1764
    except:
1765
        return {0:"Data not updated."}
1766
 
20456 kshitij.so 1767
def resetCache(cache_type, keys):
20443 kshitij.so 1768
    if (cache_type == 'deals'):
20456 kshitij.so 1769
        for userId in keys.split(','):
20458 kshitij.so 1770
            mc.delete(userId)
1771
            mc.delete(userId+'_acc')
14043 kshitij.so 1772
        return {1:'Cache cleared.'}
20443 kshitij.so 1773
    elif (cache_type == 'itemCashBack'):
1774
        mc.delete('item_cash_back')
1775
        populateCashBack()
1776
        return {1:'Cache cleared.'}
1777
    else:
1778
        {0:'Illegal cache type'}
1779
 
1780
 
15853 kshitij.so 1781
def updateCollection(data):
1782
    try:
1783
        collection = get_mongo_connection().Catalog[data['class']]
1784
        class_name = data.pop('class')
1785
        _id = data.pop('oid')
1786
        result = collection.update({'_id':ObjectId(_id)},{"$set":data},upsert=False, multi = False)
1787
        if class_name != "Notifications":
1788
            record = list(collection.find({'_id':ObjectId(_id)}))
1789
            if class_name !="CategoryDiscount":
1790
                if record[0].has_key('sku'):
1791
                    field = '_id'
1792
                    val = record[0]['sku']
14852 kshitij.so 1793
                else:
15853 kshitij.so 1794
                    field = 'skuBundleId'
1795
                    val = record[0]['skuBundleId']
1796
                get_mongo_connection().Catalog.MasterData.update({field:val},{"$set":{'updatedOn':to_java_date(datetime.now())}},upsert=False, multi = True)
1797
            else:
1798
                get_mongo_connection().Catalog.MasterData.update({'brand':re.compile(record[0]['brand'], re.IGNORECASE),'category_id':record[0]['category_id']}, \
1799
                                                                 {"$set":{'updatedOn':to_java_date(datetime.now())}},upsert=False,multi=True)
16233 kshitij.so 1800
        if class_name =='SkuDealerPrices':
16237 kshitij.so 1801
            get_mongo_connection().Catalog.Deals.update({'skuBundleId':val},{"$set":data},upsert=False, multi=True)
15853 kshitij.so 1802
        return {1:"Data updated successfully"}
1803
    except Exception as e:
1804
        print e
1805
        return {0:"Data not updated."}
14575 kshitij.so 1806
 
14076 kshitij.so 1807
 
14553 kshitij.so 1808
def addNegativeDeals(data, multi):
1809
    if multi !=1: 
1810
        collection = get_mongo_connection().Catalog.NegativeDeals
1811
        cursor = collection.find({"sku":data['sku']})
1812
        if cursor.count() > 0:
1813
            return {0:"Sku information already present."}
1814
        else:
1815
            collection.insert(data)
1816
            return {1:"Data added successfully"}
14481 kshitij.so 1817
    else:
14553 kshitij.so 1818
        skuIds = __getBundledSkusfromSku(data['sku'])
1819
        for sku in skuIds:
1820
            data['sku'] = sku.get('_id')
1821
            collection = get_mongo_connection().Catalog.NegativeDeals
1822
            cursor = collection.find({"sku":data['sku']})
1823
            if cursor.count() > 0:
1824
                continue
1825
            else:
14558 kshitij.so 1826
                data.pop('_id',None)
14553 kshitij.so 1827
                collection.insert(data)
14481 kshitij.so 1828
        return {1:"Data added successfully"}
1829
 
1830
def getAllNegativeDeals(offset, limit):
1831
    data = []
1832
    collection = get_mongo_connection().Catalog.NegativeDeals
1833
    cursor = collection.find().skip(offset).limit(limit)
1834
    for val in cursor:
1835
        master = list(get_mongo_connection().Catalog.MasterData.find({'_id':val['sku']}))
1836
        if len(master) > 0:
1837
            val['brand'] = master[0]['brand']
1838
            val['source_product_name'] = master[0]['source_product_name']
1839
            val['skuBundleId'] = master[0]['skuBundleId']
1840
        else:
1841
            val['brand'] = ""
1842
            val['source_product_name'] = ""
1843
            val['skuBundleId'] = ""
1844
        data.append(val)
1845
    return data
1846
 
1847
def getAllManualDeals(offset, limit):
1848
    data = []
1849
    collection = get_mongo_connection().Catalog.ManualDeals
15090 kshitij.so 1850
    cursor = collection.find().skip(offset).limit(limit)
14481 kshitij.so 1851
    for val in cursor:
1852
        master = list(get_mongo_connection().Catalog.MasterData.find({'_id':val['sku']}))
1853
        if len(master) > 0:
1854
            val['brand'] = master[0]['brand']
1855
            val['source_product_name'] = master[0]['source_product_name']
1856
            val['skuBundleId'] = master[0]['skuBundleId']
1857
        else:
1858
            val['brand'] = ""
1859
            val['source_product_name'] = ""
1860
            val['skuBundleId'] = ""
1861
        data.append(val)
1862
    return data
14076 kshitij.so 1863
 
14553 kshitij.so 1864
def addManualDeal(data, multi):
1865
    if multi !=1:
1866
        collection = get_mongo_connection().Catalog.ManualDeals
15090 kshitij.so 1867
        cursor = collection.find({'sku':data['sku']})
14553 kshitij.so 1868
        if cursor.count() > 0:
1869
            return {0:"Sku information already present."}
1870
        else:
1871
            collection.insert(data)
1872
            get_mongo_connection().Catalog.MasterData.update({'_id':data['sku']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=False)
1873
            return {1:"Data added successfully"}
14481 kshitij.so 1874
    else:
14553 kshitij.so 1875
        skuIds = __getBundledSkusfromSku(data['sku'])
1876
        for sku in skuIds:
1877
            data['sku'] = sku.get('_id')
1878
            collection = get_mongo_connection().Catalog.ManualDeals
15090 kshitij.so 1879
            cursor = collection.find({'sku':data['sku']})
14553 kshitij.so 1880
            if cursor.count() > 0:
1881
                continue
1882
            else:
14558 kshitij.so 1883
                data.pop('_id',None)
14553 kshitij.so 1884
                collection.insert(data)
1885
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':sku.get('skuBundleId')},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
14481 kshitij.so 1886
        return {1:"Data added successfully"}
14553 kshitij.so 1887
 
14481 kshitij.so 1888
def deleteDocument(data):
15853 kshitij.so 1889
    print "inside detete document"
14481 kshitij.so 1890
    print data
1891
    try:
1892
        collection = get_mongo_connection().Catalog[data['class']]
1893
        class_name = data.pop('class')
1894
        _id = data.pop('oid')
1895
        record = list(collection.find({'_id':ObjectId(_id)}))
1896
        collection.remove({'_id':ObjectId(_id)})
15075 kshitij.so 1897
        if class_name != "Notifications":
1898
            if class_name !="CategoryDiscount":
15853 kshitij.so 1899
                print record[0]
1900
                if record[0].has_key('sku'):
1901
                    field = '_id'
1902
                    val = record[0]['sku']
1903
                else:
1904
                    field = 'skuBundleId'
1905
                    val = record[0]['skuBundleId']
1906
                print "Updating master"
1907
                print field
1908
                print val
1909
                get_mongo_connection().Catalog.MasterData.update({field:val},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
15075 kshitij.so 1910
            else:
1911
                get_mongo_connection().Catalog.MasterData.update({'brand':re.compile(record[0]['brand'], re.IGNORECASE),'category_id':record[0]['category_id']}, \
1912
                                                                 {"$set":{'updatedOn':to_java_date(datetime.now())}},upsert=False,multi=True)
14481 kshitij.so 1913
        return {1:"Document deleted successfully"}
1914
    except Exception as e:
1915
        print e
1916
        return {0:"Document not deleted."}
13970 kshitij.so 1917
 
14482 kshitij.so 1918
def searchMaster(offset, limit, search_term):
1919
    data = []
14531 kshitij.so 1920
    if search_term is not None:
14551 kshitij.so 1921
        terms = search_term.split(' ')
1922
        outer_query = []
1923
        for term in terms:
1924
            outer_query.append({"source_product_name":re.compile(term, re.IGNORECASE)})
14531 kshitij.so 1925
        try:
14551 kshitij.so 1926
            collection = get_mongo_connection().Catalog.MasterData.find({"$and":outer_query,'source_id':{'$in':SOURCE_MAP.keys()}}).skip(offset).limit(limit)
14531 kshitij.so 1927
            for record in collection:
1928
                data.append(record)
1929
        except:
1930
            pass
1931
    else:
1932
        collection = get_mongo_connection().Catalog.MasterData.find({'source_id':{'$in':SOURCE_MAP.keys()}}).skip(offset).limit(limit)
14482 kshitij.so 1933
        for record in collection:
1934
            data.append(record)
1935
    return data
14481 kshitij.so 1936
 
14495 kshitij.so 1937
def getAllFeaturedDeals(offset, limit):
1938
    data = []
1939
    collection = get_mongo_connection().Catalog.FeaturedDeals
17561 kshitij.so 1940
    cursor = collection.find({}).skip(offset).limit(limit)
14495 kshitij.so 1941
    for val in cursor:
17367 kshitij.so 1942
        master = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':val['skuBundleId']}))
14495 kshitij.so 1943
        if len(master) > 0:
1944
            val['brand'] = master[0]['brand']
1945
            val['source_product_name'] = master[0]['source_product_name']
1946
            val['skuBundleId'] = master[0]['skuBundleId']
1947
        else:
1948
            val['brand'] = ""
1949
            val['source_product_name'] = ""
1950
            val['skuBundleId'] = ""
1951
        data.append(val)
1952
    return data
1953
 
14553 kshitij.so 1954
def addFeaturedDeal(data, multi):
17367 kshitij.so 1955
    collection = get_mongo_connection().Catalog.FeaturedDeals
1956
    cursor = collection.find({'skuBundleId':data['skuBundleId']})
1957
    master = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':data['skuBundleId']})
1958
    if master is None:
1959
        return {0:"BundleId is wrong"}
17469 kshitij.so 1960
    otherInfoObj = data['otherInfo']
1961
    toPop = []
1962
    for x,y in otherInfoObj.iteritems():
1963
        if y==0:
1964
            toPop.append(x)
1965
 
1966
    for popItem in toPop:
1967
        otherInfoObj.pop(popItem)
1968
    if len(otherInfoObj.keys())==0:
1969
        return {0:"No rank info to add"}
1970
 
1971
    for x,y in otherInfoObj.iteritems():
1972
        exist = get_mongo_connection().Catalog.FeaturedDeals.find({'otherInfo.'+x:y})
1973
        if exist.count() >0:
1974
            return {0:"Rank already assigned bundleId %s"%(exist[0]['skuBundleId'])}
17367 kshitij.so 1975
    if cursor.count() > 0:
1976
        return {0:"SkuBundleId information already present."}
14495 kshitij.so 1977
    else:
17367 kshitij.so 1978
        collection.insert(data)
14495 kshitij.so 1979
        return {1:"Data added successfully"}
1980
 
14499 kshitij.so 1981
def searchCollection(class_name, sku, skuBundleId):
14497 kshitij.so 1982
    data = []
1983
    collection = get_mongo_connection().Catalog[class_name]
15076 kshitij.so 1984
    if class_name == "Notifications":
1985
        cursor = collection.find({'skuBundleId':skuBundleId})
1986
        for val in cursor:
1987
            master = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':val['skuBundleId']}))
1988
            if len(master) > 0:
1989
                val['brand'] = master[0]['brand']
1990
                val['model_name'] = master[0]['model_name']
1991
                val['skuBundleId'] = master[0]['skuBundleId']
1992
            else:
1993
                val['brand'] = ""
1994
                val['model_name'] = ""
1995
                val['skuBundleId'] = val['skuBundleId']
1996
            data.append(val)
15095 kshitij.so 1997
        return data
15853 kshitij.so 1998
    master = None
14499 kshitij.so 1999
    if sku is not None:
15853 kshitij.so 2000
        if COLLECTION_MAP.has_key(class_name):
2001
            master = get_mongo_connection().Catalog.MasterData.find_one({'_id':sku})
2002
            cursor = collection.find({'skuBundleId':master['skuBundleId']})
2003
        else:
2004
            cursor = collection.find({'sku':sku})
14499 kshitij.so 2005
        for val in cursor:
15853 kshitij.so 2006
            if master is None:
2007
                master = get_mongo_connection().Catalog.MasterData.find_one({'_id':val['sku']})
2008
            if master is not None:
2009
                val['brand'] = master['brand']
2010
                val['source_product_name'] = master['source_product_name']
2011
                val['skuBundleId'] = master['skuBundleId']
20459 kshitij.so 2012
                val['product_name'] = master['product_name']
2013
                val['source'] = SOURCE_MAP.get(master['source_id'])
14499 kshitij.so 2014
            else:
2015
                val['brand'] = ""
2016
                val['source_product_name'] = ""
2017
                val['skuBundleId'] = ""
2018
            data.append(val)
2019
        return data
2020
    else:
15853 kshitij.so 2021
        if not COLLECTION_MAP.has_key(class_name):
2022
            skuIds = get_mongo_connection().Catalog.MasterData.find({'skuBundleId':skuBundleId}).distinct('_id')
2023
            for sku in skuIds:
2024
                cursor = collection.find({'sku':sku})
2025
                for val in cursor:
2026
                    master = list(get_mongo_connection().Catalog.MasterData.find({'_id':val['sku']}))
2027
                    if len(master) > 0:
2028
                        val['brand'] = master[0]['brand']
2029
                        val['source_product_name'] = master[0]['source_product_name']
2030
                        val['skuBundleId'] = master[0]['skuBundleId']
20461 kshitij.so 2031
                        val['product_name'] = master[0]['product_name']
2032
                        val['source'] = SOURCE_MAP.get(master[0]['source_id'])
15853 kshitij.so 2033
                    else:
2034
                        val['brand'] = ""
2035
                        val['source_product_name'] = ""
2036
                        val['skuBundleId'] = ""
2037
                    data.append(val)
2038
            return data
2039
        else:
2040
            cursor = collection.find({'skuBundleId':skuBundleId})
14499 kshitij.so 2041
            for val in cursor:
15853 kshitij.so 2042
                master = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':val['skuBundleId']}))
14499 kshitij.so 2043
                if len(master) > 0:
2044
                    val['brand'] = master[0]['brand']
2045
                    val['source_product_name'] = master[0]['source_product_name']
2046
                else:
2047
                    val['brand'] = ""
2048
                    val['source_product_name'] = ""
2049
                data.append(val)
15853 kshitij.so 2050
            return data
14495 kshitij.so 2051
 
15074 kshitij.so 2052
def __getBrandIdForBrand(brandName, category_id):
2053
    brandInfo = Brands.query.filter(Brands.category_id==category_id).filter(Brands.name == brandName).all()
2054
    if brandInfo is None or len(brandInfo)!=1:
2055
        raise
2056
    else:
2057
        return brandInfo[0].id
2058
 
14588 kshitij.so 2059
def addNewItem(data):
14594 kshitij.so 2060
    try:
2061
        data['updatedOn'] = to_java_date(datetime.now())
2062
        data['addedOn'] = to_java_date(datetime.now())
2063
        data['priceUpdatedOn'] = to_java_date(datetime.now())
2064
        max_id = list(get_mongo_connection().Catalog.MasterData.find().sort([('_id',pymongo.DESCENDING)]).limit(1))
2065
        max_bundle = list(get_mongo_connection().Catalog.MasterData.find().sort([('skuBundleId',pymongo.DESCENDING)]).limit(1))
2066
        data['_id'] = max_id[0]['_id'] + 1
2067
        data['skuBundleId'] = max_bundle[0]['skuBundleId'] + 1
2068
        data['identifier'] = str(data['identifier'])
2069
        data['secondaryIdentifier'] = str(data['secondaryIdentifier'])
17115 manish.sha 2070
        data['model_name'] = str(data['model_name'])
15074 kshitij.so 2071
        data['brand_id'] = __getBrandIdForBrand(data['brand'], data['category_id'])
17746 kshitij.so 2072
        data['shippingCost'] = float(data['shippingCost'])
19559 kshitij.so 2073
        data['internalRank'] = int(data['internalRank'])
17603 kshitij.so 2074
        if data['category_id'] ==6 and data['subCategoryId'] ==0:
17606 kshitij.so 2075
            return {0:'Sub-Category not selected'}
17608 kshitij.so 2076
        elif data['category_id'] !=6 and data['subCategoryId'] !=0:
2077
            return {0:'Sub-Category not valid'}
2078
        else:
2079
            pass
17604 kshitij.so 2080
        data['subCategory'] = SUB_CATEGORY_MAP.get(data['subCategoryId'])
14594 kshitij.so 2081
        get_mongo_connection().Catalog.MasterData.insert(data)
2082
        return {1:'Data added successfully'}
2083
    except Exception as e:
2084
        print e
2085
        return {0:'Unable to add data.'}
15130 kshitij.so 2086
    finally:
2087
        session.close()
14588 kshitij.so 2088
 
2089
def addItemToExistingBundle(data):
2090
    try:
2091
        data['updatedOn'] = to_java_date(datetime.now())
2092
        data['addedOn'] = to_java_date(datetime.now())
2093
        data['priceUpdatedOn'] = to_java_date(datetime.now())
14593 kshitij.so 2094
        max_id = list(get_mongo_connection().Catalog.MasterData.find().sort([('_id',pymongo.DESCENDING)]).limit(1))
14590 kshitij.so 2095
        data['_id'] = max_id[0]['_id'] + 1
14594 kshitij.so 2096
        data['identifier'] = str(data['identifier'])
2097
        data['secondaryIdentifier'] = str(data['secondaryIdentifier'])
17115 manish.sha 2098
        data['model_name'] = str(data['model_name'])
15074 kshitij.so 2099
        data['brand_id'] = __getBrandIdForBrand(data['brand'], data['category_id'])
17746 kshitij.so 2100
        data['shippingCost'] = float(data['shippingCost'])
19559 kshitij.so 2101
        data['internalRank'] = int(data['internalRank'])
17603 kshitij.so 2102
        if data['category_id'] ==6 and data['subCategoryId'] ==0:
17606 kshitij.so 2103
            return {0:'Sub-Category not selected'}
17608 kshitij.so 2104
        elif data['category_id'] !=6 and data['subCategoryId'] !=0:
2105
            return {0:'Sub-Category not valid'}
2106
        else:
2107
            pass
17604 kshitij.so 2108
        data['subCategory'] = SUB_CATEGORY_MAP.get(data['subCategoryId'])
14588 kshitij.so 2109
        get_mongo_connection().Catalog.MasterData.insert(data)
2110
        return {1:'Data added successfully.'}
14594 kshitij.so 2111
    except Exception as e:
2112
        print e
14588 kshitij.so 2113
        return {0:'Unable to add data.'}
15130 kshitij.so 2114
    finally:
2115
        session.close()
14588 kshitij.so 2116
 
2117
def updateMaster(data, multi):
15130 kshitij.so 2118
    try:
2119
        print data
2120
        if multi != 1:
2121
            _id = data.pop('_id')
2122
            skuBundleId = data.pop('skuBundleId')
2123
            data['updatedOn'] = to_java_date(datetime.now())
2124
            data['identifier'] = str(data['identifier'])
2125
            data['secondaryIdentifier'] = str(data['secondaryIdentifier'])
17115 manish.sha 2126
            data['model_name'] = str(data['model_name'])
17746 kshitij.so 2127
            data['shippingCost'] = float(data['shippingCost'])
19559 kshitij.so 2128
            data['internalRank'] = int(data['internalRank'])
15130 kshitij.so 2129
            data['brand_id'] = __getBrandIdForBrand(data['brand'], data['category_id'])
17603 kshitij.so 2130
            if data['category_id'] ==6 and data['subCategoryId'] ==0:
17606 kshitij.so 2131
                return {0:'Sub-Category not selected'}
17608 kshitij.so 2132
            elif data['category_id'] !=6 and data['subCategoryId'] !=0:
2133
                return {0:'Sub-Category not valid'}
2134
            else:
2135
                pass
17604 kshitij.so 2136
            data['subCategory'] = SUB_CATEGORY_MAP.get(data['subCategoryId'])
15130 kshitij.so 2137
            get_mongo_connection().Catalog.MasterData.update({'_id':_id},{"$set":data},upsert=False)
19559 kshitij.so 2138
            get_mongo_connection().Catalog.MasterData.update({'skuBundleId':skuBundleId},{"$set":{'internalRank':data['internalRank']}},upsert=False, multi=True)
15130 kshitij.so 2139
            return {1:'Data updated successfully.'}
2140
        else:
2141
            _id = data.pop('_id')
2142
            skuBundleId = data.pop('skuBundleId')
2143
            data['updatedOn'] = to_java_date(datetime.now())
2144
            data['identifier'] = str(data['identifier'])
2145
            data['secondaryIdentifier'] = str(data['secondaryIdentifier'])
2146
            data['brand_id'] = __getBrandIdForBrand(data['brand'], data['category_id'])
17115 manish.sha 2147
            data['model_name'] = str(data['model_name'])
17746 kshitij.so 2148
            data['shippingCost'] = float(data['shippingCost'])
19559 kshitij.so 2149
            data['internalRank'] = int(data['internalRank'])
17603 kshitij.so 2150
            if data['category_id'] ==6 and data['subCategoryId'] ==0:
17606 kshitij.so 2151
                return {0:'Sub-Category not selected'}
17608 kshitij.so 2152
            elif data['category_id'] !=6 and data['subCategoryId'] !=0:
2153
                return {0:'Sub-Category not valid'}
2154
            else:
2155
                pass
17604 kshitij.so 2156
            data['subCategory'] = SUB_CATEGORY_MAP.get(data['subCategoryId'])
15130 kshitij.so 2157
            get_mongo_connection().Catalog.MasterData.update({'_id':_id},{"$set":data},upsert=False)
2158
            similarItems = get_mongo_connection().Catalog.MasterData.find({'skuBundleId':skuBundleId})
2159
            for item in similarItems:
2160
                if item['_id'] == _id:
2161
                    continue
2162
                item['updatedOn'] = to_java_date(datetime.now())
2163
                item['thumbnail'] = data['thumbnail']
2164
                item['category'] = data['category']
2165
                item['category_id'] = data['category_id']
2166
                item['is_shortage'] = data['is_shortage']
2167
                item['mrp'] = data['mrp']
2168
                item['status'] = data['status']
2169
                item['maxPrice'] = data['maxPrice']
2170
                item['brand_id'] = data['brand_id']
17603 kshitij.so 2171
                item['subCategoryId'] = data['subCategoryId']
2172
                item['subCategory'] = data['subCategory']
19559 kshitij.so 2173
                item['internalRank'] = data['internalRank']
15130 kshitij.so 2174
                similar_item_id = item.pop('_id')
2175
                get_mongo_connection().Catalog.MasterData.update({'_id':similar_item_id},{"$set":item},upsert=False)
2176
            return {1:'Data updated successfully.'}
17603 kshitij.so 2177
    except:
20689 kshitij.so 2178
        traceback.print_exc()
17603 kshitij.so 2179
        return {0:'Unable to update data'}
15130 kshitij.so 2180
    finally:
2181
        session.close()
14619 kshitij.so 2182
 
2183
def getLiveCricScore():
2184
    return mc.get('liveScore')
14852 kshitij.so 2185
 
2186
def addBundleToNotification(data):
2187
    try:
15069 kshitij.so 2188
        collection = get_mongo_connection().Catalog.Notifications
14852 kshitij.so 2189
        cursor = collection.find({'skuBundleId':data['skuBundleId']})
2190
        if cursor.count() > 0:
2191
            return {0:"SkuBundleId information already present."}
2192
        else:
2193
            collection.insert(data)
2194
            return {1:'Data updated successfully.'}
2195
    except:
2196
        return {0:'Unable to add data.'}
2197
 
2198
def getAllNotifications(offset, limit):
2199
    data = []
15069 kshitij.so 2200
    collection = get_mongo_connection().Catalog.Notifications
16450 kshitij.so 2201
    cursor = collection.find().sort([('endDate',pymongo.DESCENDING)]).skip(offset).limit(limit)
14852 kshitij.so 2202
    for val in cursor:
15072 kshitij.so 2203
        master = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':val['skuBundleId']}))
14852 kshitij.so 2204
        if len(master) > 0:
2205
            val['brand'] = master[0]['brand']
15071 kshitij.so 2206
            val['model_name'] = master[0]['model_name']
14852 kshitij.so 2207
            val['skuBundleId'] = master[0]['skuBundleId']
2208
        else:
2209
            val['brand'] = ""
15071 kshitij.so 2210
            val['model_name'] = ""
2211
            val['skuBundleId'] = val['skuBundleId']
14852 kshitij.so 2212
        data.append(val)
2213
    return data
14997 kshitij.so 2214
 
2215
def getBrandsForFilter(category_id):
2216
    if mc.get("brandFilter") is None:
15095 kshitij.so 2217
        print "Populating brand data for category_id %d" %(category_id)
17469 kshitij.so 2218
        tabData, mobData, accData = [], [], []
14997 kshitij.so 2219
        mobileDeals = get_mongo_connection().Catalog.Deals.aggregate([
16170 kshitij.so 2220
                                                                      {"$match":{"category_id":3,"showDeal":1,"totalPoints":{"$gt":-100}}
14997 kshitij.so 2221
                                                                    },
2222
                                                                 {"$group" : 
2223
                                                                  {'_id':{'brand_id':'$brand_id','brand':'$brand'},'count':{'$sum':1}}
2224
                                                                  }
2225
                                                                ])
14588 kshitij.so 2226
 
14997 kshitij.so 2227
        tabletDeals = get_mongo_connection().Catalog.Deals.aggregate([
16170 kshitij.so 2228
                                                                      {"$match":{"category_id":5,"showDeal":1,"totalPoints":{"$gt":-100}}
14997 kshitij.so 2229
                                                                    },
2230
                                                                 {"$group" : 
2231
                                                                  {'_id':{'brand_id':'$brand_id','brand':'$brand'},'count':{'$sum':1}}
2232
                                                                  }
2233
                                                                ])
2234
 
17469 kshitij.so 2235
        accessoriesDeals = get_mongo_connection().Catalog.Deals.aggregate([
19597 kshitij.so 2236
                                                                      {"$match":{"category_id":6,"showDeal":1,"dealRankPoints":{"$gt":0}}
17469 kshitij.so 2237
                                                                    },
2238
                                                                 {"$group" : 
2239
                                                                  {'_id':{'brand_id':'$brand_id','brand':'$brand'},'count':{'$sum':1}}
2240
                                                                  }
2241
                                                                ])
2242
 
14997 kshitij.so 2243
        #print mobileDeals
2244
        #print "==========Mobile data ends=========="
2245
 
2246
        #print tabletDeals
2247
        #print "==========Tablet data ends=========="
2248
 
2249
        #print allDeals
2250
        #print "==========All deal data ends========="
2251
 
2252
        for mobileDeal in mobileDeals['result']:
2253
            if mobileDeal.get('_id').get('brand_id') != 0:
2254
                tempMap = {}
2255
                tempMap['brand'] = mobileDeal.get('_id').get('brand')
2256
                tempMap['brand_id'] = mobileDeal.get('_id').get('brand_id')
2257
                tempMap['count'] = mobileDeal.get('count')
2258
                mobData.append(tempMap)
2259
 
2260
        for tabletDeal in tabletDeals['result']:
2261
            if tabletDeal.get('_id').get('brand_id') != 0:
2262
                tempMap = {}
2263
                tempMap['brand'] = tabletDeal.get('_id').get('brand')
2264
                tempMap['brand_id'] = tabletDeal.get('_id').get('brand_id')
2265
                tempMap['count'] = tabletDeal.get('count')
2266
                tabData.append(tempMap)
2267
 
17469 kshitij.so 2268
        for accessoryDeal in accessoriesDeals['result']:
2269
            if accessoryDeal.get('_id').get('brand_id') != 0:
2270
                tempMap = {}
2271
                tempMap['brand'] = accessoryDeal.get('_id').get('brand')
2272
                tempMap['brand_id'] = accessoryDeal.get('_id').get('brand_id')
2273
                tempMap['count'] = accessoryDeal.get('count')
2274
                accData.append(tempMap)
14997 kshitij.so 2275
 
19597 kshitij.so 2276
        mc.set("brandFilter",{3:mobData, 5:tabData, 6:accData}, 600)  
14997 kshitij.so 2277
 
15062 kshitij.so 2278
    return sorted(mc.get("brandFilter").get(category_id), key = lambda x: (-x['count'], x['brand']))
15375 kshitij.so 2279
 
15459 kshitij.so 2280
def getStaticDeals(offset, limit, category_id, direction):
15375 kshitij.so 2281
    user_specific_deals = mc.get("staticDeals")
2282
    if user_specific_deals is None:
2283
        __populateStaticDeals()
2284
        user_specific_deals = mc.get("staticDeals")
15459 kshitij.so 2285
    rev = False
2286
    if direction is None or direction == -1:
2287
        rev=True
2288
    return sorted((user_specific_deals.get(category_id))[offset:offset+limit],reverse=rev)
15375 kshitij.so 2289
 
2290
def __populateStaticDeals():
2291
    print "Populating memcache for static deals"
2292
    outer_query = []
2293
    outer_query.append({"showDeal":1})
2294
    query = {}
16170 kshitij.so 2295
    query['$gt'] = -100
15375 kshitij.so 2296
    outer_query.append({'totalPoints':query})
2297
    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)]))
2298
    mobile_deals = []
2299
    tablet_deals = []
2300
    for deal in all_deals:
2301
        item = get_mongo_connection().Catalog.MasterData.find({'_id':deal['_id']})
2302
        if deal['category_id'] ==3:
2303
            mobile_deals.append(getItemObjForStaticDeals(item[0]))
2304
        elif deal['category_id'] ==5:
2305
            tablet_deals.append(getItemObjForStaticDeals(item[0]))
2306
        else:
2307
            continue
2308
 
2309
    random.shuffle(mobile_deals,random.random)
2310
    random.shuffle(tablet_deals,random.random)
2311
 
2312
    mem_cache_val = {3:mobile_deals, 5:tablet_deals}
2313
    mc.set("staticDeals", mem_cache_val, 3600)
2314
 
17733 kshitij.so 2315
def getItemObjForStaticDeals(item,transform=None):
2316
    mpu = str(item.get('marketPlaceUrl'))
2317
    if transform:
2318
        if mpu.find("snapdeal")!=-1:
2319
            mpu = "http://m.snapdeal.com"+mpu[mpu.find("/product"):]
2320
        elif mpu.find("homeshop18")!=-1:
2321
            mpu = "http://m.homeshop18.com/product.mobi?productId="+item['identifier']
17735 kshitij.so 2322
        elif mpu.find("saholic.com")!=-1:
17746 kshitij.so 2323
            mpu = "http://m."+mpu[mpu.find("saholic.com"):]
17735 kshitij.so 2324
        elif mpu.find("shopclues.com")!=-1:
17733 kshitij.so 2325
            mpu = "http://m."+mpu[mpu.find("shopclues.com"):]
2326
        else:
2327
            pass
2328
 
2329
    return {'marketPlaceUrl':mpu,'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 2330
 
2331
def getItemByMerchantIdentifier(identifier, source_id):
2332
    skuData = None
17035 kshitij.so 2333
    if source_id in (1,2,4,5,6,7):
16300 manas 2334
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'identifier':identifier.strip(), 'source_id':source_id})
2335
    elif source_id == 3:
2336
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'secondaryIdentifier':identifier.strip(), 'source_id':source_id})
2337
    if skuData is None:
2338
        return {}
2339
    else:
2340
        return skuData
15375 kshitij.so 2341
 
17936 kshitij.so 2342
def getDealsForNotification(skuBundleIds,skipSplitting=False):
2343
    if not skipSplitting:
2344
        bundles= [int(skuBundleId) for skuBundleId in skuBundleIds.split(',')]
2345
        print bundles
2346
    else:
2347
        bundles = skuBundleIds
16406 kshitij.so 2348
    dealsList = []
16364 kshitij.so 2349
    dealsListMap = []
16406 kshitij.so 2350
    for bundleId in bundles:
2351
        outer_query = []
2352
        outer_query.append({ "$or": [ { "showDeal": 1} , { "prepaidDeal": 1 } ] })
2353
        outer_query.append({'skuBundleId':bundleId})
2354
        deals = get_mongo_connection().Catalog.Deals.find({"$and":outer_query})
2355
        for deal in deals:
2356
            dealsList.append(deal)
16364 kshitij.so 2357
    sortedMap = {}
2358
    rankMap = {}
2359
    rank = 0
16406 kshitij.so 2360
    for sorted_deal in dealsList:
16364 kshitij.so 2361
        if sortedMap.get(sorted_deal['skuBundleId']) is None:
2362
            sortedMap[sorted_deal['skuBundleId']] = {rank:[sorted_deal]}
2363
            rankMap[rank] = (sortedMap[sorted_deal['skuBundleId']].values())[0]
2364
            rank = rank +1
2365
        else:
2366
            for temp_list in sortedMap.get(sorted_deal['skuBundleId']).itervalues():
2367
                temp_list.append(sorted_deal)
2368
            rankMap[(sortedMap.get(sorted_deal['skuBundleId']).keys())[0]] = temp_list
2369
 
16367 kshitij.so 2370
    for dealList in [rankMap.get(k, []) for k in range(0, len(bundles))]:
16364 kshitij.so 2371
        temp = []
2372
        for d in dealList:
2373
            item = list(get_mongo_connection().Catalog.MasterData.find({'_id':d['_id']}))
2374
            if len(item) ==0:
2375
                continue
2376
            if d['dealType'] == 1 and d['source_id'] ==1:
2377
                item[0]['marketPlaceUrl'] = "http://www.amazon.in/dp/%s"%(item[0]['identifier'].strip())
2378
            elif d['source_id'] ==3:
2379
                item[0]['marketPlaceUrl'] = item[0]['marketPlaceUrl']+'?supc='+item[0].get('identifier')
2380
            else:
2381
                pass 
2382
            try:
2383
                cashBack = getCashBack(item[0]['_id'], item[0]['source_id'], item[0]['category_id'])
2384
                if not cashBack or cashBack.get('cash_back_status')!=1:
2385
                    item[0]['cash_back_type'] = 0
2386
                    item[0]['cash_back'] = 0
2387
                else:
2388
                    item[0]['cash_back_type'] = int(cashBack['cash_back_type'])
2389
                    item[0]['cash_back'] = cashBack['cash_back']
2390
            except:
2391
                print "Error in adding cashback to deals"
2392
                item[0]['cash_back_type'] = 0
2393
                item[0]['cash_back'] = 0
2394
            try:
2395
                item[0]['dp'] = d['dp']
2396
                item[0]['showDp'] = d['showDp']
2397
            except:
2398
                item[0]['dp'] = 0.0
2399
                item[0]['showDp'] = 0
17727 kshitij.so 2400
 
2401
            try:
2402
                if item[0]['showVideo']==0:
2403
                    item[0]['videoLink'] =""
2404
            except:
2405
                item[0]['videoLink'] =""
2406
            try:
2407
                if item[0]['quantity'] >1:
2408
                    ppq = float(item[0]['available_price'])/item[0]['quantity']
2409
 
2410
                    if ppq == round(ppq):
2411
                        item[0]['ppq'] = int(ppq)
2412
                    else:
2413
                        item[0]['ppq'] = round(ppq,2)
2414
                else:
2415
                    item[0]['ppq'] = 0
2416
            except:
2417
                item[0]['ppq'] = 0
2418
            if item[0]['category_id']!=6:
2419
                try:
18830 kshitij.so 2420
                    item[0]['filterLinkBrand'] = '/category/'+str(int(item[0]['category_id']))+'?searchFor='+urllib.quote(item[0]['brand'])+'&filter=brand&brands='+str(int(item[0]['brand_id']))
2421
                    item[0]['filterTextBrand'] = (item[0]['brand'])
17727 kshitij.so 2422
                except:
18830 kshitij.so 2423
                    pass
17727 kshitij.so 2424
            else:
2425
                try:
18051 kshitij.so 2426
                    if item[0]['subCategory']=='' or item[0]['subCategory'] is None or item[0]['subCategoryId']==0:
17727 kshitij.so 2427
                        raise
18830 kshitij.so 2428
                    item[0]['filterLinkSubCategory'] = '/category/'+str(int(item[0]['category_id']))+'?searchFor='+urllib.quote(item[0]['subCategory'])+'&filter=subcategory&subcategories='+str(int(item[0]['subCategoryId']))
2429
                    item[0]['filterTextSubCategory'] = (item[0]['subCategory'])
2430
                    item[0]['filterLinkBrand'] = '/category/'+str(int(item[0]['category_id']))+'?searchFor='+urllib.quote(item[0]['brand'])+'&filter=brand&brands='+str(int(item[0]['brand_id']))
2431
                    item[0]['filterTextBrand'] = (item[0]['brand'])
17727 kshitij.so 2432
                except:
18830 kshitij.so 2433
                    pass
17944 kshitij.so 2434
            try:
2435
                if item[0]['source_id']==4:
2436
                    item_availability_info = mc.get("item_availability_"+str(item[0]['identifier']).strip())
2437
                    if item_availability_info is None or len(item_availability_info)==0:
2438
                        item[0]['availabilityInfo'] = [{}]
2439
                    else:
2440
                        item[0]['availabilityInfo'] = item_availability_info
2441
            except:
2442
                item[0]['availabilityInfo'] = [{}]
19135 kshitij.so 2443
 
19193 kshitij.so 2444
            if item[0]['source_id']==4:
2445
                for av_info in item[0]['availabilityInfo']:
2446
                    if not av_info:
2447
                        continue
2448
                    av_info['cash_back'] = item[0]['cash_back']
2449
                    av_info['cash_back_type'] = item[0]['cash_back_type']
2450
                    netPriceAfterCashBack = av_info['sellingPrice'] 
19199 kshitij.so 2451
                    if av_info['cash_back_type'] ==1:
19207 kshitij.so 2452
                        netPriceAfterCashBack = av_info['sellingPrice'] - math.floor(float(av_info['sellingPrice'])*av_info['cash_back']/100)
19199 kshitij.so 2453
                    elif av_info['cash_back_type'] ==2:
19207 kshitij.so 2454
                        netPriceAfterCashBack = av_info['sellingPrice'] - math.floor(av_info['cash_back'])
19193 kshitij.so 2455
                    else:
2456
                        pass
2457
                    av_info['netPriceAfterCashBack'] = netPriceAfterCashBack
2458
 
2459
            if item[0]['source_id'] != SOURCE_MAP.get("PAYTM.COM"):
2460
                if item[0]['codAvailable'] ==1:
2461
                    paytmPrice = item[0]['available_price']
2462
                else:
2463
                    paytmPrice = item[0]['gross_price']
2464
 
2465
                if item[0]['cash_back_type'] ==1:
19207 kshitij.so 2466
                    item[0]['netPriceAfterCashBack'] = paytmPrice -  math.floor(float(paytmPrice)*item[0]['cash_back']/100)
19193 kshitij.so 2467
                elif item[0]['cash_back_type'] ==2:
19207 kshitij.so 2468
                    item[0]['netPriceAfterCashBack'] = paytmPrice -  math.floor(item[0]['cash_back'])
19193 kshitij.so 2469
                else:
2470
                    item[0]['netPriceAfterCashBack'] = paytmPrice
2471
 
2472
            else:
2473
                if item[0]['cash_back_type'] ==1:
19207 kshitij.so 2474
                    item[0]['netPriceAfterCashBack'] = item[0]['available_price'] -  math.floor(float(item[0]['available_price'])*item[0]['cash_back']/100)
19193 kshitij.so 2475
                elif item[0]['cash_back_type'] ==2:
19207 kshitij.so 2476
                    item[0]['netPriceAfterCashBack'] = item[0]['available_price'] -  math.floor(item[0]['cash_back'])
19193 kshitij.so 2477
                else:
2478
                    item[0]['netPriceAfterCashBack'] = item[0]['available_price']
2479
 
2480
 
19135 kshitij.so 2481
            item[0]['totalPoints'] = d['totalPoints']
17727 kshitij.so 2482
 
16364 kshitij.so 2483
            temp.append(item[0])
2484
        if len(temp) > 1:
2485
            temp = sorted(temp, key = lambda x: (x['available_price']),reverse=False)
2486
        dealsListMap.append(temp)
2487
    return dealsListMap
2488
 
16373 manas 2489
def getSkuBrandData(sku):
2490
    if sku is None:
2491
        return {}
2492
    else:
2493
        orders = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':sku})
2494
        if orders is None:
2495
            return {}
2496
        return orders
16488 kshitij.so 2497
 
2498
def addDealPoints(data):
2499
    collection = get_mongo_connection().Catalog.DealPoints
2500
    cursor = collection.find({'skuBundleId':data['skuBundleId']})
2501
    if cursor.count() > 0:
2502
        return {0:"Sku information already present."}
2503
    else:
2504
        collection.insert(data)
2505
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
2506
        return {1:"Data added successfully"}
2507
 
2508
def getAllBundlesWithDealPoints(offset, limit):
2509
    data = []
2510
    collection = get_mongo_connection().Catalog.DealPoints
2511
    cursor = collection.find().sort([('endDate',pymongo.DESCENDING)]).skip(offset).limit(limit)
2512
    for val in cursor:
2513
        master = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':val.get('skuBundleId')})
2514
        if master is not None:
2515
            val['brand'] = master['brand']
2516
            val['source_product_name'] = master['product_name']
2517
        else:
2518
            val['brand'] = ""
2519
            val['source_product_name'] = ""
2520
        data.append(val)
2521
    return data
16546 kshitij.so 2522
 
2523
def generateRedirectUrl(retailer_id, app_id):
2524
    try:
16663 manish.sha 2525
        if retailer_id <= 0:
2526
            return {'url':"","message":"Retailer Id not valid"}
16546 kshitij.so 2527
        d_app_offer = app_offers.get_by(id=app_id)
16605 manish.sha 2528
    except:
2529
        traceback.print_exc()
16546 kshitij.so 2530
    finally:
2531
        session.close()
2532
    if d_app_offer is None:
2533
        return {'url':"","message":"App id doesn't exist"}
16364 kshitij.so 2534
 
16915 manish.sha 2535
    final_user_payout = 0
2536
    if d_app_offer.override_payout:
2537
        final_user_payout = d_app_offer.overriden_payout
2538
    else:
2539
        final_user_payout = d_app_offer.user_payout
16546 kshitij.so 2540
 
16915 manish.sha 2541
    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)
2542
 
16546 kshitij.so 2543
    get_mongo_connection().AppOrder.AppTransaction.insert(appTransactions.__dict__)
2544
    embedd = str((appTransactions.__dict__).get('_id'))
16548 kshitij.so 2545
    try:
2546
        index = d_app_offer.link.index(".freeb.co.in")
2547
    except:
16605 manish.sha 2548
        traceback.print_exc()
16548 kshitij.so 2549
        return {'url':"","message":"Substring not found"}
2550
    redirect_url = d_app_offer.link[0:index]+"."+embedd+d_app_offer.link[index:]
16546 kshitij.so 2551
    get_mongo_connection().AppOrder.AppTransaction.update({'_id':ObjectId(embedd)},{"$set":{'redirect_url':redirect_url}})
16548 kshitij.so 2552
    return {'url':redirect_url,"message":"Success"}
16556 kshitij.so 2553
 
2554
def addPayout(payout, transaction_id):
2555
    try:
16764 manish.sha 2556
        print 'Got Response for Transaction Id:- '+ str(transaction_id)+ ' and Actual Payout:- '+str(payout)
16556 kshitij.so 2557
        transaction = list(get_mongo_connection().AppOrder.AppTransaction.find({'_id':ObjectId(transaction_id)}))
2558
        if len(transaction) > 0:
2559
            if (transaction[0])['payout_status'] ==1:
16753 manish.sha 2560
                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 2561
 
2562
                approvedAppTransaction = approved_app_transactions.get_by(transaction_id=transaction_id)
2563
                if approvedAppTransaction is None:
2564
                    approvedAppTransaction = approved_app_transactions()
16919 manish.sha 2565
                    approvedAppTransaction.app_id = transaction[0].get('app_id')
16782 manish.sha 2566
                    approvedAppTransaction.cash_back_description = CB_APPROVED
16919 manish.sha 2567
                    approvedAppTransaction.retailer_id = transaction[0].get('retailer_id')
16782 manish.sha 2568
                    approvedAppTransaction.transaction_id = transaction_id
16919 manish.sha 2569
                    approvedAppTransaction.transaction_time = to_py_date(long(transaction[0].get('transaction_time')))
2570
                    approvedAppTransaction.redirect_url = transaction[0].get('redirect_url')
16782 manish.sha 2571
                    approvedAppTransaction.payout_status = 2
2572
                    approvedAppTransaction.payout_description = CB_APPROVED
2573
                    approvedAppTransaction.cashback_status = 2 
2574
                    approvedAppTransaction.payout_amount = long(payout)
2575
                    approvedAppTransaction.payout_time = datetime.now()
16919 manish.sha 2576
                    approvedAppTransaction.offer_price = long(transaction[0].get('offer_price')) 
2577
                    approvedAppTransaction.overridenCashBack = transaction[0].get('overridenCashBack')
2578
                    approvedAppTransaction.isCashBackOverriden = transaction[0].get('isCashBackOverriden')
2579
                    approvedAppTransaction.user_payout = transaction[0].get('user_payout')
16782 manish.sha 2580
                    approvedAppTransaction.cashBackConsidered = False
16915 manish.sha 2581
                    if transaction[0].get('final_user_payout') is not None:
2582
                        approvedAppTransaction.final_user_payout = transaction[0].get('final_user_payout')
2583
                    else:
16919 manish.sha 2584
                        if transaction[0].get('isCashBackOverriden'):
2585
                            approvedAppTransaction.final_user_payout = transaction[0].get('overridenCashBack')
16915 manish.sha 2586
                        else:
16919 manish.sha 2587
                            approvedAppTransaction.final_user_payout = transaction[0].get('user_payout')
16782 manish.sha 2588
                    session.commit()
2589
 
2590
                    updateResult = _updateApprovedCashbackToUser(approvedAppTransaction.id)
16631 manish.sha 2591
                else:
16783 manish.sha 2592
                    approvedAppTransaction.payout_amount = long(payout)
2593
                    approvedAppTransaction.payout_time = datetime.now()
2594
                    if approvedAppTransaction.cashBackConsidered == False:
2595
                        updateResult = _updateApprovedCashbackToUser(approvedAppTransaction.id)
2596
                    session.commit()
16782 manish.sha 2597
 
2598
                    '''
2599
                    try:
2600
                        if int(transaction[0]['offer_price']) != payout or int(transaction[0]['user_payout']) < payout:
2601
                            _sendAlertForAppPayouts(int(transaction[0]['app_id']), int(transaction[0]['offer_price']), int(transaction[0]['user_payout']), payout)
2602
                    except:
2603
                        print traceback.print_exc()
2604
                    '''
16556 kshitij.so 2605
                return {'status':'ok','message':'Payout updated'}
2606
            elif (transaction[0])['payout_status'] ==2:
2607
                return {'status':'ok','message':'Payout already processed'}
2608
            else:
2609
                return {'status':'fail','message':'Something is wrong'}
2610
        else:
2611
            return {'status':'fail','message':'transaction_id not found'}
2612
    except:
16657 manish.sha 2613
        print traceback.print_exc()
16631 manish.sha 2614
        try:
16753 manish.sha 2615
            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 2616
        except:
2617
            print 'Data Inconsistency in Cashback Process'
16636 manish.sha 2618
            print traceback.print_exc()
16559 kshitij.so 2619
        return  {'status':'fail','message':'Something is wrong'}
16885 kshitij.so 2620
    finally:
2621
        session.close()
16556 kshitij.so 2622
 
16631 manish.sha 2623
def _updateApprovedCashbackToUser(approvedAppTransactionId):
2624
    approvedAppTransaction = approved_app_transactions.get_by(id=approvedAppTransactionId)
16915 manish.sha 2625
    if approvedAppTransaction.retailer_id < 0:
2626
        return False
2627
 
16631 manish.sha 2628
    currentMonth = datetime.today().month
2629
    currentDay = datetime.today().day
2630
    currentYear = datetime.today().year
2631
    fortNight = (currentMonth - 1)*2 + (currentDay/15)
2632
    if currentDay == 30 or currentDay ==31:
2633
        fortNight = fortNight-1
2634
    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()
2635
    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()
2636
    try:
2637
        if userAppCashbackObj is None:
2638
            userAppCashbackObj = user_app_cashbacks()
2639
            userAppCashbackObj.user_id = approvedAppTransaction.retailer_id
2640
            userAppCashbackObj.status = 'Approved'
16915 manish.sha 2641
            userAppCashbackObj.amount = approvedAppTransaction.final_user_payout
16631 manish.sha 2642
            userAppCashbackObj.fortnightOfYear = fortNight
2643
            userAppCashbackObj.yearVal = currentYear
2644
        else:
16915 manish.sha 2645
            userAppCashbackObj.amount = userAppCashbackObj.amount + approvedAppTransaction.final_user_payout
16631 manish.sha 2646
 
2647
        if userAppInstallObj is None:
2648
            app_offer = app_offers.get_by(id=approvedAppTransaction.app_id)
2649
            userAppInstallObj = user_app_installs()
2650
            userAppInstallObj.user_id = approvedAppTransaction.retailer_id
2651
            userAppInstallObj.fortnightOfYear = fortNight
2652
            userAppInstallObj.transaction_date = datetime(currentYear, currentMonth, currentDay, 0, 0, 0, 0).date()
2653
            userAppInstallObj.app_id = approvedAppTransaction.app_id
2654
            userAppInstallObj.app_name = app_offer.app_name
2655
            userAppInstallObj.installCount = 1
16915 manish.sha 2656
            userAppInstallObj.payoutAmount = approvedAppTransaction.final_user_payout
16631 manish.sha 2657
        else:
2658
            userAppInstallObj.installCount = userAppInstallObj.installCount + 1
16915 manish.sha 2659
            userAppInstallObj.payoutAmount = userAppInstallObj.payoutAmount +approvedAppTransaction.final_user_payout
16631 manish.sha 2660
 
2661
        approvedAppTransaction.cashBackConsidered = True
2662
        session.commit()
2663
        return True
2664
    except:
2665
        session.rollback()
16636 manish.sha 2666
        print traceback.print_exc()
16631 manish.sha 2667
        return False
16693 manish.sha 2668
 
2669
def _sendAlertForAppPayouts(app_id, offerPrice, userPayout, payout):
2670
    m = Email('localhost')
2671
    mFrom = "dtr@shop2020.in"
2672
    m.setFrom(mFrom)
20172 aman.kumar 2673
    mTo = ['rajneesh.arora@saholic.com','kshitij.sood@saholic.com','chaitnaya.vats@saholic.com','ritesh.chauhan@saholic.com','khushal.bhatia@saholic.com']
16693 manish.sha 2674
    for receipient in mTo:
2675
        m.addRecipient(receipient)
2676
    appOffer = app_offers.get_by(id=app_id)
2677
    if offerPrice != payout:
2678
        m.setSubject("Mismatch in Offer Price and Actual Pay Out for App Id:- "+str(appOffer.id)+" App Name:- "+str(appOffer.app_name))
2679
        message1 = "Offer Price:- "+ str(appOffer.offer_price) + "\n" + "Actual Pay Out:- "+ str(payout)
2680
        m.setTextBody(message1)
2681
    if userPayout > payout:
2682
        m.setSubject("User Pay Out greater than actual PayOut for App Id:- "+str(appOffer.id)+" App Name:- "+str(appOffer.app_name))
2683
        message2 = "User Pay Out Price:- "+ str(appOffer.user_payout) + "\n" + "Actual Pay Out:- "+ str(payout)
2684
        m.setTextBody(message2)
2685
    m.send()
16631 manish.sha 2686
 
16789 amit.gupta 2687
def rejectCashback(orderId, subOrderId):
16833 amit.gupta 2688
    cashBack = get_mongo_connection().Dtr.merchantOrder.update({"orderId":orderId, "subOrders.merchantSubOrderId":subOrderId}, 
16789 amit.gupta 2689
                                                               {"$set":{"subOrders.$.cashBackStatus":CB_REJECTED}})
16837 amit.gupta 2690
    print cashBack
16836 amit.gupta 2691
    return cashBack.get("nModified")
16894 manish.sha 2692
 
2693
def getAppOffers(retailer_id):
2694
    if not bool(mc.get("cached_app_offers_"+str(retailer_id))):
2695
        populateAppOffers(retailer_id)
2696
    return mc.get("cached_app_offers_"+str(retailer_id)) 
2697
 
2698
def populateAppOffers(retailerId):
2699
    retailerId = int(retailerId)
2700
    #offset = req.get_param_as_int("offset")
2701
    #limit = req.get_param_as_int("limit")
16941 manish.sha 2702
    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()
2703
    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 2704
    #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()
2705
 
2706
    appOffersMap = {}
2707
    priorityList = []
2708
    priorityMap = {}
2709
    for offer in priortizeders:
16941 manish.sha 2710
        if priorityMap.has_key(long(offer[1])):
2711
            offersVal = priorityMap.get(long(offer[1]))
2712
            offersVal.append(offer)
2713
            priorityMap[long(offer[1])]=offersVal
2714
        else:
2715
            offersVal = []
2716
            offersVal.append(offer)
2717
            priorityMap[long(offer[1])]=offersVal
2718
 
16894 manish.sha 2719
    priorityList = sorted(priorityMap)
2720
 
2721
    maxCount = len(nonPriortizedOffers) + len(priortizeders)
2722
 
16909 manish.sha 2723
    if priorityList is not None and len(priorityList)>0:
2724
        if maxCount < max(priorityList):
2725
            maxCount = max(priorityList)
16894 manish.sha 2726
 
2727
    count = 1
2728
    blockedPlaces = []
2729
    availablePlaces = []
2730
    while count <= maxCount:
2731
        if count in priorityList:
2732
            blockedPlaces.append(count)
2733
        else:
2734
            availablePlaces.append(count)
2735
        count = count +1
16941 manish.sha 2736
    print 'Blocked Places', blockedPlaces
16894 manish.sha 2737
    for val in blockedPlaces:
16941 manish.sha 2738
        key = val
2739
        for offerObj in priorityMap.get(val):
2740
            while appOffersMap.has_key(key):
2741
                key = key+1
2742
            appOffersMap[key] = long(offerObj[0])
2743
            if key in availablePlaces:
2744
                availablePlaces.remove(key)
2745
 
2746
    print 'Available Places', availablePlaces
2747
 
16894 manish.sha 2748
    i=0
2749
    for val in availablePlaces:
16899 manish.sha 2750
        if i<len(nonPriortizedOffers):
16902 manish.sha 2751
            appOffersMap[val]= long(nonPriortizedOffers[i][0])
16899 manish.sha 2752
        else:
2753
            break
2754
        i=i+1
16901 manish.sha 2755
    print 'AppOffersMap', appOffersMap
16894 manish.sha 2756
 
2757
    finalAppOffersMap = {}
2758
    if len(appOffersMap) > 0:
2759
        for key in sorted(appOffersMap):               
2760
            finalAppOffersMap[key] = appOffersMap[key]
2761
 
2762
        mc.set("cached_app_offers_"+str(retailerId), finalAppOffersMap, 120)
2763
    else:
2764
        print 'No Offers'
2765
        mc.set("cached_app_offers_"+str(retailerId), {}, 10)              
17280 manish.sha 2766
 
19556 manas 2767
def sendNotification(userIds, campaignName, title, message,notificationtype, url, expiresat='2999-01-01', sendsms=False, smstext=None):
2768
    max_id = list(get_mongo_connection_dtr_data().User.notificationcampaigns.find().sort([('_id',pymongo.DESCENDING)]).limit(1))
19337 manish.sha 2769
    if len(max_id) ==0:
2770
        max_id = 0
2771
    else:
2772
        max_id = max_id[0]['_id']
2773
    max_id = max_id +1
19362 manish.sha 2774
    campaign = NotificationCampaign(max_id, campaignName, title, message, "SELECT User.id from users User where User.id="+str(userIds[0]), url, to_java_date(datetime.now()), to_java_date(datetime.now()+timedelta(days=730)), notificationtype, 'active', sendsms, smstext, 0, 0, 'BATCH_CREDIT')
19556 manas 2775
    get_mongo_connection_dtr_data().User.notificationcampaigns.insert(campaign.__dict__)
17302 kshitij.so 2776
 
2777
def getDummyDeals(categoryId, offset, limit):
2778
    outer_query = []
2779
    outer_query.append({"showDeal":1})
2780
    outer_query.append({"category_id":categoryId})
2781
    query = {}
2782
    query['$gt'] = -100
2783
    outer_query.append({'totalPoints':query})
2784
    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))
2785
    returnObj = []
2786
    for deal in all_deals:
17306 kshitij.so 2787
        item = list(get_mongo_connection().Catalog.MasterData.find({'_id':deal['_id']}))
17734 kshitij.so 2788
        returnObj.append(getItemObjForStaticDeals(item[0],transform=True))
17302 kshitij.so 2789
    return returnObj
17367 kshitij.so 2790
 
17469 kshitij.so 2791
def searchDummyDeals(search_term , limit, offset):
17367 kshitij.so 2792
    data = []
2793
    uniqueMap = {}
2794
    if search_term is not None:
2795
        terms = search_term.split(' ')
2796
        outer_query = []
2797
        for term in terms:
2798
            outer_query.append({"source_product_name":re.compile(term, re.IGNORECASE)})
2799
        try:
2800
            collection = get_mongo_connection().Catalog.MasterData.find({"$and":outer_query,'source_id':{'$in':SOURCE_MAP.keys()}})
2801
            for record in collection:
2802
                data.append(record)
2803
        except:
2804
            pass
2805
    else:
2806
        collection = get_mongo_connection().Catalog.MasterData.find({'source_id':{'$in':SOURCE_MAP.keys()}})
2807
        for record in collection:
2808
            data.append(record)
2809
    for x in data:
2810
        if not uniqueMap.has_key(x['skuBundleId']):
17469 kshitij.so 2811
            uniqueMap[x['skuBundleId']] = {'source_product_name':x['source_product_name'],'skuBundleId':x['skuBundleId'],'thumbnail':x['thumbnail']}
17367 kshitij.so 2812
 
17469 kshitij.so 2813
    if (offset + limit) > len(uniqueMap.values()):
2814
        limit = len(uniqueMap.values()) - offset - 1
2815
 
2816
    count = 0
2817
#     for x in uniqueMap.values():
2818
#         print count,
2819
#         print '\t',
2820
#         print x
2821
#         count = count+1
17555 kshitij.so 2822
 
17469 kshitij.so 2823
    print offset
2824
    print limit
2825
 
2826
    return uniqueMap.values()[offset:limit+offset]
17367 kshitij.so 2827
 
17469 kshitij.so 2828
 
2829
def getDummyPricing(skuBundleId):
2830
    collection = get_mongo_connection().Catalog.MasterData.find({'source_id':{'$in':SOURCE_MAP.keys()},'skuBundleId':skuBundleId,'in_stock':1})
2831
    print collection.count()
2832
    cheapest = 99999999
2833
    cheapestDetails= None
2834
    returnMap = {}
2835
 
2836
    for d in collection:
2837
        if d['available_price'] < cheapest:
2838
            cheapestDetails = d
2839
            cheapest = int(d['available_price'])
2840
        if returnMap.has_key(d['source_id']):
17733 kshitij.so 2841
            d = getItemObjForStaticDeals(d,transform=True)
17469 kshitij.so 2842
            d['toShowStore'] = 0
2843
            returnMap[d['source_id']].append(d)
2844
        else:
2845
            temp = []
17733 kshitij.so 2846
            d = getItemObjForStaticDeals(d,transform=True)
17469 kshitij.so 2847
            d['toShowStore'] = 1
2848
            temp.append(d)
2849
            returnMap[d['source_id']] = temp
2850
    returnMap['cheapest'] = cheapestDetails
2851
    for y in returnMap.itervalues():
2852
        if isinstance(y, (list, tuple)):
2853
            (y[len(y)-1])['lastElement'] = 1
2854
        else:
2855
            pass
2856
    if returnMap['cheapest'] ==None:
2857
        dum = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':skuBundleId,'source_id':{"$in":SOURCE_MAP.keys()}})
2858
        returnMap['cheapest'] = {'thumbnail':dum['thumbnail'],'source_product_name':dum['source_product_name']}
2859
    return returnMap
17555 kshitij.so 2860
 
17603 kshitij.so 2861
 
17555 kshitij.so 2862
def addDealObject(data):
17570 kshitij.so 2863
    if data.get('img_url') is None or data.get('img_url')=="" or data.get('name') is None or data.get('name')=="":
2864
        return {0:'Invalid data'}   
17555 kshitij.so 2865
    try:
2866
        max_id = list(get_mongo_connection().Catalog.DealObject.find().sort([('_id',pymongo.DESCENDING)]).limit(1))
2867
        if len(max_id) ==0:
2868
            max_id = 0
17559 kshitij.so 2869
        else:
2870
            max_id = max_id[0]['_id']
2871
        data['_id'] = max_id +1
17555 kshitij.so 2872
        get_mongo_connection().Catalog.DealObject.insert(data)
2873
        return {1:'Data added successfully'}
2874
    except:
2875
        return {0:'Error in adding data'}
2876
 
17561 kshitij.so 2877
def getAllDealObjects(offset, limit):
2878
    data = []
2879
    collection = get_mongo_connection().Catalog.DealObject
2880
    cursor = collection.find({}).skip(offset).limit(limit)
2881
    for val in cursor:
17564 kshitij.so 2882
        data.append({'_id':val['_id'],'name':val['name']})
17561 kshitij.so 2883
    return data
17564 kshitij.so 2884
 
2885
def deleteDealObject(id):
2886
    try:
2887
        get_mongo_connection().Catalog.DealObject.remove({'_id':id})
17616 kshitij.so 2888
        get_mongo_connection().Catalog.FeaturedDealsDealObject.remove({'_id':id})
17564 kshitij.so 2889
        return {1:"Deal Object deleted"}
2890
    except:
2891
        return {0:"Error in deleting object"}
17566 kshitij.so 2892
 
2893
def getDealObjectById(id):
2894
    try:
2895
        data = get_mongo_connection().Catalog.DealObject.find({'_id':id})
2896
        return data
2897
    except:
17570 kshitij.so 2898
        return {}
17561 kshitij.so 2899
 
17570 kshitij.so 2900
def updateDealObject(data):
2901
    try:
2902
        _id = data['_id']
2903
        data.pop('_id')
2904
        get_mongo_connection().Catalog.DealObject.update({'_id':_id},{"$set":data},upsert=False)
2905
        return {1:"Data updated successfully"}
2906
    except:
2907
        return {0:"Error in updating data"}
2908
 
17610 kshitij.so 2909
def getAllFeaturedDealsForDealObject(offset, limit):
2910
    data = []
2911
    collection = get_mongo_connection().Catalog.FeaturedDealsDealObject
2912
    cursor = collection.find({}).skip(offset).limit(limit)
2913
    for val in cursor:
2914
        data.append(val)
2915
    return data
2916
 
2917
def addFeaturedDealForDealObject(data):
19280 kshitij.so 2918
    print data
2919
 
17610 kshitij.so 2920
    collection = get_mongo_connection().Catalog.FeaturedDealsDealObject
2921
    cursor = collection.find({'_id':data['_id']})
2922
    master = get_mongo_connection().Catalog.DealObject.find_one({'_id':data['_id']})
2923
    if master is None:
2924
        return {0:"Deal Object id wrong"}
2925
    otherInfoObj = data['otherInfo']
2926
    toPop = []
2927
    for x,y in otherInfoObj.iteritems():
19280 kshitij.so 2928
        if y==0 or y=="":
17610 kshitij.so 2929
            toPop.append(x)
2930
 
2931
    for popItem in toPop:
2932
        otherInfoObj.pop(popItem)
2933
    if len(otherInfoObj.keys())==0:
2934
        return {0:"No rank info to add"}
2935
 
2936
    for x,y in otherInfoObj.iteritems():
2937
        exist = get_mongo_connection().Catalog.FeaturedDealsDealObject.find({'otherInfo.'+x:y})
2938
        if exist.count() >0:
2939
            return {0:"Rank already assigned Deal Object Id %s"%(exist[0]['_id'])}
2940
    if cursor.count() > 0:
2941
        return {0:"Deal Object Id information already present."}
2942
    else:
2943
        collection.insert(data)
2944
        return {1:"Data added successfully"}
2945
 
17616 kshitij.so 2946
def deleteFeaturedDealObject(id):
2947
    try:
2948
        get_mongo_connection().Catalog.FeaturedDealsDealObject.remove({'_id':id})
2949
        return {1:"Deal Object deleted"}
2950
    except:
2951
        return {0:"Error in deleting object"}
17654 kshitij.so 2952
 
2953
def getSubCategoryForFilter(category_id):
2954
    if mc.get("subCategoryFilter") is None:
2955
        print "Populating subcategory data for category_id %d" %(category_id)
2956
        tabData, mobData, accData = [], [], []
2957
 
2958
        accessoriesDeals = get_mongo_connection().Catalog.Deals.aggregate([
19597 kshitij.so 2959
                                                                      {"$match":{"category_id":6,"showDeal":1,"dealRankPoints":{"$gt":0}}
17654 kshitij.so 2960
                                                                    },
2961
                                                                 {"$group" : 
2962
                                                                  {'_id':{'subCategoryId':'$subCategoryId','subCategory':'$subCategory'},'count':{'$sum':1}}
2963
                                                                  }
2964
                                                                ])
2965
 
2966
        for accessoryDeal in accessoriesDeals['result']:
2967
            if accessoryDeal.get('_id').get('subCategoryId') != 0:
2968
                tempMap = {}
2969
                tempMap['subCategory'] = accessoryDeal.get('_id').get('subCategory')
2970
                tempMap['subCategoryId'] = accessoryDeal.get('_id').get('subCategoryId')
2971
                tempMap['count'] = accessoryDeal.get('count')
2972
                accData.append(tempMap)
2973
 
2974
 
2975
        mc.set("subCategoryFilter",{3:mobData, 5:tabData, 6:accData}, 600)  
2976
 
2977
    return sorted(mc.get("subCategoryFilter").get(category_id), key = lambda x: (-x['count'], x['subCategory']))
17610 kshitij.so 2978
 
17727 kshitij.so 2979
def dummyLogin(data):
17731 kshitij.so 2980
    exist = list(get_mongo_connection().Catalog.DummyUser.find({'email':data['email'],'password':data['password']}))
17727 kshitij.so 2981
    if len(exist) > 0:
17728 kshitij.so 2982
        return {'user_id':exist[0]['_id'],'fullName':exist[0]['fullName']}
17727 kshitij.so 2983
    else:
2984
        return {'user_id':0}
17616 kshitij.so 2985
 
17727 kshitij.so 2986
def dummyRegister(data):
2987
    try:
2988
        exist = list(get_mongo_connection().Catalog.DummyUser.find({'email':data['email']}))
2989
        if len(exist) > 0:
2990
            return {'msg':"Email already registered",'user_id':0}
2991
        else:
2992
            max_id = list(get_mongo_connection().Catalog.DummyUser.find().sort([('_id',pymongo.DESCENDING)]).limit(1))
2993
            if len(max_id) ==0:
2994
                max_id = 0
2995
            else:
2996
                max_id = max_id[0]['_id']
2997
            data['_id'] = max_id +1
2998
            get_mongo_connection().Catalog.DummyUser.insert(data)
17728 kshitij.so 2999
            return {'msg':"Registration successful",'user_id':data['_id'],'fullName':data['fullName']}
17727 kshitij.so 3000
    except:
3001
        return {'msg':"Error in registration.",'user_id':0}
3002
 
17731 kshitij.so 3003
def getDummyUser(user_id):
3004
    exist = list(get_mongo_connection().Catalog.DummyUser.find({'_id':user_id}))
3005
    if len(exist) > 0:
3006
        return exist[0]
3007
    else:
3008
        return {'user_id':0,'fullName':"",'email':"","contactNumber":""}
3009
 
3010
def updateDummyUser(data):
3011
    try:
17732 kshitij.so 3012
        get_mongo_connection().Catalog.DummyUser.update({'_id':data['user_id']},{"$set":data},upsert=False)
17731 kshitij.so 3013
        return {'msg':"Data updated successfuly",'response':1}
3014
    except:
3015
        return {'msg':"Unable to update data",'response':0}
17936 kshitij.so 3016
 
18089 kshitij.so 3017
def getDealsForSearchText(subCategoryIds, searchTerm, offset, limit):
3018
    subCategories= [int(subCategoryId) for subCategoryId in subCategoryIds.split('^')]
18106 kshitij.so 3019
    print "SubCategories are ",subCategories
17936 kshitij.so 3020
    payload = {
18106 kshitij.so 3021
    "query": {
17936 kshitij.so 3022
        "bool": {
18106 kshitij.so 3023
            "must": [{
3024
                    "match": {
3025
                        "title": {
3026
                            "query": searchTerm,
3027
                            "operator": "and"
3028
                        }
17936 kshitij.so 3029
                    }
18106 kshitij.so 3030
                },
3031
 
3032
                {
3033
                    "in": {
3034
                        "subCategoryId": subCategories
3035
                    }
17936 kshitij.so 3036
                }
18106 kshitij.so 3037
 
3038
            ]
17936 kshitij.so 3039
        }
19135 kshitij.so 3040
    },
19580 kshitij.so 3041
    "sort": { "dealRankPoints": { "order": "desc" }}
18106 kshitij.so 3042
}
17944 kshitij.so 3043
    result =  get_elastic_search_connection().search(index="my_index", body=payload, from_=offset, size=limit)
17936 kshitij.so 3044
    totalCount= result['hits']['total']
3045
    temp = []
3046
    bundles = []
3047
    if len(result['hits']['hits']) > 0:
3048
        for x in result['hits']['hits']:
3049
            tempMap = {}
3050
            tempMap = {'skuBundleId':x['_source']['id'],'title':x['_source']['title']}
3051
            temp.append(tempMap)
3052
            bundles.append(x['_source']['id'])
18271 kshitij.so 3053
    #return temp
17936 kshitij.so 3054
    return getDealsForNotification(bundles, skipSplitting=True)
17731 kshitij.so 3055
 
18089 kshitij.so 3056
def getCountForSearchText(subCategoryIds, searchTerm):
3057
    subCategories= [int(subCategoryId) for subCategoryId in subCategoryIds.split('^')]
17936 kshitij.so 3058
    payload = {
18106 kshitij.so 3059
    "query": {
17936 kshitij.so 3060
        "bool": {
18106 kshitij.so 3061
            "must": [{
3062
                    "match": {
3063
                        "title": {
3064
                            "query": searchTerm,
3065
                            "operator": "and"
3066
                        }
17936 kshitij.so 3067
                    }
18106 kshitij.so 3068
                },
3069
 
3070
                {
3071
                    "in": {
3072
                        "subCategoryId": subCategories
3073
                    }
17936 kshitij.so 3074
                }
18106 kshitij.so 3075
 
3076
            ]
17936 kshitij.so 3077
        }
3078
    }
18106 kshitij.so 3079
}
17731 kshitij.so 3080
 
17944 kshitij.so 3081
    result =  get_elastic_search_connection().search(index="my_index", body=payload)
17936 kshitij.so 3082
    totalCount= result['hits']['total']
3083
    return {'searchTerm':searchTerm,'count':totalCount}
18271 kshitij.so 3084
 
3085
def getDealById(id):
3086
    item = list(get_mongo_connection().Catalog.MasterData.find({'_id':int(id)}))
3087
    d = get_mongo_connection().Catalog.Deals.find_one({'_id':int(id)})
19193 kshitij.so 3088
    if len(item) ==0:
3089
        return {}
18271 kshitij.so 3090
    if d is None:
3091
        d = {'showDp':0,'dp':0}
3092
    try:
3093
        cashBack = getCashBack(item[0]['_id'], item[0]['source_id'], item[0]['category_id'])
3094
        if not cashBack or cashBack.get('cash_back_status')!=1:
3095
            item[0]['cash_back_type'] = 0
3096
            item[0]['cash_back'] = 0
3097
        else:
3098
            if cashBack.get('maxCashBack') is not None:
3099
 
3100
                if cashBack.get('cash_back_type') ==1 and (float(cashBack.get('cash_back'))*item[0]['available_price'])/100 > cashBack.get('maxCashBack'):
3101
                    cashBack['cash_back_type'] = 2
3102
                    cashBack['cash_back'] = cashBack['maxCashBack']
3103
                elif cashBack.get('cash_back_type') ==2 and cashBack.get('cash_back') > cashBack.get('maxCashBack'):
3104
                    cashBack['cash_back'] = cashBack['maxCashBack']
17936 kshitij.so 3105
 
18271 kshitij.so 3106
            item[0]['cash_back_type'] = int(cashBack['cash_back_type'])
3107
            item[0]['cash_back'] = cashBack['cash_back']
3108
    except:
3109
        print "Error in adding cashback to deals"
3110
        item[0]['cash_back_type'] = 0
3111
        item[0]['cash_back'] = 0
3112
    try:
3113
        item[0]['dp'] = d['dp']
3114
        item[0]['showDp'] = d['showDp']
3115
    except:
3116
        item[0]['dp'] = 0.0
3117
        item[0]['showDp'] = 0
3118
    try:
3119
        item[0]['thumbnail'] = item[0]['thumbnail'].strip()
3120
    except:
3121
        pass
3122
 
3123
    try:
3124
        if item[0]['showVideo']==0:
3125
            item[0]['videoLink'] =""
3126
    except:
3127
        item[0]['videoLink'] =""
3128
    try:
3129
        if item[0]['quantity'] >1:
3130
            ppq = float(item[0]['available_price'])/item[0]['quantity']
3131
 
3132
            if ppq == round(ppq):
3133
                item[0]['ppq'] = int(ppq)
3134
            else:
3135
                item[0]['ppq'] = round(ppq,2)
3136
        else:
3137
            item[0]['ppq'] = 0
3138
    except:
3139
        item[0]['ppq'] = 0
3140
    if item[0]['category_id']!=6:
3141
        try:
18830 kshitij.so 3142
            item[0]['filterLinkBrand'] = '/category/'+str(int(item[0]['category_id']))+'?searchFor='+urllib.quote(item[0]['brand'])+'&filter=brand&brands='+str(int(item[0]['brand_id']))
3143
            item[0]['filterTextBrand'] = (item[0]['brand'])
18271 kshitij.so 3144
        except:
18830 kshitij.so 3145
            pass
18271 kshitij.so 3146
    else:
3147
        try:
3148
            if item[0]['subCategory']=='' or item[0]['subCategory'] is None or item[0]['subCategoryId']==0:
3149
                raise
18830 kshitij.so 3150
            item[0]['filterLinkSubCategory'] = '/category/'+str(int(item[0]['category_id']))+'?searchFor='+urllib.quote(item[0]['subCategory'])+'&filter=subcategory&subcategories='+str(int(item[0]['subCategoryId']))
3151
            item[0]['filterTextSubCategory'] = (item[0]['subCategory'])
3152
            item[0]['filterLinkBrand'] = '/category/'+str(int(item[0]['category_id']))+'?searchFor='+urllib.quote(item[0]['brand'])+'&filter=brand&brands='+str(int(item[0]['brand_id']))
3153
            item[0]['filterTextBrand'] = (item[0]['brand'])
18271 kshitij.so 3154
        except:
18830 kshitij.so 3155
            pass
18271 kshitij.so 3156
    try:
3157
        if item[0]['source_id']==4:
3158
            item_availability_info = mc.get("item_availability_"+str(item[0]['identifier']).strip())
3159
            if item_availability_info is None or len(item_availability_info)==0:
3160
                item[0]['availabilityInfo'] = [{}]
3161
            else:
3162
                item[0]['availabilityInfo'] = item_availability_info
3163
    except:
3164
        item[0]['availabilityInfo'] = [{}]
19193 kshitij.so 3165
 
3166
    if item[0]['source_id']==4:
3167
        for av_info in item[0]['availabilityInfo']:
3168
            if not av_info:
3169
                continue
3170
            av_info['cash_back'] = item[0]['cash_back']
3171
            av_info['cash_back_type'] = item[0]['cash_back_type']
3172
            netPriceAfterCashBack = av_info['sellingPrice'] 
19199 kshitij.so 3173
            if av_info['cash_back_type'] ==1:
19207 kshitij.so 3174
                netPriceAfterCashBack = av_info['sellingPrice'] - math.floor(float(av_info['sellingPrice'])*av_info['cash_back']/100)
19199 kshitij.so 3175
            elif av_info['cash_back_type'] ==2:
19207 kshitij.so 3176
                netPriceAfterCashBack = av_info['sellingPrice'] - math.floor(av_info['cash_back'])
19193 kshitij.so 3177
            else:
3178
                pass
3179
            av_info['netPriceAfterCashBack'] = netPriceAfterCashBack
3180
 
3181
    if item[0]['source_id'] != SOURCE_MAP.get("PAYTM.COM"):
3182
        if item[0]['codAvailable'] ==1:
3183
            paytmPrice = item[0]['available_price']
3184
        else:
3185
            paytmPrice = item[0]['gross_price']
3186
 
3187
        if item[0]['cash_back_type'] ==1:
19207 kshitij.so 3188
            item[0]['netPriceAfterCashBack'] = paytmPrice -  math.floor(float(paytmPrice)*item[0]['cash_back']/100)
19193 kshitij.so 3189
        elif item[0]['cash_back_type'] ==2:
19207 kshitij.so 3190
            item[0]['netPriceAfterCashBack'] = paytmPrice -  math.floor(item[0]['cash_back'])
19193 kshitij.so 3191
        else:
3192
            item[0]['netPriceAfterCashBack'] = paytmPrice
3193
 
3194
    else:
3195
        if item[0]['cash_back_type'] ==1:
19207 kshitij.so 3196
            item[0]['netPriceAfterCashBack'] = item[0]['available_price'] -  math.floor(float(item[0]['available_price'])*item[0]['cash_back']/100)
19193 kshitij.so 3197
        elif item[0]['cash_back_type'] ==2:
19207 kshitij.so 3198
            item[0]['netPriceAfterCashBack'] = item[0]['available_price'] -  math.floor(item[0]['cash_back'])
19193 kshitij.so 3199
        else:
3200
            item[0]['netPriceAfterCashBack'] = item[0]['available_price']
3201
 
18271 kshitij.so 3202
    return item[0]
3203
 
19288 kshitij.so 3204
def getOfferForUser(userId):
3205
    specialOffer = {}
3206
    promoOffer = get_mongo_connection().Catalog.PromoOffer.find_one({'user_id':userId})
3207
    try:
3208
        if promoOffer is not None:
3209
            offer = get_mongo_connection().Catalog.Promotions.find_one({'_id':promoOffer.get('offer_id')})
3210
            if offer is None:
3211
                raise
19355 kshitij.so 3212
            promo = Promotion(offer.get('_id'),offer.get('offer_name'),offer.get('offer_description') , offer.get('categories_applicable'), offer.get('sub_categories_not_applicable'),
19331 kshitij.so 3213
                     offer.get('startDate'), offer.get('endDate'), promoOffer.get('target1'), promoOffer.get('target1_cash_back_percetage'), promoOffer.get('target2'), promoOffer.get('target2_cash_back_percetage'), promoOffer.get('maxCashBack'), offer.get('url'),
19350 kshitij.so 3214
                     promoOffer.get('pending_order_value'), promoOffer.get('delivered_order_value'), promoOffer.get('last_run_timestamp'))
19354 kshitij.so 3215
 
19355 kshitij.so 3216
            promo.offer_description = "Get upto %d%% cashback"%(promo.target2_cash_back_percetage)
3217
 
19288 kshitij.so 3218
            specialOffer = promo.__dict__
3219
    except:
3220
        pass
3221
    return specialOffer
3222
 
19389 kshitij.so 3223
def getBrandSubCategoryInfo(category_id, id_list, type):
19402 kshitij.so 3224
    try:
3225
        id_list_mapping = {}
3226
        if type == "brandInfo":
3227
            brands = [int(brand_id) for brand_id in id_list.split('^')]
3228
            for brand in brands:
3229
                tm_brand = get_mongo_connection().Catalog.Deals.find_one({'brand_id':brand},{'brand':1})
3230
                id_list_mapping[brand] = tm_brand.get('brand')
3231
        elif type == "subCategoryInfo":
3232
            subCategories = [int(subCategoryId) for subCategoryId in id_list.split('^')]
3233
            for subCat in subCategories:
3234
                id_list_mapping[subCat] = SUB_CATEGORY_MAP.get(subCat)
3235
        else:
3236
            return {}
19389 kshitij.so 3237
 
19402 kshitij.so 3238
        if mc.get("brandSubCategoryInfo") is None:
3239
            collection =  get_mongo_connection().Catalog.Deals
3240
            result = collection.aggregate( 
3241
                    [
3242
                        {'$match':{'category_id':category_id,'showDeal':1}},
3243
                        {"$group": { "_id": { "subCategoryId": "$subCategoryId", "brand_id": "$brand_id", "brand":"$brand","subCategory":"$subCategory" }, "count": {"$sum": 1} } }
3244
                    ]
3245
                );
3246
            #from pprint import pprint
3247
            #pprint(result)
3248
 
3249
            subCategoryMap = {}
3250
            brandMap = {}
3251
 
3252
            for data in result['result']:
3253
                result_set = data['_id']
3254
                count = data['count']
3255
                subCategoryId = result_set['subCategoryId']
3256
                brand_id = result_set['brand_id']
3257
                subCategory = result_set['subCategory']
3258
                brand = result_set['brand']
3259
 
3260
                if subCategoryMap.has_key(subCategoryId):
3261
                    subCategoryMap.get(subCategoryId).append({'brand_id':brand_id, 'count':count, 'subCategory':subCategory, 'brand':brand})
3262
                else:
3263
                    subCategoryMap[subCategoryId] = [{'brand_id':brand_id, 'count':count, 'subCategory':subCategory, 'brand':brand}]
3264
 
3265
                if brandMap.has_key(brand_id):
3266
                    brandMap.get(brand_id).append({'subCategoryId':subCategoryId, 'count':count, 'subCategory':subCategory, 'brand':brand})
3267
                else:
3268
                    brandMap[brand_id] = [{'subCategoryId':subCategoryId, 'count':count, 'subCategory':subCategory, 'brand':brand}]
3269
 
3270
            mc.set("brandSubCategoryInfo",{'subCategoryMap':subCategoryMap, 'brandMap': brandMap}, 600)
19389 kshitij.so 3271
 
19402 kshitij.so 3272
 
3273
        returnMap = {}    
3274
        brandSubCategoryInfo = mc.get("brandSubCategoryInfo")
3275
        if brandSubCategoryInfo is None:
3276
            return {'idListInfo':id_list_mapping,'result':[]}
3277
 
3278
        if type == "subCategoryInfo":
3279
            if brandSubCategoryInfo.get('subCategoryMap') is None:
3280
                return {'idListInfo':id_list_mapping,'result':[]}
3281
            subCategories = [int(subCategoryId) for subCategoryId in id_list.split('^')]
3282
            subCategoryMap = brandSubCategoryInfo.get('subCategoryMap')
3283
            for subCategory in subCategories:
3284
                tempList = subCategoryMap.get(subCategory)
3285
                print tempList
3286
                if tempList is None:
3287
                    continue
3288
                for v in tempList:
3289
                    if returnMap.has_key(v['brand_id']):
3290
                        existing = returnMap.get(v['brand_id'])
3291
                        existing['count'] = existing['count'] + v['count'] 
3292
                    else:
3293
                        returnMap[v['brand_id']] = {'brand_id':v['brand_id'],'brand':v['brand'],'count':v['count']}
19389 kshitij.so 3294
 
19402 kshitij.so 3295
 
3296
        elif type == "brandInfo":
3297
            if brandSubCategoryInfo.get('brandMap') is None:
3298
                return {'idListInfo':id_list_mapping,'result':[]}
3299
            brands = [int(brand_id) for brand_id in id_list.split('^')]
3300
            brandMap = brandSubCategoryInfo.get('brandMap')
3301
            for brand_id in brands:
3302
                tempList = brandMap.get(brand_id)
3303
                print tempList
3304
                if tempList is None:
3305
                    continue
3306
                for v in tempList:
3307
                    if returnMap.has_key(v['subCategoryId']):
3308
                        existing = returnMap.get(v['subCategoryId'])
3309
                        existing['count'] = existing['count'] + v['count'] 
3310
                    else:
3311
                        returnMap[v['subCategoryId']] = {'subCategoryId':v['subCategoryId'],'subCategory':v['subCategory'],'count':v['count']}
19389 kshitij.so 3312
 
19402 kshitij.so 3313
        return {'idListInfo':id_list_mapping,'result':returnMap.values()}
3314
    except:
3315
        traceback.print_exc()
3316
        return {}
19389 kshitij.so 3317
 
19451 manas 3318
def refundAmountInWallet(jsonReq):
3319
    userId = int(jsonReq.get('user_id'))
3320
    emailId = jsonReq.get('email_id')
3321
    amount = int(jsonReq.get('amount'))
3322
    store = jsonReq.get('store')
3323
    refundType = jsonReq.get('type')
3324
    mobileNumber = jsonReq.get('mobile')
3325
    referenceId = jsonReq.get('reference_no')
3326
    referenceDescription = jsonReq.get('reference_description')
19514 manas 3327
    if not store:
19456 manas 3328
        store = None
19514 manas 3329
    else:
19517 manas 3330
        store = store
19451 manas 3331
    if lower(refundType)=='refund':
19511 manas 3332
        refundType = CREDIT_TYPE_REFUND
19451 manas 3333
    elif lower(refundType)=='adjustment':
19511 manas 3334
        refundType = CREDIT_TYPE_ADJUSTMENT
19451 manas 3335
    collection = get_mongo_connection().Dtr.crmrefundwallet
19511 manas 3336
    offer1 = CrmRefundWallet(userId,emailId,mobileNumber,amount,refundType,store,referenceId,referenceDescription,REFUND_ADJUSTMENT_MAP.get(0),to_java_date(datetime.now()))    
19451 manas 3337
    dict1 = todict(offer1)
3338
    collection.save(dict1)
3339
    return True
3340
 
19497 manas 3341
def updateCrmWalletStatus(status,_id,userId,batchId,approvedBy):
19482 manas 3342
    if batchId is None:
3343
        get_mongo_connection().Dtr.crmrefundwallet.update({'_id':ObjectId(_id),},{"$set":{"status":status,"update_timestamp":to_java_date(datetime.now())}})
3344
    else:
20340 amit.gupta 3345
        #Batch id should be none to ensure that it does not get override
3346
        get_mongo_connection().Dtr.crmrefundwallet.update({'_id':ObjectId(_id), 'batchId':None},{"$set":{"status":status,"update_timestamp":to_java_date(datetime.now()),"batchId":batchId,"approved_by":approvedBy}})
19463 manas 3347
 
19451 manas 3348
def fetchCrmRefundUsers(status,offset,limit):
19529 manas 3349
    if status is not None:
3350
        cursor = list(get_mongo_connection().Dtr.crmrefundwallet.find({"status":status}).skip(offset).limit(limit).sort("created_timestamp",-1))
3351
    else:
3352
        cursor = list(get_mongo_connection().Dtr.crmrefundwallet.find().skip(offset).limit(limit).sort("created_timestamp",-1))
19451 manas 3353
    return cursor
3354
 
19485 manas 3355
def fetchCrmRefundByBatchId(batchId):
19493 manas 3356
    cursor = get_mongo_connection().Dtr.crmrefundwallet.find_one({"batchId":int(batchId)})
19485 manas 3357
    return cursor
3358
 
19577 manas 3359
def userLookUpForSaholicId(userId):
3360
    result = None
3361
    try:
3362
        response = session.query(user_accounts.account_key).filter_by(user_id=userId).filter(user_accounts.account_type=='saholic').first()
3363
        if response is None:
3364
            result = 'User Not present in profitmandi'
3365
        else:
3366
            result = response[0]
3367
    except:
3368
        result = 'User Not present in profitmandi'
3369
        traceback.print_exc()
3370
    finally:
3371
        session.close()
3372
    return result
19453 manas 3373
 
19880 naman 3374
 
3375
def getAllItemCasback(itemcashback_id,offset,limit):
3376
    itemcashbackcon = get_mongo_connection().Catalog.ItemCashBack
20435 kshitij.so 3377
    masterData = get_mongo_connection().Catalog.MasterData
19880 naman 3378
    if itemcashback_id is None: 
20435 kshitij.so 3379
        response = []
3380
        response_cash_back = list(itemcashbackcon.find().skip(offset).limit(limit))
3381
        for r in response_cash_back:
3382
            master = masterData.find_one({'_id':r['sku']})
20436 kshitij.so 3383
            r['source'] = SOURCE_MAP.get(master['source_id'])
3384
            r['product_name'] = master['product_name']
3385
            response.append(r)
19880 naman 3386
    else:
20439 kshitij.so 3387
        response = itemcashbackcon.find_one({'_id' : ObjectId(itemcashback_id)})
20435 kshitij.so 3388
        master = masterData.find_one({'_id':response['sku']})
3389
        response['source'] = SOURCE_MAP.get(master['source_id'])
3390
        response['product_name'] = master['product_name']
19880 naman 3391
    return response
3392
 
3393
def itemCashbackAdd(item_skuId,cb,cb_description,cb_type,cb_status):
3394
    itemcashbackcon = get_mongo_connection().Catalog.ItemCashBack
3395
    response = list(itemcashbackcon.find({'sku':item_skuId}))
3396
 
3397
    if len(response) ==  0:
3398
        itemcashbackcon.insert({'sku':item_skuId,'cash_back_description':cb_description,'cash_back':cb,'cash_back_type':cb_type,'cash_back_status': cb_status})
3399
        return True     
3400
 
3401
 
19654 kshitij.so 3402
def getHeaderLinks(category_id):
3403
    result = {}
3404
    if category_id == 6:
3405
        rank = 1
3406
        for subCat in SUB_CATEGORY_HEADER_RANKING:
3407
            result[rank] = {'subCategoryId':subCat,'subCategory':SUB_CATEGORY_MAP.get(subCat)}
3408
            rank = rank + 1
3409
    return result.values()
3410
 
19896 kshitij.so 3411
def getDealsByType(category_id, offset, limit, type):
3412
    dealListMap = []
3413
    if type == 'exclusive':
3414
        exclusive_deals = mc.get("exclusive_deals_"+str(category_id))
3415
        if exclusive_deals is None:
3416
            print "Populating exclusive_deals for ",category_id
20690 amit.gupta 3417
            exclusive_deals = list(get_mongo_connection().Catalog.Deals.find({'category_id': category_id,'showDeal': 1, 'source_id': 4},{'_id':1,'category_id':1,'brand':1,'totalPoints':1,'bestSellerPoints':1,'nlcPoints':1,'rank':1,'available_price':1,'dealType':1,'source_id':1,'brand_id':1,'skuBundleId':1,'dp':1, 'showDp':1, 'gross_price':1, 'subCategoryId':1,'netPriceAfterCashBack':1}).sort([('totalPoints',pymongo.DESCENDING),('bestSellerPoints',pymongo.DESCENDING),('nlcPoints',pymongo.DESCENDING),('rank',pymongo.DESCENDING)]))
19896 kshitij.so 3418
            mc.set("exclusive_deals_"+str(category_id), exclusive_deals)
3419
 
19902 kshitij.so 3420
        for d in exclusive_deals[offset:limit+offset]:
19896 kshitij.so 3421
            item = list(get_mongo_connection().Catalog.MasterData.find({'_id':d['_id']}))
3422
            if len(item) ==0:
3423
                continue 
3424
            try:
3425
                cashBack = getCashBack(item[0]['_id'], item[0]['source_id'], item[0]['category_id'])
3426
                if not cashBack or cashBack.get('cash_back_status')!=1:
3427
                    item[0]['cash_back_type'] = 0
3428
                    item[0]['cash_back'] = 0
3429
                else:
3430
                    if cashBack.get('maxCashBack') is not None:
3431
 
3432
                        if cashBack.get('cash_back_type') ==1 and (float(cashBack.get('cash_back'))*item[0]['available_price'])/100 > cashBack.get('maxCashBack'):
3433
                            cashBack['cash_back_type'] = 2
3434
                            cashBack['cash_back'] = cashBack['maxCashBack']
3435
                        elif cashBack.get('cash_back_type') ==2 and cashBack.get('cash_back') > cashBack.get('maxCashBack'):
3436
                            cashBack['cash_back'] = cashBack['maxCashBack']
3437
 
3438
                    item[0]['cash_back_type'] = int(cashBack['cash_back_type'])
3439
                    item[0]['cash_back'] = cashBack['cash_back']
3440
            except:
3441
                print "Error in adding cashback to deals"
3442
                item[0]['cash_back_type'] = 0
3443
                item[0]['cash_back'] = 0
3444
            try:
3445
                item[0]['dp'] = d['dp']
3446
                item[0]['showDp'] = d['showDp']
3447
            except:
3448
                item[0]['dp'] = 0.0
3449
                item[0]['showDp'] = 0
3450
            try:
3451
                item[0]['thumbnail'] = item[0]['thumbnail'].strip()
3452
            except:
3453
                pass
3454
 
3455
            try:
3456
                if item[0]['showVideo']==0:
3457
                    item[0]['videoLink'] =""
3458
            except:
3459
                item[0]['videoLink'] =""
3460
            try:
3461
                if item[0]['quantity'] >1:
3462
                    ppq = float(item[0]['available_price'])/item[0]['quantity']
3463
 
3464
                    if ppq == round(ppq):
3465
                        item[0]['ppq'] = int(ppq)
3466
                    else:
3467
                        item[0]['ppq'] = round(ppq,2)
3468
                else:
3469
                    item[0]['ppq'] = 0
3470
            except:
3471
                item[0]['ppq'] = 0
3472
            try:
3473
                if item[0]['source_id']==4:
3474
                    item_availability_info = mc.get("item_availability_"+str(item[0]['identifier']).strip())
3475
                    if item_availability_info is None or len(item_availability_info)==0:
3476
                        item[0]['availabilityInfo'] = [{}]
3477
                    else:
3478
                        item[0]['availabilityInfo'] = item_availability_info
3479
            except:
3480
                item[0]['availabilityInfo'] = [{}]
3481
 
3482
            if item[0]['source_id']==4:
3483
                for av_info in item[0]['availabilityInfo']:
3484
                    if not av_info:
3485
                        continue
3486
                    av_info['cash_back'] = item[0]['cash_back']
3487
                    av_info['cash_back_type'] = item[0]['cash_back_type']
3488
                    netPriceAfterCashBack = av_info['sellingPrice'] 
3489
                    if av_info['cash_back_type'] ==1:
3490
                        netPriceAfterCashBack = av_info['sellingPrice'] - math.floor(float(av_info['sellingPrice'])*av_info['cash_back']/100)
3491
                    elif av_info['cash_back_type'] ==2:
3492
                        netPriceAfterCashBack = av_info['sellingPrice'] - math.floor(av_info['cash_back'])
3493
                    else:
3494
                        pass
3495
                    av_info['netPriceAfterCashBack'] = netPriceAfterCashBack
3496
 
3497
            if item[0]['cash_back_type'] ==1:
3498
                item[0]['netPriceAfterCashBack'] = item[0]['available_price'] -  math.floor(float(item[0]['available_price'])*item[0]['cash_back']/100)
3499
            elif item[0]['cash_back_type'] ==2:
3500
                item[0]['netPriceAfterCashBack'] = item[0]['available_price'] -  math.floor(item[0]['cash_back'])
3501
            else:
3502
                item[0]['netPriceAfterCashBack'] = item[0]['available_price']         
3503
            dealListMap.append([item[0]])
3504
    return dealListMap
3505
 
3506
 
3507
 
13572 kshitij.so 3508
def main():
20696 amit.gupta 3509
    #print getAccesoryDeals(47, 6, 0, 20, None, None, None)
3510
    getCashBackDetails('1204769399', 3)
17944 kshitij.so 3511
 
20011 kshitij.so 3512
 
13572 kshitij.so 3513
if __name__=='__main__':
19512 kshitij.so 3514
    main()
3515
 
3516