mirror of
https://github.com/bcomsugi/dasaproject.git
synced 2026-01-08 18:42:37 +07:00
181 lines
5.1 KiB
Python
181 lines
5.1 KiB
Python
# V2 adding stock Krian
|
|
# V3 adding offline stock retrieval (excel and stock Krian)
|
|
|
|
from __future__ import print_function
|
|
#import xlwings as xw
|
|
import time
|
|
import json
|
|
import datetime
|
|
import socket, threading, sys
|
|
import pywintypes
|
|
#from pdfstock import checkpdfstock
|
|
#import pdfstock
|
|
import importlib
|
|
from iteminventorydasa import QBStock
|
|
#from itemreportquery import QBStock
|
|
from random import randint
|
|
|
|
i=0
|
|
init = {'packinglistfilename' : '', 'bind' : '0.0.0.0', 'port' : 9999}
|
|
print('Starting')
|
|
try:
|
|
|
|
filename = sys.argv[0][:sys.argv[0].find('.py')] + '.ini'
|
|
print ("opening {}".format(filename))
|
|
|
|
|
|
|
|
with open(filename) as fp:
|
|
for line in fp:
|
|
splitline = line.split('=')
|
|
if splitline[0] in init:
|
|
init[splitline[0]] = splitline[1][:splitline[1].find('#')]
|
|
except:
|
|
print ("Error Opening {}".format(filename))
|
|
|
|
print ("trying to open {}".format(init['packinglistfilename']))
|
|
|
|
|
|
|
|
def convertfloatnoltoint(stock):
|
|
if isinstance(stock, (float, int)):
|
|
return int(stock)
|
|
elif stock == "Nol":
|
|
return 0
|
|
elif stock is None:
|
|
return 0
|
|
else:
|
|
return 0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def searchStockQB(client_socket=None, filename='', searchitems = {}):
|
|
#return searchitems
|
|
searchitemsRt = {}
|
|
#searchitemsRt['month'] = monthstock
|
|
print(f"searchStockQB -> {searchitems} = Received Request: {searchitems}")
|
|
itemInvDict = QBStock(searchitems = searchitems)
|
|
print(f"searchStockQB -> {searchitems} = Received Request: {itemInvDict}")
|
|
for searchitem in searchitems:
|
|
print (f"searchStockQB -> searachitem: {searchitem}")
|
|
searchitem= searchitem.strip('"')
|
|
if searchitem in itemInvDict:
|
|
#print (itemInvDict[searchitem][0])
|
|
searchitemsRt[itemInvDict[searchitem][0]] = itemInvDict[searchitem][1]
|
|
else:
|
|
searchitemsRt[searchitem] = "N/A"
|
|
|
|
print (f"searchStockQB -> The Return: {searchitemsRt}")
|
|
print ("")
|
|
#print(datetime.datetime.now())
|
|
#runningTime = datetime.datetime.now()-stime
|
|
#print("Finish in: {}.{} sec".format(runningTime.seconds, runningTime.microseconds))
|
|
|
|
if client_socket != None:
|
|
data_string = json.dumps(searchitemsRt)
|
|
data_string = data_string.encode()
|
|
#client_socket.send(json.dumps(searchitemsRt))
|
|
client_socket.send(data_string)
|
|
client_socket.close()
|
|
|
|
return searchitemsRt
|
|
|
|
if __name__=='__main__':
|
|
print(init['bind'], init['port'])
|
|
bind_ip = init['bind'] #'0.0.0.0'
|
|
bind_port = 9999 #init['port'] #9999
|
|
try:
|
|
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
server.bind((bind_ip, bind_port))
|
|
server.listen(5) # max backlog of connections
|
|
|
|
print ('Listening on {}:{}'.format(bind_ip, bind_port))
|
|
except Exception as error:
|
|
print (error)
|
|
sys.exit()
|
|
|
|
|
|
|
|
def is_json(myjson):
|
|
try:
|
|
json_object = json.loads(myjson)
|
|
json_object = None
|
|
except ValueError as e:
|
|
return False
|
|
return True
|
|
|
|
|
|
def handle_offline_request(client_socket, lists):
|
|
try:
|
|
buffer = 4096
|
|
data_string=lists
|
|
data_string = json.dumps(lists)
|
|
size = len(data_string)
|
|
sSize = "Size {}".format(size)
|
|
sSize = sSize.encode()
|
|
print("Size to be send:{}; data_string:{}".format(sSize, size))
|
|
client_socket.send(sSize)
|
|
request = client_socket.recv(buffer)
|
|
request = request.decode()
|
|
#print ('Received:{}'.format(request))
|
|
if request.startswith('Got Size'):
|
|
data_string = data_string.encode()
|
|
client_socket.sendall(data_string)
|
|
request = client_socket.recv(buffer)
|
|
request = request.decode()
|
|
print ('Received:{}'.format(request))
|
|
if request.startswith('Got All Data'):
|
|
sBye = "Bye"
|
|
sBye = sBye.encode()
|
|
client_socket.send(sBye)
|
|
except:
|
|
print("handle_offline_request Error")
|
|
finally:
|
|
client_socket.close
|
|
|
|
if __name__ == '__main__':
|
|
#xyz={"TH-001aa":"","ECO-016":"","th-002":"","ECO:0:ECO-002":""}
|
|
xyz={"ECO:0:ECO-002":"","TIERO:R, WY, SU, CM, DM, TR, TM:TI-X-0095-DM":""}
|
|
# xyz={'"TIERO:R, WY, SU, CM, DM, TR, TM:TI-X-0095-DM"':''}
|
|
print ("searchitems", xyz)
|
|
responseRt = searchStockQB(searchitems=xyz)
|
|
print(responseRt)
|
|
|
|
|
|
while i<2:
|
|
i=0
|
|
#sys.exit() to cut not going to start listening
|
|
client_sock, address = server.accept()
|
|
print("")
|
|
print("")
|
|
print (datetime.datetime.now(), 'Accepted connection from {}:{}'.format(address[0], address[1]))
|
|
request = client_sock.recv(4096)
|
|
request = request.decode()
|
|
print("request:", type(request), request)
|
|
if is_json(request):
|
|
print("json:{}".format(request))
|
|
abc = json.loads(request)
|
|
print(type(abc), abc)
|
|
responseRt = searchStockQB(searchitems=abc)
|
|
responseRt = json.dumps(responseRt)
|
|
responseRt = responseRt.encode()
|
|
client_sock.send(responseRt)
|
|
client_sock.close()
|
|
elif request.lower() == 'request':
|
|
#print ("replied request")
|
|
dataoffline = getofflineStock(filename=init['packinglistfilename'])
|
|
handle_offline_request(client_sock, dataoffline)
|
|
# client_sock.send("hi".encode())
|
|
# client_sock.close()
|
|
else:
|
|
#print("else")
|
|
client_sock.send(b'Bye')
|
|
client_sock.close()
|
|
print(datetime.datetime.now(), "Connection closed")
|
|
|