intermediate draft 4

This commit is contained in:
msyu
2025-06-09 07:08:56 +03:00
parent c1e32d840b
commit e15f690012
10 changed files with 133 additions and 180 deletions
+70 -80
View File
@@ -16,17 +16,17 @@
</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="quantity" type="numeric" init="1"/>
<d:param field="price" type="numeric" init="0"/>
<d:param field="dt_from" type="timestamp" format="yyyy-MM-dd" forNull="" init="#dateFormat(Now(),'YYYY-MM-DD')#"/> <!--- !!! Important yyyy-MM-dd NOT YYYY-MM-DD --->
<d:param field="dt_to" type="timestamp" format="yyyy-MM-dd" forNull="" init=""/> <!--- !!! 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#" />
@@ -48,7 +48,10 @@
<!--- контекст строки всегда известен при создании версии, полный ключ не нужен для него - соответственно, джойн с основной таблицей. При этом мы собираем неверсионную часть данных, а версионная образует параллельную ветку --->
<!--- можно обратить внимание на то, что это один джойн, который растет сверху вниз (возможно, ветвится), добавляются таблицы и поля. На самом деле джойны внешние только для удобства отладки - так ошибки виднее --->
<cfquery name="qSpecificationItem" datasource="#request.DS#">
select s.specification_id, s.specification, i.svc_id, d.contract, d.dt_contract, k.contragent, v.svc
select i.svc_id, v.svc
,s.specification_id, s.specification, s.contract_id
,d.contract, d.dt_contract, d.contragent_id
,k.contragent
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)
@@ -127,85 +130,74 @@
<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="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">
<layout:detail_line title="Спецификация">
<a href="specification.cfm?specification_id=#qSpecificationItem.specification_id#&#tr.fwx#">#qSpecificationItem.specification#[#qSpecificationItem.specification_id#]</a>
<a href="contract.cfm?contract_id=#qSpecificationItem.contract_id#&#tr.fwx#">#qSpecificationItem.contract# #dateFormat(qSpecificationItem.dt_contract,'DD.MM.YYYY')#</a>
<a href="contragent.cfm?contragent_id=#qSpecificationItem.contragent_id#&#tr.fwx#">#qSpecificationItem.contragent# </a>
</layout:detail_line>
<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>
<layout:detail_line title="Услуга">
<a href="svc.cfm?svc_id=#qSpecificationItem.svc_id#&#tr.fwx#">[#d.specification_item_uid#] #qSpecificationItem.svc#</a>
</layout:detail_line>
<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>
<!--- <layout:detail_line title="Версия">#d.agreement_version# (версия-номер соглашения)</layout:detail_line> --->
<layout:detail_line title="Версия">
<cfquery name="qList" datasource="#request.DS#">
select a.agreement_version, a.agreement, a.dt_agreement
from agreement a
where a.contract_id=<cfqueryparam cfsqltype="cf_sql_integer" value="#qSpecificationItem.contract_id#" null=#!isValid('integer',qSpecificationItem.contract_id)#/>
order by 1
</cfquery>
<c:combo
query=#qList#
combo="agreement_version"
id="agreement_version"
key="agreement_version"
selected="#d.agreement_version#"
displayf="##agreement## [##agreement_version##] ##dateFormat(dt_agreement,'DD.MM.YYYY')##"
class=""
/>
(версия-номер соглашения)
</layout:detail_line>
<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>
<layout:detail_line title="Имя для печати">
<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> --->
</layout:detail_line>
<div class="tr">
<div class="th">Количество</div>
<div class="td">
<layout:detail_line title="Дата с">
<input type="date" name="dt_from" id="dt_from" value="#dateFormat(d.dt_from,"YYYY-MM-DD")#"/>
<button type="button" onclick="document.getElementById('dt_from').value='#DateFormat(Now(), 'YYYY-MM-DD')#';">Сегодня</button>
</layout:detail_line>
<layout:detail_line title="Дата по">
<input type="date" name="dt_to" id="dt_to" value="#dateFormat(d.dt_to,"YYYY-MM-DD")#"/>
<button type="button" onclick="document.getElementById('dt_to').value='#DateFormat(Now(), 'YYYY-MM-DD')#';">Сегодня</button>
</layout:detail_line>
<layout:detail_line title="Количество">
<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>
</layout:detail_line>
<layout:detail_line title="Цена">
<input type="text" name="price" id="price" value="#d.price#" size="10" class="r"/>
</layout:detail_line>
<layout:detail_line title="Создано">
#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>
</layout:detail_line>
<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>
@@ -213,7 +205,7 @@
<layout:page section="extension" closeForm="Yes"/>
<cfif len(d.specification_item_uid) AND d.agreement_version GT 0>
<cfoutput>
<!--- <cfoutput>
<p>
Компоненты (#qSpecificationItemParam.recordCount#)
<!---<cfif pageInfo.writePermitted()>
@@ -226,7 +218,7 @@
</cfif>--->
</p>
</cfoutput>
<table class="worktable">
<table class="worktable">
<thead>
<tr>
<th></th>
@@ -271,12 +263,10 @@
</td>
</tr>
</cfoutput>
</table>
</table> --->
</cfif>
*** Можно переделать на прямой ввод в форму. Можно однородные позиции выбирать из списка, но тогда вариант выбрать 2 разных интерфейсно непонятно как реализовывать.
поскольку спека только для демонстрации, может этого и не делать?
Цену базовую показать
Здесь могли бы быть компоненты (но мы их пока не запилили)
<layout:page section="footer"/>