spec/specification_item_version.cfm
2025-06-06 06:03:11 +03:00

283 lines
13 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="specification_item_version" key="specification_item_uid" pageInfoOut="pageInfo"/>
<!--- так, а у нас ключ составной --->
<d:bean readonly=#!pageInfo.writePermitted()# table="#pageInfo.entity#" datasource="#request.DS#" output="d" status="status">
<d:param field="specification_item_uid" type="guid" key/>
<d:param field="agreement_version" type="integer" key/>
<d:param field="specification_item_version" type="varchar" size="1023" preprocessor=#cleanInput#/>
<d:param field="quantity" type="numeric"/>
<d:param field="price" type="numeric"/>
<d:param field="dt_from" type="timestamp" format="yyyy-MM-dd" forNull="" init="#Now()#"/> <!--- !!! Important yyyy-MM-dd NOT YYYY-MM-DD --->
<d:param field="dt_to" type="timestamp" format="yyyy-MM-dd" forNull="" init="#Now()#"/> <!--- !!! Important yyyy-MM-dd NOT YYYY-MM-DD --->
<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=""
queryString="#request.thisPage#?specification_item_uid=#d.specification_item_uid#&agreement_version=#d.agreement_version#"
defaultBackUrl="specification_item.cfm?specification_item_uid=#d.specification_item_uid#"
status=#pageInfo.status#
trackOut="tr"
idAttributesOut="id"
/>
<!--- контекст строки всегда известен при создании версии, полный ключ не нужен для него - соответственно, джойн с основной таблицей. При этом мы собираем неверсионную часть данных, а версионная образует параллельную ветку --->
<!--- можно обратить внимание на то, что это один джойн, который растет сверху вниз (возможно, ветвится), добавляются таблицы и поля. На самом деле джойны внешние только для удобства отладки - так ошибки виднее --->
<cfquery name="qSpecificationItem" datasource="#request.DS#">
select s.specification_id, s.specification, i.svc_id, d.contract, d.dt_contract, k.contragent, v.svc
from specification_item i
left join specification s on (i.specification_id=s.specification_id)
left join contract d on (s.contract_id=d.contract_id)
left join contragent k on (d.contragent_id=k.contragent_id)
left join svc v on (i.svc_id=v.svc_id)
where i.specification_item_uid=<cfqueryparam cfsqltype="cf_sql_other" value="#d.specification_item_uid#" null=#!IsValid('guid',d.specification_item_uid)#/>
</cfquery>
<!--- <cfquery name="qCost" datasource="#request.DS#">
select sum(sip.price*sip.quantity) as cost
from specification_item_version_param sip
where sip.specification_item_version_id=<cfqueryparam cfsqltype="cf_sql_integer" value="#d.specification_item_version_id#" null=#!isNumeric(d.specification_item_version_id)#/>
</cfquery> --->
<!--- <cfquery name="qSpecificationItemParam" datasource="#request.DS#">
select
sip.specification_item_version_param_id
,sp.service_param_id
,sp.param_id
,sip.price
,sip.quantity
,p.param_id
,p.param
,p.param_short
,p.code
,p.precision
,c.param_class
,m.measure_short
,spp.min_price
from service_param sp
left outer join specification_item_version_param sip
on (sp.service_param_id=sip.service_param_id AND sip.specification_item_version_id=<cfqueryparam cfsqltype="cf_sql_integer" value="#d.specification_item_version_id#"/>)
left outer join param p on (sp.param_id=p.param_id)
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 measure m on (c.measure_id=m.measure_id)
left outer join service_param_price spp on
(sp.service_param_id=spp.service_param_id) /***из-за полиморфизма тут надо сложнее*/
where sp.service_id=<cfqueryparam cfsqltype="cf_sql_integer" value="#d.service_id#"/>
order by c.param_class, p.param
</cfquery> --->
<!--- Здесь выборка строится от шаблона, и на него уже накручиваются реквизиты экземпляра --->
<!--- <cfdump var=#qSpecificationItemParam#/> --->
<!--- decoration --->
<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 specification_item_version 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.specification_item_uid=<cfqueryparam cfsqltype="cf_sql_other" value=#d.specification_item_uid# null=#!isValid('guid',d.specification_item_uid)#/>
AND e.agreement_version=<cfqueryparam cfsqltype="cf_sql_integer" value="#d.agreement_version#" null=#!isValid('integer',d.agreement_version)#/>
</cfquery>
</m:silent><!---
------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
---><layout:page section="header" pageInfo=#pageInfo#>
<layout:attribute name="title">
<cfoutput>
Версия строки спецификации
[#d.specification_item_uid#]:[#d.agreement_version#]
</cfoutput>
</layout:attribute>
</layout:page>
<cfif status.errorState GT 0>
<cfoutput><div class="err">#status.errorMessage#</div></cfoutput>
</cfif>
<cfoutput>
<input type="hidden" name="specification_item_uid" value="#d.specification_item_uid#"/>
<input type="hidden" name="agreement_version" value="#d.agreement_version#"/>
<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">
<a href="specification.cfm?specification_id=#qSpecificationItem.specification_id#&#tr.fwx#">#qSpecificationItem.specification#</a>
</div>
</div>
<div class="tr">
<div class="th">Услуга</div>
<div class="td">
<a href="svc.cfm?svc_id=#qSpecificationItem.svc_id#&#tr.fwx#">[#d.specification_item_uid#] #qSpecificationItem.svc#</a>
</div>
</div>
<div class="tr">
<div class="th">Версия</div>
<div class="td">
<!--- <a href="svc.cfm?svc_id=#qSpecificationItem.svc_id#&#tr.fwx#">[#d.specification_item_uid#] #qSpecificationItem.svc#</a> --->
#d.agreement_version#
</div>
</div>
<div class="tr">
<div class="th">Имя для печати</div>
<div class="td">
<!--- <cfset m_specification_item_version=#d.specification_item_version#/>
<cfif len(m_specification_item_version) EQ 0 AND d.service_id GT 0>
<cfif len(qService.modifier)>
<cfset m_specification_item_version="#qService.abstract_service# - #qService.modifier#."/>
<cfelse>
<cfset m_specification_item_version="#qService.abstract_service#."/>
</cfif>
<cfloop query="qSpecificationItemParam">
<cfif qSpecificationItemParam.quantity GT 0>
<cfset m_param_name="#qSpecificationItemParam.param_short#"/>
<cfset m_specification_item_version="#m_specification_item_version# #m_param_name# #qSpecificationItemParam.quantity# #qSpecificationItemParam.measure_short#;"/>
</cfif>
</cfloop>
</cfif> --->
<textarea name="specification_item_version" id="specification_item_version" rows="2" cols="90" style="width:99%;"/><cfif len(d.specification_item_version)>#d.specification_item_version#<cfelse>#qSpecificationItem.svc#</cfif></textarea>
<button type="button" onclick="document.getElementById('specification_item_version').value='';submit();">Сформировать</button>
</div>
</div>
<div class="tr">
<div class="th">Количество</div>
<div class="td">
<input type="text" name="quantity" value="#d.quantity#" size="5" class="r"/><!---*** Халява с точностью ---><!--- <cftry>#round(d.quantity,qService.precision)#<cfcatch type="ANY"></cfcatch></cftry> --->
</div>
</div>
<div class="tr">
<div class="th">Цена</div>
<div class="td">
<input type="text" name="price" id="price" value="#d.price#" size="10" class="r"/>
<!--- <i>подставить сумму по позициям: </i>
<b><a onclick="document.getElementById('price').value='#qCost.cost#';return false;" style="cursor:pointer;">#qCost.cost#</a></b> --->
</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 len(d.specification_item_uid) AND d.agreement_version GT 0>
<cfoutput>
<p>
Компоненты (#qSpecificationItemParam.recordCount#)
<!---<cfif pageInfo.writePermitted()>
<cfoutput>
<cfset addUrl="specification_item_version_param.cfm?specification_item_version_param=-1&specification_item_version_id=#d.specification_item_version_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>
</tr>
</thead>
<cfoutput query="qSpecificationItemParam">
<tr>
<td>
<cfif specification_item_version_param_id GT 0>
<a href="specification_item_version_param.cfm?specification_item_version_param_id=#specification_item_version_param_id#&#tr.fwx#">
<img src="img/edit.gif"/>
</a>
</cfif>
<!--- <cfif NOT (specification_item_version_param_id GT 0)> --->
<a href="specification_item_version_param.cfm?service_param_id=#service_param_id#&specification_item_version_id=#d.specification_item_version_id#&#tr.fwx#">
<img src="img/add.gif"/>
</a>
</td>
<td>
<a href="service_param.cfm?service_param_id=#service_param_id#&#tr.fwx#">
#param_class# #param#
</a>
</td>
<td>#qService.abstract_service_code#.#qService.modifier_code#.#code#</td>
<td class="r"><!--- *** Халява --->
<cftry>#round(quantity,precision)#<cfcatch type="ANY"></cfcatch></cftry>
</td>
<td>#measure_short#</td>
<td class="r">#min_price#</td>
<td class="r">#price#</td>
<td class="c">
<cfif specification_item_version_param_id GT 0>
<c:link_del canWrite=#pageInfo.writePermitted()# entity="specification_item_version_param" id=#specification_item_version_param_id# fwx=#tr.fwx#/>
</cfif>
</td>
</tr>
</cfoutput>
</table>
</cfif>
*** Можно переделать на прямой ввод в форму. Можно однородные позиции выбирать из списка, но тогда вариант выбрать 2 разных интерфейсно непонятно как реализовывать.
поскольку спека только для демонстрации, может этого и не делать?
Цену базовую показать
<layout:page section="footer"/>