dasaproject/pyQBstockserverV1.py
2024-02-02 22:16:52 +07:00

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")