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

576 lines
20 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="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="abstract_service" key="abstract_service_id" pageInfoOut="pageInfo"/>
<d:bean readonly=#!pageInfo.writePermitted()# table="abstract_service" datasource="#request.DS#" output="d" status="status">
<d:param field="abstract_service_id" type="integer" key autoincrement/>
<d:param field="measure_id" type="integer" init="1" required/>
<d:param field="precision" type="integer" init="0" required/>
<d:param field="area_id" type="integer" required/>
<d:param field="modifier_class_id" type="integer" forNull=""/>
<d:param field="manager_id" type="integer" forNull=""/>
<d:param field="abstract_service" type="varchar" size="255" preprocessor=#cleanInput#/>
<d:param field="abstract_service_en" type="varchar" size="255" preprocessor=#cleanInput#/>
<d:param field="code" type="varchar" size="31" preprocessor=#cleanInput#/>
<d:param field="version" type="integer" default="1" init="1"/>
<d:param field="status_id" type="integer" default="1" init="1"/>
<d:param field="dt_status" type="timestamp" default="#Now()#" init="#Now()#"/>
<d:param field="descr" type="varchar" preprocessor=#plain2HtmClean#/>
<d:param field="commercial_note" 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>
<cfset pageInfo.status=#status#/>
<m:dispatch_detail
usePRG="No"<!---*** --->
pageInfo=#pageInfo#
id="#d.abstract_service_id#"
status=#pageInfo.status#
trackOut="tr"
idAttributesOut="id"
/>
<!--- save doc --->
<cfmodule template="mod/documents.cfm" section="model" entity="#pageInfo.entity#" id="#id.value#" tr=#tr# writePermitted=#pageInfo.writePermitted()#/>
<!---/save doc --->
<cfquery name="qArea" datasource="#request.DS#">
select a.analytic_code, a.area_code, a.area
from area a
where area_id=<cfqueryparam cfsqltype="cf_sql_integer" value="#d.area_id#" null=#!isNumeric(d.area_id)#/>
</cfquery>
<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.abstract_service_id GT 0>
<b>#d.abstract_service#</b>
[#d.abstract_service_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="abstract_service_id" value="#d.abstract_service_id#"/>
<input type="hidden" name="track" value="#tr.self#" size="200"/>
<input type="hidden" name="pass" value=""/><!--- pass marker to prevent save on submit --->
<div class="detail">
<div class="tr">
<div class="th">Номенклатура (RUS)</div>
<div class="td">
<input type="text" name="abstract_service" value="#d.abstract_service#" size="70" style="width:97%"/>
</div>
</div>
<div class="tr">
<div class="th">Номенклатура (ENG)</div>
<div class="td">
<input type="text" name="abstract_service_en" value="#d.abstract_service_en#" size="70" style="width:97%"/>
</div>
</div>
<div class="tr">
<div class="th">Группа услуг</div>
<div class="td">
<cfquery name="qList" datasource="#request.DS#">
select area_id, area_code, analytic_code, area
from area
order by 3
</cfquery>
<c:combo
query=#qList#
combo="area_id"
id="area_id"
key="area_id"
selected="#d.area_id#"
displayf="##analytic_code## ##area##"
class=""
<!---onchange="submit();"--->
/>
</div>
</div>
<div class="tr">
<div class="th">Код услуги</div>
<div class="td">
#qArea.area_code#.<input type="text" name="code" value="#d.code#" size="7"/>
</div>
</div>
<div class="tr">
<div class="th">Единица измерения</div>
<div class="td">
<cfquery name="qList" datasource="#request.DS#">
select measure_id, measure
from measure
order by 2
</cfquery>
<c:combo
query=#qList#
combo="measure_id"
id="measure_id"
key="measure_id"
selected="#d.measure_id#"
displayf="##measure##"
empty=""
class=""
<!---onchange="submit();"--->
/>
<i>для композитных услуг (состоящих из компонентов) указывать штуки. Часто композитные услуги попадают в спецификацию в количестве 1 шт.</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">
<cfquery name="qList" datasource="#request.DS#">
select modifier_class_id, modifier_class
from modifier_class
order by 2
</cfquery>
<c:combo
query=#qList#
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.abstract_service_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>
<i>
Список, из которого выбирается значение характеристики-модификатора, определяющее конкретную услугу (вариант). <br/>
Если варианты не предусмотрены, нужно оставить поле пустым.
</i>
</div>
</div>
<div class="tr">
<div class="th">Ответственный</div>
<div class="td">
<cfquery name="qList" datasource="#request.DS#">
select usr_id, firstname, middlename, lastname
from usr
order by 4,2,3
</cfquery>
<c:combo
query=#qList#
combo="manager_id"
id="manager_id"
key="usr_id"
selected="#d.manager_id#"
displayf="##lastname## ##firstname## ##middlename## "
empty=""
class=""
/>
</div>
</div>
<div class="tr">
<div class="th">Версия</div>
<div class="td">
<input type="text" name="version" value="#d.version#" size="3"/>
</div>
</div>
<div class="tr">
<div class="th">Статус</div>
<div class="td">
<cfquery name="qList" datasource="#request.DS#">
select status_id, status
from status
order by 1
</cfquery>
<c:combo
query=#qList#
combo="status_id"
id="status_id"
key="status_id"
selected="#d.status_id#"
displayf="##status##"
class=""
<!---onchange="submit();"--->
/>
с <input type="text" name="dt_status" id="dt_status" value="#dateFormat(d.dt_status,'DD.MM.YYYY')#" size="10"/>
<button type="button" onclick="document.getElementById('dt_status').value='#DateFormat(Now(), 'DD.MM.YYYY')#';">Сегодня</button>
</div>
</div>
<div class="tr">
<div class="th">Описание</div>
<div class="td">
<textarea name="descr" rows="5" cols="100" style="width:97%">#request.htm2plain(d.descr)#</textarea>
</div>
</div>
<div class="tr">
<div class="th">Коммерческие примечания</div>
<div class="td">
<textarea name="commercial_note" rows="5" cols="100" style="width:97%">#request.htm2plain(d.commercial_note)#</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.abstract_service_id GT 0>
<!--- documents ---><!--- call MODEL section for save! --->
<cfmodule template="mod/documents.cfm" section="view" entity="#pageInfo.entity#" id="#id.value#" tr=#tr# writePermitted=#pageInfo.writePermitted()#/>
<!---/documents --->
<!--- <cfmodule template="mod/abstract_service_param_class.cfm"
abstract_service_id=#d.abstract_service_id#
fwx=#tr.fwx#
self=#tr.self#
editable=#pageInfo.writePermitted()#
/> --->
<!--- ------------------------------------------------------------------------------- --->
<!--- ------------------------------------------------------------------------------- --->
<!--- ------------------------------------------------------------------------------- --->
<cfquery name="qAbstractServiceParamClass" datasource="#request.DS#">
select
ac.abstract_service_param_class_id
,ac.param_class_id
,ac.is_multiple
,ac.sort
,c.param_class
,c.measure_id
,m.measure_id
,m.measure
,m.measure_short
<!--- ,(select count(*) from price p where p.service_param_id=sp.service_param_id) as prc_cnt --->
,(select count(*) from param p where p.param_class_id=ac.param_class_id) as param_cnt
from abstract_service_param_class ac
left outer join param_class c on (ac.param_class_id=c.param_class_id)
left outer join measure m on (c.measure_id=m.measure_id)
where ac.abstract_service_id=<cfqueryparam cfsqltype="cf_sql_integer" value="#d.abstract_service_id#"/>
order by ac.sort
</cfquery>
<cfoutput>
<p>
<b>Компоненты (#qAbstractServiceParamClass.recordCount#)</b>
<cfif pageInfo.writePermitted()>
<cfoutput>
<cfset addUrl="abstract_service_param_class.cfm?abstract_service_param_class_id=-1&abstract_service_id=#d.abstract_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>
<th>Сортировка</th>
<th></th>
</tr>
</thead>
<cfoutput query="qAbstractServiceParamClass">
<tr>
<td>
<c:link_view_edit canWrite=#pageInfo.writePermitted()# entity="abstract_service_param_class" id=#abstract_service_param_class_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 class="c">
#measure# <cfif len(#measure_short#)>(#measure_short#)</cfif>
</td>
<td class="c">
<cfif param_cnt GT 0>#param_cnt#</cfif>
</td>
<td class="c">
<cfif is_multiple GT 0>
Да
</cfif>
</td>
<td class="c">
#sort#
</td>
<td class="c">
<c:link_del canWrite=#pageInfo.writePermitted()# entity="abstract_service_param_class" id=#abstract_service_param_class_id# fwx=#tr.fwx#/>
</td>
</tr>
</cfoutput>
</table>
<!--- --------------------------------------------------- --->
<cfquery name="qService" datasource="#request.DS#">
select
s.service_id
,m.modifier_id
,m.modifier
<!--- ,s.base_price--->
,c.modifier_class_id
,c.modifier_class
,m.code as modifier_code
,(select count(*) from service_param sp where sp.service_id=s.service_id) as param_count
,(select count(*) from service_param sp join service_param_price spp on (sp.service_param_id=spp.service_param_id) where sp.service_id=s.service_id) as service_param_price_count
,(select sp.price from service_price sp where sp.service_id=s.service_id AND sp.pricing_model_id=1 order by service_price_id desc limit 1) as prc_inst
,(select count(*) from service_price sp where sp.service_id=s.service_id AND sp.pricing_model_id=1) as prc_inst_cnt
,(select sp.service_price_id from service_price sp where sp.service_id=s.service_id AND sp.pricing_model_id=1 order by service_price_id desc limit 1) as prc_inst_id
,(select sp.price from service_price sp where sp.service_id=s.service_id AND sp.pricing_model_id=2 order by service_price_id desc limit 1)as prc_fix
,(select count(*) from service_price sp where sp.service_id=s.service_id AND sp.pricing_model_id=2) as prc_fix_cnt
,(select sp.service_price_id from service_price sp where sp.service_id=s.service_id AND sp.pricing_model_id=2 order by service_price_id desc limit 1)as prc_fix_id
,(select sp.price from service_price sp where sp.service_id=s.service_id AND sp.pricing_model_id=3 order by service_price_id desc limit 1) as prc_payg
,(select count(*) from service_price sp where sp.service_id=s.service_id AND sp.pricing_model_id=3) as prc_payg_cnt
,(select sp.service_price_id from service_price sp where sp.service_id=s.service_id AND sp.pricing_model_id=3 order by service_price_id desc limit 1) as prc_payg_id
<!--- -- *** ну и уродливый селект --->
from service s
left outer join modifier m on (s.modifier_id=m.modifier_id)
left outer join modifier_class c on (m.modifier_class_id=c.modifier_class_id)
where s.abstract_service_id=<cfqueryparam cfsqltype="cf_sql_integer" value="#d.abstract_service_id#"/>
order by m.sort, m.code, m.modifier
</cfquery>
<!--- <cfdump var=#qService#/> --->
<cffunction name="formatPrice" output="true">
<cfargument name="price"/>
<cfif isNumeric(price)><cfreturn numberFormat(price,'.00')/><cfelse><cfreturn "(по запросу)"></cfif>
</cffunction>
<cfoutput>
<p>
<b>Варианты услуги (#qService.recordCount#)</b><!---#d.code# #d.abstract_service#--->
<cfif pageInfo.writePermitted()>
<cfoutput>
<cfset addUrl="service.cfm?service_id=-1&abstract_service_id=#d.abstract_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>--->
<!--- <th>Порядок</th> --->
<th>Цена усл. инст.</th>
<th>Цена усл. фикс.</th>
<th>Цена усл. payg</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>
<form name="frmClone#service_id#" action="service_clone.cfm">
<input type="hidden" name="service_id" value="#service_id#"/>
<input type="hidden" name="track" value="#tr.fw#"/>
<button type="submit"<cfif !pageInfo.writePermitted()> disabled</cfif>>clone</button>
</form>
</td>
<td>#request.skuCode(qArea.area_code,d.code,modifier_code)#</td>
<td>#d.abstract_service#<cfif len(modifier) GT 0> - #modifier#</cfif></td>
<!--- <td class="r">#modifier_class#</td> --->
<!--- <td>#sort#</td> --->
<td class="r">
<cfif prc_inst_id GT 0>
<a href="service_price.cfm?service_price_id=#prc_inst_id#&#tr.fwx#">#formatPrice(prc_inst)#</a>
</cfif>
</td>
<td class="r">
<cfif prc_fix_id GT 0>
<a href="service_price.cfm?service_price_id=#prc_fix_id#&#tr.fwx#">#formatPrice(prc_fix)#</a>
</cfif>
</td>
<td class="r">
<cfif prc_payg_id GT 0>
<a href="service_price.cfm?service_price_id=#prc_payg_id#&#tr.fwx#">#formatPrice(prc_payg)#</a>
</cfif>
</td>
<td class="r"><cfif param_count GT 0>#param_count#</cfif></td>
<td class="r"><cfif service_param_price_count GT 0>#service_param_price_count#</cfif></td>
<!--- <td class="r">#base_price#</td> --->
<td class="c">
<c:link_del canWrite=#pageInfo.writePermitted()# entity="service" id=#service_id# fwx=#tr.fwx#/>
</td>
</tr>
</cfoutput>
</table>
<!--- --------------------------------------------------- --->
<cfquery name="qAbstractServiceComplementary" datasource="#request.DS#">
select
ac.abstract_service_complementary_id
,ac.abstract_service_id
,ac.complementary_id
,ac.quantity
,ac.sort
,c.code
,c.abstract_service
,c.area_id
,g.area_code
from abstract_service_complementary ac
left outer join abstract_service c on (ac.complementary_id=c.abstract_service_id)
left outer join area g on (c.area_id=g.area_id)
where ac.abstract_service_id=<cfqueryparam cfsqltype="cf_sql_integer" value="#d.abstract_service_id#"/>
order by ac.sort
</cfquery>
<cfoutput>
<p>
<b>Дополнительные услуги (#qAbstractServiceComplementary.recordCount#)</b>
<cfif pageInfo.writePermitted()>
<cfoutput>
<cfset addUrl="abstract_service_complementary.cfm?abstract_service_complementary_id=-1&abstract_service_id=#d.abstract_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>
<th></th>
</tr>
</thead>
<cfoutput query="qAbstractServiceComplementary">
<tr>
<td>
<c:link_view_edit canWrite=#pageInfo.writePermitted()# entity="abstract_service_complementary" id=#abstract_service_complementary_id# fwx=#tr.fwx#/>
</td>
<td>
<a href="abstract_service.cfm?abstract_service_id=#complementary_id#&#tr.fwx#">#request.skuCode(area_code,code)#</a>
</td>
<td>
<a href="abstract_service.cfm?abstract_service_id=#complementary_id#&#tr.fwx#">#abstract_service#</a>
</td>
<td class="c">
#quantity#
</td>
<td class="c">
#sort#
</td>
<td class="c">
<c:link_del canWrite=#pageInfo.writePermitted()# entity="abstract_service_complementary" id=#abstract_service_complementary_id# fwx=#tr.fwx#/>
</td>
</tr>
</cfoutput>
</table>
</cfif>
<!--- Добавить "дополнительна для услуг"? --->
<layout:page section="footer"/>