Subversion Repositories SmartDukaan

Rev

Rev 22268 | Rev 22270 | 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
 
14037 kshitij.so 928
 
17367 kshitij.so 929
    insert_featured_deals = False
14037 kshitij.so 930
    if sort is None or direction is None:
17367 kshitij.so 931
        insert_featured_deals = True
932
        rankMap = user_specific_deals.get(str(category_id)+"_rankMap")
14037 kshitij.so 933
    else:
934
        if sort == "bestSellerPoints":
935
            sorted_deals = sorted(category_specific_deals, key = lambda x: (x['bestSellerPoints'], x['rank'], x['nlcPoints']),reverse=True)
936
        else:
937
            if direction == -1:
938
                rev = True
939
            else:
940
                rev = False
941
            sorted_deals = sorted(category_specific_deals, key = lambda x: (x['available_price']),reverse=rev)
942
 
14791 kshitij.so 943
 
17367 kshitij.so 944
    filtered_deals = []
17668 kshitij.so 945
    dataExist = True
22266 amit.gupta 946
    #filter categores on basis of source and tags
947
    if source=="online":
948
        category_specific_deals = filter(lambda x: x['source_id'] in ONLINE_DEAL_SOURCE_MAP.keys(), category_specific_deals)
949
    #For saholic specific deals
950
    elif source=="deals":
951
        category_specific_deals = filter(lambda x: x['source_id'] == 4, category_specific_deals)        
952
 
22268 amit.gupta 953
    if filterData is not None or source:
14791 kshitij.so 954
        try:
22268 amit.gupta 955
            filtered_deals = filterDeals(category_specific_deals, filterData, source)
17669 kshitij.so 956
            if len(filtered_deals)==0:
957
                dataExist = False
14791 kshitij.so 958
        except:
16067 kshitij.so 959
            traceback.print_exc()
17668 kshitij.so 960
    if dataExist:
14791 kshitij.so 961
 
17668 kshitij.so 962
        if not insert_featured_deals:
963
            sortedMap = {}
964
            rankMap = {}
965
            rank = 0
966
            for sorted_deal in sorted_deals:
967
 
968
                if len(filtered_deals) > 0 and  sorted_deal['skuBundleId'] not in filtered_deals:
969
                    continue
970
 
971
                if sortedMap.get(sorted_deal['skuBundleId']) is None:
972
                    sortedMap[sorted_deal['skuBundleId']] = {rank:[sorted_deal]}
973
                    rankMap[rank] = (sortedMap[sorted_deal['skuBundleId']].values())[0]
974
                    rank = rank +1
975
                else:
976
                    for temp_list in sortedMap.get(sorted_deal['skuBundleId']).itervalues():
977
                        temp_list.append(sorted_deal)
978
                    rankMap[(sortedMap.get(sorted_deal['skuBundleId']).keys())[0]] = temp_list
979
        else:
980
            filterMap = {}
981
            rank = 0
982
            if len(filtered_deals) > 0:
983
                try:
984
                    od = collections.OrderedDict(sorted(rankMap.items()))
985
                except:
986
                    od = ordereddict.OrderedDict(sorted(rankMap.items()))
987
                for k, v in od.iteritems():
988
                    if v[0].get('skuBundleId') in filtered_deals:
989
                        filterMap[rank] = v
990
                        rank =rank+1
991
                rankMap = filterMap
992
 
993
        rankCounter = offset
994
        if filterData is None:
995
            if mc.get("featured_deals_deal_object") is None or not bool(mc.get("featured_deals_deal_object")):
996
                try:
997
                    __populateFeaturedDealsForDealObject()
998
                    fd_dealObject = mc.get("featured_deals_deal_object")
999
                except:
1000
                    fd_dealObject = {3:{},5:{},6:{}}
17367 kshitij.so 1001
            else:
17668 kshitij.so 1002
                fd_dealObject = mc.get("featured_deals_deal_object")
1003
 
17367 kshitij.so 1004
    else:
17668 kshitij.so 1005
        rankMap = {}
17618 kshitij.so 1006
 
19288 kshitij.so 1007
 
1008
    specialOffer = user_specific_deals.get('specialOffer')
1009
 
17627 kshitij.so 1010
    for dealList in [rankMap.get(k, []) for k in range(offset, offset+limit)]:
17629 kshitij.so 1011
        if filterData is None:
17627 kshitij.so 1012
            while(True):
1013
 
1014
                rankCounter = rankCounter+1
1015
                if (fd_dealObject.get(category_id).get(rankCounter)) is not None:
19288 kshitij.so 1016
                    if (fd_dealObject.get(category_id).get(rankCounter).get('offer_id') !=0):
1017
                        #Check whether user can see offer
19518 manas 1018
                        if specialOffer is None or specialOffer.endDate < to_java_date(datetime.now()):
19288 kshitij.so 1019
                            continue
19334 kshitij.so 1020
                    deal_object_temp = []
1021
                    deal_object_temp.append(fd_dealObject.get(category_id).get(rankCounter).get('object'))
1022
                    dealsListMap.append(deal_object_temp)
17627 kshitij.so 1023
                else:
1024
                    break
17620 kshitij.so 1025
 
16079 kshitij.so 1026
        temp = []
17367 kshitij.so 1027
        if dealList is None or len(dealList)==0:
1028
            continue
16067 kshitij.so 1029
        for d in dealList:
1030
            item = list(get_mongo_connection().Catalog.MasterData.find({'_id':d['_id']}))
16320 kshitij.so 1031
            if len(item) ==0:
1032
                continue
16079 kshitij.so 1033
            item[0]['persPoints'] = d['persPoints']
1034
            if d['dealType'] == 1 and d['source_id'] ==1:
16511 kshitij.so 1035
                try:
1036
                    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())}}))
1037
                    item[0]['marketPlaceUrl'] = manualDeal[0]['dealUrl'].strip()
1038
                except:
1039
                    pass
16079 kshitij.so 1040
            elif d['source_id'] ==3:
1041
                item[0]['marketPlaceUrl'] = item[0]['marketPlaceUrl']+'?supc='+item[0].get('identifier')
1042
            else:
1043
                pass 
1044
            try:
1045
                cashBack = getCashBack(item[0]['_id'], item[0]['source_id'], item[0]['category_id'])
1046
                if not cashBack or cashBack.get('cash_back_status')!=1:
14037 kshitij.so 1047
                    item[0]['cash_back_type'] = 0
1048
                    item[0]['cash_back'] = 0
16079 kshitij.so 1049
                else:
17180 kshitij.so 1050
                    if cashBack.get('maxCashBack') is not None:
1051
 
1052
                        if cashBack.get('cash_back_type') ==1 and (float(cashBack.get('cash_back'))*item[0]['available_price'])/100 > cashBack.get('maxCashBack'):
1053
                            cashBack['cash_back_type'] = 2
1054
                            cashBack['cash_back'] = cashBack['maxCashBack']
1055
                        elif cashBack.get('cash_back_type') ==2 and cashBack.get('cash_back') > cashBack.get('maxCashBack'):
1056
                            cashBack['cash_back'] = cashBack['maxCashBack']
1057
 
16079 kshitij.so 1058
                    item[0]['cash_back_type'] = int(cashBack['cash_back_type'])
1059
                    item[0]['cash_back'] = cashBack['cash_back']
1060
            except:
1061
                print "Error in adding cashback to deals"
1062
                item[0]['cash_back_type'] = 0
1063
                item[0]['cash_back'] = 0
16252 kshitij.so 1064
            try:
1065
                item[0]['dp'] = d['dp']
1066
                item[0]['showDp'] = d['showDp']
1067
            except:
1068
                item[0]['dp'] = 0.0
1069
                item[0]['showDp'] = 0
16483 kshitij.so 1070
            try:
1071
                item[0]['thumbnail'] = item[0]['thumbnail'].strip()
1072
            except:
17115 manish.sha 1073
                pass
17603 kshitij.so 1074
 
1075
            try:
1076
                if item[0]['showVideo']==0:
1077
                    item[0]['videoLink'] =""
1078
            except:
1079
                item[0]['videoLink'] =""
17937 kshitij.so 1080
            try:
1081
                if item[0]['quantity'] >1:
1082
                    ppq = float(item[0]['available_price'])/item[0]['quantity']
1083
 
1084
                    if ppq == round(ppq):
1085
                        item[0]['ppq'] = int(ppq)
1086
                    else:
1087
                        item[0]['ppq'] = round(ppq,2)
1088
                else:
1089
                    item[0]['ppq'] = 0
1090
            except:
1091
                item[0]['ppq'] = 0
17627 kshitij.so 1092
            if filterData is None:
17679 kshitij.so 1093
                if item[0]['category_id']!=6:
1094
                    try:
18830 kshitij.so 1095
                        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']))
1096
                        item[0]['filterTextBrand'] = (item[0]['brand'])
17679 kshitij.so 1097
                    except:
18830 kshitij.so 1098
                        pass
17679 kshitij.so 1099
                else:
1100
                    try:
17756 kshitij.so 1101
                        if item[0]['subCategory']=='' or item[0]['subCategory'] is None or item[0]['subCategoryId']==0:
17679 kshitij.so 1102
                            raise
18830 kshitij.so 1103
                        item[0]['filterLinkSubCategory'] = '/category/'+str(int(item[0]['category_id']))+'?searchFor='+urllib.quote(item[0]['subCategory'])+'&filter=subcategory&subcategories='+str(int(item[0]['subCategoryId']))
1104
                        item[0]['filterTextSubCategory'] = (item[0]['subCategory'])
1105
                        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']))
1106
                        item[0]['filterTextBrand'] = (item[0]['brand'])
17679 kshitij.so 1107
                    except:
18830 kshitij.so 1108
                        pass
17771 kshitij.so 1109
            try:
1110
                if item[0]['source_id']==4:
1111
                    item_availability_info = mc.get("item_availability_"+str(item[0]['identifier']).strip())
1112
                    if item_availability_info is None or len(item_availability_info)==0:
1113
                        item[0]['availabilityInfo'] = [{}]
1114
                    else:
22256 amit.gupta 1115
                        #remove items that are mapped with tag_ids recieved
1116
                        if tag_ids:
1117
                            #construct item_availability_info TAGS not matched 
1118
                            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')))]
1119
                            if len(item_availability_info)==0:
1120
                                item_availability_info = [{}]
17771 kshitij.so 1121
                        item[0]['availabilityInfo'] = item_availability_info
1122
            except:
1123
                item[0]['availabilityInfo'] = [{}]
19193 kshitij.so 1124
 
1125
            if item[0]['source_id']==4:
1126
                for av_info in item[0]['availabilityInfo']:
1127
                    if not av_info:
1128
                        continue
1129
                    av_info['cash_back'] = item[0]['cash_back']
1130
                    av_info['cash_back_type'] = item[0]['cash_back_type']
1131
                    netPriceAfterCashBack = av_info['sellingPrice'] 
19199 kshitij.so 1132
                    if av_info['cash_back_type'] ==1:
19207 kshitij.so 1133
                        netPriceAfterCashBack = av_info['sellingPrice'] - math.floor(float(av_info['sellingPrice'])*av_info['cash_back']/100)
19199 kshitij.so 1134
                    elif av_info['cash_back_type'] ==2:
19207 kshitij.so 1135
                        netPriceAfterCashBack = av_info['sellingPrice'] - math.floor(av_info['cash_back'])
19193 kshitij.so 1136
                    else:
1137
                        pass
1138
                    av_info['netPriceAfterCashBack'] = netPriceAfterCashBack
1139
 
1140
            #item[0]['netPriceAfterCashBack'] = d['netPriceAfterCashBack']
1141
 
19896 kshitij.so 1142
            if item[0]['source_id'] == SOURCE_MAP.get("PAYTM.COM"):
19193 kshitij.so 1143
                if item[0]['codAvailable'] ==1:
1144
                    paytmPrice = item[0]['available_price']
1145
                else:
1146
                    paytmPrice = item[0]['gross_price']
1147
 
1148
                if item[0]['cash_back_type'] ==1:
19207 kshitij.so 1149
                    item[0]['netPriceAfterCashBack'] = paytmPrice -  math.floor(float(paytmPrice)*item[0]['cash_back']/100)
19193 kshitij.so 1150
                elif item[0]['cash_back_type'] ==2:
19207 kshitij.so 1151
                    item[0]['netPriceAfterCashBack'] = paytmPrice -  math.floor(item[0]['cash_back'])
19193 kshitij.so 1152
                else:
1153
                    item[0]['netPriceAfterCashBack'] = paytmPrice
1154
 
1155
            else:
1156
                if item[0]['cash_back_type'] ==1:
19207 kshitij.so 1157
                    item[0]['netPriceAfterCashBack'] = item[0]['available_price'] -  math.floor(float(item[0]['available_price'])*item[0]['cash_back']/100)
19193 kshitij.so 1158
                elif item[0]['cash_back_type'] ==2:
19207 kshitij.so 1159
                    item[0]['netPriceAfterCashBack'] = item[0]['available_price'] -  math.floor(item[0]['cash_back'])
19193 kshitij.so 1160
                else:
1161
                    item[0]['netPriceAfterCashBack'] = item[0]['available_price']
1162
 
19559 kshitij.so 1163
            temp.append(item[0])
1164
        if len(temp) > 1:
1165
            temp = sorted(temp, key = lambda x: (x['available_price']),reverse=False)
1166
        dealsListMap.append(temp)
1167
    return dealsListMap
1168
 
1169
 
22261 amit.gupta 1170
def getAccesoryDeals(userId, category_id, offset, limit, sort, direction, filterData=None, source=None, tag_ids=None):
19559 kshitij.so 1171
    if mc.get("category_cash_back") is None or not bool(mc.get("category_cash_back")):
1172
        populateCashBack()
1173
 
1174
    dealsListMap = []
1175
    user_specific_deals = mc.get(str(userId)+'_acc')
1176
    if user_specific_deals is None:
1177
        __populateCacheForAccessories(userId)
1178
        user_specific_deals = mc.get(str(userId)+'_acc')
1179
    else:
1180
        print "Getting user deals from accessory cache"
1181
    category_specific_deals = user_specific_deals.get(category_id)
1182
 
1183
    insert_featured_deals = False
1184
    if sort is None or direction is None:
1185
        insert_featured_deals = True
1186
        rankMap = user_specific_deals.get(str(category_id)+"_rankMap")
1187
    else:
1188
        if sort == "bestSellerPoints":
19597 kshitij.so 1189
            sorted_deals = sorted(category_specific_deals, key = lambda x: (x['bestSellerPoints'], x['dealRankPoints'], x['nlcPoints']),reverse=True)
19559 kshitij.so 1190
        else:
1191
            if direction == -1:
1192
                rev = True
1193
            else:
1194
                rev = False
1195
            sorted_deals = sorted(category_specific_deals, key = lambda x: (x['available_price']),reverse=rev)
1196
 
1197
 
1198
    filtered_deals = []
1199
    dataExist = True
22266 amit.gupta 1200
 
22268 amit.gupta 1201
    if filterData is not None or source:
22267 amit.gupta 1202
 
19559 kshitij.so 1203
        try:
22267 amit.gupta 1204
            filtered_deals = filterDeals(category_specific_deals, filterData, source)
19559 kshitij.so 1205
            if len(filtered_deals)==0:
1206
                dataExist = False
1207
        except:
1208
            traceback.print_exc()
1209
    if dataExist:
1210
 
1211
        if not insert_featured_deals:
1212
            sortedMap = {}
1213
            rankMap = {}
1214
            rank = 0
1215
            for sorted_deal in sorted_deals:
1216
 
1217
                if len(filtered_deals) > 0 and  sorted_deal['skuBundleId'] not in filtered_deals:
1218
                    continue
1219
 
1220
                if sortedMap.get(sorted_deal['skuBundleId']) is None:
1221
                    sortedMap[sorted_deal['skuBundleId']] = {rank:[sorted_deal]}
1222
                    rankMap[rank] = (sortedMap[sorted_deal['skuBundleId']].values())[0]
1223
                    rank = rank +1
1224
                else:
1225
                    for temp_list in sortedMap.get(sorted_deal['skuBundleId']).itervalues():
1226
                        temp_list.append(sorted_deal)
1227
                    rankMap[(sortedMap.get(sorted_deal['skuBundleId']).keys())[0]] = temp_list
1228
        else:
1229
            filterMap = {}
1230
            rank = 0
1231
            if len(filtered_deals) > 0:
1232
                try:
1233
                    od = collections.OrderedDict(sorted(rankMap.items()))
1234
                except:
1235
                    od = ordereddict.OrderedDict(sorted(rankMap.items()))
1236
                for k, v in od.iteritems():
1237
                    if v[0].get('skuBundleId') in filtered_deals:
1238
                        filterMap[rank] = v
1239
                        rank =rank+1
1240
                rankMap = filterMap
1241
 
1242
        rankCounter = offset
1243
        if filterData is None:
1244
            if mc.get("featured_deals_deal_object") is None or not bool(mc.get("featured_deals_deal_object")):
1245
                try:
1246
                    __populateFeaturedDealsForDealObject()
1247
                    fd_dealObject = mc.get("featured_deals_deal_object")
1248
                except:
1249
                    fd_dealObject = {3:{},5:{},6:{}}
1250
            else:
1251
                fd_dealObject = mc.get("featured_deals_deal_object")
1252
 
1253
    else:
1254
        rankMap = {}
1255
 
1256
 
1257
    specialOffer = user_specific_deals.get('specialOffer')
1258
 
