From b29322d13812e9eb0ebb0aa0832ff9c7f4de7a22 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Thu, 26 Sep 2024 17:58:27 +0800 Subject: [PATCH] bugfix --- accounting/accounting.py | 48 +++++++++++++++++++++++ accounting/accounting_config.py | 2 - docs/平台类系统记账子系统.docx | Bin 17389 -> 17495 bytes 3 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 accounting/accounting.py diff --git a/accounting/accounting.py b/accounting/accounting.py new file mode 100644 index 0000000..5ca518d --- /dev/null +++ b/accounting/accounting.py @@ -0,0 +1,48 @@ +from appPublic.registerfunction import RegisterFunction +from appPublic.dictOBject import DictObject +from appPublic.log import debug, exception, error +from accounting_config import AccountingOrgs + +""" +We use Biz module's function to get inner provider and its sellprice, and product cost +We use platform biz module to get pay_fee, and trans_fee amount by transamt + +async bz_get_transfee(sor, transamt:float) -> float: +async bz_get_pay_fee(sor, resellerid, transamt:float) -> float: +async bz_get_inner_provider(sor, resellerid, productid, transamt) ->list of iobject with key in (resellerid, productid, transamt, purchase_cost) +""" + +async def bay_accouting(sor, actname, + orderid, + customerid, + resellerid, + productid, + unitprice, + quantity, + transamt): + rf = RegisterFunction() + f = rf.get('bz_get_transfee') + if f is None: + e = Exception(f'fucntion "bz_get_transfee" not registed') + raise e + transfee = await f(sor, resellerid, transamt) + resellers = await bz_get_inner_provider(sor, resellerid, productid, transamt) + par = [] + for i, reseller in enumerate(resellers): + env = DictOBject(**{ + 'actname':actname, + 'orderid':orderid, + 'customerid':customerid, + 'productid':reseller.productid, + 'resellerid':resellerid, + '交易费': 0 if i>0 else transfee, + '交易金额':reseller.transamt, + '进货成本':reseller.purchase_cost, + 'accounting_rule':[ + ] + }) + + ac = AccountingOrgs(env.copy()) + ac.do_accounting(sor) + + PlatformAccount( diff --git a/accounting/accounting_config.py b/accounting/accounting_config.py index e19dd08..2b65715 100644 --- a/accounting/accounting_config.py +++ b/accounting/accounting_config.py @@ -27,11 +27,9 @@ class AccountingOrgs: def __init__(self, caller, accounting_orgid, customerid, - dbname=DBNAME, resellerid=None ): self.caller = caller - self.dbname = dbname self.curdate = caller.curdate self.realtimesettled = False self.curdte = caller.curdate diff --git a/docs/平台类系统记账子系统.docx b/docs/平台类系统记账子系统.docx index 7ea76d4fcd230d77a0b9ea926972b6ecb909a74f..850c96fb4028520d44bec2e20f6995257b7b4c50 100644 GIT binary patch delta 7830 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

k}F!HK+4 z;35?R1?hAAz(l0fMhM#HdE!- zf87VDZP=9v{cP|^Zpq+lwh-Szf_jZm_n#3le!(*}yA9KQ|6ec&$6L^tEHDvXF?9I@ zTD*kWVZc?@$PNZYltaN8i@)-j{8Dvze^_)yy$KP+QbZB+ozHlWwqOq)^>C~aM^xq+ z97A=Jt*pz`*SSw$$~t>!p^VffX{9dhMxkkK>H6q<*F*oFhs5FU+uh7?qH+TB<>IudhhxF6fFsZ=nsGUnvmd?Z%k zc^rN={q4}U^C~Qaq^Qz5bZ!v2pX4>e_zA^&nY*%g_T|eH^1~opnZFf6KtWc3S?k}w zu78mLsTgAG|M!>gt(Xd|Fj=aUI1TXs_2z%z{hyMc{;yM~f+UEE|H~%We-{5A6aSxT zP8|^!hP7l$MU)VR*-Mp@5Q8;kOO2ACApYNA|6|}USO5Uye=hu6O{We?P$341{paw1 E0e-gk6951J delta 7718 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