CREATE OR REPLACE PROCEDURE P_FEE_Estimate_Execute_STAT AS
/*--------------------------------------------
* 过程:产生动态执行情况统计数据
* 入参;
* 出参;
* 说明:
* 1.本存储为 oracle 中定时执行任务自动执行的,推荐为每日凌晨系统比较空闲时自动执行,目前定为每日
* 凌晨1:00执行;
* 2.当工程分段指定的日期执行概算已统计过,则不再进行统计了;
* 3.对"未审批"的量进行统计时只统计正在审批处理中的合同或变更等单据(审批状态为 C175_1);
* 4.本过程统计计算过程
* ______________________________________________________________________________________________
* | 非计量类合同 | 计量类合同
* ______________________________________________________________________________________________
* | 对应合同 | 对应合同清单 | 对应分项(建安清单) | 对应清单范本(总则清单)
* ______________________________________________________________________________________________
* 合同的量 | (1) | (4) | (7) | (10)
* 变更的量 | (不计算) | (5) | (8) | (11)
* 计量/支付的量| (3) | (6) | (9) | (12)
* ______________________________________________________________________________________________
* 5.对于计算类型概算,将按概算中设置的公式进行计算;
* 6.临时表字段说明;
* 概算动态执行情况明细表主键 EST_EXE_DTL_ID c1
* 分段概算主键 SEC_EST_ID c2
* 概算动态执行情况主表主键 EST_EXE_Main_ID c3
* 预算数量(主计量单位) Budget_Amount_Major c4
* 预算数量(次计量单位) Budget_Amount_Minor c5
* 预算金额 Budget_Currency c6
* 合同数量 CNT_Amount c7
* 合同金额 CNT_Currency c8
* 含补充协议金额 CNT_Currency_Sub c9
* 未批合同金额 CNT_Currency_UnSign c10
* 修编数量 Emend_Amount c11
* 修编金额 Emend_Currency c12
* 变更数量 Change_Amount c13
* 变更金额 Change_Currency c14
* 未批变更金额 Change_Currency_Unsigned c15
* 变更后金额 Change_Currency_After c16
* 累计完成金额 Finished_Currency c17
* 累计完成比例 Finished_Rate c18
* 决算数量 Final_Cost_Amount c19
* 决算金额 Final_Cost_Currency c20
* --------------------------------------------*/
v_Generate_Date DATE := SYSDATE - 1; --概算统计日期
v_PRJ_SEG_ID FEE_PROJECT_SEGMENT.PRJ_SEG_ID%TYPE; --工程分段ID
v_isBuilded INT; --指定工程分段下指定日期的动态执行统计记录是否已产生,=1 表示已产生,=0 表示未产生
v_newEST_EXE_Main_ID FEE_Estimate_Execute_Main.Est_Exe_Main_Id%TYPE; --动态执行情况主表ID
CURSOR cur1 IS
SELECT s.prj_seg_id, s.prj_seg_code, s.prj_seg_name
FROM Fee_Project_Segment s
ORDER BY s.project_id;
BEGIN
FOR rs1 IN cur1
LOOP
v_PRJ_SEG_ID := rs1.prj_seg_id;
--看看本工程段指定日期有没有产生过
SELECT CASE
WHEN COUNT(*) > 0 THEN
1
ELSE
0
END
INTO v_isBuilded
FROM FEE_Estimate_Execute_Main t
WHERE t.prj_seg_id = v_PRJ_SEG_ID AND
to_char(t.generate_date, 'yyyy-mm-dd') =
to_char(v_Generate_Date, 'yyyy-mm-dd');
--本工程段指定日期已经产生过,则不再产生了
IF (v_isBuilded <= 0) THEN
v_newEST_EXE_Main_ID := sys_guid();
--插入日动态主表记录
INSERT INTO FEE_Estimate_Execute_Main
(est_exe_main_id, prj_seg_id, generate_date, is_edit)
VALUES
(v_newEST_EXE_Main_ID, v_PRJ_SEG_ID, v_Generate_Date, 'C061_2');
--产生明细记录
INSERT INTO tmp_pla_report
(c1, c2, c3, c4, c5, c6, C45, c50)
SELECT sys_guid(), e.sec_est_id, v_newEST_EXE_Main_ID,
e.Budget_Amount_Major, e.Budget_Amount_Minor,
e.Budget_Currency, v_PRJ_SEG_ID, '临时结果' rsType
FROM FEE_Section_Estimate e
WHERE e.prj_seg_id = v_PRJ_SEG_ID;
--1-概算与合同对应的统计
--1-1-合同量的统计(合同金额/未批合同金额)
INSERT INTO tmp_pla_report
(c40, c41, c44, C45, c50)
SELECT ec.sec_est_id,
SUM(NVL(ec.rate, 0) * NVL(ec.currency, 0) / 100) sumC,
1 isSigned, v_PRJ_SEG_ID, '概算对应合同-合同量' rsType
FROM FEE_Estimate_Contract ec, CNT_Contract c,
FEE_Section_Estimate se
WHERE ec.cnt_id = c.cnt_id AND ec.sec_est_id = se.sec_est_id AND
c.status = 'C175_2' /*已审批*/
AND c.Pay_kind = 'C203_2' /*非计量支付*/
AND se.prj_seg_id = v_PRJ_SEG_ID
GROUP BY ec.sec_est_id
UNION ALL
SELECT ec.sec_est_id, SUM(NVL(ec.currency, 0)) sumC, 0 isSigned,
v_PRJ_SEG_ID, '概算对应合同-合同量' rsType
FROM FEE_Estimate_Contract ec, CNT_Contract c,
FEE_Section_Estimate se
WHERE ec.cnt_id = c.cnt_id AND ec.sec_est_id = se.sec_est_id AND
c.status = 'C175_1' /*正在审批中...*/
AND c.Pay_kind = 'C203_2' /*非计量支付*/
AND se.prj_seg_id = v_PRJ_SEG_ID
GROUP BY ec.sec_est_id;
--更新已审批的合同金额
UPDATE tmp_pla_report r
SET r.c8 =
(SELECT pr.c41
FROM tmp_pla_report pr
WHERE pr.c40 = r.c2 AND pr.c44 = '1' AND pr.c50 = '概算对应合同-合同量' AND
pr.c45 = v_PRJ_SEG_ID)
WHERE r.c50 = '临时结果' AND r.c45 = v_PRJ_SEG_ID AND EXISTS
(SELECT 1
FROM tmp_pla_report pr
WHERE pr.c40 = r.c2 AND pr.c44 = '1' AND pr.c50 = '概算对应合同-合同量' AND
pr.c45 = v_PRJ_SEG_ID);
--更新未审批的合同金额
UPDATE tmp_pla_report r
SET r.c10 =
(SELECT pr.c41
FROM tmp_pla_report pr
WHERE pr.c40 = r.c2 AND pr.c44 = '0' AND pr.c50 = '概算对应合同-合同量' AND
pr.c45 = v_PRJ_SEG_ID)
WHERE r.c50 = '临时结果' AND r.c45 = v_PRJ_SEG_ID AND EXISTS
(SELECT 1
FROM tmp_pla_report pr
WHERE pr.c40 = r.c2 AND pr.c44 = '0' AND pr.c50 = '概算对应合同-合同量' AND
pr.c45 = v_PRJ_SEG_ID);
DELETE FROM tmp_pla_report t
WHERE t.c50 = '概算对应合同-合同量' AND t.c45 = v_PRJ_SEG_ID;
--1-2-变更量的统计
--nothing to do !
--1-3-计量与支付的统计(累计完成金)
INSERT INTO tmp_pla_report
(c40, c41, c44, c45, c50)
SELECT ec.sec_est_id, SUM(NVL(p.CUR_Currency, 0)) sumC, 1 isSigned,
v_PRJ_SEG_ID, '概算对应合同-计量与支付' rsType
FROM FEE_Estimate_Contract ec, CNT_Contract c, CNT_PMNT_INFRM_Main p,
FEE_Section_Estimate se
WHERE ec.cnt_id = c.cnt_id AND p.cnt_id = c.cnt_id AND
ec.sec_est_id = se.sec_est_id AND c.status = 'C175_2' /*已审批*/
AND se.prj_seg_id = v_PRJ_SEG_ID AND c.Pay_kind = 'C203_2' /*非计量支付*/
AND p.status = 'C175_2' /*已审批*/
GROUP BY ec.sec_est_id;
--更新已审批的累计完成量
UPDATE tmp_pla_report r
SET r.c17 =
(SELECT pr.c41
FROM tmp_pla_report pr
WHERE pr.c40 = r.c2 AND pr.c42 = '1' AND pr.c50 = '概算对应合同-计量与支付' AND
pr.c45 = v_PRJ_SEG_ID)
WHERE r.c50 = '临时结果' AND r.c45 = v_PRJ_SEG_ID AND EXISTS
(SELECT 1
FROM tmp_pla_report pr
WHERE pr.c40 = r.c2 AND pr.c42 = '1' AND
pr.c50 = '概算对应合同-计量与支付' AND pr.c45 = v_PRJ_SEG_ID);
DELETE FROM tmp_pla_report t
WHERE t.c50 = '概算对应合同-计量与支付' AND t.c45 = v_PRJ_SEG_ID;
--2-概算与合同清单对应的统计
--2-1-合同量的统计
INSERT INTO tmp_pla_report
(c40, c41, c42, c44, c45, c50)
SELECT se.sec_est_id,
SUM(NVL(ll.rate, 0) * NVL(l.cnt_amount, 0) / 100) sumM,
SUM(NVL(ll.rate, 0) * NVL(l.cnt_currency, 0) / 100) sumC,
1 isSigned, v_PRJ_SEG_ID, '清单对应概算-合同量' rsType
FROM FEE_Section_Estimate se, FEE_Estimate_LOT_Listing ll,
CNT_LOT_Listing l, CNT_Contract c
WHERE se.sec_est_id = ll.sec_est_id AND
ll.lot_list_id = l.lot_list_id AND l.cnt_id = c.cnt_id AND
se.prj_seg_id = v_PRJ_SEG_ID AND c.status = 'C175_2' /*已审批*/
AND c.Pay_kind = 'C203_2' /*非计量支付*/
GROUP BY se.sec_est_id
UNION ALL
SELECT se.sec_est_id,
SUM(NVL(ll.rate, 0) * NVL(l.cnt_amount, 0) / 100) sumM,
SUM(NVL(ll.rate, 0) * NVL(l.cnt_currency, 0) / 100) sumC,
0 isSigned, v_PRJ_SEG_ID, '清单对应概算-合同量' rsType
FROM FEE_Section_Estimate se, FEE_Estimate_LOT_Listing ll,
CNT_LOT_Listing l, CNT_Contract c
WHERE se.sec_est_id = ll.sec_est_id AND
ll.lot_list_id = l.lot_list_id AND l.cnt_id = c.cnt_id AND
c.status = 'C175_1' /*正在审批中...*/
AND se.prj_seg_id = v_PRJ_SEG_ID AND c.Pay_kind = 'C203_2' /*非计量支付*/
GROUP BY se.sec_est_id;
--更新已审批的合同量
UPDATE tmp_pla_report r
SET (r.c7, r.c8) =
(SELECT pr.c41, pr.c42
FROM tmp_pla_report pr
WHERE pr.c40 = r.c2 AND pr.c44 = '1' AND pr.c50 = '清单对应概算-合同量' AND
pr.c45 = v_PRJ_SEG_ID)
WHERE r.c50 = '临时结果' AND r.c45 = v_PRJ_SEG_ID AND EXISTS
(SELECT 1
FROM tmp_pla_report pr
WHERE pr.c40 = r.c2 AND pr.c44 = '1' AND pr.c50 = '清单对应概算-合同量' AND
pr.c45 = v_PRJ_SEG_ID);
--更新未审批的合同量
UPDATE tmp_pla_report r
SET r.c10 =
(SELECT pr.c42
FROM tmp_pla_report pr
WHERE pr.c40 = r.c2 AND pr.c44 = '0' AND pr.c50 = '清单对应概算-合同量' AND
pr.c45 = v_PRJ_SEG_ID)
WHERE r.c50 = '临时结果' AND r.c45 = v_PRJ_SEG_ID AND EXISTS
(SELECT 1
FROM tmp_pla_report pr
WHERE pr.c40 = r.c2 AND pr.c44 = '0' AND pr.c50 = '清单对应概算-合同量' AND
pr.c45 = v_PRJ_SEG_ID);
DELETE FROM tmp_pla_report t
WHERE t.c50 = '清单对应概算-合同量' AND t.c45 = v_PRJ_SEG_ID;
--2-2-变更量的统计
INSERT INTO tmp_pla_report
(c40, c41, c42, c43, c44, c45, c50)
SELECT ls.sec_est_id,
SUM(NVL(ls.rate, 0) * NVL(l.Change_Amount, 0) / 100)
/*变更数量*/,
SUM(NVL(ls.rate, 0) * NVL(l.Change_Currency, 0) / 100)
/*变更金额*/,
SUM(NVL(ls.rate, 0) *
(NVL(l.Finally_Currency, 0) + NVL(l.Change_Currency, 0)) / 100)
/*变更后金额*/, 1 isSigned, v_PRJ_SEG_ID, '清单对应概算-变更量' rsType
FROM FEE_Estimate_LOT_Listing ls, CNT_LOT_Listing l, cnt_contract c,
FEE_Section_Estimate se
WHERE ls.lot_list_id = l.lot_list_id AND l.cnt_id = c.cnt_id AND
ls.sec_est_id = se.sec_est_id AND c.Pay_kind = 'C203_2' /*非计量支付*/
AND se.prj_seg_id = v_PRJ_SEG_ID
GROUP BY ls.sec_est_id; /*已审批的直接从合同清单中取变更量...*/
INSERT INTO tmp_pla_report
(c40, c41, c44, c45, c50)
SELECT el.sec_est_id,
SUM(NVL(el.rate, 0) * NVL(l.sumADDC_Currency, 0) / 100),
0 isSigned, v_PRJ_SEG_ID, '清单对应概算-变更量' rsType
FROM FEE_Estimate_LOT_Listing el, FEE_Section_Estimate se,
(SELECT cl.lot_list_id,
SUM(NVL(cl.Declare_After_Currency, 0) -
NVL(cl.Before_Currency, 0)) sumADDC_Currency /*未批变更金额*/
FROM CNT_CHNG_Listing cl, CNT_CHNG cg, CNT_LOT_Listing ll,
cnt_contract c
WHERE cl.chng_id = cg.chng_id AND
ll.lot_list_id = cl.lot_list_id AND ll.cnt_id = c.cnt_id AND
cg.status = 'C175_1' /*正在审批中...*/
AND c.Pay_kind = 'C203_2' /*非计量支付*/
GROUP BY cl.lot_list_id) l
WHERE el.lot_list_id = l.lot_list_id AND
el.sec_est_id = se.sec_est_id AND
se.prj_seg_id = v_PRJ_SEG_ID
GROUP BY el.sec_est_id;
--更新已审批的变更量
UPDATE tmp_pla_report r
SET (r.c13, r.c14, r.c16) =
(SELECT pr.c41, pr.c42, pr.c43
FROM tmp_pla_report pr
WHERE pr.c40 = r.c2 AND pr.c44 = '1' AND pr.c50 = '清单对应概算-变更量' AND
pr.c45 = v_PRJ_SEG_ID)
WHERE r.c50 = '临时结果' AND r.c45 = v_PRJ_SEG_ID AND EXISTS
(SELECT 1
FROM tmp_pla_report pr
WHERE pr.c40 = r.c2 AND pr.c44 = '1' AND pr.c50 = '清单对应概算-变更量' AND
pr.c45 = v_PRJ_SEG_ID);
--更新未审批的变更量
UPDATE tmp_pla_report r
SET (r.c15) =
(SELECT pr.c41
FROM tmp_pla_report pr
WHERE pr.c40 = r.c2 AND pr.c44 = '0' AND pr.c50 = '清单对应概算-变更量' AND
pr.c45 = v_PRJ_SEG_ID)
WHERE r.c50 = '临时结果' AND r.c45 = v_PRJ_SEG_ID AND EXISTS
(SELECT 1
FROM tmp_pla_report pr
WHERE pr.c40 = r.c2 AND pr.c44 = '0' AND pr.c50 = '清单对应概算-变更量' AND
pr.c45 = v_PRJ_SEG_ID);
DELETE FROM tmp_pla_report t
WHERE t.c50 = '清单对应概算-变更量' AND t.c45 = v_PRJ_SEG_ID;
--2-3-计量与支付的统计
INSERT INTO tmp_pla_report
(c40, c41, c44, c45, c50)
SELECT ll.sec_est_id,
SUM(NVL(ll.rate, 0) * NVL(f.sumFinished_Currency, 0) / 100),
1 isSigned, v_PRJ_SEG_ID, '清单对应概算-累计计量/支付' rsType
FROM FEE_Estimate_LOT_Listing ll, FEE_Section_Estimate se,
(SELECT p1.lot_list_id,
SUM(NVL(p1.CNT_Currency_Approval1, 0) +
NVL(p1.Change_Currency_Approval1, 0)) sumFinished_Currency
FROM CNT_Listing_Payment1 p1, CNT_PMNT p, cnt_contract c
WHERE p1.pmnt_id = p.pmnt_id AND p.cnt_id = c.cnt_id AND
p.status = 'C175_2' /*已审批*/
AND c.Pay_kind = 'C203_2' /*非计量支付*/
GROUP BY p1.lot_list_id) f
WHERE ll.lot_list_id = f.lot_list_id AND
ll.sec_est_id = se.sec_est_id AND
se.prj_seg_id = v_PRJ_SEG_ID
GROUP BY ll.sec_est_id;
--更新已审批的累计/支付
UPDATE tmp_pla_report r
SET r.c17 =
(SELECT pr.c41
FROM tmp_pla_report pr
WHERE pr.c40 = r.c2 AND pr.c44 = '1' AND
pr.c50 = '清单对应概算-累计计量/支付' AND pr.c45 = v_PRJ_SEG_ID)
WHERE r.c50 = '临时结果' AND r.c45 = v_PRJ_SEG_ID AND EXISTS
(SELECT 1
FROM tmp_pla_report pr
WHERE pr.c40 = r.c2 AND pr.c44 = '1' AND
pr.c50 = '清单对应概算-累计计量/支付' AND pr.c45 = v_PRJ_SEG_ID);
DELETE FROM tmp_pla_report t
WHERE t.c50 = '清单对应概算-累计计量/支付' AND t.c45 = v_PRJ_SEG_ID;
--3--概算与分项对应的统计
--3-1-合同量的统计
INSERT INTO tmp_pla_report
(c40, c41, c42, c44, c45, c50)
SELECT e.sec_est_id, SUM(NVL(l.cnt_amount, 0)) /*合同数量*/,
SUM(NVL(l.cnt_currency, 0)) sumC /*合同金额*/, 1 isSigned,
v_PRJ_SEG_ID, '概算与分项对应-合同量' rsType
FROM CNT_LOT_Listing l, CNT_Contract c, CNT_LOT_Sub_Projects p,
BAS_Sub_Projects_Template t, FEE_Section_Estimate e
WHERE e.est_tmp_id = t.est_tmp_id AND
t.sub_prj_tmp_id = p.sub_prj_tmp_id AND p.cnt_id = c.cnt_id AND
l.lot_sub_prj_id = p.lot_sub_prj_id AND c.status = 'C175_2' /*已审批*/
AND e.prj_seg_id = v_PRJ_SEG_ID AND c.Pay_kind = 'C203_1' /*计量支付*/
GROUP BY e.sec_est_id
UNION ALL
SELECT e.sec_est_id, SUM(NVL(l.cnt_amount, 0)) /*合同数量*/,
SUM(NVL(l.cnt_currency, 0)) sumC /*合同金额*/, 0 isSigned,
v_PRJ_SEG_ID, '概算与分项对应-合同量' rsType
FROM CNT_LOT_Listing l, CNT_Contract c, CNT_LOT_Sub_Projects p,
BAS_Sub_Projects_Template t, FEE_Section_Estimate e
WHERE e.est_tmp_id = t.est_tmp_id AND
t.sub_prj_tmp_id = p.sub_prj_tmp_id AND p.cnt_id = c.cnt_id AND
l.lot_sub_prj_id = p.lot_sub_prj_id AND c.status = 'C175_1' /*正在审批中...*/
AND e.prj_seg_id = v_PRJ_SEG_ID AND c.Pay_kind = 'C203_1' /*计量支付*/
GROUP BY e.sec_est_id;
--更新已审批的合同量
UPDATE tmp_pla_report r
SET (r.c7, r.c8) =
(SELECT pr.c41, pr.c42
FROM tmp_pla_report pr
WHERE pr.c40 = r.c2 AND pr.c44 = '1' AND pr.c50 = '概算与分项对应-合同量' AND
pr.c45 = v_PRJ_SEG_ID)
WHERE r.c50 = '临时结果' AND r.c45 = v_PRJ_SEG_ID AND EXISTS
(SELECT 1
FROM tmp_pla_report pr
WHERE pr.c40 = r.c2 AND pr.c44 = '1' AND pr.c50 = '概算与分项对应-合同量' AND
pr.c45 = v_PRJ_SEG_ID);
--更新未审批的合同量
UPDATE tmp_pla_report r
SET r.c10 =
(SELECT pr.c42
FROM tmp_pla_report pr
WHERE pr.c40 = r.c2 AND pr.c44 = '0' AND pr.c50 = '概算与分项对应-合同量' AND
pr.c45 = v_PRJ_SEG_ID)
WHERE r.c50 = '临时结果' AND r.c45 = v_PRJ_SEG_ID AND EXISTS
(SELECT 1
FROM tmp_pla_report pr
WHERE pr.c40 = r.c2 AND pr.c44 = '0' AND pr.c50 = '概算与分项对应-合同量' AND
pr.c45 = v_PRJ_SEG_ID);
DELETE FROM tmp_pla_report t
WHERE t.c50 = '概算与分项对应-合同量' AND t.c45 = v_PRJ_SEG_ID;
--3-2-变更量的统计
INSERT INTO tmp_pla_report
(c40, c41, c42, c43, c44, c45, c50)
SELECT e.sec_est_id, SUM(NVL(l.Change_Amount, 0)) /*变更数量*/,
SUM(NVL(l.Change_Currency, 0)) sumC /*变更金额*/,
SUM(NVL(l.Finally_Currency, 0) + NVL(l.Change_Currency, 0))
/*变更后金额*/, 1 isSigned, v_PRJ_SEG_ID, '概算与分项对应-变更量' rsType
FROM CNT_LOT_Listing l, CNT_Contract c, CNT_LOT_Sub_Projects p,
BAS_Sub_Projects_Template t, FEE_Section_Estimate e
WHERE e.est_tmp_id = t.est_tmp_id AND
t.sub_prj_tmp_id = p.sub_prj_tmp_id AND p.cnt_id = c.cnt_id AND
l.lot_sub_prj_id = p.lot_sub_prj_id AND c.status = 'C175_2' /*已审批*/
AND e.prj_seg_id = v_PRJ_SEG_ID AND c.Pay_kind = 'C203_1' /*计量支付*/
GROUP BY e.sec_est_id;
INSERT INTO tmp_pla_report
(c40, c41, c44, c45, c50)
SELECT e.sec_est_id, SUM(NVL(l.sumADDC_Currency, 0)) /*未审批变更金额*/,
0 isSigned, v_PRJ_SEG_ID, '概算与分项对应-变更量' rsType
FROM (SELECT cl.lot_list_id, ll.lot_sub_prj_id,
SUM(NVL(Declare_After_Currency, 0) -
NVL(Before_Currency, 0)) sumADDC_Currency /*未批变更金额*/
FROM CNT_CHNG_Listing cl, CNT_CHNG cg, CNT_LOT_Listing ll
WHERE cl.chng_id = cg.chng_id AND cg.status = 'C175_1' /*正在审批中...*/
AND ll.lot_list_id = cl.lot_list_id
GROUP BY cl.lot_list_id, ll.lot_sub_prj_id) l, CNT_Contract c,
CNT_LOT_Sub_Projects p, BAS_Sub_Projects_Template t,
FEE_Section_Estimate e
WHERE e.est_tmp_id = t.est_tmp_id AND
t.sub_prj_tmp_id = p.sub_prj_tmp_id AND p.cnt_id = c.cnt_id AND
l.lot_sub_prj_id = p.lot_sub_prj_id AND c.status = 'C175_2' /*合同已审批*/
AND e.prj_seg_id = v_PRJ_SEG_ID AND c.Pay_kind = 'C203_1' /*计量支付*/
GROUP BY e.sec_est_id;
--更新已审批的变更量
UPDATE tmp_pla_report r
SET (r.c13, r.c14, r.c16) =
(SELECT pr.c41, pr.c42, pr.c43
FROM tmp_pla_report pr
WHERE pr.c40 = r.c2 AND pr.c44 = '1' AND pr.c50 = '概算与分项对应-变更量' AND
pr.c45 = v_PRJ_SEG_ID)
WHERE r.c50 = '临时结果' AND r.c45 = v_PRJ_SEG_ID AND EXISTS
(SELECT 1
FROM tmp_pla_report pr
WHERE pr.c40 = r.c2 AND pr.c44 = '1' AND pr.c50 = '概算与分项对应-变更量' AND
pr.c45 = v_PRJ_SEG_ID);
--更新未审批的变更量
UPDATE tmp_pla_report r
SET (r.c15) =
(SELECT pr.c41
FROM tmp_pla_report pr
WHERE pr.c40 = r.c2 AND pr.c44 = '0' AND pr.c50 = '概算与分项对应-变更量' AND
pr.c45 = v_PRJ_SEG_ID)
WHERE r.c50 = '临时结果' AND r.c45 = v_PRJ_SEG_ID AND EXISTS
(SELECT 1
FROM tmp_pla_report pr
WHERE pr.c40 = r.c2 AND pr.c44 = '0' AND pr.c50 = '概算与分项对应-变更量' AND
pr.c45 = v_PRJ_SEG_ID);
DELETE FROM tmp_pla_report t
WHERE t.c50 = '概算与分项对应-变更量' AND t.c45 = v_PRJ_SEG_ID;
--3-3-计量与支付的统计
INSERT INTO tmp_pla_report
(c40, c41, c44, c45, c50)
SELECT e.sec_est_id, SUM(NVL(l.sumFinished_Currency, 0)) /*未审批变更金额*/,
1 isSigned, v_PRJ_SEG_ID, '概算与分项对应-累计计量/支付' rsType
FROM (SELECT l.lot_sub_prj_id,
SUM(NVL(p1.CNT_Currency_Approval1, 0) +
NVL(p1.Change_Currency_Approval1, 0)) sumFinished_Currency
FROM CNT_Listing_Payment1 p1, CNT_PMNT p, CNT_LOT_LISTING l
WHERE p1.pmnt_id = p.pmnt_id AND
p1.lot_list_id = l.lot_list_id AND p.status = 'C175_2' /*已审批*/
GROUP BY l.lot_sub_prj_id) l, CNT_Contract c,
CNT_LOT_Sub_Projects p, BAS_Sub_Projects_Template t,
FEE_Section_Estimate e
WHERE e.est_tmp_id = t.est_tmp_id AND
t.sub_prj_tmp_id = p.sub_prj_tmp_id AND p.cnt_id = c.cnt_id AND
l.lot_sub_prj_id = p.lot_sub_prj_id AND c.status = 'C175_2' /*合同已审批*/
AND e.prj_seg_id = v_PRJ_SEG_ID AND c.Pay_kind = 'C203_1' /*计量支付*/
GROUP BY e.sec_est_id;
--更新已审批的累计/支付
UPDATE tmp_pla_report r
SET r.c17 =
(SELECT pr.c41
FROM tmp_pla_report pr
WHERE pr.c40 = r.c2 AND pr.c44 = '1' AND
pr.c50 = '概算与分项对应-累计计量/支付' AND pr.c45 = v_PRJ_SEG_ID)
WHERE r.c50 = '临时结果' AND r.c45 = v_PRJ_SEG_ID AND EXISTS
(SELECT 1
FROM tmp_pla_report pr
WHERE pr.c40 = r.c2 AND pr.c44 = '1' AND
pr.c50 = '概算与分项对应-累计计量/支付' AND pr.c45 = v_PRJ_SEG_ID);
DELETE FROM tmp_pla_report t
WHERE t.c50 = '概算与分项对应-累计计量/支付' AND t.c45 = v_PRJ_SEG_ID;
--4--概算范本与清单范本的统计
--4-1-合同量的统计
INSERT INTO tmp_pla_report
(c40, c41, c42, c44, c45, c50)
SELECT se.sec_est_id,
SUM(NVL(elt.rate, 0) * NVL(l.cnt_amount, 0) / 100) sumM,
SUM(NVL(elt.rate, 0) * NVL(l.cnt_currency, 0) / 100) sumC,
1 isSigned, v_PRJ_SEG_ID, '清单范本对应概算范本-合同量' rsType
FROM FEE_Section_Estimate se, BAS_Estimate_Template et,
FEE_Estimate_Listing_Template elt, BAS_Listing_Template lt,
CNT_LOT_Listing l, CNT_Contract c
WHERE se.est_tmp_id = et.est_tmp_id AND
et.est_tmp_id = elt.est_tmp_id AND
elt.list_tmp_id = lt.list_tmp_id AND
lt.list_tmp_id = l.list_tmp_id AND l.cnt_id = c.cnt_id AND
c.status = 'C175_2' /*已审批*/
AND c.Pay_kind = 'C203_1' /*计量支付*/
AND se.prj_seg_id = v_PRJ_SEG_ID
GROUP BY se.sec_est_id
UNION ALL
SELECT se.sec_est_id,
SUM(NVL(elt.rate, 0) * NVL(l.cnt_amount, 0) / 100) sumM,
SUM(NVL(elt.rate, 0) * NVL(l.cnt_currency, 0) / 100) sumC,
0 isSigned, v_PRJ_SEG_ID, '清单范本对应概算范本-合同量' rsType
FROM FEE_Section_Estimate se, BAS_Estimate_Template et,
FEE_Estimate_Listing_Template elt, BAS_Listing_Template lt,
CNT_LOT_Listing l, CNT_Contract c
WHERE se.est_tmp_id = et.est_tmp_id AND
et.est_tmp_id = elt.est_tmp_id AND
elt.list_tmp_id = lt.list_tmp_id AND
lt.list_tmp_id = l.list_tmp_id AND l.cnt_id = c.cnt_id AND
c.status = 'C175_1' /*未审批*/
AND c.Pay_kind = 'C203_1' /*计量支付*/
AND se.prj_seg_id = v_PRJ_SEG_ID
GROUP BY se.sec_est_id;
--更新已审批的合同量
UPDATE tmp_pla_report r
SET (r.c7, r.c8) =
(SELECT pr.c41, pr.c42
FROM tmp_pla_report pr
WHERE pr.c40 = r.c2 AND pr.c44 = '1' AND
pr.c50 = '清单范本对应概算范本-合同量' AND pr.c45 = v_PRJ_SEG_ID)
WHERE r.c50 = '临时结果' AND r.c45 = v_PRJ_SEG_ID AND EXISTS
(SELECT 1
FROM tmp_pla_report pr
WHERE pr.c40 = r.c2 AND pr.c44 = '1' AND
pr.c50 = '清单范本对应概算范本-合同量' AND pr.c45 = v_PRJ_SEG_ID);
--更新未审批的合同量
UPDATE tmp_pla_report r
SET r.c10 =
(SELECT pr.c42
FROM tmp_pla_report pr
WHERE pr.c40 = r.c2 AND pr.c44 = '0' AND
pr.c50 = '清单范本对应概算范本-合同量' AND pr.c45 = v_PRJ_SEG_ID)
WHERE r.c50 = '临时结果' AND r.c45 = v_PRJ_SEG_ID AND EXISTS
(SELECT 1
FROM tmp_pla_report pr
WHERE pr.c40 = r.c2 AND pr.c44 = '0' AND
pr.c50 = '清单范本对应概算范本-合同量' AND pr.c45 = v_PRJ_SEG_ID);
DELETE FROM tmp_pla_report t
WHERE t.c50 = '清单范本对应概算范本-合同量' AND t.c45 = v_PRJ_SEG_ID;
--4-2-变更量的统计
INSERT INTO tmp_pla_report
(c40, c41, c42, c43, c44, c45, c50)
SELECT se.sec_est_id,
SUM(NVL(elt.rate, 0) * NVL(l.Change_Amount, 0) / 100)
/*变更数量*/,
SUM(NVL(elt.rate, 0) * NVL(l.Change_Currency, 0) / 100)
/*变更金额*/,
SUM(NVL(elt.rate, 0) *
(NVL(l.Finally_Currency, 0) + NVL(l.Change_Currency, 0)) / 100)
/*变更后金额*/, 1 isSigned, v_PRJ_SEG_ID, '清单范本对应概算范本-变更量' rsType
FROM FEE_Estimate_Listing_Template elt, BAS_Estimate_Template et,
BAS_Listing_Template lp, FEE_Section_Estimate se,
CNT_LOT_Listing l, cnt_contract c
WHERE elt.est_tmp_id = et.est_tmp_id AND
elt.list_tmp_id = lp.list_tmp_id AND
et.est_tmp_id = se.est_tmp_id AND
lp.list_tmp_id = l.list_tmp_id AND l.cnt_id = c.cnt_id AND
c.Pay_kind = 'C203_2' /*非计量支付*/
AND se.prj_seg_id = v_PRJ_SEG_ID
GROUP BY se.sec_est_id; /*已审批的直接从合同清单中取变更量...*/
INSERT INTO tmp_pla_report
(c40, c41, c44, c45, c50)
SELECT se.sec_est_id,
SUM(NVL(elt.rate, 0) * NVL(l.sumADDC_Currency, 0) / 100),
0 isSigned, v_PRJ_SEG_ID, '清单范本对应概算范本-变更量' rsType
FROM FEE_Estimate_Listing_Template elt, BAS_Estimate_Template et,
BAS_Listing_Template lp, FEE_Section_Estimate se,
(SELECT cl.lot_list_id, ll.list_tmp_id,
SUM(NVL(cl.Declare_After_Currency, 0) -
NVL(cl.Before_Currency, 0)) sumADDC_Currency /*未批变更金额*/
FROM CNT_CHNG_Listing cl, CNT_CHNG cg, CNT_LOT_Listing ll,
cnt_contract c
WHERE cl.chng_id = cg.chng_id AND
ll.lot_list_id = cl.lot_list_id AND ll.cnt_id = c.cnt_id AND
cg.status = 'C175_1' /*正在审批中...*/
AND c.Pay_kind = 'C203_1' /*计量支付*/
GROUP BY cl.lot_list_id, ll.list_tmp_id) l
WHERE elt.est_tmp_id = et.est_tmp_id AND
elt.list_tmp_id = lp.list_tmp_id AND
et.est_tmp_id = se.est_tmp_id AND
lp.list_tmp_id = l.list_tmp_id AND
l.list_tmp_id = lp.list_tmp_id AND
se.prj_seg_id = v_PRJ_SEG_ID
GROUP BY se.sec_est_id;
--更新已审批的变更量
UPDATE tmp_pla_report r
SET (r.c13, r.c14, r.c16) =
(SELECT pr.c41, pr.c42, pr.c43
FROM tmp_pla_report pr
WHERE pr.c40 = r.c2 AND pr.c44 = '1' AND
pr.c50 = '清单范本对应概算范本-变更量' AND pr.c45 = v_PRJ_SEG_ID)
WHERE r.c50 = '临时结果' AND r.c45 = v_PRJ_SEG_ID AND EXISTS
(SELECT 1
FROM tmp_pla_report pr
WHERE pr.c40 = r.c2 AND pr.c44 = '1' AND
pr.c50 = '清单范本对应概算范本-变更量' AND pr.c45 = v_PRJ_SEG_ID);
--更新未审批的变更量
UPDATE tmp_pla_report r
SET (r.c15) =
(SELECT pr.c41
FROM tmp_pla_report pr
WHERE pr.c40 = r.c2 AND pr.c44 = '0' AND
pr.c50 = '清单范本对应概算范本-变更量' AND pr.c45 = v_PRJ_SEG_ID)
WHERE r.c50 = '临时结果' AND r.c45 = v_PRJ_SEG_ID AND EXISTS
(SELECT 1
FROM tmp_pla_report pr
WHERE pr.c40 = r.c2 AND pr.c44 = '0' AND
pr.c50 = '清单范本对应概算范本-变更量' AND pr.c45 = v_PRJ_SEG_ID);
DELETE FROM tmp_pla_report t
WHERE t.c50 = '清单范本对应概算范本-变更量' AND t.c45 = v_PRJ_SEG_ID;
--4-3-计量与支付的统计
INSERT INTO tmp_pla_report
(c40, c41, c44, c45, c50)
SELECT se.sec_est_id,
SUM(NVL(elt.rate, 0) * NVL(f.sumFinished_Currency, 0) / 100),
1 isSigned, v_PRJ_SEG_ID, '清单范本对应概算范本-累计计量/支付' rsType
FROM FEE_Estimate_Listing_Template elt, BAS_Estimate_Template et,
BAS_Listing_Template lp, FEE_Section_Estimate se,
(SELECT p1.lot_list_id, l.list_tmp_id,
SUM(NVL(p1.CNT_Currency_Approval1, 0) +
NVL(p1.Change_Currency_Approval1, 0)) sumFinished_Currency
FROM CNT_Listing_Payment1 p1, CNT_PMNT p, cnt_contract c,
cnt_lot_listing l
WHERE p1.pmnt_id = p.pmnt_id AND p.cnt_id = c.cnt_id AND
p1.lot_list_id = l.lot_list_id AND p.status = 'C175_2' /*已审批*/
AND c.Pay_kind = 'C203_1' /*计量支付*/
GROUP BY p1.lot_list_id, l.list_tmp_id) f
WHERE elt.est_tmp_id = et.est_tmp_id AND
elt.list_tmp_id = lp.list_tmp_id AND
et.est_tmp_id = se.est_tmp_id AND
lp.list_tmp_id = f.list_tmp_id AND
f.list_tmp_id = lp.list_tmp_id AND
se.prj_seg_id = v_PRJ_SEG_ID
GROUP BY se.sec_est_id;
--更新已审批的累计/支付
UPDATE tmp_pla_report r
SET r.c17 =
(SELECT pr.c41
FROM tmp_pla_report pr
WHERE pr.c40 = r.c2 AND pr.c44 = '1' AND
pr.c50 = '清单范本对应概算范本-累计计量/支付' AND pr.c45 = v_PRJ_SEG_ID)
WHERE r.c50 = '临时结果' AND r.c45 = v_PRJ_SEG_ID AND EXISTS
(SELECT 1
FROM tmp_pla_report pr
WHERE pr.c40 = r.c2 AND pr.c44 = '1' AND
pr.c50 = '清单范本对应概算范本-累计计量/支付' AND pr.c45 = v_PRJ_SEG_ID);
DELETE FROM tmp_pla_report t
WHERE t.c50 = '清单范本对应概算范本-累计计量/支付' AND t.c45 = v_PRJ_SEG_ID;
--5 对于计算类型概算,将按概算中设置的公式进行计算
P_FEE_EST_EXEC_Sub_STAT(v_PRJ_SEG_ID);
--6 计算累计完成比例
UPDATE tmp_pla_report r
SET c18 = to_number(c17) / to_number(c8)
WHERE to_number(NVL(c8, 0)) <> 0 AND c18 IS NULL AND
r.c45 = v_PRJ_SEG_ID AND r.c50 = '临时结果';
END IF;
END LOOP;
--产生统计结果明细
INSERT INTO fee_estimate_execute_detail
(est_exe_dtl_id, sec_est_id, est_exe_main_id, budget_amount_major,
budget_amount_minor, budget_currency, CNT_Amount, CNT_Currency,
CNT_Currency_Sub, CNT_Currency_UnSign, Emend_Amount, Emend_Currency,
Change_Amount, Change_Currency, Change_Currency_Unsigned,
Change_Currency_After, Finished_Currency, Finished_Rate,
Final_Cost_Amount, Final_Cost_Currency)
SELECT c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15,
c16, c17, c18, c19, c20
FROM tmp_pla_report e
WHERE e.c50 = '临时结果';
COMMIT;
EXCEPTION
WHEN OTHERS THEN
--事务回滚
ROLLBACK;
-- RAISE;
dbms_output.put_line('error code is:' || SQLCODE ||
', error message is:' || substr(SQLERRM, 1, 200));
END;