1259
    for dealList in [rankMap.get(k, []) for k in range(offset, offset+limit)]:
1260
        if filterData is None:
1261
            while(True):
1262
 
1263
                rankCounter = rankCounter+1
1264
                if (fd_dealObject.get(category_id).get(rankCounter)) is not None:
1265
                    if (fd_dealObject.get(category_id).get(rankCounter).get('offer_id') !=0):
1266
                        #Check whether user can see offer
1267
                        if specialOffer is None or specialOffer.endDate < to_java_date(datetime.now()):
1268
                            continue
1269
                    deal_object_temp = []
1270
                    deal_object_temp.append(fd_dealObject.get(category_id).get(rankCounter).get('object'))
1271
                    dealsListMap.append(deal_object_temp)
1272
                else:
1273
                    break
1274
 
1275
        temp = []
1276
        if dealList is None or len(dealList)==0:
1277
            continue
1278
        for d in dealList:
1279
            item = list(get_mongo_connection().Catalog.MasterData.find({'_id':d['_id']}))
1280
            if len(item) ==0:
1281
                continue
19575 kshitij.so 1282
            item[0]['dealRankPoints'] = d.get('dealRankPoints')
19559 kshitij.so 1283
            if d['dealType'] == 1 and d['source_id'] ==1:
1284
                try:
1285
                    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())}}))
1286
                    item[0]['marketPlaceUrl'] = manualDeal[0]['dealUrl'].strip()
1287
                except:
1288
                    pass
1289
            elif d['source_id'] ==3:
1290
                item[0]['marketPlaceUrl'] = item[0]['marketPlaceUrl']+'?supc='+item[0].get('identifier')
1291
            else:
1292
                pass 
1293
            try:
1294
                cashBack = getCashBack(item[0]['_id'], item[0]['source_id'], item[0]['category_id'])
1295
                if not cashBack or cashBack.get('cash_back_status')!=1:
1296
                    item[0]['cash_back_type'] = 0
1297
                    item[0]['cash_back'] = 0
1298
                else:
1299
                    if cashBack.get('maxCashBack') is not None:
1300
 
1301
                        if cashBack.get('cash_back_type') ==1 and (float(cashBack.get('cash_back'))*item[0]['available_price'])/100 > cashBack.get('maxCashBack'):
1302
                            cashBack['cash_back_type'] = 2
1303
                            cashBack['cash_back'] = cashBack['maxCashBack']
1304
                        elif cashBack.get('cash_back_type') ==2 and cashBack.get('cash_back') > cashBack.get('maxCashBack'):
1305
                            cashBack['cash_back'] = cashBack['maxCashBack']
1306
 
1307
                    item[0]['cash_back_type'] = int(cashBack['cash_back_type'])
1308
                    item[0]['cash_back'] = cashBack['cash_back']
1309
            except:
1310
                print "Error in adding cashback to deals"
1311
                item[0]['cash_back_type'] = 0
1312
                item[0]['cash_back'] = 0
1313
            try:
1314
                item[0]['dp'] = d['dp']
1315
                item[0]['showDp'] = d['showDp']
1316
            except:
1317
                item[0]['dp'] = 0.0
1318
                item[0]['showDp'] = 0
1319
            try:
1320
                item[0]['thumbnail'] = item[0]['thumbnail'].strip()
1321
            except:
1322
                pass
1323
 
1324
            try:
1325
                if item[0]['showVideo']==0:
1326
                    item[0]['videoLink'] =""
1327
            except:
1328
                item[0]['videoLink'] =""
1329
            try:
1330
                if item[0]['quantity'] >1:
1331
                    ppq = float(item[0]['available_price'])/item[0]['quantity']
1332
 
1333
                    if ppq == round(ppq):
1334
                        item[0]['ppq'] = int(ppq)
1335
                    else:
1336
                        item[0]['ppq'] = round(ppq,2)
1337
                else:
1338
                    item[0]['ppq'] = 0
1339
            except:
1340
                item[0]['ppq'] = 0
1341
            if filterData is None:
1342
                if item[0]['category_id']!=6:
1343
                    try:
1344
                        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']))
1345
                        item[0]['filterTextBrand'] = (item[0]['brand'])
1346
                    except:
1347
                        pass
1348
                else:
1349
                    try:
1350
                        if item[0]['subCategory']=='' or item[0]['subCategory'] is None or item[0]['subCategoryId']==0:
1351
                            raise
1352
                        item[0]['filterLinkSubCategory'] = '/category/'+str(int(item[0]['category_id']))+'?searchFor='+urllib.quote(item[0]['subCategory'])+'&filter=subcategory&subcategories='+str(int(item[0]['subCategoryId']))
1353
                        item[0]['filterTextSubCategory'] = (item[0]['subCategory'])
1354
                        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']))
1355
                        item[0]['filterTextBrand'] = (item[0]['brand'])
1356
                    except:
1357
                        pass
1358
            try:
1359
                if item[0]['source_id']==4:
1360
                    item_availability_info = mc.get("item_availability_"+str(item[0]['identifier']).strip())
1361
                    if item_availability_info is None or len(item_availability_info)==0:
1362
                        item[0]['availabilityInfo'] = [{}]
1363
                    else:
22256 amit.gupta 1364
                        #remove items that are mapped with tag_ids recieved
1365
                        if tag_ids:
1366
                            #construct item_availability_info TAGS not matched 
1367
                            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')))]
1368
                            if len(item_availability_info)==0:
1369
                                item_availability_info = [{}]
19559 kshitij.so 1370
                        item[0]['availabilityInfo'] = item_availability_info
1371
            except:
1372
                item[0]['availabilityInfo'] = [{}]
1373
 
1374
            if item[0]['source_id']==4:
1375
                for av_info in item[0]['availabilityInfo']:
1376
                    if not av_info:
1377
                        continue
1378
                    av_info['cash_back'] = item[0]['cash_back']
1379
                    av_info['cash_back_type'] = item[0]['cash_back_type']
21889 kshitij.so 1380
                    netPriceAfterCashBack = av_info['sellingPrice']
19559 kshitij.so 1381
                    if av_info['cash_back_type'] ==1:
1382
                        netPriceAfterCashBack = av_info['sellingPrice'] - math.floor(float(av_info['sellingPrice'])*av_info['cash_back']/100)
1383
                    elif av_info['cash_back_type'] ==2:
1384
                        netPriceAfterCashBack = av_info['sellingPrice'] - math.floor(av_info['cash_back'])
1385
                    else:
1386
                        pass
1387
                    av_info['netPriceAfterCashBack'] = netPriceAfterCashBack
1388
 
1389
            #item[0]['netPriceAfterCashBack'] = d['netPriceAfterCashBack']
1390
 
19896 kshitij.so 1391
            if item[0]['source_id'] == SOURCE_MAP.get("PAYTM.COM"):
19559 kshitij.so 1392
                if item[0]['codAvailable'] ==1:
1393
                    paytmPrice = item[0]['available_price']
1394
                else:
1395
                    paytmPrice = item[0]['gross_price']
1396
 
1397
                if item[0]['cash_back_type'] ==1:
1398
                    item[0]['netPriceAfterCashBack'] = paytmPrice -  math.floor(float(paytmPrice)*item[0]['cash_back']/100)
1399
                elif item[0]['cash_back_type'] ==2:
1400
                    item[0]['netPriceAfterCashBack'] = paytmPrice -  math.floor(item[0]['cash_back'])
1401
                else:
1402
                    item[0]['netPriceAfterCashBack'] = paytmPrice
1403
 
1404
            else:
1405
                if item[0]['cash_back_type'] ==1:
1406
                    item[0]['netPriceAfterCashBack'] = item[0]['available_price'] -  math.floor(float(item[0]['available_price'])*item[0]['cash_back']/100)
1407
                elif item[0]['cash_back_type'] ==2:
1408
                    item[0]['netPriceAfterCashBack'] = item[0]['available_price'] -  math.floor(item[0]['cash_back'])
1409
                else:
1410
                    item[0]['netPriceAfterCashBack'] = item[0]['available_price']
1411
 
19320 kshitij.so 1412
#             if specialOffer is not None and item[0]['source_id']==4:
1413
#                 if item[0]['category_id'] in specialOffer.categories_applicable and item[0]['subCategoryId'] not in specialOffer.sub_categories_not_applicable:
1414
#                     item[0]['specialOffer'] = specialOffer.__dict__
1415
#             else:
1416
#                 item[0]['specialOffer'] = {}
19288 kshitij.so 1417
 
16079 kshitij.so 1418
            temp.append(item[0])
16125 kshitij.so 1419
        if len(temp) > 1:
16126 kshitij.so 1420
            temp = sorted(temp, key = lambda x: (x['available_price']),reverse=False)
16079 kshitij.so 1421
        dealsListMap.append(temp)
1422
    return dealsListMap
14037 kshitij.so 1423
 
22267 amit.gupta 1424
def filterDeals(deals, filterData, source=None):
20009 kshitij.so 1425
    print "Filter data ",filterData
20011 kshitij.so 1426
    print "Length deals before filter ", len(deals)
20009 kshitij.so 1427
    brandsToFilter = []
1428
    subCategoryToFilter = []
1429
    priceToFilter = []
22267 amit.gupta 1430
    if source=="online":
1431
        sourceToFilter =   ONLINE_DEAL_SOURCE_MAP.keys()  #filter categores on basis of source and tags
1432
    #For saholic specific deals
1433
    elif source=="deals":
1434
        sourceToFilter = [4]
22269 amit.gupta 1435
 
1436
    if filterData:
1437
        filterArray = filterData.split('|')
1438
        for data in filterArray:
1439
            try:
1440
                filter, info = data.split(':')
1441
            except Exception as ex:
1442
                traceback.print_exc()
1443
                continue
1444
            if filter == 'brandFilter':
1445
                brandsToFilter = info.split('^')
1446
            if filter == 'subCategoryFilter':
1447
                subCategoryToFilter = info.split('^')
1448
            if filter == 'priceFilter':
1449
                priceToFilter = info.split('^')
1450
            if filter == 'sourceFilter':
1451
                sourceToFilter = sourceToFilter + info.split('^')
1452
 
20009 kshitij.so 1453
    if brandsToFilter:
1454
        temp = []    
1455
        for deal in deals:
1456
            if str(int(deal['brand_id'])) in brandsToFilter:
1457
                temp.append(deal)
1458
        deals = temp
22269 amit.gupta 1459
 
20011 kshitij.so 1460
    print "Length deals after brandfilter ", len(deals)
1461
 
20009 kshitij.so 1462
    if subCategoryToFilter:
1463
        temp = []
1464
        for deal in deals:
1465
            if str(int(deal['subCategoryId'])) in subCategoryToFilter:
1466
                temp.append(deal)
1467
        deals = temp
1468
 
20011 kshitij.so 1469
    print "Length deals after subCatfilter ", len(deals)
22269 amit.gupta 1470
 
20019 kshitij.so 1471
    if sourceToFilter:
1472
        temp = []
1473
        for deal in deals:
1474
            if str(int(deal['source_id'])) in sourceToFilter:
1475
                temp.append(deal)
1476
        deals = temp
1477
 
1478
    print "Length deals after source filter ", len(deals)
1479
 
20009 kshitij.so 1480
    if priceToFilter and len(priceToFilter) ==2:
20011 kshitij.so 1481
        print "Inside price filter ",priceToFilter 
20009 kshitij.so 1482
        temp = []
1483
        for deal in deals:
20011 kshitij.so 1484
            if deal.get('available_price') > float(priceToFilter[0]) and deal.get('available_price') <= float(priceToFilter[1]):
20009 kshitij.so 1485
                temp.append(deal)
1486
        deals = temp
22269 amit.gupta 1487
 
1488
        print "Length deals after price filter ", len(deals)
20009 kshitij.so 1489
 
1490
    return [trend['skuBundleId'] for trend in temp]
14791 kshitij.so 1491
 
14037 kshitij.so 1492
def getDeals(userId, category_id, offset, limit, sort, direction):
17469 kshitij.so 1493
    if mc.get("category_cash_back") is None or not bool(mc.get("category_cash_back")):
14037 kshitij.so 1494
        populateCashBack()
1495
    rank = 1
13771 kshitij.so 1496
    deals = {}
13910 kshitij.so 1497
    outer_query = []
1498
    outer_query.append({"showDeal":1})
1499
    query = {}
1500
    query['$gt'] = 0
1501
    outer_query.append({'totalPoints':query})
1502
    if category_id in (3,5):
1503
        outer_query.append({'category_id':category_id})
13803 kshitij.so 1504
    if sort is None or direction is None:
1505
        direct = -1
13910 kshitij.so 1506
        print outer_query
1507
        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 1508
    else:
13910 kshitij.so 1509
        print outer_query
13803 kshitij.so 1510
        direct = direction
13910 kshitij.so 1511
        if sort == "bestSellerPoints":
1512
            print "yes,sorting by bestSellerPoints"
1513
            data = list(get_mongo_connection().Catalog.Deals.find({"$and":outer_query}).sort([('bestSellerPoints',direct),('rank',direct),('nlcPoints',direct)]).skip(offset).limit(limit))
1514
        else:
1515
            data = list(get_mongo_connection().Catalog.Deals.find({"$and":outer_query}).sort([(sort,direct)]).skip(offset).limit(limit))
13771 kshitij.so 1516
    for d in data:
1517
        item = list(get_mongo_connection().Catalog.MasterData.find({'_id':d['_id']}))
1518
        if not deals.has_key(item[0]['identifier']):
13921 kshitij.so 1519
            item[0]['dealRank'] = rank
1520
            try:
14761 kshitij.so 1521
                cashBack = getCashBack(item[0]['_id'], item[0]['source_id'], item[0]['category_id'])
13921 kshitij.so 1522
                if not cashBack or cashBack.get('cash_back_status')!=1:
13928 kshitij.so 1523
                    item[0]['cash_back_type'] = 0
1524
                    item[0]['cash_back'] = 0
13921 kshitij.so 1525
                else:
14766 kshitij.so 1526
                    item[0]['cash_back_type'] = int(cashBack['cash_back_type'])
13928 kshitij.so 1527
                    item[0]['cash_back'] = cashBack['cash_back']
13921 kshitij.so 1528
            except:
1529
                print "Error in adding cashback to deals"
13928 kshitij.so 1530
                item[0]['cash_back_type'] = 0
1531
                item[0]['cash_back'] = 0
13771 kshitij.so 1532
            deals[item[0]['identifier']] = item[0]
13921 kshitij.so 1533
 
13771 kshitij.so 1534
            rank +=1
13785 kshitij.so 1535
    return sorted(deals.values(), key=itemgetter('dealRank'))
1536
 
16222 kshitij.so 1537
def getItem(skuId,showDp=None):
16224 kshitij.so 1538
    temp = []
17469 kshitij.so 1539
    if mc.get("category_cash_back") is None or not bool(mc.get("category_cash_back")):
14113 kshitij.so 1540
        populateCashBack()
13795 kshitij.so 1541
    try:
16222 kshitij.so 1542
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'_id':int(skuId)})
1543
        if skuData is None:
1544
            raise
1545
        try:
1546
            cashBack = getCashBack(skuData['_id'], skuData['source_id'], skuData['category_id'])
1547
            if not cashBack or cashBack.get('cash_back_status')!=1:
1548
                skuData['cash_back_type'] = 0
1549
                skuData['cash_back'] = 0
1550
            else:
1551
                skuData['cash_back_type'] = cashBack['cash_back_type']
1552
                skuData['cash_back'] = cashBack['cash_back']
1553
        except:
1554
            print "Error in adding cashback to deals"
1555
            skuData['cash_back_type'] = 0
1556
            skuData['cash_back'] = 0
1557
        skuData['in_stock'] = int(skuData['in_stock'])
1558
        skuData['is_shortage'] = int(skuData['is_shortage'])
1559
        skuData['category_id'] = int(skuData['category_id'])
17607 kshitij.so 1560
        skuData['subCategoryId'] = int(skuData['subCategoryId'])
16222 kshitij.so 1561
        skuData['status'] = int(skuData['status'])
16483 kshitij.so 1562
        try:
1563
            skuData['thumbnail'] = skuData['thumbnail'].strip()
1564
        except:
1565
            pass 
16222 kshitij.so 1566
        if showDp is not None:
1567
            dealerPrice = get_mongo_connection().Catalog.SkuDealerPrices.find_one({'skuBundleId':skuData['skuBundleId']})
1568
            skuData['dp'] = 0.0
1569
            skuData['showDp'] = 0
1570
            if dealerPrice is not None:
1571
                skuData['dp'] = dealerPrice['dp']
1572
                skuData['showDp'] = dealerPrice['showDp']
16224 kshitij.so 1573
        temp.append(skuData)
1574
        return temp
13795 kshitij.so 1575
    except:
16224 kshitij.so 1576
        return []
13836 kshitij.so 1577
 
14761 kshitij.so 1578
def getCashBack(skuId, source_id, category_id):
17469 kshitij.so 1579
    if mc.get("category_cash_back") is None or not bool(mc.get("category_cash_back")):
14761 kshitij.so 1580
        populateCashBack()
1581
    itemCashBackMap = mc.get("item_cash_back")
13921 kshitij.so 1582
    itemCashBack = itemCashBackMap.get(skuId)
1583
    if itemCashBack is not None:
1584
        return itemCashBack
14761 kshitij.so 1585
    cashBackMap = mc.get("category_cash_back")
13921 kshitij.so 1586
    sourceCashBack = cashBackMap.get(source_id)
