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

347 lines
13 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="Yes">
<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="service" key="service_id" pageInfoOut="pageInfo"/>
<cfparam name="service_id" type="numeric"/>
<cfparam name="modifier_id" type="numeric" default=-1/>
<cfset new_service_id=-1/>
<cfif isDefined ("save") OR isDefined("saveAndClose")>
<cfif pageInfo.writePermitted()>
<cfquery name="qService" datasource="#request.DS#">
insert into service (
abstract_service_id,modifier_id,descr,measure_id,precision
--,base_price
)
select
abstract_service_id
,<cfqueryparam cfsqltype="cf_sql_integer" value="#modifier_id#" null=#(modifier_id EQ -1)#/>
,descr
,measure_id
,precision
--,base_price
from service
where service_id=<cfqueryparam cfsqltype="cf_sql_integer" value="#service_id#"/>;
<!--- MMSQL: select scope_identity() as new_service_id --->
<!---*** PostgreSQL incompatible hack --->
select LASTVAL() as new_service_id;
</cfquery>
<cfset new_service_id=qService.new_service_id/>
<cfquery datasource="#request.DS#">
insert into service_param (
service_id,abstract_service_param_class_id,param_id,descr
)
select
<cfqueryparam cfsqltype="cf_sql_integer" value="#qService.new_service_id#"/>
,abstract_service_param_class_id
,param_id
,descr
from service_param
where service_id=<cfqueryparam cfsqltype="cf_sql_integer" value="#service_id#"/>;
</cfquery>
</cfif>
</cfif>
<d:bean readonly=true table="#pageInfo.entity#" datasource="#request.DS#" output="d" status="status">
<d:param field="service_id" type="integer" key autoincrement/>
<d:param field="abstract_service_id" type="integer"/>
<d:param field="modifier_id" type="integer" forNull=""/>
<!--- <d:param field="measure_id" type="integer" forNull=""/>
<d:param field="precision" type="integer" forNull=""/> --->
<!--- <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>
<m:dispatch_detail
usePRG="No"<!---*** --->
pageInfo=#pageInfo#
id="#new_service_id#"
status=#pageInfo.status#
trackOut="tr"
idAttributesOut="id"
/>
<cfquery name="qDecoration" 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.service_id GT 0>
[#d.service_id#]
</cfif>
</cfoutput>
</layout:attribute>
<!--- controls override example--->
<layout:attribute name="controls">
<cfoutput>
<button type="submit" name="saveAndClose" value="Клонировать и закрыть" class="maincontrol"<cfif NOT pageInfo.writePermitted()> disabled</cfif>>#request.i18("Клонировать и закрыть","Clone and Close")#</button>
<button type="button" name="close" value="Закрыть" onClick="document.location.href='#tr.backUrl#'" class="maincontrol">#request.i18("Закрыть","Close")#</button>
</cfoutput>
</layout:attribute>
</layout:page>
<cfif status.errorState GT 0>
<cfoutput><div class="err">#status.errorMessage#</div></cfoutput>
</cfif>
<cfoutput>
<input type="hidden" name="service_id" value="#d.service_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 abstract_service_id, abstract_service, code
from abstract_service
order by 3,2
</cfquery>
<c:combo
query=#qList#
combo="abstract_service_id"
id="abstract_service_id"
key="abstract_service_id"
selected="#d.abstract_service_id#"
displayf="##code## ##abstract_service##"
empty=""
class=""
<!---onchange="submit();"--->
/>
<!--- <cfif d.abstract_service_id GT 0>
<c:link_view_edit canWrite=#pageInfo.writePermitted()# entity="abstract_service" id=#d.abstract_service_id# fwx=#tr.fwx#/>
</cfif>--->
</div>
</div>
<div class="tr">
<div class="th">Класс характеристики</div>
<div class="td">
<cfquery name="qAbstractService" datasource="#request.DS#">
select mc.modifier_class_id, mc.modifier_class
from abstract_service a
left outer join modifier_class mc on (a.modifier_class_id=mc.modifier_class_id)
where a.abstract_service_id=<cfqueryparam cfsqltype="cf_sql_integer" value="#d.abstract_service_id#"/>
</cfquery>
#qAbstractService.modifier_class#
<!--- <cfif qAbstractService.modifier_class_id GT 0>
<c:link_view_edit canWrite=#pageInfo.writePermitted()# entity="modifier_class" id=#qAbstractService.modifier_class_id# fwx=#tr.fwx#/>
</cfif>--->
</div>
</div>
<div class="tr">
<div class="th">Характеристика</div>
<div class="td">
<cfquery name="qList" datasource="#request.DS#">
select m.modifier_id, m.modifier
from modifier m
join abstract_service a on (m.modifier_class_id=a.modifier_class_id)
where a.abstract_service_id=<cfqueryparam cfsqltype="cf_sql_integer" value="#d.abstract_service_id#"/>
order by 2
</cfquery>
<cfquery name="qFreeModifier" datasource="#request.DS#">
select m.modifier_id, m.modifier
from modifier m
join abstract_service a on (m.modifier_class_id=a.modifier_class_id)
where a.abstract_service_id=<cfqueryparam cfsqltype="cf_sql_integer" value="#d.abstract_service_id#"/>
AND NOT exists (select * from service s where s.modifier_id=m.modifier_id AND s.abstract_service_id=a.abstract_service_id)
order by 2
limit 1
</cfquery>
<c:combo
query=#qList#
combo="modifier_id"
id="modifier_id"
key="modifier_id"
selected=#qFreeModifier.modifier_id#
displayf="##modifier##"
empty=""
class=""
/>
<!---<cfif d.modifier_id GT 0>
<c:link_view_edit canWrite=#pageInfo.writePermitted()# entity="modifier" id=#d.modifier_id# fwx=#tr.fwx#/>
</cfif>--->
Необходимо выбрать новое уникальное значение характеристики, иначе будет ошибка
</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=""
readonly=true
/>
</div>
</div>
<div class="tr">
<div class="th">Точность</div>
<div class="td">
<input type="text" name="precision" value="#d.precision#" size="1" readonly/>
</div>
</div>--->
<!--- <div class="tr">
<div class="th">Цена без НДС, ₽</div>
<div class="td">
<input type="text" name="base_price" id="base_price" value="#d.base_price#" size="10" readonly/>
<i>для композитных услуг указывать не следует</i>
</div>
</div>--->
<div class="tr">
<div class="th">Описание</div>
<div class="td">
<textarea name="descr" rows="10" cols="100" readonly>#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')#
#qDecoration.creator# <cfif len(qDecoration.creator_shortname)>(#qDecoration.creator_shortname#)</cfif>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Изменено
#dateFormat(d.dt_updated,'DD.MM.YYYY')# #timeFormat(d.dt_updated,'HH:MM')#
#qDecoration.updater# <cfif len(qDecoration.updater_shortname)>(#qDecoration.updater_shortname#)</cfif>
</div>
</div>
</div>
</cfoutput>
<layout:page section="extension" closeForm="Yes"/>
<!--- ------------------------------------------------------------------------------- --->
<!--- ------------------------------------------------------------------------------- --->
<!--- ------------------------------------------------------------------------------- --->
<cfif d.service_id GT 0>
<cfquery name="qServiceParam" datasource="#request.DS#">
select
sp.service_param_id
,ac.param_class_id
,sp.param_id
,p.param
,c.param_class
,(select count(*) from service_param_price spp where spp.service_param_id=sp.service_param_id) as price_count
from service_param sp
left outer join abstract_service_param_class ac on (sp.abstract_service_param_class_id=ac.abstract_service_param_class_id)
left outer join param_class c on (ac.param_class_id=c.param_class_id)
left outer join param p on (sp.param_id=p.param_id)
where sp.service_id=<cfqueryparam cfsqltype="cf_sql_integer" value="#d.service_id#"/>
order by p.param, c.param_class
</cfquery>
<cfoutput>
<p>Компоненты (#qServiceParam.recordCount#)
<cfif pageInfo.writePermitted()>
<cfoutput>
<cfset addUrl="service_param.cfm?service_param_id=-1&service_id=#d.service_id#&#tr.fwx#"/>
<button type="button" class="maincontrol" onclick="document.location.href='#addUrl#'">
<a href="#addUrl#">Добавить</a>
</button>
</cfoutput>
</cfif>
</p>
</cfoutput>
<table class="worktable">
<thead>
<tr>
<th></th>
<th>Компонент</th>
<th>Вариант компонента</th>
<th>Цен для прайс-листа (вариантов)</th>
<th></th>
</tr>
</thead>
<cfoutput query="qServiceParam">
<tr>
<td>
<!---<c:link_view_edit canWrite=#pageInfo.writePermitted()# entity="service_param" id=#service_param_id# fwx=#tr.fwx#/>--->
</td>
<td>
<cfif param_class_id GT 0><a href="param_class.cfm?param_class_id=#param_class_id#&#tr.fwx#">#param_class#</a></cfif>
</td>
<td>
<cfif param_id GT 0><a href="param.cfm?param_id=#param_id#&#tr.fwx#">#param_class# / #param#</cfif></a>
</td>
<td class="c">
<cfif price_count GT 0>#price_count#</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>
<!---
Если задан вариант компонента (param), а не компонент (param_class), то в колонке Цен для прайс-листа (вариантов) должна быть ровно единица--->
</cfif>
<!--- ------------------------------------------------------------------------------- --->
<!--- ------------------------------------------------------------------------------- --->
<!--- ------------------------------------------------------------------------------- --->
<layout:page section="footer"/>