131 lines
4.8 KiB
Python
131 lines
4.8 KiB
Python
import clr
|
||
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}]
|
||
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)
|
||
|
||
|
||
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:
|
||
# 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);
|
||
sql = """/*dialect*/
|
||
SELECT
|
||
rowSet2.[1] AS 'MaterialId'
|
||
,rowSet2.[2] AS 'inRow'
|
||
INTO #TMPMATERIALNUM
|
||
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
|
||
|
||
SELECT CONVERT(int,tt0.inRow) AS inRow
|
||
,ISNULL(tt2.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,0) AS '<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
|
||
,ISNULL(tt2.<2E><>˰<EFBFBD><CBB0><EFBFBD><EFBFBD>,0) AS '<EFBFBD><EFBFBD>˰<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
|
||
,ISNULL(tt2.<2E>ۺϵ<DBBA><CFB5><EFBFBD>,0) AS '<EFBFBD>ۺϵ<EFBFBD><EFBFBD><EFBFBD>'
|
||
,ISNULL(tt2.Ĭ<><C4AC>˰<EFBFBD><CBB0>,0) AS 'Ĭ<EFBFBD><EFBFBD>˰<EFBFBD><EFBFBD>'
|
||
,tt2.FBILLNO
|
||
FROM #TMPMATERIALNUM tt0
|
||
OUTER APPLY (
|
||
SELECT TOP 1
|
||
t0e.FID
|
||
,t0e.FENTRYID
|
||
,t0.FBILLNO
|
||
,t0.F_QNV_TEXT2
|
||
,t0e.F_QNV_BASE1 AS '<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
|
||
,t0e.F_QNV_DECIMAL1 AS '<EFBFBD><EFBFBD>˰<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
|
||
,t0e.F_QNV_DECIMAL3 AS '<EFBFBD>ۺϵ<EFBFBD><EFBFBD><EFBFBD>'
|
||
,t0e.F_QNV_DATE2 AS '<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
|
||
,t0e.F_QNV_DATE3 AS '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧЧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
|
||
,t1.FTAXRATE AS 'Ĭ<EFBFBD><EFBFBD>˰<EFBFBD><EFBFBD>'
|
||
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)
|
||
|
||
result = DBServiceHelper.ExecuteDynamicObject(this.Context, sql)
|
||
|
||
if result != None and result.Count > 0:
|
||
priceKey = "<EFBFBD>ۺϵ<EFBFBD><EFBFBD><EFBFBD>" if hasQRCost else "<EFBFBD><EFBFBD>˰<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
|
||
for row in result:
|
||
rowIndex = row["inRow"]
|
||
this.View.Model.SetValue("FTAXPRICE", row[priceKey], rowIndex)
|
||
this.View.Model.SetValue("FTAXRATE", row["Ĭ<EFBFBD><EFBFBD>˰<EFBFBD><EFBFBD>"], rowIndex)
|
||
this.View.InvokeFieldUpdateService("FTAXPRICE" ,rowIndex)
|
||
|
||
def DoCheckConditions():
|
||
orgObj = this.View.Model.GetValue("FApplicationOrgId")
|
||
if orgObj["Id"] == 101542:
|
||
return True
|
||
return False
|
||
|
||
|