Subversion Repositories SmartDukaan

Rev

Rev 13130 | Rev 13530 | 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
13480 kshitij.so 5
from shop2020.thriftpy.model.v1.order.ttypes import AmazonFbaSalesSnapshot, AmazonHourlySaleSnapshot, \
6
AmazonFbaOrderItem
13107 kshitij.so 7
 
13480 kshitij.so 8
 
13107 kshitij.so 9
con = None
13480 kshitij.so 10
prefix = {'FBA':0,'FBB':1,'FBG':2}
13107 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
 
23
def to_amazonFbaSaleSnapshot(saleSnapshot):
24
    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)
25
    if saleSnapshot is None:
26
        return amazonFbaSaleSnapshot
27
    amazonFbaSaleSnapshot.__dict__.update(saleSnapshot)
28
    return amazonFbaSaleSnapshot
29
 
13109 kshitij.so 30
def to_amazonFbaHourlySnapshot(saleSnapshot):
31
    amazonHourlySaleSnapshot = AmazonHourlySaleSnapshot(snapshotTime=0, item_id=0, totalOrderCount=0, amazonFbaInventory=0, isOutOfStock=False,  totalSale=0, promotionSale=0, promotionOrderCount=0,  fcLocation=None)
32
    if saleSnapshot is None:
33
        return amazonHourlySaleSnapshot
34
    amazonHourlySaleSnapshot.__dict__.update(saleSnapshot)
35
    return amazonHourlySaleSnapshot
36
 
13480 kshitij.so 37
def to_amazonFbaOrderItem(orderData):
38
    amazonFbaOrderItem = AmazonFbaOrderItem(amazonOrderId=None, purchaseDate=None, orderStatus=None, item_id=None, fcLocation=None, totalAmount=None, promotionDiscount=None, quantity=None)
39
    if orderData is None:
40
        return amazonFbaOrderItem
41
    amazonFbaOrderItem.__dict__.update(orderData)
42
    return amazonFbaOrderItem 
43
 
13107 kshitij.so 44
def getAmazonFbaSalesLatestSnapshotForItemLocationWise(item_id,fcLocation):
45
    collection = get_mongo_connection().AmazonSaleSnapshot.AmazonDailySaleSnapshot
46
    list = []
47
    list.append({"dateOfSale": to_java_date(datetime.combine((datetime.now()-timedelta(days=1)).date(), time(00,00,00)))})
48
    list.append({"item_id":item_id})
49
    list.append({"fcLocation":AmazonFCWarehouseLocation._VALUES_TO_NAMES.get(fcLocation)})
50
    r = collection.find({"$and":list}).sort([('dateOfSale',pymongo.DESCENDING)]).limit(1)
51
    if r.count() > 0:
52
        return to_amazonFbaSaleSnapshot(r.next())
53
    else:
54
        return to_amazonFbaSaleSnapshot(None)
13108 kshitij.so 55
 
56
def getInStockAmazonFbaSalesLatestSnapshotForItemLocationWise(item_id,fcLocation,outOfStockTime):
57
    fbasalessnapshot = []
58
    collection = get_mongo_connection().AmazonSaleSnapshot.AmazonDailySaleSnapshot
59
    toDate = datetime.now()-timedelta(days = 1)
60
    fromDate = outOfStockTime
61
    list = []
62
    list.append({"item_id":item_id})
63
    list.append({"fcLocation":AmazonFCWarehouseLocation._VALUES_TO_NAMES.get(fcLocation)})
64
    query = {}
65
    query['$gt'] = fromDate 
66
    query['$lte'] = to_java_date(datetime.combine(toDate.date(), time(00,00,00)))
67
    list.append({"dateOfSale":query})
68
    cursor = collection.find({"$and":list}).sort([('dateOfSale',pymongo.ASCENDING)])
69
    totalSale = 0
70
    noOfDays = 0
71
    for sale in cursor:
72
        totalSale = totalSale + sale.get('totalOrderCount')
73
        noOfDays = noOfDays + 1 
74
    return totalSale, noOfDays 
13107 kshitij.so 75
 
76
def getAmazonFbaSalesSnapshotForDays(interval):
77
    fbasalessnapshot = []
78
    collection = get_mongo_connection().AmazonSaleSnapshot.AmazonDailySaleSnapshot
79
    toDate = datetime.now()-timedelta(days = 1)
80
    fromDate = toDate-timedelta(days = interval)
81
    query = {}
82
    query['$gte'] = to_java_date(datetime.combine(fromDate.date(), time(00,00,00)))
83
    query['$lte'] = to_java_date(datetime.combine(toDate.date(), time(00,00,00)))
84
    cursor = collection.find({"dateOfSale":query}).sort([('dateOfSale',pymongo.ASCENDING)])
85
    for sale in cursor:
86
        fbasalessnapshot.append(to_amazonFbaSaleSnapshot(sale))
87
    return fbasalessnapshot
88
 
13108 kshitij.so 89
def getLastOutOfStock(item_id,fcLocation):
90
    collection = get_mongo_connection().AmazonSaleSnapshot.AmazonDailySaleSnapshot
91
    list = []
92
    list.append({"item_id":item_id})
