mirror of
https://github.com/bcomsugi/dasaproject.git
synced 2026-01-10 16:52:38 +07:00
pretty print and readso can accept RefNumber
This commit is contained in:
parent
f954a83862
commit
051a5c1184
@ -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,9 +31,10 @@ 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 = self._df_customer.loc[(self._df_customer["FullName"]==self.FullName)].values.tolist()[0]
|
||||
print(f'Customer:{self.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 {}
|
||||
self.Reuse = kwargs['Reuse'] if 'Reuse' in kwargs else None
|
||||
|
||||
@ -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,16 +352,18 @@ class SalesOrderQuery:
|
||||
# print(TxnLineID, ItemFullName)
|
||||
BackOrdered = float(Quantity) - float(Invoiced)
|
||||
if BackOrdered > 0 and LineIsManuallyClosed.lower() == 'false' :
|
||||
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]))
|
||||
if discPerPcs > 0:
|
||||
ic(Quantity, BackOrdered, Rate, (Rate - self._df_price_level.loc[(self._df_price_level['FullName']==ItemFullName) & (self._df_price_level['PriceLevelName']==self.Customer[2])].values.tolist()[0][2]))
|
||||
discPerItem = BackOrdered * discPerPcs
|
||||
disc_amount += discPerItem
|
||||
# disc_amount += BackOrdered * 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])
|
||||
else:
|
||||
discPerPcs = 0
|
||||
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]))
|
||||
if discPerPcs > 0:
|
||||
ic(Quantity, BackOrdered, Rate, (Rate - self._df_price_level.loc[(self._df_price_level['FullName']==ItemFullName) & (self._df_price_level['PriceLevelName']==self.Customer[2])].values.tolist()[0][2]))
|
||||
discPerItem = BackOrdered * discPerPcs
|
||||
disc_amount += discPerItem
|
||||
# disc_amount += BackOrdered * 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])
|
||||
else:
|
||||
discPerPcs = 0
|
||||
SalesOrderLinedict = {'TxnLineID':TxnLineID,
|
||||
'ItemFullName':ItemFullName,
|
||||
'Quantity':Quantity,
|
||||
@ -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()}')
|
||||
|
||||
9
main.py
9
main.py
@ -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
|
||||
|
||||
@ -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"
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user