Subversion Repositories SmartDukaan

Rev

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