WITH status(status, status_id, probability_pc) as (VALUES ('Закрыта неуспешно',7,0),('Закрыта успешно',6,100),('Договор подписан',5,100),('Договор на подписании',15,90),('Договор на согласовании',12,70), ('Тестирование',8,50),('Отправлено ТКП',10,20),('Внутреннее согласование',37,10),('Проработка решения',4,10),('Сбор потребностей',1,0) ), line as ( SELECT siv.__id as siv_uid, siv.discount, siv.type as line_pricing_model_id ,siv.hash as line_key, siv.is_actual as siv_is_actual ,siv.version::numeric as line_version ,d.__index as deal_index ,d._companies ,a.index as agreement_version ,siv.date_nop::date as dt_from ,siv.date_end::date as dt_to ,siv.is_easy as is_simple ,siv.cnt -- should mutiliply ,s.probability_pc ,a.__id as agreement_uid, a.contract_uid, a.is_actual as agreement_is_actual, a.deal_uid ,d.__name as deal, d.__status_status as deal_status_id --,c.__name as contract ,siv.user_description ,siv.params --,(SELECT sum(p.price*p.cnt*(100.0-COALESCE(p.discount,0.0))/100.0) FROM elma.service_parametrs p WHERE(p.__id = ANY (siv.params))) as cost FROM elma.deals_services siv JOIN elma.deals d on (d.__id = ANY(siv.deal)) JOIN status s on (d.__status_status=s.status_id) LEFT OUTER JOIN elma.additional_agreements a on (a.__id = ANY(siv.additional_agreement)) WHERE siv.is_actual AND siv."__deletedAt" IS NULL AND d."__deletedAt" IS NULL AND a."__deletedAt" IS NULL AND a.is_actual AND siv.type IN (2,3) ), component as ( SELECT price*cnt*(100.0-COALESCE(discount,0))/100.0 as cost ,price ,cnt ,code ,__id FROM elma.service_parametrs where "__deletedAt" IS NULL ), stair as ( -- рабочая лесенка (инстансы строк, имеющие нетривиальную вероятность) select * FROM ( SELECT *, MIN(dt_from) OVER (PARTITION BY line_key ORDER BY deal_index desc) running_min_dt FROM line --WHERE probability_pc > 0 ) t WHERE t.dt_from = t.running_min_dt AND t.dt_to > CURRENT_TIMESTAMP OR t.dt_to IS NULL ), alloc as (select c."WZ" as wz , round(sum(c."VM_RAM_Allocated")) as ram , round(sum(CASE WHEN "VM_is_ON" > 0 THEN c."VM_RAM_Allocated" ELSE 0 END)) as ram_on , round(sum(c."VM_vCPU_count")) as cpu , round(sum(CASE WHEN "VM_is_ON" > 0 THEN c."VM_vCPU_count" ELSE 0 END)) as cpu_on from vmreports.compute c where ts=(select max(ts) from vmreports.compute) group by c."WZ" ), disk_alloc as (select c."WZ" as wz , round(sum(c."Disk_Allocated")) as disk_alloc from vmreports.storage c where ts=(select max(ts) from vmreports.storage) group by c."WZ" ), sold_ram as (SELECT z.id_klienta as WZ, z.__name as client, z.__id as company_uid, round(sum(c.cnt*o.cnt)) as quantity ,count(*) as lines, STRING_AGG(c.code,', ') as codes /*,o.line_key, o.probability_pc, dt_next, o.deal_uid, o.deal, o.agreement_uid, o.line_pricing_model_id,o.dt_from, o.dt_to*/ FROM stair o JOIN elma.companies z on (o._companies=z.__id) LEFT OUTER JOIN component c on (c.__id = ANY (o.params)) WHERE c.code LIKE 'iaas.ngc.%.ram-_' GROUP BY z.id_klienta, z.__id, z.__name ), sold_cpu as (SELECT z.id_klienta as WZ, z.__name as client, z.__id as company_uid, round(sum(c.cnt*o.cnt)) as quantity ,count(*) as lines, STRING_AGG(c.code,', ') as codes /*,o.line_key, o.probability_pc, dt_next, o.deal_uid, o.deal, o.agreement_uid, o.line_pricing_model_id,o.dt_from, o.dt_to*/ FROM stair o JOIN elma.companies z on (o._companies=z.__id) LEFT OUTER JOIN component c on (c.__id = ANY (o.params)) WHERE c.code LIKE 'iaas.ngc.%.vcpu%-_' GROUP BY z.id_klienta, z.__id, z.__name ), sold_disk as (SELECT z.id_klienta as WZ, z.__name as client, z.__id as company_uid, round(sum(c.cnt*o.cnt)) as quantity ,count(*) as lines, STRING_AGG(c.code,', ') as codes /*,o.line_key, o.probability_pc, dt_next, o.deal_uid, o.deal, o.agreement_uid, o.line_pricing_model_id,o.dt_from, o.dt_to*/ FROM stair o JOIN elma.companies z on (o._companies=z.__id) LEFT OUTER JOIN component c on (c.__id = ANY (o.params)) WHERE c.code SIMILAR TO 'iaas.ngc.%.(ssd|fstssd|sata)-_' GROUP BY z.id_klienta, z.__id, z.__name ), deal_stat as ( select STRING_AGG(distinct deal_status_id::text,', ') as status_ids , z.id_klienta as WZ from line o join elma.companies z on (o._companies=z.__id) GROUP BY z.id_klienta ) select r.wz as wz_sold r.client as client_sold r.company_uid a.wz as wz_alloc ds.status_ids r.codes as ram_codes r.quantity as ram_sold a.ram as ram_alloc a.ram_on as ram_alloc_on c.codes as cpu_codes c.quantity as cpu_sold a.cpu as cpu_alloc a.cpu_on as cpu_alloc_on d.quantity as disk_sold da.disk_alloc d.codes as disk_codes from sold_ram r join deal_stat ds on (r.wz=ds.wz) join sold_cpu c on (r.wz=c.wz) left join sold_disk d on (r.wz=d.wz) full join alloc a on (r.wz=a.wz) left join disk_alloc da on (a.wz=da.wz) order by 1,3 Сверка CRM - Cloud
WZ Elma Клиент WZ Cloud Статусы Коды RAM RAM GB Elma RAM Cloud RAM Cloud ON Коды CPU CPU Elma CPU Cloud CPU Cloud ON Коды Дисков Диски GB Elma Диски Cloud
#wz_sold# #client_sold# #wz_alloc# #status_ids# #ram_codes# #ram_sold# #ram_alloc# #ram_alloc_on# #cpu_codes# #cpu_sold# #cpu_alloc# #cpu_alloc_on# #disk_codes# #disk_sold# #disk_alloc#