From 2ad4fbbcb422b4e307542ce530af62a646dd5cd2 Mon Sep 17 00:00:00 2001 From: pavlov346346-source Date: Tue, 8 Sep 2026 13:03:34 +0300 Subject: [PATCH] Add v17.7.0 server order automation client --- public/core/server-automation-v1770.js | 48 ++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 public/core/server-automation-v1770.js diff --git a/public/core/server-automation-v1770.js b/public/core/server-automation-v1770.js new file mode 100644 index 0000000..7b8e954 --- /dev/null +++ b/public/core/server-automation-v1770.js @@ -0,0 +1,48 @@ +(()=>{ + 'use strict'; + if(window.CateriumServerAutomationV1770)return; + const VERSION='17.7.0'; + const RELEASE='20260908-v17-7-0-architecture-foundation'; + const POLL_MS=60000; + let timer=0,running=false,lastRunAt=0,lastResult=null; + const data=()=>window.CateriumDataV1770||window.CateriumData||null; + const cloud=()=>window.SunCloudV2||null; + const toast=text=>{try{window.SunEnterprise?.toast?.(text,'success',4200)}catch(_){}}; + + function ready(){ + const d=data(),c=cloud(); + if(!d||!c?.getClient?.()||!c?.getSession?.()?.user||!c?.getWorkspace?.()?.id)return false; + if(d.isSupportReadOnly?.())return false; + return true; + } + async function run({quiet=true,force=false}={}){ + if(running||!ready())return lastResult; + if(!force&&Date.now()-lastRunAt<15000)return lastResult; + running=true;lastRunAt=Date.now(); + try{ + const c=cloud(),workspace=c.getWorkspace(),client=c.getClient(); + const result=await data().diagnostics.measure('server-order-automation',async()=>{ + const r=await client.rpc('sun_run_order_automation',{p_workspace:workspace.id});if(r.error)throw r.error;return r.data||{}; + }); + lastResult=result; + const changed=Number(result?.changed||0),orders=Array.isArray(result?.orders)?result.orders:[]; + if(changed&&orders.length){ + data().orders.applyServerChanges(orders,{reason:'server-auto-complete'}); + if(!quiet)toast(changed===1?'Заказ автоматически завершён сервером.':`${changed} заказа автоматически завершены сервером.`); + } + try{window.dispatchEvent(new CustomEvent('caterium:server-automation',{detail:{...result,version:VERSION}}))}catch(_){} + return result; + }catch(error){ + if(!/failed to fetch|network|timeout/i.test(String(error?.message||error)))console.warn('[Caterium server automation]',error?.message||error); + return null; + }finally{running=false} + } + function start(){if(timer)return;run({quiet:true,force:true});timer=setInterval(()=>{if(!document.hidden)run({quiet:true})},POLL_MS)} + function stop(){if(timer){clearInterval(timer);timer=0}} + window.addEventListener('focus',()=>run({quiet:false,force:true})); + document.addEventListener('visibilitychange',()=>{if(!document.hidden)run({quiet:true,force:true})}); + window.addEventListener('sun:cloud-state-applied',()=>setTimeout(()=>run({quiet:true,force:true}),300)); + window.addEventListener('caterium:data-ready',start); + window.CateriumServerAutomationV1770={VERSION,RELEASE,POLL_MS,enabled:true,run,start,stop,checks:()=>({version:VERSION,running,lastRunAt,lastResult,ready:ready()})}; + if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',start,{once:true});else start(); +})();