Subversion Repositories SmartDukaan

Rev

Rev 19288 | Rev 19320 | 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
19288 kshitij.so 4
from dtr.dao import FeaturedDeals, AppTransactions, AppOfferObj, Promotion
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
 
19288 kshitij.so 625
    specialOffer = None
626
    promoOffer = get_mongo_connection().Catalog.PromoOffer.find_one({'user_id':userId})
627
    try:
628
        if promoOffer is not None:
629
            offer = get_mongo_connection().Catalog.Promotions.find_one({'_id':promoOffer.get('offer_id')})
630
            if offer is None:
631
                raise
632
            promo = Promotion(offer.get('offer_id'),offer.get('offer_name'),offer.get('offer_description') , offer.get('categories_applicable'), offer.get('sub_categories_not_applicable'),
633
                     offer.get('startDate'), offer.get('endDate'), promoOffer.get('target1'), promoOffer.get('target1_cash_back_percetage'), promoOffer.get('target2'), promoOffer.get('target2_cash_back_percetage'), promoOffer.get('maxCashBack'),offer.get('url'))
17469 kshitij.so 634
 
19288 kshitij.so 635
            specialOffer = promo
636
    except:
637
        pass
638
 
639
 
640
    mem_cache_val = {3:mobile_deals, 5:tablet_deals, 6: accessories_deals,"3_rankMap": rankMapMobiles,"5_rankMap": rankMapTablets,"6_rankMap": rankMapAccessories, "specialOffer":specialOffer }
14037 kshitij.so 641
    mc.set(str(userId), mem_cache_val)
642
 
643
 
14531 kshitij.so 644
def __populateFeaturedDeals():
17367 kshitij.so 645
    print "Populating featured deals....."
646
    featuredDealsMobiles = {}
647
    featuredDealsTablets = {}
17469 kshitij.so 648
    featuredDealsAccessories = {}
17618 kshitij.so 649
    activeFeaturedDeals = get_mongo_connection().Catalog.FeaturedDeals.find({'startDate':{'$lte':to_java_date(datetime.now())},'endDate':{'$gte':to_java_date(datetime.now())}})
14531 kshitij.so 650
    for activeFeaturedDeal in activeFeaturedDeals:
17367 kshitij.so 651
        deals = get_mongo_connection().Catalog.Deals.find({"skuBundleId":activeFeaturedDeal.get('skuBundleId'),"$or":[{"showDeal":1}, {"prepaidDeal":1}]})
652
        for deal in deals:
653
            if deal.get('available_price') <= activeFeaturedDeal.get('thresholdPrice'):
17469 kshitij.so 654
                for category_id, rank  in activeFeaturedDeal['otherInfo'].iteritems():
655
                    f_deal = {'skuBundleId':activeFeaturedDeal.get('skuBundleId'), 'thresholdPrice':activeFeaturedDeal.get('thresholdPrice'), 'rank':rank,'category_id':int(category_id),'totalPoints':activeFeaturedDeal.get('totalPoints')}
656
                    if f_deal['category_id'] == 3:
657
                        featuredDealsMobiles[rank] = f_deal
658
                    elif f_deal['category_id']==5:
659
                        featuredDealsTablets[rank] = f_deal
660
                    elif f_deal['category_id']==6:
661
                        featuredDealsAccessories[rank] = f_deal
17367 kshitij.so 662
                break
17469 kshitij.so 663
 
664
#                f_deal = {'skuBundleId':activeFeaturedDeal.get('skuBundleId'), 'thresholdPrice':activeFeaturedDeal.get('thresholdPrice'), 'rank':activeFeaturedDeal.get('rank'),'category_id':activeFeaturedDeal.get('category_id'),'totalPoints':activeFeaturedDeal.get('totalPoints')}
665
#                 if activeFeaturedDeal.get('category_id') == 3:
666
#                     featuredDealsMobiles[activeFeaturedDeal.get('rank')] = f_deal
667
#                 else:
668
#                     featuredDealsTablets[activeFeaturedDeal.get('rank')] = f_deal
669
#                 break
670
 
17367 kshitij.so 671
 
17469 kshitij.so 672
    mc.set("featured_deals", {3:featuredDealsMobiles,5:featuredDealsTablets,6:featuredDealsAccessories}, 600)
14037 kshitij.so 673
 
17618 kshitij.so 674
def __populateFeaturedDealsForDealObject():
675
    print "Caching deal objects...."
676
    featuredDealObjectMobiles = {}
677
    featuredDealObjectTablets = {}
678
    featuredDealObjectAccessories = {}
679
    dealObjects = get_mongo_connection().Catalog.FeaturedDealsDealObject.find({'startDate':{'$lte':to_java_date(datetime.now())},'endDate':{'$gte':to_java_date(datetime.now())}})
680
    for dealObject in dealObjects:
681
        d_object = list(get_mongo_connection().Catalog.DealObject.find({'_id':dealObject['_id']}))
682
        if len(d_object) == 0:
683
            continue
684
        for category_id, rank  in dealObject['otherInfo'].iteritems():
685
            d_object[0]['dealObject'] = 1
19288 kshitij.so 686
            f_deal = {'rank':rank,'category_id':int(category_id),'object':d_object[0],'offer_id':dealObject.get('offer_id')}
17618 kshitij.so 687
            if f_deal['category_id'] == 3:
688
                featuredDealObjectMobiles[rank] = f_deal
689
            elif f_deal['category_id']==5:
690
                featuredDealObjectTablets[rank] = f_deal
691
            elif f_deal['category_id']==6:
692
                featuredDealObjectAccessories[rank] = f_deal
693
    mc.set("featured_deals_deal_object", {3:featuredDealObjectMobiles,5:featuredDealObjectTablets,6:featuredDealObjectAccessories}, 600)
17619 kshitij.so 694
    print mc.get('featured_deals_deal_object')
17618 kshitij.so 695
 
14791 kshitij.so 696
def getNewDeals(userId, category_id, offset, limit, sort, direction, filterData=None):
17469 kshitij.so 697
    if mc.get("category_cash_back") is None or not bool(mc.get("category_cash_back")):
13921 kshitij.so 698
        populateCashBack()
14037 kshitij.so 699
 
16079 kshitij.so 700
    dealsListMap = []
14037 kshitij.so 701
    user_specific_deals = mc.get(str(userId))
702
    if user_specific_deals is None:
703
        __populateCache(userId)
704
        user_specific_deals = mc.get(str(userId))
14038 kshitij.so 705
    else:
706
        print "Getting user deals from cache"
14037 kshitij.so 707
    category_specific_deals = user_specific_deals.get(category_id)
708
 
17367 kshitij.so 709
    insert_featured_deals = False
14037 kshitij.so 710
    if sort is None or direction is None:
17367 kshitij.so 711
        insert_featured_deals = True
712
        rankMap = user_specific_deals.get(str(category_id)+"_rankMap")
14037 kshitij.so 713
    else:
714
        if sort == "bestSellerPoints":
715
            sorted_deals = sorted(category_specific_deals, key = lambda x: (x['bestSellerPoints'], x['rank'], x['nlcPoints']),reverse=True)
716
        else:
717
            if direction == -1:
718
                rev = True
719
            else:
720
                rev = False
721
            sorted_deals = sorted(category_specific_deals, key = lambda x: (x['available_price']),reverse=rev)
722
 
14791 kshitij.so 723
 
17367 kshitij.so 724
    filtered_deals = []
17668 kshitij.so 725
    dataExist = True
14791 kshitij.so 726
    if filterData is not None:
727
        try:
17669 kshitij.so 728
            filtered_deals = filterDeals(category_specific_deals, filterData)
729
            if len(filtered_deals)==0:
730
                dataExist = False
14791 kshitij.so 731
        except:
16067 kshitij.so 732
            traceback.print_exc()
17668 kshitij.so 733
    if dataExist:
14791 kshitij.so 734
 
17668 kshitij.so 735
        if not insert_featured_deals:
736
            sortedMap = {}
737
            rankMap = {}
738
            rank = 0
739
            for sorted_deal in sorted_deals:
740
 
741
                if len(filtered_deals) > 0 and  sorted_deal['skuBundleId'] not in filtered_deals:
742
                    continue
743
 
744
                if sortedMap.get(sorted_deal['skuBundleId']) is None:
745
                    sortedMap[sorted_deal['skuBundleId']] = {rank:[sorted_deal]}
746
                    rankMap[rank] = (sortedMap[sorted_deal['skuBundleId']].values())[0]
747
                    rank = rank +1
748
                else:
749
                    for temp_list in sortedMap.get(sorted_deal['skuBundleId']).itervalues():
750
                        temp_list.append(sorted_deal)
751
                    rankMap[(sortedMap.get(sorted_deal['skuBundleId']).keys())[0]] = temp_list
752
        else:
753
            filterMap = {}
754
            rank = 0
755
            if len(filtered_deals) > 0:
756
                try:
757
                    od = collections.OrderedDict(sorted(rankMap.items()))
758
                except:
759
                    od = ordereddict.OrderedDict(sorted(rankMap.items()))
760
                for k, v in od.iteritems():
761
                    if v[0].get('skuBundleId') in filtered_deals:
762
                        filterMap[rank] = v
763
                        rank =rank+1
764
                rankMap = filterMap
765
 
766
        rankCounter = offset
767
        if filterData is None:
768
            if mc.get("featured_deals_deal_object") is None or not bool(mc.get("featured_deals_deal_object")):
769
                try:
770
                    __populateFeaturedDealsForDealObject()
771
                    fd_dealObject = mc.get("featured_deals_deal_object")
772
                except:
773
                    fd_dealObject = {3:{},5:{},6:{}}
17367 kshitij.so 774
            else:
17668 kshitij.so 775
                fd_dealObject = mc.get("featured_deals_deal_object")
776
 
17367 kshitij.so 777
    else:
17668 kshitij.so 778
        rankMap = {}
17618 kshitij.so 779
 
19288 kshitij.so 780
 
781
    specialOffer = user_specific_deals.get('specialOffer')
782
 
17627 kshitij.so 783
    for dealList in [rankMap.get(k, []) for k in range(offset, offset+limit)]:
17629 kshitij.so 784
        if filterData is None:
17627 kshitij.so 785
            while(True):
786
 
787
                rankCounter = rankCounter+1
788
                if (fd_dealObject.get(category_id).get(rankCounter)) is not None:
19288 kshitij.so 789
                    if (fd_dealObject.get(category_id).get(rankCounter).get('offer_id') !=0):
790
                        #Check whether user can see offer
791
                        if specialOffer is None:
792
                            continue
17627 kshitij.so 793
                    deal_object_temp = []
794
                    deal_object_temp.append(fd_dealObject.get(category_id).get(rankCounter).get('object'))
795
                    dealsListMap.append(deal_object_temp)
796
                else:
797
                    break
17620 kshitij.so 798
 
16079 kshitij.so 799
        temp = []
17367 kshitij.so 800
        if dealList is None or len(dealList)==0:
801
            continue
16067 kshitij.so 802
        for d in dealList:
803
            item = list(get_mongo_connection().Catalog.MasterData.find({'_id':d['_id']}))
16320 kshitij.so 804
            if len(item) ==0:
805
                continue
16079 kshitij.so 806
            item[0]['persPoints'] = d['persPoints']
807
            if d['dealType'] == 1 and d['source_id'] ==1:
16511 kshitij.so 808
                try:
809
                    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())}}))
810
                    item[0]['marketPlaceUrl'] = manualDeal[0]['dealUrl'].strip()
811
                except:
812
                    pass
16079 kshitij.so 813
            elif d['source_id'] ==3:
814
                item[0]['marketPlaceUrl'] = item[0]['marketPlaceUrl']+'?supc='+item[0].get('identifier')
815
            else:
816
                pass 
817
            try:
818
                cashBack = getCashBack(item[0]['_id'], item[0]['source_id'], item[0]['category_id'])
819
                if not cashBack or cashBack.get('cash_back_status')!=1:
14037 kshitij.so 820
                    item[0]['cash_back_type'] = 0
821
                    item[0]['cash_back'] = 0
16079 kshitij.so 822
                else:
17180 kshitij.so 823
                    if cashBack.get('maxCashBack') is not None:
824
 
825
                        if cashBack.get('cash_back_type') ==1 and (float(cashBack.get('cash_back'))*item[0]['available_price'])/100 > cashBack.get('maxCashBack'):
826
                            cashBack['cash_back_type'] = 2
827
                            cashBack['cash_back'] = cashBack['maxCashBack']
828
                        elif cashBack.get('cash_back_type') ==2 and cashBack.get('cash_back') > cashBack.get('maxCashBack'):
829
                            cashBack['cash_back'] = cashBack['maxCashBack']
830
 
16079 kshitij.so 831
                    item[0]['cash_back_type'] = int(cashBack['cash_back_type'])
832
                    item[0]['cash_back'] = cashBack['cash_back']
833
            except:
834
                print "Error in adding cashback to deals"
835
                item[0]['cash_back_type'] = 0
836
                item[0]['cash_back'] = 0
16252 kshitij.so 837
            try:
838
                item[0]['dp'] = d['dp']
839
                item[0]['showDp'] = d['showDp']
840
            except:
841
                item[0]['dp'] = 0.0
842
                item[0]['showDp'] = 0
16483 kshitij.so 843
            try:
844
                item[0]['thumbnail'] = item[0]['thumbnail'].strip()
845
            except:
17115 manish.sha 846
                pass
17603 kshitij.so 847
 
848
            try:
849
                if item[0]['showVideo']==0:
850
                    item[0]['videoLink'] =""
851
            except:
852
                item[0]['videoLink'] =""
17937 kshitij.so 853
            try:
854
                if item[0]['quantity'] >1:
855
                    ppq = float(item[0]['available_price'])/item[0]['quantity']
856
 
857
                    if ppq == round(ppq):
858
                        item[0]['ppq'] = int(ppq)
859
                    else:
860
                        item[0]['ppq'] = round(ppq,2)
861
                else:
862
                    item[0]['ppq'] = 0
863
            except:
864
                item[0]['ppq'] = 0
17627 kshitij.so 865
            if filterData is None:
17679 kshitij.so 866
                if item[0]['category_id']!=6:
867
                    try:
18830 kshitij.so 868
                        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']))
869
                        item[0]['filterTextBrand'] = (item[0]['brand'])
17679 kshitij.so 870
                    except:
18830 kshitij.so 871
                        pass
17679 kshitij.so 872
                else:
