===== Přepočty pro starší verze OBIS ===== Program přepočtu **prepocet.lua**: Test start Login Admin "" data Program --POZOR program nesmi obsahovat pradny radek (kvuli inetd se konci session) dofile(LUADIR().."debug.lua") --DEBUG.Init({typ={"detail2"}}) DEBUG.Init({typ={"detail", "novisible"}}) -- local function PrepocetSkladu() local kartyMD=ClientSession:ActivateMid("SKLKARTY") local kartyDS=kartyMD:FindDataSetItem("") kartyDS:LocateRange("", "") local datumPrepoctu=os.time() --datumPrepoctu=datumPrepoctu+(3600*24) --moznost prepoctu k nasledujicimu dni sklad_prepocet.Karty(kartyDS, cf.tonumber(ClientSession:GetOption("SkladDM.RTvrbCen")), cf.FormatSQLUnixTime(os.time()), nil, DEBUG) kartyMD=ClientSession:Passivate(kartyMD) end -- local function PrepocetZakazek() local zacatek_prepoctu=os.time() if DEBUG_DETAIL then DEBUG_WRITE("Start PrepocetZakazek "..os.date()) end local ZakazkyMD = ClientSession:ActivateMid("ZAKAZKY") local ZakazkyDS = ZakazkyMD:FindDataSetItem("") ZakazkyDS:LocateRange("", "") cf.WalkRecords(ZakazkyDS, ZakazkyDS:GetPrimaryIndex(), nil, function(DSI, ID, ntf) zakazky_zakazky.RecalculateZakazka(ZakazkyMD, os.time(), ntf) end , DEBUG) ZakazkyMD = ClientSession:Passivate(ZakazkyMD) if DEBUG_DETAIL then DEBUG_WRITE("Finish PrepocetZakazek "..os.date()..", cas prepoctu: "..os.date("!%X", os.time()-zacatek_prepoctu)) end end local function InsovRejstrik() local zacatek_prepoctu=os.time() if DEBUG_DETAIL then DEBUG_WRITE("Start InsovRejstrik "..os.date()) end local MD = ClientSession:ActivateMid("PARTNERI") local DSI = MD:FindDataSetItem("") DSI:LocateRange("", "") partneri_partneri.KontrolaInsolvecnihoRejstriku(DSI, os.time(), partneri_partneri.InsolvAkce, "Admin", DEBUG, "") MD = ClientSession:Passivate(MD) if DEBUG_DETAIL then DEBUG_WRITE("Finish InsolvRejstrik "..os.date()..", cas prepoctu: "..os.date("!%X", os.time()-zacatek_prepoctu)) end end local function AktualniDluh() local zacatek_prepoctu=os.time() if DEBUG_DETAIL then DEBUG_WRITE("Start AktualniDluh "..os.date()) end local MD = ClientSession:ActivateMid("PARTNERI") local DSI = MD:FindDataSetItem("") DSI:LocateRange("", "") partneri_partneri.VypocetDluh(DSI, nil, partneri_partneri.DluhAkce, nil, nil, DEBUG) MD = ClientSession:Passivate(MD) if DEBUG_DETAIL then DEBUG_WRITE("Finish AktualniDluh "..os.date()..", cas prepoctu: "..os.date("!%X", os.time()-zacatek_prepoctu)) end end local function ImportKurzu() local zacatek_prepoctu=os.time() if DEBUG_DETAIL then DEBUG_WRITE("Start ImportKurzu "..os.date()) end local MD = ClientSession:ActivateMid("common_kurzy") local DSI = MD:FindDataSetItem("") DSI:LocateRange("", "") common_kurzy.ImportKurzovnihoListku(DSI, {datum=os.date("%d.%m.%Y", common_kurzy.PredchoziPracovniDen()), posun="1", EUR="1"}, DEBUG) MD = ClientSession:Passivate(MD) if DEBUG_DETAIL then DEBUG_WRITE("Finish ImportKurzu "..os.date()..", cas prepoctu: "..os.date("!%X", os.time()-zacatek_prepoctu)) end end local function CleanLogs() if DEBUG_DETAIL then DEBUG_WRITE("CleanLogs "..os.date()) end ClientSession:ExecSQL([[delete from common_syslog where datum < current_timestamp-coalesce((select cast(thevalue as integer) from common_goptions where name='.DeleteLogDays'),90)]]) ClientSession:ExecSQL([[delete from common_log where datum < current_timestamp-coalesce((select cast(thevalue as integer) from common_goptions where name='.DeleteLogDays'),90)]]) end -- PrepocetSkladu() PrepocetZakazek() InsovRejstrik() AktualniDluh() ImportKurzu() CleanLogs() Test Konec Exit //Insolvenční rejstřík je funkční v OBISu sestaveném po 19.10.2009.//\\ //Aktuální dluh je funkční v OBISu sestaveném po 12.2.2010.//\\ //Import kurzu je funkční v OBISu sestaveném po 2.6.2010.//\\ //Mazání logů je funkční v OBISu sestaveném po 14.6.2010.// ===== Spouštění nevizualních triggerů na serveru ===== * PageForm=DataForm&FormLevel=1&MidName=common_triggers * Vytvořit uživatel **Trigger** s právy dokumenty_* RIED, ostatní R * Pro tohoto uživatele vytvořit triggery, které mají vyplněny pole **Email a Report** (lze použít tagy a v MidString formát Form:MIDDLE) * Report může být zapsán relativní cestou k REPORTSDIR() a při použití odpovídajícího Form:MIDDLE lze použít běžný report OpenOffice seznam. * Trigger se pak spouští v rámci trvale běžícího obiscserveru (přes daemontools) * Nutne ttf fonty pro reporty (Arial): apt-get install ttf-mscorefonts-installer cd obis5 mkdir service mkdir service/trigger mkdir service/trigger/supervise mkfifo service/trigger/supervise/control mkfifo service/trigger/supervise/ok touch service/trigger/run chmod +x service/trigger/run vim service/trigger/run export OBISDOC=/mnt/data/obisdoc/ mkdir $OBISDOC/reports/triggers chown obis:users $OBISDOC/reports/triggers **service/trigger/run** #!/bin/bash export LANG="cs_CZ.utf8" ROOTDIR=/mnt/obis/obis5 OBISDOC=/mnt/data/obisdoc/ LOG_DIR=/tmp/obis5/log mkdir -p $LOG_DIR -m 777 chmod 777 $LOG_DIR/.. cd $ROOTDIR cat <$LOG_DIR/trigger.log 2>&1 Login Trigger "" datasro Program "osex.dofile(LUADIR()..'server/trigger.lua')" Exit EOF ==== Trigger upozornění na úkol emailem pro řešitele==== Vytvoří dokument (v druhu "triggers") se seznamem úkolů, který se následně odešle Mailerem. SQL zajišťuje, že se upozornění pošle jen jednou. Pro uživatele Trigger vytvořit potřebný počet záznamů upozornění kde se mění se pouze email (SQL je stejné): * interval: 5 min * detail: Form:UKOLY * report: ./ukoly/seznam_ukolu_poznamka.rep * email řešitele: (na tento email se pošle upozornění a vyhledává se podle něj IDUzivatele v common_uzivatele) * LUA (pro opakované upozorňování pomocí MJOpak a MnOpak): ukoly_ukoly.Opakuj(DSI, "Upozorneni", 1, nil, ClientSession:GetNotify()) * SQL: SELECT * FROM ukoly_ukoly WHERE ukoly_ukoly.upozorneni<'return cf.FormatSQLUnixTime(os.time())' AND ukoly_ukoly.piduzivatele=(SELECT idvyridil FROM common_uzivatele WHERE email='return Params.Email') AND return ukoly_ukoly.FIXFILTER AND ukoly_ukoly.upozorneni>(SELECT coalesce(max(datum),'1.1.1970') FROM dokumenty_dokumenty WHERE popis containing '[return Params.IDTrigger]' AND iddruh='triggers' AND emaily='return Params.Email') ==== Trigger na úkol po termínu emailem pro řešitele ==== * Nastavení je stejné jako v předchozím případě, liší se SQL SELECT * FROM ukoly_ukoly WHERE ukoly_ukoly.upozorneni<'return cf.FormatSQLUnixTime(os.time())' AND ukoly_ukoly.piduzivatele=(SELECT idvyridil FROM common_uzivatele WHERE email='return Params.Email') AND return ukoly_ukoly.FIXFILTER AND ukoly_ukoly.upozorneni>(SELECT coalesce(max(datum),'1.1.1970') FROM dokumenty_dokumenty WHERE popis containing '[return Params.IDTrigger]' AND iddruh='triggers' AND emaily='return Params.Email') ==== Trigger na úkol po termínu emailem pro zadavatele ==== * Nastavení je stejné jako v předchozím případě. Email je zadavatele. * SQL: SELECT * FROM ukoly_ukoly WHERE ukoly_ukoly.termin<'return cf.FormatSQLUnixTime(os.time())' AND ukoly_ukoly.idvyridil=(SELECT idvyridil FROM common_uzivatele WHERE email='return Params.Email') AND NOT ukoly_ukoly.piduzivatele=(SELECT idvyridil FROM common_uzivatele WHERE email='return Params.Email') AND return ukoly_ukoly.FIXFILTER AND ukoly_ukoly.termin>(SELECT coalesce(max(datum),'1.1.1970') FROM dokumenty_dokumenty WHERE popis containing '[return Params.IDTrigger]' AND iddruh='triggers' AND emaily='return Params.Email') ==== Trigger na firmy v insolvenci ==== * interval: 1440 min (1 den) * detail: Form:PARTNERI * report: ./partneri/fakin.rep * email: (na tento email se pošle upozornění) * SQL: select * from partneri_partneri where exists (select * from partneri_akce a2 where partneri_partneri.idpartner=a2.idpartner and a2.idakce='insolv' and a2.datumakce>CURRENT_TIMESTAMP-1)