Subversion Repositories SmartDukaan

Rev

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