pretty print and readso can accept RefNumber

This commit is contained in:
bcomsugi 2023-11-15 23:58:41 +07:00
parent f954a83862
commit 051a5c1184
4 changed files with 63 additions and 32 deletions

View File

@ -8,7 +8,8 @@ from datetime import date
import timeit
import os
import pythoncom
# from icecream import ic
from icecream import ic
# ic.configureOutput(includeContext=True, )
class SalesOrderQuery:
@ -30,7 +31,8 @@ class SalesOrderQuery:
self._df_customer = pd.read_excel(os.path.join(self.cwd, self.item_inventory_path, self.CustomerPriceLevelName_filename), usecols=['FullName', 'PriceLevelName', 'SPName'],)
self._df_customer = self._df_customer.fillna('')
print(self._df_customer)
self.Customer = None
if self.FullName:
self.Customer = self._df_customer.loc[(self._df_customer["FullName"]==self.FullName)].values.tolist()[0]
print(f'Customer:{self.Customer}')
self.DN = kwargs['DN'] if 'DN' in kwargs else {}
@ -54,9 +56,23 @@ class SalesOrderQuery:
# print(self.Reuse)
# if not self.Reuse:
# self.dfDN, self.ext_doc_no_list = self.get_ext_doc_no_list(self.DN)
# self.RefNumber = kwargs['RefNumber'] if 'RefNumber' in kwargs else self.ext_doc_no_list
self.RefNumber = kwargs['RefNumber'] if 'RefNumber' in kwargs else None
# self.get_sales_order_header()
def pprintXml(self, qbxml_query):
import xml.dom.minidom
from xml.sax.saxutils import escape
from lxml import etree
# dom = xml.dom.minidom.parse(xml_fname) # or
if isinstance(qbxml_query, str):
dom = xml.dom.minidom.parseString(qbxml_query)
pretty_xml_as_string = dom.toprettyxml(" ").split('\n')
pretty_xml_as_string = '\n'.join([s for s in pretty_xml_as_string if s.strip() ])
# print(f'pprintxml:\n{pretty_xml_as_string}')
return pretty_xml_as_string
def create_sub_element(self, ET, parentNode, thisNode, text="\n", whiteSpace = 0, attrib =None):
if type(attrib) is not dict:
attrib = {}
@ -81,10 +97,15 @@ class SalesOrderQuery:
QBXMLMsgsRq.text = "\n "
SalesOrderQueryRq = self.create_sub_element(ET, QBXMLMsgsRq, "SalesOrderQueryRq","\n " )
# SalesOrderType = self.create_sub_element(ET, SalesOrderQueryRq, 'SalesOrderType', self.SalesOrderType)
if self.FullName:
if self.RefNumber:
pass
RefNumberFilter = self.create_sub_element(ET, SalesOrderQueryRq, 'RefNumberFilter', "\n ",)
MatchCriterion = self.create_sub_element(ET,RefNumberFilter, 'MatchCriterion', "Contains",)
RefNumber = self.create_sub_element(ET, RefNumberFilter, 'RefNumber', self.RefNumber, )
elif self.FullName:
EntityFilter = self.create_sub_element(ET, SalesOrderQueryRq, 'EntityFilter', "\n ")
FullName = self.create_sub_element(ET, EntityFilter, "FullName", self.FullName, 6)
if self.DateMacro:
elif self.DateMacro:
TxnDateRangeFilter = self.create_sub_element(ET, SalesOrderQueryRq, "TxnDateRangeFilter", "\n ",)
SalesOrderType = self.create_sub_element(ET, TxnDateRangeFilter, "DateMacro", self.DateMacro)
# SalesOrderType = self.create_sub_element(ET, SalesOrderQueryRq, "DateMacro", self.DateMacro)
@ -220,14 +241,7 @@ class SalesOrderQuery:
# print(f"replyfrom qbxml:{self.connect_to_quickbooks(qbxml_query)}")
# print([s for s in qbxml_query.split('\n') if s.strip(' ') != ''])
import xml.dom.minidom
# dom = xml.dom.minidom.parse(xml_fname) # or
dom = xml.dom.minidom.parseString(qbxml_query)
pretty_xml_as_string = dom.toprettyxml(" ").split('\n')
# pretty_xml_as_string = '\n'.join([s for s in pretty_xml_as_string if s.strip(' ') != ""])
pretty_xml_as_string = '\n'.join([s for s in pretty_xml_as_string if s.strip() ])
print(pretty_xml_as_string)
print(self.pprintXml(qbxml_query))
return qbxml_query
@ -282,12 +296,18 @@ class SalesOrderQuery:
def _get_sales_order_header(self, response_string):
print('_get_sales_order_header')
ic(f'responsestring:{response_string}')
print(f'responsestring:{self.pprintXml(response_string)}')
QBXML = ET.fromstring(response_string)
datadict = {}
SalesOrderdict = {}
_SalesOrderlist = []
SalesOrderRets = QBXML.findall('.//SalesOrderRet')
if self.Customer == None:
custtemp = QBXML.find('.//SalesOrderRet/CustomerRef/FullName')
if custtemp != None:
self.Customer = custtemp.text
self.Customer = self._df_customer.loc[(self._df_customer["FullName"]==self.Customer)].values.tolist()[0]
print(f'Customer:{self.Customer}')
# print(SalesOrderRets)
for SalesOrderRet in SalesOrderRets:
RefNumber = SalesOrderRet.find('RefNumber').text
@ -332,6 +352,8 @@ class SalesOrderQuery:
# print(TxnLineID, ItemFullName)
BackOrdered = float(Quantity) - float(Invoiced)
if BackOrdered > 0 and LineIsManuallyClosed.lower() == 'false' :
ic(self.Customer)
if self.Customer:
if self.Customer[2]:
discPerPcs = Rate-self._df_price_level.loc[(self._df_price_level['FullName']==ItemFullName) & (self._df_price_level['PriceLevelName']==self.Customer[2])].values.tolist()[0][2]
# ic(Rate, disc, (Rate - self._df_price_level.loc[(self._df_price_level['FullName']==ItemFullName) & (self._df_price_level['PriceLevelName']==self.SPPriceLevelName)].values.tolist()[0][2]))
@ -566,7 +588,9 @@ if __name__ == '__main__':
# ini=SalesOrderQuery(FullName= '999 HPL', IncludeRetElement = ['TxnID', 'TimeCreated', 'TimeModified','TxnNumber', 'CustomerRef', 'IsManuallyClosed', 'IsFullyInvoiced'])
# ini=SalesOrderQuery(FullName= 'YSM Interior', IncludeRetElement = ['TxnID', 'TimeCreated', 'TimeModified','TxnNumber', 'CustomerRef', 'TxnDate', 'RefNumber', 'IsManuallyClosed', 'IsFullyInvoiced','TotalAmount'])
ini=SalesOrderQuery(FullName= 'Abadi Serpong', IncludeRetElement = ['TxnID', 'TimeCreated', 'TimeModified','TxnNumber', 'CustomerRef', 'TxnDate', 'RefNumber', 'IsManuallyClosed', 'IsFullyInvoiced','TotalAmount'])
# ini=SalesOrderQuery(FullName= 'Abadi Serpong', IncludeRetElement = ['TxnID', 'TimeCreated', 'TimeModified','TxnNumber', 'CustomerRef', 'TxnDate', 'RefNumber', 'IsManuallyClosed', 'IsFullyInvoiced','TotalAmount'])
# ini=SalesOrderQuery(RefNumber = 'B23070685', FullName= 'Abadi Serpong', IncludeRetElement = ['TxnID', 'TimeCreated', 'TimeModified','TxnNumber', 'CustomerRef', 'TxnDate', 'RefNumber', 'IsManuallyClosed', 'IsFullyInvoiced','TotalAmount'])
ini=SalesOrderQuery(RefNumber = 'B23070685', IncludeRetElement = ['TxnID', 'TimeCreated', 'TimeModified','TxnNumber', 'CustomerRef', 'TxnDate', 'RefNumber', 'IsManuallyClosed', 'IsFullyInvoiced','TotalAmount'])
# iya = ini.create_customerquery_QBXML() #pakai excel saja lebih cepat
# print(iya)
print(f'createQBXML:{ini.create_QBXML()}')

