diff --git a/Application.cfc b/Application.cfc index b85ec57..14a7217 100644 --- a/Application.cfc +++ b/Application.cfc @@ -69,7 +69,7 @@ - + diff --git a/agreement.cfm b/agreement.cfm index 81e4b15..5dce522 100644 --- a/agreement.cfm +++ b/agreement.cfm @@ -218,7 +218,7 @@ - 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 <= + where iiv.specification_item_uid=i.specification_item_uid + AND iiv.agreement_version <= ) order by i.specification_id @@ -322,6 +321,7 @@ Имя для печати Модель + Версия Дата с Дата по Кол-во @@ -346,7 +346,7 @@ - "edit""view"> + "edit""view"> #specification# @@ -363,6 +363,7 @@ #specification_item_version# #pricing_model_short# + #agreement_version# #dateFormat(dt_from,'DD.MM.YYYY')# #dateFormat(dt_to,'DD.MM.YYYY')# @@ -383,7 +384,7 @@ - + diff --git a/etc/db/2.sql b/etc/db/2.sql new file mode 100644 index 0000000..5aade98 --- /dev/null +++ b/etc/db/2.sql @@ -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 diff --git a/income_daily_rpt.cfm b/income_daily_rpt.cfm index be9b007..6c209ac 100644 --- a/income_daily_rpt.cfm +++ b/income_daily_rpt.cfm @@ -24,18 +24,29 @@ select m dt income_install + inst1 + inst0 income_recurring + rec1+rec0 as rec + rec1 + rec0 income_install+income_recurring as income + cnt 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 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 group by dayscale.dt ) install_fix_payg @@ -148,7 +167,7 @@ select count(*) as cnt from specification_item where 1=1 -
+
#qRead.recordCount# записей @@ -160,24 +179,34 @@ select count(*) as cnt from specification_item where 1=1 Дата Инсталл + Инсталл 1 + Инсталл 0 Ежемес + Ежемес 1 + Ежемес 0 Выручка + cnt #dateFormat(dt,"DD.MM.YYYY")# - #nFmt(income_install)# - #nFmt(income_recurring)# - #nFmt(income)# + #income_install# + #inst1# + #inst0# + #income_recurring# + #rec1# + #rec0# + #income# + #cnt#
- -
+  +
select m diff --git a/income_data.cfm b/income_data.cfm index d286e29..79f77e2 100644 --- a/income_data.cfm +++ b/income_data.cfm @@ -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 + where 1=1 order by 1 diff --git a/specification_item.cfm b/specification_item.cfm index 71b992c..3ec952d 100644 --- a/specification_item.cfm +++ b/specification_item.cfm @@ -224,7 +224,7 @@ Версия N Соглашение - Дата соглашения + Согл. действ. Вер-ть% Дата с @@ -245,7 +245,7 @@ #agreement_version# #agreement# - #dateFormat(dt_agreement,'DD.MM.YYYY')# + #probability_perc# #dateFormat(dt_from, 'DD.MM.YYYY')# diff --git a/specification_item_version.cfm b/specification_item_version.cfm index 097b1bd..57944c7 100644 --- a/specification_item_version.cfm +++ b/specification_item_version.cfm @@ -168,7 +168,7 @@ - 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= 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="" /> (версия-номер соглашения)