Subversion Repositories SmartDukaan

Rev

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