013 s3 cold prices added
This commit is contained in:
@@ -0,0 +1,7 @@
|
|||||||
|
t test
|
||||||
|
<cftry>
|
||||||
|
<cfdump var=#session#/>
|
||||||
|
<cfcatch type="any"><cfdump var=#cfcatch#/></cfcatch>
|
||||||
|
</cftry/>
|
||||||
|
|
||||||
|
<cfset jwt = new lib.jwt(this.client_secret)/>
|
||||||
+36
-2
@@ -77,7 +77,7 @@
|
|||||||
|
|
||||||
<!--- global settings --->
|
<!--- global settings --->
|
||||||
<cfset request.RECORDS_PER_PAGE=500/>
|
<cfset request.RECORDS_PER_PAGE=500/>
|
||||||
<cfset request.APP_VERSION="0.00.012"/>
|
<cfset request.APP_VERSION="0.00.013"/>
|
||||||
<cfset request.STAND=getStand()/>
|
<cfset request.STAND=getStand()/>
|
||||||
|
|
||||||
<!--- application constants --->
|
<!--- application constants --->
|
||||||
@@ -158,7 +158,41 @@
|
|||||||
<cfcookie name="CFID" value="#session.CFID#"/>
|
<cfcookie name="CFID" value="#session.CFID#"/>
|
||||||
<cfcookie name="CFTOKEN" value="#session.CFTOKEN#"/>
|
<cfcookie name="CFTOKEN" value="#session.CFTOKEN#"/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!--- SSO --->
|
<!--- SSO --->
|
||||||
|
<!--- Если без сессии. Проверяем наличие токена в заголовке (и в куках?)
|
||||||
|
Если его нет, идем к IDP за токеном. Получив токен, складываем его в куки
|
||||||
|
Если токен есть, распаковываем его. Проверяем протухание. Если прошла установленная часть времени жизни, идем за рефрешем (внимание: это сработает только в браузере,
|
||||||
|
если клиент не умеет редиректы - то токен должен быть достаточно свежий)
|
||||||
|
(для начала делаем без рефреша, только проверяем протухание)
|
||||||
|
А рефреш можно сделать на серверной стороне?
|
||||||
|
Кладем данные из токена в реквест и наслаждаемся --->
|
||||||
|
|
||||||
|
<!--- <cfscript>
|
||||||
|
var requestData = GetHttpRequestData();
|
||||||
|
var headers = requestData.headers;
|
||||||
|
|
||||||
|
writedump(headers);
|
||||||
|
|
||||||
|
if (structKeyExists(headers,"authorization")) {
|
||||||
|
var authorizationHeader = headers.authorization;
|
||||||
|
if (authorizationHeader.startsWith("Bearer ")) {
|
||||||
|
var bearerToken = Mid(authorizationHeader, 8);
|
||||||
|
writeDump(bearerToken);
|
||||||
|
var token=toString(binaryDecode(bearerToken, "base64"));
|
||||||
|
writeDump(token);
|
||||||
|
jwt = new lib.jwt(this.client_secret);
|
||||||
|
lock scope="application" type="readonly" timeout="1" {
|
||||||
|
var token_data = (jwt.decode(token, application.idpCertificate,"RS256"));
|
||||||
|
}
|
||||||
|
writeDump(token_data);
|
||||||
|
abort;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
writeoutput("No Authorization header present");//abort;
|
||||||
|
}
|
||||||
|
</cfscript> --->
|
||||||
<cflock scope="session" type="exclusive" timeout="3">
|
<cflock scope="session" type="exclusive" timeout="3">
|
||||||
<!---
|
<!---
|
||||||
<cfdump var=#session#/>
|
<cfdump var=#session#/>
|
||||||
@@ -334,7 +368,7 @@
|
|||||||
</cffunction>
|
</cffunction>
|
||||||
|
|
||||||
|
|
||||||
<cffunction
|
<cffunction
|
||||||
name="getDS"
|
name="getDS"
|
||||||
access="private"
|
access="private"
|
||||||
returntype="void"
|
returntype="void"
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
<cfif isDefined("output_xls")><cfmodule template="mod/payg.cfm"
|
<cfif isDefined("output_xls")><cfmodule template="mod/payg.cfm"
|
||||||
dt_finish=#dt_finish#
|
dt_finish=#dt_finish#
|
||||||
dt_start=#dt_start#
|
dt_start=#dt_start#
|
||||||
|
tenant_wz_index=#tenant_wz_index#
|
||||||
output="report"
|
output="report"
|
||||||
debug=#isDefined("DEBUG")#
|
debug=#isDefined("DEBUG")#
|
||||||
/><layout:xml qRead=#report.qCharge# titleMap=#report.chargeTitleMap# filename="#pageInfo.entity#.xml"/>
|
/><layout:xml qRead=#report.qCharge# titleMap=#report.chargeTitleMap# filename="#pageInfo.entity#.xml"/>
|
||||||
@@ -23,6 +24,7 @@
|
|||||||
</cfif><cfif isDefined("output_json")><cfmodule template="mod/payg.cfm"
|
</cfif><cfif isDefined("output_json")><cfmodule template="mod/payg.cfm"
|
||||||
dt_finish=#dt_finish#
|
dt_finish=#dt_finish#
|
||||||
dt_start=#dt_start#
|
dt_start=#dt_start#
|
||||||
|
tenant_wz_index=#tenant_wz_index#
|
||||||
output="report"
|
output="report"
|
||||||
debug=#isDefined("DEBUG")#
|
debug=#isDefined("DEBUG")#
|
||||||
/><!--- <cfdump var=#report#/><cfabort/> ---><layout:json qRead=#report.qCharge# titleMap=#report.chargeTitleMap# filename="#pageInfo.entity#.json"/>
|
/><!--- <cfdump var=#report#/><cfabort/> ---><layout:json qRead=#report.qCharge# titleMap=#report.chargeTitleMap# filename="#pageInfo.entity#.json"/>
|
||||||
@@ -57,6 +59,7 @@
|
|||||||
<cfmodule template="mod/payg.cfm"
|
<cfmodule template="mod/payg.cfm"
|
||||||
dt_finish=#dt_finish#
|
dt_finish=#dt_finish#
|
||||||
dt_start=#dt_start#
|
dt_start=#dt_start#
|
||||||
|
tenant_wz_index=#tenant_wz_index#
|
||||||
output="report"
|
output="report"
|
||||||
debug=#isDefined("DEBUG")#
|
debug=#isDefined("DEBUG")#
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -61,13 +61,13 @@
|
|||||||
</cffunction>
|
</cffunction>
|
||||||
|
|
||||||
|
|
||||||
<cfmodule template="mod/payg.cfm"
|
<!--- <cfmodule template="mod/payg.cfm"
|
||||||
dt_finish=#dt_finish#
|
dt_finish=#dt_finish#
|
||||||
dt_start=#dt_start#
|
dt_start=#dt_start#
|
||||||
output="report"
|
output="report"
|
||||||
debug=#isDefined("DEBUG")#
|
debug=#isDefined("DEBUG")#
|
||||||
/>
|
/> --->
|
||||||
<cfset out={
|
<!--- <cfset out={
|
||||||
"hours"=#hours#,
|
"hours"=#hours#,
|
||||||
"dtStart="=#iso8601dtFormat(dt_start)#,
|
"dtStart="=#iso8601dtFormat(dt_start)#,
|
||||||
"dtFinish"=#iso8601dtFormat(dt_finish)#,
|
"dtFinish"=#iso8601dtFormat(dt_finish)#,
|
||||||
@@ -81,7 +81,7 @@
|
|||||||
result.append(row);
|
result.append(row);
|
||||||
return result;
|
return result;
|
||||||
}, [])#
|
}, [])#
|
||||||
}/>
|
}/> ---><cfset out={"test"=true}/>
|
||||||
|
|
||||||
<cfcontent
|
<cfcontent
|
||||||
type="application/json"
|
type="application/json"
|
||||||
|
|||||||
+21
-9
@@ -5,9 +5,10 @@
|
|||||||
<cfparam name="ATTRIBUTES.dt_start" type="date" default=#dateAdd('m',-1,ATTRIBUTES.dt_finish)#/>
|
<cfparam name="ATTRIBUTES.dt_start" type="date" default=#dateAdd('m',-1,ATTRIBUTES.dt_finish)#/>
|
||||||
<cfparam name="ATTRIBUTES.output" type="string" default="report"/>
|
<cfparam name="ATTRIBUTES.output" type="string" default="report"/>
|
||||||
<cfparam name="ATTRIBUTES.debug" type="boolean" default=false/>
|
<cfparam name="ATTRIBUTES.debug" type="boolean" default=false/>
|
||||||
|
<cfparam name="ATTRIBUTES.tenant_wz_index" type="string"/>
|
||||||
|
|
||||||
<cfset hours=dateDiff('h', ATTRIBUTES.dt_start, ATTRIBUTES.dt_finish)/>
|
<cfset hours=dateDiff('h', ATTRIBUTES.dt_start, ATTRIBUTES.dt_finish)/>
|
||||||
<cfset tenant_wz_index=val(mid(request.auth.wz,3,5))/><!--- cut off WZ --->
|
|
||||||
|
|
||||||
|
|
||||||
<!--- QoQ does not support join syntax, at least of Lucee 5.4--->
|
<!--- QoQ does not support join syntax, at least of Lucee 5.4--->
|
||||||
@@ -17,10 +18,15 @@
|
|||||||
<cfquery name="qSpec">
|
<cfquery name="qSpec">
|
||||||
select * from (
|
select * from (
|
||||||
values
|
values
|
||||||
('Объектное хранилище S3 CEPH','Дисковое пространство: Объем хранения','paas.s3.ceph.vol-m','ГБайт',1.80,0)
|
('Объектное хранилище S3 CEPH','Дисковое пространство: Объем хранения (HOT)','paas.s3.ceph.vol-m','ГБайт',1.80,0)
|
||||||
,('Объектное хранилище S3 CEPH','Исходящий трафик','paas.s3.ceph.trf-m','ГБайт',1.50,0)
|
,('Объектное хранилище S3 CEPH','Исходящий трафик (HOT)','paas.s3.ceph.trf-m','ГБайт',1.50,0)
|
||||||
,('Объектное хранилище S3 CEPH','Запросы GET, HEAD, OPTIONS','paas.s3.ceph.get-m','10тыс.шт.',0.35,0)
|
,('Объектное хранилище S3 CEPH','Запросы GET, HEAD, OPTIONS (HOT)','paas.s3.ceph.get-m','10тыс.шт.',0.35,0)
|
||||||
,('Объектное хранилище S3 CEPH','Запросы PUT, POST, PATCH','paas.s3.ceph.put-m','10тыс.шт.',4.50,0)
|
,('Объектное хранилище S3 CEPH','Запросы PUT, POST, PATCH (HOT)','paas.s3.ceph.put-m','10тыс.шт.',4.50,0)
|
||||||
|
|
||||||
|
,('Объектное хранилище S3 CEPH','Дисковое пространство: Объем хранения (COLD)','paas.s3.cphc.vol-m','ГБайт',0.84*1.2,0)
|
||||||
|
,('Объектное хранилище S3 CEPH','Исходящий трафик (COLD)','paas.s3.cphc.trf-m','ГБайт',1.25*1.2,0)
|
||||||
|
,('Объектное хранилище S3 CEPH','Запросы GET, HEAD, OPTIONS (COLD)','paas.s3.cphc.get-m','10тыс.шт.',0.8*1.2,0)
|
||||||
|
,('Объектное хранилище S3 CEPH','Запросы PUT, POST, PATCH (COLD)','paas.s3.cphc.put-m','10тыс.шт.',9.7*1.2,0)
|
||||||
) as
|
) as
|
||||||
s (svc, component, code, unit, price, discount)
|
s (svc, component, code, unit, price, discount)
|
||||||
order by code
|
order by code
|
||||||
@@ -41,7 +47,7 @@
|
|||||||
from ngcloud_ru.capacity_resource
|
from ngcloud_ru.capacity_resource
|
||||||
join ngcloud_ru.vdc on capacity_resource.vdc_id=vdc.id
|
join ngcloud_ru.vdc on capacity_resource.vdc_id=vdc.id
|
||||||
join ngcloud_ru.tenant on tenant.id=vdc.tenant_id
|
join ngcloud_ru.tenant on tenant.id=vdc.tenant_id
|
||||||
where tenant.wzcode = <cfqueryparam cfsqltype="cf_sql_integer" value=#tenant_wz_index#/>
|
where tenant.wzcode = <cfqueryparam cfsqltype="cf_sql_integer" value=#ATTRIBUTES.tenant_wz_index#/>
|
||||||
AND capacity_resource.timestamp >= <cfqueryparam cfsqltype="cf_sql_timestamp" value=#ATTRIBUTES.dt_start#/>
|
AND capacity_resource.timestamp >= <cfqueryparam cfsqltype="cf_sql_timestamp" value=#ATTRIBUTES.dt_start#/>
|
||||||
AND capacity_resource.timestamp < <cfqueryparam cfsqltype="cf_sql_timestamp" value=#ATTRIBUTES.dt_finish#/>
|
AND capacity_resource.timestamp < <cfqueryparam cfsqltype="cf_sql_timestamp" value=#ATTRIBUTES.dt_finish#/>
|
||||||
group by tenant.wzcode, vdc.name
|
group by tenant.wzcode, vdc.name
|
||||||
@@ -80,7 +86,7 @@
|
|||||||
join ngcloud_ru.vdc on capacity_storage.vdc_id=vdc.id
|
join ngcloud_ru.vdc on capacity_storage.vdc_id=vdc.id
|
||||||
join ngcloud_ru.tenant on tenant.id=vdc.tenant_id
|
join ngcloud_ru.tenant on tenant.id=vdc.tenant_id
|
||||||
join ngcloud_ru.storage_profile_types on capacity_storage.storage_profile_types_id=storage_profile_types.id
|
join ngcloud_ru.storage_profile_types on capacity_storage.storage_profile_types_id=storage_profile_types.id
|
||||||
where tenant.wzcode = <cfqueryparam cfsqltype="cf_sql_integer" value=#tenant_wz_index#/>
|
where tenant.wzcode = <cfqueryparam cfsqltype="cf_sql_integer" value=#ATTRIBUTES.tenant_wz_index#/>
|
||||||
AND capacity_storage.timestamp >= <cfqueryparam cfsqltype="cf_sql_timestamp" value=#ATTRIBUTES.dt_start#/>
|
AND capacity_storage.timestamp >= <cfqueryparam cfsqltype="cf_sql_timestamp" value=#ATTRIBUTES.dt_start#/>
|
||||||
AND capacity_storage.timestamp < <cfqueryparam cfsqltype="cf_sql_timestamp" value=#ATTRIBUTES.dt_finish#/>
|
AND capacity_storage.timestamp < <cfqueryparam cfsqltype="cf_sql_timestamp" value=#ATTRIBUTES.dt_finish#/>
|
||||||
group by tenant.wzcode, vdc.name, storage_profile_types.name
|
group by tenant.wzcode, vdc.name, storage_profile_types.name
|
||||||
@@ -118,7 +124,7 @@ HOT_FREE_LIMIT 1 10 1 100
|
|||||||
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.owner = <cfqueryparam cfsqltype="cf_sql_varchar" value=#tenant_wz_index#/>
|
AND bucket_stat.owner = <cfqueryparam cfsqltype="cf_sql_varchar" value=#ATTRIBUTES.tenant_wz_index#/>
|
||||||
AND bucket_stat.timestamp_addition >= <cfqueryparam cfsqltype="cf_sql_timestamp" value=#ATTRIBUTES.dt_start#/>
|
AND bucket_stat.timestamp_addition >= <cfqueryparam cfsqltype="cf_sql_timestamp" value=#ATTRIBUTES.dt_start#/>
|
||||||
AND bucket_stat.timestamp_addition < <cfqueryparam cfsqltype="cf_sql_timestamp" value=#ATTRIBUTES.dt_finish#/>
|
AND bucket_stat.timestamp_addition < <cfqueryparam cfsqltype="cf_sql_timestamp" value=#ATTRIBUTES.dt_finish#/>
|
||||||
group by bucket_stat.owner, bucket_stat.placement_id
|
group by bucket_stat.owner, bucket_stat.placement_id
|
||||||
@@ -203,7 +209,7 @@ select
|
|||||||
join s3billing.bucket_info on usage_bucket_by_user.bucketid=bucket_info.id
|
join s3billing.bucket_info on usage_bucket_by_user.bucketid=bucket_info.id
|
||||||
join s3billing.placement on bucket_info.placement_id=placement.id
|
join s3billing.placement on bucket_info.placement_id=placement.id
|
||||||
where 1=1
|
where 1=1
|
||||||
AND user_info.name = <cfqueryparam cfsqltype="cf_sql_varchar" value=#tenant_wz_index#/>
|
AND user_info.name = <cfqueryparam cfsqltype="cf_sql_varchar" value=#ATTRIBUTES.tenant_wz_index#/>
|
||||||
AND usage_bucket_by_user.time >= <cfqueryparam cfsqltype="cf_sql_timestamp" value=#ATTRIBUTES.dt_start#/>
|
AND usage_bucket_by_user.time >= <cfqueryparam cfsqltype="cf_sql_timestamp" value=#ATTRIBUTES.dt_start#/>
|
||||||
AND usage_bucket_by_user.time < <cfqueryparam cfsqltype="cf_sql_timestamp" value=#ATTRIBUTES.dt_finish#/>
|
AND usage_bucket_by_user.time < <cfqueryparam cfsqltype="cf_sql_timestamp" value=#ATTRIBUTES.dt_finish#/>
|
||||||
group by user_info.name, bucket_info.placement_id
|
group by user_info.name, bucket_info.placement_id
|
||||||
@@ -245,6 +251,7 @@ select wz, code || '.trf-m', bytes_sent as raw_metric, bytes_sent_gb as metric,
|
|||||||
SELECT
|
SELECT
|
||||||
<d:field_set titleMapOut="titleMap" lengthOut="fieldCount">
|
<d:field_set titleMapOut="titleMap" lengthOut="fieldCount">
|
||||||
<d:field title="Артикул">s.code</d:field>
|
<d:field title="Артикул">s.code</d:field>
|
||||||
|
<d:field title="Артикул">m.code as m_code</d:field>
|
||||||
<d:field title="Услуга">s.svc</d:field>
|
<d:field title="Услуга">s.svc</d:field>
|
||||||
<d:field title="Компонент">s.component</d:field>
|
<d:field title="Компонент">s.component</d:field>
|
||||||
<d:field title="Кол-во (метрика)" cfSqlType="CF_SQL_NUMERIC">m.chargeable_metric</d:field>
|
<d:field title="Кол-во (метрика)" cfSqlType="CF_SQL_NUMERIC">m.chargeable_metric</d:field>
|
||||||
@@ -266,6 +273,11 @@ WHERE m.wz=<cfqueryparam cfsqltype="cf_sql_varchar" value=#request.auth.wz#/> AN
|
|||||||
order by s.code
|
order by s.code
|
||||||
</cfquery>
|
</cfquery>
|
||||||
|
|
||||||
|
<cfif (ATTRIBUTES.debug)>
|
||||||
|
<cfdump var=#qCharge#/>
|
||||||
|
<cfflush/>
|
||||||
|
</cfif>
|
||||||
|
|
||||||
<cfset var report={}/>
|
<cfset var report={}/>
|
||||||
|
|
||||||
<cfset report.qComputingAge = qComputingAge/>
|
<cfset report.qComputingAge = qComputingAge/>
|
||||||
|
|||||||
+159
@@ -0,0 +1,159 @@
|
|||||||
|
<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="payg" accessObject="" pageInfoOut="pageInfo" trackOut="tr"/>
|
||||||
|
|
||||||
|
<cfparam name="dt_finish" type="date" default=#createDateTime(year(Now()),month(Now()),1,0,0,0)#/>
|
||||||
|
<cfparam name="dt_start" type="date" default=#dateAdd('m',-1,dt_finish)#/>
|
||||||
|
<cfset hours=dateDiff('h',dt_start,dt_finish)/>
|
||||||
|
<cfset tenant_wz_index=val(mid(request.auth.wz,3,5))/><!--- cut off WZ --->
|
||||||
|
<cfset tenant_wz_index="00169"/><!--- cut off WZ --->
|
||||||
|
|
||||||
|
|
||||||
|
<cfif isDefined("output_xls")><cfmodule template="mod/payg.cfm"
|
||||||
|
dt_finish=#dt_finish#
|
||||||
|
dt_start=#dt_start#
|
||||||
|
tenant_wz_index=#tenant_wz_index#
|
||||||
|
output="report"
|
||||||
|
debug=#isDefined("DEBUG")#
|
||||||
|
/><layout:xml qRead=#report.qCharge# titleMap=#report.chargeTitleMap# filename="#pageInfo.entity#.xml"/>
|
||||||
|
<cfabort/>
|
||||||
|
</cfif><cfif isDefined("output_json")><cfmodule template="mod/payg.cfm"
|
||||||
|
dt_finish=#dt_finish#
|
||||||
|
dt_start=#dt_start#
|
||||||
|
tenant_wz_index=#tenant_wz_index#
|
||||||
|
output="report"
|
||||||
|
debug=#isDefined("DEBUG")#
|
||||||
|
/><!--- <cfdump var=#report#/><cfabort/> ---><layout:json qRead=#report.qCharge# titleMap=#report.chargeTitleMap# filename="#pageInfo.entity#.json"/>
|
||||||
|
<cfabort/>
|
||||||
|
</cfif><!---
|
||||||
|
---><layout:page section="header" pageInfo=#pageInfo#>
|
||||||
|
|
||||||
|
<layout:attribute name="title">
|
||||||
|
<cfoutput><b>Отчет по PAYG</b> #request.auth.wz#</cfoutput>
|
||||||
|
</layout:attribute>
|
||||||
|
<layout:attribute name="controls">
|
||||||
|
<!---skip filter link, filter is not implemented--->
|
||||||
|
<!---<layout:language_switch/>--->
|
||||||
|
</layout:attribute>
|
||||||
|
</layout:page>
|
||||||
|
|
||||||
|
<!--- Внимание! округление вверх при расчете метрик get, put S3. Расчетные суммы могут содержать погрешности округления, поэтому окончательный расчет стоимости (количество * цену) должен выполняться в бухгалтерской программе.
|
||||||
|
<b>Если у клиента больше 1 действующего допника с услугами PAYG, то данные в отчете могут быть замножены, в этом случае считать вручную</b> --->
|
||||||
|
|
||||||
|
<cfoutput>
|
||||||
|
<form method="post" action="">
|
||||||
|
Период с <input type="text" name="dt_start" value="#dateFormat(dt_start,'YYYY-MM-DD')#"/>
|
||||||
|
по <input type="text" name="dt_finish" value="#dateFormat(dt_finish,'YYYY-MM-DD')#"/>
|
||||||
|
<input type="submit" style="cursor:pointer;"/>
|
||||||
|
<!--- <input type="submit" name="DEBUG" value="DEBUG" style="cursor:pointer;"/> --->
|
||||||
|
</form>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<cfflush/>
|
||||||
|
|
||||||
|
<cfmodule template="mod/payg.cfm"
|
||||||
|
dt_finish=#dt_finish#
|
||||||
|
dt_start=#dt_start#
|
||||||
|
tenant_wz_index=#tenant_wz_index#
|
||||||
|
output="report"
|
||||||
|
debug=#isDefined("DEBUG")#
|
||||||
|
/>
|
||||||
|
|
||||||
|
Часов в периоде: <b>#hours#</b> Строк в отчете: <b>#report.qCharge.recordCount#</b><br/>
|
||||||
|
Актуальность данных:
|
||||||
|
VCD Computing: <b>#dateFormat(report.qComputingAge.dt_load,'YYYY-MM-DD')# #timeFormat(report.qComputingAge.dt_load,'HH:MM:SS')#</b>
|
||||||
|
VCD Storage: <b>#dateFormat(report.qStorageAge.dt_load,'YYYY-MM-DD')# #timeFormat(report.qStorageAge.dt_load,'HH:MM:SS')#</b>
|
||||||
|
S3 хранение: <b>#dateFormat(report.qS3VolAge.dt_load,'YYYY-MM-DD')# #timeFormat(report.qS3VolAge.dt_load,'HH:MM:SS')#</b>
|
||||||
|
S3 операции и трафик: <b>#dateFormat(report.qS3OpsTrfAge.dt_load,'YYYY-MM-DD')# #timeFormat(report.qS3OpsTrfAge.dt_load,'HH:MM:SS')#</b>
|
||||||
|
|
||||||
|
<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>
|
||||||
|
<table class="worktable">
|
||||||
|
<thead>
|
||||||
|
<td width="1%"></td>
|
||||||
|
<!--- <th width="3%">WZ</th> --->
|
||||||
|
<th width="7%">Артикул</th>
|
||||||
|
<th width="7%">Кол-во (метрика)</th>
|
||||||
|
<th width="3%">Ед.изм.</th>
|
||||||
|
<th width="3%">Цена ₽ со скид., с НДС</th>
|
||||||
|
<th width="3%">Стоимость ₽ с НДС</th>
|
||||||
|
|
||||||
|
<td width="3%"> </td>
|
||||||
|
|
||||||
|
<td width="10%">Услуга</td>
|
||||||
|
<td width="10%">Компонент</td>
|
||||||
|
<!--- <td width="10%">Клиентс. назв.</td> --->
|
||||||
|
|
||||||
|
<td width="3%">GPL с НДС</td>
|
||||||
|
<td width="3%">Скидка%</td>
|
||||||
|
|
||||||
|
<!--- <td width="6%">Дата НОУ</td>
|
||||||
|
<td width="6%">Дата оконч.</td>
|
||||||
|
|
||||||
|
<td width="3%">Ключ строки</td> --->
|
||||||
|
<!--- <td width="3%">Сырая метрика</td> --->
|
||||||
|
<td width="3%">Оплачиваемый объем</td>
|
||||||
|
|
||||||
|
<!--- <td width="5%">Договор</td>
|
||||||
|
<td width="10%">Допник</td>
|
||||||
|
<td width="10%">Сделка</td> --->
|
||||||
|
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<cfoutput query="report.qCharge" group="svc">
|
||||||
|
<cfset var acc=0/>
|
||||||
|
<tr>
|
||||||
|
<td bgcolor="##ccc"></td>
|
||||||
|
<td bgcolor="##ccc" colspan="5" class="b"> #svc#</td>
|
||||||
|
<td></td>
|
||||||
|
<td bgcolor="##ccc" colspan="99"></td>
|
||||||
|
</tr>
|
||||||
|
<cfoutput>
|
||||||
|
<cfset acc=acc+charge/>
|
||||||
|
<tr>
|
||||||
|
<td>#currentRow#</a></td>
|
||||||
|
|
||||||
|
<td>#code#</td>
|
||||||
|
<td class="r" style="font-size:120%; padding:0 1em;">#chargeable_metric#</td>
|
||||||
|
<td class="c" style="font-size:90%;">#unit#</td>
|
||||||
|
<td class="r">#discounted_price#</td>
|
||||||
|
<td class="r">#charge#</td>
|
||||||
|
|
||||||
|
<td></td>
|
||||||
|
|
||||||
|
<td>#svc#</td>
|
||||||
|
<td>#component#</td>
|
||||||
|
<!--- <td>#user_description#</td> --->
|
||||||
|
|
||||||
|
<td class="r">#price#</td>
|
||||||
|
<td class="r">#discount#</td>
|
||||||
|
|
||||||
|
<td class="r">#metric#</td>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
</cfoutput>
|
||||||
|
<tr>
|
||||||
|
<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> #svc#:</td>
|
||||||
|
<td bgcolor="##eee" colspan="1" class="r b" style="border-bottom:2px solid gray;">#NumFmt(acc,2)#</td>
|
||||||
|
<td colspan="14" style="border-bottom:2px solid gray;"></td>
|
||||||
|
</tr >
|
||||||
|
</cfoutput>
|
||||||
|
|
||||||
|
</table>
|
||||||
|
<!--- <cfdump var=#qCharge#/> --->
|
||||||
|
|
||||||
|
|
||||||
|
<layout:page section="footer"/>
|
||||||
|
|
||||||
|
<!--- select * from s3billing.billing_per_user_fix_pl('2025-05-01 00:00:00','2025-06-01 00:00:00','1395'); --->
|
||||||
|
|
||||||
Reference in New Issue
Block a user