Subversion Repositories SmartDukaan

Rev

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

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