intermediate draft 3

This commit is contained in:
msyu 2025-06-06 18:11:05 +03:00
parent 535ac713c6
commit c1e32d840b
3 changed files with 22 additions and 20 deletions

View File

@ -159,7 +159,7 @@
</div> </div>
</div> </div>
Соглашение просто объединяет правки строк спецификации в пакет и оформляет их документом (в случае с допником). То есть версии строк существуют не сами по себе, а связаны с конкретным соглашением. Между прочим, это означает, что в рамках одного доп. соглашения мы не можем сделать 2 изменения строки, например 2 разные цены с разных дат - нужно оформлять отдельными допниками. Соглашение просто объединяет правки строк спецификации в пакет и оформляет их документом (в случае с допником). То есть версии строк существуют не сами по себе, а связаны с конкретным соглашением. Между прочим, это означает, что в рамках одного доп. соглашения мы не можем сделать 2 изменения строки, например 2 разные цены с разных дат - нужно оформлять отдельными допниками.
Можно назвать нулевое соглашение базовым, а остальные дополнительными. (наверное, можно было бы синтезировать базовое соглашение с NULL номером) Можно назвать нулевое соглашение базовым, а остальные дополнительными. (наверное, можно было бы синтезировать базовое соглашение с NULL номером, но NULL проблематично включить в первичный ключ, а любое специальное значение будет нарушать внешний ключ)
Есть ли понятие текущего соглашения? Есть ли понятие текущего соглашения?
Есть ли понятие действующего соглашения, или у нас все действуют, или строки из недействующего соглашения не должны участвовать в цепочке (тогда, видимо, не удастся активировать соглашение задним числом, цепочка может разрушиться) Есть ли понятие действующего соглашения, или у нас все действуют, или строки из недействующего соглашения не должны участвовать в цепочке (тогда, видимо, не удастся активировать соглашение задним числом, цепочка может разрушиться)
Если к соглашению нет измененных строк спецификации, в нем нет большого смысла (но изменения строк надо к чему-то приписывать). Если к соглашению нет измененных строк спецификации, в нем нет большого смысла (но изменения строк надо к чему-то приписывать).
@ -172,8 +172,8 @@
<cfif d.agreement_version GE 0> <cfif d.agreement_version GE 0>
<cfquery name="qItem" datasource="#request.DS#"> <cfquery name="qItem" datasource="#request.DS#">
select select
i.specification_item_uid iv.specification_item_uid
i.agreement_version /*лучше читается, когда все берется из резалтсета*/ ,iv.agreement_version /*лучше читается, когда все одинаково берется из резалтсета*/
,i.svc_id ,i.svc_id
,svc.svc ,svc.svc
,svc.code ,svc.code

View File

