| 12357 |
manish.sha |
1 |
from elixir import *
|
|
|
2 |
from sqlalchemy.orm.exc import NoResultFound, MultipleResultsFound
|
|
|
3 |
from sqlalchemy.sql import func
|
|
|
4 |
from sqlalchemy.sql.expression import and_, or_, desc, not_, distinct, cast, \
|
|
|
5 |
between
|
|
|
6 |
|
|
|
7 |
from shop2020.model.v1.inventory.impl import DataService
|
|
|
8 |
from shop2020.model.v1.inventory.impl.DataService import StockWeightedNlcInfo
|
|
|
9 |
from shop2020.model.v1.inventory.impl.DataAcessors import get_all_amazon_fba_inventory
|
|
|
10 |
|
|
|
11 |
from datetime import datetime, timedelta
|
|
|
12 |
import datetime
|
|
|
13 |
import MySQLdb
|
|
|
14 |
import xlwt
|
|
|
15 |
import sys
|
|
|
16 |
|
|
|
17 |
|
|
|
18 |
DataService.initialize(db_hostname='192.168.190.114')
|
|
|
19 |
db = MySQLdb.connect('localhost',"root","shop2020","warehouse" )
|
|
|
20 |
cursor = db.cursor()
|
|
|
21 |
|
|
|
22 |
Amazon_Fba_Inventory_Map = {}
|
|
|
23 |
Weighted_Cal_ItemIds = []
|
|
|
24 |
|
|
|
25 |
|
|
|
26 |
def getAmazonFbaInventoryDataMap():
|
|
|
27 |
global Amazon_Fba_Inventory_Map
|
|
|
28 |
global Weighted_Cal_ItemIds
|
|
|
29 |
all_fba_inventory = get_all_amazon_fba_inventory()
|
|
|
30 |
|
|
|
31 |
for fba_inventory in all_fba_inventory:
|
|
|
32 |
if Amazon_Fba_Inventory_Map.has_key(fba_inventory.item_id):
|
|
|
33 |
val = Amazon_Fba_Inventory_Map.get(fba_inventory.item_id)
|
|
|
34 |
Amazon_Fba_Inventory_Map[fba_inventory.item_id] = fba_inventory.availability + val
|
|
|
35 |
else:
|
|
|
36 |
Amazon_Fba_Inventory_Map[fba_inventory.item_id] = fba_inventory.availability
|
|
|
37 |
|
|
|
38 |
print Amazon_Fba_Inventory_Map
|
|
|
39 |
for itemId in Amazon_Fba_Inventory_Map.keys():
|
|
|
40 |
availability = Amazon_Fba_Inventory_Map.get(itemId)
|
|
|
41 |
if availability>0:
|
|
|
42 |
Weighted_Cal_ItemIds.append(itemId)
|
|
|
43 |
|
|
|
44 |
print Weighted_Cal_ItemIds
|
|
|
45 |
|
|
|
46 |
def getAmazonTransferredSkuDetailMap():
|
|
|
47 |
global Amazon_Transferred_Sku_Detail_Map
|
|
|
48 |
|
|
|
49 |
updateTime = datetime.datetime.now()
|
|
|
50 |
|
|
|
51 |
for itemId in Weighted_Cal_ItemIds:
|
| 12965 |
manish.sha |
52 |
sql = "SELECT Z.itemId, Z.purchaseId, Z.purchaseDate, sum(Z.quantity) as quantity, Z.unitPrice, Z.nlc, Z.nlcP, Z.vatDiff, Z.taxType, Z.SupplierName FROM (SELECT X.itemId, X.purchaseId, X.purchaseDate, X.quantity, X.unitPrice, X.nlc, X.nlcP, X.vatDiff, X.inventoryItemId, X.scanTime, X.taxType, X.SupplierName FROM (SELECT i.itemId as itemId, i.purchaseId as purchaseId, p.receivedOn as purchaseDate, s.quantity as quantity, l.unitPrice as unitPrice, l.nlc as nlc, l.nlcP as nlcP, l.vatDiff as vatDiff, i.id as inventoryItemId, s.scannedAt as scanTime, CASE po.taxType WHEN 0 THEN 'VAT' WHEN 1 THEN 'CST' WHEN 2 THEN 'CFORM' END as taxType, su.name as SupplierName FROM scanNew s JOIN inventoryItem i on s.inventoryItemId= i.id JOIN transferLot t on (s.transferLotId= t.id) JOIN purchase p on p.id= i.purchaseId JOIN purchaseorder po on p.purchaseOrder_id = po.id JOIN supplier su on po.supplierId = su.id JOIN lineitem l on (l.purchaseOrder_id= p.purchaseOrder_id and l.itemId= i.itemId) WHERE i.itemId =%d and t.destinationWarehouseId in (16, 1771, 3295) AND t.status in ('TRANSFER_COMPLETE','IN_TRANSIT','PARTIAL_TRANSFER') AND i.transferStatus is not null AND s.type='WAREHOUSE_TRANSFER_OUT' group by i.itemId, s.transferLotId, i.purchaseId, i.id order by s.scannedAt desc) as X group by X.inventoryItemId UNION SELECT Y.itemId, Y.purchaseId, Y.purchaseDate, Y.quantity, Y.unitPrice, Y.nlc, Y.nlcP, Y.vatDiff, Y.inventoryItemId, Y.scanTime, Y.taxType, Y.SupplierName FROM (SELECT i.itemId as itemId, i.purchaseId as purchaseId, p.receivedOn as purchaseDate, s.quantity as quantity, l.unitPrice as unitPrice, l.nlc as nlc, l.nlcP as nlcP, l.vatDiff as vatDiff, i.id as inventoryItemId, s.scannedAt as scanTime, CASE po.taxType WHEN 0 THEN 'VAT' WHEN 1 THEN 'CST' WHEN 2 THEN 'CFORM' END as taxType, su.name as SupplierName FROM scanNew s JOIN inventoryItem i on s.inventoryItemId = i.id JOIN purchase p on p.id= i.purchaseId JOIN purchaseorder po on p.purchaseOrder_id = po.id JOIN supplier su on po.supplierId = su.id JOIN lineitem l on (l.purchaseOrder_id= p.purchaseOrder_id and l.itemId= i.itemId) WHERE i.itemId =%d and po.warehouseId in (16, 1771, 3295) group by i.itemId, i.purchaseId, i.id order by s.scannedAt desc) as Y group by Y.inventoryItemId) as Z group by Z.itemId, Z.purchaseId order by Z.purchaseId desc"%(itemId,itemId)
|
| 12360 |
manish.sha |
53 |
|
| 12357 |
manish.sha |
54 |
cursor.execute(sql)
|
|
|
55 |
result_data = cursor.fetchall()
|
|
|
56 |
availability = int(Amazon_Fba_Inventory_Map.get(itemId))
|
|
|
57 |
stockQuantity = availability
|
|
|
58 |
grnDetail = "{"
|
|
|
59 |
weightedNlc = 0.0
|
| 12394 |
manish.sha |
60 |
multipliedQty = 0.0
|
|
|
61 |
|
| 12357 |
manish.sha |
62 |
if result_data:
|
| 12395 |
manish.sha |
63 |
|
| 12357 |
manish.sha |
64 |
for record_data in result_data:
|
|
|
65 |
print record_data[6]
|
|
|
66 |
if record_data[6] is not None:
|
|
|
67 |
if availability == int(record_data[3]):
|
| 12360 |
manish.sha |
68 |
grnDetail = grnDetail + "\'"+ str(int(record_data[1])) + "\'"+" : { \'TP\' : " + "\'"+ str(float(record_data[4]))+ "\'" + ", \'NLC\' : "+ "\'"+str(float(record_data[5]))+ "\'" +", \'NLCP\' : "+ "\'"+str(float(record_data[6])) + "\'"+", \'VAT_DIFF\' : " + "\'"+str(float(record_data[7])) + "\'" + ", \'QTY\' : "+ "\'"+str(int(record_data[3]))+ "\'" + " }"
|
| 12357 |
manish.sha |
69 |
weightedNlc = weightedNlc + float(record_data[6]) * float(record_data[3])
|
| 12394 |
manish.sha |
70 |
multipliedQty = multipliedQty + float(record_data[3])
|
| 12357 |
manish.sha |
71 |
break
|
|
|
72 |
|
|
|
73 |
if availability > int(record_data[3]):
|
|
|
74 |
availability = availability - int(record_data[3])
|
| 12360 |
manish.sha |
75 |
grnDetail = grnDetail + "\'"+ str(int(record_data[1])) + "\'"+" : { \'TP\' : " + "\'"+ str(float(record_data[4]))+ "\'" + ", \'NLC\' : "+ "\'"+str(float(record_data[5]))+ "\'" +", \'NLCP\' : "+ "\'"+str(float(record_data[6])) + "\'"+", \'VAT_DIFF\' : " + "\'"+str(float(record_data[7])) + "\'" + ", \'QTY\' : "+ "\'"+str(int(record_data[3]))+ "\'" + " }"+", "
|
| 12357 |
manish.sha |
76 |
weightedNlc = weightedNlc + float(record_data[6]) * float(record_data[3])
|
| 12394 |
manish.sha |
77 |
multipliedQty = multipliedQty + float(record_data[3])
|
| 12357 |
manish.sha |
78 |
continue
|
|
|
79 |
|
|
|
80 |
if availability < int(record_data[3]):
|
| 12360 |
manish.sha |
81 |
grnDetail = grnDetail + "\'"+ str(int(record_data[1])) + "\'"+" : { \'TP\' : " + "\'"+ str(float(record_data[4]))+ "\'" + ", \'NLC\' : "+ "\'"+str(float(record_data[5]))+ "\'" +", \'NLCP\' : "+ "\'"+str(float(record_data[6])) + "\'"+", \'VAT_DIFF\' : " + "\'"+str(float(record_data[7])) + "\'" + ", \'QTY\' : "+ "\'"+str(int(availability))+ "\'" + " }"
|
| 12357 |
manish.sha |
82 |
weightedNlc = weightedNlc + float(record_data[6]) * float(availability)
|
| 12394 |
manish.sha |
83 |
multipliedQty = multipliedQty + float(availability)
|
| 12357 |
manish.sha |
84 |
break
|
|
|
85 |
else:
|
|
|
86 |
continue
|
| 12395 |
manish.sha |
87 |
|
|
|
88 |
if multipliedQty == 0.0:
|
|
|
89 |
multipliedQty = multipliedQty + 1.0
|
| 12394 |
manish.sha |
90 |
weightedNlc = weightedNlc/multipliedQty
|
| 12357 |
manish.sha |
91 |
grnDetail = grnDetail + "}"
|
|
|
92 |
|
|
|
93 |
print weightedNlc
|
|
|
94 |
print grnDetail
|
|
|
95 |
|
|
|
96 |
stockWeightedNlcInfo = StockWeightedNlcInfo()
|
|
|
97 |
stockWeightedNlcInfo.itemId = itemId
|
|
|
98 |
stockWeightedNlcInfo.source = 3
|
|
|
99 |
stockWeightedNlcInfo.updatedTimestamp = updateTime
|
|
|
100 |
stockWeightedNlcInfo.grnDetail = grnDetail
|
|
|
101 |
stockWeightedNlcInfo.stockQuantity = stockQuantity
|
|
|
102 |
stockWeightedNlcInfo.avgWeightedNlc = weightedNlc
|
|
|
103 |
session.commit()
|
|
|
104 |
|
|
|
105 |
db.close()
|
|
|
106 |
|
|
|
107 |
def main():
|
|
|
108 |
getAmazonFbaInventoryDataMap()
|
|
|
109 |
getAmazonTransferredSkuDetailMap()
|
|
|
110 |
|
|
|
111 |
if __name__=='__main__':
|
|
|
112 |
main()
|
|
|
113 |
|