873
                    try:
17756 kshitij.so 874
                        if item[0]['subCategory']=='' or item[0]['subCategory'] is None or item[0]['subCategoryId']==0:
17679 kshitij.so 875
                            raise
18830 kshitij.so 876
                        item[0]['filterLinkSubCategory'] = '/category/'+str(int(item[0]['category_id']))+'?searchFor='+urllib.quote(item[0]['subCategory'])+'&filter=subcategory&subcategories='+str(int(item[0]['subCategoryId']))
877
                        item[0]['filterTextSubCategory'] = (item[0]['subCategory'])
878
                        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']))
879
                        item[0]['filterTextBrand'] = (item[0]['brand'])
17679 kshitij.so 880
                    except:
18830 kshitij.so 881
                        pass
17771 kshitij.so 882
            try:
883
                if item[0]['source_id']==4:
884
                    item_availability_info = mc.get("item_availability_"+str(item[0]['identifier']).strip())
885
                    if item_availability_info is None or len(item_availability_info)==0:
886
                        item[0]['availabilityInfo'] = [{}]
887
                    else:
888
                        item[0]['availabilityInfo'] = item_availability_info
889
            except:
890
                item[0]['availabilityInfo'] = [{}]
19193 kshitij.so 891
 
892
            if item[0]['source_id']==4:
893
                for av_info in item[0]['availabilityInfo']:
894
                    if not av_info:
895
                        continue
896
                    av_info['cash_back'] = item[0]['cash_back']
897
                    av_info['cash_back_type'] = item[0]['cash_back_type']
898
                    netPriceAfterCashBack = av_info['sellingPrice'] 
19199 kshitij.so 899
                    if av_info['cash_back_type'] ==1:
19207 kshitij.so 900
                        netPriceAfterCashBack = av_info['sellingPrice'] - math.floor(float(av_info['sellingPrice'])*av_info['cash_back']/100)
19199 kshitij.so 901
                    elif av_info['cash_back_type'] ==2:
19207 kshitij.so 902
                        netPriceAfterCashBack = av_info['sellingPrice'] - math.floor(av_info['cash_back'])
19193 kshitij.so 903
                    else:
904
                        pass
905
                    av_info['netPriceAfterCashBack'] = netPriceAfterCashBack
906
 
907
            #item[0]['netPriceAfterCashBack'] = d['netPriceAfterCashBack']
908
 
909
            if item[0]['source_id'] != SOURCE_MAP.get("PAYTM.COM"):
910
                if item[0]['codAvailable'] ==1:
911
                    paytmPrice = item[0]['available_price']
912
                else:
913
                    paytmPrice = item[0]['gross_price']
914
 
915
                if item[0]['cash_back_type'] ==1:
19207 kshitij.so 916
                    item[0]['netPriceAfterCashBack'] = paytmPrice -  math.floor(float(paytmPrice)*item[0]['cash_back']/100)
19193 kshitij.so 917
                elif item[0]['cash_back_type'] ==2:
19207 kshitij.so 918
                    item[0]['netPriceAfterCashBack'] = paytmPrice -  math.floor(item[0]['cash_back'])
19193 kshitij.so 919
                else:
920
                    item[0]['netPriceAfterCashBack'] = paytmPrice
921
 
922
            else:
923
                if item[0]['cash_back_type'] ==1:
19207 kshitij.so 924
                    item[0]['netPriceAfterCashBack'] = item[0]['available_price'] -  math.floor(float(item[0]['available_price'])*item[0]['cash_back']/100)
19193 kshitij.so 925
                elif item[0]['cash_back_type'] ==2:
19207 kshitij.so 926
                    item[0]['netPriceAfterCashBack'] = item[0]['available_price'] -  math.floor(item[0]['cash_back'])
19193 kshitij.so 927
                else:
928
                    item[0]['netPriceAfterCashBack'] = item[0]['available_price']
929
 
19292 kshitij.so 930
            if specialOffer is not None and item[0]['source_id']==4:
19288 kshitij.so 931
                if item[0]['category_id'] in specialOffer.categories_applicable and item[0]['subCategoryId'] not in specialOffer.sub_categories_not_applicable:
932
                    item[0]['specialOffer'] = specialOffer.__dict__
933
            else:
934
                item[0]['specialOffer'] = {}
935
 
16079 kshitij.so 936
            temp.append(item[0])
16125 kshitij.so 937
        if len(temp) > 1:
16126 kshitij.so 938
            temp = sorted(temp, key = lambda x: (x['available_price']),reverse=False)
16079 kshitij.so 939
        dealsListMap.append(temp)
940
    return dealsListMap
14037 kshitij.so 941
 
14791 kshitij.so 942
def filterDeals(deals, filterData):
17658 kshitij.so 943
    print "Filter data ", filterData
14791 kshitij.so 944
    brandsFiltered = []
17657 kshitij.so 945
    subCategoryFiltered = []
14791 kshitij.so 946
    filterArray = filterData.split('|')
947
    for data in filterArray:
948
        try:
949
            filter, info = data.split(':')
950
        except Exception as ex:
951
            traceback.print_exc()
952
            continue
17657 kshitij.so 953
        if filter == 'brandFilter':
14791 kshitij.so 954
            toFilter = info.split('^')
955
            print "brand filter ",toFilter
956
            for deal in deals:
15151 kshitij.so 957
                if str(int(deal['brand_id'])) in toFilter:
14791 kshitij.so 958
                    brandsFiltered.append(deal)
17657 kshitij.so 959
        elif filter =='subCategoryFilter':
960
            toFilter = info.split('^')
961
            print "Sub Category filter ",toFilter
962
            for deal in deals:
963
                if str(int(deal['subCategoryId'])) in toFilter:
964
                    subCategoryFiltered.append(deal)
17668 kshitij.so 965
    print "No of brand filtered ",len(brandsFiltered)
966
    print "No of sub-cat filtered ",len(subCategoryFiltered)
17657 kshitij.so 967
    if len(subCategoryFiltered) == 0:
17367 kshitij.so 968
        return [trend['skuBundleId'] for trend in brandsFiltered]
17663 kshitij.so 969
    elif len(brandsFiltered) == 0:
970
        return [trend['skuBundleId'] for trend in subCategoryFiltered]
17669 kshitij.so 971
    return [i['skuBundleId'] for i in subCategoryFiltered for j in brandsFiltered if i['_id']==j['_id']]
14791 kshitij.so 972
 
973
 
14037 kshitij.so 974
def getDeals(userId, category_id, offset, limit, sort, direction):
17469 kshitij.so 975
    if mc.get("category_cash_back") is None or not bool(mc.get("category_cash_back")):
14037 kshitij.so 976
        populateCashBack()
977
    rank = 1
13771 kshitij.so 978
    deals = {}
13910 kshitij.so 979
    outer_query = []
980
    outer_query.append({"showDeal":1})
981
    query = {}
982
    query['$gt'] = 0
983
    outer_query.append({'totalPoints':query})
984
    if category_id in (3,5):
985
        outer_query.append({'category_id':category_id})
13803 kshitij.so 986
    if sort is None or direction is None:
987
        direct = -1
13910 kshitij.so 988
        print outer_query
989
        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 990
    else:
13910 kshitij.so 991
        print outer_query
13803 kshitij.so 992
        direct = direction
13910 kshitij.so 993
        if sort == "bestSellerPoints":
994
            print "yes,sorting by bestSellerPoints"
995
            data = list(get_mongo_connection().Catalog.Deals.find({"$and":outer_query}).sort([('bestSellerPoints',direct),('rank',direct),('nlcPoints',direct)]).skip(offset).limit(limit))
996
        else:
997
            data = list(get_mongo_connection().Catalog.Deals.find({"$and":outer_query}).sort([(sort,direct)]).skip(offset).limit(limit))
13771 kshitij.so 998
    for d in data:
999
        item = list(get_mongo_connection().Catalog.MasterData.find({'_id':d['_id']}))
1000
        if not deals.has_key(item[0]['identifier']):
13921 kshitij.so 1001
            item[0]['dealRank'] = rank
1002
            try:
14761 kshitij.so 1003
                cashBack = getCashBack(item[0]['_id'], item[0]['source_id'], item[0]['category_id'])
13921 kshitij.so 1004
                if not cashBack or cashBack.get('cash_back_status')!=1:
13928 kshitij.so 1005
                    item[0]['cash_back_type'] = 0
1006
                    item[0]['cash_back'] = 0
13921 kshitij.so 1007
                else:
14766 kshitij.so 1008
                    item[0]['cash_back_type'] = int(cashBack['cash_back_type'])
13928 kshitij.so 1009
                    item[0]['cash_back'] = cashBack['cash_back']
13921 kshitij.so 1010
            except:
1011
                print "Error in adding cashback to deals"
13928 kshitij.so 1012
                item[0]['cash_back_type'] = 0
1013
                item[0]['cash_back'] = 0
13771 kshitij.so 1014
            deals[item[0]['identifier']] = item[0]
13921 kshitij.so 1015
 
13771 kshitij.so 1016
            rank +=1
13785 kshitij.so 1017
    return sorted(deals.values(), key=itemgetter('dealRank'))
1018
 
16222 kshitij.so 1019
def getItem(skuId,showDp=None):
16224 kshitij.so 1020
    temp = []
17469 kshitij.so 1021
    if mc.get("category_cash_back") is None or not bool(mc.get("category_cash_back")):
14113 kshitij.so 1022
        populateCashBack()
13795 kshitij.so 1023
    try:
16222 kshitij.so 1024
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'_id':int(skuId)})
1025
        if skuData is None:
1026
            raise
1027
        try:
1028
            cashBack = getCashBack(skuData['_id'], skuData['source_id'], skuData['category_id'])
1029
            if not cashBack or cashBack.get('cash_back_status')!=1:
1030
                skuData['cash_back_type'] = 0
1031
                skuData['cash_back'] = 0
1032
            else:
1033
                skuData['cash_back_type'] = cashBack['cash_back_type']
1034
                skuData['cash_back'] = cashBack['cash_back']
1035
        except:
1036
            print "Error in adding cashback to deals"
1037
            skuData['cash_back_type'] = 0
1038
            skuData['cash_back'] = 0
1039
        skuData['in_stock'] = int(skuData['in_stock'])
1040
        skuData['is_shortage'] = int(skuData['is_shortage'])
1041
        skuData['category_id'] = int(skuData['category_id'])
17607 kshitij.so 1042
        skuData['subCategoryId'] = int(skuData['subCategoryId'])
16222 kshitij.so 1043
        skuData['status'] = int(skuData['status'])
16483 kshitij.so 1044
        try:
1045
            skuData['thumbnail'] = skuData['thumbnail'].strip()
1046
        except:
1047
            pass 
16222 kshitij.so 1048
        if showDp is not None:
1049
            dealerPrice = get_mongo_connection().Catalog.SkuDealerPrices.find_one({'skuBundleId':skuData['skuBundleId']})
1050
            skuData['dp'] = 0.0
1051
            skuData['showDp'] = 0
1052
            if dealerPrice is not None:
1053
                skuData['dp'] = dealerPrice['dp']
1054
                skuData['showDp'] = dealerPrice['showDp']
16224 kshitij.so 1055
        temp.append(skuData)
1056
        return temp
13795 kshitij.so 1057
    except:
16224 kshitij.so 1058
        return []
13836 kshitij.so 1059
 
14761 kshitij.so 1060
def getCashBack(skuId, source_id, category_id):
17469 kshitij.so 1061
    if mc.get("category_cash_back") is None or not bool(mc.get("category_cash_back")):
14761 kshitij.so 1062
        populateCashBack()
1063
    itemCashBackMap = mc.get("item_cash_back")
13921 kshitij.so 1064
    itemCashBack = itemCashBackMap.get(skuId)
1065
    if itemCashBack is not None:
1066
        return itemCashBack
14761 kshitij.so 1067
    cashBackMap = mc.get("category_cash_back")
13921 kshitij.so 1068
    sourceCashBack = cashBackMap.get(source_id)
1069
    if sourceCashBack is not None and len(sourceCashBack) > 0:
1070
        for cashBack in sourceCashBack:
1071
            if cashBack.get(category_id) is None:
1072
                continue
1073
            else:
1074
                return cashBack.get(category_id)
1075
    else:
1076
        return {}
16560 amit.gupta 1077
 
1078
def getBundleBySourceSku(source_id, identifier):
17035 kshitij.so 1079
    if source_id in (1,2,4,5,6,7):
16560 amit.gupta 1080
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'identifier':identifier.strip(), 'source_id':source_id}))
1081
    elif source_id == 3:
1082
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'secondaryIdentifier':identifier.strip(), 'source_id':source_id}))
1083
    else:
1084
        return {}
1085
 
1086
    if not skuData:
1087
        return {}
1088
    else:
16564 amit.gupta 1089
        bundleId = skuData[0]["skuBundleId"]
17035 kshitij.so 1090
        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 1091
                       {"source_id":1, "available_price":1, "marketPlaceUrl":1, "gross_price":1, "codAvailable":1, "source_product_name":1, "offer":1, "coupon":1}))
16579 amit.gupta 1092
        return {'products':itemIds}
16560 amit.gupta 1093
 
1094
 
13921 kshitij.so 1095
 
15129 kshitij.so 1096
def getDealRank(identifier, source_id, userId):
17035 kshitij.so 1097
    if source_id in (1,2,4,5,6,7):
15129 kshitij.so 1098
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'identifier':identifier.strip(), 'source_id':source_id}))
1099
    elif source_id == 3:
1100
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'secondaryIdentifier':identifier.strip(), 'source_id':source_id}))
1101
    else:
16282 amit.gupta 1102
        return {'rank':0, 'description':'Source not valid','maxNlc':None, 'minNlc':None,'status':None,'dp':None}
15349 kshitij.so 1103
    if len(skuData) == 0:
16282 amit.gupta 1104
        return {'rank':0, 'description':'No matching product identifier found','maxNlc':None, 'minNlc':None,'status':None,'dp':None}
15129 kshitij.so 1105
    user_specific_deals = mc.get(str(userId))
1106
    if user_specific_deals is None:
1107
        __populateCache(userId)
1108
        user_specific_deals = mc.get(str(userId))
1109
    else:
1110
        print "Getting user deals from cache"
1111
    category_id = skuData[0]['category_id']
1112
    category_specific_deals = user_specific_deals.get(category_id)
16280 kshitij.so 1113
 
