spec/modifier.cfm
2025-06-02 16:16:51 +03:00

238 lines
9.1 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<cfsilent>
<cfimport prefix="m" taglib="lib"/>
<cfimport prefix="c" taglib="lib/controls"/>
<cfimport prefix="d" taglib="lib/data"/>
<cfimport prefix="layout" taglib="layout"/>
</cfsilent><m:silent silent="No">
<cffunction name="plain2HtmClean">
<cfargument name="s" type="string"/>
<cfreturn request.plain2htm(request.cleanHtm(s))/>
</cffunction>
<cffunction name="cleanInput">
<cfargument name="s" type="string"/>
<cfreturn htmlEditFormat(s)/>
</cffunction>
<m:prepare_detail entity="modifier" key="modifier_id" pageInfoOut="pageInfo"/>
<d:bean readonly=#!pageInfo.writePermitted()# table="#pageInfo.entity#" datasource="#request.DS#" output="d" status="status">
<d:param field="modifier_id" type="integer" key autoincrement/>
<d:param field="modifier_class_id" type="integer"/>
<d:param field="modifier" type="varchar" size="255" preprocessor=#cleanInput#/>
<d:param field="modifier_en" type="varchar" size="255" preprocessor=#cleanInput#/>
<d:param field="code" type="varchar" size="15" preprocessor=#cleanInput#/>
<d:param field="sort" type="integer" forNull=""/>
<d:param field="descr" type="varchar" preprocessor=#plain2HtmClean#/>
<d:param field="creator_id" type="integer" value="#request.usr_id#" skipUpdate/>
<d:param field="updater_id" type="integer" value="#request.usr_id#" />
<d:param field="dt_created" type="timestamp" value="#Now()#" skipUpdate/>
<d:param field="dt_updated" type="timestamp" value="#Now()#"/>
</d:bean>
<m:dispatch_detail
usePRG="No"<!---*** --->
pageInfo=#pageInfo#
id="#d.modifier_id#"
status=#pageInfo.status#
trackOut="tr"
idAttributesOut="id"
/>
<cfquery name="qUsr" datasource="#request.DS#">
select
a.login as creator, a.shortname as creator_shortname, m.login as updater, m.shortname as updater_shortname
from #pageInfo.entity# e
left outer join usr a on (e.creator_id=a.usr_id)
left outer join usr m on (e.updater_id=m.usr_id)
where e.#pageInfo.key#=<cfqueryparam attributeCollection=#id#/>
</cfquery>
<!--- в данном случае пробуем выделить декорирующий селект, потому что селект упрощенного аудита одинаков для всех сущностей --->
<cfquery name="qDecoration" datasource="#request.DS#">
select
m.modifier_id, c.modifier_class
from modifier m
left outer join modifier_class c on (m.modifier_class_id=c.modifier_class_id)
where m.modifier_id=<cfqueryparam attributeCollection=#id#/>
</cfquery>
</m:silent><!---
------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
---><layout:page section="header" pageInfo=#pageInfo#>
<layout:attribute name="title">
<cfoutput>
Характеристика (модификатор)
<cfif d.modifier_id GT 0>
<b>#qDecoration.modifier_class#</b>
[#d.modifier_class_id#]<cfif len(#qDecoration.modifier_class#) GT 0>:</cfif>
<b>#d.modifier#</b>
[#d.modifier_id#]
</cfif>
</cfoutput>
</layout:attribute>
</layout:page>
<cfif status.errorState GT 0>
<cfoutput><div class="err">#status.errorMessage#</div></cfoutput>
</cfif>
<cfoutput>
<input type="hidden" name="modifier_id" value="#d.modifier_id#"/>
<input type="hidden" name="track" value="#tr.self#"/>
<input type="hidden" name="pass" value=""/><!--- pass marker to prevent save on submit --->
<div class="detail">
<div class="tr">
<div class="th">Класс характеристики</div>
<div class="td">
<cfquery name="qModifierClass" datasource="#request.DS#">
select modifier_class_id, modifier_class
from modifier_class
order by 2
</cfquery>
<c:combo
query=#qModifierClass#
combo="modifier_class_id"
id="modifier_class_id"
key="modifier_class_id"
selected="#d.modifier_class_id#"
displayf="##modifier_class##"
empty=""
class=""
<!---onchange="submit();"--->
/>
<cfif d.modifier_id GT 0>
<cfif d.modifier_class_id GT 0>
<a href="modifier_class.cfm?modifier_class_id=#d.modifier_class_id#&#tr.fwx#">
<img src="img/edit.gif"/>
</a>
</cfif>
<a href="modifier_class.cfm?modifier_class_id=-1&#tr.fwx#">
<img src="img/add.gif"/>
</a>
</cfif>
</div>
</div>
<div class="tr">
<div class="th">Характеристика (RUS)</div>
<div class="td">
<input type="text" name="modifier" value="#d.modifier#" size="70"/>
</div>
</div>
<div class="tr">
<div class="th">Характеристика (ENG)</div>
<div class="td">
<input type="text" name="modifier_en" value="#d.modifier_en#" size="70"/>
</div>
</div>
<div class="tr">
<div class="th">Код</div>
<div class="td">
<input type="text" name="code" value="#d.code#" size="5"/>
</div>
</div>
<div class="tr">
<div class="th">Сортировка</div>
<div class="td">
<input type="text" name="sort" id="sort" value="#d.sort#" size="2" class="r"/>
<i>Целое число - порядок, в котором Характеристика будет выводиться в списке (или соответствующий Вариант услуги в списке вариантов). Рекомендуется ставить через 100, чтобы потом удобнее было тасовать</i>
</div>
</div>
<div class="tr">
<div class="th">Описание</div>
<div class="td">
<textarea name="descr" rows="10" cols="100">#request.htm2plain(d.descr)#</textarea>
</div>
</div>
<div class="tr">
<div class="th">Создано</div>
<div class="td">
#dateFormat(d.dt_created,'DD.MM.YYYY')# #timeFormat(d.dt_created,'HH:MM')#
#qUsr.creator# <cfif len(qUsr.creator_shortname)>(#qUsr.creator_shortname#)</cfif>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Изменено
#dateFormat(d.dt_updated,'DD.MM.YYYY')# #timeFormat(d.dt_updated,'HH:MM')#
#qUsr.updater# <cfif len(qUsr.updater_shortname)>(#qUsr.updater_shortname#)</cfif>
</div>
</div>
</div>
</cfoutput>
<layout:page section="extension" closeForm="Yes"/>
<cfif d.modifier_id GT 0>
<cfquery name="qService" datasource="#request.DS#">
select distinct
s.service_id
,a.abstract_service_id
,a.code as abstract_service_code
,a.abstract_service
,m.modifier
from service s
left outer join modifier m on (s.modifier_id=m.modifier_id)
left outer join abstract_service a on (s.abstract_service_id=a.abstract_service_id)
where s.modifier_id=<cfqueryparam cfsqltype="cf_sql_integer" value="#d.modifier_id#"/>
order by a.code, a.abstract_service
</cfquery>
<cfoutput>
<h4>Используется услугами (#qService.recordCount#)</h4>
</cfoutput>
<table class="worktable">
<thead>
<tr>
<th></th>
<th>Код услуги</th>
<th>Абстрактная услуга</th>
<th>Характеристика</th>
<th></th>
</tr>
</thead>
<cfoutput query="qService">
<tr>
<td>
<c:link_view_edit canWrite=#pageInfo.writePermitted()# entity="service" id=#service_id# fwx=#tr.fwx#/>
</td>
<td>
<cfif abstract_service_id GT 0>#abstract_service_code#.#d.code#</cfif>
</td>
<td>
<cfif abstract_service_id GT 0><a href="abstract_service.cfm?abstract_service_id=#abstract_service_id#&#tr.fwx#">#abstract_service#</a></cfif>
</td>
<td class="c">
#modifier#
</td>
<td class="c">
<c:link_del canWrite=#pageInfo.writePermitted()# entity="service" id=#service_id# fwx=#tr.fwx#/>
</td>
</tr>
</cfoutput>
</table>
</cfif>
<p>Конкретные услуги (варианты услуги) определяются значением характеристики-модификатора. В тривиальном случае услуга может иметь только один вариант. Разные варианты услуги могут иметь различный состав компонентов (более того, этот состав определяется именно для конкретной услуги), например, в разных кластерах виртуализации может быть доступен разный набор типов дисков. </p>
<p>Один и тот же класс модификатора может применяться к разным абстрактным услугам.</p>
<p>Модификатор может состоять из нескольких переменных, например, система виртуализации + частота процессора. В этом случае в справочник нужно включить все актуальные комбинации</p>
<layout:page section="footer"/>