Subversion Repositories SmartDukaan

Rev

Rev 13932 | Rev 13986 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
13928 kshitij.so 1
import pymongo
13572 kshitij.so 2
from datetime import datetime
13927 amit.gupta 3
from dtr.main import Store
13785 kshitij.so 4
from dtr.utils.utils import to_java_date
13970 kshitij.so 5
from operator import itemgetter
6
from bson.objectid import ObjectId
13572 kshitij.so 7
 
8
con = None
13907 kshitij.so 9
cashBackMap = {}
13921 kshitij.so 10
itemCashBackMap = {}
13572 kshitij.so 11
 
12
def get_mongo_connection(host='localhost', port=27017):
13
    global con
14
    if con is None:
15
        print "Establishing connection %s host and port %d" %(host,port)
16
        try:
17
            con = pymongo.MongoClient(host, port)
18
        except Exception, e:
19
            print e
20
            return None
21
    return con
22
 
13907 kshitij.so 23
def populateCashBack():
13921 kshitij.so 24
    print "Populating cashback"
13907 kshitij.so 25
    global cashBackMap
13921 kshitij.so 26
    global itemCashBackMap
27
    cashBackMap = {}
28
    itemCashBackMap = {}
13907 kshitij.so 29
    cashBack = list(get_mongo_connection().Catalog.CategoryCashBack.find())
30
    for row in cashBack:
13970 kshitij.so 31
        temp_map = {}
32
        temp_list = []
13907 kshitij.so 33
        if cashBackMap.has_key(row['source_id']):
34
            arr = cashBackMap.get(row['source_id'])
35
            for val in arr:
36
                temp_list.append(val)
37
            temp_map[row['category_id']] = row
38
            temp_list.append(temp_map)
39
            cashBackMap[row['source_id']] = temp_list 
40
        else:
41
            temp_map[row['category_id']] = row
42
            temp_list.append(temp_map)
43
            cashBackMap[row['source_id']] = temp_list
13921 kshitij.so 44
    itemCashBack = list(get_mongo_connection().Catalog.ItemCashBack.find())
45
    for row in itemCashBack:
46
        if not itemCashBackMap.has_key(row['skuId']):
47
            itemCashBackMap[row['skuId']] = row
13907 kshitij.so 48
 
13572 kshitij.so 49
def addCategoryDiscount(data):
13970 kshitij.so 50
    collection = get_mongo_connection().Catalog.CategoryDiscount
13572 kshitij.so 51
    query = []
52
    data['brand'] = data['brand'].strip().upper()
13970 kshitij.so 53
    data['discountType'] = data['discountType'].upper().strip()
13572 kshitij.so 54
    query.append({"brand":data['brand']})
55
    query.append({"category_id":data['category_id']})
56
    r = collection.find({"$and":query})
57
    if r.count() > 0:
13639 kshitij.so 58
        return {0:"Brand & Category info already present."}
13572 kshitij.so 59
    else:
60
        collection.insert(data)
13970 kshitij.so 61
        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 62
        return {1:"Data added successfully"}
13572 kshitij.so 63
 
13970 kshitij.so 64
def updateCategoryDiscount(data,_id):
65
    try:
66
        collection = get_mongo_connection().Catalog.CategoryDiscount
67
        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)
