015 probability A B

This commit is contained in:
msyu 2025-06-25 08:51:55 +03:00
parent 0634f4b6c7
commit 7d0e2abc0f
4 changed files with 235 additions and 68 deletions

View File

@ -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.014"/>
<cfset request.APP_VERSION="0.00.015"/>
<cflock scope="application" type="readonly" timeout=3>
<cfset request.APP_NAME=this.Name/>

View File

@ -32,12 +32,14 @@ from (
--install
DATE_TRUNC('month', dayscale.dt)::date as m
,dayscale.dt::date
,sum(siv.price*siv.quantity*a.probability_perc/100) as income_install
,sum(siv.price*siv.quantity*a.probability_perc/100
+ COALESCE(siv0.price*siv0.quantity*(100-a.probability_perc)/100, 0)
) as income_install
,0 as income_recurring
from (SELECT dd::date as dt FROM generate_series(
'2023-01-01'::timestamp
, '2029-12-31'::timestamp
, '1 day'::interval) dd
,'2029-12-31'::timestamp
,'1 day'::interval) dd
) dayscale
join specification_item_version siv on (dayscale.dt=siv.dt_from)
join specification_item si on (siv.specification_item_uid=si.specification_item_uid AND si.pricing_model_id in (1))
@ -47,11 +49,22 @@ from (
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 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
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 <m:filter_build filter=#pageInfo.settings.filter#/>
group by dayscale.dt
union all
@ -61,13 +74,15 @@ from (
DATE_TRUNC('month', dayscale.dt)::date as m
,dayscale.dt::date
,0
,sum(siv.price*siv.quantity*a.probability_perc/100/dayscale.days)
,sum(siv.price*siv.quantity*a.probability_perc/100/dayscale.days
+ COALESCE(siv0.price*siv0.quantity*(100-a.probability_perc)/100/dayscale.days, 0)
)
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
'2023-01-01'::timestamp
,'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))
@ -77,17 +92,28 @@ from (
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 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
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 <m:filter_build filter=#pageInfo.settings.filter#/>
group by dayscale.dt
) install_fix_payg
order by dt
<!--- where 1=1 <m:filter_build filter=#pageInfo.settings.filter#/>
order by <m:order_build sortArray=#pageInfo.settings.sort.sortArray# fieldCount=#fieldCount#/> --->
</cfquery>
<!--- <cfdump var=#pageInfo.settings.filter#/> --->
@ -112,10 +138,10 @@ select count(*) as cnt from specification_item where 1=1
<layout:attribute name="title">
<cfoutput><b>Выручка по дням 2023-01-01 .. 2029-12-31</b></cfoutput>
</layout:attribute>
<layout:attribute name="controls">
<!---skip filter link, filter is not implemented--->
<!---<layout:language_switch/>--->
</layout:attribute>
<!--- <layout:attribute name="controls">
skip filter link, filter is not implemented
<layout:language_switch/>
</layout:attribute> --->
</layout:page>
<cfif pageInfo.readPermitted() AND !pageInfo.status.errorState>

View File

@ -12,10 +12,10 @@
<m:prepare_ls entity="specification_item" accessObject="" pageInfoOut="pageInfo" trackOut="tr"/>
<!--- <m:filter_settings target="#pageInfo.entity#_ls">
<m:filter_settings target="#pageInfo.entity#_ls">
<m:filterparam filter=#filter# param="quickfilter" ftype="string" prefix="%" suffix="%" expression="((p.project like ?) OR (p.customer like ?) OR (p.customer_alias like ?) OR (p.specification_item_class_type like ?) OR (p.division like ?) OR (p.performer_short like ?))" default=""/>
</m:filter_settings> --->
<!--- <cfset pageInfo.settings.filter=#filter#/> --->
</m:filter_settings>
<cfset pageInfo.settings.filter=#filter#/>
<cfquery name="qRead" datasource="#request.DS#">
@ -30,59 +30,84 @@ from (
select
--install
DATE_TRUNC('month', dayscale.dt)::date as m
,sum(siv.price*siv.quantity*a.probability_perc/100) as income_install
,sum(siv.price*siv.quantity*a.probability_perc/100
+ COALESCE(siv0.price*siv0.quantity*(100-a.probability_perc)/100, 0)
) as income_install
,0 as income_recurring
from
(SELECT dd::date as dt FROM generate_series
( '2023-01-01'::timestamp
, '2029-12-31'::timestamp
, '1 day'::interval) dd) dayscale
join specification_item_version siv on (dayscale.dt=siv.dt_from)
join specification_item si on (siv.specification_item_uid=si.specification_item_uid AND si.pricing_model_id in (1))
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
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)
group by DATE_TRUNC('month', dayscale.dt)
from
(SELECT dd::date as dt FROM generate_series
( '2023-01-01'::timestamp
, '2029-12-31'::timestamp
, '1 day'::interval) dd) dayscale
join specification_item_version siv on (dayscale.dt=siv.dt_from)
join specification_item si on (siv.specification_item_uid=si.specification_item_uid AND si.pricing_model_id in (1))
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
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 siv.agreement_version=a0.agreement_version 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 <m:filter_build filter=#pageInfo.settings.filter#/>
group by DATE_TRUNC('month', dayscale.dt)
union all
select
select
DATE_TRUNC('month', dayscale.dt)::date as m
,0
,sum(siv.price*siv.quantity*a.probability_perc/100/dayscale.days)
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
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
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)
group by DATE_TRUNC('month', dayscale.dt)
,sum(siv.price*siv.quantity*a.probability_perc/100/dayscale.days
+ COALESCE(siv0.price*siv0.quantity*(100-a.probability_perc)/100/dayscale.days, 0)
)
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
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
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 siv.agreement_version=a0.agreement_version 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 <m:filter_build filter=#pageInfo.settings.filter#/>
group by DATE_TRUNC('month', dayscale.dt)
) install_fix_payg
order by 1
<!--- where 1=1 <m:filter_build filter=#pageInfo.settings.filter#/>
<!---
order by <m:order_build sortArray=#pageInfo.settings.sort.sortArray# fieldCount=#fieldCount#/> --->
</cfquery>
@ -109,10 +134,7 @@ select count(*) as cnt from specification_item where 1=1
<layout:attribute name="title">
<cfoutput><b>Выручка по месяцам 2023-01-01 .. 2029-12-31</b></cfoutput>
</layout:attribute>
<layout:attribute name="controls">
<!---skip filter link, filter is not implemented--->
<!---<layout:language_switch/>--->
</layout:attribute>
</layout:page>
<cfif pageInfo.readPermitted() AND !pageInfo.status.errorState>

