018 fine debug
This commit is contained in:
parent
a4f66bf6e8
commit
1c96679c29
@ -69,7 +69,7 @@
|
||||
<!--- <cfset this.datasources["#this.datasource#"]=getDS("#this.datasource#","datasource_#this.datasource#")/> --->
|
||||
|
||||
<cfset request.RECORDS_PER_PAGE=500/>
|
||||
<cfset request.APP_VERSION="0.00.017"/>
|
||||
<cfset request.APP_VERSION="0.00.018"/>
|
||||
|
||||
<cflock scope="application" type="readonly" timeout=3>
|
||||
<cfset request.APP_NAME=this.Name/>
|
||||
|
@ -218,7 +218,7 @@
|
||||
<!--- для identity проверка существования записи простая, а тут как? В принципе, бин должен экспортировать флаг существования записи --->
|
||||
<cfif d.agreement_version GE 0>
|
||||
<cfquery name="qItem" datasource="#request.DS#">
|
||||
select
|
||||
select
|
||||
iv.specification_item_uid
|
||||
,iv.agreement_version /*лучше читается, когда все одинаково берется из резалтсета*/
|
||||
,i.svc_id
|
||||
@ -291,9 +291,8 @@
|
||||
join specification_item ii on (iiv.specification_item_uid=ii.specification_item_uid)
|
||||
join specification isp on (ii.specification_id=isp.specification_id)
|
||||
join agreement ia on (isp.contract_id=ia.contract_id AND iiv.agreement_version=ia.agreement_version)
|
||||
where iiv.specification_item_uid=i.specification_item_uid
|
||||
AND ia.is_actual
|
||||
AND iiv.agreement_version <=<cfqueryparam cfsqltype="cf_sql_integer" value="#d.agreement_version#"/>
|
||||
where iiv.specification_item_uid=i.specification_item_uid
|
||||
AND iiv.agreement_version <= <cfqueryparam cfsqltype="cf_sql_integer" value="#d.agreement_version#"/>
|
||||
)
|
||||
order by i.specification_id
|
||||
</cfquery>
|
||||
@ -322,6 +321,7 @@
|
||||
<th>Имя для печати</th>
|
||||
<th>Модель</th>
|
||||
|
||||
<th>Версия</th>
|
||||
<th>Дата с</th>
|
||||
<th>Дата по</th>
|
||||
<th>Кол-во</th>
|
||||
@ -346,7 +346,7 @@
|
||||
<cfoutput group="specification_item_uid">
|
||||
<tr>
|
||||
<td>
|
||||
<a href="specification_item_version.cfm?specification_item_uid=#specification_item_uid#&agreement_version=#agreement_version#&#tr.fwx#" class=<cfif pageInfo.writePermitted()>"edit"<cfelse>"view"</cfif>></a>
|
||||
<a href="specification_item_version.cfm?specification_item_uid=#specification_item_uid#&agreement_version=#d.agreement_version#&#tr.fwx#" class=<cfif pageInfo.writePermitted()>"edit"<cfelse>"view"</cfif>></a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="specification.cfm?specification_id=#specification_id#&#tr.fwx#">#specification#</a>
|
||||
@ -363,6 +363,7 @@
|
||||
</td>
|
||||
<td>#specification_item_version#</td>
|
||||
<td class="c">#pricing_model_short#</td>
|
||||
<td class="c">#agreement_version#</td>
|
||||
|
||||
<td class="c">#dateFormat(dt_from,'DD.MM.YYYY')#</td>
|
||||
<td class="c">#dateFormat(dt_to,'DD.MM.YYYY')#</td>
|
||||
@ -383,7 +384,7 @@
|
||||
|
||||
<td class="c">
|
||||
<cfif pageInfo.writePermitted()>
|
||||
<a href="specification_item_version_del.cfm?specification_item_uid=#specification_item_uid#&agreement_version=#agreement_version#&#tr.fwx#" class="del"></a>
|
||||
<a href="specification_item_version_del.cfm?specification_item_uid=#specification_item_uid#&agreement_version=#d.agreement_version#&#tr.fwx#" class="del"></a>
|
||||
</cfif>
|
||||
</td>
|
||||
</tr>
|
||||
|
54
etc/db/2.sql
Normal file
54
etc/db/2.sql
Normal file
@ -0,0 +1,54 @@
|
||||
/*похоже, надо делать фулл джойн между базовым и актуальным временными диапазонами, может быть, неявно
|
||||
актуальность соглашения зависит от времени. в нашем примере сначала актуально соглашение 0
|
||||
*/
|
||||
--fix and payg
|
||||
select
|
||||
dayscale.dt::date
|
||||
,siv.agreement_version as actual_version
|
||||
|
||||
,siv0.agreement_version as base_version
|
||||
,a.agreement_version
|
||||
,siv.quantity
|
||||
,siv0.quantity
|
||||
,a.probability_perc as actual_probability
|
||||
,a0.probability_perc as base_probability
|
||||
,a.is_actual, a0.is_actual
|
||||
--,sum(siv.price*siv.quantity*a.probability_perc/100/dayscale.days)+ sum(siv0.price*siv0.quantity*(100-a.probability_perc)/100/dayscale.days)
|
||||
,(siv.price*siv.quantity*COALESCE(a.probability_perc,0)/100/dayscale.days) as rec1
|
||||
,(siv0.price*siv0.quantity*(100-COALESCE(a.probability_perc,0))/100/dayscale.days) as rec0
|
||||
--,count(*)
|
||||
|
||||
from (SELECT dd::date as dt
|
||||
, DATE_PART('days', DATE_TRUNC('month', dd) + '1 MONTH'::INTERVAL - '1 DAY'::INTERVAL) days
|
||||
FROM generate_series(
|
||||
'2023-01-01'::timestamp
|
||||
,'2029-12-31'::timestamp
|
||||
,'1 day'::interval) dd
|
||||
) dayscale
|
||||
left join specification_item_version siv on (dayscale.dt >= siv.dt_from AND (siv.dt_to >= dayscale.dt OR siv.dt_to IS NULL))
|
||||
left join specification_item si on (siv.specification_item_uid=si.specification_item_uid AND si.pricing_model_id in (2,3))
|
||||
left join specification s on (si.specification_id=s.specification_id )
|
||||
left join agreement a on (s.contract_id=a.contract_id AND siv.agreement_version=a.agreement_version
|
||||
AND a.agreement_version=(select max(iiv.agreement_version) from specification_item_version iiv
|
||||
join specification_item ii on (iiv.specification_item_uid=ii.specification_item_uid)
|
||||
join specification isp on (ii.specification_id=isp.specification_id)
|
||||
join agreement ia on (isp.contract_id=ia.contract_id AND iiv.agreement_version=ia.agreement_version)
|
||||
where iiv.specification_item_uid=si.specification_item_uid
|
||||
--AND ia.is_actual
|
||||
))
|
||||
join contract d on s.contract_id=d.contract_id
|
||||
join contragent k on d.contragent_id=k.contragent_id
|
||||
join svc on (si.svc_id=svc.svc_id)
|
||||
|
||||
left outer join agreement a0 on (s.contract_id=a0.contract_id AND a0.agreement_version=(select max(iiv.agreement_version) from specification_item_version iiv
|
||||
join specification_item ii on (iiv.specification_item_uid=ii.specification_item_uid)
|
||||
join specification isp on (ii.specification_id=isp.specification_id)
|
||||
join agreement ia on (isp.contract_id=ia.contract_id AND iiv.agreement_version=ia.agreement_version)
|
||||
where iiv.specification_item_uid=si.specification_item_uid
|
||||
AND ia.agreement_version < a.agreement_version
|
||||
AND ia.is_actual
|
||||
))
|
||||
left outer join specification_item_version siv0 on (siv0.specification_item_uid=si.specification_item_uid
|
||||
AND siv0.agreement_version=a0.agreement_version)
|
||||
where 1=1 and d.contragent_id=3
|
||||
order by 1
|
@ -24,18 +24,29 @@ select
|
||||
<d:field title="Месяц" cfSqlType="CF_SQL_TIMESTAMP">m</d:field>
|
||||
<d:field title="Дата" cfSqlType="CF_SQL_TIMESTAMP">dt</d:field>
|
||||
<d:field title="Инсталл" cfSqlType="CF_SQL_NUMERIC">income_install</d:field>
|
||||
<d:field title="Инсталл" cfSqlType="CF_SQL_NUMERIC">inst1</d:field>
|
||||
<d:field title="Инсталл" cfSqlType="CF_SQL_NUMERIC">inst0</d:field>
|
||||
<d:field title="Ежемес" cfSqlType="CF_SQL_NUMERIC">income_recurring</d:field>
|
||||
<d:field title="Ежемес+" cfSqlType="CF_SQL_NUMERIC">rec1+rec0 as rec</d:field>
|
||||
<d:field title="Ежемес" cfSqlType="CF_SQL_NUMERIC">rec1</d:field>
|
||||
<d:field title="Ежемес" cfSqlType="CF_SQL_NUMERIC">rec0</d:field>
|
||||
<d:field title="Выручка" cfSqlType="CF_SQL_NUMERIC">income_install+income_recurring as income</d:field>
|
||||
<d:field title="cnt" cfSqlType="CF_SQL_NUMERIC">cnt</d:field>
|
||||
</d:field_set>
|
||||
from (
|
||||
select
|
||||
--install
|
||||
DATE_TRUNC('month', dayscale.dt)::date as m
|
||||
,dayscale.dt::date
|
||||
,sum(siv.price*siv.quantity*a.probability_perc/100
|
||||
+ COALESCE(siv0.price*siv0.quantity*(100-a.probability_perc)/100, 0)
|
||||
) as income_install
|
||||
,COALESCE(sum(siv.price*siv.quantity*COALESCE(a.probability_perc,0)/100),0)
|
||||
+ COALESCE(sum(siv0.price*siv0.quantity*(100-COALESCE(a.probability_perc,0))/100),0)
|
||||
as income_install
|
||||
,sum(siv.price*siv.quantity*COALESCE(a.probability_perc,0)/100) as inst1
|
||||
,sum(siv0.price*siv0.quantity*(100-COALESCE(a.probability_perc,0))/100) as inst0
|
||||
,0 as income_recurring
|
||||
,0 as rec1
|
||||
,0 as rec0
|
||||
,count(*) as cnt
|
||||
from (SELECT dd::date as dt FROM generate_series(
|
||||
'2023-01-01'::timestamp
|
||||
,'2029-12-31'::timestamp
|
||||
@ -54,7 +65,7 @@ from (
|
||||
join contract d on s.contract_id=d.contract_id
|
||||
join contragent k on d.contragent_id=k.contragent_id
|
||||
join svc on (si.svc_id=svc.svc_id)
|
||||
left outer join agreement a0 on (s.contract_id=a0.contract_id /*AND siv.agreement_version=a0.agreement_version*/ AND a0.agreement_version=(select max(iiv.agreement_version) from specification_item_version iiv
|
||||
left outer join agreement a0 on (s.contract_id=a0.contract_id AND a0.agreement_version=(select max(iiv.agreement_version) from specification_item_version iiv
|
||||
join specification_item ii on (iiv.specification_item_uid=ii.specification_item_uid)
|
||||
join specification isp on (ii.specification_id=isp.specification_id)
|
||||
join agreement ia on (isp.contract_id=ia.contract_id AND iiv.agreement_version=ia.agreement_version)
|
||||
@ -63,7 +74,7 @@ from (
|
||||
AND ia.is_actual
|
||||
))
|
||||
left outer join specification_item_version siv0 on (siv0.specification_item_uid=si.specification_item_uid
|
||||
AND siv0.agreement_version=a0.agreement_version)
|
||||
AND siv0.agreement_version=a0.agreement_version AND (dayscale.dt=siv0.dt_from))
|
||||
where 1=1 <m:filter_build filter=#pageInfo.settings.filter#/>
|
||||
group by dayscale.dt
|
||||
|
||||
@ -74,9 +85,14 @@ from (
|
||||
DATE_TRUNC('month', dayscale.dt)::date as m
|
||||
,dayscale.dt::date
|
||||
,0
|
||||
,sum(siv.price*siv.quantity*a.probability_perc/100/dayscale.days
|
||||
+ COALESCE(siv0.price*siv0.quantity*(100-a.probability_perc)/100/dayscale.days, 0)
|
||||
)
|
||||
,0
|
||||
,0
|
||||
,COALESCE(sum(siv.price*siv.quantity*COALESCE(a.probability_perc,0)/100/dayscale.days),0)
|
||||
+ COALESCE(sum(siv0.price*siv0.quantity*(100-COALESCE(a.probability_perc,0))/100/dayscale.days),0)
|
||||
,sum(siv.price*siv.quantity*COALESCE(a.probability_perc,0)/100/dayscale.days)
|
||||
,sum(siv0.price*siv0.quantity*(100-COALESCE(a.probability_perc,0))/100/dayscale.days)
|
||||
,count(*)
|
||||
|
||||
from (SELECT dd::date as dt
|
||||
, DATE_PART('days', DATE_TRUNC('month', dd) + '1 MONTH'::INTERVAL - '1 DAY'::INTERVAL) days
|
||||
FROM generate_series(
|
||||
@ -84,20 +100,23 @@ from (
|
||||
,'2029-12-31'::timestamp
|
||||
,'1 day'::interval) dd
|
||||
) dayscale
|
||||
join specification_item_version siv on (dayscale.dt >= siv.dt_from AND (siv.dt_to >= dayscale.dt OR siv.dt_to IS NULL))
|
||||
join specification_item si on (siv.specification_item_uid=si.specification_item_uid AND si.pricing_model_id in (2,3))
|
||||
join specification s on (si.specification_id=s.specification_id )
|
||||
join agreement a on (s.contract_id=a.contract_id AND siv.agreement_version=a.agreement_version AND a.agreement_version=(select max(iiv.agreement_version) from specification_item_version iiv
|
||||
left outer join specification_item_version siv on (dayscale.dt >= siv.dt_from AND (siv.dt_to >= dayscale.dt OR siv.dt_to IS NULL))
|
||||
left outer join specification_item si on (siv.specification_item_uid=si.specification_item_uid AND si.pricing_model_id in (2,3))
|
||||
left outer join specification s on (si.specification_id=s.specification_id )
|
||||
left join agreement a on (s.contract_id=a.contract_id AND siv.agreement_version=a.agreement_version
|
||||
AND a.agreement_version=(select max(iiv.agreement_version) from specification_item_version iiv
|
||||
join specification_item ii on (iiv.specification_item_uid=ii.specification_item_uid)
|
||||
join specification isp on (ii.specification_id=isp.specification_id)
|
||||
join agreement ia on (isp.contract_id=ia.contract_id AND iiv.agreement_version=ia.agreement_version)
|
||||
where iiv.specification_item_uid=si.specification_item_uid
|
||||
--AND ia.is_actual
|
||||
AND (dayscale.dt >= iiv.dt_from AND (iiv.dt_to >= dayscale.dt OR iiv.dt_to IS NULL))
|
||||
/*AND ia.is_actual*/
|
||||
))
|
||||
join contract d on s.contract_id=d.contract_id
|
||||
join contragent k on d.contragent_id=k.contragent_id
|
||||
join svc on (si.svc_id=svc.svc_id)
|
||||
left outer join agreement a0 on (s.contract_id=a0.contract_id /*AND siv.agreement_version=a0.agreement_version*/ AND a0.agreement_version=(select max(iiv.agreement_version) from specification_item_version iiv
|
||||
|
||||
left outer join agreement a0 on (s.contract_id=a0.contract_id AND a0.agreement_version=(select max(iiv.agreement_version) from specification_item_version iiv
|
||||
join specification_item ii on (iiv.specification_item_uid=ii.specification_item_uid)
|
||||
join specification isp on (ii.specification_id=isp.specification_id)
|
||||
join agreement ia on (isp.contract_id=ia.contract_id AND iiv.agreement_version=ia.agreement_version)
|
||||
@ -106,7 +125,7 @@ from (
|
||||
AND ia.is_actual
|
||||
))
|
||||
left outer join specification_item_version siv0 on (siv0.specification_item_uid=si.specification_item_uid
|
||||
AND siv0.agreement_version=a0.agreement_version)
|
||||
AND siv0.agreement_version=a0.agreement_version AND (dayscale.dt >= siv0.dt_from AND (siv0.dt_to >= dayscale.dt OR siv0.dt_to IS NULL)))
|
||||
where 1=1 <m:filter_build filter=#pageInfo.settings.filter#/>
|
||||
group by dayscale.dt
|
||||
) install_fix_payg
|
||||
@ -148,7 +167,7 @@ select count(*) as cnt from specification_item where 1=1
|
||||
|
||||
|
||||
|
||||
<div style="display:inline-block; width:30%; vertical-align:top;">
|
||||
<div style="display:inline-block; vertical-align:top;">
|
||||
<cfoutput><b>#qRead.recordCount#</b> записей</cfoutput>
|
||||
<a href="?output_xls" title="экспорт в Excel" style="margin:.5em; height:100%;" target="_blank"><img src="img/xls.gif" style="vertical-align:text-bottom;"/></a>
|
||||
<a href="?output_json" title="экспорт в json" style="margin:.5em; height:100%;" target="_blank"><img src="img/json.svg" style="vertical-align:text-bottom;" width="13" height="13"/></a>
|
||||
@ -160,24 +179,34 @@ select count(*) as cnt from specification_item where 1=1
|
||||
<tr>
|
||||
<th>Дата</th>
|
||||
<th>Инсталл</th>
|
||||
<th>Инсталл 1</th>
|
||||
<th>Инсталл 0</th>
|
||||
<th>Ежемес</th>
|
||||
<th>Ежемес 1</th>
|
||||
<th>Ежемес 0</th>
|
||||
<th>Выручка</th>
|
||||
<th>cnt</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<cfoutput query="qRead">
|
||||
<tr>
|
||||
<td class="c">#dateFormat(dt,"DD.MM.YYYY")#</td>
|
||||
<td class="r">#nFmt(income_install)#</td>
|
||||
<td class="r">#nFmt(income_recurring)#</td>
|
||||
<td class="r">#nFmt(income)#</td>
|
||||
<td class="r">#income_install#</td>
|
||||
<td class="r">#inst1#</td>
|
||||
<td class="r">#inst0#</td>
|
||||
<td class="r">#income_recurring#</td>
|
||||
<td class="r">#rec1#</td>
|
||||
<td class="r">#rec0#</td>
|
||||
<td class="r">#income#</td>
|
||||
<td class="r">#cnt#</td>
|
||||
</tr>
|
||||
</cfoutput>
|
||||
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div style="display:inline-block; width:30%; vertical-align:top;">
|
||||
|
||||
<div style="display:inline-block; vertical-align:top;">
|
||||
|
||||
<cfquery dbtype="query" name="qMonthly">
|
||||
select m
|
||||
|
@ -134,7 +134,7 @@
|
||||
))
|
||||
left outer join specification_item_version siv0 on (siv0.specification_item_uid=si.specification_item_uid
|
||||
AND siv0.agreement_version=a0.agreement_version)
|
||||
--where 1=1 <m:filter_build filter=#pageInfo.settings.filter#/>
|
||||
where 1=1 <m:filter_build filter=#pageInfo.settings.filter#/>
|
||||
|
||||
order by 1
|
||||
|
||||
|
@ -224,7 +224,7 @@
|
||||
<th></th>
|
||||
<th>Версия N</th>
|
||||
<th>Соглашение</th>
|
||||
<th>Дата соглашения</th>
|
||||
<!--- <th>Дата соглашения</th> --->
|
||||
<th>Согл. действ.</th>
|
||||
<th>Вер-ть%</th>
|
||||
<th>Дата с</th>
|
||||
@ -245,7 +245,7 @@
|
||||
</td>
|
||||
<td class="c"><a href="agreement.cfm?contract_id=#contract_id#&agreement_version=#agreement_version#&#tr.fwx#">#agreement_version#</a></td>
|
||||
<td>#agreement#</td>
|
||||
<td class="c">#dateFormat(dt_agreement,'DD.MM.YYYY')#</td>
|
||||
<!--- <td class="c">#dateFormat(dt_agreement,'DD.MM.YYYY')#</td> --->
|
||||
<td class="c"><cfif is_actual GT 0><img src="img/ok.png"/></cfif></td>
|
||||
<td class="c">#probability_perc#</td>
|
||||
<td class="c">#dateFormat(dt_from, 'DD.MM.YYYY')#</td>
|
||||
|
@ -168,7 +168,7 @@
|
||||
<!--- <layout:detail_line title="Версия">#d.agreement_version# (версия-номер соглашения)</layout:detail_line> --->
|
||||
<layout:detail_line title="Версия">
|
||||
<cfquery name="qList" datasource="#request.DS#">
|
||||
select a.agreement_version, a.agreement, a.dt_agreement
|
||||
select a.agreement_version, a.agreement, a.dt_agreement, a.probability_perc
|
||||
from agreement a
|
||||
where a.contract_id=<cfqueryparam cfsqltype="cf_sql_integer" value="#qSpecificationItem.contract_id#" null=#!isValid('integer',qSpecificationItem.contract_id)#/>
|
||||
order by 1 desc
|
||||
@ -179,7 +179,7 @@
|
||||
id="agreement_version"
|
||||
key="agreement_version"
|
||||
selected="#d.agreement_version#"
|
||||
displayf="##agreement## [##agreement_version##] ##dateFormat(dt_agreement,'DD.MM.YYYY')##"
|
||||
displayf="##agreement## [##agreement_version##] ##dateFormat(dt_agreement,'DD.MM.YYYY')## ##probability_perc##%"
|
||||
class=""
|
||||
/>
|
||||
(версия-номер соглашения)
|
||||
|
Loading…
Reference in New Issue
Block a user