1114
    dealsData = get_mongo_connection().Catalog.Deals.find_one({'skuBundleId':skuData[0]['skuBundleId']})
1115
    if dealsData is None:
1116
        dealsData = {}
1117
 
15129 kshitij.so 1118
    if category_specific_deals is None or len(category_specific_deals) ==0:
16280 kshitij.so 1119
        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 1120
    sorted_deals = sorted(category_specific_deals, key = lambda x: (x['persPoints'],x['totalPoints'],x['bestSellerPoints'], x['nlcPoints'], x['rank']),reverse=True)
16168 kshitij.so 1121
    sortedMap = {}
1122
    rankMap = {}
1123
    rank = 0
15129 kshitij.so 1124
    for sorted_deal in sorted_deals:
16168 kshitij.so 1125
        if sortedMap.get(sorted_deal['skuBundleId']) is None:
1126
            sortedMap[sorted_deal['skuBundleId']] = {rank:[sorted_deal]}
1127
            rankMap[rank] = (sortedMap[sorted_deal['skuBundleId']].values())[0]
1128
            rank = rank +1
1129
        else:
1130
            for temp_list in sortedMap.get(sorted_deal['skuBundleId']).itervalues():
1131
                temp_list.append(sorted_deal)
1132
            rankMap[(sortedMap.get(sorted_deal['skuBundleId']).keys())[0]] = temp_list
1133
 
16187 kshitij.so 1134
    for dealRank ,dealList in rankMap.iteritems():
16168 kshitij.so 1135
        for d in dealList:
16186 kshitij.so 1136
            if d['skuBundleId'] == skuData[0]['skuBundleId']:
16280 kshitij.so 1137
                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 1138
 
16280 kshitij.so 1139
    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 1140
 
1141
 
13836 kshitij.so 1142
def getCashBackDetails(identifier, source_id):
17469 kshitij.so 1143
    if mc.get("category_cash_back") is None or not bool(mc.get("category_cash_back")):
13921 kshitij.so 1144
        populateCashBack()
13771 kshitij.so 1145
 
17035 kshitij.so 1146
    if source_id in (1,2,4,5,6,7):
13839 kshitij.so 1147
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'identifier':identifier.strip(), 'source_id':source_id}))
13840 kshitij.so 1148
    elif source_id == 3:
13839 kshitij.so 1149
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'secondaryIdentifier':identifier.strip(), 'source_id':source_id}))
13840 kshitij.so 1150
    else:
1151
        return {}
13836 kshitij.so 1152
    if len(skuData) > 0:
14761 kshitij.so 1153
        itemCashBackMap = mc.get("item_cash_back")
13921 kshitij.so 1154
        itemCashBack = itemCashBackMap.get(skuData[0]['_id'])
1155
        if itemCashBack is not None:
1156
            return itemCashBack
14761 kshitij.so 1157
        cashBackMap = mc.get("category_cash_back")
13921 kshitij.so 1158
        sourceCashBack = cashBackMap.get(source_id)
1159
        if sourceCashBack is not None and len(sourceCashBack) > 0:
1160
            for cashBack in sourceCashBack:
1161
                if cashBack.get(skuData[0]['category_id']) is None:
1162
                    continue
1163
                else:
1164
                    return cashBack.get(skuData[0]['category_id'])
13836 kshitij.so 1165
        else:
1166
            return {} 
1167
    else:
1168
        return {}
13986 amit.gupta 1169
 
14398 amit.gupta 1170
def getImgSrc(identifier, source_id):
1171
    skuData = None
17035 kshitij.so 1172
    if source_id in (1,2,4,5,6,7):
14414 amit.gupta 1173
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'identifier':identifier.strip(), 'source_id':source_id})
14398 amit.gupta 1174
    elif source_id == 3:
14414 amit.gupta 1175
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'secondaryIdentifier':identifier.strip(), 'source_id':source_id})
14398 amit.gupta 1176
    if skuData is None:
1177
        return {}
1178
    else:
16483 kshitij.so 1179
        try:
1180
            return {'thumbnail':skuData.get('thumbnail').strip()}
1181
        except:
1182
            return {'thumbnail':skuData.get('thumbnail')}
13986 amit.gupta 1183
 
1184
def next_weekday(d, weekday):
1185
    days_ahead = weekday - d.weekday()
1186
    if days_ahead <= 0: # Target day already happened this week
1187
        days_ahead += 7
1188
    return d + timedelta(days_ahead)
1189
 
13771 kshitij.so 1190
 
13970 kshitij.so 1191
def getAllDealerPrices(offset, limit):
1192
    data = []
1193
    collection = get_mongo_connection().Catalog.SkuDealerPrices
1194
    cursor = collection.find().skip(offset).limit(limit)
1195
    for val in cursor:
15853 kshitij.so 1196
        master = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':val['skuBundleId']})
1197
        if master is not None:
1198
            val['brand'] = master['brand']
1199
            val['source_product_name'] = master['source_product_name']
13970 kshitij.so 1200
        else:
1201
            val['brand'] = ""
1202
            val['source_product_name'] = ""
16231 kshitij.so 1203
        val['showDp'] = int(val['showDp'])
13970 kshitij.so 1204
        data.append(val)
1205
    return data
1206
 
15853 kshitij.so 1207
def addSkuDealerPrice(data):
1208
    collection = get_mongo_connection().Catalog.SkuDealerPrices
1209
    cursor = collection.find_one({"skuBundleId":data['skuBundleId']})
1210
    if cursor is not None:
1211
        return {0:"BundleId information already present."}
13970 kshitij.so 1212
    else:
15853 kshitij.so 1213
        collection.insert(data)
1214
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
13970 kshitij.so 1215
        return {1:"Data added successfully"}
1216
 
1217
def updateSkuDealerPrice(data, _id):
1218
    try:
1219
        collection = get_mongo_connection().Catalog.SkuDealerPrices
1220
        collection.update({'_id':ObjectId(_id)},{"$set":{'dp':data['dp']}},upsert=False, multi = False)
15853 kshitij.so 1221
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
13970 kshitij.so 1222
        return {1:"Data updated successfully"}
1223
    except:
1224
        return {0:"Data not updated."}
1225
 
1226
def updateExceptionalNlc(data, _id):
1227
    try:
1228
        collection = get_mongo_connection().Catalog.ExceptionalNlc
1229
        collection.update({'_id':ObjectId(_id)},{"$set":{'maxNlc':data['maxNlc'], 'minNlc':data['minNlc'], 'overrideNlc':data['overrideNlc']}},upsert=False, multi = False)
15853 kshitij.so 1230
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
13970 kshitij.so 1231
        return {1:"Data updated successfully"}
1232
    except:
1233
        return {0:"Data not updated."}
1234
 
14041 kshitij.so 1235
def resetCache(userId):
14043 kshitij.so 1236
    try:
1237
        mc.delete(userId)
1238
        return {1:'Cache cleared.'}
1239
    except:
1240
        return {0:'Unable to clear cache.'}
1241
 
15853 kshitij.so 1242
def updateCollection(data):
1243
    try:
1244
        collection = get_mongo_connection().Catalog[data['class']]
1245
        class_name = data.pop('class')
1246
        _id = data.pop('oid')
1247
        result = collection.update({'_id':ObjectId(_id)},{"$set":data},upsert=False, multi = False)
1248
        if class_name != "Notifications":
1249
            record = list(collection.find({'_id':ObjectId(_id)}))
1250
            if class_name !="CategoryDiscount":
1251
                if record[0].has_key('sku'):
1252
                    field = '_id'
1253
                    val = record[0]['sku']
14852 kshitij.so 1254
                else:
15853 kshitij.so 1255
                    field = 'skuBundleId'
1256
                    val = record[0]['skuBundleId']
1257
                get_mongo_connection().Catalog.MasterData.update({field:val},{"$set":{'updatedOn':to_java_date(datetime.now())}},upsert=False, multi = True)
1258
            else:
1259
                get_mongo_connection().Catalog.MasterData.update({'brand':re.compile(record[0]['brand'], re.IGNORECASE),'category_id':record[0]['category_id']}, \
1260
                                                                 {"$set":{'updatedOn':to_java_date(datetime.now())}},upsert=False,multi=True)
16233 kshitij.so 1261
        if class_name =='SkuDealerPrices':
16237 kshitij.so 1262
            get_mongo_connection().Catalog.Deals.update({'skuBundleId':val},{"$set":data},upsert=False, multi=True)
15853 kshitij.so 1263
        return {1:"Data updated successfully"}
1264
    except Exception as e:
1265
        print e
1266
        return {0:"Data not updated."}
14575 kshitij.so 1267
 
14076 kshitij.so 1268
 
14553 kshitij.so 1269
def addNegativeDeals(data, multi):
1270
    if multi !=1: 
1271
        collection = get_mongo_connection().Catalog.NegativeDeals
1272
        cursor = collection.find({"sku":data['sku']})
1273
        if cursor.count() > 0:
1274
            return {0:"Sku information already present."}
1275
        else:
1276
            collection.insert(data)
1277
            return {1:"Data added successfully"}
14481 kshitij.so 1278
    else:
14553 kshitij.so 1279
        skuIds = __getBundledSkusfromSku(data['sku'])
1280
        for sku in skuIds:
1281
            data['sku'] = sku.get('_id')
1282
            collection = get_mongo_connection().Catalog.NegativeDeals
1283
            cursor = collection.find({"sku":data['sku']})
1284
            if cursor.count() > 0:
1285
                continue
1286
            else:
14558 kshitij.so 1287
                data.pop('_id',None)
14553 kshitij.so 1288
                collection.insert(data)
14481 kshitij.so 1289
        return {1:"Data added successfully"}
1290
 
1291
def getAllNegativeDeals(offset, limit):
1292
    data = []
1293
    collection = get_mongo_connection().Catalog.NegativeDeals
1294
    cursor = collection.find().skip(offset).limit(limit)
1295
    for val in cursor:
1296
        master = list(get_mongo_connection().Catalog.MasterData.find({'_id':val['sku']}))
1297
        if len(master) > 0:
1298
            val['brand'] = master[0]['brand']
1299
            val['source_product_name'] = master[0]['source_product_name']
1300
            val['skuBundleId'] = master[0]['skuBundleId']
1301
        else:
1302
            val['brand'] = ""
1303
            val['source_product_name'] = ""
1304
            val['skuBundleId'] = ""
1305
        data.append(val)
1306
    return data
1307
 
1308
def getAllManualDeals(offset, limit):
1309
    data = []
1310
    collection = get_mongo_connection().Catalog.ManualDeals
15090 kshitij.so 1311
    cursor = collection.find().skip(offset).limit(limit)
14481 kshitij.so 1312
    for val in cursor:
1313
        master = list(get_mongo_connection().Catalog.MasterData.find({'_id':val['sku']}))
1314
        if len(master) > 0:
1315
            val['brand'] = master[0]['brand']
1316
            val['source_product_name'] = master[0]['source_product_name']
1317
            val['skuBundleId'] = master[0]['skuBundleId']
1318
        else:
1319
            val['brand'] = ""
1320
            val['source_product_name'] = ""
1321
            val['skuBundleId'] = ""
1322
        data.append(val)
1323
    return data
14076 kshitij.so 1324
 
14553 kshitij.so 1325
def addManualDeal(data, multi):
1326
    if multi !=1:
1327
        collection = get_mongo_connection().Catalog.ManualDeals
15090 kshitij.so 1328
        cursor = collection.find({'sku':data['sku']})
14553 kshitij.so 1329
        if cursor.count() > 0:
1330
            return {0:"Sku information already present."}
1331
        else:
1332
            collection.insert(data)
