Subversion Repositories SmartDukaan

Rev

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