View File

@ -0,0 +1,119 @@
<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:silent silent="No">
<m:prepare_filter entity="specification_item" pageInfoOut="pageInfo" trackOut="tr"/>
<m:filter_settings target="specification_item_ls">
<!--- <m:filterparam filter=#filter# param="service_type_id" ftype="numeric" compare="EQ" field="a.service_type_id" default=""/> --->
<m:filterparam filter=#filter# param="contragent_id" ftype="numeric" compare="EQ" field="d.contragent_id" default=""/>
<m:filterparam filter=#filter# param="contract_id" ftype="numeric" compare="EQ" field="d.contract_id" default=""/>
<!--- <m:filterparam filter=#filter# param="is_deleted" ftype="numeric" compare="EQ" field="case when e.is_deleted then 1 else 0 end" default=""/> ---><!--- *** Сделать дефолтом Нет --->
<!--- --->
</m:filter_settings>
<cfif isDefined("resetAndClose") or isDefined("saveAndClose")>
<cflocation url="#tr.backUrl#" addtoken="No"/>
</cfif>
</m:silent><!--- ----------------------------------------------------------------------------
---------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------
---><layout:page section="header" pageInfo=#pageInfo#>
<layout:attribute name="title"><cfoutput>Строки спецификаций - фильтр</cfoutput></layout:attribute>
</layout:page>
<!---<script type="text/javascript"/>
$(document).ready(function() {
try {
$("#customer_id").searchable({maxMultiMatch: 50});
$("#service_manager_id").searchable({maxMultiMatch: 50});
} catch (e) {alert(e)}
});
</script>--->
<cfoutput>
<input type="hidden" name="track" value="#tr.self#"/>
<div class="detail">
<div class="tr">
<div class="th"></div>
<div class="td">
<button type="button" name="reset" onClick="document.location.href='#request.thisPage#?reset=yes&track=#tr.self#'">#i18("Очистить","Clear")#</button>
</div>
</div>
<!--- <div class="tr">
<div class="th">Контрагент</div>
<div class="td">
<input type="text" name="contragent" value="#contragent#" size="50"/>
<i>#i18("по вхождению подстроки","by substring")#</i>
</div>
</div> --->
<div class="tr">
<div class="th">Контрагент</div>
<div class="td" style="vertical-align:top;">
<cfquery name="qList" datasource="#request.DS#">
select contragent_id, contragent
from contragent
order by contragent
</cfquery>
<c:combo
query=#qList#
combo="contragent_id"
id="contragent_id"
key="contragent_id"
displayf="##contragent##"
selected=#contragent_id#
empty=""
/>
</div>
</div>
<div class="tr">
<div class="th">Договор</div>
<div class="td" style="vertical-align:top;">
<cfquery name="qList" datasource="#request.DS#">
select d.contract_id, d.contract, d.dt_contract, k.contragent
from contract d
join contragent k on (d.contragent_id=k.contragent_id)
order by contract
</cfquery>
<c:combo
query=#qList#
combo="contract_id"
id="contract_id"
key="contract_id"
displayf="##contract## ##dateFormat(dt_contract,'DD.MM.YYYY')## [##contract_id##] ##contragent##"
selected=#contract_id#
empty=""
/>
</div>
</div>
<!--- <div class="tr">
<div class="th">Вкл</div>
<div class="td">
<input type="radio" name="is_enabled" id="is_enabled_1" value="1"<cfif #is_enabled# GT 0> checked</cfif>/><label for="is_enabled_1">Да</label>
<input type="radio" name="is_enabled" id="is_enabled_0" value="0"<cfif #is_enabled# EQ 0> checked</cfif>/><label for="is_enabled_0">Нет</label>
<input type="radio" name="is_enabled" id="is_enabled_" value=""<cfif #is_enabled# EQ ""> checked</cfif>/><label for="is_enabled_">Может быть</label>
<i></i>
</div>
</div> --->
</div><!--- detail --->
</cfoutput>
<layout:page section="footer" closeForm="Yes"/>
<!--- <cfdump var=#filter#> --->