diff --git a/Application.cfc b/Application.cfc index 2d4aadd..57f24b2 100644 --- a/Application.cfc +++ b/Application.cfc @@ -76,7 +76,7 @@ - + diff --git a/contragent_rpt.cfm b/contragent_rpt.cfm index 432dc99..0d2fb9d 100644 --- a/contragent_rpt.cfm +++ b/contragent_rpt.cfm @@ -109,62 +109,129 @@ - - + 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) - ) - select - siv.__id - ,siv.__name - ,siv.user_description - ,siv.discount - ,siv.cnt - ,siv.modifier_code - ,siv.abstractive_service_code - ,siv.is_actual - ,siv.type - ,siv.hash - ,siv.version - ,siv.__index - ,siv.date_nop - ,siv.date_end - ,siv.is_easy - ,siv.params::text - ,a.__id::text as additional_agreement_uid - ,a.__name as additional_agreement - ,p.price - ,p.cnt as p_cnt - ,p.ed_izm - ,p.code - ,p.discount as p_discount - ,p.__id as p_uid - ,p.name - ,s.probability_pc - ,s.status_id - ,s.status - ,d.__index as deal_index - ,d.__id as deal_uid - 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) - join elma.service_parametrs p ON (p.__id = ANY (siv.params) AND p."__deletedAt" IS NULL) - left outer join elma.additional_agreements a on (a.__id=ANY(siv.additional_agreement)) - where d._companies= - AND siv.is_actual - --AND a.is_actual - --AND date_nop <= CURRENT_TIMESTAMP - AND COALESCE(date_end,CURRENT_TIMESTAMP) >= CURRENT_TIMESTAMP - AND s.probability_pc >=50 - ORDER BY __index --, version::int - - + ) + ,line_expanded + 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 + ,siv.modifier_code + ,siv.abstractive_service_code + ,siv.__index AS siv_index + ,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 + ,s.probability_pc + ,a.__id AS additional_agreement_uid + ,a.contract_uid + ,a.is_actual AS additional_agreement_is_actual + ,a.deal_uid + ,a.__name AS additional_agreement + ,d.__name AS deal + ,d.__status_status AS deal_status_id + ,siv.user_description -- + ,siv.params + 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 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 s.probability_pc >= 50 + --and a.is_actual *** возможно схема версионности противоречива + AND siv.type IN (2, 3) + AND d._companies = + ) + ,component + AS ( + SELECT cnt + ,code + ,__id + ,price + ,ed_izm + ,discount + ,name + 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 + ,COALESCE(( + LEAD(dt_from) OVER ( + PARTITION BY line_key ORDER BY dt_from + ,deal_index + ) + ), ( + SELECT CURRENT_TIMESTAMP + INTERVAL '1 day' + )) dt_next + FROM line_expanded + 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 ) + ) + SELECT d.siv_uid::text as siv_uid + ,d.siv_index + ,d.deal + ,d.user_description + ,d.discount + ,d.cnt + ,d.modifier_code + ,d.abstractive_service_code + ,d.additional_agreement_is_actual + ,d.line_pricing_model_id + ,d.line_key + ,d.deal_index + ,d.dt_from + ,d.dt_to + ,d.dt_next + ,d.is_simple + ,d.additional_agreement_uid::text as additional_agreement_uid + ,d.additional_agreement + ,d.deal_index + ,d.deal_uid::text as deal_uid + + ,s.probability_pc + ,s.status_id + ,s.STATUS - + ,p.price + ,p.cnt as p_cnt + ,p.ed_izm + ,p.code + ,p.discount as p_discount + ,p.__id::text as p_uid + ,p.name + FROM stair d + JOIN status s ON (d.deal_status_id = s.status_id) + LEFT JOIN LATERAL unnest(d.params) AS arr(param_id) ON TRUE + JOIN component p ON (p.__id = arr.param_id) + WHERE d.dt_from <= CURRENT_TIMESTAMP AND (CURRENT_TIMESTAMP < d.dt_next) + + +

