43 speed and filter and totals

This commit is contained in:
2026-04-13 23:18:41 +03:00
parent 515b6cd90d
commit ade4071eb8
4 changed files with 317 additions and 171 deletions
+1 -1
View File
@@ -76,7 +76,7 @@
<!--- global settings ---> <!--- global settings --->
<cfset request.RECORDS_PER_PAGE=500/> <cfset request.RECORDS_PER_PAGE=500/>
<cfset request.APP_VERSION="0.00.042"/> <cfset request.APP_VERSION="0.00.043"/>
<cfset request.STAND=getStand()/> <cfset request.STAND=getStand()/>
<cflock scope="application" type="readonly" timeout=3> <cflock scope="application" type="readonly" timeout=3>
+31 -32
View File
@@ -15,7 +15,7 @@
<cfquery name="qRead"> <cfquery name="qRead">
with with
capacity as ( <!--- capacity as (
select "Cluster" as cluster, count(*) as hosts, sum(cores) as cores, round(sum(ghz)::numeric,1) as ghz, round(sum(ram)) as ram select "Cluster" as cluster, count(*) as hosts, sum(cores) as cores, round(sum(ghz)::numeric,1) as ghz, round(sum(ram)) as ram
from ( from (
select "Cluster", "Host" select "Cluster", "Host"
@@ -25,7 +25,7 @@ from (
group by "Cluster","Host" group by "Cluster","Host"
order by "Cluster","Host" order by "Cluster","Host"
) host ) host
group by "Cluster"), group by "Cluster"), --->
usage as ( usage as (
select "Cluster" as cluster select "Cluster" as cluster
@@ -55,6 +55,8 @@ SELECT
,sum("CPU_Cores") as cores ,sum("CPU_Cores") as cores
,sum(CASE WHEN "Maintenance"='notInMaintenance' THEN "CPU_Cores" ELSE 0 END) as cores_in_service ,sum(CASE WHEN "Maintenance"='notInMaintenance' THEN "CPU_Cores" ELSE 0 END) as cores_in_service
,sum(CASE WHEN "Maintenance"='notInMaintenance' THEN "CPU_Cores"*"CPU_Speed" ELSE 0 END) as ghz_in_service ,sum(CASE WHEN "Maintenance"='notInMaintenance' THEN "CPU_Cores"*"CPU_Speed" ELSE 0 END) as ghz_in_service
,sum(CASE WHEN "Maintenance"='notInMaintenance' THEN "CPUtoVM" ELSE 0 END) as ghz_provisioned
,sum(CASE WHEN "Maintenance"='notInMaintenance' THEN "RAMtoVM" ELSE 0 END) as gb_provisioned
,sum("CPU_Used_AVG") as host_ghz_usage ,sum("CPU_Used_AVG") as host_ghz_usage
,(sum(CASE WHEN "Maintenance"='notInMaintenance' THEN "RAM_Total" ELSE 0 END)) as ram_in_service ,(sum(CASE WHEN "Maintenance"='notInMaintenance' THEN "RAM_Total" ELSE 0 END)) as ram_in_service
,(avg(CASE WHEN "Maintenance"='notInMaintenance' THEN "CPU_Speed" ELSE 0 END)) as ghz ,(avg(CASE WHEN "Maintenance"='notInMaintenance' THEN "CPU_Speed" ELSE 0 END)) as ghz
@@ -102,25 +104,26 @@ select
<d:field title="CPU GHz">h.ghz</d:field> <d:field title="CPU GHz">h.ghz</d:field>
<d:field title="RAM GB in service">h.ram_in_service</d:field> <d:field title="RAM GB in service">h.ram_in_service</d:field>
<d:field title="Host CPU usage %">h.cpu_usage_perc</d:field> <d:field title="Host CPU usage %">h.cpu_usage_perc</d:field>
<d:field title="Hosts in use">c.hosts</d:field> <!--- <d:field title="Hosts in use">h.hosts</d:field> --->
<d:field title="Cores Capacity">c.cores as Cores_Capacity</d:field> <d:field title="Cores Capacity">h.cores as Cores_Capacity</d:field>
<d:field title="GHz Capacity">c.ghz as GHz_Capacity</d:field> <!--- <d:field title="GHz Capacity">c.ghz as GHz_Capacity</d:field> --->
<d:field title="GHz Provisioned">h.ghz_provisioned as GHz_Provisioned</d:field><!--- за вычетом согласованных резервов --->
<d:field title="GB Provisioned">h.gb_provisioned as GB_Provisioned</d:field><!--- за вычетом согласованных резервов --->
<d:field title="VM GHz reserved">u.vm_ghz_reserved</d:field> <d:field title="VM GHz reserved">u.vm_ghz_reserved</d:field>
<d:field title="VM GHz обещанные">u.vm_ghz_promised</d:field> <d:field title="VM GHz обещанные">u.vm_ghz_promised</d:field>
<d:field title="CPU GHz provision rate %">round((u.vm_ghz_promised/c.ghz)::numeric,2)*100 as GHz_provision_rate</d:field> <d:field title="CPU GHz provision rate %">round((u.vm_ghz_promised/h.ghz_provisioned)::numeric,2)*100 as GHz_provision_rate</d:field>
<d:field title="RAM GB Capacity">c.ram as RAM_Capacity</d:field> <!--- <d:field title="RAM GB Capacity">h.ram as RAM_Capacity</d:field> --->
<d:field title="VM RAM GB alloc">u.vm_ram_alloc</d:field> <d:field title="VM RAM GB alloc">u.vm_ram_alloc</d:field>
<d:field title="VM RAM GB used">u.vm_ram_used</d:field> <d:field title="VM RAM GB used">u.vm_ram_used</d:field>
<d:field title="RAM alloc %">round((u.vm_ram_alloc/c.ram)::numeric,2)*100 as GB_alloc_perc</d:field> <d:field title="RAM alloc %">round((u.vm_ram_alloc/h.gb_provisioned)::numeric,2)*100 as GB_alloc_perc</d:field>
<d:field title="RAM usage %">round((u.vm_ram_used/c.ram)::numeric,2)*100 as GB_usage_perc</d:field> <d:field title="RAM usage %">round((u.vm_ram_used/h.gb_provisioned)::numeric,2)*100 as GB_usage_perc</d:field>
<d:field title="Пере подписка vCPU">round((u.vm_cores/c.cores)::numeric,1) as oversubscription</d:field> <d:field title="Пере подписка vCPU">round((u.vm_cores/h.cores)::numeric,1) as oversubscription</d:field>
<d:field title="VM cores">u.vm_cores</d:field> <d:field title="VM cores">u.vm_cores</d:field>
<d:field title="VM">u.vms</d:field> <d:field title="VM">u.vms</d:field>
<d:field title="VM CPU Usage %">u.vm_ghz_usage/h.ghz_in_service*100 as vm_cpu_usage_perc</d:field> <d:field title="VM CPU Usage %">u.vm_ghz_usage/h.ghz_in_service*100 as vm_cpu_usage_perc</d:field>
</d:field_set> </d:field_set>
from cluster_stat h from cluster_stat h
left outer join usage u on (h.cluster=u.cluster) left outer join usage u on (h.cluster=u.cluster)
left outer join capacity c on (h.cluster=c.cluster)
left outer join cluster_naming n on (h.cluster=n.cluster) left outer join cluster_naming n on (h.cluster=n.cluster)
where 1=1 <!--- <m:filter_build filter=#pageInfo.settings.filter#/> ---> where 1=1 <!--- <m:filter_build filter=#pageInfo.settings.filter#/> --->
order by <m:order_build sortArray=#pageInfo.settings.sort.sortArray# fieldCount=#fieldCount#/> order by <m:order_build sortArray=#pageInfo.settings.sort.sortArray# fieldCount=#fieldCount#/>
@@ -131,13 +134,12 @@ select
sum(hosts_total) as hosts_total sum(hosts_total) as hosts_total
,sum(hosts_ha) as hosts_ha ,sum(hosts_ha) as hosts_ha
,sum(hosts_in_maintenance) as hosts_in_maintenance ,sum(hosts_in_maintenance) as hosts_in_maintenance
,sum(hosts) as hosts
,sum(host_ghz_usage) as host_ghz_usage ,sum(host_ghz_usage) as host_ghz_usage
,sum(cores_in_service) as cores_in_service ,sum(cores_in_service) as cores_in_service
,sum(ghz_in_service) as ghz_in_service ,sum(ghz_in_service) as ghz_in_service
,sum(GHz_Capacity) as GHz_Capacity ,sum(ghz_provisioned) as ghz_provisioned
,sum(ram_in_service) as ram_in_service ,sum(ram_in_service) as ram_in_service
,sum(RAM_Capacity) as RAM_Capacity ,sum(gb_provisioned) as gb_provisioned
,sum(cores_in_service) as cores_in_service ,sum(cores_in_service) as cores_in_service
,sum(vm_cores) as vm_cores ,sum(vm_cores) as vm_cores
,sum(vm_ghz_usage) as vm_ghz_usage ,sum(vm_ghz_usage) as vm_ghz_usage
@@ -208,17 +210,17 @@ from qRead
<!--- <td class="r" style="font-size:120%">#numberFormat(ghz,".0")#</td> ---> <!--- <td class="r" style="font-size:120%">#numberFormat(ghz,".0")#</td> --->
<td class="r">#hosts_total#</td> <td class="r">#hosts_total#</td>
<td class="r<cfif RAM_Capacity-vm_ram_alloc LE 0> err</cfif>" style="font-size:130%">#numberFormat(RAM_Capacity-vm_ram_alloc,"0")#</td> <td class="r<cfif gb_provisioned-vm_ram_alloc LE 0> err</cfif>" style="font-size:130%">#numberFormat(gb_provisioned-vm_ram_alloc,"0")#</td>
<td class="r<cfif GHz_Capacity-vm_ghz_reserved LE 0> err</cfif>" style="font-size:130%">#numberFormat(GHz_Capacity-vm_ghz_reserved,".0")#</td> <td class="r<cfif ghz_provisioned-vm_ghz_reserved LE 0> err</cfif>" style="font-size:130%">#numberFormat(ghz_provisioned-vm_ghz_reserved,".0")#</td>
<td class="r<cfif GHz_Capacity-vm_ghz_reserved LE 0> err</cfif>" style="font-size:130%">#numberFormat((GHz_Capacity-vm_ghz_reserved)/ghz/0.2,"0")#</td> <td class="r<cfif ghz_provisioned-vm_ghz_reserved LE 0> err</cfif>" style="font-size:130%">#numberFormat((ghz_provisioned-vm_ghz_reserved)/ghz/0.2,"0")#</td>
<td class="r<cfif GHz_Capacity-vm_ghz_reserved LE 0> err</cfif>" style="font-size:130%">#numberFormat((GHz_Capacity-vm_ghz_reserved)/ghz/0.5,"0")#</td> <td class="r<cfif ghz_provisioned-vm_ghz_reserved LE 0> err</cfif>" style="font-size:130%">#numberFormat((ghz_provisioned-vm_ghz_reserved)/ghz/0.5,"0")#</td>
<td class="r<cfif GHz_Capacity-vm_ghz_reserved LE 0> err</cfif>" style="font-size:130%">#numberFormat((GHz_Capacity-vm_ghz_reserved)/ghz/0.8,"0")#</td> <td class="r<cfif ghz_provisioned-vm_ghz_reserved LE 0> err</cfif>" style="font-size:130%">#numberFormat((ghz_provisioned-vm_ghz_reserved)/ghz/0.8,"0")#</td>
<td class="r<cfif GHz_Capacity-vm_ghz_promised LE 0> err</cfif>" style="font-size:130%">#numberFormat(GHz_Capacity-vm_ghz_promised,".0")#</td> <td class="r<cfif ghz_provisioned-vm_ghz_promised LE 0> err</cfif>" style="font-size:130%">#numberFormat(ghz_provisioned-vm_ghz_promised,".0")#</td>
<td class="r<cfif GHz_Capacity-vm_ghz_promised LE 0> err</cfif>" style="font-size:130%">#numberFormat((GHz_Capacity-vm_ghz_promised)/ghz/0.2,"0")#</td> <td class="r<cfif ghz_provisioned-vm_ghz_promised LE 0> err</cfif>" style="font-size:130%">#numberFormat((ghz_provisioned-vm_ghz_promised)/ghz/0.2,"0")#</td>
<td class="r<cfif GHz_Capacity-vm_ghz_promised LE 0> err</cfif>" style="font-size:130%">#numberFormat((GHz_Capacity-vm_ghz_promised)/ghz/0.5,"0")#</td> <td class="r<cfif ghz_provisioned-vm_ghz_promised LE 0> err</cfif>" style="font-size:130%">#numberFormat((ghz_provisioned-vm_ghz_promised)/ghz/0.5,"0")#</td>
<td class="r<cfif GHz_Capacity-vm_ghz_promised LE 0> err</cfif>" style="font-size:130%">#numberFormat((GHz_Capacity-vm_ghz_promised)/ghz/0.8,"0")#</td> <td class="r<cfif ghz_provisioned-vm_ghz_promised LE 0> err</cfif>" style="font-size:130%">#numberFormat((ghz_provisioned-vm_ghz_promised)/ghz/0.8,"0")#</td>
<td class="r">#vms#</td> <td class="r">#vms#</td>
@@ -248,7 +250,6 @@ from qRead
<th width="3%"><layout:column_head name="hosts_total"/></th> <th width="3%"><layout:column_head name="hosts_total"/></th>
<th width="3%"><layout:column_head name="hosts_ha"/></th> <th width="3%"><layout:column_head name="hosts_ha"/></th>
<th width="3%"><layout:column_head name="hosts_in_maintenance"/></th> <th width="3%"><layout:column_head name="hosts_in_maintenance"/></th>
<th width="3%"><layout:column_head name="hosts"/></th>
<!--- <th width="3%"><layout:column_head name="hosts_in_service"/></th> <!--- <th width="3%"><layout:column_head name="hosts_in_service"/></th>
<th width="3%"><layout:column_head name="ram_in_service"/></th> <th width="3%"><layout:column_head name="ram_in_service"/></th>
<th width="3%"><layout:column_head name="cores_in_service"/></th> <th width="3%"><layout:column_head name="cores_in_service"/></th>
@@ -259,12 +260,12 @@ from qRead
<th width="3%"><layout:column_head name="vm_cpu_usage_perc"/></th> <th width="3%"><layout:column_head name="vm_cpu_usage_perc"/></th>
<th width="3%"><layout:column_head name="oversubscription"/></th> <th width="3%"><layout:column_head name="oversubscription"/></th>
<th width="3%"><layout:column_head name="Cores_Capacity"/></th> <th width="3%"><layout:column_head name="Cores_Capacity"/></th>
<th width="3%"><layout:column_head name="GHz_Capacity"/></th> <th width="3%"><layout:column_head name="ghz_provisioned"/></th>
<th width="3%"><layout:column_head name="vm_ghz_reserved"/></th> <th width="3%"><layout:column_head name="vm_ghz_reserved"/></th>
<th width="3%"><layout:column_head name="vm_ghz_promised"/></th> <th width="3%"><layout:column_head name="vm_ghz_promised"/></th>
<th width="3%"><layout:column_head name="vm_cores"/></th> <th width="3%"><layout:column_head name="vm_cores"/></th>
<th width="3%"><layout:column_head name="GHz_provision_rate"/></th> <th width="3%"><layout:column_head name="GHz_provision_rate"/></th>
<th width="3%"><layout:column_head name="RAM_Capacity"/></th> <th width="3%"><layout:column_head name="gb_provisioned"/></th>
<th width="3%"><layout:column_head name="vm_ram_alloc"/></th> <th width="3%"><layout:column_head name="vm_ram_alloc"/></th>
<th width="3%"><layout:column_head name="vm_ram_used"/></th> <th width="3%"><layout:column_head name="vm_ram_used"/></th>
<th width="3%"><layout:column_head name="GB_alloc_perc"/></th> <th width="3%"><layout:column_head name="GB_alloc_perc"/></th>
@@ -284,7 +285,6 @@ from qRead
<td class="r">#hosts_total#</td> <td class="r">#hosts_total#</td>
<td class="r">#hosts_ha#</td> <td class="r">#hosts_ha#</td>
<td class="r"><cfif hosts_in_maintenance NEQ 0>#hosts_in_maintenance#</cfif></td> <!--- style="background:lightcoral" ---> <td class="r"><cfif hosts_in_maintenance NEQ 0>#hosts_in_maintenance#</cfif></td> <!--- style="background:lightcoral" --->
<td class="r">#hosts#</td>
<!--- <td class="r">#hosts_in_service#</td> <!--- <td class="r">#hosts_in_service#</td>
<td class="r">#numberFormat(ram_in_service,"0")#</td> <td class="r">#numberFormat(ram_in_service,"0")#</td>
<td class="r">#cores_in_service#</td> <td class="r">#cores_in_service#</td>
@@ -295,12 +295,12 @@ from qRead
<td class="c" style="font-size:130%;">#numberFormat(vm_cpu_usage_perc,"0")#</td> <td class="c" style="font-size:130%;">#numberFormat(vm_cpu_usage_perc,"0")#</td>
<td class="r">#oversubscription#</td> <td class="r">#oversubscription#</td>
<td class="r">#Cores_Capacity#</td> <td class="r">#Cores_Capacity#</td>
<td class="r">#numberFormat(GHz_Capacity,".0")#</td> <td class="r">#numberFormat(ghz_provisioned,".0")#</td>
<td class="r">#numberFormat(vm_ghz_reserved,".0")#</td> <td class="r">#numberFormat(vm_ghz_reserved,".0")#</td>
<td class="r">#numberFormat(vm_ghz_promised,".0")#</td> <td class="r">#numberFormat(vm_ghz_promised,".0")#</td>
<td class="r">#vm_cores#</td> <td class="r">#vm_cores#</td>
<td class="r">#numberFormat(GHz_provision_rate,"0")#</td> <td class="r">#numberFormat(GHz_provision_rate,"0")#</td>
<td class="r">#numberFormat(RAM_Capacity,"0")#</td> <td class="r">#numberFormat(gb_provisioned,"0")#</td>
<td class="r">#numberFormat(vm_ram_alloc,"0")#</td> <td class="r">#numberFormat(vm_ram_alloc,"0")#</td>
<td class="r">#numberFormat(vm_ram_used,"0")#</td> <td class="r">#numberFormat(vm_ram_used,"0")#</td>
<td class="r">#numberFormat(GB_alloc_perc,"0")#</td> <td class="r">#numberFormat(GB_alloc_perc,"0")#</td>
@@ -316,7 +316,6 @@ from qRead
<td class="r">#hosts_total#</td> <td class="r">#hosts_total#</td>
<td class="r">#hosts_ha#</td> <td class="r">#hosts_ha#</td>
<td class="r">#hosts_in_maintenance#</td> <td class="r">#hosts_in_maintenance#</td>
<td class="r">#hosts#</td>
<!--- <td class="r"></td> <!--- <td class="r"></td>
<td class="r">#numberFormat(ram_in_service,"0")#</td> <td class="r">#numberFormat(ram_in_service,"0")#</td>
<td class="r">#cores_in_service#</td> <td class="r">#cores_in_service#</td>
@@ -327,12 +326,12 @@ from qRead
<td class="r"><!--- #cpu_usage_perc# ---></td> <td class="r"><!--- #cpu_usage_perc# ---></td>
<td class="r" style="font-size:130%;">#numberFormat(vm_cores/cores_in_service,".0")#</td> <td class="r" style="font-size:130%;">#numberFormat(vm_cores/cores_in_service,".0")#</td>
<td class="r"></td> <td class="r"></td>
<td class="r">#numberFormat(GHz_Capacity,".0")#</td> <td class="r">#numberFormat(ghz_provisioned,".0")#</td>
<td class="r">#numberFormat(vm_ghz_reserved,".0")#</td> <td class="r">#numberFormat(vm_ghz_reserved,".0")#</td>
<td class="r">#numberFormat(vm_ghz_promised,".0")#</td> <td class="r">#numberFormat(vm_ghz_promised,".0")#</td>
<td class="r">#vm_cores#</td> <td class="r">#vm_cores#</td>
<td class="r"></td> <td class="r"></td>
<td class="r">#numberFormat(RAM_Capacity,"0")#</td> <td class="r">#numberFormat(gb_provisioned,"0")#</td>
<td class="r">#numberFormat(vm_ram_alloc,"0")#</td> <td class="r">#numberFormat(vm_ram_alloc,"0")#</td>
<td class="r">#numberFormat(vm_ram_used,"0")#</td> <td class="r">#numberFormat(vm_ram_used,"0")#</td>
<td class="r" style="font-size:130%;">#numberFormat(vm_ram_alloc/ram_in_service*100,"0")#</td> <td class="r" style="font-size:130%;">#numberFormat(vm_ram_alloc/ram_in_service*100,"0")#</td>
+234 -131
View File
@@ -8,110 +8,212 @@
<m:prepare_ls entity="crm2cloud" settingsKey="crm2cloud" accessObject="" pageInfoOut="pageInfo" trackOut="tr"/> <m:prepare_ls entity="crm2cloud" settingsKey="crm2cloud" accessObject="" pageInfoOut="pageInfo" trackOut="tr"/>
<!--- *** нуждается в оптимизации, чтобы фильтр по контрагенту ускорял селект ---> <!--- *** нуждается в оптимизации, чтобы фильтр по контрагенту ускорял селект --->
<cfquery name="qRead" cachedWithin=#createTimeSpan(0, 0, 25, 0)#> <cfquery name="qRead" cachedWithin=#createTimeSpan(0, 0, 25, 0)#>
WITH WITH
status(status, status_id, probability_pc) as (VALUES status(status, status_id, probability_pc) as
('Закрыта неуспешно',7,0),('Закрыта успешно',6,100),('Договор подписан',5,100),('Договор на подписании',15,90),('Договор на согласовании',12,70), (
('Тестирование',8,50),('Отправлено ТКП',10,20),('Внутреннее согласование',37,10),('Проработка решения',4,10),('Сбор потребностей',1,0) VALUES
), ('Закрыта неуспешно',7,0) ,
line as ( ('Закрыта успешно',6,100) ,
SELECT siv.__id as siv_uid, siv.discount, siv.type as line_pricing_model_id ('Договор подписан',5,100) ,
,siv.hash as line_key, siv.is_actual as siv_is_actual ('Договор на подписании',15,90) ,
,siv.version::numeric as line_version ('Договор на согласовании',12,70),
,d.__index as deal_index ('Тестирование',8,50) ,
,d._companies ('Отправлено ТКП',10,20) ,
,a.index as agreement_version ('Внутреннее согласование',37,10),
,siv.date_nop::date as dt_from ('Проработка решения',4,10) ,
,siv.date_end::date as dt_to ('Сбор потребностей',1,0)
,siv.is_easy as is_simple ),
,siv.cnt -- should mutiliply line_expanded as
,s.probability_pc (
,a.__id as agreement_uid, a.contract_uid, a.is_actual as agreement_is_actual, a.deal_uid SELECT
,d.__name as deal, d.__status_status as deal_status_id siv.__id as siv_uid ,
--,c.__name as contract siv.discount ,
,siv.user_description siv.type as line_pricing_model_id ,
,siv.params siv.hash as line_key ,
--,(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 siv.is_actual as siv_is_actual ,
FROM elma.deals_services siv siv.version::numeric as line_version ,
JOIN elma.deals d on (d.__id = ANY(siv.deal)) d.__index as deal_index ,
JOIN status s on (d.__status_status=s.status_id) d._companies ,
LEFT OUTER JOIN elma.additional_agreements a on (a.__id = ANY(siv.additional_agreement)) a.index as agreement_version ,
WHERE siv.is_actual AND siv."__deletedAt" IS NULL AND d."__deletedAt" IS NULL AND a."__deletedAt" IS NULL siv.date_nop::date as dt_from ,
AND a.is_actual siv.date_end::date as dt_to ,
AND siv.type IN (2,3) siv.is_easy as is_simple ,
), siv.cnt ,
component as ( s.probability_pc ,
SELECT a.__id as agreement_uid ,
price*cnt*(100.0-COALESCE(discount,0))/100.0 as cost a.contract_uid ,
,price a.is_actual as agreement_is_actual ,
,cnt a.deal_uid ,
,code d.__name as deal ,
,__id d.__status_status as deal_status_id ,
FROM elma.service_parametrs siv.user_description ,
where "__deletedAt" IS NULL unnest(siv.params) as param_id
), FROM
stair as ( -- рабочая лесенка (инстансы строк, имеющие нетривиальную вероятность) elma.deals_services siv
select * FROM ( JOIN elma.deals d on (d.__id = ANY(siv.deal))
SELECT *, JOIN status s on (d.__status_status=s.status_id)
MIN(dt_from) OVER (PARTITION BY line_key ORDER BY deal_index desc) running_min_dt LEFT JOIN elma.additional_agreements a on (a.__id = ANY(siv.additional_agreement))
FROM line WHERE probability_pc > 0 WHERE
) t siv.is_actual
WHERE t.dt_from = t.running_min_dt AND siv."__deletedAt" IS NULL
AND t.dt_to > CURRENT_TIMESTAMP OR t.dt_to IS NULL and d."__deletedAt" IS NULL
), and a."__deletedAt" IS NULL
alloc as (select c."WZ" as wz and a.is_actual
, round(sum(c."VM_RAM_Allocated")) as ram and siv.type IN (2,3)
, 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 component as
, round(sum(CASE WHEN "VM_is_ON" > 0 THEN c."VM_vCPU_count" ELSE 0 END)) as cpu_on (
from vmreports.compute c SELECT
where ts=(select max(ts) from vmreports.compute) price*cnt*(100.0-COALESCE(discount,0))/100.0 as cost ,
group by c."WZ" price ,
), cnt ,
disk_alloc as (select c."WZ" as wz code ,
, round(sum(c."Disk_Allocated")) as disk_alloc __id
from vmreports.storage c FROM
where ts=(select max(ts) from vmreports.storage) elma.service_parametrs
group by c."WZ" where
), "__deletedAt" IS NULL
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 stair as
,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*/ select
FROM stair o *
JOIN elma.companies z on (o._companies=z.__id) FROM
LEFT OUTER 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 SELECT
GROUP BY z.id_klienta, z.__id, z.__name *,
), MIN(dt_from) OVER (PARTITION BY line_key ORDER BY deal_index desc) running_min_dt
sold_cpu as (SELECT FROM
z.id_klienta as WZ, z.__name as client, z.__id as company_uid, round(sum(c.cnt*o.cnt)) as quantity line_expanded
,count(*) as lines, STRING_AGG(c.code,', ') as codes --line
/*,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*/ WHERE
FROM stair o probability_pc > 0
JOIN elma.companies z on (o._companies=z.__id) ) t
LEFT OUTER JOIN component c on (c.__id = ANY (o.params)) WHERE
WHERE c.code SIMILAR TO 'iaas.(ngc|dcp).%.vcpu%-_' AND c.cnt <> 0 AND o.cnt <> 0 t.dt_from = t.running_min_dt
GROUP BY z.id_klienta, z.__id, z.__name AND t.dt_to > CURRENT_TIMESTAMP
), OR t.dt_to IS NULL
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 alloc as
,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*/ select
FROM stair o c."WZ" as wz ,
JOIN elma.companies z on (o._companies=z.__id) round(sum(c."VM_RAM_Allocated")) as ram ,
LEFT OUTER JOIN component c on (c.__id = ANY (o.params)) round(sum(CASE WHEN "VM_is_ON" > 0 THEN c."VM_RAM_Allocated" ELSE 0 END)) as ram_on ,
WHERE c.code SIMILAR TO 'iaas.(ngc|dcp).%.(ssd|fstssd|sata)-_' AND c.cnt <> 0 AND o.cnt <> 0 round(sum(c."VM_vCPU_count")) as cpu ,
GROUP BY z.id_klienta, z.__id, z.__name round(sum(CASE WHEN "VM_is_ON" > 0 then c."VM_vCPU_count" ELSE 0 END)) as cpu_on
), from
deal_stat as ( vmreports.compute c
select where
STRING_AGG(distinct deal_status_id::text,', ') as status_ids ts= (select max(ts) from vmreports.compute)
,STRING_AGG(distinct line_pricing_model_id::text,', ') as line_pricing_model_ids group by c."WZ"
,z.id_klienta as WZ ),
from line o join elma.companies z on (o._companies=z.__id) disk_alloc as
GROUP BY z.id_klienta (
) 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(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,
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
)
select select
<d:field_set titleMapOut="titleMap" lengthOut="fieldCount"> <d:field_set titleMapOut="titleMap" lengthOut="fieldCount">
@@ -134,6 +236,7 @@ select
<d:field title="Диски Cloud">da.disk_alloc</d:field> <d:field title="Диски Cloud">da.disk_alloc</d:field>
<d:field>z.__name as alloc_company</d:field> <d:field>z.__name as alloc_company</d:field>
<d:field>z.__id as alloc_company_uid</d:field> <d:field>z.__id as alloc_company_uid</d:field>
<d:field>ds.ar_status_ids</d:field>
</d:field_set> </d:field_set>
from sold_ram r from sold_ram r
join deal_stat ds on (lower(r.wz)=lower(ds.wz)) join deal_stat ds on (lower(r.wz)=lower(ds.wz))
@@ -147,7 +250,7 @@ order by <m:order_build sortArray=#pageInfo.settings.sort.sortArray# fieldCount=
</cfquery> </cfquery>
<!--- <cfdump var=#qRead#> --->
<cfif isDefined("output_xls")> <cfif isDefined("output_xls")>
@@ -222,8 +325,6 @@ S3 операции и трафик: <b>#dateFormat(qS3OpsTrfAge.dt_load,'YYYY-M
<cfflush/> <cfflush/>
<cfoutput query="qRead"> <cfoutput query="qRead">
<tr> <tr>
<td>#wz_sold#</td> <td>#wz_sold#</td>
<td> <td>
@@ -251,39 +352,41 @@ S3 операции и трафик: <b>#dateFormat(qS3OpsTrfAge.dt_load,'YYYY-M
<td class="r"<cfif disk_sold GT disk_alloc> style="background:lightgreen;"</cfif>>#disk_sold#</td> <td class="r"<cfif disk_sold GT disk_alloc> style="background:lightgreen;"</cfif>>#disk_sold#</td>
<td class="r"<cfif disk_sold LT disk_alloc> style="background:lightcoral;"</cfif>>#disk_alloc#</td> <td class="r"<cfif disk_sold LT disk_alloc> style="background:lightcoral;"</cfif>>#disk_alloc#</td>
</tr> </tr>
</cfoutput>
<cfquery name="qTotal" dbtype="query">
select
sum(cpu_sold) as cpu_sold
,sum(cpu_alloc) as cpu_alloc
,sum(cpu_alloc_on) as cpu_alloc_on
,sum(ram_sold) as ram_sold
,sum(ram_alloc) as ram_alloc
,sum(ram_alloc_on) as ram_alloc_on
,sum(disk_sold) as disk_sold
,sum(disk_alloc) as disk_alloc
from qRead
</cfquery>
<!--- <cfoutput query="qTotal">
<td class="r" style="font-size:120%; padding:0 1em;">#chargeable_metric#</td> <tr class="b r">
<td class="c" style="font-size:90%;">#ed_izm#</td>
<td class="r">#discounted_price#</td> <td colspan="6">Итого</td>
<td class="r">#charge#</td>
<td class="r"<cfif cpu_sold GT ram_alloc> style="background:lightgreen;"</cfif>>#cpu_sold#</td>
<td class="r"<cfif cpu_sold LT cpu_alloc> style="background:lightcoral;"</cfif>>#cpu_alloc#</td>
<td class="r"<cfif cpu_sold LT cpu_alloc_on> style="background:lightcoral;"</cfif>>#cpu_alloc_on#</td>
<td></td> <td></td>
<td class="r"<cfif ram_sold GT ram_alloc> style="background:lightgreen;"</cfif>>#ram_sold#</td>
<td class="r"<cfif ram_sold LT ram_alloc> style="background:lightcoral;"</cfif>>#ram_alloc#</td>
<td class="r"<cfif ram_sold LT ram_alloc_on> style="background:lightcoral;"</cfif>>#ram_alloc_on#</td>
<td>#abstract_service# #modifier#</td> <td></td>
<td>#component#</td> <td class="r"<cfif disk_sold GT disk_alloc> style="background:lightgreen;"</cfif>>#disk_sold#</td>
<td>#user_description#</td> <td class="r"<cfif disk_sold LT disk_alloc> style="background:lightcoral;"</cfif>>#disk_alloc#</td>
</tr>
<td class="r">#price#</td>
<td class="r">#discount#</td>
<td class="r">#dateFormat(dt_from,'YYYY-MM-DD')#</td>
<td class="r">#dateFormat(dt_to,'YYYY-MM-DD')#</td>
<td class="r">#line_key#</td>
<td class="r" style="color:##bbb">#raw_metric#</td>
<td class="r">#metric#</td>
<td><a href="contract.cfm?__id=#contract_uid#&#tr.fwx#">#contract#</a></td>
<td><a href="additional_agreement.cfm?__id=#additional_agreement_uid#&#tr.fwx#">#additional_agreement#</a></td>
<td><a href="deal.cfm?__id=#deal_uid#&#tr.fwx#">#deal#</a></td>
</tr> --->
</cfoutput> </cfoutput>
</table> </table>
<!--- <cfdump var=#qCharge#/> --->
<layout:page section="footer"/> <layout:page section="footer"/>
+44
View File
@@ -11,6 +11,10 @@
<m:filterparam filter=#filter# param="contragent_id" ftype="guid" compare="EQ" field="z.__id" default=""/> <m:filterparam filter=#filter# param="contragent_id" ftype="guid" compare="EQ" field="z.__id" default=""/>
<m:filterparam filter=#filter# param="contragent" ftype="string" compare="LIKE%" field="z.__name" default=""/> <m:filterparam filter=#filter# param="contragent" ftype="string" compare="LIKE%" field="z.__name" default=""/>
<m:filterparam filter=#filter# param="wz" ftype="string" compare="LIKE%" field="z.id_klienta" default=""/> <m:filterparam filter=#filter# param="wz" ftype="string" compare="LIKE%" field="z.id_klienta" default=""/>
<m:filterparam filter=#filter# param="code" ftype="string" expression="(r.codes like ? OR r.codes like ? OR d.codes like ?)" suffix="%" prefix="%" default=""/>
<!--- <m:filterparam filter=#filter# param="status_id" ftype="numeric" expression="ds.ar_status_ids = ?" suffix="" prefix="" default=""/> --->
<m:filterparam filter=#filter# param="status_id" ftype="numeric" expression="(?=ANY(ds.ar_status_ids))" suffix="" prefix="" default=""/>
<m:filterparam filter=#filter# param="line_pricing_model_id" ftype="numeric" expression="(?=ANY(ds.ar_line_pricing_model_id))" suffix="" prefix="" default=""/>
</m:filter_settings> </m:filter_settings>
<cfif isDefined("resetAndClose") or isDefined("saveAndClose")> <cfif isDefined("resetAndClose") or isDefined("saveAndClose")>
@@ -42,6 +46,46 @@ $(document).ready(function() {
</div> </div>
</div> </div>
<div class="tr">
<div class="th">Код артикула</div>
<div class="td">
<input type="text" name="code" value="#code#" size="50"/>
<i>#i18("по вхождению подстроки в любой из списков кодов","by substring")#</i>
</div>
</div>
<div class="tr">
<div class="th">Статус</div>
<div class="td">
<select name="status_id">
<option></option>
<option value="1"<cfif status_id EQ 1> selected</cfif>>Сбор потребностей</option>
<option value="4"<cfif status_id EQ 4> selected</cfif>>Проработка решения</option>
<option value="5"<cfif status_id EQ 5> selected</cfif>>Договор подписан</option>
<option value=6""<cfif status_id EQ 6> selected</cfif>>Закрыта успешно</option>
<option value="7"<cfif status_id EQ 7> selected</cfif>>Закрыта неуспешно</option>
<option value="8"<cfif status_id EQ 8> selected</cfif>>Тестирование</option>
<option value="10"<cfif status_id EQ 10> selected</cfif>>Отправлено ТКП</option>
<option value="12"<cfif status_id EQ 12> selected</cfif>>Договор на согласовании</option>
<option value="15"<cfif status_id EQ 15> selected</cfif>>Договор на подписании</option>
<option value="37"<cfif status_id EQ 37> selected</cfif>>Внутреннее согласование</option>
</select>
<i>по вхождению в список</i>
</div>
</div>
<div class="tr">
<div class="th">Модель оплаты</div>
<div class="td">
<select name="line_pricing_model_id">
<option></option>
<option value="1"<cfif line_pricing_model_id EQ 1> selected</cfif>>1 install</option>
<option value=3""<cfif line_pricing_model_id EQ 2> selected</cfif>>2 fix</option>
<option value="3"<cfif line_pricing_model_id EQ 3> selected</cfif>>3 metered</option>
</select>
<i>по вхождению в список</i>
</div>
</div>
<div class="tr"> <div class="tr">
<div class="th">Контрагент</div> <div class="th">Контрагент</div>