Subversion Repositories SmartDukaan

Rev

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