68
        get_mongo_connection().Catalog.MasterData.update({'brand':data['brand'],'category_id':data['category_id']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=True)
69
        return {1:"Data updated successfully"}
70
    except:
71
        return {0:"Data not updated."}
72
 
73
 
13572 kshitij.so 74
def getAllCategoryDiscount():
75
    data = []
13970 kshitij.so 76
    collection = get_mongo_connection().Catalog.CategoryDiscount
13572 kshitij.so 77
    cursor = collection.find()
78
    for val in cursor:
79
        data.append(val)
80
    return data
81
 
82
def addSchemeDetailsForSku(data):
13970 kshitij.so 83
    collection = get_mongo_connection().Catalog.SkuSchemeDetails
13572 kshitij.so 84
    data['addedOn'] = to_java_date(datetime.now())
85
    collection.insert(data)
13639 kshitij.so 86
    return {1:"Data added successfully"}
13572 kshitij.so 87
 
88
def getAllSkuWiseSchemeDetails():
89
    data = []
13970 kshitij.so 90
    collection = get_mongo_connection().Catalog.SkuSchemeDetails
13572 kshitij.so 91
    cursor = collection.find()
92
    for val in cursor:
93
        data.append(val)
94
    return data
95
 
96
def addSkuDiscountInfo(data):
13970 kshitij.so 97
    collection = get_mongo_connection().Catalog.SkuDiscountInfo
13572 kshitij.so 98
    cursor = collection.find({"sku":data['sku']})
13642 kshitij.so 99
    if cursor.count() > 0:
13639 kshitij.so 100
        return {0:"Sku information already present."}
13572 kshitij.so 101
    else:
102
        collection.insert(data)
13970 kshitij.so 103
        get_mongo_connection().Catalog.MasterData.update({'_id':data['sku']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=False)
13639 kshitij.so 104
        return {1:"Data added successfully"}
13572 kshitij.so 105
 
13970 kshitij.so 106
def getallSkuDiscountInfo(offset, limit):
13572 kshitij.so 107
    data = []
13970 kshitij.so 108
    collection = get_mongo_connection().Catalog.SkuDiscountInfo
109
    cursor = collection.find().skip(offset).limit(limit)
13572 kshitij.so 110
    for val in cursor:
13970 kshitij.so 111
        master = list(get_mongo_connection().Catalog.MasterData.find({'_id':val['sku']}))
112
        if len(master) > 0:
113
            val['brand'] = master['brand']
114
            val['source_product_name'] = master['source_product_name']
115
            val['skuBundleId'] = master['skuBundleId']
116
        else:
117
            val['brand'] = ""
118
            val['source_product_name'] = ""
119
            val['skuBundleId'] = ""
13572 kshitij.so 120
        data.append(val)
121
    return data
122
 
13970 kshitij.so 123
def updateSkuDiscount(data,_id):
124
    try:
125
        collection = get_mongo_connection().Catalog.SkuDiscountInfo
126
        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)
127
        get_mongo_connection().Catalog.MasterData.update({'_id':data['sku']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=False)
128
        return {1:"Data updated successfully"}
129
    except:
130
        return {0:"Data not updated."}
131
 
132
 
13572 kshitij.so 133
def addExceptionalNlc(data):
13970 kshitij.so 134
    collection = get_mongo_connection().Catalog.ExceptionalNlc
13572 kshitij.so 135
    cursor = collection.find({"sku":data['sku']})
13642 kshitij.so 136
    if cursor.count() > 0:
13639 kshitij.so 137
        return {0:"Sku information already present."}
13572 kshitij.so 138
    else:
139
        collection.insert(data)
13970 kshitij.so 140
        get_mongo_connection().Catalog.MasterData.update({'_id':data['sku']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=False)
13639 kshitij.so 141
        return {1:"Data added successfully"}
13572 kshitij.so 142
 
13970 kshitij.so 143
def getAllExceptionlNlcItems(offset, limit):
13572 kshitij.so 144
    data = []
13970 kshitij.so 145
    collection = get_mongo_connection().Catalog.ExceptionalNlc
13572 kshitij.so 146
    cursor = collection.find()
147
    for val in cursor:
13970 kshitij.so 148
        master = list(get_mongo_connection().Catalog.MasterData.find({'_id':val['sku']}))
149
        if len(master) > 0:
150
            val['brand'] = master['brand']
151
            val['source_product_name'] = master['source_product_name']
152
            val['skuBundleId'] = master['skuBundleId']
153
        else:
154
            val['brand'] = ""
155
            val['source_product_name'] = ""
156
            val['skuBundleId'] = ""
13572 kshitij.so 157
        data.append(val)
158
    return data
159
 
13582 amit.gupta 160
def getMerchantOrdersByUser(userId, page=1, window=50):
13603 amit.gupta 161
    if page==None:
162
        page = 1
163
 
164
    if window==None:
165
        window = 50
166
    result = {}
13582 amit.gupta 167
    skip = (page-1)*window
13603 amit.gupta 168
    collection = get_mongo_connection().Dtr.merchantOrder
169
    cursor = collection.find({"userId":userId})
170
    total_count = cursor.count()
171
    pages = total_count/window + (0 if total_count%window==0 else 1)  
172
    print "total_count", total_count
173
    if total_count > skip:
174
        cursor = cursor.skip(skip).limit(window)
175
        orders = []
176
        for order in cursor:
177
            del(order["_id"])
178
            orders.append(order)
179
        result['data'] = orders
180
        result['window'] = window
181
        result['totalCount'] = total_count 
182
        result['currCount'] = cursor.count()
183
        result['totalPages'] = pages
184
        result['currPage'] = page    
185
        return result
186
    else:
187
        return result
13630 kshitij.so 188
 
13927 amit.gupta 189
def getRefunds(userId, page=1, window=10):
190
    if page==None:
191
        page = 1
192
 
193
    if window==None:
194
        window = 50
195
    result = {}
196
    skip = (page-1)*window
197
    collection = get_mongo_connection().Dtr.refund
198
    cursor = collection.find({"userId":userId})
199
    total_count = cursor.count()
200
    pages = total_count/window + (0 if total_count%window==0 else 1)  
201
    print "total_count", total_count
202
    if total_count > skip:
203
        cursor = cursor.skip(skip).limit(window).sort({'batchId':-1})
204
        refunds = []
205
        for refund in cursor:
206
            del(refund["_id"])
207
            refunds.append(refund)
208
        result['data'] = refunds
209
        result['window'] = window
210
        result['totalCount'] = total_count 
211
        result['currCount'] = cursor.count()
212
        result['totalPages'] = pages
213
        result['currPage'] = page    
214
        return result
215
    else:
216
        return result
217
 
218
def getPendingRefunds(userId):
219
    result = get_mongo_connection().Dtr.merchantOrder\
220
        .aggregate([
221
                    {'$match':{'subOrders.cashBackStatus':Store.CB_APPROVED, 'userId':userId}},
222
                    {'$unwind':"$subOrders"},
223
                    { 
224
                     '$group':{
225
                               '_id':None,
226
                               'amount': { '$sum':'$subOrders.cashBackAmount'},
227
                               }
228
                     }
229
                ])['result'][0]
230
    del(result["_id"])
13932 amit.gupta 231
    result['nextCredit'] = datetime.strftime(next_weekday(datetime.now(), 0),"%Y-%m-%d %H:%M:%S") 
13927 amit.gupta 232
    return result
13795 kshitij.so 233
def getDeals(category_id, offset, limit, sort, direction):
13922 kshitij.so 234
    if not bool(cashBackMap):
13921 kshitij.so 235
        populateCashBack()
13771 kshitij.so 236
    rank = 1
237
    deals = {}
13910 kshitij.so 238
    outer_query = []
239
    outer_query.append({"showDeal":1})
240
    query = {}
241
    query['$gt'] = 0
242
    outer_query.append({'totalPoints':query})
243
    if category_id in (3,5):
244
        outer_query.append({'category_id':category_id})
13803 kshitij.so 245
    if sort is None or direction is None:
246
        direct = -1
13910 kshitij.so 247
        print outer_query
248
        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 249
    else:
13910 kshitij.so 250
        print outer_query
13803 kshitij.so 251
        direct = direction
13910 kshitij.so 252
        if sort == "bestSellerPoints":
253
            print "yes,sorting by bestSellerPoints"
254
            data = list(get_mongo_connection().Catalog.Deals.find({"$and":outer_query}).sort([('bestSellerPoints',direct),('rank',direct),('nlcPoints',direct)]).skip(offset).limit(limit))
255
        else:
256
            data = list(get_mongo_connection().Catalog.Deals.find({"$and":outer_query}).sort([(sort,direct)]).skip(offset).limit(limit))
13771 kshitij.so 257
    for d in data:
258
        item = list(get_mongo_connection().Catalog.MasterData.find({'_id':d['_id']}))
259
        if not deals.has_key(item[0]['identifier']):
13921 kshitij.so 260
            item[0]['dealRank'] = rank
261
            try:
262
                cashBack = __getCashBack(item[0]['_id'], item[0]['source_id'], item[0]['category_id'])
263
                if not cashBack or cashBack.get('cash_back_status')!=1:
13928 kshitij.so 264
                    item[0]['cash_back_type'] = 0
265
                    item[0]['cash_back'] = 0
13921 kshitij.so 266
                else:
13928 kshitij.so 267
                    item[0]['cash_back_type'] = cashBack['cash_back_type']
268
                    item[0]['cash_back'] = cashBack['cash_back']
13921 kshitij.so 269
            except:
270
                print "Error in adding cashback to deals"
13928 kshitij.so 271
                item[0]['cash_back_type'] = 0
272
                item[0]['cash_back'] = 0
13771 kshitij.so 273
            deals[item[0]['identifier']] = item[0]
13921 kshitij.so 274
 
13771 kshitij.so 275
            rank +=1
13785 kshitij.so 276
    return sorted(deals.values(), key=itemgetter('dealRank'))
277
 
278
def getItem(skuId):
13795 kshitij.so 279
    try:
280
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'_id':int(skuId)}))
13785 kshitij.so 281
        return skuData