93
    list.append({"fcLocation":AmazonFCWarehouseLocation._VALUES_TO_NAMES.get(fcLocation)})
94
    list.append({"isOutOfStock":True})
95
    r = collection.find({"$and":list}).sort([('dateOfSale',pymongo.DESCENDING)]).limit(1)
96
    if r.count() > 0:
97
        lastOutOfStock = to_amazonFbaSaleSnapshot(r.next())
98
    else:
99
        lastOutOfStock = to_amazonFbaSaleSnapshot(None)
100
    if lastOutOfStock.dateOfSale == 0:
101
        return lastOutOfStock, 0, 0
102
    else:
13130 kshitij.so 103
        totalSale, noOfDays =getInStockAmazonFbaSalesLatestSnapshotForItemLocationWise(item_id,fcLocation,lastOutOfStock.dateOfSale)
104
        return lastOutOfStock, totalSale, noOfDays 
13109 kshitij.so 105
 
106
def getLatestHourlySnapshot():
107
    fbaHourlySnapshot = []
108
    collection = get_mongo_connection().AmazonSaleSnapshot.AmazonHourlySaleSnapshot
109
    r = collection.find().sort([('snapshotTime',pymongo.DESCENDING)]).limit(1)
110
    lastestSnapshotTime = r.next().get('snapshotTime')
111
    cursor = collection.find({"snapshotTime":{"$in":[lastestSnapshotTime]}})
112
    for sale in cursor:
113
        fbaHourlySnapshot.append(to_amazonFbaHourlySnapshot(sale))
114
    return fbaHourlySnapshot
13480 kshitij.so 115
 
116
def getAmazonOrderData(startDate, endDate, offset, limit):
117
    fbaOrderData = []
118
    collection = get_mongo_connection().AmazonSaleSnapshot.AmazonSaleData
119
    list = []
120
    query = {}
121
    list.append({"orderStatus":"Shipped"})
122
    query['$gte'] = to_java_date(startDate)
123
    query['$lte'] = to_java_date(endDate)
124
    list.append({"purchaseDate":query})
125
    if offset is None and limit is None:
126
        cursor = collection.find({"$and":list}).sort([('purchaseDate',pymongo.ASCENDING)])
127
    else:
128
        cursor = collection.find({"$and":list}).skip(offset).limit(limit).sort([('purchaseDate',pymongo.ASCENDING)])
129
    for orderData in cursor:
130
        fbaOrderData.append(to_amazonFbaOrderItem(orderData))
131
    return fbaOrderData
132
 
133
def getDistinctItemsFromOrderData(startDate, endDate):
134
    item_ids = []
135
    collection = get_mongo_connection().AmazonSaleSnapshot.AmazonSaleData
136
    list = []
137
    query = {}
138
    list.append({"orderStatus":"Shipped"})
139
    query['$gte'] = to_java_date(startDate)
140
    query['$lte'] = to_java_date(endDate)
141
    list.append({"purchaseDate":query})
142
    cursor = collection.find({"$and":list}).distinct('item_id')
143
    for item_id in cursor:
144
        item_ids.append(item_id)
145
    return item_ids
146
 
147
def getOrderByAmazonOrderIdAndSku(amazonOrderId, sku):
148
    list = []
149
    collection = get_mongo_connection().AmazonSaleSnapshot.AmazonSaleData
150
    list.append({"amazonOrderId": amazonOrderId})
151
    list.append({"item_id":int(sku[3:])})
152
    list.append({"fcLocation":AmazonFCWarehouseLocation._VALUES_TO_NAMES.get(prefix.get(sku[0:3]))})
153
    r = collection.find({"$and":list})
154
    if r.count() > 1:
155
        print "gt 1"
156
        print amazonOrderId
157
        print sku
158
        raise
159
    elif r.count()==0:
160
        print "eq 0"
161
        print amazonOrderId
162
        print sku
163
        raise
164
    else:
165
        return to_amazonFbaOrderItem(r.next())
13108 kshitij.so 166
 
13480 kshitij.so 167
 
168
 
13108 kshitij.so 169
 
13107 kshitij.so 170
def main():
13480 kshitij.so 171
#    startDate = datetime.strptime('01-11-2014 00:00:00', '%d-%m-%Y %H:%M:%S')
172
#    endDate = datetime.strptime('01-12-2014 00:00:00', '%d-%m-%Y %H:%M:%S')
173
#    getDistinctItemsFromOrderData(startDate, endDate)
174
#    list = []
175
#    for x in getAmazonOrderData(startDate, endDate, None, None):
176
#        if x.promotionDiscount > 0 and x.item_id not in list:
177
#            list.append(x.item_id)
178
#    print list
179
    instock = 0
180
    x = getAmazonFbaSalesSnapshotForDays(29)
181
    for i in x:
182
        if i.item_id==17373:
183
            print i.totalSale,
184
            print '\t',
185
            print i.totalOrderCount,
186
            print '\t',
187
            print i.promotionSale,
188
            print '\t',
189
            print i.promotionOrderCount,
190
            print '\t',
191
            print i.isOutOfStock
192
 
193
    print "****"
194
    print instock
195
 
196
 
13107 kshitij.so 197
if __name__ == "__main__":
198
    main()