Advertisement
Guest User

Untitled

a guest
Jan 15th, 2020
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. WITH sum AS (SELECT pp.procedure_id,
  2.                                 string_agg(distinct ppf.e_code, ','::text) AS kvr,
  3.                                 sum(case when pvtp.name = 2020 then ppf.amount else null end ) amount_19,
  4.                                 sum(case when pvtp.name = 2021 then ppf.amount else null end ) amount_20,
  5.                                 sum(case when pvtp.name = 2022 then ppf.amount else null end ) amount_21,
  6.                                 sum(case when pvtp.name > 2022 then ppf.amount else null end ) amount_21p
  7.                         from po_plan_position pp
  8.                         join po_plan_position_finances ppf on pp.id = ppf.po_plan_position_id
  9.                         join po_vocab_time_periods pvtp on pvtp.id = ppf.year
  10.                         where  ppf.actual = true and pp.actual = true
  11.                         group by pp.procedure_id ),
  12.     sum_c AS (SELECT pf.lot_id,
  13.                                 --string_agg(distinct ppf.e_code, ','::text) AS kvr,
  14.                                 sum(case when pvtp.name = 2020 then pf.amount else null end ) amount_19,
  15.                                 sum(case when pvtp.name = 2021 then pf.amount else null end ) amount_20,
  16.                                 sum(case when pvtp.name = 2022 then pf.amount else null end ) amount_21,
  17.                                 sum(case when pvtp.name > 2022 then pf.amount else null end ) amount_21p
  18.                         from cm_contract_finances pf
  19.                         join cm_contract_stages ccs     on ccs.id = pf.stage_id and ccs.actual = true
  20.                         JOIN po_account pa ON pa.id = pf.po_account_id
  21.                         /*join po_exp_account pea       on pea.id = pa.po_exp_account_id
  22.                         JOIN gpo_po_exp_account gpea ON gpea.po_exp_code_id = pea.id
  23.                         JOIN gpo_exp_account gea ON gea.id = gpea.gpo_exp_account_id*/
  24.                         join po_budget pb       on pb.id = pa.po_budget_id and pb.contragent_id --key_pbs
  25.                         join po_vocab_time_periods pvtp on pvtp.id = pb.po_period_id
  26.                         where pb.actual = true and pf.type = 1
  27.                         group by pf.lot_id),
  28.     sum_p AS (SELECT pf.lot_id,
  29.                                 --string_agg(distinct ppf.e_code, ','::text) AS kvr,
  30.                                 sum(case when pvtp.name = 2020 then pf.amount else null end ) amount_19,
  31.                                 sum(case when pvtp.name = 2021 then pf.amount else null end ) amount_20,
  32.                                 sum(case when pvtp.name = 2022 then pf.amount else null end ) amount_21,
  33.                                 sum(case when pvtp.name > 2022 then pf.amount else null end ) amount_21p
  34.                         from cm_contract_finances pf
  35.                         join cm_contract_stages ccs     on ccs.id = pf.stage_id and ccs.actual = true
  36.                         JOIN po_account pa ON pa.id = pf.po_account_id
  37.                         /*join po_exp_account pea       on pea.id = pa.po_exp_account_id
  38.                         JOIN gpo_po_exp_account gpea ON gpea.po_exp_code_id = pea.id
  39.                         JOIN gpo_exp_account gea ON gea.id = gpea.gpo_exp_account_id*/
  40.                         join po_budget pb       on  pb.id = pa.po_budget_id and pb.contragent_id --key_pbs
  41.                         join po_vocab_time_periods pvtp on pvtp.id = pb.po_period_id
  42.                         where pb.actual = true and pf.type = 2
  43.                         group by pf.lot_id
  44.                 )                                        
  45.  
  46. select
  47.                         c.full_name orgname, c.inn orginn,--c.id orgid,
  48.                         c_grbs.full_name grbsname, c_grbs.inn grbsinn,--c_grbs.id grbsid,
  49.                         pl_big.schedule_id,
  50.                         SCH.plan_number pg_n, -- РН Плана-графика
  51.                         po_plan.plan_number pz_n,
  52.                         pl_big.purchase_code pg_ikz,    --  ИКЗ Плана-графика
  53.                         pl_big.purchase_code_in_plan pz_ikz,    --  ИКЗ Плана закупок
  54.                         l_big.plan_position_number pg_rn, -- РН позиции Плана-графика
  55.                         vps_big.full_name lotstage_big,
  56.                         pp.type_spec_purch,
  57.                         --plsp.special_type,--Тип особых закупок
  58.                         --plsp.special_type_pg,--наименование типа для планов-графиков
  59.                         pp.order_number proc_num,--Порядковый номер процедуры в плане проведения закупок
  60.                         pr.title subject,
  61.                         --vpt.name sop,
  62.                         --plc.name oneex_reason,
  63.                         l.date_placed, --Планируемый срок размещения
  64.                         l.date_fulfilled, --Планируемый срок исполнения
  65.                         --pl.contract_fulfill_date,  --Срок исполнения контракта
  66.                         vps.full_name lotstage,
  67.                         l.scheduled_price_total /*start_price*/ start_price,
  68.                         (COALESCE(sum.amount_19, 0) + COALESCE(sum.amount_20, 0) + COALESCE(sum.amount_21, 0) + COALESCE(sum.amount_21p, 0)) as sum_all,
  69.                         sum.amount_19 as sum_cur,
  70.                         sum.amount_20 as sum_first_plan,
  71.                         sum.amount_21 as sum_second_plan,
  72.                         sum.amount_21p as sum_future_plan,
  73.                         sum.kvr,
  74.             (COALESCE(sum_c.amount_19, 0) + COALESCE(sum_c.amount_20, 0) + COALESCE(sum_c.amount_21, 0) + COALESCE(sum_c.amount_21p, 0)) as sum_all_con,
  75.             sum_p.amount_19 as sum_cur_con_f,
  76.             sum_c.amount_19 as sum_cur_con,
  77.                         sum_c.amount_20 as sum_first_plan_con,
  78.                         sum_c.amount_21 as sum_second_plan_con,
  79.                         sum_c.amount_21p as sum_future_plan_con,
  80.                         --kosgu.kosgu,
  81.                         cc.contract_rnk,
  82.                         cc.contract_amount,
  83.                         s.full_name as suppliername,
  84.                         s.inn as supplierinn,
  85.                         pp.detail_parent_id procedure_id_parent, --id родительской процецедуры
  86.                         pr.id procedure_id,
  87.                         l.id lot_id,
  88.             case when cc.contract_rnk is not null then 'https://new.gz-spb.ru/#cm/contract/view/lot/' || l.id::text else null end link_contract,
  89.                         'https://new.gz-spb.ru/#po/schedule/year/id/'||pl_big.schedule_id::text||'/type/all' link_pg,
  90.                         'https://new.gz-spb.ru/#po/schedule/viewschedulespecialposition/position/'||pp.detail_parent_id||'/schedule/'||pl_big.schedule_id::text link_spec,
  91.                         'https://new.gz-spb.ru/#po/schedule/viewdetailspecialposition/procedure/'||pr.id::text link_detailspec
  92.                 from contragents c --
  93.                 join po_list_org_hierarchy ploh on ploh.contragent_id = c.id and ploh.actual = true and         ploh.parent_type = 1
  94.                 join contragents c_grbs on c_grbs.id = ploh.parent_contragent_id
  95.                 join po_plan on c.id = po_plan.customer_org_id  --
  96.                 join po_schedules sch on po_plan.id = sch.plan_id--
  97.                 join po_lots pl_big     on sch.id = pl_big.schedule_id  --
  98.                 join lots l_big on pl_big.lot_id = l_big.id
  99.                 join po_procedures pp on l_big.procedure_id = pp.detail_parent_id
  100.                 join procedures pr on pp.procedure_id = pr.id
  101.                 join lots l     on l.procedure_id = pr.id
  102.  
  103.                 left join procedure_steps ps_big        on ps_big.id = l_big.current_step --and ps.actual = true
  104.                 left join vocab_procedure_steps vps_big on vps_big.pseudo::text = ps_big.step_id::text and vps_big.actual = true
  105.  
  106.                 --left join po_lots pl  on pl.lot_id = l.id
  107.                 --left join po_list_contract_single_supplier_reasons plc        on plc.code = pp.basis_for_single_supplier
  108.                 /*left join
  109.                         (select code special_type, matend_full_name) special_type_pg, maprch_full_name) special_type_pz
  110.                                 from po_list_special_purchases
  111.                                 where actual = true
  112.                                 group by code
  113.                         )plsp on plsp.special_type = pp.type_spec_purch */
  114.                 --left join vocab_procedure_types vpt   on vpt.id = pr.procedure_type
  115.                 left join procedure_steps ps    on ps.id = l.current_step --and ps.actual = true
  116.                 left join vocab_procedure_steps vps     on vps.pseudo::text = ps.step_id::text and vps.actual = true
  117.                 left join cm_contracts cc on l.id = cc.lot_id
  118.                 left join contragents s on s.id = cc.supplier_id
  119.         left join
  120.                 /*(SELECT pp.procedure_id,
  121.                                 string_agg(distinct ppf.e_code, ','::text) AS kvr,
  122.                                 sum(case when pvtp.name = 2019 then ppf.amount else null end ) amount_19,
  123.                                 sum(case when pvtp.name = 2020 then ppf.amount else null end ) amount_20,
  124.                                 sum(case when pvtp.name = 2021 then ppf.amount else null end ) amount_21,
  125.                                 sum(case when pvtp.name > 2021 then ppf.amount else null end ) amount_21p
  126.                         from po_plan_position pp
  127.                         join    po_plan_position_finances ppf on pp.id = ppf.po_plan_position_id
  128.                         join po_vocab_time_periods pvtp on pvtp.id = ppf.year
  129.                         where ppf.actual = true and pp.actual = true
  130.                         group by pp.procedure_id
  131.                 ) */ sum on sum.procedure_id = pr.id
  132.          left join
  133.                 /*(SELECT pf.lot_id,
  134.                                 --string_agg(distinct ppf.e_code, ','::text) AS kvr,
  135.                                 sum(case when pvtp.name = 2019 then pf.amount else null end ) amount_19,
  136.                                 sum(case when pvtp.name = 2020 then pf.amount else null end ) amount_20,
  137.                                 sum(case when pvtp.name = 2021 then pf.amount else null end ) amount_21,
  138.                                 sum(case when pvtp.name > 2021 then pf.amount else null end ) amount_21p
  139.                         from cm_contract_finances pf
  140.                         join cm_contract_stages ccs     on ccs.id = pf.stage_id and ccs.actual = true
  141.                         JOIN po_account pa ON pa.id = pf.po_account_id
  142. --                        join po_exp_account pea       on pea.id = pa.po_exp_account_id
  143. --                        JOIN gpo_po_exp_account gpea ON gpea.po_exp_code_id = pea.id
  144. --                        JOIN gpo_exp_account gea ON gea.id = gpea.gpo_exp_account_id
  145.                         join po_budget pb       on pb.id = pa.po_budget_id
  146.                         join po_vocab_time_periods pvtp on pvtp.id = pb.po_period_id
  147.                         where pb.actual = true and pf.type = 1
  148.                         group by pf.lot_id
  149.                 ) */ sum_c on sum_c.lot_id = cc.lot_id
  150.                 left join
  151.                 /* (SELECT pf.lot_id,
  152.                                 --string_agg(distinct ppf.e_code, ','::text) AS kvr,
  153.                                 sum(case when pvtp.name = 2019 then pf.amount else null end ) amount_19,
  154.                                 sum(case when pvtp.name = 2020 then pf.amount else null end ) amount_20,
  155.                                 sum(case when pvtp.name = 2021 then pf.amount else null end ) amount_21,
  156.                                 sum(case when pvtp.name > 2021 then pf.amount else null end ) amount_21p
  157.                         from cm_contract_finances pf
  158.                         join cm_contract_stages ccs     on ccs.id = pf.stage_id and ccs.actual = true
  159.                         JOIN po_account pa ON pa.id = pf.po_account_id
  160. --                        join po_exp_account pea       on pea.id = pa.po_exp_account_id
  161. --                        JOIN gpo_po_exp_account gpea ON gpea.po_exp_code_id = pea.id
  162. --                        JOIN gpo_exp_account gea ON gea.id = gpea.gpo_exp_account_id
  163.                         join po_budget pb       on pb.id = pa.po_budget_id
  164.                         join po_vocab_time_periods pvtp on pvtp.id = pb.po_period_id
  165.                         where pb.actual = true and pf.type = 2
  166.                         group by pf.lot_id
  167.                 ) */ sum_p on sum_p.lot_id = cc.lot_id
  168.         /*LEFT JOIN
  169.                 (SELECT pp.lot_id,
  170.                   string_agg((pp.kvr || CASE WHEN (pp.rs IS NOT NULL) THEN (' - '::text || pp.rs) ELSE (' - '::text || pp.kosgu) END), ','::text) AS kosgu
  171.                          FROM (SELECT DISTINCT pf.lot_id,
  172.                                                                 kvr_1.kvr,
  173.                                                                 kvr_1.kosgu,
  174.                                                                 kvr_1.rs
  175.                                                          FROM cm_contract_finances pf
  176.                                                                  LEFT JOIN po_account pa ON pa.id = pf.po_account_id
  177.                                                                  LEFT JOIN
  178.                                                                         ( SELECT pea.id AS po_exp_code_id,
  179.                                                                                                 string_agg((gea.e_code)::text, ','::text) AS kvr,
  180.                                                                                                 string_agg((gea.kosgu)::text, ','::text) AS kosgu,
  181.                                                                                                 string_agg((
  182.                                                                                                                 CASE
  183.                                                                                                                                 WHEN (length((pea.po_exp_code)::text) > 3) THEN pea.po_exp_code
  184.                                                                                                                                 ELSE NULL::character varying
  185.                                                                                                                 END)::text, ','::text) AS rs
  186.                                                                                          FROM po_exp_account pea
  187.                                                                                                  JOIN gpo_po_exp_account gpea ON gpea.po_exp_code_id = pea.id
  188.                                                                                                  JOIN gpo_exp_account gea ON gea.id = gpea.gpo_exp_account_id
  189.                                                                                         GROUP BY pea.id
  190.                                                                         ) kvr_1 ON kvr_1.po_exp_code_id = pa.po_exp_account_id
  191.                                                                  LEFT JOIN po_budget pb ON pb.id = pa.po_budget_id
  192.                                                         WHERE pb.actual = true
  193.                                         ) pp
  194.                         GROUP BY pp.lot_id
  195.                 ) kosgu ON kosgu.lot_id = l.id*/
  196.         where --($X{IN, c_grbs.id::int, grbs})
  197.             --and ($X{IN, c.id::int, pbs})
  198.                 l.actual = true and pr.actual = true --and pr.id =      1668915
  199.                 and l.id is not null
  200.                 and c.actual = true
  201.                 and pp.detail_parent_id is not null
  202.                 and sch.plan_number like '2020%'
  203.         --order by c.full_name, pp.order_number
  204.     --key_org_sec
  205.     --key_grbs
  206.     and c.id --key_pbs
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement