Subversion Repositories SmartDukaan

Rev

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