Subversion Repositories SmartDukaan

Rev

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

import pymongo
from datetime import datetime, timedelta, time, date
from shop2020.thriftpy.model.v1.order.ttypes import AmazonFCWarehouseLocation
from shop2020.utils.Utils import to_java_date, to_py_date
from shop2020.thriftpy.model.v1.order.ttypes import AmazonFbaSalesSnapshot

con = None

def get_mongo_connection(host='localhost', port=27017):
    global con
    if con is None:
        print "Establishing connection %s host and port %d" %(host,port)
        try:
            con = pymongo.MongoClient(host, port)
        except Exception, e:
            print e
            return None
    return con

def to_amazonFbaSaleSnapshot(saleSnapshot):
    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)
    if saleSnapshot is None:
        return amazonFbaSaleSnapshot
    amazonFbaSaleSnapshot.__dict__.update(saleSnapshot)
    return amazonFbaSaleSnapshot

def getAmazonFbaSalesLatestSnapshotForItemLocationWise(item_id,fcLocation):
    collection = get_mongo_connection().AmazonSaleSnapshot.AmazonDailySaleSnapshot
    list = []
    list.append({"dateOfSale": to_java_date(datetime.combine((datetime.now()-timedelta(days=1)).date(), time(00,00,00)))})
    list.append({"item_id":item_id})
    list.append({"fcLocation":AmazonFCWarehouseLocation._VALUES_TO_NAMES.get(fcLocation)})
    r = collection.find({"$and":list}).sort([('dateOfSale',pymongo.DESCENDING)]).limit(1)
    if r.count() > 0:
        return to_amazonFbaSaleSnapshot(r.next())
    else:
        return to_amazonFbaSaleSnapshot(None)

def getInStockAmazonFbaSalesLatestSnapshotForItemLocationWise(item_id,fcLocation,outOfStockTime):
    fbasalessnapshot = []
    collection = get_mongo_connection().AmazonSaleSnapshot.AmazonDailySaleSnapshot
    toDate = datetime.now()-timedelta(days = 1)
    fromDate = outOfStockTime
    list = []
    list.append({"item_id":item_id})
    list.append({"fcLocation":AmazonFCWarehouseLocation._VALUES_TO_NAMES.get(fcLocation)})
    query = {}
    query['$gt'] = fromDate 
    query['$lte'] = to_java_date(datetime.combine(toDate.date(), time(00,00,00)))
    list.append({"dateOfSale":query})
    cursor = collection.find({"$and":list}).sort([('dateOfSale',pymongo.ASCENDING)])
    totalSale = 0
    noOfDays = 0
    for sale in cursor:
        totalSale = totalSale + sale.get('totalOrderCount')
        noOfDays = noOfDays + 1 
    return totalSale, noOfDays 

        
def getAmazonFbaSalesSnapshotForDays(interval):
    fbasalessnapshot = []
    collection = get_mongo_connection().AmazonSaleSnapshot.AmazonDailySaleSnapshot
    toDate = datetime.now()-timedelta(days = 1)
    fromDate = toDate-timedelta(days = interval)
    query = {}
    query['$gte'] = to_java_date(datetime.combine(fromDate.date(), time(00,00,00)))
    query['$lte'] = to_java_date(datetime.combine(toDate.date(), time(00,00,00)))
    cursor = collection.find({"dateOfSale":query}).sort([('dateOfSale',pymongo.ASCENDING)])
    for sale in cursor:
        fbasalessnapshot.append(to_amazonFbaSaleSnapshot(sale))
    return fbasalessnapshot



def getLastOutOfStock(item_id,fcLocation):
    collection = get_mongo_connection().AmazonSaleSnapshot.AmazonDailySaleSnapshot
    list = []
    list.append({"item_id":item_id})
    list.append({"fcLocation":AmazonFCWarehouseLocation._VALUES_TO_NAMES.get(fcLocation)})
    list.append({"isOutOfStock":True})
    r = collection.find({"$and":list}).sort([('dateOfSale',pymongo.DESCENDING)]).limit(1)
    if r.count() > 0:
        lastOutOfStock = to_amazonFbaSaleSnapshot(r.next())
    else:
        lastOutOfStock = to_amazonFbaSaleSnapshot(None)
    if lastOutOfStock.dateOfSale == 0:
        return lastOutOfStock, 0, 0
    else:
        return lastOutOfStock, getInStockAmazonFbaSalesLatestSnapshotForItemLocationWise(item_id,fcLocation,lastOutOfStock.dateOfSale)
        

def main():
    print getLastOutOfStock(174,2)

if __name__ == "__main__":
    main()