intermediate draft 4
This commit is contained in:
parent
c1e32d840b
commit
e15f690012
@ -160,7 +160,13 @@
|
||||
</div>
|
||||
Соглашение просто объединяет правки строк спецификации в пакет и оформляет их документом (в случае с допником). То есть версии строк существуют не сами по себе, а связаны с конкретным соглашением. Между прочим, это означает, что в рамках одного доп. соглашения мы не можем сделать 2 изменения строки, например 2 разные цены с разных дат - нужно оформлять отдельными допниками.
|
||||
Можно назвать нулевое соглашение базовым, а остальные дополнительными. (наверное, можно было бы синтезировать базовое соглашение с NULL номером, но NULL проблематично включить в первичный ключ, а любое специальное значение будет нарушать внешний ключ)
|
||||
Есть ли понятие текущего соглашения?
|
||||
|
||||
Дата соглашения не имеет никакого отношения к датам актуальности строк (это чисто формальное поле)
|
||||
Предполагается, что даты актуальности строк согласованы с номерами версий (можно обнаруживать и репортить ошибки)
|
||||
|
||||
Поскольку соглашение не может дважды изменить строку спецификации, можно говорить о версии спецификации в соответствии с соглашением
|
||||
|
||||
Есть ли у нас понятие текущего соглашения?
|
||||
Есть ли понятие действующего соглашения, или у нас все действуют, или строки из недействующего соглашения не должны участвовать в цепочке (тогда, видимо, не удастся активировать соглашение задним числом, цепочка может разрушиться)
|
||||
Если к соглашению нет измененных строк спецификации, в нем нет большого смысла (но изменения строк надо к чему-то приписывать).
|
||||
Надо было начать с моделирования данных в таблицах, до интерфейса?
|
||||
@ -197,7 +203,7 @@
|
||||
left outer join svc on (i.svc_id=svc.svc_id)
|
||||
where s.contract_id=<cfqueryparam cfsqltype="cf_sql_integer" value="#d.contract_id#"/>
|
||||
AND iv.agreement_version=<cfqueryparam cfsqltype="cf_sql_integer" value="#d.agreement_version#"/>
|
||||
order by 1
|
||||
order by i.specification_id
|
||||
</cfquery>
|
||||
|
||||
<cfoutput>
|
||||
|
@ -148,7 +148,7 @@
|
||||
s.specification_id
|
||||
,s.specification
|
||||
,(select count(*) from specification_item i where i.specification_id=s.specification_id) as item_cnt
|
||||
,(select count(*) from specification_version v where v.specification_id=s.specification_id) as version_cnt
|
||||
/*,(select count(*) from specification_version v where v.specification_id=s.specification_id) as version_cnt*/
|
||||
from specification s
|
||||
where s.contract_id=<cfqueryparam cfsqltype="cf_sql_integer" value="#d.contract_id#"/>
|
||||
order by 1
|
||||
@ -172,7 +172,6 @@
|
||||
<th></th>
|
||||
<th>Номер спецификации</th>
|
||||
<th>Строк</th>
|
||||
<th>Версий</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
@ -185,9 +184,6 @@
|
||||
<td class="c">
|
||||
<cfif item_cnt GT 0>#item_cnt#</cfif>
|
||||
</td>
|
||||
<td class="c">
|
||||
<cfif version_cnt GT 0>#version_cnt#</cfif>
|
||||
</td>
|
||||
<td class="c">
|
||||
<c:link_del canWrite=#pageInfo.writePermitted()# entity="specification" id=#specification_id# fwx=#tr.fwx#/>
|
||||
</td>
|
||||
@ -216,6 +212,7 @@
|
||||
<button type="button" class="maincontrol" onclick="document.location.href='#addUrl#'">
|
||||
<a href="#addUrl#">Создать</a>
|
||||
</button>
|
||||
Соглашение - это пакет изменений спецификации. Базовое соглашение соответствует исходной спецификации договора (переход от несуществующей спецификации). Остальные - дополнительным соглашениям.
|
||||
Создание базового соглашения надо автоматизировать, но пока вручную.
|
||||
</cfoutput>
|
||||
</cfif>
|
||||
|
@ -148,7 +148,6 @@
|
||||
,d.contract
|
||||
,d.dt_contract
|
||||
,(select count(*) from specification s where s.contract_id=d.contract_id) as spec_cnt
|
||||
,(select count(distinct resource_realm_id) from resource_realm_access a where a.contract_id=d.contract_id) as res_realm_cnt
|
||||
from contract d
|
||||
where d.contragent_id=<cfqueryparam cfsqltype="cf_sql_integer" value="#d.contragent_id#"/>
|
||||
order by 1
|
||||
@ -165,7 +164,6 @@
|
||||
<th>Номер договора</th>
|
||||
<th>Дата договора</th>
|
||||
<th>Спецификаций</th>
|
||||
<th>Ресурсных платформ</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
@ -182,9 +180,6 @@
|
||||
<cfif spec_cnt GT 0>#spec_cnt#</cfif>
|
||||
|
||||
</td>
|
||||
<td class="c">
|
||||
<cfif res_realm_cnt GT 0>#res_realm_cnt#</cfif>
|
||||
</td>
|
||||
<td class="c">
|
||||
<c:link_del canWrite=#pageInfo.writePermitted()# entity="contract" id=#contract_id# fwx=#tr.fwx#/>
|
||||
</td>
|
||||
@ -192,52 +187,6 @@
|
||||
</cfoutput>
|
||||
</table>
|
||||
</cfif>
|
||||
<i>Доступ к ресурсным платформам предоставляется на уровне договора</i>
|
||||
|
||||
<cfif d.contragent_id GT 0>
|
||||
<cfquery name="qUsr">
|
||||
select
|
||||
u.usr_id
|
||||
,u.login
|
||||
,u.firstname
|
||||
,u.lastname
|
||||
,u.middlename
|
||||
,u.email
|
||||
,u.idp_usr_uid
|
||||
from usr u
|
||||
where u.contragent_id=<cfqueryparam cfsqltype="cf_sql_integer" value="#d.contragent_id#"/>
|
||||
order by 1
|
||||
</cfquery>
|
||||
|
||||
<cfoutput>
|
||||
<h4>Пользователи (#qContract.recordCount#)</h4>
|
||||
</cfoutput>
|
||||
|
||||
<table class="worktable">
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th>Логин</th>
|
||||
<th>Ф.И.О.</th>
|
||||
<th>e-mail</th>
|
||||
<th>IDP user UID</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<cfoutput query="qUsr">
|
||||
<tr>
|
||||
<td>
|
||||
<c:link_view_edit canWrite=#pageInfo.writePermitted()# entity="usr" id=#usr_id# fwx=#tr.fwx#/>
|
||||
</td>
|
||||
<td>#login#</td>
|
||||
<td>#lastname# #firstname# #middlename#</td>
|
||||
<td>#email#</td>
|
||||
<td>#idp_usr_uid#</td>
|
||||
<td class="c">
|
||||
<c:link_del canWrite=#pageInfo.writePermitted()# entity="usr" id=#usr_id# fwx=#tr.fwx#/>
|
||||
</td>
|
||||
</tr>
|
||||
</cfoutput>
|
||||
</table>
|
||||
</cfif>
|
||||
<layout:page section="footer"/>
|
@ -29,7 +29,6 @@
|
||||
<d:field title="Провайдер">c.is_provider</d:field>
|
||||
<d:field title="Контрактов">(select count(*) from contract d where d.contragent_id=c.contragent_id) as contract_cnt</d:field>
|
||||
<d:field title="Спецификаций">(select count(*) from specification s join contract d on (s.contract_id=d.contract_id) where d.contragent_id=c.contragent_id) as spec_cnt</d:field>
|
||||
<d:field title="Пользователей">(select count(*) from usr u where u.contragent_id=c.contragent_id) as usr_cnt</d:field>
|
||||
</d:field_set>
|
||||
from contragent c
|
||||
where 1=1 <m:filter_build filter=#pageInfo.settings.filter#/>
|
||||
@ -86,6 +85,7 @@ select count(*) as cnt from contragent where 1=1
|
||||
<cfset queryAddColumn(qRead,'f_link_del')/>
|
||||
<cfset titleMap.f_link_del={ordinal=0}/>
|
||||
<!--- <cfdump var=#titleMap#/> --->
|
||||
|
||||
<cfoutput query=#qRead# startRow=#pageInfo.nStart# maxRows=#pageInfo.recordsPerPage#><!--- *** Здесь некомфортное дублирование startRow, maxRows с вызовом c:table ниже, причем в c:table оно закопано в модуль, и аргументы называются по-разному... но мы хотим немного сэкономить и не обрабатывать весь резалтсет --->
|
||||
<cfsavecontent variable="qRead.f_link_view_edit">
|
||||
<a href="#pageInfo.entity#.cfm?#pageInfo.entity#_id=#contragent_id#&#tr.fwx#" name="#contragent_id#" <cfif pageInfo.writePermitted()>title="редактировать" class="edit"<cfelse>title="просмотр" class="view"</cfif>></a>
|
||||
@ -107,7 +107,6 @@ select count(*) as cnt from contragent where 1=1
|
||||
<c:column width="15%" field="descr"/>
|
||||
<c:column width="10%" field="external_uid"/>
|
||||
<c:column width="5%" field="external_code"/>
|
||||
<c:column width="2%" field="usr_cnt" formatter=#hideNonPositive#><c:td class="c"/></c:column>
|
||||
<c:column width="2%" field="contract_cnt" formatter=#hideNonPositive#><c:td class="c"/></c:column>
|
||||
<c:column width="2%" field="spec_cnt" formatter=#hideNonPositive#><c:td class="c"/></c:column>
|
||||
<c:column width="1%" sortable="false">
|
||||
|
10
layout/detail_line.cfm
Normal file
10
layout/detail_line.cfm
Normal file
@ -0,0 +1,10 @@
|
||||
<cfsilent>
|
||||
<cfparam name="ATTRIBUTES.title" default=""/>
|
||||
<!---
|
||||
<cfset var content=thisTag.generagedContent/>
|
||||
|
||||
--->
|
||||
</cfsilent><!---
|
||||
---><cfif thisTag.executionMode is "start"><div class="tr">
|
||||
<div class="th"><cfoutput>#ATTRIBUTES.title#</cfoutput></div><div class="td">
|
||||
<cfelseif thisTag.executionMode is "end"></div></div></cfif>
|
16
measure.cfm
16
measure.cfm
@ -21,8 +21,6 @@
|
||||
<d:param field="measure_id" type="integer" key autoincrement/>
|
||||
<d:param field="measure" type="varchar" size="255" preprocessor=#cleanInput#/>
|
||||
<d:param field="measure_short" type="varchar" size="9" preprocessor=#cleanInput#/>
|
||||
<d:param field="measure_short_en" type="varchar" size="9" preprocessor=#cleanInput#/>
|
||||
<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#" />
|
||||
@ -93,20 +91,6 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="tr">
|
||||
<div class="th">Сокращение английское</div>
|
||||
<div class="td">
|
||||
<input type="text" name="measure_short_en" value="#d.measure_short_en#" size="9"/>
|
||||
</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">
|
||||
|
@ -19,7 +19,6 @@
|
||||
<d:field title="measure_id" cfSqlType="CF_SQL_INTEGER">m.measure_id</d:field>
|
||||
<d:field title="Единица измерения">m.measure</d:field>
|
||||
<d:field title="Сокращение">m.measure_short</d:field>
|
||||
<d:field title="Сокращение англ.">m.measure_short_en</d:field>
|
||||
</d:field_set>
|
||||
from measure m
|
||||
where 1=1 <m:filter_build filter=#pageInfo.settings.filter#/>
|
||||
@ -77,7 +76,6 @@ select count(*) as cnt from measure where 1=1
|
||||
</th>
|
||||
<th width="15%"><layout:column_head name="measure"/></th>
|
||||
<th width="15%"><layout:column_head name="measure_short"/></th>
|
||||
<th width="15%"><layout:column_head name="measure_short_en"/></th>
|
||||
</layout:grid_head>
|
||||
</thead>
|
||||
|
||||
@ -88,7 +86,6 @@ select count(*) as cnt from measure where 1=1
|
||||
</td>
|
||||
<td class="c">#measure#</td>
|
||||
<td class="c">#measure_short#</td>
|
||||
<td class="c">#measure_short_en#</td>
|
||||
</tr>
|
||||
</cfoutput>
|
||||
|
||||
|
@ -144,6 +144,7 @@
|
||||
<layout:page section="extension" closeForm="Yes"/>
|
||||
|
||||
<cfif d.specification_id GT 0>
|
||||
|
||||
<cfquery name="qItem" datasource="#request.DS#">
|
||||
select
|
||||
i.specification_item_uid
|
||||
@ -200,6 +201,13 @@
|
||||
</cfoutput>
|
||||
</table>
|
||||
|
||||
Здесь отсутствуют версионные поля - цена, количество, название для печати.
|
||||
Если бы они были - это получилась бы версия спецификации.
|
||||
Как сущности версии спецификации нет.
|
||||
Можно синтезировать версию спецификации на произвольную дату, а можно по версии определенного соглашения (это должно быть возмозно, потому что соглашение меняет каждую строку не более 1 раза
|
||||
)
|
||||
Спецификация по версии соглашения не учитывает is_actual этого соглашения, но учитывает предыдущие
|
||||
*** Собственно, нам нужно для илюстрации версионности как раз синтезировать спецификацию на дату и спецификацию по версии согдашения
|
||||
</cfif>
|
||||
|
||||
|
||||
|
@ -21,7 +21,7 @@
|
||||
<d:param field="specification_item_uid" type="guid" key autoincrement/>
|
||||
<d:param field="specification_id" type="integer" required/>
|
||||
<d:param field="svc_id" type="integer" required/>
|
||||
<!--- <d:param field="specification_item" type="varchar" size="1023" preprocessor=#cleanInput#/> можно было оставить здесь --->
|
||||
<!--- <d:param field="specification_item" type="varchar" size="1023" preprocessor=#cleanInput#/> можно было оставить здесь, но мигрировали в версию --->
|
||||
|
||||
<d:param field="creator_id" type="integer" value="#request.usr_id#" skipUpdate/>
|
||||
<d:param field="updater_id" type="integer" value="#request.usr_id#" />
|
||||
@ -39,8 +39,12 @@
|
||||
/>
|
||||
|
||||
<cfquery name="qSpecification" datasource="#request.DS#">
|
||||
select s.specification_id, s.specification
|
||||
select s.specification_id, s.specification, s.contract_id
|
||||
,d.contract, d.dt_contract, d.contragent_id
|
||||
,k.contragent
|
||||
from specification s
|
||||
join contract d on (s.contract_id=d.contract_id)
|
||||
join contragent k on (d.contragent_id=k.contragent_id)
|
||||
where s.specification_id=<cfqueryparam cfsqltype="cf_sql_integer" value="#d.specification_id#" null=#!isNumeric(d.specification_id)#/>
|
||||
</cfquery>
|
||||
|
||||
@ -90,9 +94,11 @@
|
||||
<div class="detail">
|
||||
|
||||
<div class="tr">
|
||||
<div class="th">Спецификация (номер)</div>
|
||||
<div class="th">Спецификация</div>
|
||||
<div class="td">
|
||||
<a href="specification.cfm?specification_id=#d.specification_id#&#tr.fwx#">#qSpecification.specification#</a>
|
||||
<a href="specification.cfm?specification_id=#d.specification_id#&#tr.fwx#">#qSpecification.specification#[#d.specification_id#]</a>
|
||||
<a href="contract.cfm?contract_id=#qSpecification.contract_id#&#tr.fwx#">#qSpecification.contract# #dateFormat(qSpecification.dt_contract,'DD.MM.YYYY')#</a>
|
||||
<a href="contragent.cfm?contragent_id=#qSpecification.contragent_id#&#tr.fwx#">#qSpecification.contragent# </a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -161,10 +167,10 @@
|
||||
,a.dt_agreement
|
||||
,a.is_actual
|
||||
from specification_item_version siv
|
||||
join specification_item i on (siv.specification_item_uid=i.specification_item_uid)
|
||||
join specification s on (i.specification_id=s.specification_id)
|
||||
join contract d on (s.contract_id=d.contract_id)
|
||||
join agreement a on (siv.agreement_version=a.agreement_version AND s.contract_id=a.contract_id)
|
||||
left join specification_item i on (siv.specification_item_uid=i.specification_item_uid)
|
||||
left join specification s on (i.specification_id=s.specification_id)
|
||||
left join contract d on (s.contract_id=d.contract_id)
|
||||
left join agreement a on (siv.agreement_version=a.agreement_version AND s.contract_id=a.contract_id)
|
||||
where siv.specification_item_uid=<cfqueryparam cfsqltype="cf_sql_other" value="#d.specification_item_uid#"/>
|
||||
order by siv.agreement_version desc
|
||||
</cfquery>
|
||||
@ -177,7 +183,7 @@
|
||||
<cfset addUrl="specification_item_version.cfm?agreement_version=-1&specification_item_uid=#d.specification_item_uid#&#tr.fwx#"/>
|
||||
<button type="button" class="maincontrol" onclick="document.location.href='#addUrl#'">
|
||||
<a href="#addUrl#">Создать</a>
|
||||
</button> вопрос, где мы возьмем agreement_version? Или соглашение создавать автоматически?
|
||||
</button>
|
||||
</cfoutput>
|
||||
</cfif>
|
||||
</p>
|
||||
@ -186,12 +192,14 @@
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th>Версия</th>
|
||||
<th>Допник</th>
|
||||
<th>Версия N</th>
|
||||
<th>Соглашение</th>
|
||||
<th>Дата соглашения</th>
|
||||
<th>Действует</th>
|
||||
<th>Дата с</th>
|
||||
<th>Дата по</th>
|
||||
<th>Услуга (для печати)</th>
|
||||
<th>Количество</th>
|
||||
<th>Кол-во</th>
|
||||
<th>Цена</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
@ -199,19 +207,24 @@
|
||||
<cfoutput query="qSpecificationItemVersion">
|
||||
<tr>
|
||||
<td>
|
||||
<a href="specification_item_param.cfm?specification_item_param_id=#specification_item_param_id#&#tr.fwx#">
|
||||
<a href="specification_item_version.cfm?specification_item_uid=#specification_item_uid#&agreement_version=#agreement_version#&#tr.fwx#">
|
||||
<img src="img/edit.gif"/>
|
||||
</a>
|
||||
</td>
|
||||
<td>#agreement_version#</td>
|
||||
<td class="c"><a href="agreement.cfm?contract_id=#contract_id#&agreement_version=#agreement_version#&#tr.fwx#">#agreement_version#</a></td>
|
||||
<td>#agreement#</td>
|
||||
<td class="r"><
|
||||
#quantity#
|
||||
</td>
|
||||
<td class="c">#dateFormat(dt_agreement,'DD.MM.YYYY')#</td>
|
||||
<td><cfif is_actual GT 0><img src="img/ok.png"/></cfif></td>
|
||||
<td class="c">#dateFormat(dt_from, 'DD.MM.YYYY')#</td>
|
||||
<td class="c">#dateFormat(dt_to, 'DD.MM.YYYY')#</td>
|
||||
<td class="r">#specification_item_version#</td>
|
||||
<td class="r">#quantity#</td>
|
||||
<td class="r">#price#</td>
|
||||
<td class="c">
|
||||
<cfif specification_item_param_id GT 0>
|
||||
<c:link_del canWrite=#pageInfo.writePermitted()# entity="specification_item_param" id=#specification_item_param_id# fwx=#tr.fwx#/>
|
||||
<cfif pageInfo.writePermitted()>
|
||||
<a href="specification_item_version_del.cfm?specification_item_uid=#specification_item_uid#&agreement_version=#agreement_version#&#tr.fwx#">
|
||||
<img src="img/del.gif"/>
|
||||
</a>
|
||||
</cfif>
|
||||
</td>
|
||||
</tr>
|
||||
|
@ -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>
|
||||
|
||||
<div class="tr">
|
||||
<div class="th">Услуга</div>
|
||||
<div class="td">
|
||||
<layout:detail_line title="Услуга">
|
||||
<a href="svc.cfm?svc_id=#qSpecificationItem.svc_id#&#tr.fwx#">[#d.specification_item_uid#] #qSpecificationItem.svc#</a>
|
||||
</div>
|
||||
</div>
|
||||
</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> --->
|
||||
#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> --->
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
<!--- <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>
|
||||
</layout:detail_line>
|
||||
|
||||
<div class="tr">
|
||||
<div class="th">Цена</div>
|
||||
<div class="td">
|
||||
<layout:detail_line title="Цена">
|
||||
<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>
|
||||
|
||||
<div class="tr">
|
||||
<div class="th">Создано</div>
|
||||
<div class="td">
|
||||
<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>
|
||||
|
||||
Изменено
|
||||
#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>
|
||||
</layout:detail_line>
|
||||
|
||||
</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()>
|
||||
@ -271,12 +263,10 @@
|
||||
</td>
|
||||
</tr>
|
||||
</cfoutput>
|
||||
</table>
|
||||
</table> --->
|
||||
|
||||
</cfif>
|
||||
*** Можно переделать на прямой ввод в форму. Можно однородные позиции выбирать из списка, но тогда вариант выбрать 2 разных интерфейсно непонятно как реализовывать.
|
||||
поскольку спека только для демонстрации, может этого и не делать?
|
||||
Цену базовую показать
|
||||
Здесь могли бы быть компоненты (но мы их пока не запилили)
|
||||
|
||||
|
||||
<layout:page section="footer"/>
|
||||
|
Loading…
Reference in New Issue
Block a user