Obsah

Groovy makra v Openu

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.CriteriaUtil.createCriteria(session, Ofwdt.class);
        c.add(Restrictions.eq("nazevtab", nazevTab.trim()));
        c.add(Restrictions.eq("casttab", " "));
        c.add(Restrictions.eq("ofwkIdpk", ofwk.getIdpk()));
        List<Ofwdt> ofwdtList = c.list();
        for (int i = 0; i < ofwdtList.size(); i++) {
          Ofwdt ofwdt = ofwdtList.get(i);
          if (ofwdt != null) {
            if (ofwdt.getNazevtab().trim().equals(nazevTab.trim())) {
               if (ofwdt.getNum02() != null) {
                   obnosNum02 = obnosNum02.add(ofwdt.getNum02());
               }
            }
          }
        }
        if (entity.getObnosTuzem().compareTo(obnosNum02) == 0) {
           chyba = "OK";
        } else {
               // "Nelze schválit. Rozdílny obnos faktury a rozúčtování."
            BigDecimal sto = new BigDecimal(100.00);
            BigDecimal rozdil = obnosFaktury.subtract(obnosNum02);
            rozdil = rozdil.abs();
            BigDecimal procento = rozdil.divide(obnosFaktury, 2, RoundingMode.HALF_DOWN).multiply(sto);
            procento = procento.abs();
            if (rozdil.compareTo(rozdilMax) > 0) {
                chyba = "- nelze schválit. Rozdílný obnos faktury a rozúčtování.";
                retObject.setActionCorrectlyDone(false);
                retObject.setChoiceToSetWf(OfwSplnenoChoices.OfwSplnenoChoice.NESPLNENO);
                retObject.setRetString(chyba);
            }
            if (procento.compareTo(rozdilProc) > 0) {
                chyba = "- nelze schválit. Rozdílný obnos faktury a rozúčtování.";
                retObject.setActionCorrectlyDone(false);
                retObject.setChoiceToSetWf(OfwSplnenoChoices.OfwSplnenoChoice.NESPLNENO);
                retObject.setRetString(chyba);
            }
        }
      } catch (Exception e) {
        if (!byloTransactionActive) {
          tx.rollback();
        }
        retObject.setActionCorrectlyDone(false);
        retObject.setChoiceToSetWf(OfwSplnenoChoices.OfwSplnenoChoice.NESPLNENO);
        retObject.setRetString("Bylo exception");
        retObject.setException(e);
        throw new RuntimeException(e);
      }
     }
    }
    return retObject;
}

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.CriteriaUtil.createCriteria(session, Ofwdt.class);
        c.add(Restrictions.eq("nazevtab", nazevTab.trim()));
        c.add(Restrictions.eq("casttab", " "));
        c.add(Restrictions.eq("ofwkIdpk", ofwk.getIdpk()));
        List<Ofwdt> ofwdtList = c.list();
        for (int i = 0; i < ofwdtList.size(); i++) {
          Ofwdt ofwdt = ofwdtList.get(i);
          if (ofwdt != null) {
            if (ofwdt.getNazevtab().trim().equals(nazevTab.trim())) {
              if (ofwdt.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.query.NativeQuery; 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";
      NativeQuery<String> sqlQuery = session.createNativeQuery(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.query.NativeQuery;
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() + " )";
     NativeQuery<String> sqlQuery = session.createNativeQuery(testDotaz);
     List<String> list = sqlQuery.getResultList();
     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.query.NativeQuery;
import cz.ortex.implutil.o0.HibernateUtil;
import java.util.List;
import org.hibernate.type.StandardBasicTypes;
 
Object getCellValue(Nq10 entity, Object dotahovane) {
    String vysl = "FD:";
    vysl = "";
    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)";
       NativeQuery<String> sqlQuery = session.createNativeQuery(testDotaz);
       sqlQuery.addScalar("cis_dokl", StandardBasicTypes.STRING);
       List<String> list = sqlQuery.getResultList();
       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;
}