1587
    if sourceCashBack is not None and len(sourceCashBack) > 0:
1588
        for cashBack in sourceCashBack:
1589
            if cashBack.get(category_id) is None:
1590
                continue
1591
            else:
1592
                return cashBack.get(category_id)
1593
    else:
1594
        return {}
16560 amit.gupta 1595
 
1596
def getBundleBySourceSku(source_id, identifier):
17035 kshitij.so 1597
    if source_id in (1,2,4,5,6,7):
16560 amit.gupta 1598
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'identifier':identifier.strip(), 'source_id':source_id}))
1599
    elif source_id == 3:
1600
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'secondaryIdentifier':identifier.strip(), 'source_id':source_id}))
1601
    else:
1602
        return {}
1603
 
1604
    if not skuData:
1605
        return {}
1606
    else:
16564 amit.gupta 1607
        bundleId = skuData[0]["skuBundleId"]
17035 kshitij.so 1608
        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 1609
                       {"source_id":1, "available_price":1, "marketPlaceUrl":1, "gross_price":1, "codAvailable":1, "source_product_name":1, "offer":1, "coupon":1}))
16579 amit.gupta 1610
        return {'products':itemIds}
16560 amit.gupta 1611
 
1612
 
13921 kshitij.so 1613
 
15129 kshitij.so 1614
def getDealRank(identifier, source_id, userId):
17035 kshitij.so 1615
    if source_id in (1,2,4,5,6,7):
15129 kshitij.so 1616
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'identifier':identifier.strip(), 'source_id':source_id}))
1617
    elif source_id == 3:
1618
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'secondaryIdentifier':identifier.strip(), 'source_id':source_id}))
1619
    else:
16282 amit.gupta 1620
        return {'rank':0, 'description':'Source not valid','maxNlc':None, 'minNlc':None,'status':None,'dp':None}
15349 kshitij.so 1621
    if len(skuData) == 0:
16282 amit.gupta 1622
        return {'rank':0, 'description':'No matching product identifier found','maxNlc':None, 'minNlc':None,'status':None,'dp':None}
19580 kshitij.so 1623
    category_id = skuData[0]['category_id']
1624
    if category_id != 6:
15129 kshitij.so 1625
        user_specific_deals = mc.get(str(userId))
19580 kshitij.so 1626
        if user_specific_deals is None:
1627
            __populateCache(userId)
1628
            user_specific_deals = mc.get(str(userId))
1629
        else:
1630
            print "Getting user deals from cache mobiles/tablets"
15129 kshitij.so 1631
    else:
19580 kshitij.so 1632
        user_specific_deals = mc.get(str(userId)+'_acc')
1633
        if user_specific_deals is None:
1634
            __populateCacheForAccessories(userId)
1635
            user_specific_deals = mc.get(str(userId)+'_acc')
1636
        else:
1637
            print "Getting user deals from accessory cache"
1638
 
15129 kshitij.so 1639
    category_specific_deals = user_specific_deals.get(category_id)
16280 kshitij.so 1640
 
1641
    dealsData = get_mongo_connection().Catalog.Deals.find_one({'skuBundleId':skuData[0]['skuBundleId']})
1642
    if dealsData is None:
1643
        dealsData = {}
19580 kshitij.so 1644
        return {'rank':0, 'description':'Deal deleted from system','maxNlc':None, 'minNlc':None,'status':None,'dp':None}
16280 kshitij.so 1645
 
15129 kshitij.so 1646
    if category_specific_deals is None or len(category_specific_deals) ==0:
16280 kshitij.so 1647
        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 1648
 
1649
    if category_id!=6:
1650
        sorted_deals = sorted(category_specific_deals, key = lambda x: (x['persPoints'],x['totalPoints'],x['bestSellerPoints'], x['nlcPoints'], x['rank']),reverse=True)
1651
    else:
1652
        sorted_deals = sorted(category_specific_deals, key = lambda x: (x['dealRankPoints'],x['totalPoints'],x['bestSellerPoints'], x['nlcPoints']),reverse=True)
1653
 
16168 kshitij.so 1654
    sortedMap = {}
1655
    rankMap = {}
1656
    rank = 0
15129 kshitij.so 1657
    for sorted_deal in sorted_deals:
16168 kshitij.so 1658
        if sortedMap.get(sorted_deal['skuBundleId']) is None:
1659
            sortedMap[sorted_deal['skuBundleId']] = {rank:[sorted_deal]}
1660
            rankMap[rank] = (sortedMap[sorted_deal['skuBundleId']].values())[0]
1661
            rank = rank +1
1662
        else:
1663
            for temp_list in sortedMap.get(sorted_deal['skuBundleId']).itervalues():
1664
                temp_list.append(sorted_deal)
1665
            rankMap[(sortedMap.get(sorted_deal['skuBundleId']).keys())[0]] = temp_list
1666
 
16187 kshitij.so 1667
    for dealRank ,dealList in rankMap.iteritems():
16168 kshitij.so 1668
        for d in dealList:
16186 kshitij.so 1669
            if d['skuBundleId'] == skuData[0]['skuBundleId']:
16280 kshitij.so 1670
                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 1671
 
16280 kshitij.so 1672
    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 1673
 
1674
 
13836 kshitij.so 1675
def getCashBackDetails(identifier, source_id):
17469 kshitij.so 1676
    if mc.get("category_cash_back") is None or not bool(mc.get("category_cash_back")):
13921 kshitij.so 1677
        populateCashBack()
13771 kshitij.so 1678
 
17035 kshitij.so 1679
    if source_id in (1,2,4,5,6,7):
13839 kshitij.so 1680
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'identifier':identifier.strip(), 'source_id':source_id}))
13840 kshitij.so 1681
    elif source_id == 3:
13839 kshitij.so 1682
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'secondaryIdentifier':identifier.strip(), 'source_id':source_id}))
13840 kshitij.so 1683
    else:
1684
        return {}
13836 kshitij.so 1685
    if len(skuData) > 0:
14761 kshitij.so 1686
        itemCashBackMap = mc.get("item_cash_back")
13921 kshitij.so 1687
        itemCashBack = itemCashBackMap.get(skuData[0]['_id'])
1688
        if itemCashBack is not None:
1689
            return itemCashBack
14761 kshitij.so 1690
        cashBackMap = mc.get("category_cash_back")
13921 kshitij.so 1691
        sourceCashBack = cashBackMap.get(source_id)
1692
        if sourceCashBack is not None and len(sourceCashBack) > 0:
1693
            for cashBack in sourceCashBack:
1694
                if cashBack.get(skuData[0]['category_id']) is None:
1695
                    continue
1696
                else:
1697
                    return cashBack.get(skuData[0]['category_id'])
20698 amit.gupta 1698
            return {}
13836 kshitij.so 1699
        else:
1700
            return {} 
1701
    else:
1702
        return {}
13986 amit.gupta 1703
 
14398 amit.gupta 1704
def getImgSrc(identifier, source_id):
1705
    skuData = None
17035 kshitij.so 1706
    if source_id in (1,2,4,5,6,7):
14414 amit.gupta 1707
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'identifier':identifier.strip(), 'source_id':source_id})
14398 amit.gupta 1708
    elif source_id == 3:
14414 amit.gupta 1709
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'secondaryIdentifier':identifier.strip(), 'source_id':source_id})
14398 amit.gupta 1710
    if skuData is None:
1711
        return {}
1712
    else:
16483 kshitij.so 1713
        try:
1714
            return {'thumbnail':skuData.get('thumbnail').strip()}
1715
        except:
1716
            return {'thumbnail':skuData.get('thumbnail')}
13986 amit.gupta 1717
 
1718
def next_weekday(d, weekday):
1719
    days_ahead = weekday - d.weekday()
1720
    if days_ahead <= 0: # Target day already happened this week
1721
        days_ahead += 7
1722
    return d + timedelta(days_ahead)
1723
 
13771 kshitij.so 1724
 
13970 kshitij.so 1725
def getAllDealerPrices(offset, limit):
1726
    data = []
1727
    collection = get_mongo_connection().Catalog.SkuDealerPrices
1728
    cursor = collection.find().skip(offset).limit(limit)
1729
    for val in cursor:
15853 kshitij.so 1730
        master = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':val['skuBundleId']})
1731
        if master is not None:
1732
            val['brand'] = master['brand']
1733
            val['source_product_name'] = master['source_product_name']
13970 kshitij.so 1734
        else:
1735
            val['brand'] = ""
1736
            val['source_product_name'] = ""
16231 kshitij.so 1737
        val['showDp'] = int(val['showDp'])
13970 kshitij.so 1738
        data.append(val)
1739
    return data
1740
 
15853 kshitij.so 1741
def addSkuDealerPrice(data):
1742
    collection = get_mongo_connection().Catalog.SkuDealerPrices
1743
    cursor = collection.find_one({"skuBundleId":data['skuBundleId']})
1744
    if cursor is not None:
1745
        return {0:"BundleId information already present."}
13970 kshitij.so 1746
    else:
15853 kshitij.so 1747
        collection.insert(data)
1748
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
13970 kshitij.so 1749
        return {1:"Data added successfully"}
1750
 
1751
def updateSkuDealerPrice(data, _id):
1752
    try:
1753
        collection = get_mongo_connection().Catalog.SkuDealerPrices
1754
        collection.update({'_id':ObjectId(_id)},{"$set":{'dp':data['dp']}},upsert=False, multi = False)
15853 kshitij.so 1755
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
13970 kshitij.so 1756
        return {1:"Data updated successfully"}
1757
    except:
1758
        return {0:"Data not updated."}
1759
 
1760
def updateExceptionalNlc(data, _id):
1761
    try:
1762
        collection = get_mongo_connection().Catalog.ExceptionalNlc
1763
        collection.update({'_id':ObjectId(_id)},{"$set":{'maxNlc':data['maxNlc'], 'minNlc':data['minNlc'], 'overrideNlc':data['overrideNlc']}},upsert=False, multi = False)
15853 kshitij.so 1764
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
13970 kshitij.so 1765
        return {1:"Data updated successfully"}
1766
    except:
1767
        return {0:"Data not updated."}
1768
 
20456 kshitij.so 1769
def resetCache(cache_type, keys):
20443 kshitij.so 1770
    if (cache_type == 'deals'):
20456 kshitij.so 1771
        for userId in keys.split(','):
20458 kshitij.so 1772
            mc.delete(userId)
1773
            mc.delete(userId+'_acc')
14043 kshitij.so 1774
        return {1:'Cache cleared.'}
20443 kshitij.so 1775
    elif (cache_type == 'itemCashBack'):
1776
        mc.delete('item_cash_back')
1777
        populateCashBack()
1778
        return {1:'Cache cleared.'}
1779
    else:
1780
        {0:'Illegal cache type'}
1781
 
1782
 
15853 kshitij.so 1783
def updateCollection(data):
1784
    try:
1785
        collection = get_mongo_connection().Catalog[data['class']]
1786
        class_name = data.pop('class')
1787
        _id = data.pop('oid')
1788
        result = collection.update({'_id':ObjectId(_id)},{"$set":data},upsert=False, multi = False)
1789
        if class_name != "Notifications":
1790
            record = list(collection.find({'_id':ObjectId(_id)}))
1791
            if class_name !="CategoryDiscount":
1792
                if record[0].has_key('sku'):
1793
                    field = '_id'
1794
                    val = record[0]['sku']
14852 kshitij.so 1795
                else:
15853 kshitij.so 1796
                    field = 'skuBundleId'
1797
                    val = record[0]['skuBundleId']
1798
                get_mongo_connection().Catalog.MasterData.update({field:val},{"$set":{'updatedOn':to_java_date(datetime.now())}},upsert=False, multi = True)
1799
            else:
1800
                get_mongo_connection().Catalog.MasterData.update({'brand':re.compile(record[0]['brand'], re.IGNORECASE),'category_id':record[0]['category_id']}, \
1801
                                                                 {"$set":{'updatedOn':to_java_date(datetime.now())}},upsert=False,multi=True)
16233 kshitij.so 1802
        if class_name =='SkuDealerPrices':
16237 kshitij.so 1803
            get_mongo_connection().Catalog.Deals.update({'skuBundleId':val},{"$set":data},upsert=False, multi=True)
15853 kshitij.so 1804
        return {1:"Data updated successfully"}
1805
    except Exception as e:
1806
        print e
1807
        return {0:"Data not updated."}
14575 kshitij.so 1808
 
14076 kshitij.so 1809
 
14553 kshitij.so 1810
def addNegativeDeals(data, multi):
1811
    if multi !=1: 
1812
        collection = get_mongo_connection().Catalog.NegativeDeals
1813
        cursor = collection.find({"sku":data['sku']})
1814
        if cursor.count() > 0:
1815
            return {0:"Sku information already present."}
1816
        else:
1817
            collection.insert(data)
1818
            return {1:"Data added successfully"}
14481 kshitij.so 1819
    else:
14553 kshitij.so 1820
        skuIds = __getBundledSkusfromSku(data['sku'])
1821
        for sku in skuIds:
1822
            data['sku'] = sku.get('_id')
1823
            collection = get_mongo_connection().Catalog.NegativeDeals
1824
            cursor = collection.find({"sku":data['sku']})
1825
            if cursor.count() > 0:
1826
                continue
1827
            else:
14558 kshitij.so 1828
                data.pop('_id',None)
14553 kshitij.so 1829
                collection.insert(data)
14481 kshitij.so 1830
        return {1:"Data added successfully"}
1831
 
1832
def getAllNegativeDeals(offset, limit):
1833
    data = []
1834
    collection = get_mongo_connection().Catalog.NegativeDeals
1835
    cursor = collection.find().skip(offset).limit(limit)
1836
    for val in cursor:
1837
        master = list(get_mongo_connection().Catalog.MasterData.find({'_id':val['sku']}))
1838
        if len(master) > 0:
1839
            val['brand'] = master[0]['brand']
1840
            val['source_product_name'] = master[0]['source_product_name']
1841
            val['skuBundleId'] = master[0]['skuBundleId']
1842
        else:
1843
            val['brand'] = ""
1844
            val['source_product_name'] = ""
1845
            val['skuBundleId'] = ""
1846
        data.append(val)
1847
    return data
1848
 
1849
def getAllManualDeals(offset, limit):
1850
    data = []
1851
    collection = get_mongo_connection().Catalog.ManualDeals
15090 kshitij.so 1852
    cursor = collection.find().skip(offset).limit(limit)
14481 kshitij.so 1853
    for val in cursor:
1854
        master = list(get_mongo_connection().Catalog.MasterData.find({'_id':val['sku']}))
1855
        if len(master) > 0:
1856
            val['brand'] = master[0]['brand']
1857
            val['source_product_name'] = master[0]['source_product_name']
1858
            val['skuBundleId'] = master[0]['skuBundleId']
1859
        else:
1860
            val['brand'] = ""
1861
            val['source_product_name'] = ""
1862
            val['skuBundleId'] = ""
1863
        data.append(val)
1864
    return data
14076 kshitij.so 1865
 
14553 kshitij.so 1866
def addManualDeal(data, multi):
1867
    if multi !=1:
1868
        collection = get_mongo_connection().Catalog.ManualDeals
15090 kshitij.so 1869
        cursor = collection.find({'sku':data['sku']})
14553 kshitij.so 1870
        if cursor.count() > 0:
1871
            return {0:"Sku information already present."}
1872
        else:
1873
            collection.insert(data)
