Subversion Repositories SmartDukaan

Rev

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