编辑代码

#引入clr运行库
import clr
#添加对cloud插件开发的常用组件的引用
clr.AddReference('System')
clr.AddReference('System.Data')
clr.AddReference('Kingdee.BOS')
clr.AddReference('Kingdee.BOS.DataEntity')
clr.AddReference('Kingdee.BOS.Core')
clr.AddReference('Kingdee.BOS.App')
clr.AddReference('Kingdee.BOS.App.Core')
clr.AddReference('Kingdee.BOS.ServiceHelper')
#导入cloud基础库中的常用实体对象(分命名空间导入,不会递归导入)
from Kingdee.BOS import *
from Kingdee.BOS.Core import *
from Kingdee.BOS.Core.DependencyRules import *
from Kingdee.BOS.Core.Bill import *
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import *
from System import *
from System.Data import *
from Kingdee.BOS.App.Data import *
from System.Collections.Generic import List
from Kingdee.BOS.ServiceHelper import *
from Kingdee.BOS.Core.DynamicForm import *
from Kingdee.BOS.Core.Metadata.EntityElement import *
from Kingdee.BOS.Core.Metadata.FieldElement import *
from Kingdee.BOS.Orm.DataEntity import *
def  BarItemClick(e):
	key=e.BarItemKey;#菜单标识大写
	#this.View.ShowMessage(key);
	if key=="SSQX_tbButton_1":#获取领料套数
		#rows=this.Model.GetEntryRowCount("FOptPlanEntity");
		#this.View.ShowMessage("获取价格");
		billObj = this.View.Model.DataObject;#获取单据头的数据包,即单据的数据包,DynamicObject类型,可进一步解析
		entity=billObj["POOrderEntry"];#订单明细单据体,DynamicObjectCollection类型  POOrderEntry 
		FBillTypeID= this.Model.GetValue("FBillTypeID")["Number"]
		FPurchaseOrgId=this.Model.GetValue("FPurchaseOrgId")["ID"] #采购组织
		#this.View.ShowMessage(str(FPurchaseOrgId));
		#this.View.ShowMessage(str(FBillTypeID));
		if FBillTypeID=="CGDD12_SYS" or FBillTypeID=="CGDD01_SYS": #采购订单  触发包材规则计算价格 
			#this.View.ShowMessage("获取包材价格");
			rows=this.Model.GetEntryRowCount("FPOOrderEntry");
			supplier= this.Model.GetValue("FSupplierId")
			if supplier==None :
				this.View.ShowWarnningMessage("供应商不能为空");
			else:
				#this.View.ShowMessage(str(rows));
				supplierID=supplier["ID"];
				for i in range(rows):
					FMaterial= this.Model.GetValue("FMaterialID",i)# 物料ID
					if not FMaterial is None:
						FMaterialID= FMaterial["Id"] # 物料ID
						Number= FMaterial["Number"] # 物料代码
						
						BaseProperty= this.Model.GetValue("FMaterialID",i)["F_VCDB_BASE3"]["ID"]#物料分类ID
						F_VCDB_Combo= this.Model.GetValue("FMaterialID",i)["F_VCDB_Combo"]#物料价格来源 F_VCDB_Combo  1 包材规则  4 金属材料价格
						#this.View.ShowMessage(str(F_VCDB_Combo));
						if str(F_VCDB_Combo)=="4":#金属材料计算规则
							supplierNo=supplier["Number"];
							
							cuSql ="";
							dbsql =  ("SELECT p.FPRICE,p.FTaxPrice,p.FDATAVALUE,p.FNUMBER  FROM V_WDI_PURPrice p where FDATAVALUE IS NOT NULL AND p.FSupplyNumber='{0}' and p.FNUMBER='{1}' ").format(supplierNo,Number);
							
							result = DBServiceHelper.ExecuteDynamicObject(this.Context, dbsql)
							#raise Exception(dbsql)
							if len(result) > 0:#有金属价目表
								cuSql="SELECT  F_SSQX_DATE_APV ,F_SSQX_DECIMAL_TZK ,F_SSQX_DECIMAL_QTR ,F_SSQX_DECIMAL_83G ,F_SSQX_DECIMAL_RE5  FROM SSQX_t_Cust100129  where  CONVERT(varchar (10), F_SSQX_DATE_APV) = CONVERT(varchar (10), GETDATE()) ";
								#this.View.ShowMessage(cuSql);
								curesult = DBServiceHelper.ExecuteDynamicObject(this.Context, cuSql)
								#F_SSQX_DECIMAL_TZK '铜均价',F_SSQX_DECIMAL_QTR '铝均价',F_SSQX_DECIMAL_83G '镍均价',F_SSQX_DECIMAL_RE5 '锡均价' 
								if len(curesult) > 0:#有金属价格
									metal_type = result[0][2]  # 第三列是FDATAVALUE  金属类型
									this.View.ShowMessage(metal_type);
									copper_price=0;
									if metal_type == "铜":
										copper_price = curesult[0][1] # 铜均价     
									elif metal_type == "铝":
										copper_price = curesult[0][2] # 铝均价    
									elif metal_type == "镍":
										copper_price = curesult[0][3] # 镍均价
									elif metal_type == "锡":
										copper_price = curesult[0][4] # 锡均价  										
									#raise Exception(copper_price)
									cu_price=round(result[0][0],6)#铜加工费未税  价目表未税单价
									tax_included_price = round((copper_price / 1000/1.13) + cu_price,6)
									this.Model.SetValue("F_SSQX_Decimal_re5",copper_price,i)#F_SSQX_Decimal_re5 金属实时价格
									this.Model.SetValue("F_VCDB_Price1",tax_included_price,i) #规则单价
									this.Model.SetValue("FTAXPRICE",round(tax_included_price*1.13,6),i)
									this.Model.SetValue("F_SSQX_Price",result[0][1]*1000,i)#F_SSQX_Price 铜加工费含税 价目表含税价格*1000
									#raise Exception("you")
							else:
								
								#raise Exception("wu")
								this.Model.SetValue("F_VCDB_Price1",0,i) #规则单价
								this.Model.SetValue("FTAXPRICE",0,i)
								this.Model.SetValue("F_SSQX_Price",0,i)
								this.Model.SetValue("F_SSQX_Decimal_re5",0,i)
								
							
							
                    					
						else:
							dbsql = ("SELECT p.FID  FROM VCDB_t_Cust100023 p where p.F_VCDB_BASE={0} ").format(BaseProperty);
							dbresult = DBServiceHelper.ExecuteDynamicObject(this.Context, dbsql)
							supplierNo=supplier["Number"];
							if len(dbresult) > 0:#是包材计算规则
								dbsql = ("SELECT  FPrice , FSUPPLIERID,FMATERIALID,FUSEORGID,p.FMMASTERID,p.FNUMBER,p.FSupplyNumber   FROM  V_WDI_PURPrice p  WHERE  p.FSupplyNumber='{0}' and p.FNUMBER='{1}' ").format(supplierNo,Number);
								#this.View.ShowMessage(dbsql);
								dbresult = DBServiceHelper.ExecuteDynamicObject(this.Context, dbsql)
								#this.View.ShowMessage(str(len(dbresult) ));
								if len(dbresult) > 0:#存在价目表
									#this.View.ShowMessage(str(dbresult[0][0]));
									this.Model.SetValue("F_VCDB_Price1",dbresult[0][0],i) #规则单价
									this.Model.SetValue("FTAXPRICE",round(dbresult[0][0]*1.13,6),i)
								else:#价目表不存在通过包材价格规则取价
									#this.View.ShowMessage("这里");
									sql = "SELECT p.FPriceStandard,p.FPrice,p.FNUMBER  FROM V_WDI_PagePrice p where p.FMATERIALID="+str(FMaterialID);
									#this.View.ShowMessage(sql);
									result = DBServiceHelper.ExecuteDynamicObject(this.Context, sql)
									if len(result) > 0:
										#this.View.ShowMessage(str(len(result)));
										this.Model.SetValue("F_VCDB_Price1",result[0][1],i) #包装系数
										this.Model.SetValue("F_VCDB_Decimal2",result[0][0],i) #规则单价
										this.Model.SetValue("FTAXPRICE",round(result[0][1]*1.13,6),i)
									else:
										this.Model.SetValue("F_VCDB_Price1",0,i) #包装系数
										this.Model.SetValue("F_VCDB_Decimal2",0,i) #规则单价
										this.Model.SetValue("FTAXPRICE",0,i)
		elif  FBillTypeID=="CGDD02_SYS": #委外订单  触发电镀规则计算价格
			#this.View.ShowMessage("获取电镀价格");
			rows=this.Model.GetEntryRowCount("FPOOrderEntry");
			supplier= this.Model.GetValue("FSupplierId")
			if supplier==None :
				this.View.ShowWarnningMessage("供应商不能为空");
			else:
				#this.View.ShowMessage(str(rows));
				supplierID=supplier["ID"];
				for i in range(rows):
					#this.View.ShowWarnningMessage(str(i));
					#number= this.Model.GetValue("MaterialID",0)["Number"]
					FMaterial= this.Model.GetValue("FMaterialID",i)# 物料ID
					#if FMaterial==None :
					#	this.View.ShowWarnningMessage("")
					if not FMaterial is None:
						FMaterialID= FMaterial["Id"] # 物料ID
						Number= FMaterial["Number"] # 物料代码
						BaseProperty= this.Model.GetValue("FMaterialID",i)["F_VCDB_BASE3"]["ID"]#物料分类ID
						F_VCDB_Combo= this.Model.GetValue("FMaterialID",i)["F_VCDB_Combo"]#物料价格来源 F_VCDB_Combo  1 包材规则  4 金属材料价格
						supplierNo=supplier["Number"];
						if str(BaseProperty)=="235102" or str(BaseProperty)=="235104":#	确认是电镀和喷砂规则
							dbsql = ("SELECT  FPrice , FSUPPLIERID,FMATERIALID,FUSEORGID,p.FMMASTERID,p.FNUMBER,p.FSupplyNumber   FROM  V_WDI_PURPrice p  WHERE  p.FSupplyNumber='{0}' and p.FNUMBER='{1}' ").format(supplierNo,Number);
							#this.View.ShowMessage(dbsql);
							dbresult = DBServiceHelper.ExecuteDynamicObject(this.Context, dbsql)
							if len(dbresult) > 0:#存在价目表
								#this.View.ShowMessage(str(dbresult[0][0]));
								this.Model.SetValue("F_VCDB_Price1",dbresult[0][0],i) #规则单价
								this.Model.SetValue("FTAXPRICE",round(dbresult[0][0]*1.13,6),i)
							else:#按公式取价
								dbsql = ("SELECT p.standardPrice,p.FPrice,p.FNUMBER,p.FMATERIALID  FROM V_WDI_DianduPshaPrice p where p.FMATERIALID={0} and p.FSupplyID={1}").format(FMaterialID,supplierID);
								#this.View.ShowMessage(dbsql);
								dbresult = DBServiceHelper.ExecuteDynamicObject(this.Context, dbsql)
								if len(dbresult) > 0:
									#this.View.ShowMessage(str(len(dbresult)));
									this.Model.SetValue("F_VCDB_Decimal",dbresult[0][0],i) #电镀价格系数
									this.Model.SetValue("F_VCDB_Price1",dbresult[0][1],i) #规则单价 FISINCLUDEDTAX
									this.Model.SetValue("FTAXPRICE",round(dbresult[0][1]*1.13,6),i)
								else:
									this.Model.SetValue("F_VCDB_Decimal",0,i) #电镀价格系数
									this.Model.SetValue("F_VCDB_Price1",0,i) #规则单价
									this.Model.SetValue("FTAXPRICE",0,i)
						elif  str(F_VCDB_Combo)=="4":#金属材料计算规则
							#this.View.ShowMessage("金属");
							supplierNo=supplier["Number"];
							dbsql =  ("SELECT p.FPRICE,p.FTaxPrice,p.FNUMBER  FROM V_WDI_PURPrice p where FDATAVALUE IS NOT NULL AND p.FSupplyNumber='{0}' and p.FNUMBER='{1}' ").format(supplierNo,Number);
							result = DBServiceHelper.ExecuteDynamicObject(this.Context, dbsql)
							if len(result) > 0:#有金属价目表
								cuSql="SELECT  F_SSQX_DATE_APV ,F_SSQX_DECIMAL_TZK ,F_SSQX_DECIMAL_QTR ,F_SSQX_DECIMAL_83G ,F_SSQX_DECIMAL_RE5  FROM SSQX_t_Cust100129  where  CONVERT(varchar (10), F_SSQX_DATE_APV) = CONVERT(varchar (10), GETDATE()) ";
								curesult = DBServiceHelper.ExecuteDynamicObject(this.Context, cuSql)
								if len(curesult) > 0:#有金属价目表
									metal_type = result[0][2]  # 第三列是FDATAVALUE  金属类型
									copper_price=0;
									if metal_type == "铜":
										copper_price = curesult[0][1] # 铜均价     
									elif metal_type== "铝":
										copper_price = curesult[0][2] # 铝均价    
									elif metal_type== "镍":
										copper_price = curesult[0][3] # 镍均价
									elif metal_type == "锡":
										copper_price = curesult[0][4] # 锡均价  
								# 供应商编码是 A.01.09  含税单价=长江现货均价/1000+价目表含税单价
								#规则单价取未税单价  供应商编码是 A.01.09长江现货均价/1000/1.13+价目表未税单价  其他供应商 价目表未税单价
									tax_included_price=0
									#copper_price = curesult[0][1] # 铜均价     result[0][1]  金属加工费
									cu_price=round(result[0][0],6)#铜加工费未税  价目表未税单价
							
									if str(supplierNo)=='A.01.09':
										tax_included_price = round((copper_price / 1000/1.13)*0.04 + cu_price,6)
									else:
										tax_included_price = cu_price
							
									#raise Exception(str(tax_included_price))
									#tax_included_price = round(cu_price*1000,3)
									this.Model.SetValue("F_SSQX_Decimal_re5",copper_price,i)#F_SSQX_Decimal_re5 金属实时价格
									this.Model.SetValue("F_VCDB_Price1",tax_included_price,i) #规则单价
									this.Model.SetValue("FTAXPRICE",round(tax_included_price*1.13,6),i)
									this.Model.SetValue("F_SSQX_Price",result[0][1]*1000,i)#F_SSQX_Price 铜加工费含税 价目表含税价格*1000
							else:
								this.View.ShowMessage("无价格");
								this.Model.SetValue("F_SSQX_Decimal_re5",0,i)#F_SSQX_Decimal_re5 金属实时价格
								this.Model.SetValue("FTAXPRICE",0,i)
								this.Model.SetValue("F_SSQX_Price",0,i)#F_SSQX_Price 铜加工费含税
								this.Model.SetValue("F_VCDB_Price1",0,i) #规则单价