13795 kshitij.so 282
    except:
283
        return [{}]
13836 kshitij.so 284
 
13921 kshitij.so 285
def __getCashBack(skuId, source_id, category_id):
286
    itemCashBack = itemCashBackMap.get(skuId)
287
    if itemCashBack is not None:
288
        return itemCashBack
289
 
290
    sourceCashBack = cashBackMap.get(source_id)
291
    if sourceCashBack is not None and len(sourceCashBack) > 0:
292
        for cashBack in sourceCashBack:
293
            if cashBack.get(category_id) is None:
294
                continue
295
            else:
296
                return cashBack.get(category_id)
297
    else:
298
        return {}
299
 
13836 kshitij.so 300
def getCashBackDetails(identifier, source_id):
13922 kshitij.so 301
    if not bool(cashBackMap):
13921 kshitij.so 302
        populateCashBack()
303
 
13836 kshitij.so 304
    """Need to add item level cashback, no data available right now."""
13771 kshitij.so 305
 
13921 kshitij.so 306
    if source_id in (1,2,4,5):
13839 kshitij.so 307
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'identifier':identifier.strip(), 'source_id':source_id}))
13840 kshitij.so 308
    elif source_id == 3:
13839 kshitij.so 309
        skuData = list(get_mongo_connection().Catalog.MasterData.find({'secondaryIdentifier':identifier.strip(), 'source_id':source_id}))
