Files
GZ_KD_Parino/GZ_KD_Parino/SQL文件/更新特价.sql
2025-10-16 19:06:58 +08:00

271 lines
25 KiB
Transact-SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/****** 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