Orsoft Doku
Dokumentace a nápověda pro IS Orsoft Open

Groovy makra v Openu

1. Makra - Groovy

Toto je sbírka maker, připravených pro různé implementace. Groovy je jazyk hodně podobný Javě, který umožňuje volat již vytvořené Javovské třídy. Zároveň je to jazyk rozšířený ve světě, tedy žádné speciální syntaxe vytvožená pouze pro potřeby Openu. Na internetu je spousta příkladů a řešení potřebných pro tvorbu maker.

Proč Groovy jako jazyk maker? Na rozdíl od Javy lze psát scripty ve zdrojovém tvaru přímo u zákazníka. Jejich překlad do spustitelného tvaru probíhá při prvním volání, tedy není nutvé přeložené scripty distribuovat od nás. Zároveň je přeložený script nacachován a nedochází k jeho opakovanému překladu při každém použití.

Samozřejmě vytvořit script v Groovy není „zadarmo“. Je třeba se naučit syntaxi jazyka, ošetření všech nedostatků dat, dále pak specifika připravených a volaných tříd IS Open a v poslední řadě pak „místo“ kde dochází k vykonání Groovy makra – zda na klientu nebo na serveru.

A nyní již vzhůru do světa Open Groovy.

2. První příklady

Groovy makra od začátku:

2.1. Plnění sloupce v browsu

Vložím si do browsu „pomocný atribut“ který budu plnit makrem.

Nejlépe z „Dotahovaných“ – aby se mi tam nenabízela možnost filtrovat.

Poznámka - v Dotahovaných je k tomuto účelu připraven atribut „zzmakro“.

Je jedno jaký – zde nazevRidic

A tomu atributu přiřadím makro

Makro má metodu getCellValue, která vrací Object – Object je obecný, jedno jaký výsledek (skoro jedno jaký – budeme uvažovat primitivní typy – string, boolean, integer, bigdecimal, … , tedy ne array, list, …)

A v té metodě getCellValue dotahuji jméno a přijmení podle osobního čísla, které je v atributu pracC2, který je v primární entitě – zde entita nq10. Nq10 jsou objednávky – nad nimi stavím tento browse.

Někde dole je tedy pracC2

Metoda getCellValu má vždycky 2 parametry – entitu a dotahované Object getCellValue(Object entity, Object dotahovane) {

Zde přetypuji entitu pro lepší orientaci na Nq10 Object getCellValue(Nq10 nq10, Object dotahovane) {

A pak otestuji jestli entita není null a mohu použít atribut pracC2 – tedy jeho getter - nq10.getPracC2()

    if (nq10 != null) {
     Osoby osoby = null;
    osoby = (Osoby) OEntityUtil.getRecordByParam(Osoby.class.getCanonicalName(), "oscis", nq10.getPracC2());
     if (osoby != null) {

Toť celé kouzlo – pro zobrazení jsem si posunul číslo osoby a jméno „dopředu v browsu“

import cz.ortex.model.Nq10;
import cz.ortex.util.o0.OEntityUtil;
import cz.ortex.util.o0.O0StringUtil;
import cz.ortex.model.Osoby;
 
Object getCellValue(Nq10 nq10, Object dotahovane) {
    if (nq10 != null) {
      Osoby osoby = null;
      osoby = (Osoby) OEntityUtil.getRecordByParam(Osoby.class.getCanonicalName(),
                                                   "oscis", nq10.getPracC2());
      if (osoby != null) {
        return osoby.getJmPrijm().trim() + " " + osoby.getJmJmeno().trim();
      } else {
        return " ";
      }
    } else {
      return " ";
    }
}

Příklad pro Aktivity v CRM Open:

import cz.ortex.model.Ohakt;
import cz.ortex.util.o0.OEntityUtil;
import cz.ortex.util.o0.O0StringUtil;
import cz.ortex.model.Osoby;
 
Object getCellValue(Ohakt entity, Object dotahovane) {
    if (entity != null) {
      // Naplneni složeného prijmJmeno zodpovědné osoby
      pr = "";
      jm = "";
      if (entity.getOsobyByIdpkOsoby() != null && entity.getOsobyByIdpkOsoby().getJmPrijm() != null) {
         pr = entity.getOsobyByIdpkOsoby().getJmPrijm();
      }
      if (entity.getOsobyByIdpkOsoby() != null && entity.getOsobyByIdpkOsoby().getJmJmeno() != null) {
         jm = entity.getOsobyByIdpkOsoby().getJmJmeno();
      }
      return O0StringUtil.slozit(pr, jm, " ");
    } else {
      return " ";
    }
}

2.2. Vrácení textového stavu podle hodnoty atributu

import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.OEntityUtil;
import cz.ortex.util.o0.O0StringUtil;
import cz.ortex.model.Nq10;
 
Object getCellValue(Nq10 entity, Object dotahovane) {
    String vysl = " ";
    if (entity != null) {
      if (entity.getPexpU() != null) {
        if (entity.getPexpU() == 1) {
          vysl = "Spuštěno";
        }
      }
      if (entity.getPschvaleni() != null) {
        Character schvaleno = '1';
        Character zamitnuto = '2';
        if (entity.getPschvaleni().equals(schvaleno)) {
          vysl = "Schváleno";
        }
        if (entity.getPschvaleni().equals(zamitnuto)) {
          vysl = "Zamítnuto";
        }
      }
    }
    return vysl;
}

2.3. Dotažení poznámky WF do browsu

import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.OEntityUtil;
import cz.ortex.util.o0.O0StringUtil;
import cz.ortex.apidao.o0.workflow.OfwoDao;
import cz.ortex.model.Ofwo;
 
Object getCellValue(Object entity, Object dotahovane) {
    String vysl = " ";
    if (entity != null) {
      OfwoDao ofwoDao = (OfwoDao) OEntityUtil.getServiceByName(OEntityUtil.OServiceType.dao, OfwoDao.NAME);
      if (ofwoDao != null) {
        List<Ofwo> ofwos = ofwoDao.getOfwosByTargetRecord(entity);
        if (ofwos != null && !ofwos.isEmpty()) {
          Ofwo ofwo = ofwos[0];
          vysl = ofwoDao.pozHistorieTisk(ofwo, true, true, true);
        }
      }
    }
    return vysl;
}

2.4. Dotažení více hodnot do jednoho sloupce

Zde čísla všech faktur k dané objednávce, oddělené „,“ A do pokračování našeho seriálu dávám příklad, jak dotáhnout něco odněkud pomocí SQL Viz – první sloupec v browsu – „Číslo FD“ – dotažení čísla došlé faktury podle čísla objednávky k objednávce – taky makrem. Tady si s OEntityUtil nevystačím – mohu mít více faktur k objednávce.

Jestliže budu mít připojené faktury i přes vazební tabulku O0ZAZNVAZ – tedy vazbu M:N – upravím akorát select:

import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.OEntityUtil;
import java.rmi.RemoteException;
import cz.ortex.model.PpfHl;
import cz.ortex.model.Nq10;
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.SQLQuery;
import cz.ortex.implutil.o0.HibernateUtil;
import java.util.List;
import org.hibernate.type.StringType;
 
Object getCellValue(Nq10 entity, Object dotahovane) {
    String vysl = "FD:";
    vysl = "";
    org.hibernate.type.StringType stringType = new StringType();
    if ((entity != null) && (entity.getObje() != null)) {
      Session session = HibernateUtil.getCurrentSession();
      Transaction transaction = session.getTransaction();
      boolean byloTransactionActive = transaction.isActive();
      if (!byloTransactionActive) {
        transaction.begin();
      }
      if (transaction.isActive()) {
       //String testDotaz = "select cis_dokl from PPF_HL where (objednavka
                             like '%" + entity.getObje().trim() + "%')";
       String testDotaz = "select cis_dokl from PPF_HL ppf left outer join O0ZAZNVAZ o0zaznvaz on (o0zaznvaz.trida = 'PpfHl') and (o0zaznvaz.name_obj = 'Nq10') and (o0zaznvaz.idpk_obj = " + entity.getIdpk() + " ) where (ppf.objednavka like '%" + entity.getObje().trim() + "%') or (ppf.idpk = o0zaznvaz.id_zaznamu)";
       SQLQuery sqlQuery = session.createSQLQuery(testDotaz);
       sqlQuery.addScalar("cis_dokl", stringType);
       List list = sqlQuery.list();
       if (list != null) {
        for (Object l : list) {
         if (l != null) {
          if (String.class.isInstance(l)) {
            String cObj = (String) l;
            if (O0StringUtil.notBlank(vysl)) {
             vysl = vysl.trim() + ",  ";
            }
            vysl = vysl.trim() + " " + cObj.trim();
          }
         }
        }
       }
      }
      if (!byloTransactionActive) {
        transaction.rollback();
      }
    }
    return vysl;
}

2.5. Dotažení více hodnot do jednoho sloupce - 2

Obdobně dotažení čísla smlouvy k ebchodní evidenci, oddělené „,“
import java.awt.Color;
import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.OEntityUtil;
import java.rmi.RemoteException;
import cz.ortex.model.PpfHl;
import cz.ortex.model.Nq10;
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.SQLQuery;
import cz.ortex.implutil.o0.HibernateUtil;
import java.util.List;
import org.hibernate.type.StringType;
import java.util.logging.Level;
import java.util.logging.Logger;
 
Color getBackgroundColor(Object entity, Object dotahovane) {
  //zde vypiste kod
}
 
Color getForegroundColor(Object entity, Object dotahovane) {
  //zde vypiste kod
 
}
 
Object getCellValue(Object entity, Object dotahovane) {
  //zde vypiste kod
  String vysl = " ";
  if (entity != null) {
    org.hibernate.type.StringType stringType = new StringType();
//    if (0 == 1) {
      Session session = HibernateUtil.getCurrentSession();
      Transaction transaction = session.getTransaction();
      boolean byloTransactionActive = transaction.isActive();
      if (!byloTransactionActive) {
        transaction.begin();
      }
      if (transaction.isActive()) {
       try {
       String testDotaz = "select LQO0.cisdo as cis_dokl from LCICEN left join LQO1 on LQO1.idpk_lcicen = LCICEN.idpk left join LQO0 on LQO0.zavod=LQO1.zavod and LQO0.sklad=LQO1.sklad and LQO1.typ_fa = LQO0.typ_fa and LQO1.cisdo = LQO0.cisdo where LQO0.o1firma = " + entity.getOhoeHl().getO6a().getDkaNr() + " and trim(LCICEN.jkpov) = trim('" + entity.getOhfm().getLicKod() + "')";
       SQLQuery sqlQuery = session.createSQLQuery(testDotaz);
       sqlQuery.addScalar("cis_dokl", stringType);
       List list = sqlQuery.list();
       if (list != null) {
        for (Object l : list) {
         if (l != null) {
          if (String.class.isInstance(l)) {
            String cObj = (String) l;
            if (O0StringUtil.notBlank(vysl)) {
             vysl = vysl.trim() + ",  ";
            }
            vysl = vysl.trim() + " " + cObj.trim();
          }
         }
        }
       }
       if (!byloTransactionActive) {
         transaction.rollback();
       }
      } catch (Exception ex) {
       if (!byloTransactionActive) {
        transaction.rollback();
       }
        Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
      }
      }
//    }
  }
  return vysl;
}

3. Pokračování maker

3.1. Barvy v browse

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;
  }
}

3.2. Kontroly – práce se záznamem

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
 
}