1333
            get_mongo_connection().Catalog.MasterData.update({'_id':data['sku']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=False)
1334
            return {1:"Data added successfully"}
14481 kshitij.so 1335
    else:
14553 kshitij.so 1336
        skuIds = __getBundledSkusfromSku(data['sku'])
1337
        for sku in skuIds:
1338
            data['sku'] = sku.get('_id')
1339
            collection = get_mongo_connection().Catalog.ManualDeals
15090 kshitij.so 1340
            cursor = collection.find({'sku':data['sku']})
14553 kshitij.so 1341
            if cursor.count() > 0:
1342
                continue
1343
            else:
14558 kshitij.so 1344
                data.pop('_id',None)
14553 kshitij.so 1345
                collection.insert(data)
1346
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':sku.get('skuBundleId')},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
14481 kshitij.so 1347
        return {1:"Data added successfully"}
14553 kshitij.so 1348
 
14481 kshitij.so 1349
def deleteDocument(data):
15853 kshitij.so 1350
    print "inside detete document"
14481 kshitij.so 1351
    print data
1352
    try:
1353
        collection = get_mongo_connection().Catalog[data['class']]
1354
        class_name = data.pop('class')
1355
        _id = data.pop('oid')
1356
        record = list(collection.find({'_id':ObjectId(_id)}))
1357
        collection.remove({'_id':ObjectId(_id)})
15075 kshitij.so 1358
        if class_name != "Notifications":
1359
            if class_name !="CategoryDiscount":
15853 kshitij.so 1360
                print record[0]
1361
                if record[0].has_key('sku'):
1362
                    field = '_id'
1363
                    val = record[0]['sku']
1364
                else:
1365
                    field = 'skuBundleId'
1366
                    val = record[0]['skuBundleId']
1367
                print "Updating master"
1368
                print field
1369
                print val
1370
                get_mongo_connection().Catalog.MasterData.update({field:val},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
15075 kshitij.so 1371
            else:
1372
                get_mongo_connection().Catalog.MasterData.update({'brand':re.compile(record[0]['brand'], re.IGNORECASE),'category_id':record[0]['category_id']}, \
1373
                                                                 {"$set":{'updatedOn':to_java_date(datetime.now())}},upsert=False,multi=True)
14481 kshitij.so 1374
        return {1:"Document deleted successfully"}
1375
    except Exception as e:
1376
        print e
1377
        return {0:"Document not deleted."}
13970 kshitij.so 1378
 
14482 kshitij.so 1379
def searchMaster(offset, limit, search_term):
1380
    data = []
14531 kshitij.so 1381
    if search_term is not None:
14551 kshitij.so 1382
        terms = search_term.split(' ')
1383
        outer_query = []
1384
        for term in terms:
1385
            outer_query.append({"source_product_name":re.compile(term, re.IGNORECASE)})
14531 kshitij.so 1386
        try:
14551 kshitij.so 1387
            collection = get_mongo_connection().Catalog.MasterData.find({"$and":outer_query,'source_id':{'$in':SOURCE_MAP.keys()}}).skip(offset).limit(limit)
14531 kshitij.so 1388
            for record in collection:
1389
                data.append(record)
1390
        except:
1391
            pass
1392
    else:
1393
        collection = get_mongo_connection().Catalog.MasterData.find({'source_id':{'$in':SOURCE_MAP.keys()}}).skip(offset).limit(limit)
14482 kshitij.so 1394
        for record in collection:
1395
            data.append(record)
1396
    return data
14481 kshitij.so 1397
 
14495 kshitij.so 1398
def getAllFeaturedDeals(offset, limit):
1399
    data = []
1400
    collection = get_mongo_connection().Catalog.FeaturedDeals
17561 kshitij.so 1401
    cursor = collection.find({}).skip(offset).limit(limit)
14495 kshitij.so 1402
    for val in cursor:
17367 kshitij.so 1403
        master = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':val['skuBundleId']}))
14495 kshitij.so 1404
        if len(master) > 0:
1405
            val['brand'] = master[0]['brand']
1406
            val['source_product_name'] = master[0]['source_product_name']
1407
            val['skuBundleId'] = master[0]['skuBundleId']
1408
        else:
1409
            val['brand'] = ""
1410
            val['source_product_name'] = ""
1411
            val['skuBundleId'] = ""
1412
        data.append(val)
1413
    return data
1414
 
14553 kshitij.so 1415
def addFeaturedDeal(data, multi):
17367 kshitij.so 1416
    collection = get_mongo_connection().Catalog.FeaturedDeals
1417
    cursor = collection.find({'skuBundleId':data['skuBundleId']})
1418
    master = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':data['skuBundleId']})
1419
    if master is None:
1420
        return {0:"BundleId is wrong"}
17469 kshitij.so 1421
    otherInfoObj = data['otherInfo']
1422
    toPop = []
1423
    for x,y in otherInfoObj.iteritems():
1424
        if y==0:
1425
            toPop.append(x)
1426
 
1427
    for popItem in toPop:
1428
        otherInfoObj.pop(popItem)
1429
    if len(otherInfoObj.keys())==0:
1430
        return {0:"No rank info to add"}
1431
 
1432
    for x,y in otherInfoObj.iteritems():
1433
        exist = get_mongo_connection().Catalog.FeaturedDeals.find({'otherInfo.'+x:y})
1434
        if exist.count() >0:
1435
            return {0:"Rank already assigned bundleId %s"%(exist[0]['skuBundleId'])}
17367 kshitij.so 1436
    if cursor.count() > 0:
1437
        return {0:"SkuBundleId information already present."}
14495 kshitij.so 1438
    else:
17367 kshitij.so 1439
        collection.insert(data)
14495 kshitij.so 1440
        return {1:"Data added successfully"}
1441
 
14499 kshitij.so 1442
def searchCollection(class_name, sku, skuBundleId):
14497 kshitij.so 1443
    data = []
1444
    collection = get_mongo_connection().Catalog[class_name]
15076 kshitij.so 1445
    if class_name == "Notifications":
1446
        cursor = collection.find({'skuBundleId':skuBundleId})
1447
        for val in cursor:
1448
            master = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':val['skuBundleId']}))
1449
            if len(master) > 0:
1450
                val['brand'] = master[0]['brand']
1451
                val['model_name'] = master[0]['model_name']
1452
                val['skuBundleId'] = master[0]['skuBundleId']
1453
            else:
1454
                val['brand'] = ""
1455
                val['model_name'] = ""
1456
                val['skuBundleId'] = val['skuBundleId']
1457
            data.append(val)
15095 kshitij.so 1458
        return data
15853 kshitij.so 1459
    master = None
14499 kshitij.so 1460
    if sku is not None:
15853 kshitij.so 1461
        if COLLECTION_MAP.has_key(class_name):
1462
            master = get_mongo_connection().Catalog.MasterData.find_one({'_id':sku})
1463
            cursor = collection.find({'skuBundleId':master['skuBundleId']})
1464
        else:
1465
            cursor = collection.find({'sku':sku})
14499 kshitij.so 1466
        for val in cursor:
15853 kshitij.so 1467
            if master is None:
1468
                master = get_mongo_connection().Catalog.MasterData.find_one({'_id':val['sku']})
1469
            if master is not None:
1470
                val['brand'] = master['brand']
1471
                val['source_product_name'] = master['source_product_name']
1472
                val['skuBundleId'] = master['skuBundleId']
14499 kshitij.so 1473
            else:
1474
                val['brand'] = ""
1475
                val['source_product_name'] = ""
1476
                val['skuBundleId'] = ""
1477
            data.append(val)
1478
        return data
1479
    else:
15853 kshitij.so 1480
        if not COLLECTION_MAP.has_key(class_name):
1481
            skuIds = get_mongo_connection().Catalog.MasterData.find({'skuBundleId':skuBundleId}).distinct('_id')
1482
            for sku in skuIds:
1483
                cursor = collection.find({'sku':sku})
1484
                for val in cursor:
1485
                    master = list(get_mongo_connection().Catalog.MasterData.find({'_id':val['sku']}))
1486
                    if len(master) > 0:
1487
                        val['brand'] = master[0]['brand']
1488
                        val['source_product_name'] = master[0]['source_product_name']
1489
                        val['skuBundleId'] = master[0]['skuBundleId']
1490
                    else:
1491
                        val['brand'] = ""
1492
                        val['source_product_name'] = ""
1493
                        val['skuBundleId'] = ""
1494
                    data.append(val)
1495
            return data
1496
        else:
1497
            cursor = collection.find({'skuBundleId':skuBundleId})
14499 kshitij.so 1498
            for val in cursor:
15853 kshitij.so 1499
                master = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':val['skuBundleId']}))
14499 kshitij.so 1500
                if len(master) > 0:
1501
                    val['brand'] = master[0]['brand']
1502
                    val['source_product_name'] = master[0]['source_product_name']
1503
                else:
1504
                    val['brand'] = ""
1505
                    val['source_product_name'] = ""
1506
                data.append(val)
15853 kshitij.so 1507
            return data
14495 kshitij.so 1508
 
15074 kshitij.so 1509
def __getBrandIdForBrand(brandName, category_id):
1510
    brandInfo = Brands.query.filter(Brands.category_id==category_id).filter(Brands.name == brandName).all()
1511
    if brandInfo is None or len(brandInfo)!=1:
1512
        raise
1513
    else:
1514
        return brandInfo[0].id
1515
 
14588 kshitij.so 1516
def addNewItem(data):
14594 kshitij.so 1517
    try:
1518
        data['updatedOn'] = to_java_date(datetime.now())
1519
        data['addedOn'] = to_java_date(datetime.now())
1520
        data['priceUpdatedOn'] = to_java_date(datetime.now())
1521
        max_id = list(get_mongo_connection().Catalog.MasterData.find().sort([('_id',pymongo.DESCENDING)]).limit(1))
1522
        max_bundle = list(get_mongo_connection().Catalog.MasterData.find().sort([('skuBundleId',pymongo.DESCENDING)]).limit(1))
1523
        data['_id'] = max_id[0]['_id'] + 1
1524
        data['skuBundleId'] = max_bundle[0]['skuBundleId'] + 1
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'])
14594 kshitij.so 1537
        get_mongo_connection().Catalog.MasterData.insert(data)
1538
        return {1:'Data added successfully'}
1539
    except Exception as e:
1540
        print e
1541
        return {0:'Unable to add data.'}
15130 kshitij.so 1542
    finally:
1543
        session.close()
14588 kshitij.so 1544
 
1545
def addItemToExistingBundle(data):
1546
    try:
1547
        data['updatedOn'] = to_java_date(datetime.now())
1548
        data['addedOn'] = to_java_date(datetime.now())
1549
        data['priceUpdatedOn'] = to_java_date(datetime.now())
14593 kshitij.so 1550
        max_id = list(get_mongo_connection().Catalog.MasterData.find().sort([('_id',pymongo.DESCENDING)]).limit(1))
14590 kshitij.so 1551
        data['_id'] = max_id[0]['_id'] + 1
14594 kshitij.so 1552
        data['identifier'] = str(data['identifier'])
1553
        data['secondaryIdentifier'] = str(data['secondaryIdentifier'])
17115 manish.sha 1554
        data['model_name'] = str(data['model_name'])
15074 kshitij.so 1555
        data['brand_id'] = __getBrandIdForBrand(data['brand'], data['category_id'])
17746 kshitij.so 1556
        data['shippingCost'] = float(data['shippingCost'])
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'])
14588 kshitij.so 1564
        get_mongo_connection().Catalog.MasterData.insert(data)
1565
        return {1:'Data added successfully.'}
14594 kshitij.so 1566
    except Exception as e:
1567
        print e
14588 kshitij.so 1568
        return {0:'Unable to add data.'}
15130 kshitij.so 1569
    finally:
1570
        session.close()
14588 kshitij.so 1571
 
1572
def updateMaster(data, multi):
15130 kshitij.so 1573
    try:
1574
        print data
1575
        if multi != 1:
1576
            _id = data.pop('_id')
1577
            skuBundleId = data.pop('skuBundleId')
1578
            data['updatedOn'] = to_java_date(datetime.now())
1579
            data['identifier'] = str(data['identifier'])
1580
            data['secondaryIdentifier'] = str(data['secondaryIdentifier'])
17115 manish.sha 1581
            data['model_name'] = str(data['model_name'])
17746 kshitij.so 1582
            data['shippingCost'] = float(data['shippingCost'])
15130 kshitij.so 1583
            data['brand_id'] = __getBrandIdForBrand(data['brand'], data['category_id'])
17603 kshitij.so 1584
            if data['category_id'] ==6 and data['subCategoryId'] ==0:
17606 kshitij.so 1585
                return {0:'Sub-Category not selected'}
17608 kshitij.so 1586
            elif data['category_id'] !=6 and data['subCategoryId'] !=0:
1587
                return {0:'Sub-Category not valid'}
1588
            else:
1589
                pass
17604 kshitij.so 1590
            data['subCategory'] = SUB_CATEGORY_MAP.get(data['subCategoryId'])
15130 kshitij.so 1591
            get_mongo_connection().Catalog.MasterData.update({'_id':_id},{"$set":data},upsert=False)
1592
            return {1:'Data updated successfully.'}
1593
        else:
1594
            _id = data.pop('_id')
1595
            skuBundleId = data.pop('skuBundleId')
1596
            data['updatedOn'] = to_java_date(datetime.now())
1597
            data['identifier'] = str(data['identifier'])
1598
            data['secondaryIdentifier'] = str(data['secondaryIdentifier'])
1599
            data['brand_id'] = __getBrandIdForBrand(data['brand'], data['category_id'])
17115 manish.sha 1600
            data['model_name'] = str(data['model_name'])
17746 kshitij.so 1601
            data['shippingCost'] = float(data['shippingCost'])
17603 kshitij.so 1602
            if data['category_id'] ==6 and data['subCategoryId'] ==0:
17606 kshitij.so 1603
                return {0:'Sub-Category not selected'}
17608 kshitij.so 1604
            elif data['category_id'] !=6 and data['subCategoryId'] !=0:
1605
                return {0:'Sub-Category not valid'}
1606
            else:
1607
                pass
17604 kshitij.so 1608
            data['subCategory'] = SUB_CATEGORY_MAP.get(data['subCategoryId'])
15130 kshitij.so 1609
            get_mongo_connection().Catalog.MasterData.update({'_id':_id},{"$set":data},upsert=False)
1610
            similarItems = get_mongo_connection().Catalog.MasterData.find({'skuBundleId':skuBundleId})
1611
            for item in similarItems:
1612
                if item['_id'] == _id:
1613
                    continue
1614
                item['updatedOn'] = to_java_date(datetime.now())
1615
                item['thumbnail'] = data['thumbnail']
1616
                item['category'] = data['category']
1617
                item['category_id'] = data['category_id']
1618
                item['is_shortage'] = data['is_shortage']
1619
                item['mrp'] = data['mrp']
1620
                item['status'] = data['status']
1621
                item['maxPrice'] = data['maxPrice']
1622
                item['brand_id'] = data['brand_id']
17603 kshitij.so 1623
                item['subCategoryId'] = data['subCategoryId']
1624
                item['subCategory'] = data['subCategory']
15130 kshitij.so 1625
                similar_item_id = item.pop('_id')
1626
                get_mongo_connection().Catalog.MasterData.update({'_id':similar_item_id},{"$set":item},upsert=False)
1627
            return {1:'Data updated successfully.'}
17603 kshitij.so 1628
    except:
1629
        return {0:'Unable to update data'}
15130 kshitij.so 1630
    finally:
1631
        session.close()
14619 kshitij.so 1632
 
1633
def getLiveCricScore():
1634
    return mc.get('liveScore')
14852 kshitij.so 1635
 
1636
def addBundleToNotification(data):
1637
    try:
15069 kshitij.so 1638
        collection = get_mongo_connection().Catalog.Notifications
14852 kshitij.so 1639
        cursor = collection.find({'skuBundleId':data['skuBundleId']})
1640
        if cursor.count() > 0:
1641
            return {0:"SkuBundleId information already present."}
1642
        else:
1643
            collection.insert(data)
1644
            return {1:'Data updated successfully.'}
1645
    except:
1646
        return {0:'Unable to add data.'}
1647
 
1648
def getAllNotifications(offset, limit):
1649
    data = []
15069 kshitij.so 1650
    collection = get_mongo_connection().Catalog.Notifications
16450 kshitij.so 1651
    cursor = collection.find().sort([('endDate',pymongo.DESCENDING)]).skip(offset).limit(limit)
14852 kshitij.so 1652
    for val in cursor:
15072 kshitij.so 1653
        master = list(get_mongo_connection().Catalog.MasterData.find({'skuBundleId':val['skuBundleId']}))
14852 kshitij.so 1654
        if len(master) > 0:
1655
            val['brand'] = master[0]['brand']
15071 kshitij.so 1656
            val['model_name'] = master[0]['model_name']
14852 kshitij.so 1657
            val['skuBundleId'] = master[0]['skuBundleId']
1658
        else:
1659
            val['brand'] = ""
15071 kshitij.so 1660
            val['model_name'] = ""
1661
            val['skuBundleId'] = val['skuBundleId']
14852 kshitij.so 1662
        data.append(val)
1663
    return data
14997 kshitij.so 1664
 
1665
def getBrandsForFilter(category_id):
1666
    if mc.get("brandFilter") is None:
15095 kshitij.so 1667
        print "Populating brand data for category_id %d" %(category_id)
17469 kshitij.so 1668
        tabData, mobData, accData = [], [], []
14997 kshitij.so 1669
        mobileDeals = get_mongo_connection().Catalog.Deals.aggregate([
16170 kshitij.so 1670
                                                                      {"$match":{"category_id":3,"showDeal":1,"totalPoints":{"$gt":-100}}
14997 kshitij.so 1671
                                                                    },
1672
                                                                 {"$group" : 
1673
                                                                  {'_id':{'brand_id':'$brand_id','brand':'$brand'},'count':{'$sum':1}}
1674
                                                                  }
1675
                                                                ])
14588 kshitij.so 1676
 
14997 kshitij.so 1677
        tabletDeals = get_mongo_connection().Catalog.Deals.aggregate([
16170 kshitij.so 1678
                                                                      {"$match":{"category_id":5,"showDeal":1,"totalPoints":{"$gt":-100}}
14997 kshitij.so 1679
                                                                    },
1680
                                                                 {"$group" : 
1681
                                                                  {'_id':{'brand_id':'$brand_id','brand':'$brand'},'count':{'$sum':1}}
1682
                                                                  }
1683
                                                                ])
1684
 
17469 kshitij.so 1685
        accessoriesDeals = get_mongo_connection().Catalog.Deals.aggregate([
1686
                                                                      {"$match":{"category_id":6,"showDeal":1,"totalPoints":{"$gt":-100}}
1687
                                                                    },
1688
                                                                 {"$group" : 
1689
                                                                  {'_id':{'brand_id':'$brand_id','brand':'$brand'},'count':{'$sum':1}}
1690
                                                                  }
1691
                                                                ])
1692
 
14997 kshitij.so 1693
        allDeals = get_mongo_connection().Catalog.Deals.aggregate([
16170 kshitij.so 1694
                                                                   {"$match":{"showDeal":1,"totalPoints":{"$gt":-100}}
14997 kshitij.so 1695
                                                                    },
1696
                                                                 {"$group" : 
1697
                                                                  {'_id':{'brand_id':'$brand_id','brand':'$brand'},'count':{'$sum':1}}
1698
                                                                  }
1699
                                                                ])
1700
        #print mobileDeals
1701
        #print "==========Mobile data ends=========="
1702
 
1703
        #print tabletDeals
1704
        #print "==========Tablet data ends=========="
1705
 
1706
        #print allDeals
1707
        #print "==========All deal data ends========="
1708
 
1709
        for mobileDeal in mobileDeals['result']:
1710
            if mobileDeal.get('_id').get('brand_id') != 0:
1711
                tempMap = {}
1712
                tempMap['brand'] = mobileDeal.get('_id').get('brand')
1713
                tempMap['brand_id'] = mobileDeal.get('_id').get('brand_id')
1714
                tempMap['count'] = mobileDeal.get('count')
1715
                mobData.append(tempMap)
1716
 
1717
        for tabletDeal in tabletDeals['result']:
1718
            if tabletDeal.get('_id').get('brand_id') != 0:
1719
                tempMap = {}
1720
                tempMap['brand'] = tabletDeal.get('_id').get('brand')
1721
                tempMap['brand_id'] = tabletDeal.get('_id').get('brand_id')
1722
                tempMap['count'] = tabletDeal.get('count')
1723
                tabData.append(tempMap)
1724
 
17469 kshitij.so 1725
        for accessoryDeal in accessoriesDeals['result']:
1726
            if accessoryDeal.get('_id').get('brand_id') != 0:
1727
                tempMap = {}
1728
                tempMap['brand'] = accessoryDeal.get('_id').get('brand')
1729
                tempMap['brand_id'] = accessoryDeal.get('_id').get('brand_id')
1730
                tempMap['count'] = accessoryDeal.get('count')
1731
                accData.append(tempMap)
14997 kshitij.so 1732
 
17469 kshitij.so 1733
 
14997 kshitij.so 1734
        brandMap = {}
1735
        for allDeal in allDeals['result']:
1736
            if allDeal.get('_id').get('brand_id') != 0:
1737
                if brandMap.has_key(allDeal.get('_id').get('brand')):
15002 kshitij.so 1738
                    brand_ids = brandMap.get(allDeal.get('_id').get('brand')).get('brand_ids')
14997 kshitij.so 1739
                    brand_ids.append(allDeal.get('_id').get('brand_id'))
15003 kshitij.so 1740
                    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 1741
                else:
1742
                    temp = []
1743
                    temp.append(allDeal.get('_id').get('brand_id'))
15002 kshitij.so 1744
                    brandMap[allDeal.get('_id').get('brand')] = {'brand_ids':temp,'count':allDeal.get('count')}
14997 kshitij.so 1745
 
17469 kshitij.so 1746
        mc.set("brandFilter",{0:brandMap, 3:mobData, 5:tabData, 6:accData}, 600)  
14997 kshitij.so 1747
 
15062 kshitij.so 1748
    return sorted(mc.get("brandFilter").get(category_id), key = lambda x: (-x['count'], x['brand']))
15375 kshitij.so 1749
 
15459 kshitij.so 1750
def getStaticDeals(offset, limit, category_id, direction):
15375 kshitij.so 1751
    user_specific_deals = mc.get("staticDeals")
1752
    if user_specific_deals is None:
1753
        __populateStaticDeals()
1754
        user_specific_deals = mc.get("staticDeals")
15459 kshitij.so 1755
    rev = False
1756
    if direction is None or direction == -1:
1757
        rev=True
1758
    return sorted((user_specific_deals.get(category_id))[offset:offset+limit],reverse=rev)
15375 kshitij.so 1759
 
1760
def __populateStaticDeals():
1761
    print "Populating memcache for static deals"
1762
    outer_query = []
1763
    outer_query.append({"showDeal":1})
1764
    query = {}
16170 kshitij.so 1765
    query['$gt'] = -100
15375 kshitij.so 1766
    outer_query.append({'totalPoints':query})
1767
    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)]))