1874
            get_mongo_connection().Catalog.MasterData.update({'_id':data['sku']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=False)
1875
            return {1:"Data added successfully"}
14481 kshitij.so 1876
    else:
14553 kshitij.so 1877
        skuIds = __getBundledSkusfromSku(data['sku'])
1878
        for sku in skuIds:
1879
            data['sku'] = sku.get('_id')
1880
            collection = get_mongo_connection().Catalog.ManualDeals
15090 kshitij.so 1881
            cursor = collection.find({'sku':data['sku']})
14553 kshitij.so 1882
            if cursor.count() > 0:
1883
                continue
1884
            else:
14558 kshitij.so 1885
                data.pop('_id',None)
14553 kshitij.so 1886
                collection.insert(data)
1887
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':sku.get('skuBundleId')},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
14481 kshitij.so 1888
        return {1:"Data added successfully"}
14553 kshitij.so 1889
 
14481 kshitij.so 1890
def deleteDocument(data):
15853 kshitij.so 1891
    print "inside detete document"
14481 kshitij.so 1892
    print data
1893
    try:
1894
        collection = get_mongo_connection().Catalog[data['class']]
1895
        class_name = data.pop('class')
1896
        _id = data.pop('oid')
1897
        record = list(collection.find({'_id':ObjectId(_id)}))
1898
        collection.remove({'_id':ObjectId(_id)})
15075 kshitij.so 1899
        if class_name != "Notifications":
1900
            if class_name !="CategoryDiscount":
15853 kshitij.so 1901
                print record[0]
1902
                if record[0].has_key('sku'):
1903
                    field = '_id'
1904
                    val = record[0]['sku']
1905
                else:
1906
                    field = 'skuBundleId'
1907
                    val = record[0]['skuBundleId']
1908
                print "Updating master"
1909
                print field
1910
                print val
1911
                get_mongo_connection().Catalog.MasterData.update({field:val},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
15075 kshitij.so 1912
            else:
1913
                get_mongo_connection().Catalog.MasterData.update({'brand':re.compile(record[0]['brand'], re.IGNORECASE),'category_id':record[0]['category_id']}, \
1914
                                                                 {"$set":{'updatedOn':to_java_date(datetime.now())}},upsert=False,multi=True)
14481 kshitij.so 1915
        return {1:"Document deleted successfully"}
1916
    except Exception as e:
1917
        print e
1918
        return {0:"Document not deleted."}
13970 kshitij.so 1919
 
14482 kshitij.so 1920
def searchMaster(offset, limit, search_term):
1921
    data = []
14531 kshitij.so 1922
    if search_term is not None:
14551 kshitij.so 1923
        terms = search_term.split(' ')
1924
        outer_query = []
1925
        for term in terms:
1926
            outer_query.append({"source_product_name":re.compile(term, re.IGNORECASE)})
14531 kshitij.so 1927
        try:
14551 kshitij.so 1928
            collection = get_mongo_connection().Catalog.MasterData.find({"$and":outer_query,'source_id':{'$in':SOURCE_MAP.keys()}}).skip(offset).limit(limit)
14531 kshitij.so 1929
            for record in collection:
1930
                data.append(record)
1931
        except:
1932
            pass
1933
    else:
1934
        collection = get_mongo_connection().Catalog.MasterData.find({'source_id':{'$in':SOURCE_MAP.keys()}}).skip(offset).limit(limit)
14482 kshitij.so 1935
        for record in collection:
1936
            data.append(record)
1937
    return data
14481 kshitij.so 1938
 
14495 kshitij.so 1939
def getAllFeaturedDeals(offset, limit):
1940
    data = []
1941
    collection = get_mongo_connection().Catalog.FeaturedDeals
17561 kshitij.so 1942
    cursor = collection.find({}).skip(offset).limit(limit)
14495 kshitij.so 1943
    for val in cursor:
17367 kshitij.so 1944
        master = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':val['skuBundleId']}))
14495 kshitij.so 1945
        if len(master) > 0:
1946
            val['brand'] = master[0]['brand']
1947
            val['source_product_name'] = master[0]['source_product_name']
1948
            val['skuBundleId'] = master[0]['skuBundleId']
1949
        else:
1950
            val['brand'] = ""
1951
            val['source_product_name'] = ""
1952
            val['skuBundleId'] = ""
1953
        data.append(val)
1954
    return data
1955
 
14553 kshitij.so 1956
def addFeaturedDeal(data, multi):
17367 kshitij.so 1957
    collection = get_mongo_connection().Catalog.FeaturedDeals
1958
    cursor = collection.find({'skuBundleId':data['skuBundleId']})
1959
    master = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':data['skuBundleId']})
1960
    if master is None:
1961
        return {0:"BundleId is wrong"}
17469 kshitij.so 1962
    otherInfoObj = data['otherInfo']
1963
    toPop = []
1964
    for x,y in otherInfoObj.iteritems():
1965
        if y==0:
1966
            toPop.append(x)
1967
 
1968
    for popItem in toPop:
1969
        otherInfoObj.pop(popItem)
1970
    if len(otherInfoObj.keys())==0:
1971
        return {0:"No rank info to add"}
1972
 
1973
    for x,y in otherInfoObj.iteritems():
1974
        exist = get_mongo_connection().Catalog.FeaturedDeals.find({'otherInfo.'+x:y})
1975
        if exist.count() >0:
1976
            return {0:"Rank already assigned bundleId %s"%(exist[0]['skuBundleId'])}
17367 kshitij.so 1977
    if cursor.count() > 0:
1978
        return {0:"SkuBundleId information already present."}
14495 kshitij.so 1979
    else:
17367 kshitij.so 1980
        collection.insert(data)
14495 kshitij.so 1981
        return {1:"Data added successfully"}
1982
 
14499 kshitij.so 1983
def searchCollection(class_name, sku, skuBundleId):
14497 kshitij.so 1984
    data = []
1985
    collection = get_mongo_connection().Catalog[class_name]
15076 kshitij.so 1986
    if class_name == "Notifications":
1987
        cursor = collection.find({'skuBundleId':skuBundleId})
1988
        for val in cursor:
1989
            master = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':val['skuBundleId']}))
1990
            if len(master) > 0:
1991
                val['brand'] = master[0]['brand']
1992
                val['model_name'] = master[0]['model_name']
1993
                val['skuBundleId'] = master[0]['skuBundleId']
1994
            else:
1995
                val['brand'] = ""
1996
                val['model_name'] = ""
1997
                val['skuBundleId'] = val['skuBundleId']
1998
            data.append(val)
15095 kshitij.so 1999
        return data
15853 kshitij.so 2000
    master = None
14499 kshitij.so 2001
    if sku is not None:
15853 kshitij.so 2002
        if COLLECTION_MAP.has_key(class_name):
2003
            master = get_mongo_connection().Catalog.MasterData.find_one({'_id':sku})
2004
            cursor = collection.find({'skuBundleId':master['skuBundleId']})
2005
        else:
2006
            cursor = collection.find({'sku':sku})
14499 kshitij.so 2007
        for val in cursor:
15853 kshitij.so 2008
            if master is None:
2009
                master = get_mongo_connection().Catalog.MasterData.find_one({'_id':val['sku']})
2010
            if master is not None:
2011
                val['brand'] = master['brand']
2012
                val['source_product_name'] = master['source_product_name']
2013
                val['skuBundleId'] = master['skuBundleId']
20459 kshitij.so 2014
                val['product_name'] = master['product_name']
2015
                val['source'] = SOURCE_MAP.get(master['source_id'])
14499 kshitij.so 2016
            else:
2017
                val['brand'] = ""
2018
                val['source_product_name'] = ""
2019
                val['skuBundleId'] = ""
2020
            data.append(val)
2021
        return data
2022
    else:
15853 kshitij.so 2023
        if not COLLECTION_MAP.has_key(class_name):
2024
            skuIds = get_mongo_connection().Catalog.MasterData.find({'skuBundleId':skuBundleId}).distinct('_id')
2025
            for sku in skuIds:
2026
                cursor = collection.find({'sku':sku})
2027
                for val in cursor:
2028
                    master = list(get_mongo_connection().Catalog.MasterData.find({'_id':val['sku']}))
2029
                    if len(master) > 0:
2030
                        val['brand'] = master[0]['brand']
2031
                        val['source_product_name'] = master[0]['source_product_name']
2032
                        val['skuBundleId'] = master[0]['skuBundleId']
20461 kshitij.so 2033
                        val['product_name'] = master[0]['product_name']
2034
                        val['source'] = SOURCE_MAP.get(master[0]['source_id'])
15853 kshitij.so 2035
                    else:
2036
                        val['brand'] = ""
2037
                        val['source_product_name'] = ""
2038
                        val['skuBundleId'] = ""
2039
                    data.append(val)
2040
            return data
2041
        else:
2042
            cursor = collection.find({'skuBundleId':skuBundleId})
14499 kshitij.so 2043
            for val in cursor:
15853 kshitij.so 2044
                master = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':val['skuBundleId']}))
14499 kshitij.so 2045
                if len(master) > 0:
2046
                    val['brand'] = master[0]['brand']
2047
                    val['source_product_name'] = master[0]['source_product_name']
2048
                else:
2049
                    val['brand'] = ""
2050
                    val['source_product_name'] = ""
2051
                data.append(val)
15853 kshitij.so 2052
            return data
14495 kshitij.so 2053
 
15074 kshitij.so 2054
def __getBrandIdForBrand(brandName, category_id):
2055
    brandInfo = Brands.query.filter(Brands.category_id==category_id).filter(Brands.name == brandName).all()
2056
    if brandInfo is None or len(brandInfo)!=1:
2057
        raise
2058
    else:
2059
        return brandInfo[0].id
2060
 
14588 kshitij.so 2061
def addNewItem(data):
14594 kshitij.so 2062
    try:
2063
        data['updatedOn'] = to_java_date(datetime.now())
2064
        data['addedOn'] = to_java_date(datetime.now())
2065
        data['priceUpdatedOn'] = to_java_date(datetime.now())
2066
        max_id = list(get_mongo_connection().Catalog.MasterData.find().sort([('_id',pymongo.DESCENDING)]).limit(1))
2067
        max_bundle = list(get_mongo_connection().Catalog.MasterData.find().sort([('skuBundleId',pymongo.DESCENDING)]).limit(1))
2068
        data['_id'] = max_id[0]['_id'] + 1
2069
        data['skuBundleId'] = max_bundle[0]['skuBundleId'] + 1
2070
        data['identifier'] = str(data['identifier'])
2071
        data['secondaryIdentifier'] = str(data['secondaryIdentifier'])
17115 manish.sha 2072
        data['model_name'] = str(data['model_name'])
15074 kshitij.so 2073
        data['brand_id'] = __getBrandIdForBrand(data['brand'], data['category_id'])
17746 kshitij.so 2074
        data['shippingCost'] = float(data['shippingCost'])
19559 kshitij.so 2075
        data['internalRank'] = int(data['internalRank'])
17603 kshitij.so 2076
        if data['category_id'] ==6 and data['subCategoryId'] ==0:
17606 kshitij.so 2077
            return {0:'Sub-Category not selected'}
17608 kshitij.so 2078
        elif data['category_id'] !=6 and data['subCategoryId'] !=0:
2079
            return {0:'Sub-Category not valid'}
2080
        else:
2081
            pass
17604 kshitij.so 2082
        data['subCategory'] = SUB_CATEGORY_MAP.get(data['subCategoryId'])
14594 kshitij.so 2083
        get_mongo_connection().Catalog.MasterData.insert(data)
2084
        return {1:'Data added successfully'}
2085
    except Exception as e:
2086
        print e
2087
        return {0:'Unable to add data.'}
15130 kshitij.so 2088
    finally:
2089
        session.close()
14588 kshitij.so 2090
 
2091
def addItemToExistingBundle(data):
2092
    try:
2093
        data['updatedOn'] = to_java_date(datetime.now())
2094
        data['addedOn'] = to_java_date(datetime.now())
2095
        data['priceUpdatedOn'] = to_java_date(datetime.now())
14593 kshitij.so 2096
        max_id = list(get_mongo_connection().Catalog.MasterData.find().sort([('_id',pymongo.DESCENDING)]).limit(1))
14590 kshitij.so 2097
        data['_id'] = max_id[0]['_id'] + 1
14594 kshitij.so 2098
        data['identifier'] = str(data['identifier'])
2099
        data['secondaryIdentifier'] = str(data['secondaryIdentifier'])
17115 manish.sha 2100
        data['model_name'] = str(data['model_name'])
15074 kshitij.so 2101
        data['brand_id'] = __getBrandIdForBrand(data['brand'], data['category_id'])
17746 kshitij.so 2102
        data['shippingCost'] = float(data['shippingCost'])
19559 kshitij.so 2103
        data['internalRank'] = int(data['internalRank'])
17603 kshitij.so 2104
        if data['category_id'] ==6 and data['subCategoryId'] ==0:
17606 kshitij.so 2105
            return {0:'Sub-Category not selected'}
17608 kshitij.so 2106
        elif data['category_id'] !=6 and data['subCategoryId'] !=0:
2107
            return {0:'Sub-Category not valid'}
2108
        else:
2109
            pass
17604 kshitij.so 2110
        data['subCategory'] = SUB_CATEGORY_MAP.get(data['subCategoryId'])
14588 kshitij.so 2111
        get_mongo_connection().Catalog.MasterData.insert(data)
2112
        return {1:'Data added successfully.'}
14594 kshitij.so 2113
    except Exception as e:
2114
        print e
14588 kshitij.so 2115
        return {0:'Unable to add data.'}
15130 kshitij.so 2116
    finally:
2117
        session.close()
14588 kshitij.so 2118
 
2119
def updateMaster(data, multi):
15130 kshitij.so 2120
    try:
2121
        print data
2122
        if multi != 1:
2123
            _id = data.pop('_id')
2124
            skuBundleId = data.pop('skuBundleId')
2125
            data['updatedOn'] = to_java_date(datetime.now())
2126
            data['identifier'] = str(data['identifier'])
2127
            data['secondaryIdentifier'] = str(data['secondaryIdentifier'])
17115 manish.sha 2128
            data['model_name'] = str(data['model_name'])
17746 kshitij.so 2129
            data['shippingCost'] = float(data['shippingCost'])
19559 kshitij.so 2130
            data['internalRank'] = int(data['internalRank'])
15130 kshitij.so 2131
            data['brand_id'] = __getBrandIdForBrand(data['brand'], data['category_id'])
17603 kshitij.so 2132
            if data['category_id'] ==6 and data['subCategoryId'] ==0:
17606 kshitij.so 2133
                return {0:'Sub-Category not selected'}
17608 kshitij.so 2134
            elif data['category_id'] !=6 and data['subCategoryId'] !=0:
2135
                return {0:'Sub-Category not valid'}
2136
            else:
2137
                pass
17604 kshitij.so 2138
            data['subCategory'] = SUB_CATEGORY_MAP.get(data['subCategoryId'])
15130 kshitij.so 2139
            get_mongo_connection().Catalog.MasterData.update({'_id':_id},{"$set":data},upsert=False)
19559 kshitij.so 2140
            get_mongo_connection().Catalog.MasterData.update({'skuBundleId':skuBundleId},{"$set":{'internalRank':data['internalRank']}},upsert=False, multi=True)
15130 kshitij.so 2141
            return {1:'Data updated successfully.'}
2142
        else:
2143
            _id = data.pop('_id')
2144
            skuBundleId = data.pop('skuBundleId')
2145
            data['updatedOn'] = to_java_date(datetime.now())
2146
            data['identifier'] = str(data['identifier'])
2147
            data['secondaryIdentifier'] = str(data['secondaryIdentifier'])
2148
            data['brand_id'] = __getBrandIdForBrand(data['brand'], data['category_id'])
17115 manish.sha 2149
            data['model_name'] = str(data['model_name'])
17746 kshitij.so 2150
            data['shippingCost'] = float(data['shippingCost'])
19559 kshitij.so 2151
            data['internalRank'] = int(data['internalRank'])
17603 kshitij.so 2152
            if data['category_id'] ==6 and data['subCategoryId'] ==0:
17606 kshitij.so 2153
                return {0:'Sub-Category not selected'}
17608 kshitij.so 2154
            elif data['category_id'] !=6 and data['subCategoryId'] !=0:
2155
                return {0:'Sub-Category not valid'}
2156
            else:
2157
                pass
17604 kshitij.so 2158
            data['subCategory'] = SUB_CATEGORY_MAP.get(data['subCategoryId'])
15130 kshitij.so 2159
            get_mongo_connection().Catalog.MasterData.update({'_id':_id},{"$set":data},upsert=False)
2160
            similarItems = get_mongo_connection().Catalog.MasterData.find({'skuBundleId':skuBundleId})
2161
            for item in similarItems:
2162
                if item['_id'] == _id:
2163
                    continue
2164
                item['updatedOn'] = to_java_date(datetime.now())
2165
                item['thumbnail'] = data['thumbnail']
2166
                item['category'] = data['category']
2167
                item['category_id'] = data['category_id']
2168
                item['is_shortage'] = data['is_shortage']
2169
                item['mrp'] = data['mrp']
2170
                item['status'] = data['status']
2171
                item['maxPrice'] = data['maxPrice']
2172
                item['brand_id'] = data['brand_id']
17603 kshitij.so 2173
                item['subCategoryId'] = data['subCategoryId']
2174
                item['subCategory'] = data['subCategory']
19559 kshitij.so 2175
                item['internalRank'] = data['internalRank']
15130 kshitij.so 2176
                similar_item_id = item.pop('_id')
2177
                get_mongo_connection().Catalog.MasterData.update({'_id':similar_item_id},{"$set":item},upsert=False)
2178
            return {1:'Data updated successfully.'}
17603 kshitij.so 2179
    except:
20689 kshitij.so 2180
        traceback.print_exc()
17603 kshitij.so 2181
        return {0:'Unable to update data'}
15130 kshitij.so 2182
    finally:
2183
        session.close()
14619 kshitij.so 2184
 
2185
def getLiveCricScore():
2186
    return mc.get('liveScore')
14852 kshitij.so 2187
 
2188
def addBundleToNotification(data):
2189
    try:
15069 kshitij.so 2190
        collection = get_mongo_connection().Catalog.Notifications
14852 kshitij.so 2191
        cursor = collection.find({'skuBundleId':data['skuBundleId']})
2192
        if cursor.count() > 0:
2193
            return {0:"SkuBundleId information already present."}
2194
        else:
2195
            collection.insert(data)
2196
            return {1:'Data updated successfully.'}
2197
    except:
2198
        return {0:'Unable to add data.'}
2199
 
2200
def getAllNotifications(offset, limit):
2201
    data = []
15069 kshitij.so 2202
    collection = get_mongo_connection().Catalog.Notifications
16450 kshitij.so 2203
    cursor = collection.find().sort([('endDate',pymongo.DESCENDING)]).skip(offset).limit(limit)
14852 kshitij.so 2204
    for val in cursor:
15072 kshitij.so 2205
        master = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':val['skuBundleId']}))
14852 kshitij.so 2206
        if len(master) > 0:
2207
            val['brand'] = master[0]['brand']
15071 kshitij.so 2208
            val['model_name'] = master[0]['model_name']
14852 kshitij.so 2209
            val['skuBundleId'] = master[0]['skuBundleId']
2210
        else:
2211
            val['brand'] = ""
15071 kshitij.so 2212
            val['model_name'] = ""
2213
            val['skuBundleId'] = val['skuBundleId']
14852 kshitij.so 2214
        data.append(val)
2215
    return data
14997 kshitij.so 2216
 
2217
def getBrandsForFilter(category_id):
2218
    if mc.get("brandFilter") is None:
15095 kshitij.so 2219
        print "Populating brand data for category_id %d" %(category_id)
17469 kshitij.so 2220
        tabData, mobData, accData = [], [], []
14997 kshitij.so 2221
        mobileDeals = get_mongo_connection().Catalog.Deals.aggregate([
16170 kshitij.so 2222
                                                                      {"$match":{"category_id":3,"showDeal":1,"totalPoints":{"$gt":-100}}
14997 kshitij.so 2223
                                                                    },
2224
                                                                 {"$group" : 
2225
                                                                  {'_id':{'brand_id':'$brand_id','brand':'$brand'},'count':{'$sum':1}}
2226
                                                                  }
2227
                                                                ])
14588 kshitij.so 2228
 
14997 kshitij.so 2229
        tabletDeals = get_mongo_connection().Catalog.Deals.aggregate([
16170 kshitij.so 2230
                                                                      {"$match":{"category_id":5,"showDeal":1,"totalPoints":{"$gt":-100}}
14997 kshitij.so 2231
                                                                    },
2232
                                                                 {"$group" : 
2233
                                                                  {'_id':{'brand_id':'$brand_id','brand':'$brand'},'count':{'$sum':1}}
2234
                                                                  }
2235
                                                                ])
2236
 
17469 kshitij.so 2237
        accessoriesDeals = get_mongo_connection().Catalog.Deals.aggregate([
19597 kshitij.so 2238
                                                                      {"$match":{"category_id":6,"showDeal":1,"dealRankPoints":{"$gt":0}}
17469 kshitij.so 2239
                                                                    },
2240
                                                                 {"$group" : 
2241
                                                                  {'_id':{'brand_id':'$brand_id','brand':'$brand'},'count':{'$sum':1}}
2242
                                                                  }
2243
                                                                ])
2244
 
14997 kshitij.so 2245
        #print mobileDeals
2246
        #print "==========Mobile data ends=========="
2247
 
2248
        #print tabletDeals
2249
        #print "==========Tablet data ends=========="
2250
 
2251
        #print allDeals
2252
        #print "==========All deal data ends========="
2253
 
2254
        for mobileDeal in mobileDeals['result']:
2255
            if mobileDeal.get('_id').get('brand_id') != 0:
2256
                tempMap = {}
2257
                tempMap['brand'] = mobileDeal.get('_id').get('brand')
2258
                tempMap['brand_id'] = mobileDeal.get('_id').get('brand_id')
2259
                tempMap['count'] = mobileDeal.get('count')
2260
                mobData.append(tempMap)
2261
 
2262
        for tabletDeal in tabletDeals['result']:
2263
            if tabletDeal.get('_id').get('brand_id') != 0:
2264
                tempMap = {}
2265
                tempMap['brand'] = tabletDeal.get('_id').get('brand')
2266
                tempMap['brand_id'] = tabletDeal.get('_id').get('brand_id')
2267
                tempMap['count'] = tabletDeal.get('count')
2268
                tabData.append(tempMap)
2269
 
17469 kshitij.so 2270
        for accessoryDeal in accessoriesDeals['result']:
2271
            if accessoryDeal.get('_id').get('brand_id') != 0:
2272
                tempMap = {}
2273
                tempMap['brand'] = accessoryDeal.get('_id').get('brand')
2274
                tempMap['brand_id'] = accessoryDeal.get('_id').get('brand_id')
2275
                tempMap['count'] = accessoryDeal.get('count')
2276
                accData.append(tempMap)
14997 kshitij.so 2277
 
19597 kshitij.so 2278
        mc.set("brandFilter",{3:mobData, 5:tabData, 6:accData}, 600)  
14997 kshitij.so 2279
 
15062 kshitij.so 2280
    return sorted(mc.get("brandFilter").get(category_id), key = lambda x: (-x['count'], x['brand']))
15375 kshitij.so 2281
 
15459 kshitij.so 2282
def getStaticDeals(offset, limit, category_id, direction):
15375 kshitij.so 2283
    user_specific_deals = mc.get("staticDeals")
2284
    if user_specific_deals is None:
2285
        __populateStaticDeals()
2286
        user_specific_deals = mc.get("staticDeals")
15459 kshitij.so 2287
    rev = False
2288
    if direction is None or direction == -1:
2289
        rev=True
2290
    return sorted((user_specific_deals.get(category_id))[offset:offset+limit],reverse=rev)
15375 kshitij.so 2291
 
2292
def __populateStaticDeals():
2293
    print "Populating memcache for static deals"
2294
    outer_query = []
2295
    outer_query.append({"showDeal":1})
2296
    query = {}
16170 kshitij.so 2297
    query['$gt'] = -100
15375 kshitij.so 2298
    outer_query.append({'totalPoints':query})
2299
    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)]))