13840 kshitij.so 310
    else:
311
        return {}
13836 kshitij.so 312
    if len(skuData) > 0:
13921 kshitij.so 313
 
314
        itemCashBack = itemCashBackMap.get(skuData[0]['_id'])
315
        if itemCashBack is not None:
316
            return itemCashBack
317
 
318
        sourceCashBack = cashBackMap.get(source_id)
319
        if sourceCashBack is not None and len(sourceCashBack) > 0:
320
            for cashBack in sourceCashBack:
321
                if cashBack.get(skuData[0]['category_id']) is None:
322
                    continue
323
                else:
324
                    return cashBack.get(skuData[0]['category_id'])
13836 kshitij.so 325
        else:
326
            return {} 
327
    else:
328
        return {}
13771 kshitij.so 329
 
13970 kshitij.so 330
def getAllDealerPrices(offset, limit):
331
    data = []
332
    collection = get_mongo_connection().Catalog.SkuDealerPrices
333
    cursor = collection.find().skip(offset).limit(limit)
334
    for val in cursor:
335
        master = list(get_mongo_connection().Catalog.MasterData.find({'_id':val['sku']}))
336
        if len(master) > 0:
337
            val['brand'] = master['brand']
338
            val['source_product_name'] = master['source_product_name']
339
            val['skuBundleId'] = master['skuBundleId']
340
        else:
341
            val['brand'] = ""
342
            val['source_product_name'] = ""
343
            val['skuBundleId'] = ""
344
        data.append(val)
345
    return data
346
 
347
def addSkuDealerPrice(data):
348
    collection = get_mongo_connection().Catalog.SkuDealerPrices
349
    cursor = collection.find({"sku":data['sku']})
350
    if cursor.count() > 0:
351
        return {0:"Sku information already present."}
352
    else:
353
        collection.insert(data)
354
        get_mongo_connection().Catalog.MasterData.update({'_id':data['sku']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=False)
355
        return {1:"Data added successfully"}
356
 
357
def updateSkuDealerPrice(data, _id):
358
    try:
359
        collection = get_mongo_connection().Catalog.SkuDealerPrices
360
        collection.update({'_id':ObjectId(_id)},{"$set":{'dp':data['dp']}},upsert=False, multi = False)
361
        get_mongo_connection().Catalog.MasterData.update({'_id':data['sku']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=False)
362
        return {1:"Data updated successfully"}
363
    except:
364
        return {0:"Data not updated."}
365
 
366
def updateExceptionalNlc(data, _id):
367
    try:
368
        collection = get_mongo_connection().Catalog.ExceptionalNlc
369
        collection.update({'_id':ObjectId(_id)},{"$set":{'maxNlc':data['maxNlc'], 'minNlc':data['minNlc'], 'overrideNlc':data['overrideNlc']}},upsert=False, multi = False)
370
        get_mongo_connection().Catalog.MasterData.update({'_id':data['sku']},{"$set":{'updatedOn':to_java_date(datetime.now())}},multi=False)
371
        return {1:"Data updated successfully"}
372
    except:
373
        return {0:"Data not updated."}
374
 
375
 
13572 kshitij.so 376
def main():
13922 kshitij.so 377
    populateCashBack()
13928 kshitij.so 378
    cashBack =  __getCashBack(8839,3,5)
13922 kshitij.so 379
    if not cashBack or cashBack.get('cash_back_status')!=1:
380
        print "no"
381
    else:
382
        print cashBack 
13811 kshitij.so 383
 
13921 kshitij.so 384
 
13572 kshitij.so 385
if __name__=='__main__':
13932 amit.gupta 386
    main()
387
 
388
def next_weekday(d, weekday):
389
    days_ahead = weekday - d.weekday()
390
    if days_ahead <= 0: # Target day already happened this week
391
        days_ahead += 7
392
    return d + datetime.timedelta(days_ahead)