Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
13107 kshitij.so 1
import pymongo
2
from datetime import datetime, timedelta, time, date
3
from shop2020.thriftpy.model.v1.order.ttypes import AmazonFCWarehouseLocation
13108 kshitij.so 4
from shop2020.utils.Utils import to_java_date, to_py_date
13109 kshitij.so 5
from shop2020.thriftpy.model.v1.order.ttypes import AmazonFbaSalesSnapshot, AmazonHourlySaleSnapshot
13107 kshitij.so 6
 
7
con = None
8
 
9
def get_mongo_connection(host='localhost', port=27017):
10
    global con
11
    if con is None:
12
        print "Establishing connection %s host and port %d" %(host,port)
13
        try:
14
            con = pymongo.MongoClient(host, port)
15
        except Exception, e:
16
            print e
17
            return None
18
    return con
19
 
20
def to_amazonFbaSaleSnapshot(saleSnapshot):
21
    amazonFbaSaleSnapshot = AmazonFbaSalesSnapshot(dateOfSale=0, item_id=0, totalOrderCount=0, amazonFbaInventory=0, isOutOfStock=False, salePrice=0, minFbaPrice=0, minMfnPrice=0, totalSale=0, promotionSale=0, promotionOrderCount=0, ourPrice=0, minFbaPriceSnapshotDate=0, minMfnPriceSnapshotDate=0, ourPriceSnapshotDate=0, salePriceSnapshotDate=0, fcLocation=None)
22
    if saleSnapshot is None:
23
        return amazonFbaSaleSnapshot
24
    amazonFbaSaleSnapshot.__dict__.update(saleSnapshot)
25
    return amazonFbaSaleSnapshot
26
 
13109 kshitij.so 27
def to_amazonFbaHourlySnapshot(saleSnapshot):
28
    amazonHourlySaleSnapshot = AmazonHourlySaleSnapshot(snapshotTime=0, item_id=0, totalOrderCount=0, amazonFbaInventory=0, isOutOfStock=False,  totalSale=0, promotionSale=0, promotionOrderCount=0,  fcLocation=None)
29
    if saleSnapshot is None:
30
        return amazonHourlySaleSnapshot
31
    amazonHourlySaleSnapshot.__dict__.update(saleSnapshot)
32
    return amazonHourlySaleSnapshot
33
 
13107 kshitij.so 34
def getAmazonFbaSalesLatestSnapshotForItemLocationWise(item_id,fcLocation):
35
    collection = get_mongo_connection().AmazonSaleSnapshot.AmazonDailySaleSnapshot
36
    list = []
37
    list.append({"dateOfSale": to_java_date(datetime.combine((datetime.now()-timedelta(days=1)).date(), time(00,00,00)))})
38
    list.append({"item_id":item_id})
39
    list.append({"fcLocation":AmazonFCWarehouseLocation._VALUES_TO_NAMES.get(fcLocation)})
40
    r = collection.find({"$and":list}).sort([('dateOfSale',pymongo.DESCENDING)]).limit(1)
41
    if r.count() > 0:
42
        return to_amazonFbaSaleSnapshot(r.next())
43
    else:
44
        return to_amazonFbaSaleSnapshot(None)
13108 kshitij.so 45
 
46
def getInStockAmazonFbaSalesLatestSnapshotForItemLocationWise(item_id,fcLocation,outOfStockTime):
47
    fbasalessnapshot = []
48
    collection = get_mongo_connection().AmazonSaleSnapshot.AmazonDailySaleSnapshot
49
    toDate = datetime.now()-timedelta(days = 1)
50
    fromDate = outOfStockTime
51
    list = []
52
    list.append({"item_id":item_id})
53
    list.append({"fcLocation":AmazonFCWarehouseLocation._VALUES_TO_NAMES.get(fcLocation)})
54
    query = {}
55
    query['$gt'] = fromDate 
56
    query['$lte'] = to_java_date(datetime.combine(toDate.date(), time(00,00,00)))
57
    list.append({"dateOfSale":query})
58
    cursor = collection.find({"$and":list}).sort([('dateOfSale',pymongo.ASCENDING)])
59
    totalSale = 0
60
    noOfDays = 0
61
    for sale in cursor:
62
        totalSale = totalSale + sale.get('totalOrderCount')
63
        noOfDays = noOfDays + 1 
64
    return totalSale, noOfDays 
65
 
13107 kshitij.so 66
 
67
def getAmazonFbaSalesSnapshotForDays(interval):
68
    fbasalessnapshot = []
69
    collection = get_mongo_connection().AmazonSaleSnapshot.AmazonDailySaleSnapshot
70
    toDate = datetime.now()-timedelta(days = 1)
71
    fromDate = toDate-timedelta(days = interval)
72
    query = {}
73
    query['$gte'] = to_java_date(datetime.combine(fromDate.date(), time(00,00,00)))
74
    query['$lte'] = to_java_date(datetime.combine(toDate.date(), time(00,00,00)))
75
    cursor = collection.find({"dateOfSale":query}).sort([('dateOfSale',pymongo.ASCENDING)])
76
    for sale in cursor:
77
        fbasalessnapshot.append(to_amazonFbaSaleSnapshot(sale))
78
    return fbasalessnapshot
79
 
13108 kshitij.so 80
 
81
 
82
def getLastOutOfStock(item_id,fcLocation):
83
    collection = get_mongo_connection().AmazonSaleSnapshot.AmazonDailySaleSnapshot
84
    list = []
85
    list.append({"item_id":item_id})
86
    list.append({"fcLocation":AmazonFCWarehouseLocation._VALUES_TO_NAMES.get(fcLocation)})
87
    list.append({"isOutOfStock":True})
88
    r = collection.find({"$and":list}).sort([('dateOfSale',pymongo.DESCENDING)]).limit(1)
89
    if r.count() > 0:
90
        lastOutOfStock = to_amazonFbaSaleSnapshot(r.next())
91
    else:
92
        lastOutOfStock = to_amazonFbaSaleSnapshot(None)
93
    if lastOutOfStock.dateOfSale == 0:
94
        return lastOutOfStock, 0, 0
95
    else:
13130 kshitij.so 96
        totalSale, noOfDays =getInStockAmazonFbaSalesLatestSnapshotForItemLocationWise(item_id,fcLocation,lastOutOfStock.dateOfSale)
97
        return lastOutOfStock, totalSale, noOfDays 
13109 kshitij.so 98
 
99
def getLatestHourlySnapshot():
100
    fbaHourlySnapshot = []
101
    collection = get_mongo_connection().AmazonSaleSnapshot.AmazonHourlySaleSnapshot
102
    r = collection.find().sort([('snapshotTime',pymongo.DESCENDING)]).limit(1)
103
    lastestSnapshotTime = r.next().get('snapshotTime')
104
    cursor = collection.find({"snapshotTime":{"$in":[lastestSnapshotTime]}})
105
    for sale in cursor:
106
        fbaHourlySnapshot.append(to_amazonFbaHourlySnapshot(sale))
107
    return fbaHourlySnapshot
13108 kshitij.so 108
 
109
 
13107 kshitij.so 110
def main():
13109 kshitij.so 111
    print getLatestHourlySnapshot()
13107 kshitij.so 112
 
113
if __name__ == "__main__":
114
    main()