2300
    mobile_deals = []
2301
    tablet_deals = []
2302
    for deal in all_deals:
2303
        item = get_mongo_connection().Catalog.MasterData.find({'_id':deal['_id']})
2304
        if deal['category_id'] ==3:
2305
            mobile_deals.append(getItemObjForStaticDeals(item[0]))
2306
        elif deal['category_id'] ==5:
2307
            tablet_deals.append(getItemObjForStaticDeals(item[0]))
2308
        else:
2309
            continue
2310
 
2311
    random.shuffle(mobile_deals,random.random)
2312
    random.shuffle(tablet_deals,random.random)
2313
 
2314
    mem_cache_val = {3:mobile_deals, 5:tablet_deals}
2315
    mc.set("staticDeals", mem_cache_val, 3600)
2316
 
17733 kshitij.so 2317
def getItemObjForStaticDeals(item,transform=None):
2318
    mpu = str(item.get('marketPlaceUrl'))
2319
    if transform:
2320
        if mpu.find("snapdeal")!=-1:
2321
            mpu = "http://m.snapdeal.com"+mpu[mpu.find("/product"):]
2322
        elif mpu.find("homeshop18")!=-1:
2323
            mpu = "http://m.homeshop18.com/product.mobi?productId="+item['identifier']
17735 kshitij.so 2324
        elif mpu.find("saholic.com")!=-1:
17746 kshitij.so 2325
            mpu = "http://m."+mpu[mpu.find("saholic.com"):]
17735 kshitij.so 2326
        elif mpu.find("shopclues.com")!=-1:
17733 kshitij.so 2327
            mpu = "http://m."+mpu[mpu.find("shopclues.com"):]
2328
        else:
2329
            pass
2330
 
2331
    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 2332
 
2333
def getItemByMerchantIdentifier(identifier, source_id):
2334
    skuData = None
17035 kshitij.so 2335
    if source_id in (1,2,4,5,6,7):
16300 manas 2336
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'identifier':identifier.strip(), 'source_id':source_id})
2337
    elif source_id == 3:
2338
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'secondaryIdentifier':identifier.strip(), 'source_id':source_id})
2339
    if skuData is None:
2340
        return {}
2341
    else:
2342
        return skuData
15375 kshitij.so 2343
 
17936 kshitij.so 2344
def getDealsForNotification(skuBundleIds,skipSplitting=False):
2345
    if not skipSplitting:
2346
        bundles= [int(skuBundleId) for skuBundleId in skuBundleIds.split(',')]
2347
        print bundles
2348
    else:
2349
        bundles = skuBundleIds
16406 kshitij.so 2350
    dealsList = []
16364 kshitij.so 2351
    dealsListMap = []
16406 kshitij.so 2352
    for bundleId in bundles:
2353
        outer_query = []
2354
        outer_query.append({ "$or": [ { "showDeal": 1} , { "prepaidDeal": 1 } ] })
2355
        outer_query.append({'skuBundleId':bundleId})
2356
        deals = get_mongo_connection().Catalog.Deals.find({"$and":outer_query})
2357
        for deal in deals:
2358
            dealsList.append(deal)
16364 kshitij.so 2359
    sortedMap = {}
2360
    rankMap = {}
2361
    rank = 0
16406 kshitij.so 2362
    for sorted_deal in dealsList:
16364 kshitij.so 2363
        if sortedMap.get(sorted_deal['skuBundleId']) is None:
2364
            sortedMap[sorted_deal['skuBundleId']] = {rank:[sorted_deal]}
2365
            rankMap[rank] = (sortedMap[sorted_deal['skuBundleId']].values())[0]
2366
            rank = rank +1
2367
        else:
2368
            for temp_list in sortedMap.get(sorted_deal['skuBundleId']).itervalues():
2369
                temp_list.append(sorted_deal)
2370
            rankMap[(sortedMap.get(sorted_deal['skuBundleId']).keys())[0]] = temp_list
2371
 
16367 kshitij.so 2372
    for dealList in [rankMap.get(k, []) for k in range(0, len(bundles))]:
16364 kshitij.so 2373
        temp = []
2374
        for d in dealList:
2375
            item = list(get_mongo_connection().Catalog.MasterData.find({'_id':d['_id']}))
2376
            if len(item) ==0:
2377
                continue
2378
            if d['dealType'] == 1 and d['source_id'] ==1:
2379
                item[0]['marketPlaceUrl'] = "http://www.amazon.in/dp/%s"%(item[0]['identifier'].strip())
2380
            elif d['source_id'] ==3:
2381
                item[0]['marketPlaceUrl'] = item[0]['marketPlaceUrl']+'?supc='+item[0].get('identifier')
2382
            else:
2383
                pass 
2384
            try:
2385
                cashBack = getCashBack(item[0]['_id'], item[0]['source_id'], item[0]['category_id'])
2386
                if not cashBack or cashBack.get('cash_back_status')!=1:
2387
                    item[0]['cash_back_type'] = 0
2388
                    item[0]['cash_back'] = 0
2389
                else:
2390
                    item[0]['cash_back_type'] = int(cashBack['cash_back_type'])
2391
                    item[0]['cash_back'] = cashBack['cash_back']
2392
            except:
2393
                print "Error in adding cashback to deals"
2394
                item[0]['cash_back_type'] = 0
2395
                item[0]['cash_back'] = 0
2396
            try:
2397
                item[0]['dp'] = d['dp']
2398
                item[0]['showDp'] = d['showDp']
2399
            except:
2400
                item[0]['dp'] = 0.0
2401
                item[0]['showDp'] = 0
17727 kshitij.so 2402
 
2403
            try:
2404
                if item[0]['showVideo']==0:
2405
                    item[0]['videoLink'] =""
2406
            except:
2407
                item[0]['videoLink'] =""
2408
            try:
2409
                if item[0]['quantity'] >1:
2410
                    ppq = float(item[0]['available_price'])/item[0]['quantity']
2411
 
2412
                    if ppq == round(ppq):
2413
                        item[0]['ppq'] = int(ppq)
2414
                    else:
2415
                        item[0]['ppq'] = round(ppq,2)
2416
                else:
2417
                    item[0]['ppq'] = 0
2418
            except:
2419
                item[0]['ppq'] = 0
2420
            if item[0]['category_id']!=6:
2421
                try:
18830 kshitij.so 2422
                    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']))
2423
                    item[0]['filterTextBrand'] = (item[0]['brand'])
17727 kshitij.so 2424
                except:
18830 kshitij.so 2425
                    pass
17727 kshitij.so 2426
            else:
2427
                try:
18051 kshitij.so 2428
                    if item[0]['subCategory']=='' or item[0]['subCategory'] is None or item[0]['subCategoryId']==0:
17727 kshitij.so 2429
                        raise
18830 kshitij.so 2430
                    item[0]['filterLinkSubCategory'] = '/category/'+str(int(item[0]['category_id']))+'?searchFor='+urllib.quote(item[0]['subCategory'])+'&filter=subcategory&subcategories='+str(int(item[0]['subCategoryId']))
2431
                    item[0]['filterTextSubCategory'] = (item[0]['subCategory'])
2432
                    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']))
2433
                    item[0]['filterTextBrand'] = (item[0]['brand'])
17727 kshitij.so 2434
                except:
18830 kshitij.so 2435
                    pass
17944 kshitij.so 2436
            try:
2437
                if item[0]['source_id']==4:
2438
                    item_availability_info = mc.get("item_availability_"+str(item[0]['identifier']).strip())
2439
                    if item_availability_info is None or len(item_availability_info)==0:
2440
                        item[0]['availabilityInfo'] = [{}]
2441
                    else:
2442
                        item[0]['availabilityInfo'] = item_availability_info
2443
            except:
2444
                item[0]['availabilityInfo'] = [{}]
19135 kshitij.so 2445
 
19193 kshitij.so 2446
            if item[0]['source_id']==4:
2447
                for av_info in item[0]['availabilityInfo']:
2448
                    if not av_info:
2449
                        continue
2450
                    av_info['cash_back'] = item[0]['cash_back']
2451
                    av_info['cash_back_type'] = item[0]['cash_back_type']
2452
                    netPriceAfterCashBack = av_info['sellingPrice'] 
19199 kshitij.so 2453
                    if av_info['cash_back_type'] ==1:
19207 kshitij.so 2454
                        netPriceAfterCashBack = av_info['sellingPrice'] - math.floor(float(av_info['sellingPrice'])*av_info['cash_back']/100)
19199 kshitij.so 2455
                    elif av_info['cash_back_type'] ==2:
19207 kshitij.so 2456
                        netPriceAfterCashBack = av_info['sellingPrice'] - math.floor(av_info['cash_back'])
19193 kshitij.so 2457
                    else:
2458
                        pass
2459
                    av_info['netPriceAfterCashBack'] = netPriceAfterCashBack
2460
 
2461
            if item[0]['source_id'] != SOURCE_MAP.get("PAYTM.COM"):
2462
                if item[0]['codAvailable'] ==1:
2463
                    paytmPrice = item[0]['available_price']
2464
                else:
2465
                    paytmPrice = item[0]['gross_price']
2466
 
2467
                if item[0]['cash_back_type'] ==1:
19207 kshitij.so 2468
                    item[0]['netPriceAfterCashBack'] = paytmPrice -  math.floor(float(paytmPrice)*item[0]['cash_back']/100)
19193 kshitij.so 2469
                elif item[0]['cash_back_type'] ==2:
19207 kshitij.so 2470
                    item[0]['netPriceAfterCashBack'] = paytmPrice -  math.floor(item[0]['cash_back'])
19193 kshitij.so 2471
                else:
2472
                    item[0]['netPriceAfterCashBack'] = paytmPrice
2473
 
2474
            else:
2475
                if item[0]['cash_back_type'] ==1:
19207 kshitij.so 2476
                    item[0]['netPriceAfterCashBack'] = item[0]['available_price'] -  math.floor(float(item[0]['available_price'])*item[0]['cash_back']/100)
19193 kshitij.so 2477
                elif item[0]['cash_back_type'] ==2:
19207 kshitij.so 2478
                    item[0]['netPriceAfterCashBack'] = item[0]['available_price'] -  math.floor(item[0]['cash_back'])
19193 kshitij.so 2479
                else:
2480
                    item[0]['netPriceAfterCashBack'] = item[0]['available_price']
2481
 
2482
 
19135 kshitij.so 2483
            item[0]['totalPoints'] = d['totalPoints']
17727 kshitij.so 2484
 
16364 kshitij.so 2485
            temp.append(item[0])
2486
        if len(temp) > 1:
2487
            temp = sorted(temp, key = lambda x: (x['available_price']),reverse=False)
2488
        dealsListMap.append(temp)
2489
    return dealsListMap
2490
 
16373 manas 2491
def getSkuBrandData(sku):
2492
    if sku is None:
2493
        return {}
2494
    else:
2495
        orders = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':sku})
2496
        if orders is None:
2497
            return {}
2498
        return orders
16488 kshitij.so 2499
 
2500
def addDealPoints(data):
2501
    collection = get_mongo_connection().Catalog.DealPoints
2502
    cursor = collection.find({'skuBundleId':data['skuBundleId']})
2503
    if cursor.count() > 0:
2504
        return {0:"Sku information already present."}
2505
    else:
2506
        collection.insert(data)
2507
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
2508
        return {1:"Data added successfully"}
2509
 
2510
def getAllBundlesWithDealPoints(offset, limit):
2511
    data = []
2512
    collection = get_mongo_connection().Catalog.DealPoints
2513
    cursor = collection.find().sort([('endDate',pymongo.DESCENDING)]).skip(offset).limit(limit)
2514
    for val in cursor:
2515
        master = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':val.get('skuBundleId')})
2516
        if master is not None:
2517
            val['brand'] = master['brand']
2518
            val['source_product_name'] = master['product_name']
2519
        else:
2520
            val['brand'] = ""
2521
            val['source_product_name'] = ""
2522
        data.append(val)
2523
    return data
16546 kshitij.so 2524
 
2525
def generateRedirectUrl(retailer_id, app_id):
2526
    try:
16663 manish.sha 2527
        if retailer_id <= 0:
2528
            return {'url':"","message":"Retailer Id not valid"}
16546 kshitij.so 2529
        d_app_offer = app_offers.get_by(id=app_id)
16605 manish.sha 2530
    except:
2531
        traceback.print_exc()
16546 kshitij.so 2532
    finally:
2533
        session.close()
2534
    if d_app_offer is None:
2535
        return {'url':"","message":"App id doesn't exist"}
16364 kshitij.so 2536
 
16915 manish.sha 2537
    final_user_payout = 0
2538
    if d_app_offer.override_payout:
2539
        final_user_payout = d_app_offer.overriden_payout
2540
    else:
2541
        final_user_payout = d_app_offer.user_payout