@ -4,35 +4,36 @@
<cfimport prefix="layout" taglib="layout"/> <cfimport prefix="layout" taglib="layout"/>
</cfsilent><m:silent silent="No"> </cfsilent><m:silent silent="No">
<m:prepare_detail entity="abstract_service" pageInfoOut="pageInfo"/> <m:prepare_detail entity="agreement" pageInfoOut="pageInfo"/>
<cfparam name="abstract_service_id" type="integer"/> <cfparam name="agreement_id" type="integer"/>
<d:del <d:del
entity="#pageInfo.entity#" entity="#pageInfo.entity#"
confirmMessage="Удалить абстрактную услугу?" confirmMessage="Удалить соглашение?"
denyMessage="Удаление данной абстрактной услуги невозможно (есть конкретные услуги)." denyMessage="Удаление данного соглашения невозможно (есть версии строк спецификации)."
accessObj="#pageInfo.entity#" accessObj="#pageInfo.entity#"
status="status" status="status"
output="markup"> output="markup">
<d:dependency entity="service" title="Конкретные услуги"> <d:dependency entity="specification_item_version" title="Версии строк спецификации">
<d:dependency_field key>s.service_id</d:dependency_field> <d:dependency_field key>siv.specification_item_uid</d:dependency_field>
<d:dependency_field key>siv.agreement_version</d:dependency_field>
<d:dependency_field title="Характеристика">m.modifier</d:dependency_field> <d:dependency_field title="Характеристика">m.modifier</d:dependency_field>
<d:dependency_from> <d:dependency_from>
service s specification_item_version siv
left outer join modifier m on (s.modifier_id=m.modifier_id) left outer join modifier m on (s.modifier_id=m.modifier_id)
</d:dependency_from> </d:dependency_from>
<d:dependency_condition cfsqltype="cf_sql_integer" value='#abstract_service_id#'>s.abstract_service_id</d:dependency_condition> <d:dependency_condition cfsqltype="cf_sql_integer" value='#agreement_id#'>s.agreement_id</d:dependency_condition>
<d:dependency_order_by>2 desc</d:dependency_order_by> <d:dependency_order_by>2 desc</d:dependency_order_by>
</d:dependency> </d:dependency>
<d:del_condition field="abstract_service_id" value="#abstract_service_id#" cfsqltype="cf_sql_integer"/> <d:del_condition field="agreement_id" value="#agreement_id#" cfsqltype="cf_sql_integer"/>
</d:del> </d:del>
<m:dispatch_detail <m:dispatch_detail
usePRG="Yes" usePRG="Yes"
pageInfo=#pageInfo# pageInfo=#pageInfo#
id="#abstract_service_id#" id="#agreement_id#"
status=#status# status=#status#
trackOut="tr" trackOut="tr"
idAttributesOut="id" idAttributesOut="id"
@ -40,9 +41,9 @@
<!--- decoration ---> <!--- decoration --->
<cfquery name="qDecoration" datasource="#request.DS#"> <cfquery name="qDecoration" datasource="#request.DS#">
select a.code, a.abstract_service select a.code, a.agreement
FROM abstract_service a FROM agreement a
where a.abstract_service_id=<cfqueryparam cfsqltype="cf_sql_integer" value="#abstract_service_id#" null=#!isValid("integer", abstract_service_id)#/> where a.agreement_id=<cfqueryparam cfsqltype="cf_sql_integer" value="#agreement_id#" null=#!isValid("integer", agreement_id)#/>
</cfquery> </cfquery>
@ -53,9 +54,9 @@
<layout:attribute name="title"> <layout:attribute name="title">
<cfoutput> <cfoutput>
Удаление абстрактной услуги (номенклатурной позиции, строки каталога услуг) Удаление абстрактной услуги (номенклатурной позиции, строки каталога услуг)
#qDecoration.abstract_service# #qDecoration.agreement#
<cfif abstract_service_id GT 0> <cfif agreement_id GT 0>
[#abstract_service_id#] [#agreement_id#]
</cfif> </cfif>
</cfoutput> </cfoutput>
</layout:attribute> </layout:attribute>

View File

@ -216,6 +216,7 @@
<button type="button" class="maincontrol" onclick="document.location.href='#addUrl#'"> <button type="button" class="maincontrol" onclick="document.location.href='#addUrl#'">
<a href="#addUrl#">Создать</a> <a href="#addUrl#">Создать</a>
</button> </button>
Создание базового соглашения надо автоматизировать, но пока вручную.
</cfoutput> </cfoutput>
</cfif> </cfif>
@ -245,7 +246,7 @@
</tr> </tr>
</cfoutput> </cfoutput>
</table> </table>
любопытное последствие использования составного ключа: отпадает желание делать для сущности самостоятельный реестр (может быть, только если есть явная сущность-владелец, как договор для соглашения) любопытное последствие использования составного ключа: отпадает желание делать для сущности самостоятельный реестр (может быть, только если есть явная сущность-владелец, как договор для соглашения). Это аналогично отразится на структуре ReST API URL, если вдруг
</cfif> </cfif>
<layout:page section="extension" closeForm="Yes"/> <!--- *** правильно так? ---> <layout:page section="extension" closeForm="Yes"/> <!--- *** правильно так? --->