Subversion Repositories SmartDukaan

Rev

Rev 12360 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
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:
52
        sql = "SELECT Z.itemId, Z.purchaseId, Z.purchaseDate, sum(Z.quantity) as quantity, Z.unitPrice, Z.nlc, Z.nlcP, Z.vatDiff, Z.taxType  FROM (SELECT X.itemId, X.purchaseId, X.purchaseDate, X.quantity, X.unitPrice, X.nlc, X.nlcP, X.vatDiff, X.inventoryItemId, X.scanTime, X.taxType 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 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 lineitem l on (l.purchaseOrder_id= p.purchaseOrder_id and l.itemId= i.itemId) WHERE i.itemId =%d and t.destinationWarehouseId in (16, 1771) 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 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  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 lineitem l on (l.purchaseOrder_id= p.purchaseOrder_id and l.itemId= i.itemId) WHERE i.itemId =%d and po.warehouseId in (16, 1771) 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)
53
        print sql
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
60
 
61
        print "Result Data: ", result_data
62
        print "availability : ", availability 
63
 
64
        if result_data:
65
            for record_data in result_data:
66
                print record_data[6]
67
                if record_data[6] is not None:
68
                    if availability == int(record_data[3]):
69
                        grnDetail = grnDetail + str(int(record_data[1])) +" : " + str(int(record_data[3]))
70
                        weightedNlc = weightedNlc + float(record_data[6]) * float(record_data[3])
71
                        break
72
 
73
                    if availability > int(record_data[3]):
74
                        availability = availability - int(record_data[3])
75
                        grnDetail = grnDetail + str(int(record_data[1])) +" : " + str(int(record_data[3])) +", "
76
                        weightedNlc = weightedNlc + float(record_data[6]) * float(record_data[3])
77
                        continue
78
 
79
                    if availability < int(record_data[3]):
80
                        grnDetail = grnDetail + str(int(record_data[1])) +" : " + str(availability) 
81
                        weightedNlc = weightedNlc + float(record_data[6]) * float(availability)
82
                        break
83
                else:
84
                    continue
85
 
86
            weightedNlc = weightedNlc/stockQuantity
87
            grnDetail = grnDetail + "}"
88
 
89
            print weightedNlc
90
            print grnDetail
91
 
92
            stockWeightedNlcInfo = StockWeightedNlcInfo()
93
            stockWeightedNlcInfo.itemId = itemId
94
            stockWeightedNlcInfo.source = 3
95
            stockWeightedNlcInfo.updatedTimestamp = updateTime
96
            stockWeightedNlcInfo.grnDetail = grnDetail
97
            stockWeightedNlcInfo.stockQuantity = stockQuantity
98
            stockWeightedNlcInfo.avgWeightedNlc = weightedNlc
99
            session.commit()
100
 
101
    db.close()
102
 
103
def main():
104
    getAmazonFbaInventoryDataMap() 
105
    getAmazonTransferredSkuDetailMap()
106
 
107
if __name__=='__main__':
108
    main()
109