16546 kshitij.so 2542
 
16915 manish.sha 2543
    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)
2544
 
16546 kshitij.so 2545
    get_mongo_connection().AppOrder.AppTransaction.insert(appTransactions.__dict__)
2546
    embedd = str((appTransactions.__dict__).get('_id'))
16548 kshitij.so 2547
    try:
2548
        index = d_app_offer.link.index(".freeb.co.in")
2549
    except:
16605 manish.sha 2550
        traceback.print_exc()
16548 kshitij.so 2551
        return {'url':"","message":"Substring not found"}
2552
    redirect_url = d_app_offer.link[0:index]+"."+embedd+d_app_offer.link[index:]
16546 kshitij.so 2553
    get_mongo_connection().AppOrder.AppTransaction.update({'_id':ObjectId(embedd)},{"$set":{'redirect_url':redirect_url}})
16548 kshitij.so 2554
    return {'url':redirect_url,"message":"Success"}
16556 kshitij.so 2555
 
2556
def addPayout(payout, transaction_id):
2557
    try:
16764 manish.sha 2558
        print 'Got Response for Transaction Id:- '+ str(transaction_id)+ ' and Actual Payout:- '+str(payout)
16556 kshitij.so 2559
        transaction = list(get_mongo_connection().AppOrder.AppTransaction.find({'_id':ObjectId(transaction_id)}))
2560
        if len(transaction) > 0:
2561
            if (transaction[0])['payout_status'] ==1:
16753 manish.sha 2562
                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 2563
 
2564
                approvedAppTransaction = approved_app_transactions.get_by(transaction_id=transaction_id)
2565
                if approvedAppTransaction is None:
2566
                    approvedAppTransaction = approved_app_transactions()
16919 manish.sha 2567
                    approvedAppTransaction.app_id = transaction[0].get('app_id')
16782 manish.sha 2568
                    approvedAppTransaction.cash_back_description = CB_APPROVED
16919 manish.sha 2569
                    approvedAppTransaction.retailer_id = transaction[0].get('retailer_id')
16782 manish.sha 2570
                    approvedAppTransaction.transaction_id = transaction_id
16919 manish.sha 2571
                    approvedAppTransaction.transaction_time = to_py_date(long(transaction[0].get('transaction_time')))
2572
                    approvedAppTransaction.redirect_url = transaction[0].get('redirect_url')
16782 manish.sha 2573
                    approvedAppTransaction.payout_status = 2
2574
                    approvedAppTransaction.payout_description = CB_APPROVED
2575
                    approvedAppTransaction.cashback_status = 2 
2576
                    approvedAppTransaction.payout_amount = long(payout)
2577
                    approvedAppTransaction.payout_time = datetime.now()
16919 manish.sha 2578
                    approvedAppTransaction.offer_price = long(transaction[0].get('offer_price')) 
2579
                    approvedAppTransaction.overridenCashBack = transaction[0].get('overridenCashBack')
2580
                    approvedAppTransaction.isCashBackOverriden = transaction[0].get('isCashBackOverriden')
2581
                    approvedAppTransaction.user_payout = transaction[0].get('user_payout')
16782 manish.sha 2582
                    approvedAppTransaction.cashBackConsidered = False
16915 manish.sha 2583
                    if transaction[0].get('final_user_payout') is not None:
2584
                        approvedAppTransaction.final_user_payout = transaction[0].get('final_user_payout')
2585
                    else:
16919 manish.sha 2586
                        if transaction[0].get('isCashBackOverriden'):
2587
                            approvedAppTransaction.final_user_payout = transaction[0].get('overridenCashBack')
16915 manish.sha 2588
                        else:
16919 manish.sha 2589
                            approvedAppTransaction.final_user_payout = transaction[0].get('user_payout')
16782 manish.sha 2590
                    session.commit()
2591
 
2592
                    updateResult = _updateApprovedCashbackToUser(approvedAppTransaction.id)
16631 manish.sha 2593
                else:
16783 manish.sha 2594
                    approvedAppTransaction.payout_amount = long(payout)
2595
                    approvedAppTransaction.payout_time = datetime.now()
2596
                    if approvedAppTransaction.cashBackConsidered == False:
2597
                        updateResult = _updateApprovedCashbackToUser(approvedAppTransaction.id)
2598
                    session.commit()
16782 manish.sha 2599
 
2600
                    '''
2601
                    try:
2602
                        if int(transaction[0]['offer_price']) != payout or int(transaction[0]['user_payout']) < payout:
2603
                            _sendAlertForAppPayouts(int(transaction[0]['app_id']), int(transaction[0]['offer_price']), int(transaction[0]['user_payout']), payout)
2604
                    except:
2605
                        print traceback.print_exc()
2606
                    '''
16556 kshitij.so 2607
                return {'status':'ok','message':'Payout updated'}
2608
            elif (transaction[0])['payout_status'] ==2:
2609
                return {'status':'ok','message':'Payout already processed'}
2610
            else:
2611
                return {'status':'fail','message':'Something is wrong'}
2612
        else:
2613
            return {'status':'fail','message':'transaction_id not found'}
2614
    except:
16657 manish.sha 2615
        print traceback.print_exc()
16631 manish.sha 2616
        try:
16753 manish.sha 2617
            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 2618
        except:
2619
            print 'Data Inconsistency in Cashback Process'
16636 manish.sha 2620
            print traceback.print_exc()
16559 kshitij.so 2621
        return  {'status':'fail','message':'Something is wrong'}
16885 kshitij.so 2622
    finally:
2623
        session.close()
16556 kshitij.so 2624
 
16631 manish.sha 2625
def _updateApprovedCashbackToUser(approvedAppTransactionId):
2626
    approvedAppTransaction = approved_app_transactions.get_by(id=approvedAppTransactionId)
16915 manish.sha 2627
    if approvedAppTransaction.retailer_id < 0:
2628
        return False
2629
 
16631 manish.sha 2630
    currentMonth = datetime.today().month
2631
    currentDay = datetime.today().day
2632
    currentYear = datetime.today().year
2633
    fortNight = (currentMonth - 1)*2 + (currentDay/15)
2634
    if currentDay == 30 or currentDay ==31:
2635
        fortNight = fortNight-1
2636
    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()
2637
    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()
2638
    try:
2639
        if userAppCashbackObj is None:
2640
            userAppCashbackObj = user_app_cashbacks()
2641
            userAppCashbackObj.user_id = approvedAppTransaction.retailer_id
2642
            userAppCashbackObj.status = 'Approved'
16915 manish.sha 2643
            userAppCashbackObj.amount = approvedAppTransaction.final_user_payout
16631 manish.sha 2644
            userAppCashbackObj.fortnightOfYear = fortNight
2645
            userAppCashbackObj.yearVal = currentYear
2646
        else:
16915 manish.sha 2647
            userAppCashbackObj.amount = userAppCashbackObj.amount + approvedAppTransaction.final_user_payout
16631 manish.sha 2648
 
2649
        if userAppInstallObj is None:
2650
            app_offer = app_offers.get_by(id=approvedAppTransaction.app_id)
2651
            userAppInstallObj = user_app_installs()
2652
            userAppInstallObj.user_id = approvedAppTransaction.retailer_id
2653
            userAppInstallObj.fortnightOfYear = fortNight
2654
            userAppInstallObj.transaction_date = datetime(currentYear, currentMonth, currentDay, 0, 0, 0, 0).date()
2655
            userAppInstallObj.app_id = approvedAppTransaction.app_id
2656
            userAppInstallObj.app_name = app_offer.app_name
2657
            userAppInstallObj.installCount = 1
16915 manish.sha 2658
            userAppInstallObj.payoutAmount = approvedAppTransaction.final_user_payout
16631 manish.sha 2659
        else:
2660
            userAppInstallObj.installCount = userAppInstallObj.installCount + 1
16915 manish.sha 2661
            userAppInstallObj.payoutAmount = userAppInstallObj.payoutAmount +approvedAppTransaction.final_user_payout
16631 manish.sha 2662
 
2663
        approvedAppTransaction.cashBackConsidered = True
2664
        session.commit()
2665
        return True
2666
    except:
2667
        session.rollback()
16636 manish.sha 2668
        print traceback.print_exc()
16631 manish.sha 2669
        return False
16693 manish.sha 2670
 
2671
def _sendAlertForAppPayouts(app_id, offerPrice, userPayout, payout):
2672
    m = Email('localhost')
2673
    mFrom = "dtr@shop2020.in"
2674
    m.setFrom(mFrom)
20172 aman.kumar 2675
    mTo = ['rajneesh.arora@saholic.com','kshitij.sood@saholic.com','chaitnaya.vats@saholic.com','ritesh.chauhan@saholic.com','khushal.bhatia@saholic.com']
16693 manish.sha 2676
    for receipient in mTo:
2677
        m.addRecipient(receipient)
2678
    appOffer = app_offers.get_by(id=app_id)
2679
    if offerPrice != payout:
2680
        m.setSubject("Mismatch in Offer Price and Actual Pay Out for App Id:- "+str(appOffer.id)+" App Name:- "+str(appOffer.app_name))
2681
        message1 = "Offer Price:- "+ str(appOffer.offer_price) + "\n" + "Actual Pay Out:- "+ str(payout)
2682
        m.setTextBody(message1)
2683
    if userPayout > payout:
2684
        m.setSubject("User Pay Out greater than actual PayOut for App Id:- "+str(appOffer.id)+" App Name:- "+str(appOffer.app_name))
2685
        message2 = "User Pay Out Price:- "+ str(appOffer.user_payout) + "\n" + "Actual Pay Out:- "+ str(payout)
2686
        m.setTextBody(message2)
2687
    m.send()
16631 manish.sha 2688
 
16789 amit.gupta 2689
def rejectCashback(orderId, subOrderId):
16833 amit.gupta 2690
    cashBack = get_mongo_connection().Dtr.merchantOrder.update({"orderId":orderId, "subOrders.merchantSubOrderId":subOrderId}, 
16789 amit.gupta 2691
                                                               {"$set":{"subOrders.$.cashBackStatus":CB_REJECTED}})
16837 amit.gupta 2692
    print cashBack
16836 amit.gupta 2693
    return cashBack.get("nModified")
16894 manish.sha 2694
 
2695
def getAppOffers(retailer_id):
2696
    if not bool(mc.get("cached_app_offers_"+str(retailer_id))):
2697
        populateAppOffers(retailer_id)
2698
    return mc.get("cached_app_offers_"+str(retailer_id)) 
2699
 
2700
def populateAppOffers(retailerId):
2701
    retailerId = int(retailerId)
2702
    #offset = req.get_param_as_int("offset")
2703
    #limit = req.get_param_as_int("limit")
16941 manish.sha 2704
    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()
2705
    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 2706
    #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()
2707
 
2708
    appOffersMap = {}
2709
    priorityList = []
2710
    priorityMap = {}
2711
    for offer in priortizeders:
16941 manish.sha 2712
        if priorityMap.has_key(long(offer[1])):
2713
            offersVal = priorityMap.get(long(offer[1]))
2714
            offersVal.append(offer)
2715
            priorityMap[long(offer[1])]=offersVal
2716
        else:
2717
            offersVal = []
2718
            offersVal.append(offer)
2719
            priorityMap[long(offer[1])]=offersVal
2720
 
16894 manish.sha 2721
    priorityList = sorted(priorityMap)
2722
 
2723
    maxCount = len(nonPriortizedOffers) + len(priortizeders)
2724
 
16909 manish.sha 2725
    if priorityList is not None and len(priorityList)>0:
2726
        if maxCount < max(priorityList):
2727
            maxCount = max(priorityList)
16894 manish.sha 2728
 
2729
    count = 1
2730
    blockedPlaces = []
2731
    availablePlaces = []
2732
    while count <= maxCount:
2733
        if count in priorityList:
2734
            blockedPlaces.append(count)
2735
        else:
2736
            availablePlaces.append(count)
2737
        count = count +1
16941 manish.sha 2738
    print 'Blocked Places', blockedPlaces
16894 manish.sha 2739
    for val in blockedPlaces:
16941 manish.sha 2740
        key = val
2741
        for offerObj in priorityMap.get(val):
2742
            while appOffersMap.has_key(key):
2743
                key = key+1
2744
            appOffersMap[key] = long(offerObj[0])
2745
            if key in availablePlaces:
2746
                availablePlaces.remove(key)
2747
 
2748
    print 'Available Places', availablePlaces
2749
 
16894 manish.sha 2750
    i=0
2751
    for val in availablePlaces:
16899 manish.sha 2752
        if i<len(nonPriortizedOffers):
16902 manish.sha 2753
            appOffersMap[val]= long(nonPriortizedOffers[i][0])
16899 manish.sha 2754
        else:
2755
            break
2756
        i=i+1
16901 manish.sha 2757
    print 'AppOffersMap', appOffersMap
16894 manish.sha 2758
 
2759
    finalAppOffersMap = {}
2760
    if len(appOffersMap) > 0:
2761
        for key in sorted(appOffersMap):               
2762
            finalAppOffersMap[key] = appOffersMap[key]
2763
 
2764
        mc.set("cached_app_offers_"+str(retailerId), finalAppOffersMap, 120)
2765
    else:
2766
        print 'No Offers'
2767
        mc.set("cached_app_offers_"+str(retailerId), {}, 10)              
17280 manish.sha 2768
 
19556 manas 2769
def sendNotification(userIds, campaignName, title, message,notificationtype, url, expiresat='2999-01-01', sendsms=False, smstext=None):
2770
    max_id = list(get_mongo_connection_dtr_data().User.notificationcampaigns.find().sort([('_id',pymongo.DESCENDING)]).limit(1))
19337 manish.sha 2771
    if len(max_id) ==0:
2772
        max_id = 0
2773
    else:
2774
        max_id = max_id[0]['_id']
2775
    max_id = max_id +1
19362 manish.sha 2776
    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 2777
    get_mongo_connection_dtr_data().User.notificationcampaigns.insert(campaign.__dict__)
17302 kshitij.so 2778
 
2779
def getDummyDeals(categoryId, offset, limit):
2780
    outer_query = []
2781
    outer_query.append({"showDeal":1})
2782
    outer_query.append({"category_id":categoryId})
2783
    query = {}
2784
    query['$gt'] = -100
2785
    outer_query.append({'totalPoints':query})
2786
    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))
2787
    returnObj = []
2788
    for deal in all_deals:
17306 kshitij.so 2789
        item = list(get_mongo_connection().Catalog.MasterData.find({'_id':deal['_id']}))
17734 kshitij.so 2790
        returnObj.append(getItemObjForStaticDeals(item[0],transform=True))
17302 kshitij.so 2791
    return returnObj
17367 kshitij.so 2792
 
17469 kshitij.so 2793
def searchDummyDeals(search_term , limit, offset):
17367 kshitij.so 2794
    data = []
2795
    uniqueMap = {}
2796
    if search_term is not None:
2797
        terms = search_term.split(' ')
2798
        outer_query = []
2799
        for term in terms:
2800
            outer_query.append({"source_product_name":re.compile(term, re.IGNORECASE)})
2801
        try:
2802
            collection = get_mongo_connection().Catalog.MasterData.find({"$and":outer_query,'source_id':{'$in':SOURCE_MAP.keys()}})
2803
            for record in collection:
2804
                data.append(record)
2805
        except:
2806
            pass
2807
    else:
2808
        collection = get_mongo_connection().Catalog.MasterData.find({'source_id':{'$in':SOURCE_MAP.keys()}})
2809
        for record in collection:
2810
            data.append(record)
2811
    for x in data:
2812
        if not uniqueMap.has_key(x['skuBundleId']):
17469 kshitij.so 2813
            uniqueMap[x['skuBundleId']] = {'source_product_name':x['source_product_name'],'skuBundleId':x['skuBundleId'],'thumbnail':x['thumbnail']}
17367 kshitij.so 2814
 
17469 kshitij.so 2815
    if (offset + limit) > len(uniqueMap.values()):
2816
        limit = len(uniqueMap.values()) - offset - 1
2817
 
2818
    count = 0
2819
#     for x in uniqueMap.values():
2820
#         print count,
2821
#         print '\t',
2822
#         print x
2823
#         count = count+1
17555 kshitij.so 2824
 
17469 kshitij.so 2825
    print offset
2826
    print limit
2827
 
2828
    return uniqueMap.values()[offset:limit+offset]
17367 kshitij.so 2829
 
17469 kshitij.so 2830
 
2831
def getDummyPricing(skuBundleId):
2832
    collection = get_mongo_connection().Catalog.MasterData.find({'source_id':{'$in':SOURCE_MAP.keys()},'skuBundleId':skuBundleId,'in_stock':1})
2833
    print collection.count()
2834
    cheapest = 99999999
2835
    cheapestDetails= None
2836
    returnMap = {}
2837
 
2838
    for d in collection:
2839
        if d['available_price'] < cheapest:
2840
            cheapestDetails = d
2841
            cheapest = int(d['available_price'])
2842
        if returnMap.has_key(d['source_id']):
17733 kshitij.so 2843
            d = getItemObjForStaticDeals(d,transform=True)
17469 kshitij.so 2844
            d['toShowStore'] = 0
2845
            returnMap[d['source_id']].append(d)
2846
        else:
2847
            temp = []
17733 kshitij.so 2848
            d = getItemObjForStaticDeals(d,transform=True)
17469 kshitij.so 2849
            d['toShowStore'] = 1
2850
            temp.append(d)
2851
            returnMap[d['source_id']] = temp
2852
    returnMap['cheapest'] = cheapestDetails
