072 responsibles

This commit is contained in:
2026-08-12 13:15:19 +03:00
parent 255ce141d9
commit 44ee1b1197
6 changed files with 98 additions and 35 deletions
+1 -1
View File
@@ -87,7 +87,7 @@
<!--- global settings ---> <!--- global settings --->
<cfset request.RECORDS_PER_PAGE=500/> <cfset request.RECORDS_PER_PAGE=500/>
<cfset request.APP_VERSION="0.00.071"/> <cfset request.APP_VERSION="0.00.072"/>
<cfset request.STAND=getStand()/> <cfset request.STAND=getStand()/>
<cflock scope="application" type="readonly" timeout=3> <cflock scope="application" type="readonly" timeout=3>
+8 -1
View File
@@ -30,10 +30,14 @@
<d:field title="Дата договора">d.date_of_aggrement</d:field> <d:field title="Дата договора">d.date_of_aggrement</d:field>
<d:field title="Дата окончания">d.date_end_aggrement</d:field> <d:field title="Дата окончания">d.date_end_aggrement</d:field>
<d:field title="Тип договора">d.type_of_agreement</d:field> <d:field title="Тип договора">d.type_of_agreement</d:field>
<d:field title="Ответственный за к/а">c.__name as responsible</d:field>
<d:field title="Email отв-го">c.email as responsible_email</d:field>
<d:field title="Статус">c.__status_status as responsible_status</d:field>
<d:field title="Доп. соглашений">(select count(*) from elma.additional_agreements a where a.contract_uid=d.__id AND a."__deletedAt" IS NULL) as aa_cnt</d:field> <d:field title="Доп. соглашений">(select count(*) from elma.additional_agreements a where a.contract_uid=d.__id AND a."__deletedAt" IS NULL) as aa_cnt</d:field>
</d:field_set> </d:field_set>
from elma.aggrements d from elma.aggrements d
left outer join elma.companies k on (d.company_uid=k.__id) LEFT OUTER JOIN elma.companies k ON (d.company_uid=k.__id)
LEFT OUTER JOIN elma.comp_users_ext c ON (k.responsible=c.__id)
where 1=1 <m:filter_build filter=#pageInfo.settings.filter#/> where 1=1 <m:filter_build filter=#pageInfo.settings.filter#/>
order by <m:order_build sortArray=#pageInfo.settings.sort.sortArray# fieldCount=#fieldCount#/> order by <m:order_build sortArray=#pageInfo.settings.sort.sortArray# fieldCount=#fieldCount#/>
</cfquery> </cfquery>
@@ -118,6 +122,9 @@ select count(*) as cnt from elma.aggrements d where 1=1
<c:column width="10%" field="company_uid"/> <c:column width="10%" field="company_uid"/>
<c:column width="10%" field="f_contragent"/> <c:column width="10%" field="f_contragent"/>
<c:column width="10%" field="wz"/> <c:column width="10%" field="wz"/>
<c:column width="10%" field="responsible"/>
<c:column width="10%" field="responsible_email"/>
<c:column width="2%" field="responsible_status"/>
<c:column width="10%" field="date_of_aggrement" formatter=#function(dt){return dateformat(dt,"YYYY-MM-DD");}#/> <c:column width="10%" field="date_of_aggrement" formatter=#function(dt){return dateformat(dt,"YYYY-MM-DD");}#/>
<c:column width="10%" field="date_end_aggrement" formatter=#function(dt){return dateformat(dt,"YYYY-MM-DD");}#/> <c:column width="10%" field="date_end_aggrement" formatter=#function(dt){return dateformat(dt,"YYYY-MM-DD");}#/>
<c:column width="10%" field="type_of_agreement"><c:td class="l"/></c:column> <c:column width="10%" field="type_of_agreement"><c:td class="l"/></c:column>
+36 -21
View File
@@ -26,14 +26,27 @@
</cfif> </cfif>
</cfif> </cfif>
<d:bean readonly=true table="elma.companies" datasource="#request.DS#" output="d" status="status"> <!--- <d:bean readonly=true table="elma.companies" datasource="#request.DS#" output="d" status="status">
<d:param field="__id" type="uuid" key/> <d:param field="__id" type="uuid" key/>
<d:param field="__name" type="varchar" size="255" preprocessor=#cleanInput# forNull=""/> <d:param field="__name" type="varchar" size="255" preprocessor=#cleanInput# forNull=""/>
<d:param field="_inn" type="varchar" size="255" preprocessor=#cleanInput# forNull=""/> <d:param field="_inn" type="varchar" size="255" preprocessor=#cleanInput# forNull=""/>
<d:param field="_kpp" type="varchar" size="255" preprocessor=#cleanInput# forNull=""/> <d:param field="_kpp" type="varchar" size="255" preprocessor=#cleanInput# forNull=""/>
<d:param field="id_klienta" type="varchar" size="255" preprocessor=#cleanInput# forNull=""/> <d:param field="id_klienta" type="varchar" size="255" preprocessor=#cleanInput# forNull=""/>
</d:bean> <d:param field='"__createdAt"' type="timestamp"/>
<d:param field='"__updatedAt"' type="timestamp"/>
<d:param field='"__deletedAt"' type="timestamp"/>
</d:bean> --->
<!--- column ["__createdAt"] not found in query, columns are [__ID,__NAME,_INN,_KPP,ID_KLIENTA,__CREATEDAT,__UPDATEDAT,__DELETEDAT] --->
<cfparam name="__id" default=""/>
<cfquery name="d">
select
__id, __name, _inn, _kpp, id_klienta, "__createdAt","__updatedAt","__deletedAt"
from elma.companies
where __id=<cfqueryparam cfSqlType="cf_sql_other" value=#__id# null=#!isValid("guid",__id)#/>
</cfquery>
<!--- исторически сэкономил некоторые телодвижения, использовав bean. Но он не поддерживает имена колонок, чувствительные к регистру.
Теперь уже можно было бы и в один запрос все упаковать - все равно это форма ReadOnly --->
<m:dispatch_detail <m:dispatch_detail
usePRG="No"<!---*** ---> usePRG="No"<!---*** --->
@@ -45,14 +58,12 @@
/> />
<!--- decoration ---> <!--- decoration --->
<!--- <cfquery name="qDecoration" datasource="#request.DS#"> <cfquery name="qDecoration" datasource="#request.DS#">
select select c.__name as responsible, c.email as responsible_email, c.__status_status as responsible_status
a.login as creator, a.shortname as creator_shortname, m.login as updater, m.shortname as updater_shortname from elma.companies g
from contragent g LEFT OUTER JOIN elma.comp_users_ext c on (g.responsible=c.__id)
left outer join usr a on (g.creator_id=a.usr_id) where g.__id=<cfqueryparam cfSqlType="cf_sql_other" value=#d.__id# null=#!isValid("guid",d.__id)#/>
left outer join usr m on (g.updater_id=m.usr_id) </cfquery>
where g.contragent_id=<cfqueryparam attributeCollection=#id#/>
</cfquery> --->
</m:silent><!--- </m:silent><!---
@@ -109,21 +120,25 @@
<div class="td">#d.id_klienta#</div> <div class="td">#d.id_klienta#</div>
</div> </div>
<!--- <div class="tr"> <div class="tr">
<div class="th">wz_id</div> <div class="th">Ответственный</div>
<div class="td">#d.wz_id#"/></div> <div class="td<cfif qDecoration.responsible_status NEQ 2> err</cfif>">#qDecoration.responsible# <a href="mailto:#qDecoration.responsible_email#">#qDecoration.responsible_email#</a> статус:#qDecoration.responsible_status#<cfswitch expression=#qDecoration.responsible_status#><cfcase value="2"> (paботает)</cfcase><cfcase value="3"> (уволен)</cfcase></cfswitch></div>
</div> --->
<!--- <div class="tr">
<div class="th">code_inn</div>
<div class="td">#d.code_inn#"/></div>
</div> </div>
<div class="tr">
<div class="th">Создан</div>
<div class="td">#dateFormat(d.__createdAt,"YYYY-MM-DD")#</div>
</div>
<div class="tr"> <div class="tr">
<div class="th">code_kpp</div> <div class="th">Изменен</div>
<div class="td">#d.code_kpp#"/></div> <div class="td">#dateFormat(d.__updatedAt,"YYYY-MM-DD")#</div>
</div> ---> </div>
<div class="tr">
<div class="th">Удален</div>
<div class="td">#dateFormat(d.__deletedAt,"YYYY-MM-DD")#</div>
</div>
</div> </div>
</cfoutput> </cfoutput>
+9 -3
View File
@@ -25,6 +25,9 @@
<d:field title="__index">k.__index</d:field> <d:field title="__index">k.__index</d:field>
<d:field title="Контрагент">k.__name</d:field> <d:field title="Контрагент">k.__name</d:field>
<d:field title="WZ">k.id_klienta as wz</d:field> <d:field title="WZ">k.id_klienta as wz</d:field>
<d:field title="Ответственный">c.__name as responsible</d:field>
<d:field title="Email отв-го">c.email as responsible_email</d:field>
<d:field title="Cтатус отв-го">c.__status_status as responsible_status</d:field>
<d:field title="Создано">k."__createdAt" as __createdAt</d:field> <d:field title="Создано">k."__createdAt" as __createdAt</d:field>
<d:field title="Обновлено">k."__updatedAt" as __updatedAt</d:field> <d:field title="Обновлено">k."__updatedAt" as __updatedAt</d:field>
<d:field title="Удалено">k."__deletedAt" as __deletedAt</d:field> <d:field title="Удалено">k."__deletedAt" as __deletedAt</d:field>
@@ -33,6 +36,7 @@
<d:field title="Допников">(select count(*) from elma.additional_agreements g join elma.aggrements d on (g.contract_uid=d.__id) where d.company_uid=k.__id) as aa_cnt</d:field> <d:field title="Допников">(select count(*) from elma.additional_agreements g join elma.aggrements d on (g.contract_uid=d.__id) where d.company_uid=k.__id) as aa_cnt</d:field>
</d:field_set> </d:field_set>
from elma.companies k from elma.companies k
LEFT OUTER JOIN elma.comp_users_ext c on (k.responsible=c.__id)
where 1=1 <m:filter_build filter=#pageInfo.settings.filter#/> where 1=1 <m:filter_build filter=#pageInfo.settings.filter#/>
--AND exists (select * from elma.deals d where d._companies=k.__id) --AND exists (select * from elma.deals d where d._companies=k.__id)
order by <m:order_build sortArray=#pageInfo.settings.sort.sortArray# fieldCount=#fieldCount#/> order by <m:order_build sortArray=#pageInfo.settings.sort.sortArray# fieldCount=#fieldCount#/>
@@ -108,11 +112,13 @@ select count(*) as cnt from elma.companies where 1=1
<c:column width="10%" field="__id"/> <c:column width="10%" field="__id"/>
<c:column width="3%" field="__index"><c:td class="c"/></c:column> <c:column width="3%" field="__index"><c:td class="c"/></c:column>
<c:column width="20%" field="f_contragent"/> <c:column width="20%" field="f_contragent"/>
<c:column width="5%" field="wz"/> <c:column width="5%" field="wz"/>
<c:column width="10%" field="responsible"/>
<c:column width="7%" field="responsible_email"/>
<c:column width="2%" field="responsible_status"/>
<c:column width="5%" field="deal_cnt" formatter=#function(n){return (n EQ 0)?"":n;}#><c:td class="c"/></c:column> <c:column width="5%" field="deal_cnt" formatter=#function(n){return (n EQ 0)?"":n;}#><c:td class="c"/></c:column>
<c:column width="5%" field="contract_cnt" formatter=#function(n){return (n EQ 0)?"":n;}#><c:td class="c"/></c:column> <c:column width="5%" field="contract_cnt" formatter=#function(n){return (n EQ 0)?"":n;}#><c:td class="c"/></c:column>
<c:column width="5%" field="aa_cnt" formatter=#function(n){return (n EQ 0)?"":n;}#><c:td class="c"/></c:column> <c:column width="5%" field="aa_cnt" formatter=#function(n){return (n EQ 0)?"":n;}#><c:td class="c"/></c:column>
<c:column width="5%" field="__createdAt" formatter=#function(dt){return dateformat(dt,"YYYY-MM-DD");}#><c:td class="c"/></c:column> <c:column width="5%" field="__createdAt" formatter=#function(dt){return dateformat(dt,"YYYY-MM-DD");}#><c:td class="c"/></c:column>
<c:column width="5%" field="__updatedAt" formatter=#function(dt){return dateformat(dt,"YYYY-MM-DD");}#><c:td class="c"/></c:column> <c:column width="5%" field="__updatedAt" formatter=#function(dt){return dateformat(dt,"YYYY-MM-DD");}#><c:td class="c"/></c:column>
<c:column width="5%" field="__deletedAt" formatter=#function(dt){return dateformat(dt,"YYYY-MM-DD");}#><c:td class="c"/></c:column> <c:column width="5%" field="__deletedAt" formatter=#function(dt){return dateformat(dt,"YYYY-MM-DD");}#><c:td class="c"/></c:column>
+6 -2
View File
@@ -36,8 +36,8 @@
<d:field_set titleMapOut="titleMap" lengthOut="fieldCount"> <d:field_set titleMapOut="titleMap" lengthOut="fieldCount">
<d:field title="ID" cfSqlType="CF_SQL_OTHER">d.__id::text as __id</d:field> <d:field title="ID" cfSqlType="CF_SQL_OTHER">d.__id::text as __id</d:field>
<d:field title="index" cfSqlType="CF_SQL_INTEGER">d.__index</d:field> <d:field title="index" cfSqlType="CF_SQL_INTEGER">d.__index</d:field>
<d:field title="Название">d.__name</d:field> <d:field title="Название сделки">d.__name</d:field>
<d:field title="company_uid">d._companies::text as _companies</d:field> <d:field title="company">d._companies::text as _companies</d:field>
<d:field title="Создана">d."__createdAt" as __createdAt</d:field><!--- *** косяк d:field, если взять в кавычки имя поля, оно не попадает в массив полей ---> <d:field title="Создана">d."__createdAt" as __createdAt</d:field><!--- *** косяк d:field, если взять в кавычки имя поля, оно не попадает в массив полей --->
<d:field title="Контрагент">k.__name as contragent</d:field> <d:field title="Контрагент">k.__name as contragent</d:field>
<d:field title="Контрагент">k.__id::text as contragent_uid</d:field> <d:field title="Контрагент">k.__id::text as contragent_uid</d:field>
@@ -46,6 +46,8 @@
<d:field title="Статус">s.status</d:field> <d:field title="Статус">s.status</d:field>
<d:field title="Вер-ть %">s.probability_pc</d:field> <d:field title="Вер-ть %">s.probability_pc</d:field>
<d:field title="Ответственный">c.__name as owner</d:field> <d:field title="Ответственный">c.__name as owner</d:field>
<d:field title="Email отв-го">c.email as owner_email</d:field>
<d:field title="Статус">c.__status_status as owner_status</d:field>
<d:field title="Допник">a.__name as additional_agreement</d:field> <d:field title="Допник">a.__name as additional_agreement</d:field>
<d:field title="Допник">a.__id::text as additional_agreement_uid</d:field> <d:field title="Допник">a.__id::text as additional_agreement_uid</d:field>
<d:field title="Договор">g.__name as contract</d:field> <d:field title="Договор">g.__name as contract</d:field>
@@ -167,6 +169,8 @@ select count(*) as cnt from elma.deals d where 1=1
<!--- <c:column width="3%" field="line_cnt_actual"><c:td class="c"/></c:column> ---> <!--- <c:column width="3%" field="line_cnt_actual"><c:td class="c"/></c:column> --->
<c:column width="5%" field="__createdAt" formatter=#function(dt){return dateformat(dt,"YYYY-MM-DD");}#><c:td class="c"/></c:column> <c:column width="5%" field="__createdAt" formatter=#function(dt){return dateformat(dt,"YYYY-MM-DD");}#><c:td class="c"/></c:column>
<c:column width="8%" field="owner"><c:td class="l"/></c:column> <c:column width="8%" field="owner"><c:td class="l"/></c:column>
<c:column width="10%" field="owner_email"/>
<c:column width="2%" field="owner_status"/>
<c:column width="5%" field="f_additional_agreement"><c:td class="l"/></c:column> <c:column width="5%" field="f_additional_agreement"><c:td class="l"/></c:column>
<c:column width="5%" field="f_contract"><c:td class="l"/></c:column> <c:column width="5%" field="f_contract"><c:td class="l"/></c:column>
<c:column width="5%" field="dt_contract" formatter=#function(dt){return dateformat(dt,"YYYY-MM-DD");}#><c:td class="c"/></c:column> <c:column width="5%" field="dt_contract" formatter=#function(dt){return dateformat(dt,"YYYY-MM-DD");}#><c:td class="c"/></c:column>
+38 -7
View File
@@ -12,9 +12,9 @@
<cfquery name="qStorage" datasource="billing-vc" ><!--- cachedWithin=#createTimeSpan(0, 0, 25, 0)# ---> <cfquery name="qStorage" datasource="billing-vc" ><!--- cachedWithin=#createTimeSpan(0, 0, 25, 0)# --->
SELECT SELECT
<d:field_set titleMapOut="titleMap" lengthOut="fieldCount"> <d:field_set titleMapOut="titleMapStor" lengthOut="fieldCountStor">
<d:field title="Тенант">t.name AS tenant</d:field> <d:field title="Тенант">t.name AS tenant</d:field>
<d:field title="WZ">m.clientid AS wz</d:field> <d:field title="WZ">upper(m.clientid) AS wz</d:field>
<d:field title="status">m.status</d:field> <d:field title="status">m.status</d:field>
<d:field title="End of Test">m.end_test_date</d:field> <d:field title="End of Test">m.end_test_date</d:field>
<d:field title="End of Test">null as dt_end_of_test</d:field> <d:field title="End of Test">null as dt_end_of_test</d:field>
@@ -51,7 +51,12 @@ WHERE c.timestamp >= <cfqueryparam cfsqltype="cf_sql_timestamp" value=#dateAdd("
GROUP BY GROUP BY
m.clientid, v.name, p.name, sp.name, t.name, m.clientid, v.name, p.name, sp.name, t.name,
m.status, m.end_test_date, tm.ts m.status, m.end_test_date, tm.ts
</cfquery>
<cfquery name="qResponsible"><!--- cachedWithin=#createTimeSpan(0, 0, 25, 0)# ---><!--- имя колонки __id мы не принимаем почему-то --->
SELECT upper(k.id_klienta) as wz, k.__id as id, c.__name as responsible, c.email as responsible_email, c.__status_status as responsible_status
from elma.companies k
LEFT OUTER JOIN elma.comp_users_ext c on (k.responsible=c.__id)
</cfquery> </cfquery>
<!--- patch date ---> <!--- patch date --->
@@ -69,11 +74,31 @@ GROUP BY
<cfset db = new MemoryDbHelper()/> <cfset db = new MemoryDbHelper()/>
<cfset db.register("qStorage", qStorage, "inmem")/> <cfset db.register("qStorage", qStorage, "inmem")/>
<!--- лень переделывать, мы пользуемся аннотацией от первого запроса, просто добавляя ко второму сортировку ---> <cfset db.register("qResponsible", qResponsible, "inmem")/><!--- имя колонки __id мы не принимаем почему-то --->
<cfquery name="qRead" datasource="inmem"> <cfquery name="qRead" datasource="inmem">
select * from qStorage select
ORDER BY <d:field_set titleMapOut="titleMap" lengthOut="fieldCount">
<m:order_build sortArray=#pageInfo.settings.sort.sortArray# fieldCount=#fieldCount#/> <d:field title="Тенант">s.tenant</d:field>
<d:field title="WZ">s.wz</d:field>
<d:field title="status">s.status</d:field>
<d:field title="End of Test">s.end_test_date</d:field>
<d:field title="End of Test">s.dt_end_of_test</d:field>
<d:field title="VDC">s.vdc</d:field>
<d:field title="Provider VDC">s.provider_vdc</d:field>
<d:field title="code">s.code</d:field>
<d:field title="Storage Profile">s.storage_profile</d:field>
<d:field title="Limit GB">s.limit_gb</d:field>
<d:field title="Allocation GB">s.alloc_gb</d:field>
<d:field title="Timestamp">s.ts</d:field>
<d:field title="Ответственный за к/а">r.responsible</d:field>
<d:field title="Email отв-го">r.responsible_email</d:field>
<d:field title="Статус отв-го">r.responsible_status</d:field>
</d:field_set>
from qStorage s
LEFT OUTER JOIN qResponsible r ON (s.wz=r.wz)
ORDER BY
<m:order_build sortArray=#pageInfo.settings.sort.sortArray# fieldCount=#fieldCount#/>
</cfquery> </cfquery>
@@ -121,6 +146,9 @@ GROUP BY
<th><layout:column_head name="limit_gb"/></th> <th><layout:column_head name="limit_gb"/></th>
<th><layout:column_head name="alloc_gb"/></th> <th><layout:column_head name="alloc_gb"/></th>
<th><layout:column_head name="ts"/></th> <th><layout:column_head name="ts"/></th>
<th><layout:column_head name="responsible"/></th>
<th><layout:column_head name="responsible_email"/></th>
<th><layout:column_head name="responsible_status"/></th>
</layout:grid_head> </layout:grid_head>
<cfoutput query="qRead"> <cfoutput query="qRead">
<tr> <tr>
@@ -136,7 +164,10 @@ GROUP BY
<td>#storage_profile#</td> <td>#storage_profile#</td>
<td class="r<cfif NOT (status EQ "prod" OR status EQ "internal-test") AND isDate(dt_end_of_test) AND dt_end_of_test LE Now()> b err</cfif>">#limit_gb#</td> <td class="r<cfif NOT (status EQ "prod" OR status EQ "internal-test") AND isDate(dt_end_of_test) AND dt_end_of_test LE Now()> b err</cfif>">#limit_gb#</td>
<td class="r<cfif NOT (status EQ "prod" OR status EQ "internal-test") AND isDate(dt_end_of_test) AND dt_end_of_test LE Now()> b err</cfif>">#alloc_gb#</td> <td class="r<cfif NOT (status EQ "prod" OR status EQ "internal-test") AND isDate(dt_end_of_test) AND dt_end_of_test LE Now()> b err</cfif>">#alloc_gb#</td>
<td>#dateFormaT(ts,"YYYY-MM-DD")# #timeFormaT(ts,"HH-MM")#</td> <td>#dateFormaT(ts,"YYYY-MM-DD")# #timeFormaT(ts,"HH-MM")#</td>
<td<cfif responsible_status NEQ 2> class="err"</cfif>>#responsible#</td>
<td<cfif responsible_status NEQ 2> class="err"</cfif>>#responsible_email#</td>
<td<cfif responsible_status NEQ 2> class="err"</cfif>>#responsible_status#</td>
</tr> </tr>
</cfoutput> </cfoutput>