预发货判断

This commit is contained in:
liangjunyu
2025-08-07 09:50:34 +08:00
parent 38117dbe42
commit 1d23ec01d7

View File

@@ -10,6 +10,8 @@ clr.AddReference('Kingdee.BOS.App.Core')
clr.AddReference('Kingdee.BOS.Contracts')
clr.AddReference('Kingdee.BOS.DataEntity')
clr.AddReference('Kingdee.BOS.ServiceHelper')
clr.AddReference('GZ_LTHPilot_ORDER')
#dairycloud基础库中的常用实体对象分命名空间导入不会递归导入
from Kingdee.BOS.Core import *
from Kingdee.BOS.Util import *
@@ -30,6 +32,7 @@ from Kingdee.BOS.Contracts import *
from System.Collections.Generic import List
from Kingdee.BOS.ServiceHelper import *
from Kingdee.BOS.App.Core import *
from GZ_LTHPilot_ORDER.Service import *
def OnPreparePropertys(e):
e.FieldKeys.Add("FAllAmount");
@@ -44,7 +47,8 @@ def BeforeDoSaveExecute(e):
if entity["SaleOrgId_Id"] != 100303:
continue;
if entity["DocumentStatus"] != "Z" and entity["DocumentStatus"] != "C" and entity["DocumentStatus"] != "D":
saleOrgId = entity["SaleOrgId_Id"]
if entity["DocumentStatus"] == "B" or entity["DocumentStatus"] == "C":
continue;
billId = entity["Id"]
@@ -62,7 +66,8 @@ def BeforeDoSaveExecute(e):
continue;
sql = """/*dialect*/
SELECT SUM(t0.F_Amount) '累计核销金额',SUM(ISNULL(t0p.FRECADVANCEAMOUNT,0)) '款到发货应收金额',SUM(ISNULL(t0p.收款计划条数,0)) '收款计划条数',SUM(ISNULL(t1.FALLAMOUNT,0)) '累计已发货金额'
SELECT t0.FBILLNO,t0.FID,SUM(t0.F_Amount) '累计核销金额',SUM(ISNULL(t0p.FRECADVANCEAMOUNT,0)) '款到发货应收金额',SUM(ISNULL(t0p.收款计划条数,0)) '收款计划条数',SUM(ISNULL(t1.FALLAMOUNT,0)) '累计已发货金额'
FROM T_SAL_ORDER t0
OUTER APPLY (
SELECT SUM(t0p.FRECADVANCEAMOUNT) 'FRECADVANCEAMOUNT',COUNT(1) '收款计划条数'
@@ -75,29 +80,51 @@ FROM T_SAL_ORDER t0
SELECT SUM(t1e_f.FALLAMOUNT) FALLAMOUNT
FROM T_SAL_DELIVERYNOTICEENTRY_LK t1e_lk
INNER JOIN T_SAL_DELIVERYNOTICEENTRY_F t1e_f on t1e_f.FENTRYID = t1e_lk.FENTRYID
WHERE t1e_lk .FSID = t0.FID AND t1e_f.FID != {1}
WHERE t1e_lk.FSBILLID = t0.FID AND t1e_f.FID != {1}
) t1
WHERE t0.FID IN ({0})
GROUP BY t0.FBILLNO,t0.FID
""".format(",".join(set(idList)), billId)
res = DBServiceHelper.ExecuteDynamicObject(this.Context, sql)
if res != None and res.Count > 0:
# raise Exception(JsonUtil.Serialize(res))
item = res[0]
saleBillNo = item["FBILLNO"]
saleBillId = item["FID"]
if entity["SAL_DELIVERYNOTICEFIN"] != None and entity["SAL_DELIVERYNOTICEFIN"].Count > 0:
saleOrderService = SaleOrderService(this.Context)
# 本次发货价税合计
currAmount = entity["SAL_DELIVERYNOTICEFIN"][0]["BillAllAmount"]
# 累计核销金额
sumAmount = item["累计核销金额"]
sumAmount = 0
try:
sumAmount = saleOrderService.GetSaleOrderReceiveAmount(str(saleOrgId),saleBillNo)
except Exception as ex:
sumAmount = item["累计核销金额"];
# raise Exception("当前销售组织:" + str(saleOrgId) + ",销售订单号:" + saleBillNo)
# 款到发货应收金额
sumArAmount = item["款到发货应收金额"]
# 累计已发货金额
sumOutAmount = item["累计已发货金额"]
sumOutAmount = item["累计已发货金额"] + currAmount
countPlan = item["收款计划条数"]
# 1累计核销金额# >= 收款计划收款条件含【款到发货】字样的应收金额汇总,发贷通知单为正常发货;
flag01 = sumAmount >= sumArAmount
flag02 = ((sumOutAmount + currAmount) <= sumAmount and (sumOutAmount + currAmount) <= sumArAmount)
flag03 = countPlan > 0 and (sumOutAmount + currAmount) > sumAmount and sumAmount < sumArAmount
# 2包含本次的发货通知单累计发货金额<=累计核销金额# <= 收款计划收款条件含【款到发货】字样的应收金额汇总,发贷通知单为正常发货;
flag02 = (sumOutAmount <= sumAmount and sumOutAmount <= sumArAmount)
# 3销售订单收款计划条数>0,包含本次的发货通知单累计发货金额>累计核销金额#,并且累计核销金额#<收款计划收款条件含【款到发货】字样的应收金额汇总,发货通知单为预发货。
flag03 = countPlan > 0 and sumOutAmount > sumAmount and sumAmount < sumArAmount
entity["F_SFYFH"] = '' if flag01 == False and flag02 == False and flag03 == True else ''
# raise Exception("当前销售组织:" + str(saleOrgId) + ",销售订单号:" + saleBillNo + ",累计核销金额:" + str(sumAmount) + ",累计已发货金额:" + str(sumOutAmount) + ",款到发货应收金额:" + str(sumArAmount) + ",收款计划条数:" + str(countPlan) + ",是否发货:" + entity["F_SFYFH"])
if sumAmount != 0 and sumAmount != item["累计核销金额"]:
updOrderSql = """/*dialect*/
UPDATE T_SAL_ORDER SET F_Amount = {0} WHERE FID = {1} """.format(sumAmount, saleBillId)
DBServiceHelper.Execute(this.Context, updOrderSql)
return;