2853
    for y in returnMap.itervalues():
2854
        if isinstance(y, (list, tuple)):
2855
            (y[len(y)-1])['lastElement'] = 1
2856
        else:
2857
            pass
2858
    if returnMap['cheapest'] ==None:
2859
        dum = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':skuBundleId,'source_id':{"$in":SOURCE_MAP.keys()}})
2860
        returnMap['cheapest'] = {'thumbnail':dum['thumbnail'],'source_product_name':dum['source_product_name']}
2861
    return returnMap
17555 kshitij.so 2862
 
17603 kshitij.so 2863
 
17555 kshitij.so 2864
def addDealObject(data):
17570 kshitij.so 2865
    if data.get('img_url') is None or data.get('img_url')=="" or data.get('name') is None or data.get('name')=="":
2866
        return {0:'Invalid data'}   
17555 kshitij.so 2867
    try:
2868
        max_id = list(get_mongo_connection().Catalog.DealObject.find().sort([('_id',pymongo.DESCENDING)]).limit(1))
2869
        if len(max_id) ==0:
2870
            max_id = 0
17559 kshitij.so 2871
        else:
2872
            max_id = max_id[0]['_id']
2873
        data['_id'] = max_id +1
17555 kshitij.so 2874
        get_mongo_connection().Catalog.DealObject.insert(data)
2875
        return {1:'Data added successfully'}
2876
    except:
2877
        return {0:'Error in adding data'}
2878
 
17561 kshitij.so 2879
def getAllDealObjects(offset, limit):
2880
    data = []
2881
    collection = get_mongo_connection().Catalog.DealObject
2882
    cursor = collection.find({}).skip(offset).limit(limit)
2883
    for val in cursor:
17564 kshitij.so 2884
        data.append({'_id':val['_id'],'name':val['name']})
17561 kshitij.so 2885
    return data
17564 kshitij.so 2886
 
2887
def deleteDealObject(id):
2888
    try:
2889
        get_mongo_connection().Catalog.DealObject.remove({'_id':id})
17616 kshitij.so 2890
        get_mongo_connection().Catalog.FeaturedDealsDealObject.remove({'_id':id})
17564 kshitij.so 2891
        return {1:"Deal Object deleted"}
2892
    except:
2893
        return {0:"Error in deleting object"}
17566 kshitij.so 2894
 
2895
def getDealObjectById(id):
2896
    try:
2897
        data = get_mongo_connection().Catalog.DealObject.find({'_id':id})
2898
        return data
2899
    except:
17570 kshitij.so 2900
        return {}
17561 kshitij.so 2901
 
17570 kshitij.so 2902
def updateDealObject(data):
2903
    try:
2904
        _id = data['_id']
2905
        data.pop('_id')
2906
        get_mongo_connection().Catalog.DealObject.update({'_id':_id},{"$set":data},upsert=False)
2907
        return {1:"Data updated successfully"}
2908
    except:
2909
        return {0:"Error in updating data"}
2910
 
17610 kshitij.so 2911
def getAllFeaturedDealsForDealObject(offset, limit):
2912
    data = []
2913
    collection = get_mongo_connection().Catalog.FeaturedDealsDealObject
2914
    cursor = collection.find({}).skip(offset).limit(limit)
2915
    for val in cursor:
2916
        data.append(val)
2917
    return data
2918
 
2919
def addFeaturedDealForDealObject(data):
19280 kshitij.so 2920
    print data
2921
 
17610 kshitij.so 2922
    collection = get_mongo_connection().Catalog.FeaturedDealsDealObject
2923
    cursor = collection.find({'_id':data['_id']})
2924
    master = get_mongo_connection().Catalog.DealObject.find_one({'_id':data['_id']})
2925
    if master is None:
2926
        return {0:"Deal Object id wrong"}
2927
    otherInfoObj = data['otherInfo']
2928
    toPop = []
2929
    for x,y in otherInfoObj.iteritems():
19280 kshitij.so 2930
        if y==0 or y=="":
17610 kshitij.so 2931
            toPop.append(x)
2932
 
2933
    for popItem in toPop:
2934
        otherInfoObj.pop(popItem)
2935
    if len(otherInfoObj.keys())==0:
2936
        return {0:"No rank info to add"}
2937
 
2938
    for x,y in otherInfoObj.iteritems():
2939
        exist = get_mongo_connection().Catalog.FeaturedDealsDealObject.find({'otherInfo.'+x:y})
2940
        if exist.count() >0:
2941
            return {0:"Rank already assigned Deal Object Id %s"%(exist[0]['_id'])}
2942
    if cursor.count() > 0:
2943
        return {0:"Deal Object Id information already present."}
2944
    else:
2945
        collection.insert(data)
2946
        return {1:"Data added successfully"}
2947
 
17616 kshitij.so 2948
def deleteFeaturedDealObject(id):
2949
    try:
2950
        get_mongo_connection().Catalog.FeaturedDealsDealObject.remove({'_id':id})
2951
        return {1:"Deal Object deleted"}
2952
    except:
2953
        return {0:"Error in deleting object"}
17654 kshitij.so 2954
 
2955
def getSubCategoryForFilter(category_id):
2956
    if mc.get("subCategoryFilter") is None:
2957
        print "Populating subcategory data for category_id %d" %(category_id)
2958
        tabData, mobData, accData = [], [], []
2959
 
2960
        accessoriesDeals = get_mongo_connection().Catalog.Deals.aggregate([
19597 kshitij.so 2961
                                                                      {"$match":{"category_id":6,"showDeal":1,"dealRankPoints":{"$gt":0}}
17654 kshitij.so 2962
                                                                    },
2963
                                                                 {"$group" : 
2964
                                                                  {'_id':{'subCategoryId':'$subCategoryId','subCategory':'$subCategory'},'count':{'$sum':1}}
2965
                                                                  }
2966
                                                                ])
2967
 
2968
        for accessoryDeal in accessoriesDeals['result']:
2969
            if accessoryDeal.get('_id').get('subCategoryId') != 0:
2970
                tempMap = {}
2971
                tempMap['subCategory'] = accessoryDeal.get('_id').get('subCategory')
2972
                tempMap['subCategoryId'] = accessoryDeal.get('_id').get('subCategoryId')
2973
                tempMap['count'] = accessoryDeal.get('count')
2974
                accData.append(tempMap)
2975
 
2976
 
2977
        mc.set("subCategoryFilter",{3:mobData, 5:tabData, 6:accData}, 600)  
2978
 
2979
    return sorted(mc.get("subCategoryFilter").get(category_id), key = lambda x: (-x['count'], x['subCategory']))
17610 kshitij.so 2980
 
17727 kshitij.so 2981
def dummyLogin(data):
17731 kshitij.so 2982
    exist = list(get_mongo_connection().Catalog.DummyUser.find({'email':data['email'],'password':data['password']}))
17727 kshitij.so 2983
    if len(exist) > 0:
17728 kshitij.so 2984
        return {'user_id':exist[0]['_id'],'fullName':exist[0]['fullName']}
17727 kshitij.so 2985
    else:
2986
        return {'user_id':0}
17616 kshitij.so 2987
 
17727 kshitij.so 2988
def dummyRegister(data):
2989
    try:
2990
        exist = list(get_mongo_connection().Catalog.DummyUser.find({'email':data['email']}))
2991
        if len(exist) > 0:
2992
            return {'msg':"Email already registered",'user_id':0}
2993
        else:
2994
            max_id = list(get_mongo_connection().Catalog.DummyUser.find().sort([('_id',pymongo.DESCENDING)]).limit(1))
2995
            if len(max_id) ==0:
2996
                max_id = 0
2997
            else:
2998
                max_id = max_id[0]['_id']
2999
            data['_id'] = max_id +1
3000
            get_mongo_connection().Catalog.DummyUser.insert(data)
17728 kshitij.so 3001
            return {'msg':"Registration successful",'user_id':data['_id'],'fullName':data['fullName']}
17727 kshitij.so 3002
    except:
3003
        return {'msg':"Error in registration.",'user_id':0}
3004
 
17731 kshitij.so 3005
def getDummyUser(user_id):
3006
    exist = list(get_mongo_connection().Catalog.DummyUser.find({'_id':user_id}))
3007
    if len(exist) > 0:
3008
        return exist[0]
3009
    else:
3010
        return {'user_id':0,'fullName':"",'email':"","contactNumber":""}
3011
 
3012
def updateDummyUser(data):
3013
    try:
17732 kshitij.so 3014
        get_mongo_connection().Catalog.DummyUser.update({'_id':data['user_id']},{"$set":data},upsert=False)
17731 kshitij.so 3015
        return {'msg':"Data updated successfuly",'response':1}
3016
    except:
3017
        return {'msg':"Unable to update data",'response':0}
17936 kshitij.so 3018
 
18089 kshitij.so 3019
def getDealsForSearchText(subCategoryIds, searchTerm, offset, limit):
3020
    subCategories= [int(subCategoryId) for subCategoryId in subCategoryIds.split('^')]
18106 kshitij.so 3021
    print "SubCategories are ",subCategories
17936 kshitij.so 3022
    payload = {
18106 kshitij.so 3023
    "query": {
17936 kshitij.so 3024
        "bool": {
18106 kshitij.so 3025
            "must": [{
3026
                    "match": {
3027
                        "title": {
3028
                            "query": searchTerm,
3029
                            "operator": "and"
3030
                        }
17936 kshitij.so 3031
                    }
18106 kshitij.so 3032
                },
3033
 
3034
                {
3035
                    "in": {
3036
                        "subCategoryId": subCategories
3037
                    }
17936 kshitij.so 3038
                }
18106 kshitij.so 3039
 
3040
            ]
17936 kshitij.so 3041
        }
19135 kshitij.so 3042
    },
19580 kshitij.so 3043
    "sort": { "dealRankPoints": { "order": "desc" }}
18106 kshitij.so 3044
}
17944 kshitij.so 3045
    result =  get_elastic_search_connection().search(index="my_index", body=payload, from_=offset, size=limit)
17936 kshitij.so 3046
    totalCount= result['hits']['total']
3047
    temp = []
3048
    bundles = []
3049
    if len(result['hits']['hits']) > 0:
3050
        for x in result['hits']['hits']:
3051
            tempMap = {}
3052
            tempMap = {'skuBundleId':x['_source']['id'],'title':x['_source']['title']}
3053
            temp.append(tempMap)
3054
            bundles.append(x['_source']['id'])
18271 kshitij.so 3055
    #return temp
17936 kshitij.so 3056
    return getDealsForNotification(bundles, skipSplitting=True)
17731 kshitij.so 3057
 
18089 kshitij.so 3058
def getCountForSearchText(subCategoryIds, searchTerm):
3059
    subCategories= [int(subCategoryId) for subCategoryId in subCategoryIds.split('^')]
17936 kshitij.so 3060
    payload = {
18106 kshitij.so 3061
    "query": {
17936 kshitij.so 3062
        "bool": {
18106 kshitij.so 3063
            "must": [{
3064
                    "match": {
3065
                        "title": {
3066
                            "query": searchTerm,
3067
                            "operator": "and"
3068
                        }
17936 kshitij.so 3069
                    }
18106 kshitij.so 3070
                },
3071
 
3072
                {
3073
                    "in": {
3074
                        "subCategoryId": subCategories
3075
                    }
17936 kshitij.so 3076
                }
18106 kshitij.so 3077
 
3078
            ]
17936 kshitij.so 3079
        }
3080
    }
18106 kshitij.so 3081
}
17731 kshitij.so 3082
 
17944 kshitij.so 3083
    result =  get_elastic_search_connection().search(index="my_index", body=payload)
17936 kshitij.so 3084
    totalCount= result['hits']['total']
3085
    return {'searchTerm':searchTerm,'count':totalCount}
18271 kshitij.so 3086
 
3087
def getDealById(id):
3088
    item = list(get_mongo_connection().Catalog.MasterData.find({'_id':int(id)}))
3089
    d = get_mongo_connection().Catalog.Deals.find_one({'_id':int(id)})
19193 kshitij.so 3090
    if len(item) ==0:
3091
        return {}
18271 kshitij.so 3092
    if d is None:
3093
        d = {'showDp':0,'dp':0}
3094
    try:
3095
        cashBack = getCashBack(item[0]['_id'], item[0]['source_id'], item[0]['category_id'])
3096
        if not cashBack or cashBack.get('cash_back_status')!=1:
3097
            item[0]['cash_back_type'] = 0
3098
            item[0]['cash_back'] = 0
3099
        else:
3100
            if cashBack.get('maxCashBack') is not None:
3101
 
3102
                if cashBack.get('cash_back_type') ==1 and (float(cashBack.get('cash_back'))*item[0]['available_price'])/100 > cashBack.get('maxCashBack'):
3103
                    cashBack['cash_back_type'] = 2
3104
                    cashBack['cash_back'] = cashBack['maxCashBack']
3105
                elif cashBack.get('cash_back_type') ==2 and cashBack.get('cash_back') > cashBack.get('maxCashBack'):
3106
                    cashBack['cash_back'] = cashBack['maxCashBack']
17936 kshitij.so 3107
 
18271 kshitij.so 3108
            item[0]['cash_back_type'] = int(cashBack['cash_back_type'])
3109
            item[0]['cash_back'] = cashBack['cash_back']
3110
    except:
3111
        print "Error in adding cashback to deals"
3112
        item[0]['cash_back_type'] = 0
3113
        item[0]['cash_back'] = 0
3114
    try:
3115
        item[0]['dp'] = d['dp']
3116
        item[0]['showDp'] = d['showDp']
3117
    except:
3118
        item[0]['dp'] = 0.0
3119
        item[0]['showDp'] = 0
3120
    try:
3121
        item[0]['thumbnail'] = item[0]['thumbnail'].strip()
3122
    except:
3123
        pass
3124
 
3125
    try:
3126
        if item[0]['showVideo']==0:
3127
            item[0]['videoLink'] =""
3128
    except:
3129
        item[0]['videoLink'] =""
3130
    try:
3131
        if item[0]['quantity'] >1:
3132
            ppq = float(item[0]['available_price'])/item[0]['quantity']
3133
 
3134
            if ppq == round(ppq):
3135
                item[0]['ppq'] = int(ppq)
3136
            else:
3137
                item[0]['ppq'] = round(ppq,2)
3138
        else:
3139
            item[0]['ppq'] = 0
3140
    except:
3141
        item[0]['ppq'] = 0
3142
    if item[0]['category_id']!=6:
3143
        try:
18830 kshitij.so 3144
            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']))
3145
            item[0]['filterTextBrand'] = (item[0]['brand'])
18271 kshitij.so 3146
        except:
18830 kshitij.so 3147
            pass
18271 kshitij.so 3148
    else:
3149
        try:
3150
            if item[0]['subCategory']=='' or item[0]['subCategory'] is None or item[0]['subCategoryId']==0:
3151
                raise
18830 kshitij.so 3152
            item[0]['filterLinkSubCategory'] = '/category/'+str(int(item[0]['category_id']))+'?searchFor='+urllib.quote(item[0]['subCategory'])+'&filter=subcategory&subcategories='+str(int(item[0]['subCategoryId']))
3153
            item[0]['filterTextSubCategory'] = (item[0]['subCategory'])
3154
            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']))
3155
            item[0]['filterTextBrand'] = (item[0]['brand'])
18271 kshitij.so 3156
        except:
18830 kshitij.so 3157
            pass
18271 kshitij.so 3158
    try:
3159
        if item[0]['source_id']==4:
3160
            item_availability_info = mc.get("item_availability_"+str(item[0]['identifier']).strip())
3161
            if item_availability_info is None or len(item_availability_info)==0:
3162
                item[0]['availabilityInfo'] = [{}]
3163
            else:
3164
                item[0]['availabilityInfo'] = item_availability_info
3165
    except:
3166
        item[0]['availabilityInfo'] = [{}]
19193 kshitij.so 3167
 
3168
    if item[0]['source_id']==4:
3169
        for av_info in item[0]['availabilityInfo']:
3170
            if not av_info:
3171
                continue
3172
            av_info['cash_back'] = item[0]['cash_back']
3173
            av_info['cash_back_type'] = item[0]['cash_back_type']
3174
            netPriceAfterCashBack = av_info['sellingPrice'] 
19199 kshitij.so 3175
            if av_info['cash_back_type'] ==1:
19207 kshitij.so 3176
                netPriceAfterCashBack = av_info['sellingPrice'] - math.floor(float(av_info['sellingPrice'])*av_info['cash_back']/100)
19199 kshitij.so 3177
            elif av_info['cash_back_type'] ==2:
19207 kshitij.so 3178
                netPriceAfterCashBack = av_info['sellingPrice'] - math.floor(av_info['cash_back'])
19193 kshitij.so 3179
            else:
3180
                pass
3181
            av_info['netPriceAfterCashBack'] = netPriceAfterCashBack
3182
 
3183
    if item[0]['source_id'] != SOURCE_MAP.get("PAYTM.COM"):
3184
        if item[0]['codAvailable'] ==1:
3185
            paytmPrice = item[0]['available_price']
3186
        else:
3187
            paytmPrice = item[0]['gross_price']
3188
 
3189
        if item[0]['cash_back_type'] ==1:
19207 kshitij.so 3190
            item[0]['netPriceAfterCashBack'] = paytmPrice -  math.floor(float(paytmPrice)*item[0]['cash_back']/100)
19193 kshitij.so 3191
        elif item[0]['cash_back_type'] ==2:
