Subversion Repositories SmartDukaan

Rev

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