diff --git a/agreement.cfm b/agreement.cfm index d9843e1..88c9e14 100644 --- a/agreement.cfm +++ b/agreement.cfm @@ -31,6 +31,7 @@ + @@ -113,6 +114,13 @@
#d.agreement_version# (некорректный нейминг, в одном месте версией называется номер, а в другом сущность, и это отразилось в именовании таблиц и полей)
+ + +
+
Ключ сделки
+
+ #d.deal_uid# +
@@ -181,6 +189,8 @@ iv.specification_item_uid ,iv.agreement_version /*лучше читается, когда все одинаково берется из резалтсета*/ ,i.svc_id + ,i.pricing_model_id + ,p.pricing_model_short ,svc.svc ,svc.code ,iv.specification_item_version /*it is printable name not number*/ @@ -195,12 +205,48 @@ ,d.dt_contract ,d.contragent_id ,k.contragent + ,ver.agreement_version as prev_version + ,ver.price as prev_price + ,ver.quantity as prev_quantity + ,ver.dt_from as prev_dt_from + ,ver.dt_to as prev_dt_to + ,case when ver.agreement_version IS NULL then 'new' else 'change' end as change_type /*удалить услугу нельзя, можно только завершить ее оказание (после этого в более поздних версиях она должна стать незаметной)*/ + ,COALESCE(iv.price*iv.quantity,0) - COALESCE(ver.price*ver.quantity,0) as cost_diff + from specification_item_version iv join specification_item i on (iv.specification_item_uid=i.specification_item_uid) + join pricing_model p on (i.pricing_model_id=p.pricing_model_id) join specification s on (i.specification_id=s.specification_id) join contract d on (s.contract_id=d.contract_id) join contragent k on (d.contragent_id=k.contragent_id) left outer join svc on (i.svc_id=svc.svc_id) + left outer join (select + siv.agreement_version + ,siv.specification_item_uid + ,a.agreement + ,a.contract_id + ,a.dt_agreement + ,a.is_actual + ,siv.specification_item_version + ,siv.quantity + ,siv.price + ,siv.dt_from + ,siv.dt_to + ,ii1.specification_id + from specification_item_version siv + join specification_item ii1 on (siv.specification_item_uid=ii1.specification_item_uid) + join specification is1 on (ii1.specification_id=is1.specification_id) + join agreement a on (siv.agreement_version=a.agreement_version AND is1.contract_id=a.contract_id) + 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=siv.specification_item_uid + AND ia.is_actual + AND ia.agreement_version < + ) + ) ver on (iv.specification_item_uid=ver.specification_item_uid AND ver.specification_id=s.specification_id) where s.contract_id= AND iv.agreement_version= order by i.specification_id @@ -215,17 +261,32 @@ - Спецификация + Специф-я Договор Контрагент Стабильный ключ строки Услуга + Модель Код услуги Имя для печати + Дата с Дата по Кол-во - Цена + Цена + +   + + Прошлая версия + + Прошлая дата с + Прошлая дата по + Прошлое кол-во + Прошлая цена + + Изменение + Прибавка стоимости + @@ -245,12 +306,26 @@ #svc# + #pricing_model_short# #code# #specification_item_version# - #dateFormat(dt_from,'DD.MM.YYYY')# - #dateFormat(dt_to,'DD.MM.YYYY')# - #quantity# - #price# + + #dateFormat(dt_from,'DD.MM.YYYY')# + #dateFormat(dt_to,'DD.MM.YYYY')# + #quantity# + #price# + + + + #prev_version# + #dateFormat(prev_dt_from,'DD.MM.YYYY')# + #dateFormat(prev_dt_to,'DD.MM.YYYY')# + #prev_quantity# + #prev_price# + + #change_type# + #cost_diff# + @@ -259,6 +334,7 @@ + Может быть, сюда для ясности добавить не измененые строки спецификаций? diff --git a/deal_diff_json.cfm b/deal_diff_json.cfm index fb03d68..d790825 100644 --- a/deal_diff_json.cfm +++ b/deal_diff_json.cfm @@ -8,6 +8,31 @@ + select diff --git a/etc/db/spec.sql b/etc/db/spec.sql index 067c9c0..9b685c3 100644 --- a/etc/db/spec.sql +++ b/etc/db/spec.sql @@ -14,6 +14,8 @@ create table measure ( ,dt_created timestamp NOT NULL default CURRENT_TIMESTAMP -- ,dt_updated timestamp NOT NULL default CURRENT_TIMESTAMP -- ); +ALTER TABLE measure OWNER TO dbo; + insert into measure (measure, measure_short) values ('','.'); insert into measure (measure, measure_short) values ('',''); insert into measure (measure, measure_short) values ('-','-'); @@ -22,6 +24,28 @@ insert into measure (measure, measure_short) values (' insert into measure (measure, measure_short) values ('10000 .','10..'); +drop table if exists pricing_model; +create table pricing_model ( + pricing_model_id int PRIMARY KEY NOT NULL + ,pricing_model varchar(255) NOT NULL + ,pricing_model_short varchar(255) NOT NULL -- , + ,pricing_model_code char(1) NOT NULL -- + ,descr text NULL + + ,creator_id int NULL + ,updater_id int NULL + ,dt_created timestamp NOT NULL default CURRENT_TIMESTAMP -- + ,dt_updated timestamp NOT NULL default CURRENT_TIMESTAMP -- +); +insert into pricing_model (pricing_model_id, pricing_model, pricing_model_short, pricing_model_code, descr) +values (1, '', 'install', 'i', ' '); +insert into pricing_model (pricing_model_id, pricing_model, pricing_model_short, pricing_model_code, descr) +values (2, '', 'fix', 'f', ' (), allocation reservation. , , , . Allocation Fix.'); +insert into pricing_model (pricing_model_id, pricing_model, pricing_model_short, pricing_model_code, descr) +values (3, ' ', 'metered', 'm',' , metered, PAYG'); +ALTER TABLE pricing_model OWNER TO dbo; + + drop table if exists contragent CASCADE; create table contragent ( contragent_id int GENERATED BY DEFAULT AS IDENTITY NOT NULL PRIMARY KEY @@ -126,6 +150,7 @@ create table specification_item ( specification_item_uid uuid NOT NULL PRIMARY KEY DEFAULT gen_random_uuid() -- ,specification_id int NOT NULL --FK ,svc_id int NOT NULL --immutable + ,pricing_model_id int NOT NULL --immutable ,creator_id int NULL ,updater_id int NULL @@ -133,6 +158,7 @@ create table specification_item ( ,dt_updated timestamp NOT NULL default CURRENT_TIMESTAMP -- ); ALTER TABLE specification_item OWNER TO dbo; +--ALTER TABLE specification_item ADD pricing_model_id int NOT NULL default 2; -- ( ) drop table if exists specification_item_version CASCADE; @@ -151,8 +177,10 @@ create table specification_item_version ( ,dt_created timestamp NOT NULL default CURRENT_TIMESTAMP -- ,dt_updated timestamp NOT NULL default CURRENT_TIMESTAMP -- ,CONSTRAINT PK_specification_item_version PRIMARY KEY (specification_item_uid, agreement_version) + ,CONSTRAINT CK_specification_item_version_dt CHECK NOT(dt_from IS NULL AND dt_to IS NULL) ); ALTER TABLE specification_item OWNER TO dbo; +-- ALTER TABLE specification_item_version ADD CONSTRAINT CK_specification_item_version_dt CHECK(NOT(dt_from IS NULL AND dt_to IS NULL)); -- () , drop table if exists specification_item_param CASCADE; diff --git a/etc/spec.txt b/etc/spec.txt index 57fed07..c0af17b 100644 --- a/etc/spec.txt +++ b/etc/spec.txt @@ -7,6 +7,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 Предлагается использовать конечную дату только для завершения действия всей строки спеки. Тогда ее просто убрать из версии? Некорректно, она же возникает в какой-то версии. diff --git a/specification.cfm b/specification.cfm index 43ee26e..9c7a9a6 100644 --- a/specification.cfm +++ b/specification.cfm @@ -153,8 +153,9 @@ ,svc.code ,s.specification_id ,s.contract_id - - + ,i.pricing_model_id + ,p.pricing_model_short + ,(select siv.agreement_version from specification_item_version siv join agreement a on (siv.agreement_version=a.agreement_version AND a.contract_id=s.contract_id) where siv.specification_item_uid=i.specification_item_uid AND a.is_actual @@ -193,6 +194,7 @@ order by siv.agreement_version desc limit 1) as dt_to ,(select count(*) from specification_item_version siv where siv.specification_item_uid=i.specification_item_uid) as item_version_count from specification_item i + join pricing_model p on (i.pricing_model_id=p.pricing_model_id) join specification s on (i.specification_id=s.specification_id) --left outer join () left outer join svc on (i.svc_id=svc.svc_id) @@ -220,6 +222,7 @@ Ключ строки Услуга + Модель Код услуги Версий   @@ -241,6 +244,7 @@ #specification_item_uid# #svc# + #pricing_model_short# #code# #item_version_count# diff --git a/specification_item.cfm b/specification_item.cfm index 65b0d75..41f680c 100644 --- a/specification_item.cfm +++ b/specification_item.cfm @@ -21,6 +21,7 @@ + @@ -126,7 +127,31 @@ displayf="##code## ##svc##" empty="" class="" - onchange="submit();" + /> + + при наличии версий предлагается исключить изменение +
+ + +
+
Модель тарификации
+
+ + select s.pricing_model_id, s.pricing_model, s.pricing_model_short + from pricing_model s + order by 2 + + diff --git a/specification_version.cfm b/specification_version.cfm index c508eaa..1d68ff1 100644 --- a/specification_version.cfm +++ b/specification_version.cfm @@ -195,6 +195,8 @@ ,svc.svc_id ,svc.svc ,svc.code + ,i.pricing_model_id + ,p.pricing_model_short ,s.specification_id ,s.contract_id ,(select count(*) from specification_item_version siv where siv.specification_item_uid=i.specification_item_uid) as item_version_count @@ -209,6 +211,7 @@ ,ver.dt_from ,ver.dt_to from specification_item i + join pricing_model p on (i.pricing_model_id=p.pricing_model_id) join specification s on (i.specification_id=s.specification_id) join (select siv.agreement_version @@ -238,7 +241,7 @@ AND ia.agreement_version <= ) - ) ver on (i.specification_item_uid=ver.specification_item_uid AND s.contract_id=ver.contract_id AND ver.specification_id=s.specification_id) + ) ver on (i.specification_item_uid=ver.specification_item_uid /*AND s.contract_id=ver.contract_id*/ AND ver.specification_id=s.specification_id) left outer join svc on (i.svc_id=svc.svc_id) where i.specification_id= @@ -267,6 +270,7 @@ Ключ строки Услуга + Модель Код услуги Версий   @@ -288,6 +292,7 @@ #specification_item_uid# #svc# + #pricing_model_short# #code# #item_version_count#