19207 kshitij.so 3192
            item[0]['netPriceAfterCashBack'] = paytmPrice -  math.floor(item[0]['cash_back'])
19193 kshitij.so 3193
        else:
3194
            item[0]['netPriceAfterCashBack'] = paytmPrice
3195
 
3196
    else:
3197
        if item[0]['cash_back_type'] ==1:
19207 kshitij.so 3198
            item[0]['netPriceAfterCashBack'] = item[0]['available_price'] -  math.floor(float(item[0]['available_price'])*item[0]['cash_back']/100)
19193 kshitij.so 3199
        elif item[0]['cash_back_type'] ==2:
19207 kshitij.so 3200
            item[0]['netPriceAfterCashBack'] = item[0]['available_price'] -  math.floor(item[0]['cash_back'])
19193 kshitij.so 3201
        else:
3202
            item[0]['netPriceAfterCashBack'] = item[0]['available_price']
3203
 
18271 kshitij.so 3204
    return item[0]
3205
 
19288 kshitij.so 3206
def getOfferForUser(userId):
3207
    specialOffer = {}
3208
    promoOffer = get_mongo_connection().Catalog.PromoOffer.find_one({'user_id':userId})
3209
    try:
3210
        if promoOffer is not None:
3211
            offer = get_mongo_connection().Catalog.Promotions.find_one({'_id':promoOffer.get('offer_id')})
3212
            if offer is None:
3213
                raise
19355 kshitij.so 3214
            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 3215
                     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 3216
                     promoOffer.get('pending_order_value'), promoOffer.get('delivered_order_value'), promoOffer.get('last_run_timestamp'))
19354 kshitij.so 3217
 
19355 kshitij.so 3218
            promo.offer_description = "Get upto %d%% cashback"%(promo.target2_cash_back_percetage)
3219
 
19288 kshitij.so 3220
            specialOffer = promo.__dict__
3221
    except:
3222
        pass
3223
    return specialOffer
3224
 
19389 kshitij.so 3225
def getBrandSubCategoryInfo(category_id, id_list, type):
19402 kshitij.so 3226
    try:
3227
        id_list_mapping = {}
3228
        if type == "brandInfo":
3229
            brands = [int(brand_id) for brand_id in id_list.split('^')]
3230
            for brand in brands:
3231
                tm_brand = get_mongo_connection().Catalog.Deals.find_one({'brand_id':brand},{'brand':1})
3232
                id_list_mapping[brand] = tm_brand.get('brand')
3233
        elif type == "subCategoryInfo":
3234
            subCategories = [int(subCategoryId) for subCategoryId in id_list.split('^')]
3235
            for subCat in subCategories:
3236
                id_list_mapping[subCat] = SUB_CATEGORY_MAP.get(subCat)
3237
        else:
3238
            return {}
19389 kshitij.so 3239
 
19402 kshitij.so 3240
        if mc.get("brandSubCategoryInfo") is None:
3241
            collection =  get_mongo_connection().Catalog.Deals
3242
            result = collection.aggregate( 
3243
                    [
3244
                        {'$match':{'category_id':category_id,'showDeal':1}},
3245
                        {"$group": { "_id": { "subCategoryId": "$subCategoryId", "brand_id": "$brand_id", "brand":"$brand","subCategory":"$subCategory" }, "count": {"$sum": 1} } }
3246
                    ]
3247
                );
3248
            #from pprint import pprint
3249
            #pprint(result)
3250
 
3251
            subCategoryMap = {}
3252
            brandMap = {}
3253
 
3254
            for data in result['result']:
3255
                result_set = data['_id']
3256
                count = data['count']
3257
                subCategoryId = result_set['subCategoryId']
3258
                brand_id = result_set['brand_id']
3259
                subCategory = result_set['subCategory']
3260
                brand = result_set['brand']
3261
 
3262
                if subCategoryMap.has_key(subCategoryId):
3263
                    subCategoryMap.get(subCategoryId).append({'brand_id':brand_id, 'count':count, 'subCategory':subCategory, 'brand':brand})
3264
                else:
3265
                    subCategoryMap[subCategoryId] = [{'brand_id':brand_id, 'count':count, 'subCategory':subCategory, 'brand':brand}]
3266
 
3267
                if brandMap.has_key(brand_id):
3268
                    brandMap.get(brand_id).append({'subCategoryId':subCategoryId, 'count':count, 'subCategory':subCategory, 'brand':brand})
3269
                else:
3270
                    brandMap[brand_id] = [{'subCategoryId':subCategoryId, 'count':count, 'subCategory':subCategory, 'brand':brand}]
3271
 
3272
            mc.set("brandSubCategoryInfo",{'subCategoryMap':subCategoryMap, 'brandMap': brandMap}, 600)
19389 kshitij.so 3273
 
19402 kshitij.so 3274
 
3275
        returnMap = {}    
3276
        brandSubCategoryInfo = mc.get("brandSubCategoryInfo")
3277
        if brandSubCategoryInfo is None:
3278
            return {'idListInfo':id_list_mapping,'result':[]}
3279
 
3280
        if type == "subCategoryInfo":
3281
            if brandSubCategoryInfo.get('subCategoryMap') is None:
3282
                return {'idListInfo':id_list_mapping,'result':[]}
3283
            subCategories = [int(subCategoryId) for subCategoryId in id_list.split('^')]
3284
            subCategoryMap = brandSubCategoryInfo.get('subCategoryMap')
3285
            for subCategory in subCategories:
3286
                tempList = subCategoryMap.get(subCategory)
3287
                print tempList
3288
                if tempList is None:
3289
                    continue
3290
                for v in tempList:
3291
                    if returnMap.has_key(v['brand_id']):
3292
                        existing = returnMap.get(v['brand_id'])
3293
                        existing['count'] = existing['count'] + v['count'] 
3294
                    else:
3295
                        returnMap[v['brand_id']] = {'brand_id':v['brand_id'],'brand':v['brand'],'count':v['count']}
19389 kshitij.so 3296
 
19402 kshitij.so 3297
 
3298
        elif type == "brandInfo":
3299
            if brandSubCategoryInfo.get('brandMap') is None:
3300
                return {'idListInfo':id_list_mapping,'result':[]}
3301
            brands = [int(brand_id) for brand_id in id_list.split('^')]
3302
            brandMap = brandSubCategoryInfo.get('brandMap')
3303
            for brand_id in brands:
3304
                tempList = brandMap.get(brand_id)
3305
                print tempList
3306
                if tempList is None:
3307
                    continue
3308
                for v in tempList:
3309
                    if returnMap.has_key(v['subCategoryId']):
3310
                        existing = returnMap.get(v['subCategoryId'])
3311
                        existing['count'] = existing['count'] + v['count'] 
3312
                    else:
3313
                        returnMap[v['subCategoryId']] = {'subCategoryId':v['subCategoryId'],'subCategory':v['subCategory'],'count':v['count']}
19389 kshitij.so 3314
 
19402 kshitij.so 3315
        return {'idListInfo':id_list_mapping,'result':returnMap.values()}
3316
    except:
3317
        traceback.print_exc()
3318
        return {}
19389 kshitij.so 3319
 
19451 manas 3320
def refundAmountInWallet(jsonReq):
3321
    userId = int(jsonReq.get('user_id'))
3322
    emailId = jsonReq.get('email_id')
3323
    amount = int(jsonReq.get('amount'))
3324
    store = jsonReq.get('store')
3325
    refundType = jsonReq.get('type')
3326
    mobileNumber = jsonReq.get('mobile')
3327
    referenceId = jsonReq.get('reference_no')
3328
    referenceDescription = jsonReq.get('reference_description')
19514 manas 3329
    if not store:
19456 manas 3330
        store = None
19514 manas 3331
    else:
19517 manas 3332
        store = store
19451 manas 3333
    if lower(refundType)=='refund':
19511 manas 3334
        refundType = CREDIT_TYPE_REFUND
19451 manas 3335
    elif lower(refundType)=='adjustment':
19511 manas 3336
        refundType = CREDIT_TYPE_ADJUSTMENT
19451 manas 3337
    collection = get_mongo_connection().Dtr.crmrefundwallet
19511 manas 3338
    offer1 = CrmRefundWallet(userId,emailId,mobileNumber,amount,refundType,store,referenceId,referenceDescription,REFUND_ADJUSTMENT_MAP.get(0),to_java_date(datetime.now()))    
19451 manas 3339
    dict1 = todict(offer1)
3340
    collection.save(dict1)
3341
    return True
3342
 
19497 manas 3343
def updateCrmWalletStatus(status,_id,userId,batchId,approvedBy):
19482 manas 3344
    if batchId is None:
3345
        get_mongo_connection().Dtr.crmrefundwallet.update({'_id':ObjectId(_id),},{"$set":{"status":status,"update_timestamp":to_java_date(datetime.now())}})
3346
    else:
20340 amit.gupta 3347
        #Batch id should be none to ensure that it does not get override
3348
        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 3349
 
19451 manas 3350
def fetchCrmRefundUsers(status,offset,limit):
19529 manas 3351
    if status is not None:
3352
        cursor = list(get_mongo_connection().Dtr.crmrefundwallet.find({"status":status}).skip(offset).limit(limit).sort("created_timestamp",-1))
3353
    else:
3354
        cursor = list(get_mongo_connection().Dtr.crmrefundwallet.find().skip(offset).limit(limit).sort("created_timestamp",-1))
19451 manas 3355
    return cursor
3356
 
19485 manas 3357
def fetchCrmRefundByBatchId(batchId):
19493 manas 3358
    cursor = get_mongo_connection().Dtr.crmrefundwallet.find_one({"batchId":int(batchId)})
19485 manas 3359
    return cursor
3360
 
19577 manas 3361
def userLookUpForSaholicId(userId):
3362
    result = None
3363
    try:
3364
        response = session.query(user_accounts.account_key).filter_by(user_id=userId).filter(user_accounts.account_type=='saholic').first()
3365
        if response is None:
3366
            result = 'User Not present in profitmandi'
3367
        else:
3368
            result = response[0]
3369
    except:
3370
        result = 'User Not present in profitmandi'
3371
        traceback.print_exc()
3372
    finally:
3373
        session.close()
3374
    return result
19453 manas 3375
 
19880 naman 3376
 
3377
def getAllItemCasback(itemcashback_id,offset,limit):
3378
    itemcashbackcon = get_mongo_connection().Catalog.ItemCashBack
20435 kshitij.so 3379
    masterData = get_mongo_connection().Catalog.MasterData
19880 naman 3380
    if itemcashback_id is None: 
20435 kshitij.so 3381
        response = []
3382
        response_cash_back = list(itemcashbackcon.find().skip(offset).limit(limit))
3383
        for r in response_cash_back:
3384
            master = masterData.find_one({'_id':r['sku']})
20436 kshitij.so 3385
            r['source'] = SOURCE_MAP.get(master['source_id'])
3386
            r['product_name'] = master['product_name']
3387
            response.append(r)
19880 naman 3388
    else:
20439 kshitij.so 3389
        response = itemcashbackcon.find_one({'_id' : ObjectId(itemcashback_id)})
20435 kshitij.so 3390
        master = masterData.find_one({'_id':response['sku']})
3391
        response['source'] = SOURCE_MAP.get(master['source_id'])
3392
        response['product_name'] = master['product_name']
19880 naman 3393
    return response
3394
 
3395
def itemCashbackAdd(item_skuId,cb,cb_description,cb_type,cb_status):
3396
    itemcashbackcon = get_mongo_connection().Catalog.ItemCashBack
3397
    response = list(itemcashbackcon.find({'sku':item_skuId}))
3398
 
3399
    if len(response) ==  0:
3400
        itemcashbackcon.insert({'sku':item_skuId,'cash_back_description':cb_description,'cash_back':cb,'cash_back_type':cb_type,'cash_back_status': cb_status})
3401
        return True     
3402
 
3403
 
19654 kshitij.so 3404
def getHeaderLinks(category_id):
3405
    result = {}
3406
    if category_id == 6:
3407
        rank = 1
3408
        for subCat in SUB_CATEGORY_HEADER_RANKING:
3409
            result[rank] = {'subCategoryId':subCat,'subCategory':SUB_CATEGORY_MAP.get(subCat)}
3410
            rank = rank + 1
3411
    return result.values()
3412
 
19896 kshitij.so 3413
def getDealsByType(category_id, offset, limit, type):
3414
    dealListMap = []
3415
    if type == 'exclusive':
3416
        exclusive_deals = mc.get("exclusive_deals_"+str(category_id))
3417
        if exclusive_deals is None:
3418
            print "Populating exclusive_deals for ",category_id
20690 amit.gupta 3419
            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 3420
            mc.set("exclusive_deals_"+str(category_id), exclusive_deals)
3421
 
19902 kshitij.so 3422
        for d in exclusive_deals[offset:limit+offset]:
19896 kshitij.so 3423
            item = list(get_mongo_connection().Catalog.MasterData.find({'_id':d['_id']}))
3424
            if len(item) ==0:
3425
                continue 
3426
            try:
3427
                cashBack = getCashBack(item[0]['_id'], item[0]['source_id'], item[0]['category_id'])
3428
                if not cashBack or cashBack.get('cash_back_status')!=1:
3429
                    item[0]['cash_back_type'] = 0
3430
                    item[0]['cash_back'] = 0
3431
                else:
3432
                    if cashBack.get('maxCashBack') is not None:
3433
 
3434
                        if cashBack.get('cash_back_type') ==1 and (float(cashBack.get('cash_back'))*item[0]['available_price'])/100 > cashBack.get('maxCashBack'):
3435
                            cashBack['cash_back_type'] = 2
3436
                            cashBack['cash_back'] = cashBack['maxCashBack']
3437
                        elif cashBack.get('cash_back_type') ==2 and cashBack.get('cash_back') > cashBack.get('maxCashBack'):
3438
                            cashBack['cash_back'] = cashBack['maxCashBack']
3439
 
3440
                    item[0]['cash_back_type'] = int(cashBack['cash_back_type'])
3441
                    item[0]['cash_back'] = cashBack['cash_back']
3442
            except:
3443
                print "Error in adding cashback to deals"
3444
                item[0]['cash_back_type'] = 0
3445
                item[0]['cash_back'] = 0
3446
            try:
3447
                item[0]['dp'] = d['dp']
3448
                item[0]['showDp'] = d['showDp']
3449
            except:
3450
                item[0]['dp'] = 0.0
3451
                item[0]['showDp'] = 0
3452
            try:
3453
                item[0]['thumbnail'] = item[0]['thumbnail'].strip()
3454
            except:
3455
                pass
3456
 
3457
            try:
3458
                if item[0]['showVideo']==0:
3459
                    item[0]['videoLink'] =""
3460
            except:
3461
                item[0]['videoLink'] =""
3462
            try:
3463
                if item[0]['quantity'] >1:
3464
                    ppq = float(item[0]['available_price'])/item[0]['quantity']
3465
 
3466
                    if ppq == round(ppq):
3467
                        item[0]['ppq'] = int(ppq)
3468
                    else:
3469
                        item[0]['ppq'] = round(ppq,2)
3470
                else:
3471
                    item[0]['ppq'] = 0
3472
            except:
3473
                item[0]['ppq'] = 0
3474
            try:
3475
                if item[0]['source_id']==4:
3476
                    item_availability_info = mc.get("item_availability_"+str(item[0]['identifier']).strip())
3477
                    if item_availability_info is None or len(item_availability_info)==0:
3478
                        item[0]['availabilityInfo'] = [{}]
3479
                    else:
3480
                        item[0]['availabilityInfo'] = item_availability_info
3481
            except:
3482
                item[0]['availabilityInfo'] = [{}]
3483
 
3484
            if item[0]['source_id']==4:
3485
                for av_info in item[0]['availabilityInfo']:
3486
                    if not av_info:
3487
                        continue
3488
                    av_info['cash_back'] = item[0]['cash_back']
3489
                    av_info['cash_back_type'] = item[0]['cash_back_type']
3490
                    netPriceAfterCashBack = av_info['sellingPrice'] 
3491
                    if av_info['cash_back_type'] ==1:
3492
                        netPriceAfterCashBack = av_info['sellingPrice'] - math.floor(float(av_info['sellingPrice'])*av_info['cash_back']/100)
3493
                    elif av_info['cash_back_type'] ==2:
3494
                        netPriceAfterCashBack = av_info['sellingPrice'] - math.floor(av_info['cash_back'])
3495
                    else:
3496
                        pass
3497
                    av_info['netPriceAfterCashBack'] = netPriceAfterCashBack
3498
 
3499
            if item[0]['cash_back_type'] ==1:
3500
                item[0]['netPriceAfterCashBack'] = item[0]['available_price'] -  math.floor(float(item[0]['available_price'])*item[0]['cash_back']/100)
3501
            elif item[0]['cash_back_type'] ==2:
3502
                item[0]['netPriceAfterCashBack'] = item[0]['available_price'] -  math.floor(item[0]['cash_back'])
3503
            else:
3504
                item[0]['netPriceAfterCashBack'] = item[0]['available_price']         
3505
            dealListMap.append([item[0]])
3506
    return dealListMap
3507
 
3508
 
3509
 
13572 kshitij.so 3510
def main():
20696 amit.gupta 3511
    #print getAccesoryDeals(47, 6, 0, 20, None, None, None)
3512
    getCashBackDetails('1204769399', 3)
17944 kshitij.so 3513
 
20011 kshitij.so 3514
 
13572 kshitij.so 3515
if __name__=='__main__':
19512 kshitij.so 3516
    main()
3517
 
3518