271 lines
25 KiB
Transact-SQL
271 lines
25 KiB
Transact-SQL
|
||
/****** Object: StoredProcedure [dbo].[UPDATESpecialContracts] Script Date: 2025/8/20 11:24:16 ******/
|
||
SET ANSI_NULLS ON
|
||
GO
|
||
SET QUOTED_IDENTIFIER ON
|
||
GO
|
||
|
||
|
||
ALTER PROCEDURE [dbo].[UPDATESpecialContracts]
|
||
(
|
||
@FID NVARCHAR(1000)
|
||
)
|
||
AS
|
||
|
||
|
||
DECLARE @YiBiaoTeJia INT=0,@HeTongTeJia INT =0;
|
||
|
||
update a set A.F_SPECIALCONTRACTS = '否'
|
||
FROM T_SAL_ORDER A
|
||
WHERE A.fid =@FID AND A.FDOCUMENTSTATUS IN ('Z','A','D')
|
||
--update AE set AE.F_specialoffer = '0'
|
||
--FROM T_SAL_ORDER A LEFT JOIN T_SAL_ORDERENTRY AE ON A.FID = AE.FID WHERE A.FID = @FID AND A.FDOCUMENTSTATUS IN ('Z','A','D')
|
||
|
||
--一、仪表合同(P、C、E、S):
|
||
--1、销售订单分录中,只要存在任何一条数据,含税单价<结算价【物料资料自定义字段】,只能判定该销售订单为特价订单,不能判断是否需要走特价审批流程,判定是否走审批流程是需要经过以下步骤2。
|
||
--【步骤2】、此时需要看“是否直签客户”这个字段的值:
|
||
--(1)如果是“否”,那么需要走特价申请流程;
|
||
--(2)如果是“是”或空值,那么需要判断同客户同项目同产品代码是否这价格下过(同价格),如果下过可以不走特价(历史已经审批过的销售订单:同客户同项目同产品代码同价格),没下过需要特价申请;
|
||
|
||
--否直签客户,走特价申请流程
|
||
update a set F_SPECIALCONTRACTS = '是'
|
||
FROM T_SAL_ORDER A
|
||
INNER JOIN T_BD_CUSTOMER E ON E.FCUSTID = A.FCUSTID
|
||
INNER JOIN T_SAL_ORDERENTRY B ON A.FID = B.FID
|
||
INNER JOIN T_SAL_ORDERENTRY_F D ON D.FENTRYID =B.FENTRYID
|
||
INNER JOIN T_BD_MATERIAL C ON C.FMATERIALID = B.FMATERIALID
|
||
INNER JOIN V_ASSISTANTDATA U ON U.FENTRYID = A.F_Ordercategory
|
||
where U.FNUMBER IN ('P','C','E','S')
|
||
AND ABS(D.FAllAmount_LC)<ABS(B.F_SETTLEMENTP*B.FQTY)
|
||
AND A.FID = @FID
|
||
AND A.FDOCUMENTSTATUS IN ('Z','A','D')
|
||
AND (A.F_DirectSigningCus = '否')
|
||
|
||
|
||
--是或空的直签客户,判断是否走特价审批流程
|
||
update a set F_SPECIALCONTRACTS = '是'
|
||
--SELECT 1
|
||
FROM T_SAL_ORDER A
|
||
INNER JOIN T_BD_CUSTOMER E ON E.FCUSTID = A.FCUSTID
|
||
INNER JOIN T_SAL_ORDERENTRY B ON A.FID = B.FID
|
||
INNER JOIN T_SAL_ORDERENTRY_F D ON D.FENTRYID =B.FENTRYID
|
||
INNER JOIN T_BD_MATERIAL C ON C.FMATERIALID = B.FMATERIALID
|
||
INNER JOIN T_BAS_PREBDONE_L I ON A.F_PROJECTNAME = I.FID
|
||
CROSS APPLY
|
||
(
|
||
SELECT COUNT(E.FBILLNO) AS C
|
||
FROM T_SAL_ORDER E
|
||
INNER JOIN T_SAL_ORDERentry F ON E.FID = F.FID
|
||
INNER JOIN T_SAL_ORDERentry_F G ON F.FENTRYID = G.FENTRYID
|
||
INNER JOIN T_BAS_PREBDONE_L H ON E.F_PROJECTNAME = H.FID
|
||
WHERE E.FDOCUMENTSTATUS = 'C'
|
||
AND A.FCUSTID =E.FCUSTID AND H.FNAME = I.FNAME AND F.FMATERIALID = B.FMATERIALID AND (D.FAllAmount_LC/B.FQTY) = (G.FAllAmount_LC/F.FQTY)
|
||
) G
|
||
INNER JOIN V_ASSISTANTDATA U ON U.FENTRYID = A.F_Ordercategory
|
||
where U.FNUMBER IN ('P','C','E','S')
|
||
AND ABS(D.FAllAmount_LC)<ABS(B.F_SettlementP*B.FQTY)
|
||
AND A.FID = @FID
|
||
AND A.FDOCUMENTSTATUS IN ('Z','A','D')
|
||
AND (A.F_DirectSigningCus = '是' OR ISNULL(A.F_DirectSigningCus,'') = '')
|
||
AND G.C = 0
|
||
|
||
-- 二、系统合同(ES、W、SX、D、CY)
|
||
--1、合同总金额【价税合计本位币】<结算总成本【∑结算价(隐藏字段)*数量】+定制开发预算【PMS系统】+施工成本【PMS系统,是否*1.2(否)】+实施人天【PMS系统】*800 + 设计人天【PMS系统】*800
|
||
--按特价单处理,需要走特价审批流程; 金额字段要乘以 物联网卡使用年限# 至少是1
|
||
|
||
DECLARE @EmployeeID DECIMAL(23,10)
|
||
|
||
SELECT @EmployeeID = (CASE WHEN ISNULL(SUM(CAST(C.F_JSJ AS decimal(23,10)) * B.FQTY * CASE ISNULL(F_useyears, 0) WHEN 0 THEN 1 ELSE F_useyears END ),0) = 0
|
||
THEN 0 ELSE SUM(CAST(C.F_JSJ AS decimal(23,10))*B.FQTY * CASE ISNULL(F_useyears, 0) WHEN 0 THEN 1 ELSE F_useyears END ) END)
|
||
FROM T_SAL_ORDER A
|
||
INNER JOIN T_SAL_ORDERENTRY B ON A.FID = B.FID
|
||
INNER JOIN T_BD_MATERIAL C ON B.FMATERIALID = C.FMATERIALID
|
||
WHERE A.FID = @FID
|
||
|
||
update a set F_SPECIALCONTRACTS = '是'
|
||
FROM T_SAL_ORDER A
|
||
INNER JOIN T_SAL_ORDERENTRY B ON A.FID = B.FID
|
||
INNER JOIN T_SAL_ORDERFIN D ON D.FID = A.FID
|
||
INNER JOIN T_SAL_ORDERENTRY_F E ON E.FENTRYID =B.FENTRYID
|
||
INNER JOIN T_BD_MATERIAL C ON C.FMATERIALID = B.FMATERIALID
|
||
INNER JOIN V_ASSISTANTDATA U ON U.FENTRYID = A.F_Ordercategory
|
||
where U.FNUMBER in ('ES','W','SX','D','CY')
|
||
AND A.FID = @FID
|
||
AND A.FDOCUMENTSTATUS IN ('Z','A','D')
|
||
AND d.FBILLALLAMOUNT_LC < @EmployeeID+CAST(ISNULL( F_KFYS,'0.00')AS float) +CAST(ISNULL( F_SGCB,'0.00')AS float)+CAST(ISNULL( F_SSRT,'0.00')AS float)+ CAST(ISNULL( F_SJRT,'0.00')AS float)
|
||
|
||
|
||
|
||
|
||
--三、充电桩系统合同(CS,CW)
|
||
--否则 2、排除技术服务费、施工费、施工材料等项,只考虑充电桩按单项核查,则需要按第一项仪表合同的规则处理,充电桩的每一项都参与比较,如果有一项满足充电桩单价<结算价,就为特价合同,走特价审批流程
|
||
update a set F_SPECIALCONTRACTS = '是'
|
||
FROM T_SAL_ORDER A
|
||
INNER JOIN T_BD_CUSTOMER E ON E.FCUSTID = A.FCUSTID
|
||
INNER JOIN T_SAL_ORDERENTRY B ON A.FID = B.FID
|
||
INNER JOIN T_SAL_ORDERENTRY_F D ON D.FENTRYID =B.FENTRYID
|
||
INNER JOIN T_BD_MATERIAL C ON C.FMATERIALID = B.FMATERIALID
|
||
INNER JOIN V_ASSISTANTDATA U ON U.FENTRYID = A.F_Ordercategory
|
||
where U.FNUMBER IN ('CS','CW')
|
||
AND ABS(D.FAllAmount_LC)< ABS(B.F_SettlementP*B.FQTY)
|
||
AND A.FID = @FID
|
||
AND A.FDOCUMENTSTATUS IN ('Z','A','D')
|
||
AND (E.F_DirectSigningCus = '否' OR E.F_DirectSigningCus = '')
|
||
AND C.FNUMBER LIKE 'V%'
|
||
|
||
update a set F_SPECIALCONTRACTS = '是'
|
||
--SELECT 1
|
||
FROM T_SAL_ORDER A
|
||
INNER JOIN T_BD_CUSTOMER E ON E.FCUSTID = A.FCUSTID
|
||
INNER JOIN T_SAL_ORDERENTRY B ON A.FID = B.FID
|
||
INNER JOIN T_SAL_ORDERENTRY_F D ON D.FENTRYID =B.FENTRYID
|
||
INNER JOIN T_BD_MATERIAL C ON C.FMATERIALID = B.FMATERIALID
|
||
INNER JOIN T_BAS_PREBDONE_L I ON A.F_PROJECTNAME = I.FID
|
||
CROSS APPLY
|
||
(
|
||
SELECT COUNT(E.FBILLNO) AS C
|
||
FROM T_SAL_ORDER E
|
||
INNER JOIN T_SAL_ORDERentry F ON E.FID = F.FID
|
||
INNER JOIN T_SAL_ORDERentry_F G ON F.FENTRYID = G.FENTRYID
|
||
INNER JOIN T_BAS_PREBDONE_L H ON E.F_PROJECTNAME = H.FID
|
||
WHERE E.FDOCUMENTSTATUS = 'C'
|
||
AND A.FCUSTID =E.FCUSTID AND H.FNAME = I.FNAME AND F.FMATERIALID = B.FMATERIALID AND D.FAllAmount_LC = G.FAllAmount_LC
|
||
) G
|
||
INNER JOIN V_ASSISTANTDATA U ON U.FENTRYID = A.F_Ordercategory
|
||
where U.FNUMBER IN ('CS','CW')
|
||
AND ABS(D.FAllAmount_LC)< ABS(B.F_SettlementP*B.FQTY)
|
||
AND A.FID = @FID
|
||
AND A.FDOCUMENTSTATUS IN ('Z','A','D')
|
||
AND A.F_DirectSigningCus = '是'
|
||
AND C.FNUMBER LIKE 'V%'
|
||
AND G.C = 0
|
||
|
||
--判断明细是特价
|
||
IF((SELECT COUNT(1)
|
||
FROM T_SAL_ORDER A
|
||
INNER JOIN T_SAL_ORDERENTRY B ON A.FID = B.FID
|
||
INNER JOIN T_SAL_ORDERENTRY_F D ON D.FENTRYID = B.FENTRYID
|
||
INNER JOIN T_BD_MATERIAL C ON C.FMATERIALID = B.FMATERIALID
|
||
INNER JOIN V_ASSISTANTDATA U ON U.FENTRYID = A.F_ORDERCATEGORY
|
||
AND (D.FAllAmount_LC)< (B.F_SettlementP*B.FQTY) AND B.FQTY>0 AND (B.F_YKQC_CHECKBOX_QTR != '1' OR F_YKQC_CHECKBOX_QTR IS NULL )
|
||
AND A.FID = @FID
|
||
AND U.FNUMBER NOT IN ('ES','W','SX','D','CY'))>0)
|
||
BEGIN
|
||
SELECT @YiBiaoTeJia=1
|
||
end
|
||
PRINT '@YiBiaoTeJia='+CONVERT(NVARCHAR(20), @YiBiaoTeJia);
|
||
|
||
--判断明细是特价
|
||
update B set B.F_specialoffer = '1'
|
||
FROM T_SAL_ORDER A
|
||
INNER JOIN T_SAL_ORDERENTRY B ON A.FID = B.FID
|
||
INNER JOIN T_SAL_ORDERENTRY_F D ON D.FENTRYID = B.FENTRYID
|
||
INNER JOIN T_BD_MATERIAL C ON C.FMATERIALID = B.FMATERIALID
|
||
INNER JOIN V_ASSISTANTDATA U ON U.FENTRYID = A.F_ORDERCATEGORY
|
||
AND (D.FAllAmount_LC)< (B.F_SettlementP*B.FQTY) AND B.FQTY>0 AND (B.F_YKQC_CHECKBOX_QTR != '1' OR F_YKQC_CHECKBOX_QTR IS NULL )
|
||
AND A.FID = @FID
|
||
AND A.FDOCUMENTSTATUS IN ('Z','A','D')
|
||
AND U.FNUMBER NOT IN ('ES','W','SX','D','CY')
|
||
|
||
--判断明细非特价
|
||
update B set B.F_specialoffer = '0'
|
||
FROM T_SAL_ORDER A
|
||
INNER JOIN T_SAL_ORDERENTRY B ON A.FID = B.FID
|
||
INNER JOIN T_SAL_ORDERENTRY_F D ON D.FENTRYID = B.FENTRYID
|
||
INNER JOIN T_BD_MATERIAL C ON C.FMATERIALID = B.FMATERIALID
|
||
INNER JOIN V_ASSISTANTDATA U ON U.FENTRYID = A.F_ORDERCATEGORY
|
||
AND ABS(D.FAllAmount_LC) >= ABS(B.F_SettlementP*B.FQTY)
|
||
AND A.FID = @FID
|
||
AND A.FDOCUMENTSTATUS IN ('Z','A','D')
|
||
AND U.FNUMBER NOT IN ('ES','W','SX','D','CY')
|
||
|
||
--当前结算底价字段进行赋值
|
||
DECLARE @SUMJSJ DECIMAL(23,10);
|
||
SELECT @SUMJSJ = @EmployeeID + CAST(ISNULL(F_KFYS, '0.00') AS float) + CAST(ISNULL(F_SGCB, '0.00') AS float) + CAST(ISNULL(F_SSRT, '0.00') AS float) * 800 + CAST(ISNULL(F_SJRT, '0.00') AS float) * 800
|
||
FROM T_SAL_ORDER A
|
||
INNER JOIN T_SAL_ORDERENTRY B ON A.FID = B.FID
|
||
INNER JOIN T_SAL_ORDERENTRY_F E ON E.FENTRYID =B.FENTRYID
|
||
INNER JOIN V_ASSISTANTDATA U ON U.FENTRYID = A.F_Ordercategory
|
||
INNER JOIN T_BD_MATERIAL W ON W.FMATERIALID = B.FMATERIALID
|
||
where
|
||
A.FID = @FID
|
||
AND U.FNUMBER in ('ES','W','SX','D','CY','CS','CW')
|
||
|
||
SELECT @SUMJSJ = @EmployeeID
|
||
FROM T_SAL_ORDER A
|
||
INNER JOIN T_SAL_ORDERENTRY B ON A.FID = B.FID
|
||
INNER JOIN T_SAL_ORDERENTRY_F E ON E.FENTRYID =B.FENTRYID
|
||
INNER JOIN V_ASSISTANTDATA U ON U.FENTRYID = A.F_Ordercategory
|
||
INNER JOIN T_BD_MATERIAL W ON W.FMATERIALID = B.FMATERIALID
|
||
where
|
||
A.FID = @FID
|
||
AND U.FNUMBER in ('P','C','E','S')
|
||
|
||
update A SET A.F_VRYF_Amount_yrr =CAST(ISNULL(@SUMJSJ,0) AS decimal(23,10))
|
||
FROM T_SAL_ORDER A
|
||
INNER JOIN V_ASSISTANTDATA U ON U.FENTRYID = A.F_Ordercategory
|
||
WHERE A.FID = @FID
|
||
|
||
--判断是否兴诺物料
|
||
|
||
--带V物料是否特价
|
||
DECLARE @COUNTXN0 DECIMAL(23,10)
|
||
SELECT @COUNTXN0 = COUNT(*)
|
||
FROM T_SAL_ORDER A
|
||
INNER JOIN V_ASSISTANTDATA U ON U.FENTRYID = A.F_Ordercategory
|
||
INNER JOIN T_SAL_ORDERENTRY B ON A.FID = B.FID
|
||
INNER JOIN T_BD_MATERIAL W ON W.FMATERIALID = B.FMATERIALID
|
||
where A.FID = @FID AND B.F_specialoffer = '1' AND B.F_YKQC_CheckBox_qtr = '0'
|
||
|
||
update A SET A.F_YKQC_Combo_qtr = '是'
|
||
FROM T_SAL_ORDER A
|
||
INNER JOIN V_ASSISTANTDATA U ON U.FENTRYID = A.F_Ordercategory
|
||
INNER JOIN T_SAL_ORDERENTRY B ON A.FID = B.FID
|
||
INNER JOIN T_BD_MATERIAL W ON W.FMATERIALID = B.FMATERIALID
|
||
WHERE A.FID = @FID AND W.FNUMBER like 'V%' AND @COUNTXN0 <> 0
|
||
|
||
update A SET A.F_YKQC_Combo_qtr = '否'
|
||
FROM T_SAL_ORDER A
|
||
INNER JOIN V_ASSISTANTDATA U ON U.FENTRYID = A.F_Ordercategory
|
||
INNER JOIN T_SAL_ORDERENTRY B ON A.FID = B.FID
|
||
INNER JOIN T_BD_MATERIAL W ON W.FMATERIALID = B.FMATERIALID
|
||
WHERE A.FID = @FID AND W.FNUMBER like 'V%' AND @COUNTXN0 = 0
|
||
|
||
|
||
--判断特价原因是否必填
|
||
update T_SAL_ORDER SET F_YKQC_CheckBox_qtr1 = 1
|
||
WHERE FID = @FID AND @YiBiaoTeJia=1
|
||
|
||
|
||
update T_SAL_ORDER SET F_YKQC_CheckBox_qtr1 = 0
|
||
WHERE FID = @FID AND @YiBiaoTeJia=0
|
||
|
||
--计算销售订单的订单利润率
|
||
DECLARE @DDLRL DECIMAL(23,2)
|
||
|
||
SELECT @DDLRL =
|
||
CASE WHEN B.FBILLALLAMOUNT_LC = 0
|
||
THEN 0
|
||
ELSE ROUND((B.FBILLALLAMOUNT_LC - A.F_VRYF_Amount_yrr) / B.FBILLALLAMOUNT_LC, 2) END
|
||
FROM T_SAL_ORDER A
|
||
INNER JOIN T_SAL_ORDERFIN B ON A.FID = B.FID
|
||
WHERE A.FID = @FID
|
||
AND A.F_VRYF_Amount_yrr <> 0
|
||
|
||
UPDATE A
|
||
SET F_DDLRL = CONVERT(VARCHAR(25), @DDLRL) + '%'
|
||
FROM T_SAL_ORDER A
|
||
WHERE A.FID = @FID
|
||
AND @DDLRL <> 0
|
||
|
||
--更新价差
|
||
update A
|
||
SET A.F_differenceAmount = B.FBillAllAmount_LC - A.F_VRYF_Amount_yrr
|
||
FROM T_SAL_ORDER A
|
||
INNER JOIN T_SAL_ORDERFIN B ON A.FID = B.FID
|
||
where A.fid = @FID
|
||
AND A.F_VRYF_Amount_yrr <> 0;
|
||
|
||
UPDATE T_SAL_ORDER SET F_TotalPositiveAmount =(SELECT SUM(FAllAmount_LC) FROM dbo.T_SAL_ORDERENTRY_F F WHERE f.fid=@FID and f.FPriceBaseQty>0)
|
||
WHERE FID = @FID
|