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

336 lines
12 KiB
Plaintext
Raw Permalink 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="param" key="param_id" pageInfoOut="pageInfo"/>
<d:bean readonly=#!pageInfo.writePermitted()# table="param" datasource="#request.DS#" output="d" status="status">
<d:param field="param_id" type="integer" key autoincrement/>
<d:param field="param_class_id" type="integer" forNull=""/>
<d:param field="param" type="varchar" size="255" preprocessor=#cleanInput#/>
<d:param field="param_short" type="varchar" size="255" preprocessor=#cleanInput#/>
<d:param field="param_en" type="varchar" size="255" preprocessor=#cleanInput#/>
<d:param field="param_short_en" type="varchar" size="255" preprocessor=#cleanInput#/>
<!--- <d:param field="show_in_spec" type="bit" default=0 init=1/> --->
<d:param field="measure_id" type="integer" forNull=""/>
<d:param field="precision" type="integer" default="0" init="0"/>
<d:param field="sort" type="integer" init="100" forNull=""/>
<d:param field="code" type="varchar" size="15" preprocessor=#cleanInput# required displayName="Код"/>
<!--- <d:param field="base_price" type="numeric" 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>
<pageInfo.status=#status#/><!--- *** нехорошо путается status и pageInfo.status, из-за этого не ловилась ошибка и происходил непредусмотренный редирект --->
<m:dispatch_detail
usePRG="No"<!---*** --->
pageInfo=#pageInfo#
id="#d.param_id#"
status=#pageInfo.status#
trackOut="tr"
idAttributesOut="id"
/>
<cfquery name="qParamClass" datasource="#request.DS#">
select p.param_class, p.param_class_en, p.measure_id, p.precision, m.measure, m.measure_short
from param_class p
left outer join measure m on (p.measure_id=m.measure_id)
where param_class_id=<cfqueryparam cfsqltype="cf_sql_integer" value="#d.param_class_id#" null=#!isNumeric(d.param_class_id)#/>
</cfquery>
<!--- шаблонирование --->
<cfif NOT d.measure_id GT 0><cfset d.measure_id=qParamClass.measure_id/></cfif>
<cfif NOT d.precision GT 0><cfset d.precision=qParamClass.precision/></cfif>
<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>
</m:silent><!---
------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
---><layout:page section="header" pageInfo=#pageInfo#>
<layout:attribute name="title">
<cfoutput>
Вариант компонента
<cfif d.param_class_id GT 0>
<b>#qParamClass.param_class#</b>
[#d.param_class_id#]
</cfif>
<cfif d.param_id GT 0>
<b><cfif len(d.param) GT 0>#d.param#<cfelse>(пустое наименование)</cfif></b>
[#d.param_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="param_id" value="#d.param_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="qList" datasource="#request.DS#">
select param_class_id, param_class
from param_class
order by 2
</cfquery>
<c:combo
query=#qList#
combo="param_class_id"
id="param_class_id"
key="param_class_id"
selected="#d.param_class_id#"
displayf="##param_class##"
empty=""
class=""
onchange="submit();"
/>
<cfif d.param_id GT 0>
<cfif d.param_class_id GT 0>
<a href="param_class.cfm?param_class_id=#d.param_class_id#&#tr.fwx#">
<img src="img/edit.gif"/>
</a>
</cfif>
<a href="param_class.cfm?param_class_id=-1&#tr.fwx#">
<img src="img/add.gif"/>
</a>
Единица измерения: <b>#qParamClass.measure# (#qParamClass.measure_short#)</b>
Точность: <b>#qParamClass.precision#</b>
</cfif>
</div>
</div>
<div class="tr">
<div class="th">Вариант компонента</div>
<div class="td">
<!--- <cfset m_param=d.param/>
<cfif NOT d.param_id GT 0 <!--- AND NOT len(m_param) GT 0 --->>
<cfset m_param=#qParamClass.param_class#/>
</cfif> --->
<input type="text" name="param" value="#d.param#" size="70"/>
<i>Уточнение к имени компонента. Если в у компонента единственный вариант - оставить пустым</i>
</div>
</div>
<div class="tr">
<div class="th">Сокращение</div>
<div class="td">
<cfset m_param_short=d.param_short/>
<cfif NOT d.param_id GT 0 <!--- AND NOT len(m_param_short) GT 0 --->>
<cfset m_param_short=#qParamClass.param_class#/>
</cfif>
<input type="text" name="param_short" value="#m_param_short#" size="70"/>
<i>Используется при формировании полного названия услуги в спецификации. <br/>
Если у компонента единственный вариант - заполнить именем компонента, но со строчной буквы</i>
</div>
</div>
<div class="tr">
<div class="th">Код</div>
<div class="td">
<input type="text" name="code" value="#d.code#" size="7"/>
</div>
</div>
<div class="tr">
<div class="th i">Полное наименование</div>
<div class="td">
<b>#qParamClass.param_class# #d.param#</b>
<i>Формируется из имени класса и имени компонента (уточненного, если есть варианты)</i>
</div>
</div>
<div class="tr">
<div class="th">Единица измерения</div>
<div class="td">
<cfquery name="qMeasure" datasource="#request.DS#">
select measure_id, measure_short
from measure
order by 2
</cfquery>
<c:combo
query=#qMeasure#
combo="measure_id"
id="measure_id"
key="measure_id"
selected="#d.measure_id#"
displayf="##measure_short##"
empty=""
class=""
/>
<i>Переопределяет единицу измерения компонента</i>
</div>
</div>
<div class="tr">
<div class="th">Точность</div>
<div class="td">
<input type="text" name="precision" value="#d.precision#" size="1" class="r"/>
<i>Количество знаков после запятой, 0 - целое число. Переопределяет точность из компонента</i>
</div>
</div>
<div class="tr">
<div class="th">Сортировка</div>
<div class="td">
<input type="text" name="sort" value="#d.sort#" size="1" class="r"/>
<i>Целое число - порядок, в котором вариант компонента будет выводиться в списках. Рекомендуется ставить через 100, чтобы потом удобнее было тасовать</i>
</div>
</div>
<!--- <div class="tr">
<div class="th">Отображать в спецификации</div>
<div class="td">
не реализовано, потому что вредно
</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.param_id GT 0>
<cfquery name="qService" datasource="#request.DS#">
select distinct
s.service_id
,sp.service_param_id
,a.abstract_service_id
,a.code
,g.area_code
,a.abstract_service
,m.modifier
,m.code as modifier_code
,p.param_id
,p.param
,p.code as param_code
,(select count (*) from service_param_price spp where sp.service_param_id=spp.service_param_id) as prc_cnt
from service_param sp
left outer join service s on (sp.service_id=s.service_id)
left outer join param p on (sp.param_id=p.param_id)
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)
left outer join area g on (a.area_id=g.area_id)
where sp.param_id=<cfqueryparam cfsqltype="cf_sql_integer" value="#d.param_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>
<th>Цен</th>
<th></th>
</tr>
</thead>
<cfoutput query="qService">
<tr>
<td>
<c:link_view_edit canWrite=#pageInfo.writePermitted()# entity="service_param" id=#service_param_id# fwx=#tr.fwx#/>
</td>
<td>
<cfif service_id GT 0><a href="service.cfm?service_id=#service_id#&#tr.fwx#">#request.skuCode(area_code,code,modifier_code)#</a></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>
<a href="service.cfm?service_id=#service_id#&#tr.fwx#">
<!--- <cfif len(modifier)>#modifier#<cfelse>(нет)</cfif> --->
#abstract_service# #modifier#
</a>
</td>
<td>
<a href="service_param.cfm?service_param_id=#service_param_id#&#tr.fwx#" title="Компонент конкретной услуги">#request.skuCode(area_code,code,modifier_code,param_code)# [#service_param_id#]</a>
</td>
<td class="c">
<cfif prc_cnt GT 0>#prc_cnt#</cfif>
</td>
<td class="c">
<c:link_del canWrite=#pageInfo.writePermitted()# entity="service_param" id=#service_param_id# fwx=#tr.fwx#/>
</td>
</tr>
</cfoutput>
</table>
</cfif>
<!--- ------------------------------------------------------------------------------- --->
<!--- ------------------------------------------------------------------------------- --->
<!--- ------------------------------------------------------------------------------- --->
<layout:page section="footer"/>