1768
    mobile_deals = []
1769
    tablet_deals = []
1770
    for deal in all_deals:
1771
        item = get_mongo_connection().Catalog.MasterData.find({'_id':deal['_id']})
1772
        if deal['category_id'] ==3:
1773
            mobile_deals.append(getItemObjForStaticDeals(item[0]))
1774
        elif deal['category_id'] ==5:
1775
            tablet_deals.append(getItemObjForStaticDeals(item[0]))
1776
        else:
1777
            continue
1778
 
1779
    random.shuffle(mobile_deals,random.random)
1780
    random.shuffle(tablet_deals,random.random)
1781
 
1782
    mem_cache_val = {3:mobile_deals, 5:tablet_deals}
1783
    mc.set("staticDeals", mem_cache_val, 3600)
1784
 
17733 kshitij.so 1785
def getItemObjForStaticDeals(item,transform=None):
1786
    mpu = str(item.get('marketPlaceUrl'))
1787
    if transform:
1788
        if mpu.find("snapdeal")!=-1:
1789
            mpu = "http://m.snapdeal.com"+mpu[mpu.find("/product"):]
1790
        elif mpu.find("homeshop18")!=-1:
1791
            mpu = "http://m.homeshop18.com/product.mobi?productId="+item['identifier']
17735 kshitij.so 1792
        elif mpu.find("saholic.com")!=-1:
17746 kshitij.so 1793
            mpu = "http://m."+mpu[mpu.find("saholic.com"):]
17735 kshitij.so 1794
        elif mpu.find("shopclues.com")!=-1:
17733 kshitij.so 1795
            mpu = "http://m."+mpu[mpu.find("shopclues.com"):]
1796
        else:
1797
            pass
1798
 
1799
    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 1800
 
1801
def getItemByMerchantIdentifier(identifier, source_id):
1802
    skuData = None
17035 kshitij.so 1803
    if source_id in (1,2,4,5,6,7):
16300 manas 1804
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'identifier':identifier.strip(), 'source_id':source_id})
1805
    elif source_id == 3:
1806
        skuData = get_mongo_connection().Catalog.MasterData.find_one({'secondaryIdentifier':identifier.strip(), 'source_id':source_id})
1807
    if skuData is None:
1808
        return {}
1809
    else:
1810
        return skuData
15375 kshitij.so 1811
 
17936 kshitij.so 1812
def getDealsForNotification(skuBundleIds,skipSplitting=False):
1813
    if not skipSplitting:
1814
        bundles= [int(skuBundleId) for skuBundleId in skuBundleIds.split(',')]
1815
        print bundles
1816
    else:
1817
        bundles = skuBundleIds
16406 kshitij.so 1818
    dealsList = []
16364 kshitij.so 1819
    dealsListMap = []
16406 kshitij.so 1820
    for bundleId in bundles:
1821
        outer_query = []
1822
        outer_query.append({ "$or": [ { "showDeal": 1} , { "prepaidDeal": 1 } ] })
1823
        outer_query.append({'skuBundleId':bundleId})
1824
        deals = get_mongo_connection().Catalog.Deals.find({"$and":outer_query})
1825
        for deal in deals:
1826
            dealsList.append(deal)
16364 kshitij.so 1827
    sortedMap = {}
1828
    rankMap = {}
1829
    rank = 0
16406 kshitij.so 1830
    for sorted_deal in dealsList:
16364 kshitij.so 1831
        if sortedMap.get(sorted_deal['skuBundleId']) is None:
1832
            sortedMap[sorted_deal['skuBundleId']] = {rank:[sorted_deal]}
1833
            rankMap[rank] = (sortedMap[sorted_deal['skuBundleId']].values())[0]
1834
            rank = rank +1
1835
        else:
1836
            for temp_list in sortedMap.get(sorted_deal['skuBundleId']).itervalues():
1837
                temp_list.append(sorted_deal)
1838
            rankMap[(sortedMap.get(sorted_deal['skuBundleId']).keys())[0]] = temp_list
1839
 
16367 kshitij.so 1840
    for dealList in [rankMap.get(k, []) for k in range(0, len(bundles))]:
16364 kshitij.so 1841
        temp = []
1842
        for d in dealList:
1843
            item = list(get_mongo_connection().Catalog.MasterData.find({'_id':d['_id']}))
1844
            if len(item) ==0:
1845
                continue
1846
            if d['dealType'] == 1 and d['source_id'] ==1:
1847
                item[0]['marketPlaceUrl'] = "http://www.amazon.in/dp/%s"%(item[0]['identifier'].strip())
1848
            elif d['source_id'] ==3:
1849
                item[0]['marketPlaceUrl'] = item[0]['marketPlaceUrl']+'?supc='+item[0].get('identifier')
1850
            else:
1851
                pass 
1852
            try:
1853
                cashBack = getCashBack(item[0]['_id'], item[0]['source_id'], item[0]['category_id'])
1854
                if not cashBack or cashBack.get('cash_back_status')!=1:
1855
                    item[0]['cash_back_type'] = 0
1856
                    item[0]['cash_back'] = 0
1857
                else:
1858
                    item[0]['cash_back_type'] = int(cashBack['cash_back_type'])
1859
                    item[0]['cash_back'] = cashBack['cash_back']
1860
            except:
1861
                print "Error in adding cashback to deals"
1862
                item[0]['cash_back_type'] = 0
1863
                item[0]['cash_back'] = 0
1864
            try:
1865
                item[0]['dp'] = d['dp']
1866
                item[0]['showDp'] = d['showDp']
1867
            except:
1868
                item[0]['dp'] = 0.0
1869
                item[0]['showDp'] = 0
17727 kshitij.so 1870
 
1871
            try:
1872
                if item[0]['showVideo']==0:
1873
                    item[0]['videoLink'] =""
1874
            except:
1875
                item[0]['videoLink'] =""
1876
            try:
1877
                if item[0]['quantity'] >1:
1878
                    ppq = float(item[0]['available_price'])/item[0]['quantity']
1879
 
1880
                    if ppq == round(ppq):
1881
                        item[0]['ppq'] = int(ppq)
1882
                    else:
1883
                        item[0]['ppq'] = round(ppq,2)
1884
                else:
1885
                    item[0]['ppq'] = 0
1886
            except:
1887
                item[0]['ppq'] = 0
1888
            if item[0]['category_id']!=6:
1889
                try:
18830 kshitij.so 1890
                    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']))
1891
                    item[0]['filterTextBrand'] = (item[0]['brand'])
17727 kshitij.so 1892
                except:
18830 kshitij.so 1893
                    pass
17727 kshitij.so 1894
            else:
1895
                try:
18051 kshitij.so 1896
                    if item[0]['subCategory']=='' or item[0]['subCategory'] is None or item[0]['subCategoryId']==0:
17727 kshitij.so 1897
                        raise
18830 kshitij.so 1898
                    item[0]['filterLinkSubCategory'] = '/category/'+str(int(item[0]['category_id']))+'?searchFor='+urllib.quote(item[0]['subCategory'])+'&filter=subcategory&subcategories='+str(int(item[0]['subCategoryId']))
1899
                    item[0]['filterTextSubCategory'] = (item[0]['subCategory'])
1900
                    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']))
1901
                    item[0]['filterTextBrand'] = (item[0]['brand'])
17727 kshitij.so 1902
                except:
18830 kshitij.so 1903
                    pass
17944 kshitij.so 1904
            try:
1905
                if item[0]['source_id']==4:
1906
                    item_availability_info = mc.get("item_availability_"+str(item[0]['identifier']).strip())
1907
                    if item_availability_info is None or len(item_availability_info)==0:
1908
                        item[0]['availabilityInfo'] = [{}]
1909
                    else:
1910
                        item[0]['availabilityInfo'] = item_availability_info
1911
            except:
1912
                item[0]['availabilityInfo'] = [{}]
19135 kshitij.so 1913
 
19193 kshitij.so 1914
            if item[0]['source_id']==4:
1915
                for av_info in item[0]['availabilityInfo']:
1916
                    if not av_info:
1917
                        continue
1918
                    av_info['cash_back'] = item[0]['cash_back']
1919
                    av_info['cash_back_type'] = item[0]['cash_back_type']
1920
                    netPriceAfterCashBack = av_info['sellingPrice'] 
19199 kshitij.so 1921
                    if av_info['cash_back_type'] ==1:
19207 kshitij.so 1922
                        netPriceAfterCashBack = av_info['sellingPrice'] - math.floor(float(av_info['sellingPrice'])*av_info['cash_back']/100)
19199 kshitij.so 1923
                    elif av_info['cash_back_type'] ==2:
19207 kshitij.so 1924
                        netPriceAfterCashBack = av_info['sellingPrice'] - math.floor(av_info['cash_back'])
19193 kshitij.so 1925
                    else:
1926
                        pass
1927
                    av_info['netPriceAfterCashBack'] = netPriceAfterCashBack
1928
 
1929
            if item[0]['source_id'] != SOURCE_MAP.get("PAYTM.COM"):
1930
                if item[0]['codAvailable'] ==1:
1931
                    paytmPrice = item[0]['available_price']
1932
                else:
1933
                    paytmPrice = item[0]['gross_price']
1934
 
1935
                if item[0]['cash_back_type'] ==1:
19207 kshitij.so 1936
                    item[0]['netPriceAfterCashBack'] = paytmPrice -  math.floor(float(paytmPrice)*item[0]['cash_back']/100)
19193 kshitij.so 1937
                elif item[0]['cash_back_type'] ==2:
19207 kshitij.so 1938
                    item[0]['netPriceAfterCashBack'] = paytmPrice -  math.floor(item[0]['cash_back'])
19193 kshitij.so 1939
                else:
1940
                    item[0]['netPriceAfterCashBack'] = paytmPrice
1941
 
1942
            else:
1943
                if item[0]['cash_back_type'] ==1:
19207 kshitij.so 1944
                    item[0]['netPriceAfterCashBack'] = item[0]['available_price'] -  math.floor(float(item[0]['available_price'])*item[0]['cash_back']/100)
19193 kshitij.so 1945
                elif item[0]['cash_back_type'] ==2:
19207 kshitij.so 1946
                    item[0]['netPriceAfterCashBack'] = item[0]['available_price'] -  math.floor(item[0]['cash_back'])
19193 kshitij.so 1947
                else:
1948
                    item[0]['netPriceAfterCashBack'] = item[0]['available_price']
1949
 
1950
 
19135 kshitij.so 1951
            item[0]['totalPoints'] = d['totalPoints']
17727 kshitij.so 1952
 
16364 kshitij.so 1953
            temp.append(item[0])
1954
        if len(temp) > 1:
1955
            temp = sorted(temp, key = lambda x: (x['available_price']),reverse=False)
1956
        dealsListMap.append(temp)
1957
    return dealsListMap
1958
 
16373 manas 1959
def getSkuBrandData(sku):
1960
    if sku is None:
1961
        return {}
1962
    else:
1963
        orders = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':sku})
1964
        if orders is None:
1965
            return {}
1966
        return orders
16488 kshitij.so 1967
 
1968
def addDealPoints(data):
1969
    collection = get_mongo_connection().Catalog.DealPoints
1970
    cursor = collection.find({'skuBundleId':data['skuBundleId']})
1971
    if cursor.count() > 0:
1972
        return {0:"Sku information already present."}
1973
    else:
1974
        collection.insert(data)
1975
        get_mongo_connection().Catalog.MasterData.update({'skuBundleId':data['skuBundleId']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
1976
        return {1:"Data added successfully"}
1977
 
1978
def getAllBundlesWithDealPoints(offset, limit):
1979
    data = []
1980
    collection = get_mongo_connection().Catalog.DealPoints
1981
    cursor = collection.find().sort([('endDate',pymongo.DESCENDING)]).skip(offset).limit(limit)
1982
    for val in cursor:
1983
        master = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':val.get('skuBundleId')})
1984
        if master is not None:
1985
            val['brand'] = master['brand']
1986
            val['source_product_name'] = master['product_name']
1987
        else:
1988
            val['brand'] = ""
1989
            val['source_product_name'] = ""
1990
        data.append(val)
1991
    return data
16546 kshitij.so 1992
 
1993
def generateRedirectUrl(retailer_id, app_id):
1994
    try:
16663 manish.sha 1995
        if retailer_id <= 0:
1996
            return {'url':"","message":"Retailer Id not valid"}
16546 kshitij.so 1997
        d_app_offer = app_offers.get_by(id=app_id)
16605 manish.sha 1998
    except:
1999
        traceback.print_exc()
16546 kshitij.so 2000
    finally:
2001
        session.close()
2002
    if d_app_offer is None:
2003
        return {'url':"","message":"App id doesn't exist"}
16364 kshitij.so 2004
 
16915 manish.sha 2005
    final_user_payout = 0
2006
    if d_app_offer.override_payout:
2007
        final_user_payout = d_app_offer.overriden_payout
2008
    else:
2009
        final_user_payout = d_app_offer.user_payout
16546 kshitij.so 2010
 
16915 manish.sha 2011
    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)
2012
 
16546 kshitij.so 2013
    get_mongo_connection().AppOrder.AppTransaction.insert(appTransactions.__dict__)
2014
    embedd = str((appTransactions.__dict__).get('_id'))
16548 kshitij.so 2015
    try:
2016
        index = d_app_offer.link.index(".freeb.co.in")
2017
    except:
16605 manish.sha 2018
        traceback.print_exc()
16548 kshitij.so 2019
        return {'url':"","message":"Substring not found"}
2020
    redirect_url = d_app_offer.link[0:index]+"."+embedd+d_app_offer.link[index:]
16546 kshitij.so 2021
    get_mongo_connection().AppOrder.AppTransaction.update({'_id':ObjectId(embedd)},{"$set":{'redirect_url':redirect_url}})
16548 kshitij.so 2022
    return {'url':redirect_url,"message":"Success"}
16556 kshitij.so 2023
 
2024
def addPayout(payout, transaction_id):
2025
    try:
16764 manish.sha 2026
        print 'Got Response for Transaction Id:- '+ str(transaction_id)+ ' and Actual Payout:- '+str(payout)
16556 kshitij.so 2027
        transaction = list(get_mongo_connection().AppOrder.AppTransaction.find({'_id':ObjectId(transaction_id)}))
2028
        if len(transaction) > 0:
2029
            if (transaction[0])['payout_status'] ==1:
16753 manish.sha 2030
                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 2031
 
2032
                approvedAppTransaction = approved_app_transactions.get_by(transaction_id=transaction_id)
2033
                if approvedAppTransaction is None:
2034
                    approvedAppTransaction = approved_app_transactions()
16919 manish.sha 2035
                    approvedAppTransaction.app_id = transaction[0].get('app_id')
16782 manish.sha 2036
                    approvedAppTransaction.cash_back_description = CB_APPROVED
16919 manish.sha 2037
                    approvedAppTransaction.retailer_id = transaction[0].get('retailer_id')
16782 manish.sha 2038
                    approvedAppTransaction.transaction_id = transaction_id
16919 manish.sha 2039
                    approvedAppTransaction.transaction_time = to_py_date(long(transaction[0].get('transaction_time')))
2040
                    approvedAppTransaction.redirect_url = transaction[0].get('redirect_url')
16782 manish.sha 2041
                    approvedAppTransaction.payout_status = 2
2042
                    approvedAppTransaction.payout_description = CB_APPROVED
2043
                    approvedAppTransaction.cashback_status = 2 
2044
                    approvedAppTransaction.payout_amount = long(payout)
2045
                    approvedAppTransaction.payout_time = datetime.now()
16919 manish.sha 2046
                    approvedAppTransaction.offer_price = long(transaction[0].get('offer_price')) 
2047
                    approvedAppTransaction.overridenCashBack = transaction[0].get('overridenCashBack')
2048
                    approvedAppTransaction.isCashBackOverriden = transaction[0].get('isCashBackOverriden')
2049
                    approvedAppTransaction.user_payout = transaction[0].get('user_payout')
16782 manish.sha 2050
                    approvedAppTransaction.cashBackConsidered = False
16915 manish.sha 2051
                    if transaction[0].get('final_user_payout') is not None:
2052
                        approvedAppTransaction.final_user_payout = transaction[0].get('final_user_payout')
2053
                    else:
16919 manish.sha 2054
                        if transaction[0].get('isCashBackOverriden'):
2055
                            approvedAppTransaction.final_user_payout = transaction[0].get('overridenCashBack')
16915 manish.sha 2056
                        else:
16919 manish.sha 2057
                            approvedAppTransaction.final_user_payout = transaction[0].get('user_payout')
16782 manish.sha 2058
                    session.commit()
2059
 
2060
                    updateResult = _updateApprovedCashbackToUser(approvedAppTransaction.id)
16631 manish.sha 2061
                else:
16783 manish.sha 2062
                    approvedAppTransaction.payout_amount = long(payout)
2063
                    approvedAppTransaction.payout_time = datetime.now()
2064
                    if approvedAppTransaction.cashBackConsidered == False:
2065
                        updateResult = _updateApprovedCashbackToUser(approvedAppTransaction.id)
2066
                    session.commit()
16782 manish.sha 2067
 
2068
                    '''
2069
                    try:
2070
                        if int(transaction[0]['offer_price']) != payout or int(transaction[0]['user_payout']) < payout:
2071
                            _sendAlertForAppPayouts(int(transaction[0]['app_id']), int(transaction[0]['offer_price']), int(transaction[0]['user_payout']), payout)
2072
                    except:
2073
                        print traceback.print_exc()
2074
                    '''
16556 kshitij.so 2075
                return {'status':'ok','message':'Payout updated'}
2076
            elif (transaction[0])['payout_status'] ==2:
2077
                return {'status':'ok','message':'Payout already processed'}
2078
            else:
2079
                return {'status':'fail','message':'Something is wrong'}
2080
        else:
2081
            return {'status':'fail','message':'transaction_id not found'}
2082
    except:
16657 manish.sha 2083
        print traceback.print_exc()
16631 manish.sha 2084
        try:
16753 manish.sha 2085
            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 2086
        except:
2087
            print 'Data Inconsistency in Cashback Process'
16636 manish.sha 2088
            print traceback.print_exc()
16559 kshitij.so 2089
        return  {'status':'fail','message':'Something is wrong'}
16885 kshitij.so 2090
    finally:
2091
        session.close()
16556 kshitij.so 2092
 
16631 manish.sha 2093
def _updateApprovedCashbackToUser(approvedAppTransactionId):
2094
    approvedAppTransaction = approved_app_transactions.get_by(id=approvedAppTransactionId)
16915 manish.sha 2095
    if approvedAppTransaction.retailer_id < 0:
2096
        return False
2097
 
16631 manish.sha 2098
    currentMonth = datetime.today().month
2099
    currentDay = datetime.today().day
2100
    currentYear = datetime.today().year
2101
    fortNight = (currentMonth - 1)*2 + (currentDay/15)
2102
    if currentDay == 30 or currentDay ==31:
2103
        fortNight = fortNight-1
2104
    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()
2105
    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()
2106
    try:
2107
        if userAppCashbackObj is None:
2108
            userAppCashbackObj = user_app_cashbacks()
2109
            userAppCashbackObj.user_id = approvedAppTransaction.retailer_id
2110
            userAppCashbackObj.status = 'Approved'
16915 manish.sha 2111
            userAppCashbackObj.amount = approvedAppTransaction.final_user_payout
16631 manish.sha 2112
            userAppCashbackObj.fortnightOfYear = fortNight
2113
            userAppCashbackObj.yearVal = currentYear
2114
        else:
16915 manish.sha 2115
            userAppCashbackObj.amount = userAppCashbackObj.amount + approvedAppTransaction.final_user_payout
16631 manish.sha 2116
 
2117
        if userAppInstallObj is None:
2118
            app_offer = app_offers.get_by(id=approvedAppTransaction.app_id)
2119
            userAppInstallObj = user_app_installs()
2120
            userAppInstallObj.user_id = approvedAppTransaction.retailer_id
2121
            userAppInstallObj.fortnightOfYear = fortNight
2122
            userAppInstallObj.transaction_date = datetime(currentYear, currentMonth, currentDay, 0, 0, 0, 0).date()
2123
            userAppInstallObj.app_id = approvedAppTransaction.app_id
2124
            userAppInstallObj.app_name = app_offer.app_name
2125
            userAppInstallObj.installCount = 1
16915 manish.sha 2126
            userAppInstallObj.payoutAmount = approvedAppTransaction.final_user_payout
16631 manish.sha 2127
        else:
2128
            userAppInstallObj.installCount = userAppInstallObj.installCount + 1
16915 manish.sha 2129
            userAppInstallObj.payoutAmount = userAppInstallObj.payoutAmount +approvedAppTransaction.final_user_payout
16631 manish.sha 2130
 
2131
        approvedAppTransaction.cashBackConsidered = True
2132
        session.commit()
2133
        return True
2134
    except:
2135
        session.rollback()
16636 manish.sha 2136
        print traceback.print_exc()
16631 manish.sha 2137
        return False
16693 manish.sha 2138
 
2139
def _sendAlertForAppPayouts(app_id, offerPrice, userPayout, payout):
2140
    m = Email('localhost')
2141
    mFrom = "dtr@shop2020.in"
2142
    m.setFrom(mFrom)
2143
    mTo = ['rajneesh.arora@saholic.com','kshitij.sood@saholic.com','chaitnaya.vats@saholic.com','manoj.kumar@saholic.com','manish.sharma@shop2020.in']
2144
    for receipient in mTo:
2145
        m.addRecipient(receipient)
2146
    appOffer = app_offers.get_by(id=app_id)
2147
    if offerPrice != payout:
2148
        m.setSubject("Mismatch in Offer Price and Actual Pay Out for App Id:- "+str(appOffer.id)+" App Name:- "+str(appOffer.app_name))
2149
        message1 = "Offer Price:- "+ str(appOffer.offer_price) + "\n" + "Actual Pay Out:- "+ str(payout)
2150
        m.setTextBody(message1)
2151
    if userPayout > payout:
2152
        m.setSubject("User Pay Out greater than actual PayOut for App Id:- "+str(appOffer.id)+" App Name:- "+str(appOffer.app_name))
2153
        message2 = "User Pay Out Price:- "+ str(appOffer.user_payout) + "\n" + "Actual Pay Out:- "+ str(payout)
2154
        m.setTextBody(message2)
2155
    m.send()
16631 manish.sha 2156
 
16789 amit.gupta 2157
def rejectCashback(orderId, subOrderId):
16833 amit.gupta 2158
    cashBack = get_mongo_connection().Dtr.merchantOrder.update({"orderId":orderId, "subOrders.merchantSubOrderId":subOrderId}, 
16789 amit.gupta 2159
                                                               {"$set":{"subOrders.$.cashBackStatus":CB_REJECTED}})
16837 amit.gupta 2160
    print cashBack
16836 amit.gupta 2161
    return cashBack.get("nModified")
16894 manish.sha 2162
 
2163
def getAppOffers(retailer_id):
2164
    if not bool(mc.get("cached_app_offers_"+str(retailer_id))):
2165
        populateAppOffers(retailer_id)
2166
    return mc.get("cached_app_offers_"+str(retailer_id)) 
2167
 
2168
def populateAppOffers(retailerId):
2169
    retailerId = int(retailerId)
2170
    #offset = req.get_param_as_int("offset")
2171
    #limit = req.get_param_as_int("limit")
16941 manish.sha 2172
    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()
2173
    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 2174
    #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()
2175
 
2176
    appOffersMap = {}
2177
    priorityList = []
2178
    priorityMap = {}
2179
    for offer in priortizeders:
16941 manish.sha 2180
        if priorityMap.has_key(long(offer[1])):
2181
            offersVal = priorityMap.get(long(offer[1]))
2182
            offersVal.append(offer)
2183
            priorityMap[long(offer[1])]=offersVal
2184
        else:
2185
            offersVal = []
2186
            offersVal.append(offer)
2187
            priorityMap[long(offer[1])]=offersVal
2188
 
16894 manish.sha 2189
    priorityList = sorted(priorityMap)
2190
 
2191
    maxCount = len(nonPriortizedOffers) + len(priortizeders)
2192
 
16909 manish.sha 2193
    if priorityList is not None and len(priorityList)>0:
2194
        if maxCount < max(priorityList):
2195
            maxCount = max(priorityList)
16894 manish.sha 2196
 
2197
    count = 1
2198
    blockedPlaces = []
2199
    availablePlaces = []
2200
    while count <= maxCount:
2201
        if count in priorityList:
2202
            blockedPlaces.append(count)
2203
        else:
2204
            availablePlaces.append(count)
2205
        count = count +1
16941 manish.sha 2206
    print 'Blocked Places', blockedPlaces
16894 manish.sha 2207
    for val in blockedPlaces:
16941 manish.sha 2208
        key = val
2209
        for offerObj in priorityMap.get(val):
2210
            while appOffersMap.has_key(key):
2211
                key = key+1
2212
            appOffersMap[key] = long(offerObj[0])
2213
            if key in availablePlaces:
2214
                availablePlaces.remove(key)
2215
 
2216
    print 'Available Places', availablePlaces
2217
 
16894 manish.sha 2218
    i=0
2219
    for val in availablePlaces:
16899 manish.sha 2220
        if i<len(nonPriortizedOffers):
16902 manish.sha 2221
            appOffersMap[val]= long(nonPriortizedOffers[i][0])
16899 manish.sha 2222
        else:
2223
            break
2224
        i=i+1
16901 manish.sha 2225
    print 'AppOffersMap', appOffersMap
16894 manish.sha 2226
 
2227
    finalAppOffersMap = {}
2228
    if len(appOffersMap) > 0:
2229
        for key in sorted(appOffersMap):               
2230
            finalAppOffersMap[key] = appOffersMap[key]
2231
 
2232
        mc.set("cached_app_offers_"+str(retailerId), finalAppOffersMap, 120)
2233
    else:
2234
        print 'No Offers'
2235
        mc.set("cached_app_offers_"+str(retailerId), {}, 10)              
17280 manish.sha 2236
 
18384 amit.gupta 2237
def sendNotification(userIds, campaignName, title, message,notificationtype, url, expiresat='2999-01-01', sendsms=False, smstext=None):
2238
    campaignId = addNotificationCampaign(campaignName, title, message, notificationtype, url, None, sendsms, smstext)
17280 manish.sha 2239
    payload = {}
2240
    payload["user_id"]= userIds[0]
2241
    payload["type"]="pending"
2242
    payload["notification_campaign_id"]= campaignId
2243
    payload["status"]=0
16546 kshitij.so 2244
 
17280 manish.sha 2245
    payloadList = []
2246
    payloadList.append(payload)
17281 manish.sha 2247
    jsonObj = json.dumps([dict(pn) for pn in payloadList])
2248
    print jsonObj
2249
    pushpostrequest = urllib2.Request("http://45.33.50.227:3001/addPushNotification")
2250
    pushpostrequest.add_header('Content-Type', 'application/json')
2251
    response = urllib2.urlopen(pushpostrequest, jsonObj).read()
17280 manish.sha 2252
    print response
2253
 
18384 amit.gupta 2254
def addNotificationCampaign(name, title, message, type, url, sql, sendsms, smstext):
17280 manish.sha 2255
    notificationCampaign = notification_campaigns()
2256
    notificationCampaign.name = name
2257
    notificationCampaign.title = title
2258
    notificationCampaign.type = type
2259
    notificationCampaign.message = message
2260
    notificationCampaign.url = url
2261
    notificationCampaign.sql = sql
2262
    notificationCampaign.expiresat = datetime(2999, 1, 1)
2263
    notificationCampaign.status = 'active'
2264
    notificationCampaign.created = datetime.now()
18384 amit.gupta 2265
    notificationCampaign.sendsms = sendsms
2266
    notificationCampaign.messagetext = smstext
17280 manish.sha 2267
 
2268
    session.commit()
2269
    campaignId = notificationCampaign.id
2270
 
2271
    session.close()
2272
    return campaignId
17302 kshitij.so 2273
 
2274
def getDummyDeals(categoryId, offset, limit):
2275
    outer_query = []
2276
    outer_query.append({"showDeal":1})
2277
    outer_query.append({"category_id":categoryId})
2278
    query = {}
2279
    query['$gt'] = -100
2280
    outer_query.append({'totalPoints':query})
2281
    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))