3.3. Tlačítka pomocí Groovy

Přidání tlačítek, které něco vykonají:

3.3.1. Propis znaku na entitu

- 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!");
    }
}

3.3.2. Propis znaku na entitu

- 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);
    }
}

3.4. Tisky – úprava jména sestavy

Ú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;
}

3.5. Workflow

3.5.1. Vypočtení absolutní hodnoty

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;
  }

3.5.2. Vyhodnocení překročení osobního limitu u 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.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;
}

3.5.3. Vyhodnocení dalších schvalovatelů podle schvalovací struktury

- 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;
}

3.5.4. Propis hodnoty na kroku

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.SQLQuery;
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();
            SQLQuery sqlQuery = session.createSQLQuery(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;
}

3.5.5. Spuštění WF – kontrola FD na AK

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.SQLQuery;
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() + ")";
     SQLQuery sqlQuery = session.createSQLQuery(testDotaz);
     List list = sqlQuery.list();
     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;
}

3.5.6. Schválení WF – kontrola vyplněné hodnoty

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:

3.5.7. Schválení WF – kontrola FD na návrh rozúčtování

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.createCriteria(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;
}

4. Další příklady

4.1. Tlačítka v detailu

4.1.1. Zobrazení adresáře

import cz.ortex.model.O6r;
import cz.ortex.gui.o0.adresar.O6rWrapper;
import cz.ortex.gui.o0.browse.BrowseDialogWindow;
import java.util.logging.Level;
import java.util.logging.Logger;
 
public  void main() {
   try {
     O6rWrapper o6rWrapper = new O6rWrapper();
     BrowseDialogWindow nabidkaO6r = null;
     nabidkaO6r = o6rWrapper.getVyberWindow(null);
     O6r o6r = new O6r();
     o6r.setDksSp("CS");
     nabidkaO6r.getBrowseParams().setEntity(o6r);  // aby se nastavilo na řeč již vyplněnou
     nabidkaO6r.setVisible(true);
   } catch (Exception ex) {
     Logger.getLogger(MakroO6r.class.getName()).log(Level.SEVERE, null, ex);
   }
  }

4.1.2. Tlačítko v liště wrapperu – zobrazení dokumentu

Je zde řešeno: - Zjištění počtu dokumentů - Když je jeden – zobrazení - Když je více – zobrazení okna se seznamem - Když není – tak nic

4.1.3. Tlačítko pro tisk „sestavy“

import java.util.logging.Level;
import java.util.logging.Logger;
import cz.ortex.util.o0.OEntityUtil;
import cz.ortex.util.o0.O0StringUtil;
import cz.ortex.util.o0.AppContext;
import cz.ortex.gui.o0.Tiskac;
import cz.ortex.util.o0.O0JasperParam;
 
public void tisk(Object currentRecord, Object dotahovane) {
      Tiskac tiskac = new Tiskac("Tisk likvid.litku", true, null);
       O0JasperParam o0JasperParam = new O0JasperParam();
       o0JasperParam.setSestava("/cz/ortex/jasper/reports/PpfHllik.jrxml");
//       o0JasperParam.setPouzUzivSestIfExist(true);
       o0JasperParam.setBrowseCurrentRecord(currentRecord);
       tiskac.view(o0JasperParam);
}

4.1.4. Tlačítko pro odeslání mailu

import java.util.logging.Level;
import java.util.logging.Logger;
import cz.ortex.util.o0.OEntityUtil;
import cz.ortex.util.o0.O0StringUtil;
import cz.ortex.components.OptionPane;
import cz.ortex.util.o0.AppContext;
import cz.ortex.apidao.o0.eldoc.OeldokDao;
import cz.ortex.apidao.o0.workflow.OemailParams;
 
public void sendMail(Object currentRecord, Object dotahovane) {
    String sablona = "oJRViewerINF";
    String prijemce = "tomas.myslivec@ortex.cz";
    OemailParams oemailParams = new OemailParams();
    oemailParams.setSablonaMailu(sablona);
    oemailParams.setEmailAdresa(prijemce);
    OeldokDao oeldokDao = (OeldokDao) AppContext.getDaoService(OeldokDao.NAME);
    if (oeldokDao != null) {
      oemailParams = oeldokDao.posliDokumentMailem(oemailParams, currentRecord);
    }
    if (oemailParams.isOk()) {
        OptionPane.createInfoDialog("", "Probehlo odeslami mailu.");
    } else {
        OptionPane.createErrorDialog("", "Mail nebyl odeslan!");
    }
}

4.2. Ikony v browsu a makra Práce se záznamem

4.2.1. Vložení ikony do browsu

A makro:

import cz.ortex.model.Ofwk;
import cz.ortex.model.Ofwp;
import cz.ortex.util.o0.OEntityUtil;
import cz.ortex.util.o0.O0StringUtil;
 
Object getCellValue(Ofwk entity, Object dotahovane) {
  //zde vypiste kod
    if (entity != null){
     if (O0StringUtil.notBlank(entity.getOfwp().getIko()))  {
       return "oeldok16.png:Dokument je připojen";
     } else {
       return "";
     }
  } else {
    return "";
 }
}

Kliknutí na ikonu Groovy makra + Práce se záznamem:

import cz.ortex.groovy.GroovyBrowsePar;
import cz.ortex.util.o0.O0Data;
import cz.ortex.util.o0.O0Session;
import java.util.logging.Logger;
import cz.ortex.model.Ofwk;
import cz.ortex.model.Ofwp;
import cz.ortex.gui.o0.browse.BrowseWindow;
import cz.ortex.gui.o0.eldoc.OeldokWrapper;
import cz.ortex.util.o0.O0StringUtil;
 
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
 
}
 
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(Ofwk entity, O0Data dotahovane, String fieldName, GroovyBrowsePar groovyBrowsePar, O0Session o0session, Object browsePanel) {
  //zde vypiste kod
  if ("oeldok16.png".equals(fieldName)) {
    if ((entity != null) && (entity.getOfwp() != null) &&
        (O0StringUtil.notBlank(entity.getOfwp().getIko()))) {
      try {
         BrowseWindow window1 = new OeldokWrapper(entity.getOfwp().getIko(), Ofwp.class,
                                                  entity.getOfwp().getIdpk());
         window1.setVisible(true);
      } catch (Exception ex) {
        Logger.getLogger(OfwkPanel.class.getName()).log(Level.SEVERE, null, ex);
      }
    }
  }
}

S ošetřením počtu dokumentů

GroovyBrowsePar akceIkonaBrowse(Ofwk entity, O0Data dotahovane, String fieldName, GroovyBrowsePar groovyBrowsePar, O0Session o0session, Object browsePanel) {
  //zde vypiste kod
  Integer pocet = 0;
  if ("oeldok16.png".equals(fieldName)) {
    if ((entity != null) && (entity.getOfwp() != null) &&
        (O0StringUtil.notBlank(entity.getOfwp().getIko()))) {
      try {
        pocet = OeldokWrapper.podejPocetDokumentu(null,entity.getOfwp().getIko());
        if (pocet > 0) {
          if (pocet == 1) {
            OeldokWrapper oeldokWrapper = new OeldokWrapper();
            Oeldok oeldok = oeldokWrapper.podejOeldokIko(null,entity.getOfwp().getIko());
//          if (oeldok != null) {
              oeldokWrapper.zobrazitDokument(oeldok);
//          }
          } else {
            BrowseWindow window1 = new OeldokWrapper(entity.getOfwp().getIko(), Ofwp.class,
                                                     entity.getOfwp().getIdpk()).getDialogWindow();
            window1.setVisible(true);
          }
        }
      } catch (Exception ex) {
        Logger.getLogger(OeldokWrapper.class.getName()).log(Level.SEVERE, null, ex);
      }
    }
  }
}

