From 7d0e2abc0f3f6137cf331ec2350ac838e82b058f Mon Sep 17 00:00:00 2001 From: msyu Date: Wed, 25 Jun 2025 08:51:55 +0300 Subject: [PATCH] 015 probability A B --- Application.cfc | 2 +- income_daily_rpt.cfm | 56 +++++++++++---- income_monthly_rpt.cfm | 126 ++++++++++++++++++++-------------- specification_item_filter.cfm | 119 ++++++++++++++++++++++++++++++++ 4 files changed, 235 insertions(+), 68 deletions(-) create mode 100644 specification_item_filter.cfm diff --git a/Application.cfc b/Application.cfc index b1ebb53..c0094ec 100644 --- a/Application.cfc +++ b/Application.cfc @@ -69,7 +69,7 @@ - + diff --git a/income_daily_rpt.cfm b/income_daily_rpt.cfm index 58909cb..9231642 100644 --- a/income_daily_rpt.cfm +++ b/income_daily_rpt.cfm @@ -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 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 group by dayscale.dt ) install_fix_payg order by dt - + + @@ -112,10 +138,10 @@ select count(*) as cnt from specification_item where 1=1 Выручка по дням 2023-01-01 .. 2029-12-31 - - - - + diff --git a/income_monthly_rpt.cfm b/income_monthly_rpt.cfm index 3ec37f1..9c61486 100644 --- a/income_monthly_rpt.cfm +++ b/income_monthly_rpt.cfm @@ -12,10 +12,10 @@ - - + + @@ -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 + 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 + group by DATE_TRUNC('month', dayscale.dt) ) install_fix_payg order by 1 - @@ -109,10 +134,7 @@ select count(*) as cnt from specification_item where 1=1 Выручка по месяцам 2023-01-01 .. 2029-12-31 - - - - + diff --git a/specification_item_filter.cfm b/specification_item_filter.cfm new file mode 100644 index 0000000..8f7c385 --- /dev/null +++ b/specification_item_filter.cfm @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + + + + + + + + + Строки спецификаций - фильтр + + + + + +
+ +
+
+
+ +
+
+ + + + +
+
Контрагент
+
+ + select contragent_id, contragent + from contragent + order by contragent + + + +
+
+ +
+
Договор
+
+ + 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 + + + +
+
+ + + + +
+ +
+ + + \ No newline at end of file