Subversion Repositories SmartDukaan

Rev

Rev 22258 | Rev 22262 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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