From a07522702cdc01e64aed752a4a8dad71d05904bb Mon Sep 17 00:00:00 2001 From: msyu Date: Wed, 18 Jun 2025 09:56:04 +0300 Subject: [PATCH] 002 --- Application.cfc | 2 +- agreement.cfm | 10 +- agreement_ls.cfm | 2 + etc/db/spec.sql | 6 +- etc/spec.txt | 26 +++++ inc/menu.cfm | 1 + specification_item_del.cfm | 11 +- specification_item_ls.cfm | 217 +++++++++++++++++++++++++++++++++++++ 8 files changed, 262 insertions(+), 13 deletions(-) create mode 100644 specification_item_ls.cfm diff --git a/Application.cfc b/Application.cfc index ee243e6..fdad95e 100644 --- a/Application.cfc +++ b/Application.cfc @@ -69,7 +69,7 @@ - + diff --git a/agreement.cfm b/agreement.cfm index 08b282a..a49e43e 100644 --- a/agreement.cfm +++ b/agreement.cfm @@ -32,6 +32,7 @@ + @@ -77,7 +78,7 @@ ---> - Соглашение + Соглашение (сделка) #d.agreement# [#d.agreement_version#] @@ -121,6 +122,13 @@
#d.deal_uid#
+ + +
+
Вероятность
+
+ +
diff --git a/agreement_ls.cfm b/agreement_ls.cfm index 7ab5aed..43d514e 100644 --- a/agreement_ls.cfm +++ b/agreement_ls.cfm @@ -24,6 +24,7 @@ a.contract_id a.agreement_version a.deal_uid + a.probability_perc a.agreement a.dt_agreement a.descr @@ -112,6 +113,7 @@ select count(*) as cnt from agreement where 1=1 + diff --git a/etc/db/spec.sql b/etc/db/spec.sql index 71ef883..9530150 100644 --- a/etc/db/spec.sql +++ b/etc/db/spec.sql @@ -1,6 +1,8 @@ /* - + 2 , : + - , , + - , . */ /* @@ -101,6 +103,7 @@ create table agreement ( ,dt_agreement timestamptz NOT NULL -- , ( , ) ,is_actual boolean NOT NULL -- , 1 - , , , ,deal_uid uuid NOT NULL DEFAULT gen_random_uuid() -- , - + ,probability_perc int NULL ,descr text NULL ,dt_created timestamptz NOT NULL default CURRENT_TIMESTAMP -- @@ -110,6 +113,7 @@ create table agreement ( ,CONSTRAINT PK_agreement PRIMARY KEY (contract_id, agreement_version) ); ALTER TABLE agreement OWNER TO dbo; +--ALTER TABLE agreement ADD probability_perc int NULL; insert into agreement (contract_id,agreement_version,dt_agreement,is_actual) values (1,0,CURRENT_TIMESTAMP,true); -- alter table agreement add deal_uid uuid NOT NULL DEFAULT gen_random_uuid(); CREATE INDEX IF NOT EXISTS UX_deal_uid ON agreement(deal_uid); diff --git a/etc/spec.txt b/etc/spec.txt index 17d3eda..b35f840 100644 --- a/etc/spec.txt +++ b/etc/spec.txt @@ -1,4 +1,25 @@ +2025-06-17 09:07:46 2025-06-16 10:58:02 +select + a.deal_uid +,k.contract +,a.agreement_version +,k.contragent_id +,case when a.agreement_version = 0 then 'New sale' else 'Up sale' as deal_type + +from specification_item_version siv +join specification_item si on (siv.specification_item_uid=si.specification_item_uid) +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) +join contract k on s.contract_id=k.contract_id + +change: +new +change quantity+dicount +delete +change quantity +change dicount + git remote add origin https://gitea.services.ngcloud.ru/smishchuk/spec.git root@dat-n-smishch1 MINGW64 /d/wwwroot/spec (master) @@ -20,6 +41,10 @@ origin gitea@gitea.services.ngcloud.ru:smishchuk/spec.git (push) Локально, чтобы не загаживать окружение, поместим переменные окружения в реестр [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lucee] "Environment" + +Опубликовал на тестовой платформе +выпустил багфикс + 2025-06-14 11:02:46 Центральный селект select * from specification_item_version siv @@ -31,6 +56,7 @@ join agreement a on (s.contract_id=a.contract_id AND siv.agreement_version=a.agr Как вообще учитывать дату в диффе? Или никак, просто передавать. *** Вероятно, dt_from или dt_to должны быть заполнены (check) + 16:12 12.06.2025 Предлагается использовать конечную дату только для завершения действия всей строки спеки. Тогда ее просто убрать из версии? Некорректно, она же возникает в какой-то версии. Если захочется делать одним соглашением 2 изменения строки, можно соглашению сделать суррогатный ключ, а номер соглашения для версии строки убрать из первичного ключа diff --git a/inc/menu.cfm b/inc/menu.cfm index 25c7d7d..a4ccca4 100644 --- a/inc/menu.cfm +++ b/inc/menu.cfm @@ -15,6 +15,7 @@ + diff --git a/specification_item_del.cfm b/specification_item_del.cfm index 714ea7b..55e1283 100644 --- a/specification_item_del.cfm +++ b/specification_item_del.cfm @@ -53,16 +53,7 @@ trackOut="tr" idAttributesOut="id" /> - - pageInfo=#pageInfo# - id="" - queryString="specification_item_uid=#specification_item_uid#" - defaultBackUrl="specification.cfm?specification_id=#d.specification_item_id#" - status=#pageInfo.status# - trackOut="tr" - idAttributesOut="id" -/> ---> + diff --git a/specification_item_ls.cfm b/specification_item_ls.cfm new file mode 100644 index 0000000..5e5dfa7 --- /dev/null +++ b/specification_item_ls.cfm @@ -0,0 +1,217 @@ + + + + + + + + + + + + + + + + + + + + select /*переделать выборку версий через group by*/ + + a.contract_id + a.agreement_version + a.deal_uid + a.probability_perc + a.agreement + case when a.agreement_version = 0 then 'New sale' else 'Up sale' end as deal_type + + + s.specification + si.specification_id + d.contract + d.dt_contract + k.contragent + siv.specification_item_uid + svc.svc + si.svc_id + si.pricing_model_id + svc.code + siv.dt_from + siv.dt_to + siv.quantity + siv.price + ver.quantity as quantity_prev + ver.price as price_prev + ver.agreement_version as version_prev + COALESCE(siv.price*siv.quantity,0) - COALESCE(ver.price*ver.quantity,0) as cost_diff + (COALESCE(siv.price*siv.quantity,0) - COALESCE(ver.price*ver.quantity,0))*a.probability_perc/100 as cost_diff_prob + + from specification_item_version siv + join specification_item si on (siv.specification_item_uid=si.specification_item_uid) + 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) + 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 (select + siv1.agreement_version + ,siv1.specification_item_uid + ,a1.agreement + ,a1.contract_id + ,a1.dt_agreement + ,a1.is_actual + ,siv1.specification_item_version + ,siv1.quantity + ,siv1.price + ,siv1.dt_from + ,siv1.dt_to + ,ii1.specification_id + from specification_item_version siv1 + join specification_item ii1 on (siv1.specification_item_uid=ii1.specification_item_uid) + join specification is1 on (ii1.specification_id=is1.specification_id) + join agreement a1 on (siv1.agreement_version=a1.agreement_version AND is1.contract_id=a1.contract_id) + ) ver on (si.specification_item_uid=ver.specification_item_uid AND ver.specification_id=s.specification_id + AND ver.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 ia.agreement_version < a.agreement_version + ) + ) + where 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 + ) + + + + + + + + + + + +select count(*) as cnt from specification_item where 1=1 + + + + + + + + + + + + Экземпляры услуг (текущее состояние) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + title="редактировать" class="edit"title="просмотр" class="view"> + + + #deal_uid# + + + #contract# #dateformat(dt_contract,"YYYY-MM-DD")# + + + #specification# + + + #version_prev# + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #gridFooter# + Расчета по дням тут нет. + Дата по на самом деле нигде не используется. + Важное допущение: вероятность прошлой сделки принимается за 100% (то есть изменения имеют смысл только к действующему договору) + + +