4.2.2. Volání jiného wrapperu na ikonu v browsu – např. Poznámky

import cz.ortex.groovy.GroovyBrowsePar;
import cz.ortex.util.o0.O0Data;
import cz.ortex.util.o0.O0Session;
import java.util.logging.Logger;
import cz.orcz.orfmodel.CPolozka;
import cz.ortex.gui.o0.browse.BrowseWindow;
import cz.ortex.gui.o0.eldoc.OeldokWrapper;
import cz.ortex.util.o0.O0StringUtil;
import cz.ortex.gui.o0.poznamky.O0pozWrapper;
 
GroovyBrowsePar akceIkonaBrowse(CPolozka entity, O0Data dotahovane, String fieldName, GroovyBrowsePar groovyBrowsePar, O0Session o0session, Object browsePanel) {
 //zde vypiste kod
 if ("oeldok16.png".equals(fieldName)) {
    if ((entity != null) && (O0StringUtil.notBlank(entity.getIko()))) {
       try {
           BrowseWindow windowl = new OeldokWrapper(entity.getIko(), CPolozka.class, entity.getIdpk()).getDialogWindow();
           windowl.setVisible(true);
       } catch (Exception ex) {
           Logger.getLogger(OeldokWrapper.class.getName()).log(Level.SEVERE, null, ex);
       }
     }
  }
 
if ("o0poz16.png".equals(fieldName)) {
    if ((entity != null) && (O0StringUtil.notBlank(entity.getIdpk()))) {
       try {
        O0pozWrapper o0pozWrapper = new O0pozWrapper();
        o0pozWrapper.getBrowseParams().setEntity(o0poz);
        o0pozWrapper.setUloha(O0pozWrapper.OBJEKT);
        BrowseWindow poznamky;
        poznamky = o0pozWrapper.getWindow(null);
        GlobalGui.getDesktop().add(poznamky);
        poznamky.setVisible(true);
       } catch (Exception ex) {
           Logger.getLogger(O0pozWrapper.class.getName()).log(Level.SEVERE, null, ex);
       }
     }
  }
}

4.2.3. Ikony v browsu jako tlačítka v Katalogu položek

Konkrétní příklad použití v Katalogu položek. Do browsu je třeba vložit nejprve ikony, které obsahují příslušné png:

import cz.ortex.groovy.GroovyBrowsePar;
import cz.ortex.util.o0.O0Data;
import cz.ortex.util.o0.O0Session;
 
import java.util.logging.Logger;
import java.util.logging.Level;
import cz.orcz.orfmodel.CPolozka;
import cz.ortex.model.Oeldok;
import cz.ortex.model.O0poz;
import cz.orcz.orfmodel.CDoprovodneTexty;
import cz.ortex.gui.o0.browse.BrowseWindow;
import cz.ortex.gui.o0.eldoc.OeldokWrapper;
import cz.ortex.util.o0.O0StringUtil;
import cz.orcz.gui.lc.CDoprovodneTextyWrapper;
import cz.ortex.gui.o0.poznamky.O0pozWrapper;
import cz.ortex.util.o0.StringParams;
 
import cz.ortex.gui.o0.OPocitadlo;
import cz.ortex.gui.o0.OExec;
import cz.ortex.components.OptionPane;
 
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
 
}
 
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
GroovyBrowsePar akceIkonaBrowse(CPolozka entity, O0Data dotahovane, String fieldName, GroovyBrowsePar groovyBrowsePar, O0Session o0session, Object browsePanel) {
 //zde vypiste kod
 
//klik na ikonu el. dokumentů v browse
  if ("oeldok16.png".equals(fieldName)) {
  Integer pocet = 0;
               if ((entity != null) && (O0StringUtil.notBlank(entity.getIko()))) {
                               try {
                             OPocitadlo.createPocitadlo("Čekejte prosím", "Zjišťuji počet připojených dokumentů…", OPocitadlo.POCITADLO_VRTITKO, OPocitadlo.BUTTON_NENI, new OExec() {@Override public Object execute() throws Exception {
                                //tohle (níže) trochu trvá, proto zobrazíme vrtítko (výše)
                                       pocet = OeldokWrapper.podejPocetDokumentu(null,entity.getIko());
                                       }}); //konec OPocitadla
                                    if (pocet > 0) {
                                      if (pocet == 1) {
                             OPocitadlo.createPocitadlo("Čekejte prosím", "Připravuji zobrazení připojeného dokumentu…", OPocitadlo.POCITADLO_VRTITKO, OPocitadlo.BUTTON_NENI, new OExec() {@Override public Object execute() throws Exception {
                                //tohle (níže) trochu trvá, proto zobrazíme vrtítko (výše)
                                        OeldokWrapper oeldokWrapper = new OeldokWrapper();
                                        Oeldok oeldok = oeldokWrapper.podejOeldokIko(null,entity.getIko());
                                        oeldokWrapper.zobrazitDokument(oeldok);
                                       }}); //konec OPocitadla
                                      } else {
                                                   BrowseWindow window1 = new OeldokWrapper(entity.getIko(), CPolozka.class, entity.getIdpk()).getDialogWindow();
                                                   window1.setVisible(true);
                                      }
                                    }
                               } catch (Exception ex) {
                                               Logger.getLogger(OeldokWrapper.class.getName()).log(Level.SEVERE, null, ex);
                               }
               }
       return groovyBrowsePar;
  }
 
//klik na ikonu poznámek v browse
if ("o0poz16.png".equals(fieldName)) {
               if ((entity != null) ) {
                 try {
                   Character typ = 'K';
         O0poz o0poz = new O0poz();
         BrowseWindow poznamky;
     OPocitadlo.createPocitadlo("Čekejte prosím", "Připravuji zobrazení poznámek k položce…", OPocitadlo.POCITADLO_VRTITKO, OPocitadlo.BUTTON_NENI, new OExec() {@Override public Object execute() throws Exception {
    //tohle (níže) trochu trvá, proto zobrazíme vrtítko (výše)
         o0poz.setPrizTyp(typ);
         o0poz.setObjName("CPolozka");
         //o0poz.setCisIdpk(null);
         o0poz.setCisKlic(entity.getIna());
         o0poz.setPoradi(0);
         O0pozWrapper o0pozWrapper = new O0pozWrapper();
         o0pozWrapper.getBrowseParams().setEntity(o0poz);
         String wrapperParams = "";
         wrapperParams = StringParams.addParamValue(wrapperParams, "predanyTitulek", "Poznámka k položce "+entity.getIna());
         o0pozWrapper.setWrapperParams(wrapperParams);
         o0pozWrapper.setUloha(O0pozWrapper.KLIC);
         poznamky = o0pozWrapper.getWindow(null);
    }}); //konec OPocitadla
         poznamky.setVisible(true);
       } catch (Exception ex) {
                   Logger.getLogger(O0pozWrapper.class.getName()).log(Level.SEVERE, null, ex);
                 }
               }
       return groovyBrowsePar;
  }
 
//klik na ikonu doprovodného textu v browse
if ("oretezp16.png".equals(fieldName)) {
               if ((entity != null) ) {
                 try {
         CDoprovodneTexty cDoprovodneTexty = new CDoprovodneTexty();
         BrowseWindow texty;
     OPocitadlo.createPocitadlo("Čekejte prosím", "Připravuji zobrazení doprovodných textů k položce…", OPocitadlo.POCITADLO_VRTITKO, OPocitadlo.BUTTON_NENI, new OExec() {@Override public Object execute() throws Exception {
    //tohle (níže) trochu trvá, proto zobrazíme vrtítko (výše)
         CDoprovodneTextyWrapper cDoprovodneTextyWrapper = new CDoprovodneTextyWrapper();
         cDoprovodneTextyWrapper.getBrowseParams().setEntity(cDoprovodneTexty);
         String wrapperParamsCDT = "";
         wrapperParamsCDT = StringParams.addParamValue(wrapperParamsCDT, "title", "Doprovodný text k položce "+entity.getIna());
         wrapperParamsCDT = StringParams.addParamValue(wrapperParamsCDT, "filter", "cisIdpk.eq("+entity.getIdpk().toString().trim()+") and nazevNt.eq('TS')");
         cDoprovodneTextyWrapper.setWrapperParams(wrapperParamsCDT);
         texty = cDoprovodneTextyWrapper.getWindow(null);
    }}); //konec OPocitadla
         texty.setVisible(true);
       } catch (Exception ex) {
         Logger.getLogger(CDoprovodneTextyWrapper.class.getName()).log(Level.SEVERE, null, ex);
                 }
               }
       return groovyBrowsePar;
  }
}

4.3. Makra Práce se záznamem – další příklady

4.3.1. Makro Práce se záznamem a volání makro na serveru

import cz.ortex.model.O6a;
import cz.ortex.groovy.GroovyBrowsePar;
import cz.ortex.util.o0.O0Session;
import cz.ortex.gui.o0.browse.BrowsePanel;
import javax.swing.JOptionPane;
import cz.ortex.components.OptionPane;
 