2282
    returnObj = []
2283
    for deal in all_deals:
17306 kshitij.so 2284
        item = list(get_mongo_connection().Catalog.MasterData.find({'_id':deal['_id']}))
17734 kshitij.so 2285
        returnObj.append(getItemObjForStaticDeals(item[0],transform=True))
17302 kshitij.so 2286
    return returnObj
17367 kshitij.so 2287
 
17469 kshitij.so 2288
def searchDummyDeals(search_term , limit, offset):
17367 kshitij.so 2289
    data = []
2290
    uniqueMap = {}
2291
    if search_term is not None:
2292
        terms = search_term.split(' ')
2293
        outer_query = []
2294
        for term in terms:
2295
            outer_query.append({"source_product_name":re.compile(term, re.IGNORECASE)})
2296
        try:
2297
            collection = get_mongo_connection().Catalog.MasterData.find({"$and":outer_query,'source_id':{'$in':SOURCE_MAP.keys()}})
2298
            for record in collection:
2299
                data.append(record)
2300
        except:
2301
            pass
2302
    else:
2303
        collection = get_mongo_connection().Catalog.MasterData.find({'source_id':{'$in':SOURCE_MAP.keys()}})
2304
        for record in collection:
2305
            data.append(record)
2306
    for x in data:
2307
        if not uniqueMap.has_key(x['skuBundleId']):
17469 kshitij.so 2308
            uniqueMap[x['skuBundleId']] = {'source_product_name':x['source_product_name'],'skuBundleId':x['skuBundleId'],'thumbnail':x['thumbnail']}
17367 kshitij.so 2309
 
17469 kshitij.so 2310
    if (offset + limit) > len(uniqueMap.values()):
2311
        limit = len(uniqueMap.values()) - offset - 1
2312
 
2313
    count = 0
2314
#     for x in uniqueMap.values():
2315
#         print count,
2316
#         print '\t',
2317
#         print x
2318
#         count = count+1
17555 kshitij.so 2319
 
17469 kshitij.so 2320
    print offset
2321
    print limit
2322
 
2323
    return uniqueMap.values()[offset:limit+offset]
17367 kshitij.so 2324
 
17469 kshitij.so 2325
 
2326
def getDummyPricing(skuBundleId):
2327
    collection = get_mongo_connection().Catalog.MasterData.find({'source_id':{'$in':SOURCE_MAP.keys()},'skuBundleId':skuBundleId,'in_stock':1})
2328
    print collection.count()
2329
    cheapest = 99999999
2330
    cheapestDetails= None
2331
    returnMap = {}
2332
 
2333
    for d in collection:
2334
        if d['available_price'] < cheapest:
2335
            cheapestDetails = d
2336
            cheapest = int(d['available_price'])
2337
        if returnMap.has_key(d['source_id']):
17733 kshitij.so 2338
            d = getItemObjForStaticDeals(d,transform=True)
17469 kshitij.so 2339
            d['toShowStore'] = 0
2340
            returnMap[d['source_id']].append(d)
2341
        else:
2342
            temp = []
17733 kshitij.so 2343
            d = getItemObjForStaticDeals(d,transform=True)
17469 kshitij.so 2344
            d['toShowStore'] = 1
2345
            temp.append(d)
2346
            returnMap[d['source_id']] = temp
2347
    returnMap['cheapest'] = cheapestDetails
2348
    for y in returnMap.itervalues():
2349
        if isinstance(y, (list, tuple)):
2350
            (y[len(y)-1])['lastElement'] = 1
2351
        else:
2352
            pass
2353
    if returnMap['cheapest'] ==None:
2354
        dum = get_mongo_connection().Catalog.MasterData.find_one({'skuBundleId':skuBundleId,'source_id':{"$in":SOURCE_MAP.keys()}})
2355
        returnMap['cheapest'] = {'thumbnail':dum['thumbnail'],'source_product_name':dum['source_product_name']}
2356
    return returnMap
17555 kshitij.so 2357
 
17603 kshitij.so 2358
 
17555 kshitij.so 2359
def addDealObject(data):
17570 kshitij.so 2360
    if data.get('img_url') is None or data.get('img_url')=="" or data.get('name') is None or data.get('name')=="":
2361
        return {0:'Invalid data'}   
17555 kshitij.so 2362
    try:
2363
        max_id = list(get_mongo_connection().Catalog.DealObject.find().sort([('_id',pymongo.DESCENDING)]).limit(1))
2364
        if len(max_id) ==0:
2365
            max_id = 0
17559 kshitij.so 2366
        else:
2367
            max_id = max_id[0]['_id']
2368
        data['_id'] = max_id +1
17555 kshitij.so 2369
        get_mongo_connection().Catalog.DealObject.insert(data)
2370
        return {1:'Data added successfully'}
2371
    except:
2372
        return {0:'Error in adding data'}
2373
 
17561 kshitij.so 2374
def getAllDealObjects(offset, limit):
2375
    data = []
2376
    collection = get_mongo_connection().Catalog.DealObject
2377
    cursor = collection.find({}).skip(offset).limit(limit)
2378
    for val in cursor:
17564 kshitij.so 2379
        data.append({'_id':val['_id'],'name':val['name']})
17561 kshitij.so 2380
    return data
17564 kshitij.so 2381
 
2382
def deleteDealObject(id):
2383
    try:
2384
        get_mongo_connection().Catalog.DealObject.remove({'_id':id})
17616 kshitij.so 2385
        get_mongo_connection().Catalog.FeaturedDealsDealObject.remove({'_id':id})
17564 kshitij.so 2386
        return {1:"Deal Object deleted"}
2387
    except:
2388
        return {0:"Error in deleting object"}
17566 kshitij.so 2389
 
2390
def getDealObjectById(id):
2391
    try:
2392
        data = get_mongo_connection().Catalog.DealObject.find({'_id':id})
2393
        return data
2394
    except:
17570 kshitij.so 2395
        return {}
17561 kshitij.so 2396
 
17570 kshitij.so 2397
def updateDealObject(data):
2398
    try:
2399
        _id = data['_id']
2400
        data.pop('_id')
2401
        get_mongo_connection().Catalog.DealObject.update({'_id':_id},{"$set":data},upsert=False)
2402
        return {1:"Data updated successfully"}
2403
    except:
2404
        return {0:"Error in updating data"}
2405
 
17610 kshitij.so 2406
def getAllFeaturedDealsForDealObject(offset, limit):
2407
    data = []
2408
    collection = get_mongo_connection().Catalog.FeaturedDealsDealObject
2409
    cursor = collection.find({}).skip(offset).limit(limit)
2410
    for val in cursor:
2411
        data.append(val)
2412
    return data
2413
 
2414
def addFeaturedDealForDealObject(data):
19280 kshitij.so 2415
    print data
2416
 
17610 kshitij.so 2417
    collection = get_mongo_connection().Catalog.FeaturedDealsDealObject
2418
    cursor = collection.find({'_id':data['_id']})
2419
    master = get_mongo_connection().Catalog.DealObject.find_one({'_id':data['_id']})
2420
    if master is None:
2421
        return {0:"Deal Object id wrong"}
2422
    otherInfoObj = data['otherInfo']
2423
    toPop = []
2424
    for x,y in otherInfoObj.iteritems():
19280 kshitij.so 2425
        if y==0 or y=="":
17610 kshitij.so 2426
            toPop.append(x)
2427
 
2428
    for popItem in toPop:
2429
        otherInfoObj.pop(popItem)
2430
    if len(otherInfoObj.keys())==0:
2431
        return {0:"No rank info to add"}
2432
 
2433
    for x,y in otherInfoObj.iteritems():
2434
        exist = get_mongo_connection().Catalog.FeaturedDealsDealObject.find({'otherInfo.'+x:y})
2435
        if exist.count() >0:
2436
            return {0:"Rank already assigned Deal Object Id %s"%(exist[0]['_id'])}
2437
    if cursor.count() > 0:
2438
        return {0:"Deal Object Id information already present."}
2439
    else:
2440
        collection.insert(data)
2441
        return {1:"Data added successfully"}
2442
 
17616 kshitij.so 2443
def deleteFeaturedDealObject(id):
2444
    try:
2445
        get_mongo_connection().Catalog.FeaturedDealsDealObject.remove({'_id':id})
2446
        return {1:"Deal Object deleted"}
2447
    except:
2448
        return {0:"Error in deleting object"}
17654 kshitij.so 2449
 
2450
def getSubCategoryForFilter(category_id):
2451
    if mc.get("subCategoryFilter") is None:
2452
        print "Populating subcategory data for category_id %d" %(category_id)
2453
        tabData, mobData, accData = [], [], []
2454
 
