Subversion Repositories SmartDukaan

Rev

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