From e15f690012daa0daa92a10b824697d69e92958c3 Mon Sep 17 00:00:00 2001 From: msyu Date: Mon, 9 Jun 2025 07:08:56 +0300 Subject: [PATCH] intermediate draft 4 --- agreement.cfm | 10 ++- contract.cfm | 7 +- contragent.cfm | 53 +----------- contragent_ls.cfm | 3 +- layout/detail_line.cfm | 10 +++ measure.cfm | 16 ---- measure_ls.cfm | 3 - specification.cfm | 8 ++ specification_item.cfm | 53 +++++++----- specification_item_version.cfm | 150 +++++++++++++++------------------ 10 files changed, 133 insertions(+), 180 deletions(-) create mode 100644 layout/detail_line.cfm diff --git a/agreement.cfm b/agreement.cfm index 8ce9ec8..0258bd3 100644 --- a/agreement.cfm +++ b/agreement.cfm @@ -160,7 +160,13 @@ Соглашение просто объединяет правки строк спецификации в пакет и оформляет их документом (в случае с допником). То есть версии строк существуют не сами по себе, а связаны с конкретным соглашением. Между прочим, это означает, что в рамках одного доп. соглашения мы не можем сделать 2 изменения строки, например 2 разные цены с разных дат - нужно оформлять отдельными допниками. Можно назвать нулевое соглашение базовым, а остальные дополнительными. (наверное, можно было бы синтезировать базовое соглашение с NULL номером, но NULL проблематично включить в первичный ключ, а любое специальное значение будет нарушать внешний ключ) -Есть ли понятие текущего соглашения? + +Дата соглашения не имеет никакого отношения к датам актуальности строк (это чисто формальное поле) +Предполагается, что даты актуальности строк согласованы с номерами версий (можно обнаруживать и репортить ошибки) + +Поскольку соглашение не может дважды изменить строку спецификации, можно говорить о версии спецификации в соответствии с соглашением + +Есть ли у нас понятие текущего соглашения? Есть ли понятие действующего соглашения, или у нас все действуют, или строки из недействующего соглашения не должны участвовать в цепочке (тогда, видимо, не удастся активировать соглашение задним числом, цепочка может разрушиться) Если к соглашению нет измененных строк спецификации, в нем нет большого смысла (но изменения строк надо к чему-то приписывать). Надо было начать с моделирования данных в таблицах, до интерфейса? @@ -197,7 +203,7 @@ left outer join svc on (i.svc_id=svc.svc_id) where s.contract_id= AND iv.agreement_version= - order by 1 + order by i.specification_id diff --git a/contract.cfm b/contract.cfm index 6d279f5..4a75e97 100644 --- a/contract.cfm +++ b/contract.cfm @@ -148,7 +148,7 @@ s.specification_id ,s.specification ,(select count(*) from specification_item i where i.specification_id=s.specification_id) as item_cnt - ,(select count(*) from specification_version v where v.specification_id=s.specification_id) as version_cnt + /*,(select count(*) from specification_version v where v.specification_id=s.specification_id) as version_cnt*/ from specification s where s.contract_id= order by 1 @@ -172,7 +172,6 @@ Номер спецификации Строк - Версий @@ -185,9 +184,6 @@ #item_cnt# - - #version_cnt# - @@ -216,6 +212,7 @@ + Соглашение - это пакет изменений спецификации. Базовое соглашение соответствует исходной спецификации договора (переход от несуществующей спецификации). Остальные - дополнительным соглашениям. Создание базового соглашения надо автоматизировать, но пока вручную. diff --git a/contragent.cfm b/contragent.cfm index 1641fb1..2189d49 100644 --- a/contragent.cfm +++ b/contragent.cfm @@ -148,7 +148,6 @@ ,d.contract ,d.dt_contract ,(select count(*) from specification s where s.contract_id=d.contract_id) as spec_cnt - ,(select count(distinct resource_realm_id) from resource_realm_access a where a.contract_id=d.contract_id) as res_realm_cnt from contract d where d.contragent_id= order by 1 @@ -165,7 +164,6 @@ Номер договора Дата договора Спецификаций - Ресурсных платформ @@ -182,9 +180,6 @@ #spec_cnt# - - #res_realm_cnt# - @@ -192,52 +187,6 @@ - Доступ к ресурсным платформам предоставляется на уровне договора - - - select - u.usr_id - ,u.login - ,u.firstname - ,u.lastname - ,u.middlename - ,u.email - ,u.idp_usr_uid - from usr u - where u.contragent_id= - order by 1 - - - -

