Subversion Repositories SmartDukaan

Rev

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