GroovyBrowsePar editUvod(O6a entity, Object dotahovane, GroovyBrowsePar groovyBrowsePar, O0Session o0session, BrowsePanel browsePanel) {
  //zde vypiste kod pisu:)
    System.out.println(entity.getDkaNr());
    entity.setDkaName1("xxx");
    //groovyBrowsePar = browsePanel.callServerGroovy("grooO6a", "editUvod", groovyBrowsePar);
    entity.setDkaName1("yyy");
    return groovyBrowsePar;
}
 
GroovyBrowsePar noEditDetail(O6a entity, Object dotahovane, GroovyBrowsePar groovyBrowsePar, O0Session o0session, BrowsePanel browsePanel) {
    groovyBrowsePar = browsePanel.callServerGroovy("grooO6a", "noEditDetail", groovyBrowsePar);
    return groovyBrowsePar;
}
 
GroovyBrowsePar kontrolaVeta(O6a entity, Object dotahovane, GroovyBrowsePar groovyBrowsePar, O0Session o0session, BrowsePanel browsePanel) {
    String fieldName = "dkaEMail";
    Object fieldValue = entity.getDkaEMail();
    groovyBrowsePar = validate(entity, dotahovane, fieldName, fieldValue, groovyBrowsePar, o0session, browsePanel);
    return groovyBrowsePar;
 
}
 
GroovyBrowsePar validate(O6a entity, Object dotahovane, String fieldName, Object fieldValue, GroovyBrowsePar groovyBrowsePar, O0Session o0session, BrowsePanel browsePanel) {
    if ("dkaEMail".equals(fieldName)) {
        groovyBrowsePar = browsePanel.callServerGroovy("grooO6a", "kontrolaEmail", groovyBrowsePar);
        System.out.println("result = " + groovyBrowsePar.getResult());
        if (groovyBrowsePar.getResult() == false) {
            if (OptionPane.createYesNoDialog(null, "Špatný formát mailu, povolit ?", JOptionPane.WARNING_MESSAGE) == 1) {
                groovyBrowsePar.setFocusName(fieldName);
            } else {
                entity.setDkaHomePage(fieldValue.toString());
            }
        }
 
    }
    return groovyBrowsePar;
}

Kontrolní makro na serveru:

import cz.ortex.groovy.GroovyBrowsePar;
import cz.ortex.model.O6a;
import cz.ortex.apilogic.o0.adresar.O6aData;
import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.O0StringUtil;
import cz.ortex.util.o0.BrowseEditState;
import java.util.HashMap;
 
GroovyBrowsePar kontrolaEmail(O6a entity, O6aData dotahovane, O0Session o0Session, GroovyBrowsePar groovyBrowsePar) {
    if (entity.getDkaEMail().contains("@")) {
        groovyBrowsePar.setResult(true);
        if (O0StringUtil.isBlank(entity.getDkaHomePage())) {
            entity.setDkaHomePage("www." + entity.getDkaEMail().substring(entity.getDkaEMail().indexOf("@") + 1));
        }
    } else {
        groovyBrowsePar.setResult(false);
    }
    return groovyBrowsePar;
}
 
GroovyBrowsePar noEditDetail(O6a entity, O6aData dotahovane, O0Session o0Session, GroovyBrowsePar groovyBrowsePar) {
    if (BrowseEditState.isProhlizeni(groovyBrowsePar.getEditState())) {
        groovyBrowsePar.setVar(1, 'P' as char);
    } else {
        groovyBrowsePar.setVar(1, ' ' as char);
    }
    HashMap<String, String> componentValues = new HashMap();
    componentValues.put("poznamka", "text poznamky z groovy makra");
    groovyBrowsePar.setComponentValues(componentValues);
    return groovyBrowsePar;
}
 
GroovyBrowsePar editUvod(O6a entity, O6aData dotahovane, O0Session o0Session, GroovyBrowsePar groovyBrowsePar) {
    groovyBrowsePar.setVar(1, ' ' as char);
    if (BrowseEditState.isZalozeni(groovyBrowsePar.getEditState())) {
        entity.setDkaName2("nova");
    }
    return groovyBrowsePar;
}

4.3.2. Makro Práce se záznamem a volání makro na serveru - podruhé

Řešení pomocí browsePanelu a voláním metody callServerGroovy. Tato metoda vrací object GroovyBrowsePar – v něm lze předat např. text zprávy.

Do pohledu – Práce se záznamem - vložíme následující kód

import cz.ortex.groovy.GroovyBrowsePar;
import cz.ortex.model.O6a;
import cz.ortex.util.o0.O0Session;
import cz.ortex.gui.o0.browse.BrowsePanel;
import cz.ortex.components.OptionPane;
import javax.swing.JOptionPane;
 
// Toto je vzor makra pro pohled - práce se záznamem - metoda validate
// Nelze volat samostatně.
// V makru je volána metoda callServerGroovy v aktuálním browsePanel
 
GroovyBrowsePar validate(O6a entity, Object dotahovane, String fieldName, Object fieldValue, GroovyBrowsePar groovyBrowsePar, O0Session o0session, BrowsePanel browsePanel) {
    if ("dkaEMail".equals(fieldName) {
        groovyBrowsePar = browsePanel.callServerGroovy("vzorEmailO6aTestSrv",
                                                       "kontrolaEmail", groovyBrowsePar);
        if (groovyBrowsePar.getResult() == true) {
          if (OptionPane.createYesNoDialog(null, "Špatný formát mailu, povolit ?",
              JOptionPane.WARNING_MESSAGE) == 1) {
            groovyBrowsePar.setFocusName(fieldName);
          } else {
            entity.setDkaHomePage(fieldValue.toString());
          }
       }
    }
}

Na straně serveru si připravíme volané makro

import cz.ortex.groovy.GroovyBrowsePar;
import cz.ortex.model.O6a;
import cz.ortex.apilogic.o0.adresar.O6aData;
import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.O0StringUtil;
 
// Toto je vzor serverového makra volané z makra pro pohled - práce se záznamem - metoda validate
// Makro vrací objekt GroovyBrowsePar
//Makru se předává parametr groovyBrowsePar, ostatní parametry v této metodě jsou povinné - doplní je "browsePanel" - entitu, dotahované a o0Session
//    groovyBrowsePar = browsePanel.callServerGroovy("vzorEmailO6aTestSrv", "kontrolaEmail", groovyBrowsePar);
 
GroovyBrowsePar kontrolaEmail(O6a entity, O6aData dotahovane, O0Session o0Session, GroovyBrowsePar groovyBrowsePar) {
    if (entity.getDkaEMail().contains("@")) {
      groovyBrowsePar.setResult(true);
      if (O0StringUtil.isBlank(entity.getDkaHomePage())) {
        //nastavení webové stránky dle domény z e-mailu
        entity.setDkaHomePage("www." +
        entity.getDkaEMail().substring(entity.getDkaEMail().indexOf("@") + 1));
      }
    } else {
      groovyBrowsePar.setResult(false);
    }
    return groovyBrowsePar;
}

4.3.3. Makro Práce se záznamem a volání makro na serveru - potřetí

Řešení pomocí Dao a voláním metody callGroovy. Tato metoda vrací obecně jakýkoli objekt, který je dále zpracován. Zde v příkladu je použito O6aDao a vracený objekt je osoba třídy Osoby.

Do pohledu – Práce se záznamem - vložíme následující kód

import cz.ortex.groovy.GroovyBrowsePar;
import cz.ortex.util.o0.O0Data;
import cz.ortex.util.o0.O0Session;
import cz.ortex.model.O6a;
import cz.ortex.model.Osoby;
import cz.ortex.gui.o0.browse.BrowsePanel;
import cz.ortex.apidao.o0.adresar.O6aDao;
import cz.ortex.util.o0.AppContext;
 
// Toto je vzor makra pro pohled - práce se záznamem - metoda validate
// Nelze volat samostatně.
// V makru je volána metoda callGroovy v Dao - je zde použito O6aDao
//Makru se předávají parametry v poli Objects[] - jejich počet a typy musí být stejné jako je ve volané metodě "kontrolaEmail" v makru na serveru "vzorEmailO6aOsobySrv"
//      Osoby kontrolaEmail(O6a entity, Object dotahovane, String fieldName, Object fieldValue, GroovyBrowsePar groovyBrowsePar, O0Session o0Session) {
 
GroovyBrowsePar validate(O6a entity, Object dotahovane, String fieldName,
                         Object fieldValue, GroovyBrowsePar groovyBrowsePar,
                         O0Session o0session, BrowsePanel browsePanel) {
  if ("dkaEMail".equals(fieldName)) {
    O6aDao o6aDao = (O6aDao) AppContext.getDaoService("o6aDao");
    if (o6aDao != null) {
      Object[] grooObject = new Object[6];
      grooObject[0] = entity;
      grooObject[1] = dotahovane;
      grooObject[2] = fieldName;
      grooObject[3] = fieldValue;
      grooObject[4] = groovyBrowsePar;
      grooObject[5] = o0session;
 
     Osoby osoba = o6aDao.callGroovy("vzorEmailO6aOsobySrv", "kontrolaEmail", grooObject);
     if (osoba != null) {
        if (osoba.getJmPrijm() != null) {
          entity.setDkaHomePage(osoba.getJmPrijm());
        }
      }
    }
  }
  return groovyBrowsePar;
}

Na straně serveru si připravíme volané makro

import cz.ortex.groovy.GroovyBrowsePar;
import cz.ortex.model.O6a;
import cz.ortex.model.Osoby;
import cz.ortex.apilogic.o0.adresar.O6aData;
import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.O0StringUtil;
import cz.ortex.util.o0.OEntityUtil;
 
// Toto je vzor serverového makra volané z makra pro pohled - práce se záznamem - metoda validate
// Makro vrací objekt Osoba
//Makru se předávají parametry v poli Objects[] - jejich počet a typy musí být stejné jako je ve této metodě
//      Object[] grooObject = new Object[6];
//      grooObject[0] = entity;
//      grooObject[1] = dotahovane;
//      grooObject[2] = fieldName;
//      grooObject[3] = fieldValue;
//      grooObject[4] = groovyBrowsePar;
//      grooObject[5] = o0session;
//      Osoby osoba = o6aDao.callGroovy("vzorEmailO6aOsobySrv",
                                        "kontrolaEmail", grooObject);
 