2455
        accessoriesDeals = get_mongo_connection().Catalog.Deals.aggregate([
2456
                                                                      {"$match":{"category_id":6,"showDeal":1,"totalPoints":{"$gt":-100}}
2457
                                                                    },
2458
                                                                 {"$group" : 
2459
                                                                  {'_id':{'subCategoryId':'$subCategoryId','subCategory':'$subCategory'},'count':{'$sum':1}}
2460
                                                                  }
2461
                                                                ])
2462
 
2463
        for accessoryDeal in accessoriesDeals['result']:
2464
            if accessoryDeal.get('_id').get('subCategoryId') != 0:
2465
                tempMap = {}
2466
                tempMap['subCategory'] = accessoryDeal.get('_id').get('subCategory')
2467
                tempMap['subCategoryId'] = accessoryDeal.get('_id').get('subCategoryId')
2468
                tempMap['count'] = accessoryDeal.get('count')
2469
                accData.append(tempMap)
2470
 
2471
 
2472
        mc.set("subCategoryFilter",{3:mobData, 5:tabData, 6:accData}, 600)  
2473
 
2474
    return sorted(mc.get("subCategoryFilter").get(category_id), key = lambda x: (-x['count'], x['subCategory']))
17610 kshitij.so 2475
 
17727 kshitij.so 2476
def dummyLogin(data):
17731 kshitij.so 2477
    exist = list(get_mongo_connection().Catalog.DummyUser.find({'email':data['email'],'password':data['password']}))
17727 kshitij.so 2478
    if len(exist) > 0:
17728 kshitij.so 2479
        return {'user_id':exist[0]['_id'],'fullName':exist[0]['fullName']}
17727 kshitij.so 2480
    else:
2481
        return {'user_id':0}
17616 kshitij.so 2482
 
17727 kshitij.so 2483
def dummyRegister(data):
2484
    try:
2485
        exist = list(get_mongo_connection().Catalog.DummyUser.find({'email':data['email']}))
2486
        if len(exist) > 0:
2487
            return {'msg':"Email already registered",'user_id':0}
2488
        else:
2489
            max_id = list(get_mongo_connection().Catalog.DummyUser.find().sort([('_id',pymongo.DESCENDING)]).limit(1))
2490
            if len(max_id) ==0:
2491
                max_id = 0
2492
            else:
2493
                max_id = max_id[0]['_id']
2494
            data['_id'] = max_id +1
2495
            get_mongo_connection().Catalog.DummyUser.insert(data)
17728 kshitij.so 2496
            return {'msg':"Registration successful",'user_id':data['_id'],'fullName':data['fullName']}
17727 kshitij.so 2497
    except:
2498
        return {'msg':"Error in registration.",'user_id':0}
2499
 
17731 kshitij.so 2500
def getDummyUser(user_id):
2501
    exist = list(get_mongo_connection().Catalog.DummyUser.find({'_id':user_id}))
2502
    if len(exist) > 0:
2503
        return exist[0]
2504
    else:
2505
        return {'user_id':0,'fullName':"",'email':"","contactNumber":""}
2506
 
2507
def updateDummyUser(data):
2508
    try:
17732 kshitij.so 2509
        get_mongo_connection().Catalog.DummyUser.update({'_id':data['user_id']},{"$set":data},upsert=False)
17731 kshitij.so 2510
        return {'msg':"Data updated successfuly",'response':1}
2511
    except:
2512
        return {'msg':"Unable to update data",'response':0}
17936 kshitij.so 2513
 
18089 kshitij.so 2514
def getDealsForSearchText(subCategoryIds, searchTerm, offset, limit):
2515
    subCategories= [int(subCategoryId) for subCategoryId in subCategoryIds.split('^')]
18106 kshitij.so 2516
    print "SubCategories are ",subCategories
17936 kshitij.so 2517
    payload = {
18106 kshitij.so 2518
    "query": {
17936 kshitij.so 2519
        "bool": {
18106 kshitij.so 2520
            "must": [{
2521
                    "match": {
2522
                        "title": {
2523
                            "query": searchTerm,
2524
                            "operator": "and"
2525
                        }
17936 kshitij.so 2526
                    }
18106 kshitij.so 2527
                },
2528
 
2529
                {
2530
                    "in": {
2531
                        "subCategoryId": subCategories
2532
                    }
17936 kshitij.so 2533
                }
18106 kshitij.so 2534
 
2535
            ]
17936 kshitij.so 2536
        }
19135 kshitij.so 2537
    },
2538
    "sort": { "dealPoints": { "order": "desc" }}
18106 kshitij.so 2539
}
17944 kshitij.so 2540
    result =  get_elastic_search_connection().search(index="my_index", body=payload, from_=offset, size=limit)
17936 kshitij.so 2541
    totalCount= result['hits']['total']
2542
    temp = []
2543
    bundles = []
2544
    if len(result['hits']['hits']) > 0:
2545
        for x in result['hits']['hits']:
2546
            tempMap = {}
2547
            tempMap = {'skuBundleId':x['_source']['id'],'title':x['_source']['title']}
2548
            temp.append(tempMap)
2549
            bundles.append(x['_source']['id'])
18271 kshitij.so 2550
    #return temp
17936 kshitij.so 2551
    return getDealsForNotification(bundles, skipSplitting=True)
17731 kshitij.so 2552
 
18089 kshitij.so 2553
def getCountForSearchText(subCategoryIds, searchTerm):
2554
    subCategories= [int(subCategoryId) for subCategoryId in subCategoryIds.split('^')]
17936 kshitij.so 2555
    payload = {
18106 kshitij.so 2556
    "query": {
17936 kshitij.so 2557
        "bool": {
18106 kshitij.so 2558
            "must": [{
2559
                    "match": {
2560
                        "title": {
2561
                            "query": searchTerm,
2562
                            "operator": "and"
2563
                        }
17936 kshitij.so 2564
                    }
18106 kshitij.so 2565
                },
2566
 
2567
                {
2568
                    "in": {
2569
                        "subCategoryId": subCategories
2570
                    }
17936 kshitij.so 2571
                }
18106 kshitij.so 2572
 
2573
            ]
17936 kshitij.so 2574
        }
2575
    }
18106 kshitij.so 2576
}
17731 kshitij.so 2577
 
17944 kshitij.so 2578
    result =  get_elastic_search_connection().search(index="my_index", body=payload)
17936 kshitij.so 2579
    totalCount= result['hits']['total']
2580
    return {'searchTerm':searchTerm,'count':totalCount}
18271 kshitij.so 2581
 
2582
def getDealById(id):
2583
    item = list(get_mongo_connection().Catalog.MasterData.find({'_id':int(id)}))
2584
    d = get_mongo_connection().Catalog.Deals.find_one({'_id':int(id)})
19193 kshitij.so 2585
    if len(item) ==0:
2586
        return {}
18271 kshitij.so 2587
    if d is None:
2588
        d = {'showDp':0,'dp':0}
2589
    try:
2590
        cashBack = getCashBack(item[0]['_id'], item[0]['source_id'], item[0]['category_id'])
2591
        if not cashBack or cashBack.get('cash_back_status')!=1:
2592
            item[0]['cash_back_type'] = 0
2593
            item[0]['cash_back'] = 0
2594
        else:
2595
            if cashBack.get('maxCashBack') is not None:
2596
 
2597
                if cashBack.get('cash_back_type') ==1 and (float(cashBack.get('cash_back'))*item[0]['available_price'])/100 > cashBack.get('maxCashBack'):
2598
                    cashBack['cash_back_type'] = 2
2599
                    cashBack['cash_back'] = cashBack['maxCashBack']
2600
                elif cashBack.get('cash_back_type') ==2 and cashBack.get('cash_back') > cashBack.get('maxCashBack'):
2601
                    cashBack['cash_back'] = cashBack['maxCashBack']
17936 kshitij.so 2602
 
18271 kshitij.so 2603
            item[0]['cash_back_type'] = int(cashBack['cash_back_type'])
2604
            item[0]['cash_back'] = cashBack['cash_back']
2605
    except:
2606
        print "Error in adding cashback to deals"
2607
        item[0]['cash_back_type'] = 0
2608
        item[0]['cash_back'] = 0
2609
    try:
2610
        item[0]['dp'] = d['dp']
2611
        item[0]['showDp'] = d['showDp']
2612
    except:
2613
        item[0]['dp'] = 0.0
2614
        item[0]['showDp'] = 0
2615
    try:
2616
        item[0]['thumbnail'] = item[0]['thumbnail'].strip()
2617
    except:
2618
        pass
2619
 
2620
    try:
2621
        if item[0]['showVideo']==0:
2622
            item[0]['videoLink'] =""
2623
    except:
2624
        item[0]['videoLink'] =""
2625
    try:
2626
        if item[0]['quantity'] >1:
2627
            ppq = float(item[0]['available_price'])/item[0]['quantity']
2628
 
2629
            if ppq == round(ppq):
2630
                item[0]['ppq'] = int(ppq)
2631
            else:
2632
                item[0]['ppq'] = round(ppq,2)
2633
        else:
2634
            item[0]['ppq'] = 0
2635
    except:
2636
        item[0]['ppq'] = 0
2637
    if item[0]['category_id']!=6:
2638
        try:
18830 kshitij.so 2639
            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']))
2640
            item[0]['filterTextBrand'] = (item[0]['brand'])
18271 kshitij.so 2641
        except:
18830 kshitij.so 2642
            pass
18271 kshitij.so 2643
    else:
2644
        try:
2645
            if item[0]['subCategory']=='' or item[0]['subCategory'] is None or item[0]['subCategoryId']==0:
2646
                raise
18830 kshitij.so 2647
            item[0]['filterLinkSubCategory'] = '/category/'+str(int(item[0]['category_id']))+'?searchFor='+urllib.quote(item[0]['subCategory'])+'&filter=subcategory&subcategories='+str(int(item[0]['subCategoryId']))
2648
            item[0]['filterTextSubCategory'] = (item[0]['subCategory'])
2649
            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']))
2650
            item[0]['filterTextBrand'] = (item[0]['brand'])
18271 kshitij.so 2651
        except:
18830 kshitij.so 2652
            pass
18271 kshitij.so 2653
    try:
2654
        if item[0]['source_id']==4:
2655
            item_availability_info = mc.get("item_availability_"+str(item[0]['identifier']).strip())
2656
            if item_availability_info is None or len(item_availability_info)==0:
2657
                item[0]['availabilityInfo'] = [{}]
2658
            else:
2659
                item[0]['availabilityInfo'] = item_availability_info
2660
    except:
2661
        item[0]['availabilityInfo'] = [{}]
19193 kshitij.so 2662
 
2663
    if item[0]['source_id']==4:
2664
        for av_info in item[0]['availabilityInfo']:
2665
            if not av_info:
2666
                continue
2667
            av_info['cash_back'] = item[0]['cash_back']
2668
            av_info['cash_back_type'] = item[0]['cash_back_type']
2669
            netPriceAfterCashBack = av_info['sellingPrice'] 
19199 kshitij.so 2670
            if av_info['cash_back_type'] ==1:
19207 kshitij.so 2671
                netPriceAfterCashBack = av_info['sellingPrice'] - math.floor(float(av_info['sellingPrice'])*av_info['cash_back']/100)
19199 kshitij.so 2672
            elif av_info['cash_back_type'] ==2:
19207 kshitij.so 2673
                netPriceAfterCashBack = av_info['sellingPrice'] - math.floor(av_info['cash_back'])
19193 kshitij.so 2674
            else:
2675
                pass
2676
            av_info['netPriceAfterCashBack'] = netPriceAfterCashBack
2677
 
2678
    if item[0]['source_id'] != SOURCE_MAP.get("PAYTM.COM"):
2679
        if item[0]['codAvailable'] ==1:
2680
            paytmPrice = item[0]['available_price']
2681
        else:
2682
            paytmPrice = item[0]['gross_price']
2683
 
2684
        if item[0]['cash_back_type'] ==1:
19207 kshitij.so 2685
            item[0]['netPriceAfterCashBack'] = paytmPrice -  math.floor(float(paytmPrice)*item[0]['cash_back']/100)
19193 kshitij.so 2686
        elif item[0]['cash_back_type'] ==2:
19207 kshitij.so 2687
            item[0]['netPriceAfterCashBack'] = paytmPrice -  math.floor(item[0]['cash_back'])
19193 kshitij.so 2688
        else:
2689
            item[0]['netPriceAfterCashBack'] = paytmPrice
2690
 
2691
    else:
2692
        if item[0]['cash_back_type'] ==1:
19207 kshitij.so 2693
            item[0]['netPriceAfterCashBack'] = item[0]['available_price'] -  math.floor(float(item[0]['available_price'])*item[0]['cash_back']/100)
19193 kshitij.so 2694
        elif item[0]['cash_back_type'] ==2:
19207 kshitij.so 2695
            item[0]['netPriceAfterCashBack'] = item[0]['available_price'] -  math.floor(item[0]['cash_back'])
19193 kshitij.so 2696
        else:
2697
            item[0]['netPriceAfterCashBack'] = item[0]['available_price']
2698
 
18271 kshitij.so 2699
    return item[0]
2700
 
19288 kshitij.so 2701
def getOfferForUser(userId):
2702
    specialOffer = {}
2703
    promoOffer = get_mongo_connection().Catalog.PromoOffer.find_one({'user_id':userId})
2704
    try:
2705
        if promoOffer is not None:
2706
            offer = get_mongo_connection().Catalog.Promotions.find_one({'_id':promoOffer.get('offer_id')})
2707
            if offer is None:
2708
                raise
2709
            promo = Promotion(offer.get('offer_id'),offer.get('offer_name'),offer.get('offer_description') , offer.get('categories_applicable'), offer.get('sub_categories_not_applicable'),
2710
                     offer.get('startDate'), offer.get('endDate'), promoOffer.get('target1'), promoOffer.get('target1_cash_back_percetage'), promoOffer.get('target2'), promoOffer.get('target2_cash_back_percetage'), promoOffer.get('maxCashBack'), offer.get('url'))
2711
 
2712
            specialOffer = promo.__dict__
2713
    except:
2714
        pass
2715
    return specialOffer
2716
 
18271 kshitij.so 2717
 
13572 kshitij.so 2718
def main():
19135 kshitij.so 2719
    getDealsForSearchText("20", 'Samsung', 0, 10)
17944 kshitij.so 2720
 
13572 kshitij.so 2721
if __name__=='__main__':
13932 amit.gupta 2722
    main()
17469 kshitij.so 2723
 
17936 kshitij.so 2724