070 tests
This commit is contained in:
+1
-1
@@ -87,7 +87,7 @@
|
|||||||
<!--- global settings --->
|
<!--- global settings --->
|
||||||
|
|
||||||
<cfset request.RECORDS_PER_PAGE=500/>
|
<cfset request.RECORDS_PER_PAGE=500/>
|
||||||
<cfset request.APP_VERSION="0.00.068"/>
|
<cfset request.APP_VERSION="0.00.070"/>
|
||||||
<cfset request.STAND=getStand()/>
|
<cfset request.STAND=getStand()/>
|
||||||
|
|
||||||
<cflock scope="application" type="readonly" timeout=3>
|
<cflock scope="application" type="readonly" timeout=3>
|
||||||
|
|||||||
+1
-10
@@ -19,26 +19,17 @@
|
|||||||
|
|
||||||
<c:menu_item acl="" page="vm_ls.cfm" label="VM"/>
|
<c:menu_item acl="" page="vm_ls.cfm" label="VM"/>
|
||||||
|
|
||||||
<!---
|
|
||||||
<c:menu_item acl="" page="specification_ls.cfm" label="Спецификации"/>
|
|
||||||
<c:menu_item acl="" page="agreement_ls.cfm" label="Сделки"/>
|
|
||||||
<c:menu_item acl="" page="specification_item_ls.cfm" label="Экземпляры услуг"/>--->
|
|
||||||
<li class="menu-title">Отчеты</li>
|
<li class="menu-title">Отчеты</li>
|
||||||
<c:menu_item acl="" page="crm2cloud.cfm" label="CRM - Cloud"/>
|
<c:menu_item acl="" page="crm2cloud.cfm" label="CRM - Cloud"/>
|
||||||
<c:menu_item acl="" page="cloud_capacity.cfm" label="Cloud Capacity"/>
|
<c:menu_item acl="" page="cloud_capacity.cfm" label="Cloud Capacity"/>
|
||||||
<c:menu_item acl="" page="payg.cfm" label="PAYG"/>
|
<c:menu_item acl="" page="payg.cfm" label="PAYG"/>
|
||||||
<!--- <c:menu_item acl="" page="detail_daily_rpt.cfm" label="Детализация по дням"/>
|
<c:menu_item acl="" page="test_storage_rpt.cfm" label="Тесты и хранение"/>
|
||||||
<c:menu_item acl="" page="income_daily_rpt.cfm" label="Выручка по дням"/>
|
|
||||||
<c:menu_item acl="" page="income_monthly_rpt.cfm" label="Выручка по месяцам"/> --->
|
|
||||||
|
|
||||||
<li class="menu-title">Справочники</li>
|
<li class="menu-title">Справочники</li>
|
||||||
|
|
||||||
<!--- <c:menu_item acl="" page="svc_ls.cfm" label="Сервисы"/> --->
|
<!--- <c:menu_item acl="" page="svc_ls.cfm" label="Сервисы"/> --->
|
||||||
<c:menu_item acl="" page="contragent_ls.cfm" label="Контрагенты"/>
|
<c:menu_item acl="" page="contragent_ls.cfm" label="Контрагенты"/>
|
||||||
<!--- <c:menu_item acl="" page="measure_ls.cfm" label="Единицы измерения"/>
|
|
||||||
|
|
||||||
<c:menu_item acl="" page="usr_ls.cfm" label="Пользователи"/>
|
|
||||||
--->
|
|
||||||
<!--- <li class="menu-title">Пользователь</li>
|
<!--- <li class="menu-title">Пользователь</li>
|
||||||
|
|
||||||
<cfif request.usrAuthenticated()>
|
<cfif request.usrAuthenticated()>
|
||||||
|
|||||||
@@ -46,9 +46,13 @@
|
|||||||
<!--- нужны компании, которые есть в пейге --->
|
<!--- нужны компании, которые есть в пейге --->
|
||||||
|
|
||||||
<cfquery name="qSpec" datasource="dwh" cachedWithin=#createTimeSpan(0, 0, 25, 0)#>
|
<cfquery name="qSpec" datasource="dwh" cachedWithin=#createTimeSpan(0, 0, 25, 0)#>
|
||||||
select k.id_klienta as wz, k.__id::text as contragent_uid, p.code, p.price, p.discount, k.__name as contragent, a.__name as contract, a.__id::text as contract_uid, d.__name as deal, d.__id::text as deal_uid, siv.abstractive_service as abstract_service, siv.modifier, siv.user_description, siv.hash as line_key
|
select k.id_klienta as wz, k.__id::text as contragent_uid,
|
||||||
|
p.code,
|
||||||
|
SUBSTRING(p.code FROM 1 FOR LENGTH(p.code) - 2) as service_code,
|
||||||
|
p.price, p.discount, k.__name as contragent, a.__name as contract, a.__id::text as contract_uid, d.__name as deal, d.__id::text as deal_uid, siv.abstractive_service as abstract_service, siv.modifier, siv.user_description, siv.hash as line_key
|
||||||
,siv.date_nop as dt_from, siv.date_end as dt_to, siv.discount as service_discount, siv.cnt as service_quantity
|
,siv.date_nop as dt_from, siv.date_end as dt_to, siv.discount as service_discount, siv.cnt as service_quantity
|
||||||
/*,p.__name as line_key*/, p.ed_izm, p.name as component, p.type, aa.__name as additional_agreement, aa.__id::text as additional_agreement_uid
|
/*,p.__name as line_key*/, p.ed_izm, p.name as component, p.type, p.cnt*coalesce(siv.cnt,1) as component_quantity,
|
||||||
|
aa.__name as additional_agreement, aa.__id::text as additional_agreement_uid
|
||||||
--, aa.is_actual
|
--, aa.is_actual
|
||||||
,siv.end_customer as end_customer_uid
|
,siv.end_customer as end_customer_uid
|
||||||
,z.id_klienta as end_customer_wz
|
,z.id_klienta as end_customer_wz
|
||||||
@@ -63,6 +67,8 @@
|
|||||||
where p.type IN (2,3) AND aa.is_actual
|
where p.type IN (2,3) AND aa.is_actual
|
||||||
AND siv.date_nop < <cfqueryparam cfsqltype="cf_sql_timestamp" value=#dt_finish#/>
|
AND siv.date_nop < <cfqueryparam cfsqltype="cf_sql_timestamp" value=#dt_finish#/>
|
||||||
AND (siv.date_end > <cfqueryparam cfsqltype="cf_sql_timestamp" value=#dt_start#/> OR siv.date_end IS NULL)/*****/
|
AND (siv.date_end > <cfqueryparam cfsqltype="cf_sql_timestamp" value=#dt_start#/> OR siv.date_end IS NULL)/*****/
|
||||||
|
--AND k.id_klienta='WZ01031'
|
||||||
|
--AND k.id_klienta='WZ01112'
|
||||||
order by k.id_klienta, p.code
|
order by k.id_klienta, p.code
|
||||||
</cfquery>
|
</cfquery>
|
||||||
<!--- здесь имеем список кодов с ценами и WZ. Каждому коду можно поставить в соответствие запрос, который даст по нему выборку. Изредка один запрос может вывести 2 кода, но разбить на 2 запроса легко. Кроме того, запросы можно объединить через union в один - может быть, так будет лучше читаться (быстрее выполняться не будет) --->
|
<!--- здесь имеем список кодов с ценами и WZ. Каждому коду можно поставить в соответствие запрос, который даст по нему выборку. Изредка один запрос может вывести 2 кода, но разбить на 2 запроса легко. Кроме того, запросы можно объединить через union в один - может быть, так будет лучше читаться (быстрее выполняться не будет) --->
|
||||||
@@ -80,7 +86,7 @@
|
|||||||
|
|
||||||
|
|
||||||
<cfquery name="qComputing" datasource="billing-vc" cachedWithin=#createTimeSpan(0, 0, 25, 0)#>
|
<cfquery name="qComputing" datasource="billing-vc" cachedWithin=#createTimeSpan(0, 0, 25, 0)#>
|
||||||
select m.clientid as wz, vdc.name as vdc_name,
|
select m.clientid as wz, vdc.name as vdc,
|
||||||
case
|
case
|
||||||
WHEN vdc.name LIKE '%-v1cl1%' THEN 'iaas.ngc.i29'
|
WHEN vdc.name LIKE '%-v1cl1%' THEN 'iaas.ngc.i29'
|
||||||
WHEN vdc.name LIKE '%-v1cl2%' THEN 'iaas.ngc.i31'
|
WHEN vdc.name LIKE '%-v1cl2%' THEN 'iaas.ngc.i31'
|
||||||
@@ -123,7 +129,7 @@
|
|||||||
|
|
||||||
<!--- переделать storage_profile_types с расшифровкой ssd, sata, можно прямо до каталожного кода --->
|
<!--- переделать storage_profile_types с расшифровкой ssd, sata, можно прямо до каталожного кода --->
|
||||||
<cfquery name="qStorage" datasource="billing-vc" cachedWithin=#createTimeSpan(0, 0, 25, 0)#>
|
<cfquery name="qStorage" datasource="billing-vc" cachedWithin=#createTimeSpan(0, 0, 25, 0)#>
|
||||||
select m.clientid as wz, vdc.name as vdc_name,
|
select m.clientid as wz, vdc.name as vdc,
|
||||||
case
|
case
|
||||||
WHEN vdc.name LIKE '%-v1cl1%' THEN 'iaas.ngc.i29'
|
WHEN vdc.name LIKE '%-v1cl1%' THEN 'iaas.ngc.i29'
|
||||||
WHEN vdc.name LIKE '%-v1cl2%' THEN 'iaas.ngc.i31'
|
WHEN vdc.name LIKE '%-v1cl2%' THEN 'iaas.ngc.i31'
|
||||||
@@ -133,13 +139,13 @@
|
|||||||
WHEN vdc.name LIKE '%-v1cl7%' THEN 'iaas.ngc.a40' -- *** смапить все кластера
|
WHEN vdc.name LIKE '%-v1cl7%' THEN 'iaas.ngc.a40' -- *** смапить все кластера
|
||||||
ELSE '['||vdc.name||']' END
|
ELSE '['||vdc.name||']' END
|
||||||
|| CASE
|
|| CASE
|
||||||
WHEN storage_profile_types.name ILIKE '%FASTSSD%' THEN '.fstssd-m'
|
WHEN storage_profile_types.name ILIKE '%FASTSSD%' THEN '.fstssd'
|
||||||
WHEN storage_profile_types.name ILIKE '%SSD%' THEN '.ssd-m'
|
WHEN storage_profile_types.name ILIKE '%SSD%' THEN '.ssd'
|
||||||
WHEN storage_profile_types.name ILIKE '%SAS%' THEN '.sas-m'
|
WHEN storage_profile_types.name ILIKE '%SAS%' THEN '.sas'
|
||||||
WHEN storage_profile_types.name ILIKE '%SATA%' THEN '.sata-m'
|
WHEN storage_profile_types.name ILIKE '%SATA%' THEN '.sata'
|
||||||
ELSE '.['|| storage_profile_types.name ||']' END
|
ELSE '.['|| storage_profile_types.name ||']' END
|
||||||
as code,
|
as code,
|
||||||
storage_profile_types.name, -- *** это не тип, а профайл
|
storage_profile_types.name as profile,
|
||||||
sum("limit")/1024./4./720. as gb_m_limit, -- 4 потому, что сбор раз в 15 минут
|
sum("limit")/1024./4./720. as gb_m_limit, -- 4 потому, что сбор раз в 15 минут
|
||||||
sum(used)/1024./4./720. as gb_m_used -- 720 это количество часов в условном месяце
|
sum(used)/1024./4./720. as gb_m_used -- 720 это количество часов в условном месяце
|
||||||
from ngcloud_ru.capacity_storage
|
from ngcloud_ru.capacity_storage
|
||||||
@@ -190,15 +196,15 @@ HOT_FREE_LIMIT 1 10 1 100
|
|||||||
else '['|| TO_CHAR(bucket_stat.placement_id,'FM9') ||']' end as code
|
else '['|| TO_CHAR(bucket_stat.placement_id,'FM9') ||']' end as code
|
||||||
,bucket_stat.placement_id
|
,bucket_stat.placement_id
|
||||||
,'WZ'||lpad(bucket_stat.owner, 5, '0') as wz -- *** здесь не число, а строка, поэтому другая формула обратной сборки WZ
|
,'WZ'||lpad(bucket_stat.owner, 5, '0') as wz -- *** здесь не число, а строка, поэтому другая формула обратной сборки WZ
|
||||||
|
,bucket_info.name as bucket
|
||||||
from s3billing.bucket_stat
|
from s3billing.bucket_stat
|
||||||
join s3billing.placement ON s3billing.placement.id=bucket_stat.placement_id
|
join s3billing.placement ON s3billing.placement.id=bucket_stat.placement_id
|
||||||
join s3billing.bucket_info ON bucket_info.id=bucket_stat.bucket_id
|
join s3billing.bucket_info ON bucket_info.id=bucket_stat.bucket_id
|
||||||
where bucket_stat.placement_id in (1,2)
|
where bucket_stat.placement_id in (1,2)
|
||||||
AND bucket_stat.timestamp_addition >= <cfqueryparam cfsqltype="cf_sql_timestamp" value=#dt_start#/>
|
AND bucket_stat.timestamp_addition >= <cfqueryparam cfsqltype="cf_sql_timestamp" value=#dt_start#/>
|
||||||
AND bucket_stat.timestamp_addition < <cfqueryparam cfsqltype="cf_sql_timestamp" value=#dateAdd("d",1,dt_finish)#/>
|
AND bucket_stat.timestamp_addition < <cfqueryparam cfsqltype="cf_sql_timestamp" value=#dateAdd("d",1,dt_finish)#/>
|
||||||
group by bucket_stat.owner, bucket_stat.placement_id
|
group by bucket_stat.owner, bucket_stat.placement_id, bucket_info.name
|
||||||
order by bucket_stat.owner, bucket_stat.placement_id;
|
order by bucket_stat.owner, bucket_stat.placement_id, bucket_info.name;
|
||||||
</cfquery>
|
</cfquery>
|
||||||
|
|
||||||
<cfoutput>qS3Vol:#getTickCount()-request.startTickCount#</cfoutput><cfif !isDefined("output_xls") AND !isDefined("output_json")><cfflush/></cfif>
|
<cfoutput>qS3Vol:#getTickCount()-request.startTickCount#</cfoutput><cfif !isDefined("output_xls") AND !isDefined("output_json")><cfflush/></cfif>
|
||||||
@@ -275,7 +281,8 @@ select
|
|||||||
when bucket_info.placement_id = 2 then 'paas.s3.cphc'
|
when bucket_info.placement_id = 2 then 'paas.s3.cphc'
|
||||||
else '['|| TO_CHAR(bucket_info.placement_id,'FM9') ||']' end as code --*** зачем делать там ключ bigint
|
else '['|| TO_CHAR(bucket_info.placement_id,'FM9') ||']' end as code --*** зачем делать там ключ bigint
|
||||||
,bucket_info.placement_id
|
,bucket_info.placement_id
|
||||||
--category.name, bucket_info.name
|
--category.name
|
||||||
|
, bucket_info.name as bucket
|
||||||
,'WZ'||lpad(user_info.name, 5, '0') as wz
|
,'WZ'||lpad(user_info.name, 5, '0') as wz
|
||||||
from s3billing.usage_bucket_by_user
|
from s3billing.usage_bucket_by_user
|
||||||
join s3billing.user_info on usage_bucket_by_user.user_id=user_info.id
|
join s3billing.user_info on usage_bucket_by_user.user_id=user_info.id
|
||||||
@@ -285,8 +292,8 @@ select
|
|||||||
where 1=1
|
where 1=1
|
||||||
AND usage_bucket_by_user.time >= <cfqueryparam cfsqltype="cf_sql_timestamp" value=#dt_start#/>
|
AND usage_bucket_by_user.time >= <cfqueryparam cfsqltype="cf_sql_timestamp" value=#dt_start#/>
|
||||||
AND usage_bucket_by_user.time < <cfqueryparam cfsqltype="cf_sql_timestamp" value=#dateAdd("d",1,dt_finish)#/>
|
AND usage_bucket_by_user.time < <cfqueryparam cfsqltype="cf_sql_timestamp" value=#dateAdd("d",1,dt_finish)#/>
|
||||||
group by user_info.name, bucket_info.placement_id
|
group by user_info.name, bucket_info.placement_id, bucket_info.name
|
||||||
order by user_info.name, bucket_info.placement_id;
|
order by user_info.name, bucket_info.placement_id, bucket_info.name;
|
||||||
</cfquery>
|
</cfquery>
|
||||||
|
|
||||||
<cfoutput>qS3OpsTrf:#getTickCount()-request.startTickCount#</cfoutput><cfif !isDefined("output_xls") AND !isDefined("output_json")><cfflush/></cfif>
|
<cfoutput>qS3OpsTrf:#getTickCount()-request.startTickCount#</cfoutput><cfif !isDefined("output_xls") AND !isDefined("output_json")><cfflush/></cfif>
|
||||||
@@ -304,36 +311,37 @@ select
|
|||||||
|
|
||||||
|
|
||||||
<cfquery name="qUnifiedMetric" dbType="query">
|
<cfquery name="qUnifiedMetric" dbType="query">
|
||||||
select wz, code || '.vcpu-m' as code, core_h as raw_metric, core_h as metric, core_h as chargeable_metric, 'core-h' as unit
|
select wz, code || '.vcpu' as code, core_h as raw_metric, core_h as metric, core_h as chargeable_metric, 'core-h' as unit, vdc as dimension1
|
||||||
from qComputing
|
from qComputing
|
||||||
|
|
||||||
union all
|
union all
|
||||||
select wz, code || '.ram-m', gb_h as raw_metric, gb_h as metric, gb_h as chargeable_metric, 'GByte-h' as unit
|
select wz, code || '.ram', gb_h as raw_metric, gb_h as metric, gb_h as chargeable_metric, 'GByte-h' as unit, vdc as dimension1
|
||||||
from qComputing
|
from qComputing
|
||||||
|
|
||||||
union all
|
union all
|
||||||
select wz, code, gb_m_used as raw_metric, gb_m_used as metric, gb_m_used as chargeable_metric, 'GByte-m' as unit
|
select wz, code, gb_m_used as raw_metric, gb_m_used as metric, gb_m_used as chargeable_metric, 'GByte-m' as unit, vdc ||':'|| profile as dimension1
|
||||||
from qStorage
|
from qStorage
|
||||||
|
|
||||||
union all
|
union all
|
||||||
select wz, code || '.vol-m', vol_b as raw_metric, vol_gb as metric, vol_GB_free_tier_subtracted as chargeable_metric, 'GByte-m' as unit
|
select wz, code || '.vol', vol_b as raw_metric, vol_gb as metric, vol_GB_free_tier_subtracted as chargeable_metric, 'GByte-m' as unit, bucket as dimension1
|
||||||
from qS3Vol
|
from qS3Vol
|
||||||
|
|
||||||
union all
|
union all
|
||||||
select wz, code || '.get-m', get as raw_metric, get_10k as metric, get_10k_free_tier_subtracted as chargeable_metric, '10k' as unit
|
select wz, code || '.get', get as raw_metric, get_10k as metric, get_10k_free_tier_subtracted as chargeable_metric, '10k' as unit, bucket as dimension1
|
||||||
from qS3OpsTrf
|
from qS3OpsTrf
|
||||||
|
|
||||||
union all
|
union all
|
||||||
select wz, code || '.put-m', put as raw_metric, put_10k as metric, put_10k_free_tier_subtracted as chargeable_metric, '10k' as unit
|
select wz, code || '.put', put as raw_metric, put_10k as metric, put_10k_free_tier_subtracted as chargeable_metric, '10k' as unit, bucket as dimension1
|
||||||
from qS3OpsTrf
|
from qS3OpsTrf
|
||||||
|
|
||||||
union all
|
union all
|
||||||
select wz, code || '.trf-m', bytes_sent as raw_metric, bytes_sent_gb as metric, bytes_sent_gb_free_tier_subtracted as chargeable_metric, 'GByte' as unit
|
select wz, code || '.trf', bytes_sent as raw_metric, bytes_sent_gb as metric, bytes_sent_gb_free_tier_subtracted as chargeable_metric, 'GByte' as unit, bucket as dimension1
|
||||||
from qS3OpsTrf
|
from qS3OpsTrf
|
||||||
|
|
||||||
order by wz, code
|
order by wz, code
|
||||||
</cfquery>
|
</cfquery>
|
||||||
|
<!--- <cfdump var=#qSpec#/>
|
||||||
|
<cfdump var=#qUnifiedMetric#/> --->
|
||||||
|
|
||||||
<cfoutput>qUnifiedMetric:#getTickCount()-request.startTickCount#</cfoutput><cfif !isDefined("output_xls") AND !isDefined("output_json")><cfflush/></cfif>
|
<cfoutput>qUnifiedMetric:#getTickCount()-request.startTickCount#</cfoutput><cfif !isDefined("output_xls") AND !isDefined("output_json")><cfflush/></cfif>
|
||||||
|
|
||||||
@@ -353,23 +361,33 @@ order by wz, code
|
|||||||
SELECT
|
SELECT
|
||||||
<d:field_set titleMapOut="titleMap" lengthOut="fieldCount">
|
<d:field_set titleMapOut="titleMap" lengthOut="fieldCount">
|
||||||
<d:field title="WZ">coalesce(coalesce(c.wz, m.wz), s.wz) as wz</d:field>
|
<d:field title="WZ">coalesce(coalesce(c.wz, m.wz), s.wz) as wz</d:field>
|
||||||
|
<!--- <d:field title="WZ">f.wz as wzf</d:field> --->
|
||||||
|
<d:field title="WZ">s.wz as wzs</d:field>
|
||||||
|
<d:field title="WZ">c.wz as wzc</d:field>
|
||||||
|
<!--- <d:field title="WZ">cs.wz as wzcs</d:field> --->
|
||||||
|
<d:field title="WZ">m.wz as wzm</d:field>
|
||||||
<d:field title="WZE">s.end_customer_wz as wze</d:field>
|
<d:field title="WZE">s.end_customer_wz as wze</d:field>
|
||||||
<d:field title="Артикул">coalesce(m.code, s.code) as code</d:field>
|
<d:field title="Артикул">coalesce(s.code, m.code) as code</d:field>
|
||||||
<d:field title="Артикул фикс">f.code as f_code</d:field>
|
<d:field title="Артикул по спец.">s.code as s_code</d:field>
|
||||||
|
<d:field title="Кол-во по спец.">s.component_quantity</d:field>
|
||||||
|
<d:field title="Артикул по метрикам">m.code as m_code</d:field>
|
||||||
|
<d:field>m.dimension1</d:field>
|
||||||
|
<d:field title="Тип по спец.">s.type</d:field>
|
||||||
<d:field title="Кол-во к оплате" cfSqlType="CF_SQL_NUMERIC">ceiling(m.chargeable_metric) as chargeable_metric</d:field>
|
<d:field title="Кол-во к оплате" cfSqlType="CF_SQL_NUMERIC">ceiling(m.chargeable_metric) as chargeable_metric</d:field>
|
||||||
<d:field title="Ед.изм.">m.unit</d:field>
|
<d:field title="Ед.изм.">m.unit</d:field>
|
||||||
<d:field title="Ед.изм.">s.ed_izm</d:field>
|
<d:field title="Ед.изм.">s.ed_izm</d:field>
|
||||||
<d:field title="Цена &##8381; с НДС" cfSqlType="CF_SQL_NUMERIC">s.service_quantity*(100-s.service_discount)/100*s.price*(100-s.discount)/100 as discounted_price</d:field>
|
<d:field title="Цена &##8381; с НДС" cfSqlType="CF_SQL_NUMERIC">s.service_quantity*(100-s.service_discount)/100*s.price*(100-s.discount)/100 as discounted_price</d:field>
|
||||||
<d:field title="Стоимость &##8381; с НДС" cfSqlType="CF_SQL_NUMERIC">s.service_quantity*(100-s.service_discount)/100*s.price*(100-s.discount)/100*ceiling(m.chargeable_metric) as charge</d:field>
|
<d:field title="Стоимость &##8381; с НДС" cfSqlType="CF_SQL_NUMERIC">CASE WHEN s.type=3 THEN s.service_quantity*(100-s.service_discount)/100*s.price*(100-s.discount)/100*ceiling(m.chargeable_metric) ELSE NULL END as charge</d:field>
|
||||||
<d:field title="Дата НОУ" cfSqlType="CF_SQL_TIMESTAMP">s.dt_from</d:field>
|
<d:field title="Дата НОУ" cfSqlType="CF_SQL_TIMESTAMP">s.dt_from</d:field>
|
||||||
<d:field title="Дата оконч." cfSqlType="CF_SQL_TIMESTAMP">s.dt_to</d:field>
|
<d:field title="Дата оконч." cfSqlType="CF_SQL_TIMESTAMP">s.dt_to</d:field>
|
||||||
<d:field title="Ключ строки">s.line_key</d:field>
|
<d:field title="Ключ строки">s.line_key</d:field>
|
||||||
<d:field title="GPL с НДС" cfSqlType="CF_SQL_NUMERIC">s.price</d:field>
|
<d:field title="Цена с НДС" cfSqlType="CF_SQL_NUMERIC">s.price</d:field>
|
||||||
<d:field title="Скидка%" cfSqlType="CF_SQL_NUMERIC">s.discount</d:field>
|
<d:field title="Скидка%" cfSqlType="CF_SQL_NUMERIC">s.discount</d:field>
|
||||||
<d:field title="Сырая метрика" cfSqlType="CF_SQL_NUMERIC">m.raw_metric</d:field>
|
<d:field title="Сырая метрика" cfSqlType="CF_SQL_NUMERIC">m.raw_metric</d:field>
|
||||||
<d:field title="Приведенная метрика" cfSqlType="CF_SQL_NUMERIC">m.metric</d:field>
|
<d:field title="Приведенная метрика" cfSqlType="CF_SQL_NUMERIC">m.metric</d:field>
|
||||||
<d:field title="Контрагент">coalesce(c.contragent,cs.contragent) as contragent</d:field>
|
|
||||||
<d:field title="contragent_uid">coalesce(c.contragent_uid,cs.contragent_uid) as contragent_uid</d:field>
|
<d:field title="Контрагент">c.contragent</d:field>
|
||||||
|
<d:field title="contragent_uid">c.contragent_uid</d:field>
|
||||||
<d:field title="Договор">s.contract</d:field>
|
<d:field title="Договор">s.contract</d:field>
|
||||||
<d:field title="contract_uid">s.contract_uid</d:field>
|
<d:field title="contract_uid">s.contract_uid</d:field>
|
||||||
<d:field title="Допник">s.additional_agreement</d:field>
|
<d:field title="Допник">s.additional_agreement</d:field>
|
||||||
@@ -382,27 +400,26 @@ SELECT
|
|||||||
<d:field title="Клиентс. назв.">s.user_description</d:field>
|
<d:field title="Клиентс. назв.">s.user_description</d:field>
|
||||||
</d:field_set>
|
</d:field_set>
|
||||||
FROM qUnifiedMetric m
|
FROM qUnifiedMetric m
|
||||||
FULL JOIN qSpec s ON (m.wz=s.wz AND m.code=s.code)
|
FULL JOIN qSpec s ON (m.wz=s.wz AND m.code=s.service_code) -- или компонент, но не цена
|
||||||
LEFT JOIN qSpec f ON (m.wz=f.wz AND m.code=f.code AND f.type=2)
|
LEFT JOIN qContragent c ON (trim(coalesce(s.wz,m.wz))=trim(c.wz)) -- пробелы тут стоили нескольких часов работы
|
||||||
LEFT JOIN qContragent c ON (m.wz=c.wz)
|
<!--- LEFT JOIN qContragent cs ON (s.wz=cs.wz) -- неуклюже, но иначе контрагент теряется --->
|
||||||
LEFT JOIN qContragent cs ON (s.wz=cs.wz) -- неуклюже, но иначе контрагент теряется
|
WHERE 1=1 --AND (s.type=3 OR NOT m.metric IS NULL)
|
||||||
WHERE 1=1 AND s.type=3
|
|
||||||
<cfif only_articles_in_spec>
|
<cfif only_articles_in_spec>
|
||||||
AND EXISTS(select * from qSpec qs where qs.wz=m.wz AND qs.type=3)
|
AND EXISTS(select * from qSpec qs where qs.wz=m.wz AND qs.type=3)
|
||||||
|
<!--- вообще-то есть смысл добавить и все строки, где что-то намеряли --->
|
||||||
</cfif>
|
</cfif>
|
||||||
|
--AND s.wz='WZ01031'
|
||||||
--AND s.wz='WZ01762'
|
--AND s.wz='WZ01762'
|
||||||
<!---
|
<!---
|
||||||
AND 1=0
|
AND 1=0
|
||||||
--->
|
--->
|
||||||
ORDER BY wz,code
|
ORDER BY coalesce(coalesce(c.wz, m.wz), s.wz), coalesce(s.code, m.code)
|
||||||
</cfquery>
|
</cfquery>
|
||||||
|
|
||||||
<!--- <cfdump var=#qCharge#/> --->
|
|
||||||
|
|
||||||
|
|
||||||
<cfoutput>qCharge:#getTickCount()-request.startTickCount#</cfoutput><cfif !isDefined("output_xls") AND !isDefined("output_json")><cfflush/></cfif>
|
<cfoutput>qCharge:#getTickCount()-request.startTickCount#</cfoutput><cfif !isDefined("output_xls") AND !isDefined("output_json")><cfflush/></cfif>
|
||||||
<cfif isDefined("DEBUG")>
|
<cfif isDefined("DEBUG")>
|
||||||
<!--- <cfdump var=#qCharge#/> --->
|
<cfdump var=#qCharge#/>
|
||||||
<cfif !isDefined("output_xls") AND !isDefined("output_json")><cfflush/></cfif>
|
<cfif !isDefined("output_xls") AND !isDefined("output_json")><cfflush/></cfif>
|
||||||
</cfif>
|
</cfif>
|
||||||
|
|
||||||
@@ -455,8 +472,11 @@ S3 операции и трафик: <b>#dateFormat(qS3OpsTrfAge.dt_load,'YYYY-M
|
|||||||
<thead>
|
<thead>
|
||||||
<td width="1%"></td>
|
<td width="1%"></td>
|
||||||
<!--- <th width="3%">WZ</th> --->
|
<!--- <th width="3%">WZ</th> --->
|
||||||
<th width="7%">Артикул</th>
|
<th width="7%">Артикул спец.</th>
|
||||||
<th width="7%">Кол-во (метрика)</th>
|
<th width="5%">Кол-во спец.</th>
|
||||||
|
<th width="7%">Артикул метр.</th>
|
||||||
|
<th width="3%"></th>
|
||||||
|
<th width="5%">Кол-во метр.</th>
|
||||||
<th width="3%">Ед.изм.</th>
|
<th width="3%">Ед.изм.</th>
|
||||||
<th width="3%">Цена ₽ со скид., с НДС</th>
|
<th width="3%">Цена ₽ со скид., с НДС</th>
|
||||||
<th width="3%">Стоимость ₽ с НДС</th>
|
<th width="3%">Стоимость ₽ с НДС</th>
|
||||||
@@ -501,9 +521,12 @@ S3 операции и трафик: <b>#dateFormat(qS3OpsTrfAge.dt_load,'YYYY-M
|
|||||||
<tr<cfif !len(unit)> class="gray"</cfif>>
|
<tr<cfif !len(unit)> class="gray"</cfif>>
|
||||||
<td>#currentRow#</a></td>
|
<td>#currentRow#</a></td>
|
||||||
|
|
||||||
<td>#code# <cfif !len(metric) and len(f_code)>(#f_code#)</cfif></td>
|
<td<cfif type EQ 3> style="background:lightgreen;color:black;"</cfif>>#s_code#</td>
|
||||||
|
<td>#component_quantity#</td>
|
||||||
|
<td>#m_code#</td>
|
||||||
|
<td>#dimension1#</td>
|
||||||
<td class="r" style="font-size:120%; padding:0 1em;">#request.roundSafe(chargeable_metric,3)#</td>
|
<td class="r" style="font-size:120%; padding:0 1em;">#request.roundSafe(chargeable_metric,3)#</td>
|
||||||
<td class="c" style="font-size:90%;">#len(unit)?unit:'['& ed_izm &']'#</td>
|
<td class="c" style="font-size:90%;">#unit# <cfif len(ed_izm)>[#ed_izm#]</cfif></td><!--- #len(unit)?unit:'['& ed_izm &']'# --->
|
||||||
<td class="r">#gaussianRoundSafe(discounted_price,2)#</td>
|
<td class="r">#gaussianRoundSafe(discounted_price,2)#</td>
|
||||||
<td class="r">#gaussianRoundSafe(charge,2)#</td>
|
<td class="r">#gaussianRoundSafe(charge,2)#</td>
|
||||||
|
|
||||||
@@ -530,7 +553,7 @@ S3 операции и трафик: <b>#dateFormat(qS3OpsTrfAge.dt_load,'YYYY-M
|
|||||||
</cfoutput>
|
</cfoutput>
|
||||||
<tr>
|
<tr>
|
||||||
<td bgcolor="##eee" style="border-bottom:2px solid gray;"></td>
|
<td bgcolor="##eee" style="border-bottom:2px solid gray;"></td>
|
||||||
<td bgcolor="##eee" colspan="4" class="r" style="border-bottom:2px solid gray;"><b>Итого</b> <a href="contragent.cfm?__id=#contragent_uid#&#tr.fwx#">#wz#</a> #contragent#:</td>
|
<td bgcolor="##eee" colspan="6" class="r" style="border-bottom:2px solid gray;"><b>Итого</b> <a href="contragent.cfm?__id=#contragent_uid#&#tr.fwx#">#wz#</a> #contragent#:</td>
|
||||||
<td bgcolor="##eee" colspan="1" class="r b nw" style="border-bottom:2px solid gray;">#NumFmt(acc,2)#</td>
|
<td bgcolor="##eee" colspan="1" class="r b nw" style="border-bottom:2px solid gray;">#NumFmt(acc,2)#</td>
|
||||||
<td colspan="99" style="border-bottom:2px solid gray;"></td>
|
<td colspan="99" style="border-bottom:2px solid gray;"></td>
|
||||||
</tr >
|
</tr >
|
||||||
|
|||||||
@@ -0,0 +1,136 @@
|
|||||||
|
<cfsilent>
|
||||||
|
<cfimport prefix="m" taglib="lib"/>
|
||||||
|
<cfimport prefix="c" taglib="lib/controls"/>
|
||||||
|
<cfimport prefix="d" taglib="lib/data"/>
|
||||||
|
<cfimport prefix="layout" taglib="layout"/>
|
||||||
|
</cfsilent>
|
||||||
|
|
||||||
|
<m:prepare_ls entity="vdc" accessObject="" pageInfoOut="pageInfo" trackOut="tr"/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<cfquery name="qStorage" datasource="billing-vc" ><!--- cachedWithin=#createTimeSpan(0, 0, 25, 0)# --->
|
||||||
|
SELECT
|
||||||
|
<d:field_set titleMapOut="titleMap" lengthOut="fieldCount">
|
||||||
|
<d:field title="Тенант">t.name AS tenant</d:field>
|
||||||
|
<d:field title="WZ">m.clientid AS wz</d:field>
|
||||||
|
<d:field title="status">m.status</d:field>
|
||||||
|
<d:field title="End of Test">m.end_test_date</d:field>
|
||||||
|
<d:field title="VDC">v.name AS vdc</d:field>
|
||||||
|
<d:field title="Provider VDC">p.name AS provider_vdc</d:field>
|
||||||
|
<d:field title="code">CASE
|
||||||
|
WHEN v.name LIKE '%-v1cl1%' THEN 'iaas.ngc.i29'
|
||||||
|
WHEN v.name LIKE '%-v1cl2%' THEN 'iaas.ngc.i31'
|
||||||
|
WHEN v.name LIKE '%-v1cl4%' THEN 'iaas.ngc.a28'
|
||||||
|
WHEN v.name LIKE '%-v1cl5%' THEN 'iaas.ngc.a45'
|
||||||
|
WHEN v.name LIKE '%-v1cl6%' THEN 'iaas.ngc.i28'
|
||||||
|
WHEN v.name LIKE '%-v1cl7%' THEN 'iaas.ngc.a40'
|
||||||
|
ELSE '['||v.name||']'
|
||||||
|
END AS code</d:field>
|
||||||
|
<d:field title="Storage Profile">sp.name AS storage_profile</d:field>
|
||||||
|
<d:field title="Limit GB">round(AVG(c."limit")/1024.) AS limit_gb</d:field>
|
||||||
|
<d:field title="Allocation GB">round(AVG(c."used")/1024.) AS alloc_gb</d:field>
|
||||||
|
<d:field title="Timestamp">tm.ts</d:field>
|
||||||
|
</d:field_set>
|
||||||
|
FROM ngcloud_ru.capacity_storage c
|
||||||
|
JOIN ngcloud_ru.storage_profile_types sp ON c.storage_profile_types_id = sp.id
|
||||||
|
JOIN ngcloud_ru.vdc v ON c.vdc_id = v.id
|
||||||
|
JOIN ngcloud_ru.provider_vdc p ON v.provider_vdc_id = p.id
|
||||||
|
JOIN ngcloud_ru.tenant t ON t.id = v.tenant_id
|
||||||
|
LEFT JOIN LATERAL (
|
||||||
|
SELECT tm.ts, tm.metadata_id
|
||||||
|
FROM ngcloud_ru.tenant_metadata tm
|
||||||
|
WHERE tm.tenant_id = t.id
|
||||||
|
ORDER BY tm.ts DESC, tm.metadata_id DESC
|
||||||
|
LIMIT 1
|
||||||
|
) tm ON true
|
||||||
|
LEFT JOIN ngcloud_ru.metadata m ON tm.metadata_id = m.id
|
||||||
|
WHERE c.timestamp >= <cfqueryparam cfsqltype="cf_sql_timestamp" value=#dateAdd("d",-1,Now())#/>
|
||||||
|
GROUP BY
|
||||||
|
m.clientid, v.name, p.name, sp.name, t.name,
|
||||||
|
m.status, m.end_test_date, tm.ts
|
||||||
|
ORDER BY
|
||||||
|
<m:order_build sortArray=#pageInfo.settings.sort.sortArray# fieldCount=#fieldCount#/>
|
||||||
|
</cfquery>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<cfif isDefined("output_xls")>
|
||||||
|
<layout:xml qRead=#qCharge# titleMap=#titleMap# filename="#pageInfo.entity#.xml"/>
|
||||||
|
<cfabort/>
|
||||||
|
</cfif><cfif isDefined("output_json")>
|
||||||
|
<layout:json qRead=#qCharge# titleMap=#titleMap# filename="#pageInfo.entity#.json"/>
|
||||||
|
<cfabort/>
|
||||||
|
</cfif><!---
|
||||||
|
---><layout:page section="header" pageInfo=#pageInfo#>
|
||||||
|
|
||||||
|
<layout:attribute name="title">
|
||||||
|
<cfoutput><b>Тесты и хранение</b></cfoutput>
|
||||||
|
</layout:attribute>
|
||||||
|
<layout:attribute name="controls">
|
||||||
|
<!---skip filter link, filter is not implemented--->
|
||||||
|
<!---<layout:language_switch/>--->
|
||||||
|
</layout:attribute>
|
||||||
|
</layout:page>
|
||||||
|
|
||||||
|
<!--- <cfdump var=#qReconciliation# abort=true/> --->
|
||||||
|
|
||||||
|
<!--- <cfoutput>
|
||||||
|
|
||||||
|
<br/> --->
|
||||||
|
<!--- <a href="#request.thisPage#?output_xls" title="экспорт в Excel" style="margin-left:.5em; height:100%;" target="_blank"><img src="img/xls.gif" style="vertical-align:text-bottom;"/></a>
|
||||||
|
|
||||||
|
<a href="#request.thisPage#?output_json" title="экспорт в json" style="margin-left:.5em; height:100%;" target="_blank"><img src="img/json.svg" style="vertical-align:text-bottom;" width="13" height="13"/></a>
|
||||||
|
</cfoutput>
|
||||||
|
<cfoutput><b>#qStorage.recordCount#</b></cfoutput> --->
|
||||||
|
|
||||||
|
<layout:grid_summary
|
||||||
|
recordCount=#qStorage.recordCount#
|
||||||
|
footerOut="gridFooter"
|
||||||
|
excelLink="Yes"
|
||||||
|
jsonLink="Yes"
|
||||||
|
/>
|
||||||
|
|
||||||
|
|
||||||
|
<table class="worktable">
|
||||||
|
<layout:grid_head titleMap=#titleMap# sortArray=#pageInfo.settings.sort.sortArray#>
|
||||||
|
<tr>
|
||||||
|
<th><layout:column_head name="tenant"/></th>
|
||||||
|
<th><layout:column_head name="wz"/></th>
|
||||||
|
<th><layout:column_head name="status"/></th>
|
||||||
|
<th><layout:column_head name="end_test_date"/></th>
|
||||||
|
<th><layout:column_head name="vdc"/></th>
|
||||||
|
<th><layout:column_head name="provider_vdc"/></th>
|
||||||
|
<th><layout:column_head name="code"/></th>
|
||||||
|
<th><layout:column_head name="storage_profile"/></th>
|
||||||
|
<th><layout:column_head name="limit_gb"/></th>
|
||||||
|
<th><layout:column_head name="alloc_gb"/></th>
|
||||||
|
<th><layout:column_head name="ts"/></th>
|
||||||
|
</tr>
|
||||||
|
</layout:grid_head>
|
||||||
|
|
||||||
|
<cfoutput query="qStorage">
|
||||||
|
<tr>
|
||||||
|
<!--- <td><a href="contragent.cfm?__id=#company_uid#&#tr.fwx#">#WZ#</a><a href="contragent_rpt.cfm?__id=#company_uid#&#tr.fwx#" style="float:right"><img src="img/view.gif" title="сводка по контрагенту"/></a></td> --->
|
||||||
|
<td>#tenant#</td>
|
||||||
|
<td>#wz#</td>
|
||||||
|
<td<cfif NOT (status EQ "prod" OR status EQ "internal-test")> class="b"</cfif>>#status#</td>
|
||||||
|
<td<cfif NOT (status EQ "prod" OR status EQ "internal-test") AND isDate(end_test_date) AND end_test_date LE Now()> class="b err"</cfif>>#end_test_date#</td>
|
||||||
|
<td>#VDC#</td>
|
||||||
|
<td>#provider_vdc#</td>
|
||||||
|
<td>#code#</td>
|
||||||
|
<td>#storage_profile#</td>
|
||||||
|
<td<cfif NOT (status EQ "prod" OR status EQ "internal-test") AND isDate(end_test_date) AND end_test_date LE Now()> class="b err"</cfif>>#limit_gb#</td>
|
||||||
|
<td<cfif NOT (status EQ "prod" OR status EQ "internal-test") AND isDate(end_test_date) AND end_test_date LE Now()> class="b err"</cfif>>#alloc_gb#</td>
|
||||||
|
<td>#dateFormaT(ts,"YYYY-MM-DD")# #timeFormaT(ts,"HH-MM")#</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
</cfoutput>
|
||||||
|
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
<layout:page section="footer"/>
|
||||||
|
|
||||||
Reference in New Issue
Block a user