Пользователи (#qContract.recordCount#)

-
- - - - - - - - - - - - - - - - - - - - - - -
ЛогинФ.И.О.e-mailIDP user UID
- - #login##lastname# #firstname# #middlename##email##idp_usr_uid# - -
-
+ \ No newline at end of file diff --git a/contragent_ls.cfm b/contragent_ls.cfm index 465781a..61fce8f 100644 --- a/contragent_ls.cfm +++ b/contragent_ls.cfm @@ -29,7 +29,6 @@ c.is_provider (select count(*) from contract d where d.contragent_id=c.contragent_id) as contract_cnt (select count(*) from specification s join contract d on (s.contract_id=d.contract_id) where d.contragent_id=c.contragent_id) as spec_cnt - (select count(*) from usr u where u.contragent_id=c.contragent_id) as usr_cnt from contragent c where 1=1 @@ -86,6 +85,7 @@ select count(*) as cnt from contragent where 1=1 + title="редактировать" class="edit"title="просмотр" class="view"> @@ -107,7 +107,6 @@ select count(*) as cnt from contragent where 1=1 - diff --git a/layout/detail_line.cfm b/layout/detail_line.cfm new file mode 100644 index 0000000..7381cbb --- /dev/null +++ b/layout/detail_line.cfm @@ -0,0 +1,10 @@ + + + +
+
#ATTRIBUTES.title#
+
\ No newline at end of file diff --git a/measure.cfm b/measure.cfm index ab628da..9369069 100644 --- a/measure.cfm +++ b/measure.cfm @@ -21,8 +21,6 @@ - - @@ -93,20 +91,6 @@ -
-
Сокращение английское
-
- -
-
- -
-
Описание
-
- -
-
-
Создано
diff --git a/measure_ls.cfm b/measure_ls.cfm index 1be8748..5b237ea 100644 --- a/measure_ls.cfm +++ b/measure_ls.cfm @@ -19,7 +19,6 @@ m.measure_id m.measure m.measure_short - m.measure_short_en from measure m where 1=1 @@ -77,7 +76,6 @@ select count(*) as cnt from measure where 1=1 - @@ -88,7 +86,6 @@ select count(*) as cnt from measure where 1=1 #measure# #measure_short# - #measure_short_en# diff --git a/specification.cfm b/specification.cfm index 2d90f91..6e2c364 100644 --- a/specification.cfm +++ b/specification.cfm @@ -144,6 +144,7 @@ + select i.specification_item_uid @@ -200,6 +201,13 @@ + Здесь отсутствуют версионные поля - цена, количество, название для печати. + Если бы они были - это получилась бы версия спецификации. + Как сущности версии спецификации нет. + Можно синтезировать версию спецификации на произвольную дату, а можно по версии определенного соглашения (это должно быть возмозно, потому что соглашение меняет каждую строку не более 1 раза + ) + Спецификация по версии соглашения не учитывает is_actual этого соглашения, но учитывает предыдущие + *** Собственно, нам нужно для илюстрации версионности как раз синтезировать спецификацию на дату и спецификацию по версии согдашения diff --git a/specification_item.cfm b/specification_item.cfm index c20a299..47b76f3 100644 --- a/specification_item.cfm +++ b/specification_item.cfm @@ -21,7 +21,7 @@ - + @@ -39,8 +39,12 @@ /> - select s.specification_id, s.specification + select s.specification_id, s.specification, s.contract_id + ,d.contract, d.dt_contract, d.contragent_id + ,k.contragent from specification s + join contract d on (s.contract_id=d.contract_id) + join contragent k on (d.contragent_id=k.contragent_id) where s.specification_id= @@ -90,9 +94,11 @@
@@ -161,10 +167,10 @@ ,a.dt_agreement ,a.is_actual from specification_item_version siv - join specification_item i on (siv.specification_item_uid=i.specification_item_uid) - join specification s on (i.specification_id=s.specification_id) - join contract d on (s.contract_id=d.contract_id) - join agreement a on (siv.agreement_version=a.agreement_version AND s.contract_id=a.contract_id) + left join specification_item i on (siv.specification_item_uid=i.specification_item_uid) + left join specification s on (i.specification_id=s.specification_id) + left join contract d on (s.contract_id=d.contract_id) + left join agreement a on (siv.agreement_version=a.agreement_version AND s.contract_id=a.contract_id) where siv.specification_item_uid= order by siv.agreement_version desc @@ -177,7 +183,7 @@ вопрос, где мы возьмем agreement_version? Или соглашение создавать автоматически? +

@@ -186,12 +192,14 @@ - Версия - Допник + Версия N + Соглашение + Дата соглашения + Действует Дата с - Дата по + Дата по Услуга (для печати) - Количество + Кол-во Цена @@ -199,19 +207,24 @@ - + - #agreement_version# + #agreement_version# #agreement# - < - #quantity# - + #dateFormat(dt_agreement,'DD.MM.YYYY')# + + #dateFormat(dt_from, 'DD.MM.YYYY')# + #dateFormat(dt_to, 'DD.MM.YYYY')# + #specification_item_version# + #quantity# #price# - - + + + + diff --git a/specification_item_version.cfm b/specification_item_version.cfm index 848d9dc..c790230 100644 --- a/specification_item_version.cfm +++ b/specification_item_version.cfm @@ -16,17 +16,17 @@ - + - - - - + + + + @@ -48,7 +48,10 @@ - select s.specification_id, s.specification, i.svc_id, d.contract, d.dt_contract, k.contragent, v.svc + select i.svc_id, v.svc + ,s.specification_id, s.specification, s.contract_id + ,d.contract, d.dt_contract, d.contragent_id + ,k.contragent from specification_item i left join specification s on (i.specification_id=s.specification_id) left join contract d on (s.contract_id=d.contract_id) @@ -127,85 +130,74 @@ - +
+ + #qSpecificationItem.specification#[#qSpecificationItem.specification_id#] + #qSpecificationItem.contract# #dateFormat(qSpecificationItem.dt_contract,'DD.MM.YYYY')# + #qSpecificationItem.contragent# + -
-
Спецификация (номер)
- -
+ + [#d.specification_item_uid#] #qSpecificationItem.svc# + - - -
-
Версия
-
- - #d.agreement_version# -
-
+ + + + select a.agreement_version, a.agreement, a.dt_agreement + from agreement a + where a.contract_id= + order by 1 + + + (версия-номер соглашения) + -
-
Имя для печати
-
- - - -
-
+ + + + -
-
Количество
-
+ + + + + + + + + + + -
-
- -
-
Цена
-
- - -
-
+ + + + + + + + #dateFormat(d.dt_created,'DD.MM.YYYY')# #timeFormat(d.dt_created,'HH:MM')# + #qDecoration.creator# (#qDecoration.creator_shortname#) +       + Изменено + #dateFormat(d.dt_updated,'DD.MM.YYYY')# #timeFormat(d.dt_updated,'HH:MM')# + #qDecoration.updater# (#qDecoration.updater_shortname#) + -
-
Создано
-
- #dateFormat(d.dt_created,'DD.MM.YYYY')# #timeFormat(d.dt_created,'HH:MM')# - #qDecoration.creator# (#qDecoration.creator_shortname#) -       - Изменено - #dateFormat(d.dt_updated,'DD.MM.YYYY')# #timeFormat(d.dt_updated,'HH:MM')# - #qDecoration.updater# (#qDecoration.updater_shortname#) -
-
@@ -213,7 +205,7 @@ - +

- +
@@ -271,12 +263,10 @@ -
+ --->
-*** Можно переделать на прямой ввод в форму. Можно однородные позиции выбирать из списка, но тогда вариант выбрать 2 разных интерфейсно непонятно как реализовывать. -поскольку спека только для демонстрации, может этого и не делать? -Цену базовую показать +Здесь могли бы быть компоненты (но мы их пока не запилили)