44444444444

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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值