Files
GateDge2023_ljy/02.珠海市供水有限公司/ZHSW.Python/PUR_Requisition/BillEventPlugInEx.py

143 lines
5.7 KiB
Python
Raw Normal View History

2024-04-22 09:39:19 +08:00
import clr
2024-03-28 11:30:14 +08:00
clr.AddReference("System")
clr.AddReference("Kingdee.BOS")
clr.AddReference("Kingdee.BOS.Core")
clr.AddReference("Kingdee.BOS.DataEntity")
clr.AddReference("Kingdee.BOS.App")
clr.AddReference("Kingdee.BOS.Contracts")
clr.AddReference("Kingdee.BOS.ServiceHelper")
from Kingdee.BOS import*
from Kingdee.BOS.Core import *
from Kingdee.BOS.Orm.DataEntity import*
from Kingdee.BOS.Orm.Metadata.DataEntity import*
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import *
from Kingdee.BOS.Util import *
from System import *
from System.ComponentModel import*
from System.Collections.Generic import*
from System.Text import*
from Kingdee.BOS.ServiceHelper import *
def DataChanged(e):
if e.Field.Key == "FMaterialId":
if DoCheckConditions():
if e.NewValue != None and e.NewValue != 0:
hasQRCost = this.View.Model.GetValue("FHasQRCost")
idlist = [{ "materialId" : e.NewValue , "inRow" : e.Row}]
2024-05-15 13:56:09 +08:00
# raise Exception(str(e.NewValue)+","+str(e.Row))
2024-03-28 11:30:14 +08:00
GetcContractAnnualCost(idlist,hasQRCost)
else:
this.View.Model.SetValue("FTAXPRICE", 0, e.Row)
this.View.Model.SetValue("FTAXRATE", 0, e.Row)
this.View.InvokeFieldUpdateService("FTAXPRICE" ,e.Row)
if e.Field.Key == "FHasQRCost":
if DoCheckConditions():
hasQRCost = e.NewValue
entity = this.View.BusinessInfo.GetEntity("FEntity")
entrys = this.View.Model.GetEntityDataObject(entity)
idlist = list(filter(lambda x:x["materialId"] > 0,map(lambda x:{ "materialId":x["MaterialId_Id"] ,"inRow": x["Seq"] - 1} ,entrys)))
GetcContractAnnualCost(idlist,hasQRCost)
2024-04-10 10:39:04 +08:00
2024-05-15 13:56:09 +08:00
def AfterCreateNewData(e):
if DoCheckConditions():
details = this.View.BusinessInfo.GetEntity("FEntity");
if details != None :
entrys = this.View.Model.GetEntityDataObject(details);
if entrys != None and entrys.Count > 0:
hasQRCost = this.View.Model.GetValue("FHasQRCost")
idlist = []
for entry in entrys:
rowIndex = this.View.Model.GetRowIndex(details, entry)
materialObjValue = entry["MaterialId_Id"]
materialValue = 0 if materialObjValue == None else materialObjValue
idlist.append({ "materialId" :materialValue , "inRow" : rowIndex})
GetcContractAnnualCost(idlist,hasQRCost)
2024-03-28 11:30:14 +08:00
def GetcContractAnnualCost(idList,hasQRCost):
# whereSql = " AND t0e.F_QNV_BASE1 IN ({0}) ".format(",".join(idList))
intoSqlList = List[str]()
if idList != None and idList.Count > 0:
2024-04-10 10:39:04 +08:00
# for idObj in idList:
# intoSqlList.Add("SELECT {0} AS 'MATERIALID' ,{1} inRow".format(str(idObj["materialId"]),str(idObj["inRow"])));
# whereSql = " union ".join(intoSqlList);
for x in idList:
intoSqlList.Add(str(x["materialId"]) +','+ str(x["inRow"]))
whereSql = ";".join(intoSqlList);
2024-03-28 11:30:14 +08:00
sql = """/*dialect*/
2024-04-10 10:39:04 +08:00
SELECT
rowSet2.[1] AS 'MaterialId'
,rowSet2.[2] AS 'inRow'
2024-03-28 11:30:14 +08:00
INTO #TMPMATERIALNUM
2024-04-10 10:39:04 +08:00
FROM (
SELECT 1 ID,CAST('<v>'+ REPLACE('{0}',';','</v><v>') + '</v>' AS XML) AS xmlVal
) AS valSet
OUTER APPLY (
SELECT ROW_NUMBER() OVER (ORDER BY valSet.ID) RN
,CAST('<v>'+ REPLACE(T.C.value('.','varchar(100)'),',','</v><v>') + '</v>' AS XML) xmlVal
FROM valSet.xmlVal.nodes('/v') AS T(C)
) rowSet
OUTER APPLY (
SELECT * FROM (
SELECT T.C.value('.','varchar(100)') AS xmlVal
,ROW_NUMBER() OVER (ORDER BY rowSet.RN) RowNo
FROM rowSet.xmlVal.nodes('/v') AS T(C)
) TT
PIVOT ( MAX(TT.xmlVal) FOR TT.RowNo IN ([1],[2])) TT2
) rowSet2
2024-03-28 11:30:14 +08:00
2024-04-10 10:39:04 +08:00
SELECT CONVERT(int,tt0.inRow) AS inRow
2024-04-22 09:39:19 +08:00
,ISNULL(tt2.物料内码,0) AS '物料内码'
,ISNULL(tt2.含税单价,0) AS '含税单价'
,ISNULL(tt2.综合单价,0) AS '综合单价'
,ISNULL(tt2.默认税率,0) AS '默认税率'
2024-04-10 10:39:04 +08:00
,tt2.FBILLNO
FROM #TMPMATERIALNUM tt0
OUTER APPLY (
SELECT TOP 1
t0e.FID
,t0e.FENTRYID
,t0.FBILLNO
,t0.F_QNV_TEXT2
2024-04-22 09:39:19 +08:00
,t0e.F_QNV_BASE1 AS '物料内码'
,t0e.F_QNV_DECIMAL1 AS '含税单价'
,t0e.F_QNV_DECIMAL3 AS '综合单价'
,t0e.F_QNV_DATE2 AS '单价生效日期'
,t0e.F_QNV_DATE3 AS '单价失效日期'
,t1.FTAXRATE AS '默认税率'
2024-04-10 10:39:04 +08:00
FROM QNV_t_Cust_Entry100003 t0
INNER JOIN QNV_t_Cust_Entry100004 t0e on t0.FID = t0e.FID
INNER JOIN T_BD_TAXRATE t1 on t1.FID = t0e.F_QNV_BASE3
CROSS APPLY (
SELECT t3.FMATERIALID
FROM T_BD_MATERIAL t2
INNER JOIN T_BD_MATERIAL t3 on t2.FMASTERID = t3.FMASTERID
WHERE t2.FMATERIALID = tt0.MATERIALID
AND t3.FMATERIALID = t0e.F_QNV_BASE1
) tt1
WHERE 1 = 1
AND t0.FDOCUMENTSTATUS ='C'
AND GETDATE() BETWEEN t0e.F_QNV_DATE2 AND t0e.F_QNV_DATE3
ORDER BY t0e.F_QNV_DATE2 DESC
) tt2
WHERE 1 = 1
""".format(whereSql)
2024-03-28 11:30:14 +08:00
result = DBServiceHelper.ExecuteDynamicObject(this.Context, sql)
if result != None and result.Count > 0:
2024-04-22 09:39:19 +08:00
priceKey = "综合单价" if hasQRCost else "含税单价"
2024-03-28 11:30:14 +08:00
for row in result:
2024-04-10 10:39:04 +08:00
rowIndex = row["inRow"]
2024-03-28 11:30:14 +08:00
this.View.Model.SetValue("FTAXPRICE", row[priceKey], rowIndex)
2024-04-22 09:39:19 +08:00
this.View.Model.SetValue("FTAXRATE", row["默认税率"], rowIndex)
2024-03-28 11:30:14 +08:00
this.View.InvokeFieldUpdateService("FTAXPRICE" ,rowIndex)
def DoCheckConditions():
orgObj = this.View.Model.GetValue("FApplicationOrgId")
if orgObj["Id"] == 101542:
return True
2024-05-15 13:56:09 +08:00
return False