View File

@ -1,7 +1,11 @@
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
from fastapi import FastAPI, Request, UploadFile, Body
# from icecream import install
# import icecream
# install()
# from icecream import ic
# ic.configureOutput(includeContext=True, )
import json
from iteminventorydasa import QBStock
import datetime
@ -13,7 +17,7 @@ import pdfexcel4DNwithxlrd
from ItemInventoryQuery import ItemInventoryQuery
from SO_to_Inv import readSO
import os
from icecream import ic
import pprint
# app = FastAPI()
@ -134,6 +138,7 @@ async def getopenso(request: Request, CustomerName: str = Body(...)):
FullName = CustomerName['CustomerName']
print(FullName)
ini=readSO.SalesOrderQuery(FullName= FullName, IncludeRetElement = ['TxnID', 'TimeCreated', 'TimeModified','TxnNumber', 'CustomerRef', 'TxnDate', 'RefNumber', 'IsManuallyClosed', 'IsFullyInvoiced','TotalAmount'])
print("selesai salesorder")
open_sales_orders = ini.get_open_so()
print(f'return opensalesorder:{open_sales_orders}')
return open_sales_orders

View File

@ -58,7 +58,7 @@ class SalesOrderQuery:
qbxml_query = """<?xml version="1.0" encoding="utf-8"?>\n"""
qbxml_query = qbxml_query + """<?qbxml version="13.0"?>"""
qbxml_query = qbxml_query + "\n" + mydata
print(qbxml_query)
return qbxml_query
def connect_to_quickbooks(self, qbxml_query):
@ -83,7 +83,7 @@ class SalesOrderQuery:
def __str__(self, *args) -> str:
# return str(self._get_datarow(self.connect_to_quickbooks(self.create_QBXML())))
# print("__str__")
print("__str__")
return str(self.get_datarow())
# return "hello"

2
test.py Normal file
View File

@ -0,0 +1,2 @@
import icecream
print("berhasil")