018 fine debug

This commit is contained in:
msyu
2025-06-28 17:02:39 +03:00
parent a4f66bf6e8
commit 1c96679c29
7 changed files with 117 additions and 33 deletions
+50 -21
View File
@@ -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;">
&nbsp;
<div style="display:inline-block; vertical-align:top;">
<cfquery dbtype="query" name="qMonthly">
select m