Osoby kontrolaEmail(O6a entity, Object dotahovane, String fieldName,
                    Object fieldValue, GroovyBrowsePar groovyBrowsePar,
                    O0Session o0Session) {
    if (entity.getDkaEMail().contains("@")) {
      Integer oscis = o0Session.getUserNumber();
      Osoby osoba = (Osoby) OEntityUtil.getRecordByParam(Osoby.class.getCanonicalName(),
                                                         "oscis", oscis);
      return osoba;
    } else {
      return null;
    }
}

4.3.4. Makro Práce se záznamem a dotažení údajů k adrese z Dkx

import cz.ortex.groovy.GroovyBrowsePar;
import cz.ortex.util.o0.O0Data;
import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.OEntityUtil;
import cz.ortex.util.o0.AppContext;
import cz.ortex.util.o0.O0StringUtil;
import cz.ortex.model.Nq10;
import cz.ortex.model.O6a;
import cz.ortex.model.Osoby;
import cz.ortex.model.Ohkon;
import cz.orcz.orfmodel.Dkx;
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 (entity != null) {
   if (entity.getO6aByO1firma() != null) {
    if (entity.getO6aByO1firma().getDkaNr() != null) {
     if ("o1ico0".equals(fieldName)) {
       if (O0StringUtil.isBlank(entity.getKontakt())) {
        if (O0StringUtil.isBlank(entity.getTelefon())) {
         if (O0StringUtil.isBlank(entity.getEmail())) {
           O6aDao o6aDao = (O6aDao) AppContext.getDaoService("o6aDao");
           if (o6aDao != null) {
            Dkx dodavatelDkx =  o6aDao.podejDkxDodavatel(entity.getO6aByO1firma().getDkaNr());
            if (dodavatelDkx != null) {
 
             if (O0StringUtil.notBlank(dodavatelDkx.getDkxTel())) {
               entity.setTelefon(dodavatelDkx.getDkxTel());
             }
             if (O0StringUtil.notBlank(dodavatelDkx.getDkxEMail2())) {
               entity.setEmail(dodavatelDkx.getDkxEMail2());
             }
             if (dodavatelDkx.getDkxIdpkOhkon() != null) {
                 Ohkon osoby = (Ohkon) OEntityUtil.getRecordByParam(Ohkon.class.getCanonicalName(), "idpk", dodavatelDkx.getDkxIdpkOhkon());
               if (osoby != null) {
                 String pr = "";
                 String jm = "";
                 if (osoby.getJmPrijm() != null) {
                   pr = osoby.getJmPrijm();
                 }
                 if (osoby.getJmJmeno() != null) {
                   jm = osoby.getJmJmeno();
                 }
                 entity.setKontakt(O0StringUtil.slozit(pr, jm, " "));
               }
             }
             HashMap<String, Serializable> componentValues = new HashMap();
             componentValues.put("kontakt", entity.getKontakt());
             componentValues.put("telefon", entity.getTelefon());
             componentValues.put("email", entity.getEmail());
             groovyBrowsePar.setComponentValues(componentValues);
             groovyBrowsePar.setFocusName("kontakt");
            }
           }
         }
        }
       }
     }
     if ("o1firma0".equals(fieldName)) {
       if (O0StringUtil.isBlank(entity.getKontakt())) {
        if (O0StringUtil.isBlank(entity.getTelefon())) {
         if (O0StringUtil.isBlank(entity.getEmail())) {
           O6aDao o6aDao = (O6aDao) AppContext.getDaoService("o6aDao");
           if (o6aDao != null) {
            Dkx dodavatelDkx =  o6aDao.podejDkxDodavatel(entity.getO6aByO1firma().getDkaNr());
            if (dodavatelDkx != null) {
             if (O0StringUtil.notBlank(dodavatelDkx.getDkxTel())) {
               entity.setTelefon(dodavatelDkx.getDkxTel());
             }
             if (O0StringUtil.notBlank(dodavatelDkx.getDkxEMail2())) {
               entity.setEmail(dodavatelDkx.getDkxEMail2());
             }
             if (dodavatelDkx.getDkxIdpkOhkon() != null) {
                 Ohkon osoby = (Ohkon) OEntityUtil.getRecordByParam(Ohkon.class.getCanonicalName(), "idpk", dodavatelDkx.getDkxIdpkOhkon());
               if (osoby != null) {
                 String pr = "";
                 String jm = "";
                 if (osoby.getJmPrijm() != null) {
                   pr = osoby.getJmPrijm();
                 }
                 if (osoby.getJmJmeno() != null) {
                   jm = osoby.getJmJmeno();
                 }
                 entity.setKontakt(O0StringUtil.slozit(pr, jm, " "));
               }
             }
//             entity.setKontakt("myslivec");
             HashMap<String, Serializable> componentValues = new HashMap();
             componentValues.put("kontakt", entity.getKontakt());
             componentValues.put("telefon", entity.getTelefon());
             componentValues.put("email", entity.getEmail());
             groovyBrowsePar.setComponentValues(componentValues);
             groovyBrowsePar.setFocusName("kontakt");
            }
           }
         }
        }
       }
     }
     if ("o1nazev0".equals(fieldName)) {
       if (O0StringUtil.isBlank(entity.getKontakt())) {
        if (O0StringUtil.isBlank(entity.getTelefon())) {
         if (O0StringUtil.isBlank(entity.getEmail())) {
           O6aDao o6aDao = (O6aDao) AppContext.getDaoService("o6aDao");
           if (o6aDao != null) {
            Dkx dodavatelDkx =  o6aDao.podejDkxDodavatel(entity.getO6aByO1firma().getDkaNr());
            if (dodavatelDkx != null) {
             if (O0StringUtil.notBlank(dodavatelDkx.getDkxTel())) {
               entity.setTelefon(dodavatelDkx.getDkxTel());
             }
             if (O0StringUtil.notBlank(dodavatelDkx.getDkxEMail2())) {
               entity.setEmail(dodavatelDkx.getDkxEMail2());
             }
             if (dodavatelDkx.getDkxIdpkOhkon() != null) {
                 Ohkon osoby = (Ohkon) OEntityUtil.getRecordByParam(Ohkon.class.getCanonicalName(), "idpk", dodavatelDkx.getDkxIdpkOhkon());
               if (osoby != null) {
                 String pr = "";
                 String jm = "";
                 if (osoby.getJmPrijm() != null) {
                   pr = osoby.getJmPrijm();
                 }
                 if (osoby.getJmJmeno() != null) {
                   jm = osoby.getJmJmeno();
                 }
                 entity.setKontakt(O0StringUtil.slozit(pr, jm, " "));
               }
             }
             HashMap<String, Serializable> componentValues = new HashMap();
             componentValues.put("kontakt", entity.getKontakt());
             componentValues.put("telefon", entity.getTelefon());
             componentValues.put("email", entity.getEmail());
             groovyBrowsePar.setComponentValues(componentValues);
             groovyBrowsePar.setFocusName("kontakt");
            }
           }
         }
        }
       }
     }
    }
   }
  }
  return groovyBrowsePar;
}

4.3.5. Makro Práce se záznamem a dotažení všech poznámek z WF

Do pohledu si vložíme víceřádkové pole a nazveme ho „wfPozn“. V makru bude následující plnění poznámkou:

import cz.ortex.groovy.GroovyBrowsePar;
import cz.ortex.util.o0.O0Data;
import cz.ortex.util.o0.O0Session;
import cz.ortex.apidao.o0.workflow.OfwoDao;
import cz.ortex.model.Ofwo;
import cz.ortex.util.o0.AppContext;
 
GroovyBrowsePar noEditDetail(Object entity, O0Data dotahovane, GroovyBrowsePar groovyBrowsePar, O0Session o0session, Object browsePanel) {
  //zde vypiste kod
  String wfPoznamka = "";
  if (entity != null) {
    OfwoDao ofwoDao = (OfwoDao) AppContext.getDaoService(OfwoDao.NAME);
    if (ofwoDao != null) {
      List<Ofwo> ofwos = ofwoDao.getOfwosByTargetRecord(entity);
      if (ofwos != null && !ofwos.isEmpty()) {
         Ofwo ofwo = ofwos[0];
        wfPoznamka = ofwoDao.pozHistorieTisk(ofwo, true, true, true);
       }
    }
  }
  HashMap<String, Serializable> componentValues = new HashMap();
  componentValues.put("wfPozn", wfPoznamka);
  groovyBrowsePar.setComponentValues(componentValues);
//  System.out.println(wfPoznamka);
  return groovyBrowsePar;
}

