Nastavují se pomocí tlačítka Groovy makra
import java.awt.Color; import cz.ortex.util.o0.OEntityUtil; import org.apache.commons.beanutils.PropertyUtils; import cz.ortex.util.o0.O0Session; import cz.ortex.model.Nq10; Color getForegroundColor(Nq10 entity, Object dotahovane) { Character storno = entity.getStorno(); switch (storno) { case 's': return new Color(255,0,0); // break; } Character pschvaleni = entity.getPschvaleni(); switch (pschvaleni) { case '1': // return new Color(255,0,0); return new Color(0,128,0); case '3': return new Color(0,0,255); case '2': return new Color(255,0,0); default: return Color.BLACK; } }
import cz.ortex.groovy.GroovyBrowsePar; import cz.ortex.util.o0.O0Data; import cz.ortex.util.o0.O0Session; import cz.ortex.util.o0.AppContext; import cz.ortex.model.Nq10; import cz.ortex.model.O6a; import cz.ortex.apidao.o0.adresar.O6aDao; GroovyBrowsePar editUvod(Object entity, O0Data dotahovane, GroovyBrowsePar groovyBrowsePar, O0Session o0session, Object browsePanel) { //zde vypiste kod } GroovyBrowsePar validate(Object entity, O0Data dotahovane, String fieldName, Object fieldValue, GroovyBrowsePar groovyBrowsePar, O0Session o0session, Object browsePanel) { //zde vypiste kod if ("o1ico0".equals(fieldName)) { groovyBrowsePar.setFocusName("platep"); } if ("o1firma0".equals(fieldName)) { groovyBrowsePar.setFocusName("platep"); } if ("o1nazev0".equals(fieldName)) { groovyBrowsePar.setFocusName("platep"); } if ("kodDo".equals(fieldName)) { Integer kodDo = entity.getKodDo(); if ((kodDo != null) && ((kodDo == 400) || (kodDo == 410))) { O6aDao o6aDao = (O6aDao) AppContext.getDaoService("o6aDao"); if (o6aDao != null) { O6a o6a = o6aDao.getEntityByDkaNrCl(999999999); if (o6a != null) { entity.setO6aByO1firma(o6a); HashMap<String, Serializable> componentValues = new HashMap(); //componentValues.put("o1ico0", "999999999"); componentValues.put("o1ico0", o6a.getDkaIco1()); componentValues.put("o1firma0", o6a.getDkaNr()); componentValues.put("o1nazev0", o6a.getDkaKurz()); //componentValues.put("o1nazev0", "SLL S.P. JANSKE LAZ."); groovyBrowsePar.setComponentValues(componentValues); } } } } return groovyBrowsePar; } GroovyBrowsePar noEditDetail(Object entity, O0Data dotahovane, GroovyBrowsePar groovyBrowsePar, O0Session o0session, Object browsePanel) { //zde vypiste kod } GroovyBrowsePar kontrolaVeta(Object entity, O0Data dotahovane, GroovyBrowsePar groovyBrowsePar, O0Session o0session, Object browsePanel) { //zde vypiste kod } String getPgmVars(Object entity, Object dotahovane) { //zde vypiste kod } GroovyBrowsePar akceIkonaBrowse(Object entity, O0Data dotahovane, String fieldName, GroovyBrowsePar groovyBrowsePar, O0Session o0session, Object browsePanel) { //zde vypiste kod }
- Varianta přes speciální metodu
import cz.ortex.model.Nq10; import java.util.logging.Level; import java.util.logging.Logger; import cz.ortex.util.o0.O0JasperParam; import cz.ortex.util.o0.OEntityUtil; import cz.ortex.util.o0.O0StringUtil; import cz.ortex.apilogic.l0.expedice.LdokladParam; import cz.ortex.apidao.l0.expedice.LdokladInterface; import cz.ortex.components.OptionPane; import cz.ortex.util.o0.AppContext; public void priznaky(Nq10 currentRecord, Object dotahovane) { Character priznak = 'U'; Character stav = '1'; LdokladParam ldokladParam = new LdokladParam(); ldokladParam.setLqo0((Nq10) currentRecord); ldokladParam.setPrizTabulka("nq10"); ldokladParam.setPrizCislo(priznak); ldokladParam.setPrizZnak(stav); Boolean vysl = null; LdokladInterface ldoklad = (LdokladInterface) AppContext.getService("ldokladService"); if (ldoklad != null) { vysl = ldoklad.zmenPriznaky(ldokladParam); } if (vysl) { OptionPane.createInfoDialog("", "Proběhlo nastavení Příznaku U = 1"); } else { OptionPane.createErrorDialog("", "Nastavení příznaku se nepovedlo!"); } }
- Varianta přes obecnější metodu
import cz.ortex.model.Nq10; import java.util.logging.Level; import java.util.logging.Logger; import cz.ortex.util.o0.O0JasperParam; import cz.ortex.util.o0.OEntityUtil; import cz.ortex.util.o0.O0StringUtil; import cz.ortex.apilogic.l0.expedice.LdokladParam; import cz.ortex.apidao.l0.expedice.LdokladInterface; import cz.ortex.apidao.l0.expedice.Lqo0Dao; import cz.ortex.components.OptionPane; import cz.ortex.util.o0.AppContext; public void priznaky(Nq10 currentRecord, Object dotahovane) { Character priznak = 'U'; Character stav = '0'; Short stav2 = 2; LdokladParam ldokladParam = new LdokladParam(); ldokladParam.setLqo0((Nq10) currentRecord); ldokladParam.setPrizTabulka("nq10"); ldokladParam.setPrizCislo(priznak); ldokladParam.setPrizZnak(stav); // Boolean vysl = null; Lqo0Dao nq10Dao = (Lqo0Dao) AppContext.getDaoService("nq10Dao"); if (nq10Dao != null) { currentRecord.setPexpU(stav2); nq10Dao.prepisLqo0(currentRecord); } }
Úprava jména sestavy s doplněním podle řeči v adrese dodavatele
import cz.ortex.gui.o0.Tiskac; import cz.ortex.gui.o0.TiskacExec; import cz.ortex.util.o0.O0JasperParam; import cz.ortex.util.o0.O0StringUtil; import cz.ortex.util.o0.O0Session; import cz.ortex.util.o0.OEntityUtil; import cz.ortex.model.Nq10; import cz.ortex.apidao.o0.admin.O0menuTiskDao; import cz.ortex.util.o0.AppContext; // pro Tiskac String Sestava(Tiskac tiskac, O0Session o0Session) { String sestava = ""; if (tiskac != null) { if (tiskac.getBrowsePanel().getBrowseModel().getCurrentRecord() != null) { Nq10 nq10 = (Nq10) tiskac.getBrowsePanel().getBrowseModel().getCurrentRecord(); if (nq10.getO6aByO1firma() != null) { if (nq10.getO6aByO1firma().getO6r() != null) { if (nq10.getO6aByO1firma().getO6r().getDksSp() != null) { if (!nq10.getO6aByO1firma().getO6r().getDksSp().equals("CS")) { // sestava = "reports/nq1_1301" + nq10.getO6aByO1firma().getO6r().getDksSp().trim() + ".jrxml"; sestava = "reports/nq1_1301EN.jrxml"; O0menuTiskDao tiskDao = (O0menuTiskDao) AppContext.getDaoService(O0menuTiskDao.NAME); // O0menuTiskDao tiskDao = (O0menuTiskDao) OEntityUtil.getServiceByName(OEntityUtil.OServiceType.dao, O0menuTiskDao.NAME); if (tiskDao != null) { String infoSestava = tiskDao.getSestavaInfoCl(sestava,null); if (infoSestava == null) { sestava = ""; } } } } } } } } return sestava; } Boolean BeforeTisk(Tiskac tiskac, O0Session o0Session) { return true; } Boolean AfterGa(Tiskac tiskac, O0Session o0Session) { return true; } Boolean AfterTisk(Tiskac tiskac, O0Session o0Session) { return true; } // pro OR-CZ TiskUtilExec Boolean OsobyVypisBeforeTisk(Tiskac tiskac) { return true; } Boolean OsobyVypisAfterTisk(Tiskac tiskac) { return true; }
Pro podmínku spuštění postupu WF
import cz.ortex.util.o0.O0Session; import cz.ortex.util.o0.OEntityUtil; import java.rmi.RemoteException; import java.math.BigDecimal; import cz.ortex.model.PpfHl; String obnosAbs(Object[] objects, O0Session o0Session) { String vysl = "0"; PpfHl entity = (PpfHl) objects[0]; if (entity != null) { if (entity.getObnosTuzem() != null) { vysl = entity.getObnosTuzem().abs().toString(); } } return vysl; }
import cz.ortex.util.o0.O0Session; import cz.ortex.util.o0.OEntityUtil; import java.rmi.RemoteException; import java.math.BigDecimal; import java.util.logging.Level; import java.util.logging.Logger; import cz.ortex.model.Nq10; import cz.ortex.model.Ofwos; import cz.ortex.impldao.o0.workflow.OfwosDaoImpl; String lzeSchvalovat(Object[] objects, O0Session o0Session) { //zde vypište kód String vysl = "true"; BigDecimal obnosFa = BigDecimal.ZERO; Integer oscis = o0Session.getUserNumber(); Nq10 nq10 = (Nq10) objects[0]; if (nq10 != null) { try { Ofwos ofwos = OfwosDaoImpl.getEntityByOscis(oscis, null, null, o0Session); if (ofwos != null && ofwos.getOsobniLimit() != null && nq10.getDzakl() != null) { if (ofwos.getOsobniLimit().compareTo(nq10.getDzakl()) >= 0) { vysl = "false"; } } } catch (RemoteException ex) { Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex); } } return vysl; }
- Pro Objednávky
import cz.ortex.util.o0.O0Session; import cz.ortex.util.o0.OEntityUtil; import java.rmi.RemoteException; import java.math.BigDecimal; import java.util.logging.Level; import java.util.logging.Logger; import cz.ortex.model.Nq10; import cz.ortex.model.PpfHl; import cz.ortex.model.Ofwos; import cz.ortex.model.Ofwkv; boolean lzePouzit(Object entity, Ofwos ofwos, Ofwkv ofwkv, Ofwos prevOfwos, O0Session o0Session) { //zde vypište kód boolean vysl = false; if (entity instanceof PpfHl) { Nq10 nq10 = (Nq10) entity; try { if (ofwos != null && ofwos.getOsobniLimit() != null && nq10.getDzakl() != null) { if (ofwos.getOsobniLimit().compareTo(nq10.getDzakl()) <= 0) { vysl = true; } else { if (prevOfwos != null && prevOfwos.getOsobniLimit() != null && nq10.getDzakl() != null) { if (prevOfwos.getOsobniLimit().compareTo(nq10.getDzakl()) <= 0) { vysl = true; } } else { if (prevOfwos == null) { vysl = true; } } } } else { vysl = true; } } catch (Exception ex) { Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex); } } return vysl; }
- Pro Přijaté faktury
import cz.ortex.util.o0.O0Session; import cz.ortex.util.o0.OEntityUtil; import java.rmi.RemoteException; import java.math.BigDecimal; import java.util.logging.Level; import java.util.logging.Logger; import cz.ortex.model.Nq10; import cz.ortex.model.PpfHl; import cz.ortex.model.Ofwos; import cz.ortex.model.Ofwkv; boolean lzePouzit(Object entity, Ofwos ofwos, Ofwkv ofwkv, Ofwos prevOfwos, O0Session o0Session) { //zde vypište kód boolean vysl = false; if (entity instanceof PpfHl) { PpfHl ppfHl = (PpfHl) entity; try { if (ofwos != null && ofwos.getOsobniLimit() != null && ppfHl.getObnosFakt() != null) { if (ofwos.getOsobniLimit().compareTo(ppfHl.getObnosFakt()) <= 0) { vysl = true; } else { if (prevOfwos != null && prevOfwos.getOsobniLimit() != null && ppfHl.getObnosFakt() != null) { if (prevOfwos.getOsobniLimit().compareTo(ppfHl.getObnosFakt()) <= 0) { vysl = true; } } else { if (prevOfwos == null) { vysl = true; } } } } else { vysl = true; } } catch (Exception ex) { Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex); } } return vysl; }
import cz.ortex.util.o0.O0Session; import cz.ortex.util.o0.OEntityUtil; import cz.ortex.util.o0.O0StringUtil; import java.rmi.RemoteException; import cz.ortex.apilogic.o0.workflow.OfwUtil; import cz.ortex.model.Ofwdt; import cz.ortex.model.Ofwk; import cz.ortex.model.PpfHl; import cz.ortex.implutil.o0.HibernateUtil; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.query.NativeQuery; import cz.ortex.implutil.o0.HibernateUtil; import org.hibernate.criterion.Restrictions; import cz.ortex.apilogic.o0.workflow.OfwRetObject; import cz.ortex.apilogic.o0.workflow.OfwSplnenoChoices; import org.apache.commons.beanutils.ConvertUtils; OfwRetObject proZapis(Object entity, Ofwk ofwk, OfwUtil.OfwActionRunParams runParams, O0Session o0Session) { OfwRetObject retObject = new OfwRetObject(); retObject.setActionCorrectlyDone(true); String chyba = ""; if (entity != null) { if (entity.getIdpk() != null) { try { Session session = HibernateUtil.getCurrentSession(); Transaction transaction = session.getTransaction(); boolean byloTransactionActive = transaction.isActive(); if (!byloTransactionActive) { transaction.begin(); } if (transaction.isActive()) { String testDotaz = "update NQ10 set prodejce = (select osoby.oscis from OFWK ofwk "; testDotaz += "inner join OSOBY osoby on osoby.idpk = ofwk.ucastnik_idpk "; testDotaz += "where (ofwk.ofwp_idpk = " + ofwk.getOfwp().getIdpk() + ") and (ofwk.poradi = 2)) "; // testDotaz += "where idpk = 18813"; testDotaz += "where idpk = " + entity.getIdpk(); NativeQuery<String> sqlQuery = session.createNativeQuery(testDotaz); sqlQuery.executeUpdate(); chyba = "OK"; } if (!byloTransactionActive) { tx.commit(); } } catch (Exception e) { if (!byloTransactionActive) { tx.rollback(); } // retObject.setActionCorrectlyDone(false); // retObject.setChoiceToSetWf(OfwSplnenoChoices.OfwSplnenoChoice.NESPLNENO); // retObject.setRetString("Bylo exception"); // retObject.setException(e); // throw new RuntimeException(e); } } } return retObject; }
Podmínka pro spuštění WF – zda objednávka AK je rovna došlé faktuře
import cz.ortex.util.o0.O0Session; import cz.ortex.util.o0.OEntityUtil; import java.rmi.RemoteException; import cz.ortex.model.PpfHl; import cz.ortex.util.o0.O0StringUtil; import java.math.BigDecimal; import java.math.RoundingMode; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.query.NativeQuery; import cz.ortex.implutil.o0.HibernateUtil; import java.util.List; String lzeSchvalovat(Object[] objects, O0Session o0Session) { //zde vypište kód PpfHl ppfhl = (PpfHl) objects[0]; String vysl = "false"; String chyba = ""; BigDecimal rozdilMax = new BigDecimal(1.00); BigDecimal rozdilProc = new BigDecimal(1.00); if (O0StringUtil.notBlank(ppfhl.getObjednavka())) { Session session = HibernateUtil.getCurrentSession(); Transaction transaction = session.getTransaction(); boolean byloTransactionActive = transaction.isActive(); if (!byloTransactionActive) { transaction.begin(); } if (transaction.isActive()) { String testDotaz = "select ak_s_w from ak where (ak_aa = 3) and (ak_anr = " + ppfhl.getObjednavka().trim() + ")"; NativeQuery<String> sqlQuery = session.createNativeQuery(testDotaz); List<String> list = sqlQuery.getResultList(); for (Object l : list) { if (l != null) { if (BigDecimal.class.isInstance(l)) { BigDecimal objTuzem = (BigDecimal) l; if (ppfhl.getObnosTuzem() != null) { if (ppfhl.getObnosTuzem().compareTo(objTuzem) == 0) { vysl = "true"; } else { BigDecimal sto = new BigDecimal(100.00); BigDecimal rozdil = ppfhl.getObnosTuzem().subtract(objTuzem); rozdil = rozdil.abs(); BigDecimal procento = rozdil.divide(ppfhl.getObnosTuzem(), 2, RoundingMode.HALF_DOWN).multiply(sto); procento = procento.abs(); if (rozdil.compareTo(rozdilMax) > 0) { chyba = "Vetsi nez povoleny rozdil."; } else { vysl = "true"; } if (procento.compareTo(rozdilProc) > 0) { chyba = "Vetsi nez povolene procento rozdilu."; } else { vysl = "true"; } // System.out.println("Test Makro: objTuzem = " + objTuzem); // System.out.println("Test Makro: obnosTuzem = " + ppfhl.getObnosTuzem()); // System.out.println("Test Makro: rozdil = " + rozdil); // System.out.println("Test Makro: procento = " + procento); // System.out.println(chyba); } } } } } } if (!byloTransactionActive) { transaction.rollback(); } } return vysl; }
Na kroku WF je makro, které kontroluje, zda je vyplněna hodnota a lze tedy krok schválit.
import cz.ortex.util.o0.O0Session; import cz.ortex.util.o0.OEntityUtil; import java.rmi.RemoteException; import cz.ortex.apilogic.o0.workflow.OfwUtil; import cz.ortex.model.Ofwk; import cz.ortex.model.PpfHl; import cz.ortex.apilogic.o0.workflow.OfwRetObject; import cz.ortex.apilogic.o0.workflow.OfwSplnenoChoices; import cz.ortex.util.o0.O0StringUtil; OfwRetObject stepActionRun(PpfHl entity, Ofwk ofwk, OfwUtil.OfwActionRunParams runParams, O0Session o0Session) { OfwRetObject retObject = new OfwRetObject(); retObject.setActionCorrectlyDone(true); String chyba = ""; if (ofwk != null) { if (O0StringUtil.isBlank(ofwk.getHodn2())) { chyba = "- nelze schválit. Není vyplněna hodnota."; retObject.setActionCorrectlyDone(false); retObject.setChoiceToSetWf(OfwSplnenoChoices.OfwSplnenoChoice.NESPLNENO); retObject.setRetString(chyba); } else { chyba = "OK"; } } return retObject; }
A výsledek:
Na kroku WF se nastaví makro, které kontroluje, zda lze schválit WF:
Vlastní makro:
import cz.ortex.util.o0.O0Session; import cz.ortex.util.o0.OEntityUtil; import java.rmi.RemoteException; import cz.ortex.apilogic.o0.workflow.OfwUtil; import cz.ortex.model.Ofwdt; import cz.ortex.model.Ofwk; import cz.ortex.model.PpfHl; import cz.ortex.implutil.o0.HibernateUtil; import java.io.Serializable; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.criterion.Restrictions; import cz.ortex.apilogic.o0.workflow.OfwRetObject; import cz.ortex.apilogic.o0.workflow.OfwSplnenoChoices; import org.apache.commons.beanutils.ConvertUtils; import cz.ortex.util.o0.O0StringUtil; OfwRetObject stepActionRun(PpfHl entity, Ofwk ofwk, OfwUtil.OfwActionRunParams runParams, O0Session o0Session) { OfwRetObject retObject = new OfwRetObject(); retObject.setActionCorrectlyDone(true); String chyba = ""; BigDecimal obnosFaktury = new BigDecimal(100.00); // "vzdy do 1 Kc, u cizi meny prepocitat dle kurzu na fakture" BigDecimal rozdilMax = new BigDecimal(1.00); BigDecimal rozdilProc = new BigDecimal(5.00); if (entity != null) { if (entity.getObnosTuzem() != null) { obnosFaktury = entity.getObnosFakt(); if (O0StringUtil.notBlank(ofwk.getTrideni2())) { obnosFaktury = ConvertUtils.convert(ofwk.getTrideni2().trim().replaceAll(",","."), BigDecimal.class); } Session session = HibernateUtil.getCurrentSession(); Transaction tx = session.getTransaction(); boolean byloTransactionActive = tx.isActive(); try { if (!byloTransactionActive) { tx.begin(); } String nazevTab = "PpfhlRozuct"; BigDecimal obnosNum02 = BigDecimal.ZERO; Criteria c = session.CriteriaUtil.createCriteria(session, Ofwdt.class); c.add(Restrictions.eq("nazevtab", nazevTab.trim())); c.add(Restrictions.eq("casttab", " ")); c.add(Restrictions.eq("ofwkIdpk", ofwk.getIdpk())); List<Ofwdt> ofwdtList = c.list(); for (int i = 0; i < ofwdtList.size(); i++) { Ofwdt ofwdt = ofwdtList.get(i); if (ofwdt != null) { if (ofwdt.getNazevtab().trim().equals(nazevTab.trim())) { if (ofwdt.getNum02() != null) { obnosNum02 = obnosNum02.add(ofwdt.getNum02()); } } } } if (entity.getObnosTuzem().compareTo(obnosNum02) == 0) { chyba = "OK"; } else { // "Nelze schválit. Rozdílny obnos faktury a rozúčtování." BigDecimal sto = new BigDecimal(100.00); BigDecimal rozdil = obnosFaktury.subtract(obnosNum02); rozdil = rozdil.abs(); BigDecimal procento = rozdil.divide(obnosFaktury, 2, RoundingMode.HALF_DOWN).multiply(sto); procento = procento.abs(); if (rozdil.compareTo(rozdilMax) > 0) { chyba = "- nelze schválit. Rozdílný obnos faktury a rozúčtování."; retObject.setActionCorrectlyDone(false); retObject.setChoiceToSetWf(OfwSplnenoChoices.OfwSplnenoChoice.NESPLNENO); retObject.setRetString(chyba); } if (procento.compareTo(rozdilProc) > 0) { chyba = "- nelze schválit. Rozdílný obnos faktury a rozúčtování."; retObject.setActionCorrectlyDone(false); retObject.setChoiceToSetWf(OfwSplnenoChoices.OfwSplnenoChoice.NESPLNENO); retObject.setRetString(chyba); } } } catch (Exception e) { if (!byloTransactionActive) { tx.rollback(); } retObject.setActionCorrectlyDone(false); retObject.setChoiceToSetWf(OfwSplnenoChoices.OfwSplnenoChoice.NESPLNENO); retObject.setRetString("Bylo exception"); retObject.setException(e); throw new RuntimeException(e); } } } return retObject; }