025 interface imptovements

This commit is contained in:
2025-10-14 15:14:14 +03:00
parent ab658a5a48
commit ce44051801
20 changed files with 2459 additions and 99 deletions
+562
View File
@@ -0,0 +1,562 @@
<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="deals_services" accessObject="" key="__id" pageInfoOut="pageInfo"/>
<d:bean readonly=true table="elma.deals_services" datasource="#request.DS#" output="d" status="status">
<d:param field="__id" type="uuid" key/>
<d:param field="__name" type="varchar" size="255" preprocessor=#cleanInput# forNull=""/>
<d:param field="__index" type="integer" forNull=""/>
<d:param field="user_description" type="varchar" preprocessor=#plain2HtmClean# forNull=""/>
<d:param field="modifier" type="varchar" size="255" preprocessor=#cleanInput# forNull=""/>
<d:param field="modifier_code" type="varchar" size="255" preprocessor=#cleanInput# forNull=""/>
<d:param field="cnt" type="integer" forNull="" default="0" init="0"/>
<d:param field="type" type="integer" forNull="" default="0" init="0"/>
<d:param field="abstractive_service_code" type="varchar" size="255" preprocessor=#cleanInput# forNull=""/>
<d:param field="deal" type="ARRAY" forNull=""/>
<d:param field="additional_agreement" type="ARRAY" forNull=""/>
<d:param field="date" type="timestamp" forNull=""/>
<d:param field="abstractive_service" type="varchar" size="255" preprocessor=#cleanInput# forNull=""/>
<d:param field="is_actual" type="bit" forNull=""/>
<d:param field="hash" type="varchar" size="255" preprocessor=#cleanInput# forNull=""/>
<d:param field="discount" type="numeric" forNull=""/>
<d:param field="version" type="varchar" size="255" preprocessor=#cleanInput# forNull=""/>
<d:param field="name_version" type="varchar" size="255" preprocessor=#cleanInput# forNull=""/>
<d:param field="date_nop" type="timestamp" forNull=""/>
<d:param field="date_end" type="timestamp" forNull=""/>
<d:param field="is_easy" type="bit" forNull=""/>
</d:bean>
<m:dispatch_detail
usePRG="No"<!---*** --->
pageInfo=#pageInfo#
id="#d.__id#"
status=#pageInfo.status#
trackOut="tr"
idAttributesOut="id"
/>
<!--- decoration --->
<cfquery name="qDecoration" datasource="#request.DS#">
select
ds."__createdAt"
from elma.deals_services ds
where ds.__id=<cfqueryparam cfsqltype="cf_sql_other" value=#d.__id# null=#!isValid("guid",d.__id)#/>
</cfquery>
</m:silent><!---
------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
---><layout:page section="header" pageInfo=#pageInfo#>
<layout:attribute name="title">
<cfoutput>
Версия строки спецификации
<cfif len(d.__id)>
<b>#d.__name#</b>
[#d.__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="__id" value="#d.__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">__id</div>
<div class="td">
#d.__id#
&nbsp; &nbsp; &nbsp;
<span style="background-color:##e0e0e0">__index </span> #d.__index#
&nbsp; &nbsp; &nbsp;
<span style="background-color:##e0e0e0">__createdAt </span> #dateTimeFormat(qDecoration.__createdAt,"yyyy-MM-dd HH:nn:ss.SSSZ")#
</div>
</div>
<div class="tr">
<div class="th"></div>
<div class="td"></div>
</div>
<div class="tr">
<div class="th">Ключ строки</div>
<div class="td">#d.hash#</div>
</div>
<div class="tr">
<div class="th">Тип периодичности</div>
<div class="td">#d.type#</div>
</div>
<div class="tr">
<div class="th">Код</div>
<div class="td">#d.abstractive_service_code#.#d.modifier_code#</div>
</div>
<div class="tr">
<div class="th">Пользовательское описание</div>
<div class="td">#d.user_description#</div>
</div>
<div class="tr">
<div class="th">Количество</div>
<div class="td">#d.cnt#</div>
</div>
<div class="tr">
<div class="th">Скидка</div>
<div class="td">#d.discount# %</div>
</div>
<div class="tr">
<div class="th">Сумма</div>
<div class="td">
<cfquery name="qParamCost">
select
sum(p.price*p.cnt*(100-COALESCE(p.discount,0))/100) as param_cost
,sum(siv.cnt*(100-COALESCE(siv.discount,0))/100*p.price*p.cnt*(100-COALESCE(p.discount,0))/100) as line_cost
from elma.service_parametrs p
join elma.deals_services siv on (p.__id = ANY (siv.params))
where siv.__id=<cfqueryparam cfsqltype="cf_sql_other" value=#d.__id# null=#!isValid("guid",d.__id)#/>
AND p."__deletedAt" IS NULL
</cfquery>
<b>#nFmt(qParamCost.line_cost)#</b> по строке, с количеством и скидкой (<b>#nFmt(qParamCost.param_cost)#</b> по компонентам)
</div>
</div>
<div class="tr">
<div class="th">Версия</div>
<div class="td">
#d.version# <i>вообще не понимаю, какой смысл вкладывается в эту цифру...</i>
</div>
</div>
<div class="tr">
<div class="th">Версии</div>
<div class="td">
<cfquery name="qV">
with
status(status, status_id, probability_pc) as (VALUES
('Закрыта неуспешно',7,0),('Закрыта успешно',6,100),('Договор подписан',5,100),('Договор на подписании',15,90),('Договор на согласовании',12,70),
('Тестирование',8,50),('Отправлено ТКП',10,20),('Внутреннее согласование',37,10),('Проработка решения',4,10),('Сбор потребностей',1,0)
)
select siv.__id::text, siv.__index, siv.version
, siv.date_nop, siv.date_end, siv.user_description
, siv.type, siv.is_easy, siv.cnt, siv.discount
, siv.is_actual, siv."__createdAt"
, d.__id::text as deal_uid, d.__index as deal_index, d.__name as deal, d.__status_status
, a.__id::text as aa_uid, a.index as aa_version, a.__name as additional_agreement
, status.status, status.probability_pc
,(select
sum(siv.cnt*(100-COALESCE(siv.discount,0))/100*p.price*p.cnt*(100-COALESCE(p.discount,0))/100)
from elma.service_parametrs p
where p.__id = ANY (siv.params)
) as line_cost
from elma.deals_services siv
left outer join elma.additional_agreements a on (a.__id = ANY(siv.additional_agreement))
join elma.deals d on (d.__id = ANY(siv.deal))
left outer join status on (d.__status_status = status.status_id)
where hash=<cfqueryparam cfsqltype="cf_sql_varchar" value=#d.hash#/>
AND siv.is_actual
order by d.__index --siv.__index, siv.version
</cfquery>
<cfloop query=#qV#>
<cfif __id EQ toString(d.__id)>
<b>#aa_version#:#version#[#__index#]</b>
<cfelse>
<a href="deal_service.cfm?__id=#__id#&#tr.fwx#" title="версия_дс : версия_строки [индекс_сделки]">#aa_version#:#version#[#__index#]</a>
</cfif>
</cfloop>
(версия_дс : версия_строки [индекс_сделки], только актуальные и со сделкой)
</div>
</div>
<div class="tr">
<div class="th">is_actual</div>
<div class="td">#d.is_actual#</div>
</div>
<div class="tr">
<div class="th">Начало тарификации</div>
<div class="td">#dateFormat(d.date_nop,'DD.MM.YYYY')#</div>
</div>
<div class="tr">
<div class="th">Окончание тарификации</div>
<div class="td">#dateFormat(d.date_end,'DD.MM.YYYY')#</div>
</div>
<div class="tr">
<div class="th">Сделка</div>
<div class="td">
<cfquery name="qDeal">
with
s(status, status_id, probability_pc) as (VALUES
('Закрыта неуспешно',7,0),('Закрыта успешно',6,100),('Договор подписан',5,100),('Договор на подписании',15,90),('Договор на согласовании',12,70),
('Тестирование',8,50),('Отправлено ТКП',10,20),('Внутреннее согласование',37,10),('Проработка решения',4,10),('Сбор потребностей',1,0)
)
select
d.__id::text
,d.__name
,c.__name as contragent
,c.__id as contragent_uid
,d."_plannedDueDate"
,d.__index
,d.__status_status
,c.id_klienta as wz
,s.status
,s.probability_pc
from elma.deals_services siv
join elma.deals d on (d.__id = ANY(siv.deal))
left outer join elma.companies c on (d._companies=c.__id)
left outer join s on (d.__status_status=s.status_id)
where siv.__id=<cfqueryparam cfsqltype="cf_sql_other" value=#d.__id# null=#!isValid("guid",d.__id)#/>
</cfquery>
<!--- <cfdump var=#qDeal#/> --->
<cfif qDeal.recordCount>
<a href="deal.cfm?__id=#qDeal.__id#&#tr.fwx#">#qDeal.__index# #qDeal.__id#</a> |
<a href="contragent.cfm?__id=#qDeal.contragent_uid#&#tr.fwx#">#qDeal.contragent# #qDeal.wz#</a> |
#qDeal.__name# |
<!--- _plannedDueDate: <cfif len(qDeal._plannedDueDate)><b>#dateFormat(qDeal._plannedDueDate,'DD.MM.YYYY')#</b><cfelse>--</cfif> --->
<b>#qDeal.__status_status#: #qDeal.status# (#qDeal.probability_pc#%)</b>
</cfif>
</div>
</div>
<div class="tr">
<div class="th">Доп. соглашение</div>
<div class="td">
<cfquery name="qAdditionalAgreement">
select
a.__id::text
,a.__index
,a.__name as additional_agreement
,a2.__id::text as base_by_uid
,a2.__index
,a2.__name as base_by
,a.contract_uid::text
,a.is_actual
,a.last_aa
,a.deal_uid::text
,a2.deal_uid::text as deal2_uid
,d2.__name as deal2
,c.__name as contract
,c.agreement_id
,c.date_of_aggrement
,z.__name as contragent
,z.__id as contragent_uid
,z.id_klienta as wz
from elma.deals_services siv
join elma.additional_agreements a on (a.__id = ANY(siv.additional_agreement))
left outer join elma.additional_agreements a2 on (a2.__id = ANY(a.base_by))
left outer join elma.deals d2 on (a2.deal_uid = d2.__id)
left outer join elma.aggrements c on (a.contract_uid=c.__id)
left outer join elma.companies z on (c.company_uid=z.__id)
where siv.__id=<cfqueryparam cfsqltype="cf_sql_other" value=#d.__id# null=#!isValid("guid",d.__id)#/>
</cfquery>
<!--- <cfdump var=#qAdditionalAgreement#/> --->
<cfif len(qAdditionalAgreement.__id)>
<a href="additional_agreement.cfm?__id=#qAdditionalAgreement.__id#&#tr.fwx#">
#qAdditionalAgreement.__index# #qAdditionalAgreement.__id# #qAdditionalAgreement.additional_agreement#
</a> |
<a href="contragent.cfm?__id=#qAdditionalAgreement.contragent_uid#&#tr.fwx#">
#qAdditionalAgreement.contragent# #qAdditionalAgreement.wz#
</a> |
Договор
<a href="contract.cfm?__id=#qAdditionalAgreement.contract_uid#&#tr.fwx#">
#qAdditionalAgreement.contract# (#qAdditionalAgreement.agreement_id#)
#dateFormat(qAdditionalAgreement.date_of_aggrement,"YYYY-MM-DD")#
</a>
<br/>
is_actual: <b>#qAdditionalAgreement.is_actual#</b>
last_aa: <b>#qAdditionalAgreement.last_aa#</b>
base_by: <a href="additional_agreement.cfm?__id=#qAdditionalAgreement.base_by_uid#&#tr.fwx#">
#qAdditionalAgreement.base_by_uid#
#qAdditionalAgreement.base_by#
</a>
(<a href="deal.cfm?__id=#qAdditionalAgreement.deal2_uid#&#tr.fwx#" title="сделка base_by">
#qAdditionalAgreement.deal2_uid#
#qAdditionalAgreement.deal2#
</a>)
</cfif>
</div>
</div>
<!--- <div class="tr">
<div class="th">Параметры</div>
<div class="td">
<cfquery name="qParam">
select params::text
from elma.deals_services siv
where siv.__id=<cfqueryparam cfsqltype="cf_sql_other" value=#d.__id# null=#!isValid("guid",d.__id)#/>
</cfquery>
#qParam.params# (обратная ссылка)
</div>
</div> --->
</div>
</cfoutput>
<layout:page section="extension" closeForm="Yes"/>
<cfif len(d.__id)>
<cfquery name="qParam">
select
p.__id
,p.__index
,p.__name
,p.type
,p.price
,p.code
,p.cnt
,p.name
,p.ed_izm
,p.discount
,p.deal::text
,p.__index
,(p.price*p.cnt*(100-COALESCE(p.discount,0))/100) as param_cost
from elma.service_parametrs p
join elma.deals_services siv on (p.__id = ANY (siv.params))
where siv.__id=<cfqueryparam cfsqltype="cf_sql_other" value=#d.__id# null=#!isValid("guid",d.__id)#/>
order by type
</cfquery>
<cfquery name="qParamTotal" dbtype="query">
select
sum(param_cost) as total_cost
from qParam
</cfquery>
<cfoutput>
<h4>Параметры (компоненты) (#qParam.recordCount#)</h4>
</cfoutput>
<!--- <layout:render_query query=#qService#/> --->
<table class="worktable">
<thead>
<tr>
<th>__index</th>
<!--- <th>__name</th> --->
<th>type</th>
<th>code</th>
<th>name</th>
<th>Кол-во</th>
<th>Ед.изм.</th>
<th>Цена</th>
<th>Скидка %</th>
<th>Ст-ть</th>
<!--- <th>deal</th> --->
<th>__id</th>
</tr>
</thead>
<cfoutput query="qParam">
<tr>
<td class="c">#__index#</td>
<!--- <td class="c">#__name#</td> --->
<td class="c">#type#</td>
<td class="c">#code#</td>
<td class="c">#name#</td>
<td class="r">#cnt#</td>
<td class="c">#ed_izm#</td>
<td class="r">#price#</td>
<td class="c">#discount#</td>
<td class="r">#nFmt(param_cost)#</td>
<!--- <td class="c">#deal#</td> --->
<td class="c">#__id#</td>
</tr>
</cfoutput>
<cfoutput query="qParamTotal">
<tr>
<td class="r b" colspan="8">Итого</td>
<td class="r b">#nFmt(total_cost)#</td>
<td colspan="2"></td>
</tr>
</cfoutput>
</table>
</cfif>
<cfquery name="qVer">
with
status(status, status_id, probability_pc) as (VALUES
('Закрыта неуспешно',7,0),('Закрыта успешно',6,100),('Договор подписан',5,100),('Договор на подписании',15,90),('Договор на согласовании',12,70),
('Тестирование',8,50),('Отправлено ТКП',10,20),('Внутреннее согласование',37,10),('Проработка решения',4,10),('Сбор потребностей',1,0)
)
select siv.__id::text, siv.__index, siv.version
, siv.date_nop, siv.date_end, siv.user_description
, siv.type, siv.is_easy, siv.cnt, siv.discount
, siv.is_actual, siv."__createdAt"
, d.__id::text as deal_uid, d.__index as deal_index, d.__name as deal, d.__status_status
, a.__id::text as aa_uid, a.index as aa_version, a.__name as additional_agreement
, status.status, status.probability_pc
,(select
sum(siv.cnt*(100-COALESCE(siv.discount,0))/100*p.price*p.cnt*(100-COALESCE(p.discount,0))/100)
from elma.service_parametrs p
where p.__id = ANY (siv.params)
) as line_cost
from elma.deals_services siv
left outer join elma.additional_agreements a on (a.__id = ANY(siv.additional_agreement))
left outer join elma.deals d on (d.__id = ANY(siv.deal))
left outer join status on (d.__status_status = status.status_id)
where hash=<cfqueryparam cfsqltype="cf_sql_varchar" value=#d.hash#/>
order by d.__index
</cfquery>
<cfquery name="qVerActual" dbtype="query">
select * from qVer where is_actual > 0
</cfquery> <!--- не повторяем сортировку, хотя это некорректно --->
<cfquery name="qVerDraft" dbtype="query">
select * from qVer where is_actual = 0 OR is_actual IS NULL
</cfquery><!--- не повторяем сортировку, хотя это некорректно --->
<cfoutput>
<h4>Версии строки без черновиков (#qVerActual.recordCount#)</h4>
</cfoutput>
<table class="worktable">
<thead>
<tr>
<th>Индекс версии</th>
<th>Создана</th>
<th>Верс. доп.с.</th>
<th>Версия строки</th>
<th>is actual</th>
<th>НОУ</th>
<th>КОУ</th>
<th>User Description</th>
<th>type</th>
<th>Кол-во</th>
<th>Скид&shy;ка%</th>
<th>Ст-ть</th>
<th>Сделка</th>
<th>Статус</th>
<th>Вер.</th>
<th>Доп.с.</th>
</tr>
</thead>
<cfoutput query="qVerActual">
<tr>
<td class="c">
<cfif __id EQ toString(d.__id)>
<b>#__index#</b>
<cfelse>
<a href="deal_service.cfm?__id=#__id#&#tr.fwx#" title="#__id#">#__index#</a>
</cfif>
</td>
<td class="c nw">#dateFormat(__createdAt,"YYYY-MM-DD")#</td>
<td class="c">#aa_version#</td>
<td class="c">#version#</td>
<td class="c">#is_actual#</td>
<td class="c nw">#dateFormat(date_nop,"YYYY-MM-DD")#</td>
<td class="c nw">#dateFormat(date_end,"YYYY-MM-DD")#</td>
<td>#user_description#</td>
<td class="r">#type#</td>
<td class="c">#cnt#</td>
<td class="c">#discount#</td>
<td class="r nw">#nFmt(line_cost)#</td>
<td class="l"><a href="deal.cfm?__id=#deal_uid#&#tr.fwx#" title="#deal_uid#">#deal#</a></td>
<td class="c">#__status_status#</td>
<td class="c">#probability_pc#</td>
<td class="l"><a href="additional_agreement.cfm?__id=#aa_uid#&#tr.fwx#" title="#aa_uid#">#additional_agreement#</a></td>
</tr>
</cfoutput>
</table>
<cfoutput>
<h4>Версии строки - черновики (#qVerDraft.recordCount#)</h4>
</cfoutput>
<table class="worktable">
<thead>
<tr>
<th>Индекс версии</th>
<th>Создана</th>
<th>Верс. доп.с.</th>
<th>Версия строки</th>
<th>is actual</th>
<th>НОУ</th>
<th>КОУ</th>
<th>User Description</th>
<th>type</th>
<th>Кол-во</th>
<th>Скид&shy;ка%</th>
<th>Ст-ть</th>
<th>Сделка</th>
<th>Статус</th>
<th>Вер.</th>
<th>Доп.с.</th>
</tr>
</thead>
<cfoutput query="qVerDraft">
<tr>
<td class="c">
<cfif __id EQ toString(d.__id)>
<b>#__index#</b>
<cfelse>
<a href="deal_service.cfm?__id=#__id#&#tr.fwx#" title="#__id#">#__index#</a>
</cfif>
</td>
<td class="c nw">#dateFormat(__createdAt,"YYYY-MM-DD")#</td>
<td class="c">#aa_version#</td>
<td class="c">#version#</td>
<td class="c">#is_actual#</td>
<td class="c nw">#dateFormat(date_nop,"YYYY-MM-DD")#</td>
<td class="c nw">#dateFormat(date_end,"YYYY-MM-DD")#</td>
<td class="l">#user_description#</td>
<td class="r">#type#</td>
<td class="c">#cnt#</td>
<td class="c">#discount#</td>
<td class="r nw">#nFmt(line_cost)#</td>
<td class="l"><a href="deal.cfm?__id=#deal_uid#&#tr.fwx#" title="#deal_uid#">#deal#</a></td>
<td class="c">#__status_status#</td>
<td class="c">#probability_pc#</td>
<td class="l"><a href="additional_agreement.cfm?__id=#aa_uid#&#tr.fwx#" title="#aa_uid#">#additional_agreement#</a></td>
</tr>
</cfoutput>
</table>
<!--- <cfdump var=#qVer#/> --->
<layout:page section="footer"/>