4.4. Speciální makra

4.4.1. Podání čísla žádanky

import cz.ortex.model.Oelfrm;
import cz.ortex.util.o0.O0Session;
import cz.ortex.impldao.o0.admin.OsobyDaoImpl;
import cz.ortex.util.o0.O0DateUtil;
import cz.ortex.util.o0.O0StringUtil;
import cz.ortex.model.Osoby;
import java.util.logging.Level;
import java.util.logging.Logger;
 
String cisloZadanky(Object[] args, O0Session o0session) {
//char 20,  číslo z Osob číslo referenta wf – skupina poslední 3 číslice, rok, 5, rostoucí číslo platí pro přihlášenou osobu
// zde se vrací pouze speciální maska kde samorostoucí číslo je oddělené za mezerou
    String vysl = null;
    Osoby osoby = OsobyDaoImpl.getEntity(o0session.getUserNumber());
    String skupina = O0StringUtil.rtrim(osoby.getSkupina());
    int len = skupina.length();
    skupina = skupina.substring(len -3);
    Integer rok = O0DateUtil.getRok(o0session.getDatumZpracovani());
    vysl = skupina + rok.toString().substring(2,4) + "5 001";
    return vysl;
}

4.4.2. WF a vice maker v podmínce

import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.OEntityUtil;
import java.rmi.RemoteException;
import java.math.BigDecimal;
import cz.ortex.model.Oelfrm;
import cz.ortex.model.Ofwos;
import cz.ortex.impldao.o0.workflow.OfwosDaoImpl;
 
  String osobniLimit(Object[] objects, O0Session o0Session) {
    String vysl = "0";
    Oelfrm entity = (Oelfrm) objects[0];
    if (entity != null) {
//    Integer oscis = o0Session.getUserNumber();
      Integer oscis = entity.getZodpovidaOscis();
      Ofwos ofwos = OfwosDaoImpl.getEntityByUtvar(oscis, entity.getHodn06(), o0Session);
      if (ofwos != null && ofwos.getOsobniLimit() != null) {
        vysl = ofwos.getOsobniLimit().toString();
      }
    }
    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.model.Oelfrm;
 
  String pripravena(Object[] objects, O0Session o0Session) {
    Oelfrm entity = (Oelfrm) objects[0];
    if (entity != null) {
      if (entity.getStav() == null) {
        return true;
      }
      if (O0StringUtil.isBlank(entity.getStav().toString())) {
        return true;
      }
    }
    return false;
  }

import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.OEntityUtil;
import java.rmi.RemoteException;
import java.math.BigDecimal;
import cz.ortex.model.Oelfrm;
import cz.ortex.model.Ofwos;
import cz.ortex.impldao.o0.workflow.OfwosDaoImpl;
 
  String substring(Object[] objects, O0Session o0Session) {
    String vysl = "' '";
    Oelfrm entity = (Oelfrm) objects[0];
    if (entity != null) {
      if (entity.getCislo() != null) {
        vysl = "'" + entity.getCislo().substring(0,3) + "'";
      }
    }
    return vysl;
  }

4.4.1. WF a kontrola správnosti schválení makrem

Makro kontroluje vyplnění návrhu rozpočtu (tabulka OFWDT) na cenu faktury

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.createCriteria(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;
}

4.4.1. WF a kontrola správnosti schválení makrem 2

Makro kontroluje zda je vyplněn alespoň jeden řádek návrhu čerpání rozpočtu (v tabulce OFWDT).

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;
 
  public OfwRetObject stepActionRun(PpfHl entity, Ofwk ofwk, OfwUtil.OfwActionRunParams runParams, O0Session o0Session) {
    OfwRetObject retObject = new OfwRetObject();
    retObject.setActionCorrectlyDone(true);
    String chyba = "";
    if (entity != null) {
      Session session = HibernateUtil.getCurrentSession();
      Transaction tx = session.getTransaction();
      boolean byloTransactionActive = tx.isActive();
      try {
        if (!byloTransactionActive) {
          tx.begin();
        }
        String nazevTab = "PpfhlRozp";
 
        Criteria c = session.createCriteria(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.getHodnota10() == null || ofwdt.getHodnota10().trim().length() == 0) {
                chyba = " - prázdný oddíl v rozúčtování";
                retObject.setActionCorrectlyDone(false);
                retObject.setChoiceToSetWf(OfwSplnenoChoices.OfwSplnenoChoice.NESPLNENO);
                retObject.setRetString(chyba);
                break;
              }
            }
          }
        }
 
        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;
  }

4.4.2. WF a dotažení obnosu do udaje WF včetně vodících null

1) Takto je plnění u většiny zákazníků – na Typu postupu se řekne, jaký údaj ze schvalovaného dokladu se má umístit do WF údajů.

2) Takto lze plnit údaj pomocí makra, kde si změníte způsob naplnění

3) Makro vypadá nějak takto

A zde je změna uložení – u obnosu faktury se doplní zepředu nuly na nějaký „rozumný“ počet míst

import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.OEntityUtil;
import java.text.DecimalFormat;
 
// metoda vrací string, max. 50 znaků pro Doplňkovou hodnotu u Typu postupu
// pro každou Doplňkovou hodnotu je třeba mít jedno makro
String hodnota(Object[] objects, O0Session o0Session) {
  //zde vypište kód
  Object primRecord = objects[0];
  String hodnota = "";
  if (primRecord != null) {
      if (primRecord.getObnosFakt() != null) {
       BigDecimal bigDecimal = primRecord.getObnosFakt();
       DecimalFormat df = new DecimalFormat("0000000000000000.00");
       hodnota = df.format(bigDecimal);
     }
  }
  return hodnota;
}

4) A v zobrazení je třeba ty úvodní zase odstranit. Jinak tam budou vidět

5) A to se udělá zase makrem na sloupci

import cz.ortex.model.Ofwk;
import cz.ortex.util.o0.OEntityUtil;
import cz.ortex.util.o0.O0StringUtil;
import cz.ortex.model.Osoby;
 
Object getCellValue(Ofwk entity, Object dotahovane) {
    if (entity != null) {
      Character znak = '0';
      return O0StringUtil.lTrimByChar(entity.getTrideni1(), znak);
    }
    return " ";
}

6) Nebo zobrazení změnou textového pole na číselné

4.4.3. WF a dotažení datumu do udaje WF ve formátu RRRRMMDD

1) Takto je plnění u většiny zákazníků – na Typu postupu se řekne, jaký údaj ze schvalovaného dokladu se má umístit do WF údajů.

Datum se doplní do WF ve formátu DD.MM.RRRR

2) Takto lze plnit údaj pomocí makra, kde si změníte způsob naplnění

3) Makro vypadá nějak takto

A zde je změna uložení – u datumu splatnosti faktury se změní uložení na RRRRMMDD

import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.OEntityUtil;
import cz.ortex.util.o0.O0StringUtil;
import cz.ortex.util.o0.O0DateUtil;
import org.apache.commons.beanutils.ConvertUtils;
 
// metoda vrací string, max. 50 znaků pro Doplňkovou hodnotu u Typu postupu
// pro každou Doplňkovou hodnotu je třeba mít jedno makro
String hodnota(Object[] objects, O0Session o0Session) {
  //zde vypište kód
  Object primRecord = objects[0];
  String hodnota = "00000000";
  if (primRecord != null) {
      if (primRecord.getDatSplatnost() != null) {
       Date datum = primRecord.getDatSplatnost();
       String hodn = O0DateUtil.dateToString(datum);
       if (O0StringUtil.notBlank(hodn)) {
         hodnota = hodn.substring(6,10) + hodn.substring(3,5) + hodn.substring(0,2);;
       }
     }
  }
  return hodnota;
}

4) A v zobrazení je třeba zase změní zobrazení na DD.MM.RRRR

5) A to se udělá zase makrem na sloupci

import cz.ortex.model.Ofwk;
import cz.ortex.util.o0.OEntityUtil;
import cz.ortex.util.o0.O0StringUtil;
import cz.ortex.model.Osoby;
 
Object getCellValue(Ofwk entity, Object dotahovane) {
    if (entity != null) {
     if (O0StringUtil.notBlank(entity.getTrideni5())) {
       return entity.getTrideni5().substring(6,8) + "." + entity.getTrideni5().substring(4,6) + "." + entity.getTrideni5().substring(0,4)
     }
    }
    return " ";
}

4.4.4. Pojmenování dokumentu

Makro vrací jméno dokumentu pro uložení. Lze kombinovat s pořadím.

Zde je vzorové systémové makro:

import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.OEntityUtil;
import java.rmi.RemoteException;
import java.math.BigDecimal;
import cz.ortex.model.Oeldok;
// Vzorové makro pro podání jména dokumentu
// pro použití jako uživatelské přejmenovat na groo...
 
String jmenoDokumentu(Object[] objects, O0Session o0Session) {
    String vysl = "";
    Oeldok oeldok = null;
    Object entity = objects[0];
    if (objects.length > 1) {
      oeldok = objects[1];
    }
    if (entity != null) {
        vysl = "nove_jmeno";
    }
    return vysl;
}

4.5. Práce s browsem