Услуги по данным CRM (версии строк спецификации, только актуальные на сегодня, сделки с вероятностью от 50% (начиная с тестирования)

@@ -173,6 +240,7 @@ + @@ -184,13 +252,13 @@ + - + class="gray"> - - + - - + + +
__index Код Пользовательское наименованиеdate_end Вер.% Дополнительное соглашениеКлюч строки
#__index##siv_index# #abstractive_service_code#.#modifier_code# #user_description# @@ -214,20 +282,19 @@ #nFmt(cost*cnt*(100-(isNumeric(discount)?discount:0))/100)# - + install fix payg - (#type#) + (#line_pricing_model_id#) #dateFormat(date_nop,'YYYY-MM-DD')##dateFormat(date_end,'YYYY-MM-DD')##dateFormat(dt_from,'YYYY-MM-DD')##dateFormat(dt_to,'YYYY-MM-DD')# #probability_pc# #additional_agreement# (#status_id# #status#)#line_key#
@@ -330,7 +397,7 @@ Организация - Статус организации + VDC Кластер Политика хранения @@ -410,4 +477,6 @@ --->
+

+добавить реестр GPU и VDC для поиска потеряшек \ No newline at end of file diff --git a/crm2cloud.cfm b/crm2cloud.cfm index 35aad5a..0e349c3 100644 --- a/crm2cloud.cfm +++ b/crm2cloud.cfm @@ -24,234 +24,246 @@ WITH ('Внутреннее согласование',37,10), ('Проработка решения',4,10) , ('Сбор потребностей',1,0) - ), - line_expanded 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 , - 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 , - siv.user_description , - unnest(siv.params) as param_id - 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 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 s.probability_pc >= 50 - --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_expanded - --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.compute) - 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(distinct c.code,', ' order by c.code) as codes - FROM - stair o - JOIN elma.companies z on o._companies=z.__id - LEFT JOIN component c on c.__id = o.param_id - --LEFT JOIN component c on (c.__id = ANY (o.params)) - WHERE - --c.code SIMILAR TO 'iaas.(ngc|dcp).%.ram-_' - (c.code LIKE 'iaas.ngc.%.ram-_' OR c.code LIKE 'iaas.dcp.%.ram-_') - AND c.cnt <> 0 - AND o.cnt <> 0 - 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(distinct c.code,', ' order by c.code) as codes - FROM - stair o - JOIN - elma.companies z on (o._companies=z.__id) - LEFT JOIN component c on c.__id = o.param_id - --LEFT JOIN component c on (c.__id = ANY (o.params)) - WHERE - --c.code SIMILAR TO 'iaas.(ngc|dcp).%.vcpu%-_' - (c.code LIKE 'iaas.ngc.%.vcpu%-_' OR c.code LIKE 'iaas.dcp.%.vcpu%-_') - AND c.cnt <> 0 - AND o.cnt <> 0 - 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(distinct c.code,', ' order by c.code) as codes - FROM - stair o - JOIN elma.companies z on (o._companies=z.__id) - LEFT JOIN component c on c.__id = o.param_id - --LEFT JOIN component c on (c.__id = ANY (o.params)) - WHERE - --c.code SIMILAR TO 'iaas.(ngc|dcp).%.(ssd|fstssd|sata)-_' - (c.code LIKE 'iaas.ngc.%.ssd-_' OR c.code LIKE 'iaas.dcp.%.ssd-_' - or c.code LIKE 'iaas.ngc.%.fstssd-_' OR c.code LIKE 'iaas.dcp.%.fstssd-_' - or c.code LIKE 'iaas.ngc.%.sata-_' OR c.code LIKE 'iaas.dcp.%.sata-_' - ) - AND c.cnt <> 0 - AND o.cnt <> 0 - GROUP BY - z.id_klienta, - z.__id , - z.__name - ), - sold_gpu 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(distinct c.code,', ' order by c.code) as codes - FROM - stair o - JOIN - elma.companies z on (o._companies=z.__id) - LEFT JOIN component c on c.__id = o.param_id - WHERE - --c.code SIMILAR TO 'iaas.(ngc|dcp).%.vcpu%-_' - (c.code LIKE 'iaas.ngc.%.gpu%-_' OR c.code LIKE 'iaas.dcp.%.gpu%-_') - AND c.cnt <> 0 - AND o.cnt <> 0 - GROUP BY - z.id_klienta, - z.__id , - z.__name - ), - gpu_alloc as - ( - select - c."ClientID" as wz , - -- json_agg("GPU") as gpu, - string_agg("GPU"::text||' '||"OrgStatus",', ') as gpu, - count(*) as gpu_alloc - from - vmreports.vm_gpu c - where - ts= (select max(ts) from vmreports.vm_gpu) - group by - c."ClientID" ), - deal_stat as - ( - select - STRING_AGG(distinct deal_status_id::text,', ' order by deal_status_id::text) as status_ids, - ARRAY_AGG(distinct deal_status_id order by deal_status_id) as ar_status_ids, - STRING_AGG(distinct line_pricing_model_id::text,', ' order by line_pricing_model_id::text) as line_pricing_model_ids , - ARRAY_AGG(distinct line_pricing_model_id order by line_pricing_model_id) as ar_line_pricing_model_id, - z.id_klienta as WZ - from - line_expanded o - --line o - join elma.companies z on (o._companies=z.__id) - GROUP BY - z.id_klienta - ) - - - + ) +,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 + ,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 + ,siv.user_description + ,siv.params + 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 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 s.probability_pc >= 50 + --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 + ,COALESCE(( + LEAD(dt_from) OVER ( + PARTITION BY line_key ORDER BY dt_from + ,deal_index + ) + ), ( + SELECT CURRENT_TIMESTAMP + INTERVAL '1 day' + )) dt_next + 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 + ) + ) + ,line_expanded +AS ( + SELECT line.* + ,unnest(line.params) AS param_id + FROM line + ) + ,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.COMPUTE + ) + 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(DISTINCT c.code, ', ' ORDER BY c.code) AS codes + FROM stair o + JOIN elma.companies z ON o._companies = z.__id + --LEFT JOIN component c on (c.__id = ANY (o.params)) + LEFT JOIN line_expanded e ON o.siv_uid = e.siv_uid + LEFT JOIN component c ON c.__id = e.param_id + WHERE + --c.code SIMILAR TO 'iaas.(ngc|dcp).%.ram-_' + ( + c.code LIKE 'iaas.ngc.%.ram-_' + OR c.code LIKE 'iaas.dcp.%.ram-_' + ) + AND c.cnt <> 0 + AND o.cnt <> 0 + 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(DISTINCT c.code, ', ' ORDER BY c.code) AS codes + FROM stair o + JOIN elma.companies z ON (o._companies = z.__id) + --LEFT JOIN component c ON c.__id = o.param_id + --LEFT JOIN component c on (c.__id = ANY (o.params)) + LEFT JOIN line_expanded e ON o.siv_uid = e.siv_uid + LEFT JOIN component c ON c.__id = e.param_id + WHERE + --c.code SIMILAR TO 'iaas.(ngc|dcp).%.vcpu%-_' + ( + c.code LIKE 'iaas.ngc.%.vcpu%-_' + OR c.code LIKE 'iaas.dcp.%.vcpu%-_' + ) + AND c.cnt <> 0 + AND o.cnt <> 0 + 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(DISTINCT c.code, ', ' ORDER BY c.code) AS codes + FROM stair o + JOIN elma.companies z ON (o._companies = z.__id) + --LEFT JOIN component c ON c.__id = o.param_id + --LEFT JOIN component c on (c.__id = ANY (o.params)) + LEFT JOIN line_expanded e ON o.siv_uid = e.siv_uid + LEFT JOIN component c ON c.__id = e.param_id + WHERE + --c.code SIMILAR TO 'iaas.(ngc|dcp).%.(ssd|fstssd|sata)-_' + ( + c.code LIKE 'iaas.ngc.%.ssd-_' + OR c.code LIKE 'iaas.dcp.%.ssd-_' + OR c.code LIKE 'iaas.ngc.%.fstssd-_' + OR c.code LIKE 'iaas.dcp.%.fstssd-_' + OR c.code LIKE 'iaas.ngc.%.sata-_' + OR c.code LIKE 'iaas.dcp.%.sata-_' + ) + AND c.cnt <> 0 + AND o.cnt <> 0 + GROUP BY z.id_klienta + ,z.__id + ,z.__name + ) + ,sold_gpu +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(DISTINCT c.code, ', ' ORDER BY c.code) AS codes + FROM stair o + JOIN elma.companies z ON (o._companies = z.__id) + --LEFT JOIN component c ON c.__id = o.param_id + --LEFT JOIN component c on (c.__id = ANY (o.params)) + LEFT JOIN line_expanded e ON o.siv_uid = e.siv_uid + LEFT JOIN component c ON c.__id = e.param_id + WHERE + --c.code SIMILAR TO 'iaas.(ngc|dcp).%.vcpu%-_' + ( + c.code LIKE 'iaas.ngc.%.gpu%-_' + OR c.code LIKE 'iaas.dcp.%.gpu%-_' + ) + AND c.cnt <> 0 + AND o.cnt <> 0 + GROUP BY z.id_klienta + ,z.__id + ,z.__name + ) + ,gpu_alloc +AS ( + SELECT c."ClientID" AS wz + , + -- json_agg("GPU") as gpu, + string_agg("GPU"::TEXT || ' ' || "OrgStatus", ', ') AS gpu + ,count(*) AS gpu_alloc + FROM vmreports.vm_gpu c + WHERE ts = ( + SELECT max(ts) + FROM vmreports.vm_gpu + ) + GROUP BY c."ClientID" + ) + ,deal_stat +AS ( + SELECT STRING_AGG(DISTINCT deal_status_id::TEXT, ', ' ORDER BY deal_status_id::TEXT) AS status_ids + ,ARRAY_AGG(DISTINCT deal_status_id ORDER BY deal_status_id) AS ar_status_ids + ,STRING_AGG(DISTINCT line_pricing_model_id::TEXT, ', ' ORDER BY line_pricing_model_id::TEXT) AS line_pricing_model_ids + ,ARRAY_AGG(DISTINCT line_pricing_model_id ORDER BY line_pricing_model_id) AS ar_line_pricing_model_id + ,z.id_klienta AS WZ + FROM stair d + --LEFT JOIN LATERAL unnest(d.params) AS arr(param_id) ON TRUE + --JOIN component p ON (p.__id = arr.param_id) + JOIN elma.companies z ON (d._companies = z.__id) + WHERE d.dt_from <= CURRENT_TIMESTAMP + AND (CURRENT_TIMESTAMP < d.dt_next) + GROUP BY z.id_klienta + ) select r.wz as wz_sold @@ -368,7 +380,6 @@ S3 операции и трафик: #dateFormat(qS3OpsTrfAge.dt_load,'YYYY-M - diff --git a/crm2cloud_filter.cfm b/crm2cloud_filter.cfm index c6244b3..bff8951 100644 --- a/crm2cloud_filter.cfm +++ b/crm2cloud_filter.cfm @@ -13,7 +13,8 @@ - + + @@ -57,20 +58,39 @@ $(document).ready(function() {
Статус
- - по вхождению в список + + + + + + SELECT * from ( + VALUES + --('Закрыта неуспешно',7,0) , + ('Закрыта успешно',6,100) , + ('Договор подписан',5,100) , + ('Договор на подписании',15,90) , + ('Договор на согласовании',12,70), + ('Тестирование',8,50) + --('Отправлено ТКП',10,20) , + --('Внутреннее согласование',37,10), + --('Проработка решения',4,10), + --('Сбор потребностей',1,0) + ) as status (status, status_id, probability_pc) + ORDER BY probability_pc, status_id + + + + для выбора нескольких значений используйте CTRL или SHIFT (для диапазона)
diff --git a/etc/db/3.sql b/etc/db/3.sql new file mode 100644 index 0000000..03c0c9a --- /dev/null +++ b/etc/db/3.sql @@ -0,0 +1,114 @@ +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_expanded 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 , +siv.modifier_code , +siv.abstractive_service_code , +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 , +s.probability_pc , +a.__id as additional_agreement_uid , +a.__name as additional_agreement , +a.contract_uid , +a.is_actual as additional_agreement_is_actual , +a.deal_uid , +d.__name as deal , +d.__status_status as deal_status_id , +siv.user_description +--,unnest(siv.params) as param_id +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 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 s.probability_pc >= 50 +and siv.type IN (2,3) +), +component as +( +SELECT +cnt , +code , +__id, +price, +ed_izm, +discount, +name +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_expanded +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 ) +) + +SELECT +d.siv_uid +,d.deal +,d.user_description +,d.discount +,d.cnt +,d.modifier_code +,d.abstractive_service_code +,d.siv_is_actual -- +,d.line_pricing_model_id -- +,d.line_key +,d.deal_index -- +,d.dt_from -- +,d.dt_to -- +,d.is_simple -- +--,d.params::text +,d.additional_agreement_uid +,d.additional_agreement +/*,p.price +,p.cnt as p_cnt +,p.ed_izm +,p.code +,p.discount as p_discount +,p.__id as p_uid +,p.name*/ +,s.probability_pc +,s.status_id +,s.status +,d.deal_index +,d.deal_uid +FROM stair d +--left outer join component p on (d.param_id=p.__id) +JOIN status s on (d.deal_status_id=s.status_id) +where d._companies='019503f2-5774-7768-b5c9-566a71daedaa' \ No newline at end of file diff --git a/etc/db/SMET.sql b/etc/db/SMET.sql new file mode 100644 index 0000000..0a2ef8d --- /dev/null +++ b/etc/db/SMET.sql @@ -0,0 +1,455 @@ +select * from +( +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 , + 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 , + siv.user_description , + siv.params + 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 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.compute) + 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,', ' order by c.code) as codes + FROM + stair o + JOIN elma.companies z on (o._companies=z.__id) + LEFT JOIN component c on (c.__id = ANY (o.params)) + WHERE + c.code SIMILAR TO 'iaas.(ngc|dcp).%.ram-_' + AND c.cnt <> 0 + AND o.cnt <> 0 + 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,', ' order by c.code) as codes + FROM + stair o + JOIN + elma.companies z on (o._companies=z.__id) + LEFT JOIN component c on (c.__id = ANY (o.params)) + WHERE + c.code SIMILAR TO 'iaas.(ngc|dcp).%.vcpu%-_' + AND c.cnt <> 0 + AND o.cnt <> 0 + 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,', ' order by c.code) as codes + FROM + stair o + JOIN elma.companies z on (o._companies=z.__id) + LEFT JOIN component c on (c.__id = ANY (o.params)) + WHERE + c.code SIMILAR TO 'iaas.(ngc|dcp).%.(ssd|fstssd|sata)-_' + AND c.cnt <> 0 + AND o.cnt <> 0 + GROUP BY + z.id_klienta, + z.__id , + z.__name + ), + deal_stat as + ( + select + STRING_AGG(distinct deal_status_id::text,', ' order by deal_status_id::text) as status_ids , + STRING_AGG(distinct line_pricing_model_id::text,', ' order by line_pricing_model_id::text) as line_pricing_model_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 , + ds.line_pricing_model_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.codes as disk_codes , + d.quantity as disk_sold , + da.disk_alloc , + z.__name as alloc_company, + z.__id as alloc_company_uid +from + sold_ram r + join deal_stat ds on (lower(r.wz)=lower(ds.wz)) + join sold_cpu c on (lower(r.wz)=lower(c.wz)) + left join sold_disk d on (lower(r.wz)=lower(d.wz)) + full join alloc a on (lower(r.wz)=lower(a.wz)) + left join disk_alloc da on (a.wz=da.wz) + left join elma.companies z on (lower(a.wz)=lower(z.id_klienta)) +) + +intersect all + +select * from +( +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_expanded 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 , + 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 , + siv.user_description , + unnest(siv.params) as param_id + 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 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_expanded + --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.compute) + 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,', ' order by c.code) as codes + FROM + stair o + JOIN elma.companies z on o._companies=z.__id + LEFT JOIN component c on c.__id = o.param_id + --LEFT JOIN component c on (c.__id = ANY (o.params)) + WHERE + --c.code SIMILAR TO 'iaas.(ngc|dcp).%.ram-_' + (c.code LIKE 'iaas.ngc.%.ram-_' OR c.code LIKE 'iaas.dcp.%.ram-_') + AND c.cnt <> 0 + AND o.cnt <> 0 + 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,', ' order by c.code) as codes + FROM + stair o + JOIN + elma.companies z on (o._companies=z.__id) + LEFT JOIN component c on c.__id = o.param_id + --LEFT JOIN component c on (c.__id = ANY (o.params)) + WHERE + --c.code SIMILAR TO 'iaas.(ngc|dcp).%.vcpu%-_' + (c.code LIKE 'iaas.ngc.%.vcpu%-_' OR c.code LIKE 'iaas.dcp.%.vcpu%-_') + AND c.cnt <> 0 + AND o.cnt <> 0 + 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,', ' order by c.code) as codes + FROM + stair o + JOIN elma.companies z on (o._companies=z.__id) + LEFT JOIN component c on c.__id = o.param_id + --LEFT JOIN component c on (c.__id = ANY (o.params)) + WHERE + --c.code SIMILAR TO 'iaas.(ngc|dcp).%.(ssd|fstssd|sata)-_' + (c.code LIKE 'iaas.ngc.%.ssd-_' OR c.code LIKE 'iaas.dcp.%.ssd-_' + or c.code LIKE 'iaas.ngc.%.fstssd-_' OR c.code LIKE 'iaas.dcp.%.fstssd-_' + or c.code LIKE 'iaas.ngc.%.sata-_' OR c.code LIKE 'iaas.dcp.%.sata-_' + ) + AND c.cnt <> 0 + AND o.cnt <> 0 + GROUP BY + z.id_klienta, + z.__id , + z.__name + ), + deal_stat as + ( + select + STRING_AGG(distinct deal_status_id::text,', ' order by deal_status_id::text) as status_ids , + STRING_AGG(distinct line_pricing_model_id::text,', ' order by line_pricing_model_id::text) as line_pricing_model_ids , + z.id_klienta as WZ + from + line_expanded o + --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 , + ds.line_pricing_model_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.codes as disk_codes , + d.quantity as disk_sold , + da.disk_alloc , + z.__name as alloc_company, + z.__id as alloc_company_uid +from + sold_ram r + join deal_stat ds on (lower(r.wz)=lower(ds.wz)) + join sold_cpu c on (lower(r.wz)=lower(c.wz)) + left join sold_disk d on (lower(r.wz)=lower(d.wz)) + full join alloc a on (lower(r.wz)=lower(a.wz)) + left join disk_alloc da on (a.wz=da.wz) + left join elma.companies z on (lower(a.wz)=lower(z.id_klienta)) +) \ No newline at end of file diff --git a/gpu_ls.cfm b/gpu_ls.cfm new file mode 100644 index 0000000..13130b8 --- /dev/null +++ b/gpu_ls.cfm @@ -0,0 +1,164 @@ + + + + + + + + + + + + + +select "Name", "Object_UUID", "UUID_VM", +"VDC", "Organization_UUID", "Organization", "WZ", "Cluster", "Host", +"Host_Model", "CPU_Model", "Host_CPU_Cores", "Host_CPU_Sockets", "Host_CPU_Speed", "Host_RAM", +"Host_CPU_Used", "Host_CPU_Used_Avg", +"VDC_CPU_Reserv", "VDC_CPU_Speed", +"VM_vCPU_count", "VM_CPU_Used", "VM_CPU_Used_AVG", "VM_CPU_Reserv_GHz", "VM_CPU_Reserv_perc", +"VM_RAM_Allocated", "VM_RAM_Used", +"VM_is_ON", +k.__id as company_uid +from vmreports.compute c +left outer join elma.companies k ON (lower(k.id_klienta)=lower(c."WZ")) +where c.ts=(select max(ts) from vmreports.compute) +--order by "WZ" + + + + + + + + + + + + + + + + Сверка CRM - Cloud + + + + + + + + + + + + +
+ + + +
+#qVM.recordCount# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
WZИмяУникальное имяOrganizationVDCVDC CPU ReservVDC CPU Speed GHzClusterHostHost ModelCPU ModelHost CPU CoresHost CPU SocketsHost CPU Speed GHzHost RAM GBHost CPU UsedHost CPU Used_AvgVM vCPU countVM CPU UsedVM CPU Used AVGVM CPU Reserv GHzVM CPU Reserv percVM RAM Allocated GBVM RAM Used GBVM is ON
#WZ##Name##UUID_VM##Organization##VDC##round(VDC_CPU_Reserv,3)##round(VDC_CPU_Speed,3)##qVM.Cluster##Host##Host_Model##CPU_Model##Host_CPU_Cores##Host_CPU_Sockets##round(Host_CPU_Speed,3)##round(Host_RAM)##round(Host_CPU_Used,1)##round(Host_CPU_Used_Avg,1)##VM_vCPU_count##round(VM_CPU_Used,1)##round(VM_CPU_Used_AVG,1)##round(VM_CPU_Reserv_GHz,1)##VM_CPU_Reserv_perc##VM_RAM_Allocated##round(VM_RAM_Used)##VM_is_ON#
+ + + + + diff --git a/lib/filter_build.cfm b/lib/filter_build.cfm index fb35c56..b67a1f0 100644 --- a/lib/filter_build.cfm +++ b/lib/filter_build.cfm @@ -1,5 +1,6 @@ + @@ -34,6 +35,9 @@ + + + diff --git a/lib/filterparam.cfm b/lib/filterparam.cfm index af5607c..3ad0cd2 100644 --- a/lib/filterparam.cfm +++ b/lib/filterparam.cfm @@ -1,6 +1,7 @@ + @@ -72,6 +73,13 @@ arrayAppend(array,item) механически заменил на listAppend(li + + + + + + +