Introduce the first data layer, move order auto-completion to server cron with legacy/cloud compatibility, clean error telemetry, update PWA/versioning, and add regression coverage.
49 lines
2.7 KiB
JavaScript
49 lines
2.7 KiB
JavaScript
(()=>{
|
|
'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();
|
|
})();
|