Poznámka – pro doplnění sloupce browsu, který je plněn makrem, je v Dotahovaných k tomuto účelu připraven atribut „zzmakro“.

4.5.1. Obarvení browsu pomocí SQL

Makro vykonává na serveru, kontroluje se na klientu a tak je třeba místo

  import cz.ortex.implutil.o0.HibernateUtil;

použít celou cestu až při volání

  Session session = cz.ortex.implutil.o0.HibernateUtil.getCurrentSession();

import java.awt.Color; import cz.ortex.util.o0.O0Session; import cz.ortex.util.o0.OEntityUtil; import cz.ortex.util.o0.O0StringUtil; import java.rmi.RemoteException; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.SQLQuery; import cz.ortex.implutil.o0.HibernateUtil; import cz.ortex.model.PpfHl;

Color getBackgroundColor(Object entity, Object dotahovane) {

//zde vypiste kod

}

Color getForegroundColor(Object entity, Object dotahovane) {

//zde vypiste kod
BigDecimal sumaSkut = BigDecimal.ZERO;
if (entity != null) {
  if (entity.getO6a() != null) {
    Session session = HibernateUtil.getCurrentSession();
    Transaction transaction = session.getTransaction();
    boolean byloTransactionActive = transaction.isActive();
    if (!byloTransactionActive) {
      transaction.begin();
    }
    if (transaction.isActive()) {
      String testDotaz = "select sum(obnos_tuzem) from PPF_HL where cf_o6a = " + entity.getO6a().getDkaNr() + " group by cf_o6a";
      SQLQuery sqlQuery = session.createSQLQuery(testDotaz);
      Object hodnota = (Object) sqlQuery.uniqueResult();
      if (hodnota != null) {
        if (hodnota.getClass().getSimpleName().equals("BigDecimal")) {
          sumaSkut = (BigDecimal) hodnota;
        }
      }
    }
    if (!byloTransactionActive) {
      transaction.rollback();
    }
    if (sumaSkut.compareTo(new BigDecimal("100000.00"))> 0) {
      return new Color(255,0,0);
    }
  }

4.5.2. Makro pro dotažení WF, které je Vráceno

Nad přijatými fakturami

import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.OEntityUtil;
import cz.ortex.util.o0.O0StringUtil;
import java.rmi.RemoteException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.SQLQuery;
import cz.ortex.implutil.o0.HibernateUtil;
import java.util.List;
import cz.ortex.model.PpfHl;
import cz.ortex.model.Ofwk;
import cz.ortex.model.Osoby;
 
Object getCellValue(PpfHl entity, Object dotahovane) {
  String vysl = " ";
  if ((entity != null) && (entity.getDatOdsouhlaseni() == null) && (entity.getDatPredani() != null)) {
    Session session = HibernateUtil.getCurrentSession();
    Transaction transaction = session.getTransaction();
    boolean byloTransactionActive = transaction.isActive();
    if (!byloTransactionActive) {
        transaction.begin();
    }
    if (transaction.isActive()) {
     String testDotaz = "select ofwk.idpk from OFWO ofwo join OFWK ofwk on ofwk.ofwp_idpk = ofwo.ofwp_idpk join OFWA ofwa on ofwa.idpk = ofwk.ofwa_idpk where (ofwa.aktivita = 'ZNOVU') and (ofwk.splneno = 'n') and (ofwo.stav = '1') and (ofwo.obj_name = 'PpfHl') and (ofwo.obj_idpk = " + entity.getIdpk() + " )";
     SQLQuery sqlQuery = session.createSQLQuery(testDotaz);
     List list = sqlQuery.list();
     for (Object l : list) {
       if (l != null) {
        vysl = "Ano";
       }
     }
    }
    if (!byloTransactionActive) {
        transaction.rollback();
    }
  }
  return vysl;
}

4.5.3. Makro pro dotažení jména aktuálního schvalovatele ve WF

import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.OEntityUtil;
import cz.ortex.util.o0.O0StringUtil;
import cz.ortex.model.PpfHl;
import cz.ortex.model.Ofwk;
import cz.ortex.model.Osoby;
import cz.ortex.impldao.o0.workflow.OfwkDaoImpl;
 
Object getCellValue(PpfHl entity, Object dotahovane) {
    String vysl = " ";
    if ((entity != null) && (entity.getDatOdsouhlaseni() == null)) {
      OfwkDaoImpl ofwkDaoImpl = new OfwkDaoImpl();
      Ofwk ofwk = ofwkDaoImpl.aktualniKrok(entity, "PPFHL");
      if (ofwk != null) {
        Osoby osoby = null;
        osoby = (Osoby) OEntityUtil.getRecordByParam(Osoby.class.getCanonicalName(), "idpk", ofwk.getUcastnikIdpk());
        if (osoby != null) {
         return osoby.getJmPrijm().trim() + " " + osoby.getJmJmeno().trim();
        }
      }
    }
    return vysl;
}

4.5.4. Makro dotažení obnosu faktury z rozúčtování

import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.OEntityUtil;
import java.rmi.RemoteException;
import cz.ortex.apilogic.o0.workflow.OfwUtil;
import java.io.Serializable;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.rmi.RemoteException;
import cz.ortex.apidao.p0.ucto.PucnDao;
 
import cz.ortex.model.PpfHl;
import cz.ortex.impldao.p0.ucto.PucnDaoImpl;
 
BigDecimal obnosPpfhl(Object[] objects, O0Session o0Session) {
  //zde vypište kód
    BigDecimal obnosFa = BigDecimal.ZERO;
    PpfHl ppfhl = (PpfHl) objects[0];
    if (ppfhl != null) {
        try {
          PucnDao dao = (PucnDao) OEntityUtil.getServiceByName(OEntityUtil.OServiceType.dao, "pucnDao");
          if (dao != null) {
              obnosFa = dao.getObnosFakturovanoVcetneZalohForPpfHlWorkflow(ppfhl);
          }
        } catch (RemoteException ex) {
          Logger.getLogger(PpfHlPanel.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    return obnosFa;
}

4.5.5. Makro dotažení seznamu čísel faktury k objednávce

import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.OEntityUtil;
import java.rmi.RemoteException;
import cz.ortex.model.PpfHl;
import cz.ortex.model.Nq10;
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.SQLQuery;
import cz.ortex.implutil.o0.HibernateUtil;
import java.util.List;
import org.hibernate.type.StringType;
 
Object getCellValue(Nq10 entity, Object dotahovane) {
    String vysl = "FD:";
    vysl = "";
    org.hibernate.type.StringType stringType = new StringType();
    if ((entity != null) && (entity.getObje() != null)) {
      Session session = HibernateUtil.getCurrentSession();
      Transaction transaction = session.getTransaction();
      boolean byloTransactionActive = transaction.isActive();
      if (!byloTransactionActive) {
        transaction.begin();
      }
      if (transaction.isActive()) {
//       String testDotaz = "select cis_dokl from PPF_HL where (objednavka like '%" + entity.getObje().trim() + "%')";
       String testDotaz = "select cis_dokl from PPF_HL ppf left outer join O0ZAZNVAZ o0zaznvaz on (o0zaznvaz.trida = 'PpfHl') and (o0zaznvaz.name_obj = 'Nq10') and (o0zaznvaz.idpk_obj = " + entity.getIdpk() + " ) where (ppf.objednavka like '%" + entity.getObje().trim() + "%') or (ppf.idpk = o0zaznvaz.id_zaznamu)";
       SQLQuery sqlQuery = session.createSQLQuery(testDotaz);
       sqlQuery.addScalar("cis_dokl", stringType);
       List list = sqlQuery.list();
       if (list != null) {
        for (Object l : list) {
         if (l != null) {
          if (String.class.isInstance(l)) {
            String cObj = (String) l;
            if (O0StringUtil.notBlank(vysl)) {
             vysl = vysl.trim() + ",  ";
            }
            vysl = vysl.trim() + " " + cObj.trim();
          }
         }
        }
       }
      }
      if (!byloTransactionActive) {
        transaction.rollback();
      }
    }
    return vysl;
}

4.5.6. Dotažení do browsu s použitím entity z volajícího (nadřazeného) wrapperu

Makro pracuje s hodnotami v dotahovaných: - getPredavajiciClass() - Vrací entitní třídu z předávajícího wrapperu pro groovy makro cellValue - getPredavajiciId() - Vrací id entity z předávajícího wrapperu pro groovy makro cellValue

import cz.ortex.util.o0.OEntityUtil;
import cz.ortex.util.o0.O0StringUtil;
import cz.ortex.model.PpfHl;
import cz.ortex.model.Givazobj;
import java.math.BigDecimal;
import cz.ortex.apidao.g0.GivazobjDao;
 
Object getCellValue(PpfHl entity, Object dotahovane) {
    BigDecimal obnosFa = BigDecimal.ZERO;
    if (entity != null) {
      obnosFa = entity.getObnosTuzem();
      if (dotahovane != null) {
        if (dotahovane.getPredavajiciClass() != null) {
          if (dotahovane.getPredavajiciId() != null) {
            GivazobjDao givazobjDao = (GivazobjDao) OEntityUtil.getServiceByName(OEntityUtil.OServiceType.dao,
                                                                                 GivazobjDao.NAME);
            if (givazobjDao != null) {
              Givazobj givazobj = givazobjDao.getEntityByParam("Giia", dotahovane.getPredavajiciId(),
                                                               "PpfHl", entity.getIdpk());
              if (givazobj != null) {
                if (givazobj.getCastka() != null) {
                  obnosFa = givazobj.getCastka();
                }
              }
            }
          }
        }
      }
    }
    return obnosFa;
}

4.6. Práce s detailem

4.6.1. Zobrazení obrázku

Makro načte obrázek dle zadání a zobrazí ho v poli „gobrazek“

import cz.ortex.groovy.GroovyBrowsePar;
import cz.ortex.util.o0.O0Data;
import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.O0StringUtil;
import cz.ortex.gui.o0.eldoc.OeldokWrapper;
import javax.swing.ImageIcon;
 
GroovyBrowsePar noEditDetail(Object entity, O0Data dotahovane, GroovyBrowsePar groovyBrowsePar, O0Session o0session, Object browsePanel) {
  //zde vypiste kod
    if (entity != null) {
       HashMap<String, Serializable> componentValues = new HashMap();
       // zobrazi prvni připojený obrázek druhu MAJ_BJ
       String bI = "";
          if (O0StringUtil.notBlank(entity.getIko())) {
         bI = OeldokWrapper.podejNahledIko("MAJ_OBJ",entity.getIko(), 200);
          }
       componentValues.put("gobrazek", new ImageIcon(bI));
       groovyBrowsePar.setComponentValues(componentValues);
       return groovyBrowsePar;
   }
}

4.6.2. Zobrazení obrázku

Makro vytvoří čárový kód a zobrazí ho v poli „gobrck“

import cz.ortex.groovy.GroovyBrowsePar;
import cz.ortex.util.o0.O0Data;
import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.O0StringUtil;
import javax.swing.ImageIcon;
import java.awt.image.BufferedImage;
import net.sourceforge.barbecue.Barcode;
import net.sourceforge.barbecue.BarcodeException;
import net.sourceforge.barbecue.BarcodeFactory;
import net.sourceforge.barbecue.BarcodeImageHandler;
import net.sourceforge.barbecue.output.OutputException;
 
GroovyBrowsePar noEditDetail(Object entity, O0Data dotahovane, GroovyBrowsePar groovyBrowsePar, O0Session o0session, Object browsePanel) {
  //zde vypiste kod
    if (entity != null) {
       HashMap<String, Serializable> componentValues = new HashMap();
       // zobrazi čárový kód - dle nastavení - zde Code128 z inventářního čísla
       try {
            Barcode barcode;
            barcode = BarcodeFactory.createCode128B(String.valueOf(entity.getInv()));
            barcode.setBarHeight(30);
            barcode.setBarWidth(2);
            //barcode.setResolution(300);
            BufferedImage bCK = BarcodeImageHandler.getImage(barcode);
            componentValues.put("gobrck", new ImageIcon(bCK));
       } catch (BarcodeException ex) {
            Logger.getLogger(G0zphValidator.class.getName()).log(Level.SEVERE, null, ex);
       } catch (OutputException ex) {
            Logger.getLogger(G0zphValidator.class.getName()).log(Level.SEVERE, null, ex);
       }
 
       groovyBrowsePar.setComponentValues(componentValues);
       return groovyBrowsePar;
   }
}

4.6.3. Dotažení poznámky WF do detailu

Zde příklad pro Došlé faktury:

import cz.ortex.apidao.o0.workflow.OfwoDao;
import cz.ortex.model.Ofwo;
 
GroovyBrowsePar noEditDetail(Object entity, O0Data dotahovane, GroovyBrowsePar groovyBrowsePar, O0Session o0session, Object browsePanel) {
  //zde vypiste kod
  String wfPoznamka = "";
  if (entity != null) {
    OfwoDao ofwoDao = (OfwoDao) AppContext.getDaoService(OfwoDao.NAME);
    if (ofwoDao != null) {
      Ofwo ofwo = ofwoDao.getLastOfwoByTargetRecord(entity, "PPFHL", false);
      if (ofwo != null ) {
        wfPoznamka = ofwoDao.pozHistoriePozn(ofwo);
       }
    }
  }
  HashMap<String, Serializable> componentValues = new HashMap();
  componentValues.put("wfPozn", wfPoznamka);
  groovyBrowsePar.setComponentValues(componentValues);
  return groovyBrowsePar;
}

5. Drobné utility

5.1. Formát datumu

import cz.ortex.model.PpfHl;
import java.text.SimpleDateFormat;
import java.util.Date;
 
String getSplatnost(Ofwo ofwo, Ofwp ofwp, Ofwk ofwk, PpfHl primZazn, O0Session o0Session) {
  //zde vypište kód
  //return primZazn.getDatSplatnost();
  Date datum = primZazn.getDatSplatnost();
  SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy");
  String datumSplatnosti = format.format(datum);
  return datumSplatnosti;
}

5.2. Formát obnosu

String getObnos(Ofwo ofwo, Ofwp ofwp, Ofwk ofwk, PpfHl primZazn, O0Session o0Session) {
  //zde vypište kód
  String num01Str = "0,00";
  if (primZazn.getObnosFakt() != null) {
    num01Str = String.format("%,.2f", primZazn.getObnosFakt());
  }
  return num01Str;
}

nebo

import java.text.DecimalFormat;
 
String getObnos(Ofwo ofwo, Ofwp ofwp, Ofwk ofwk, PpfHl primZazn, O0Session o0Session) {
  //zde vypište kód
  DecimalFormat format = new DecimalFormat("#,##0.00");
  return format.format(primZazn.getObnosFakt());
}

5.3. Výpočet tuzemské měny z cizí

Zde pro objednávku – nq10

import java.math.BigDecimal;
          BigDecimal obnos = BigDecimal.ZERO;
         obnos = nq10.getDzakl();
         if ((nq10.getKurz() != null) && (nq10.getKurz().compareTo(BigDecimal.ZERO) != 0)) {
           obnos = obnos.multiply(nq10.getKurz());
           if ((nq10.getKoef() != null) && (nq10.getKoef().compareTo(BigDecimal.ZERO) >= 0)) {
             obnos = obnos.divide(nq10.getKoef());
           }
         }

5.4. Dočtení osoby

Zde z WF – dle idpk

        Osoby osoby = (Osoby) OEntityUtil.getRecordByParam(Osoby.class.getCanonicalName(), "idpk", ofwk.getUcastnikIdpk());
        if (osoby != null) {}

Zde z objednávek – dle oscis

        Osoby osoby = (Osoby) OEntityUtil.getRecordByParam(Osoby.class.getCanonicalName(), "oscis", nq10.getPrac2());
        if (osoby != null) {}

5.5. Dočtení z číselníku

Do sloupce browsu – dočtení proběhne na serveru.

import cz.ortex.util.o0.OEntityUtil;
import cz.ortex.util.o0.O0StringUtil;
import cz.ortex.model.O0ciselnik;
import cz.ortex.model.Lcicen;
import cz.ortex.impldao.o0.ciseln.O0ciselnikDaoImpl;
 
Object getCellValue(Lcicen entity, Object dotahovane) {
  if (entity != null) {
    O0ciselnikDaoImpl o0ciselnikDaoImpl = new O0ciselnikDaoImpl();
    if (o0ciselnikDaoImpl != null)  {
      O0ciselnik cis = o0ciselnikDaoImpl.getByKod("L0CISSK", entity.getSsk1());
      if (cis != null) {
        return cis.getHodCiseln();
      }
    }
  }
  return " ";
}

Do detailu – dočtení proběhne na klientu:

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.util.o0.OEntityUtil;
import cz.ortex.util.o0.O0StringUtil;
import cz.ortex.model.O0ciselnik;
import cz.ortex.model.Nqz1;
import cz.ortex.apidao.o0.ciseln.O0ciselnikDao;
 
GroovyBrowsePar editUvod(Object entity, O0Data dotahovane, GroovyBrowsePar groovyBrowsePar, O0Session o0session, Object browsePanel) {
  //zde vypiste kod
  if (entity != null) {
    O0ciselnikDao o0ciselnikDao = (O0ciselnikDao) AppContext.getDaoService("o0ciselnikDao");
    if (o0ciselnikDao != null) {
      O0ciselnik cis = o0ciselnikDao.getByKod("L0CISSK", entity.getKomodita());
      if (cis != null) {}
    }
  }
  return groovyBrowsePar;
}

5.6. Převos string na integer

   String garantS1 = cis.getHodCiselnS1();
   if (O0StringUtil.notBlank(garantS1)) {
     Integer oscis = Integer.parseInt(garantS1);}

5.7. Složení jména a přijmení

Spojení dvou řetězců s oddělovačem – zde „ “

    String prJm = O0StringUtil.slozit(osoby.getJmPrijm(), osoby.getJmJmeno(), " ");

5.8. Zjištění uživatele na serveru

Na klientu se používá AppContext, na serveru je třeba použít O0Session

import cz.ortex.util.o0.O0Session;
import cz.ortex.aop.OMethodAspect;
import cz.ortex.impldao.o0.O0DaoImpl;
 
Object getCellValue(Object entity, Object dotahovane) {
  //zde vypiste kod
  Object o = OMethodAspect.getRemoteByThread(java.lang.Thread.currentThread());
  if (o instanceof O0DaoImpl) {
    O0DaoImpl dao = (O0DaoImpl) o;
    O0Session o0Session = dao.getOrsoftSession();
    return o0Session.getUserNumber();
  }
}