068
This commit is contained in:
+70
-34
@@ -51,7 +51,7 @@
|
|||||||
|
|
||||||
//variables.framework.docs={};
|
//variables.framework.docs={};
|
||||||
variables.framework.docs.APIName="Deck API";
|
variables.framework.docs.APIName="Deck API";
|
||||||
variables.framework.docs.APIVersion="0.067";
|
variables.framework.docs.APIVersion="0.068";
|
||||||
|
|
||||||
variables.framework.globalHeaders = structNew();
|
variables.framework.globalHeaders = structNew();
|
||||||
variables.framework.globalHeaders["Access-Control-Expose-Headers"] = "Location";
|
variables.framework.globalHeaders["Access-Control-Expose-Headers"] = "Location";
|
||||||
@@ -98,7 +98,28 @@
|
|||||||
<cfreturn (arguments.x NEQ 0)/><!--- при сериализации дает false/true --->
|
<cfreturn (arguments.x NEQ 0)/><!--- при сериализации дает false/true --->
|
||||||
</cfif>
|
</cfif>
|
||||||
</cffunction>
|
</cffunction>
|
||||||
<cfset request.castToBool=#castToBool#/>
|
<cfset request.castToBool=#castToBool#/>
|
||||||
|
|
||||||
|
|
||||||
|
<!--- <cffunction
|
||||||
|
name="getStand"
|
||||||
|
access="private"
|
||||||
|
returntype="string"
|
||||||
|
output="true">
|
||||||
|
|
||||||
|
<cftry>
|
||||||
|
<cfquery name=qConfig>
|
||||||
|
select value as stand from config
|
||||||
|
where name='STAND'
|
||||||
|
</cfquery>
|
||||||
|
<cfreturn qConfig.stand/>
|
||||||
|
|
||||||
|
<cfcatch type="ANY">
|
||||||
|
|
||||||
|
</cfcatch>
|
||||||
|
</cftry>
|
||||||
|
<cfreturn ""/>
|
||||||
|
</cffunction> --->
|
||||||
|
|
||||||
|
|
||||||
<cffunction name="onApplicationStart">
|
<cffunction name="onApplicationStart">
|
||||||
@@ -108,9 +129,38 @@
|
|||||||
<cfset this.iamServiceUrl=locateIamService()/> <!--- ***при недоступности будет падать все --->
|
<cfset this.iamServiceUrl=locateIamService()/> <!--- ***при недоступности будет падать все --->
|
||||||
<cfreturn super.onApplicationStart() />
|
<cfreturn super.onApplicationStart() />
|
||||||
</cffunction>
|
</cffunction>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<cffunction name="locateIamService"><!--- *** архитектурный колхоз --->
|
<cffunction name="locateIamService"><!--- *** архитектурный колхоз --->
|
||||||
|
<!--- почему-то мы не видим других функций, когда нас вызывают onApplicationStart. С другой стороны, а почем вообще должны вызывать без перезагрузки приложения --->
|
||||||
|
<cfset var stand=""/>
|
||||||
|
<cftry>
|
||||||
|
<cfquery name=qConfig>
|
||||||
|
select value as stand from config
|
||||||
|
where name='STAND'
|
||||||
|
</cfquery>
|
||||||
|
<cfset stand = qConfig.stand/>
|
||||||
|
|
||||||
|
<cfswitch expression=#stand#>
|
||||||
|
<cfcase value=",dev">
|
||||||
|
<cfreturn "https://deck-dev.ngcloud.ru/api/v1/user"/>
|
||||||
|
</cfcase>
|
||||||
|
<cfcase value="test">
|
||||||
|
<cfreturn "https://deck-test.ngcloud.ru/api/v1/user"/>
|
||||||
|
</cfcase>
|
||||||
|
<cfcase value="prod">
|
||||||
|
<cfreturn "https://deck.ngcloud.ru/api/v1/user"/>
|
||||||
|
</cfcase>
|
||||||
|
<cfdefaultcase><!--- proceed to the legacy locator ---></cfdefaultcase>
|
||||||
|
</cfswitch>
|
||||||
|
|
||||||
|
<cfcatch type="ANY">
|
||||||
|
<!--- do nothing, proceed to the legacy locator --->
|
||||||
|
</cfcatch>
|
||||||
|
</cftry>
|
||||||
|
|
||||||
|
<!--- вот если ничего не прописано, попробуем по-старинке --->
|
||||||
<cfloop list="https://deck-dev.ngcloud.ru/api/v1/user,https://deck-test.ngcloud.ru/api/v1/user,https://deck.ngcloud.ru/api/v1/user" index="serviceUrl"><!--- *** начиная с девелоперского --->
|
<cfloop list="https://deck-dev.ngcloud.ru/api/v1/user,https://deck-test.ngcloud.ru/api/v1/user,https://deck.ngcloud.ru/api/v1/user" index="serviceUrl"><!--- *** начиная с девелоперского --->
|
||||||
<cftry>
|
<cftry>
|
||||||
<cfhttp url=#serviceUrl# method="OPTIONS" result="resp" timeout=1/>
|
<cfhttp url=#serviceUrl# method="OPTIONS" result="resp" timeout=1/>
|
||||||
@@ -132,6 +182,8 @@
|
|||||||
<cfreturn super.onRequest(template) />
|
<cfreturn super.onRequest(template) />
|
||||||
</cffunction> --->
|
</cffunction> --->
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<cfscript>
|
<cfscript>
|
||||||
|
|
||||||
function onTaffyRequest(verb, cfc, requestArguments, mimeExt, headers){
|
function onTaffyRequest(verb, cfc, requestArguments, mimeExt, headers){
|
||||||
@@ -220,7 +272,19 @@
|
|||||||
if (structIsEmpty(usrCustomerInfo)) return representationOf("User information not found").withStatus(404);
|
if (structIsEmpty(usrCustomerInfo)) return representationOf("User information not found").withStatus(404);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (lCase(arguments.cfc) EQ 'notification_ls') { //*** костыль: для нотификаций можно адресоваться к пользователю без контракта
|
||||||
|
if (structIsEmpty(usrCustomerInfo)) {
|
||||||
|
arguments.requestArguments.usrId=-1; //Integer!
|
||||||
|
arguments.requestArguments.contragentId=-1; //Integer
|
||||||
|
arguments.requestArguments.contractId=-1; //Integer
|
||||||
|
arguments.requestArguments.specificationId=-1; //Integer
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (structIsEmpty(usrCustomerInfo)) return representationOf("Cannot find default specification for current user #result#").withStatus(422); //это создает довольно много лишних движений при отладке
|
if (structIsEmpty(usrCustomerInfo)) return representationOf("Cannot find default specification for current user #result#").withStatus(422); //это создает довольно много лишних движений при отладке
|
||||||
|
|
||||||
arguments.requestArguments.usrId=usrCustomerInfo.usrId; //Integer!
|
arguments.requestArguments.usrId=usrCustomerInfo.usrId; //Integer!
|
||||||
arguments.requestArguments.contragentId=usrCustomerInfo.contragentId; //Integer
|
arguments.requestArguments.contragentId=usrCustomerInfo.contragentId; //Integer
|
||||||
arguments.requestArguments.contractId=usrCustomerInfo.contractId; //Integer
|
arguments.requestArguments.contractId=usrCustomerInfo.contractId; //Integer
|
||||||
@@ -271,35 +335,7 @@
|
|||||||
вероятно, лучше сделать токен девайса
|
вероятно, лучше сделать токен девайса
|
||||||
--->
|
--->
|
||||||
|
|
||||||
|
|
||||||
<cffunction name="validatePin" access="private">
|
|
||||||
<cfargument name="authToken"/>
|
|
||||||
<cfargument name="issuedFor"/>
|
|
||||||
<cfargument name="verb"/>
|
|
||||||
<cfargument name="cfc"/> <!---для всех запросов, кроме GET,OPTIONS проверяем разрешенные CFC--->
|
|
||||||
|
|
||||||
<!---catch db issue--->
|
|
||||||
<cfquery name="qCheckToken">
|
|
||||||
select creator_id
|
|
||||||
from auth_token
|
|
||||||
where auth_token=<cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.authToken#" />
|
|
||||||
AND issued_for=<cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.issuedFor#" />
|
|
||||||
AND dt_valid_till > <cfqueryparam cfsqltype="cf_sql_timestamp" value="#Now()#" />
|
|
||||||
</cfquery>
|
|
||||||
<!---тут можно добавить защиту от перебора с блокировкой попыток (можно добавить поле-счетчик ошибок)--->
|
|
||||||
|
|
||||||
<!--- <cfdump var=#qCheckToken#/>--->
|
|
||||||
|
|
||||||
<cfif qCheckToken.recordCount GT 0>
|
|
||||||
<cfset request.usr_id=qCheckToken.creator_id /> <!---impersonate pin issuer--->
|
|
||||||
<cfif uCase(arguments.verb) EQ "GET" OR uCase(arguments.verb) EQ "OPTIONS">
|
|
||||||
<cfreturn true/>
|
|
||||||
<cfelseif listFind("work_order,maint,maint_ls,maint_op,maint_op_ls,work_order_engineer_signature,work_order_spare_ls,work_order_spare,work_order_doc,maint_start,maint_doc_ls,maint_op_spare,maint_op_spare_ls,maint_doc", lCase(arguments.cfc))>
|
|
||||||
<cfreturn true/>
|
|
||||||
</cfif>
|
|
||||||
</cfif>
|
|
||||||
<cfreturn false/>
|
|
||||||
</cffunction>
|
|
||||||
|
|
||||||
<cffunction name="checkAuth">
|
<cffunction name="checkAuth">
|
||||||
<!---https://www.sjoerdlangkemper.nl/2018/09/12/authorization-header-and-cors/--->
|
<!---https://www.sjoerdlangkemper.nl/2018/09/12/authorization-header-and-cors/--->
|
||||||
@@ -342,8 +378,8 @@
|
|||||||
|
|
||||||
|
|
||||||
<cffunction name="getUsrCustomerInfo">
|
<cffunction name="getUsrCustomerInfo">
|
||||||
|
|
||||||
<cfargument name="usrUid"/>
|
<cfargument name="usrUid"/>
|
||||||
|
|
||||||
<!--- глупейшее определение спецификации по умолчанию (надо переделать, чтобы создавалась, или вообще просто записывать факты без спеки). Но помним, что при постановке на тестирование цены еше не фиксированы --->
|
<!--- глупейшее определение спецификации по умолчанию (надо переделать, чтобы создавалась, или вообще просто записывать факты без спеки). Но помним, что при постановке на тестирование цены еше не фиксированы --->
|
||||||
<!--- заметим, что у нас контрагент может быть определен параллельно, от IDP --->
|
<!--- заметим, что у нас контрагент может быть определен параллельно, от IDP --->
|
||||||
<cfset local={}/>
|
<cfset local={}/>
|
||||||
@@ -805,7 +841,7 @@
|
|||||||
</cfif>
|
</cfif>
|
||||||
|
|
||||||
<cfreturn true />
|
<cfreturn true />
|
||||||
</cffunction>
|
</cffunction>
|
||||||
|
|
||||||
|
|
||||||
<!--- <cffunction name="checkForLocalDebug">
|
<!--- <cffunction name="checkForLocalDebug">
|
||||||
|
|||||||
@@ -128,7 +128,10 @@
|
|||||||
<!--- поступим проще, по engine/generate_rfs_12.cfm --->
|
<!--- поступим проще, по engine/generate_rfs_12.cfm --->
|
||||||
<cfset setInstanceOperationRfsParam(arguments.instanceOperationUid, "instanceUid", qSvcOperation.instance_uid)/>
|
<cfset setInstanceOperationRfsParam(arguments.instanceOperationUid, "instanceUid", qSvcOperation.instance_uid)/>
|
||||||
<cfset setInstanceOperationRfsParam(arguments.instanceOperationUid, "operationUid", arguments.instanceOperationUid)/>
|
<cfset setInstanceOperationRfsParam(arguments.instanceOperationUid, "operationUid", arguments.instanceOperationUid)/>
|
||||||
<cfset setInstanceOperationRfsParam(arguments.instanceOperationUid, "modifierId", #arguments.usrId#)/>
|
<cfset setInstanceOperationRfsParam(arguments.instanceOperationUid, "modifierId", arguments.usrId)/>
|
||||||
|
<cfset setInstanceOperationRfsParam(arguments.instanceOperationUid, "contragentId", arguments.contragentId)/>
|
||||||
|
<cfset setInstanceOperationRfsParam(arguments.instanceOperationUid, "contractId", arguments.contractId)/>
|
||||||
|
<cfset setInstanceOperationRfsParam(arguments.instanceOperationUid, "contragentCode", getContragentCode(arguments.contragentId))/>
|
||||||
|
|
||||||
<cfquery name="qWriteRfsFromCfsParams">
|
<cfquery name="qWriteRfsFromCfsParams">
|
||||||
insert into instance_operation_param (instance_operation_uid,param,param_value)
|
insert into instance_operation_param (instance_operation_uid,param,param_value)
|
||||||
@@ -187,8 +190,7 @@
|
|||||||
set dt_submit=<cfqueryparam cfsqltype="cf_sql_timestamp" value=#now()#/>
|
set dt_submit=<cfqueryparam cfsqltype="cf_sql_timestamp" value=#now()#/>
|
||||||
,dt_start=null, dt_finish=null, submit_result='0'
|
,dt_start=null, dt_finish=null, submit_result='0'
|
||||||
where instance_operation_uid=<cfqueryparam cfsqltype="cf_sql_other" value=#arguments.instanceOperationUid#/>
|
where instance_operation_uid=<cfqueryparam cfsqltype="cf_sql_other" value=#arguments.instanceOperationUid#/>
|
||||||
</cfquery>
|
</cfquery>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<cftry>
|
<cftry>
|
||||||
@@ -254,8 +256,7 @@
|
|||||||
<cfrethrow/><!--- пока не придумал --->
|
<cfrethrow/><!--- пока не придумал --->
|
||||||
</cfcatch>
|
</cfcatch>
|
||||||
</cftry>
|
</cftry>
|
||||||
</cfif>
|
</cfif>
|
||||||
|
|
||||||
</cffunction>
|
</cffunction>
|
||||||
|
|
||||||
<!--- *** судя по всему, RFS параметр не обязан быть специфицирован на сервисе (никак не проверяется) --->
|
<!--- *** судя по всему, RFS параметр не обязан быть специфицирован на сервисе (никак не проверяется) --->
|
||||||
@@ -304,5 +305,17 @@
|
|||||||
</cfcatch>
|
</cfcatch>
|
||||||
</cftry>
|
</cftry>
|
||||||
</cffunction>
|
</cffunction>
|
||||||
|
|
||||||
|
<cffunction name="getContragentCode">
|
||||||
|
<cfargument name="contragentId">
|
||||||
|
|
||||||
|
<cfquery name="qContragentCode">
|
||||||
|
select contragent_code
|
||||||
|
from contragent
|
||||||
|
where contragent_id=<cfqueryparam cfsqltype="cf_sql_integer" value=#arguments.contragentId# null=#!isNumeric(arguments.contragentId)#/>
|
||||||
|
</cfquery>
|
||||||
|
|
||||||
|
<cfreturn #qContragentCode.contragent_code#/>
|
||||||
|
</cffunction>
|
||||||
|
|
||||||
</cfcomponent>
|
</cfcomponent>
|
||||||
@@ -7,10 +7,14 @@
|
|||||||
|
|
||||||
<!---спецификация полей, пригодных для фильтрации (?и сортировки)--->
|
<!---спецификация полей, пригодных для фильтрации (?и сортировки)--->
|
||||||
<cfset this.fieldsSpec={
|
<cfset this.fieldsSpec={
|
||||||
dt_created={prefix="s", type="date"},
|
dt_created={prefix="n", type="date"},
|
||||||
dt_updated={prefix="s", type="date"},
|
dt_updated={prefix="n", type="date"},
|
||||||
svc_id={prefix="s", type="integer"},
|
dt_show_from={prefix="n", type="date"},
|
||||||
svc={prefix="s", type="string"}
|
dt_show_to={prefix="n", type="date"},
|
||||||
|
contragent_id={prefix="n", type="integer"},
|
||||||
|
timeout_sec={prefix="n", type="integer"},
|
||||||
|
external_uid={prefix="n", type="guid"},
|
||||||
|
external_code={prefix="n", type="string"}
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
@@ -53,6 +57,8 @@
|
|||||||
<m:field>n.notification_uid::text as notification_uid</m:field>
|
<m:field>n.notification_uid::text as notification_uid</m:field>
|
||||||
<m:field>n.notification</m:field>
|
<m:field>n.notification</m:field>
|
||||||
<m:field>n.descr</m:field>
|
<m:field>n.descr</m:field>
|
||||||
|
<m:field>n.url</m:field>
|
||||||
|
<m:field>n.timeout_sec</m:field>
|
||||||
<m:field>n.contragent_id</m:field>
|
<m:field>n.contragent_id</m:field>
|
||||||
<m:field>k.external_uid</m:field>
|
<m:field>k.external_uid</m:field>
|
||||||
<!--- <m:field><cfqueryparam cfsqltype="cf_sql_other" value=#arguments.companyUid#/> as arguments_company_uid</m:field> --->
|
<!--- <m:field><cfqueryparam cfsqltype="cf_sql_other" value=#arguments.companyUid#/> as arguments_company_uid</m:field> --->
|
||||||
@@ -69,8 +75,9 @@
|
|||||||
AND (k.external_uid = <cfqueryparam cfsqltype="cf_sql_other" value=#arguments.companyUid#/> OR n.contragent_id IS NULL)
|
AND (k.external_uid = <cfqueryparam cfsqltype="cf_sql_other" value=#arguments.companyUid#/> OR n.contragent_id IS NULL)
|
||||||
order by dt_show_from desc
|
order by dt_show_from desc
|
||||||
<!--- <m:order_build sortCollection=#this.helper.parseNumericOrder(local.titleMap, arguments.orderBy)# fieldCount=0/>--->
|
<!--- <m:order_build sortCollection=#this.helper.parseNumericOrder(local.titleMap, arguments.orderBy)# fieldCount=0/>--->
|
||||||
--limit #maxrows#
|
limit #maxrows#
|
||||||
</cfquery>
|
</cfquery>
|
||||||
|
<!--- <cfdump var=#local.qRead#/><cfabort/> --->
|
||||||
|
|
||||||
|
|
||||||
<cfquery name="local.qTotal">
|
<cfquery name="local.qTotal">
|
||||||
|
|||||||
Reference in New Issue
Block a user