====== Groovy makra v Openu ======
===== 3. Pokračování maker =====
==== 3.1. Barvy v browse ====
Nastavují se pomocí tlačítka Groovy makra
{{:orsoftopen:spravais:workshop:groovymakra:image10.png?700}}
{{:orsoftopen:spravais:workshop:groovymakra:image11.png?700}}
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 ====
{{:orsoftopen:spravais:workshop:groovymakra:image12.png?700}}
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 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í:
{{:orsoftopen:spravais:workshop:groovymakra:image13.png?700}}
{{:orsoftopen:spravais:workshop:groovymakra:image14.png?700}}
=== 3.3.1. Propis znaku na entitu ===
**- Varianta přes speciální metodu**
{{:orsoftopen:spravais:workshop:groovymakra:image15.png?700}}
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**
{{:orsoftopen:spravais:workshop:groovymakra:image16.png?700}}
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
{{:orsoftopen:spravais:workshop:groovymakra:image17.png?700}}
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 ====
{{:orsoftopen:spravais:workshop:groovymakra:image18.png?700}}
=== 3.5.1. Vypočtení absolutní hodnoty ===
Pro podmínku spuštění postupu WF
{{:orsoftopen:spravais:workshop:groovymakra:image19.png?700}}
{{:orsoftopen:spravais:workshop:groovymakra:image20.png?700}}
{{:orsoftopen:spravais:workshop:groovymakra:image21.png?700}}
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 ===
{{:orsoftopen:spravais:workshop:groovymakra:image22.png?700}}
{{:orsoftopen:spravais:workshop:groovymakra:image23.png?700}}
{{:orsoftopen:spravais:workshop:groovymakra:image24.png?700}}
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**
{{:orsoftopen:spravais:workshop:groovymakra:image25.png?700}}
{{:orsoftopen:spravais:workshop:groovymakra:image26.png?700}}
{{:orsoftopen:spravais:workshop:groovymakra:image27.png?700}}
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**
{{:orsoftopen:spravais:workshop:groovymakra:image28.png?700}}
{{:orsoftopen:spravais:workshop:groovymakra:image29.png?700}}
{{:orsoftopen:spravais:workshop:groovymakra:image30.png?700}}
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 ===
{{:orsoftopen:spravais:workshop:groovymakra:image31.png?700}}
{{:orsoftopen:spravais:workshop:groovymakra:image32.png?700}}
{{:orsoftopen:spravais:workshop:groovymakra:image33.png?700}}
import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.OEntityUtil;
import cz.ortex.util.o0.O0StringUtil;
import java.rmi.RemoteException;
import cz.ortex.apilogic.o0.workflow.OfwUtil;
import cz.ortex.model.Ofwdt;
import cz.ortex.model.Ofwk;
import cz.ortex.model.PpfHl;
import cz.ortex.implutil.o0.HibernateUtil;
import java.io.Serializable;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.query.NativeQuery;
import cz.ortex.implutil.o0.HibernateUtil;
import org.hibernate.criterion.Restrictions;
import cz.ortex.apilogic.o0.workflow.OfwRetObject;
import cz.ortex.apilogic.o0.workflow.OfwSplnenoChoices;
import org.apache.commons.beanutils.ConvertUtils;
OfwRetObject proZapis(Object entity, Ofwk ofwk, OfwUtil.OfwActionRunParams runParams, O0Session o0Session) {
OfwRetObject retObject = new OfwRetObject();
retObject.setActionCorrectlyDone(true);
String chyba = "";
if (entity != null) {
if (entity.getIdpk() != null) {
try {
Session session = HibernateUtil.getCurrentSession();
Transaction transaction = session.getTransaction();
boolean byloTransactionActive = transaction.isActive();
if (!byloTransactionActive) {
transaction.begin();
}
if (transaction.isActive()) {
String testDotaz = "update NQ10 set prodejce = (select osoby.oscis from OFWK ofwk ";
testDotaz += "inner join OSOBY osoby on osoby.idpk = ofwk.ucastnik_idpk ";
testDotaz += "where (ofwk.ofwp_idpk = " + ofwk.getOfwp().getIdpk() + ") and
(ofwk.poradi = 2)) ";
// testDotaz += "where idpk = 18813";
testDotaz += "where idpk = " + entity.getIdpk();
NativeQuery sqlQuery = session.createNativeQuery(testDotaz);
sqlQuery.executeUpdate();
chyba = "OK";
}
if (!byloTransactionActive) {
tx.commit();
}
} catch (Exception e) {
if (!byloTransactionActive) {
tx.rollback();
}
// retObject.setActionCorrectlyDone(false);
// retObject.setChoiceToSetWf(OfwSplnenoChoices.OfwSplnenoChoice.NESPLNENO);
// retObject.setRetString("Bylo exception");
// retObject.setException(e);
// throw new RuntimeException(e);
}
}
}
return retObject;
}
=== 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
{{:orsoftopen:spravais:workshop:groovymakra:image34.png?700}}
{{:orsoftopen:spravais:workshop:groovymakra:image35.png?700}}
{{:orsoftopen:spravais:workshop:groovymakra:image36.png?700}}
import cz.ortex.util.o0.O0Session;
import cz.ortex.util.o0.OEntityUtil;
import java.rmi.RemoteException;
import cz.ortex.model.PpfHl;
import cz.ortex.util.o0.O0StringUtil;
import java.math.BigDecimal;
import java.math.RoundingMode;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.query.NativeQuery;
import cz.ortex.implutil.o0.HibernateUtil;
import java.util.List;
String lzeSchvalovat(Object[] objects, O0Session o0Session) {
//zde vypište kód
PpfHl ppfhl = (PpfHl) objects[0];
String vysl = "false";
String chyba = "";
BigDecimal rozdilMax = new BigDecimal(1.00);
BigDecimal rozdilProc = new BigDecimal(1.00);
if (O0StringUtil.notBlank(ppfhl.getObjednavka())) {
Session session = HibernateUtil.getCurrentSession();
Transaction transaction = session.getTransaction();
boolean byloTransactionActive = transaction.isActive();
if (!byloTransactionActive) {
transaction.begin();
}
if (transaction.isActive()) {
String testDotaz = "select ak_s_w from ak where (ak_aa = 3) and (ak_anr = " + ppfhl.getObjednavka().trim() + ")";
NativeQuery sqlQuery = session.createNativeQuery(testDotaz);
List list = sqlQuery.getResultList();
for (Object l : list) {
if (l != null) {
if (BigDecimal.class.isInstance(l)) {
BigDecimal objTuzem = (BigDecimal) l;
if (ppfhl.getObnosTuzem() != null) {
if (ppfhl.getObnosTuzem().compareTo(objTuzem) == 0) {
vysl = "true";
} else {
BigDecimal sto = new BigDecimal(100.00);
BigDecimal rozdil = ppfhl.getObnosTuzem().subtract(objTuzem);
rozdil = rozdil.abs();
BigDecimal procento = rozdil.divide(ppfhl.getObnosTuzem(), 2, RoundingMode.HALF_DOWN).multiply(sto);
procento = procento.abs();
if (rozdil.compareTo(rozdilMax) > 0) {
chyba = "Vetsi nez povoleny rozdil.";
} else {
vysl = "true";
}
if (procento.compareTo(rozdilProc) > 0) {
chyba = "Vetsi nez povolene procento rozdilu.";
} else {
vysl = "true";
}
// System.out.println("Test Makro: objTuzem = " + objTuzem);
// System.out.println("Test Makro: obnosTuzem = " + ppfhl.getObnosTuzem());
// System.out.println("Test Makro: rozdil = " + rozdil);
// System.out.println("Test Makro: procento = " + procento);
// System.out.println(chyba);
}
}
}
}
}
}
if (!byloTransactionActive) {
transaction.rollback();
}
}
return vysl;
}
=== 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.
{{:orsoftopen:spravais:workshop:groovymakra:image38.png?700}}{{:orsoftopen:spravais:workshop:groovymakra:image39.png?700}}{{:orsoftopen:spravais:workshop:groovymakra:image40.png?700}}
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:
{{:orsoftopen:spravais:workshop:groovymakra:image41.png?700}}
=== 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:
{{:orsoftopen:spravais:workshop:groovymakra:image42.png?700}}
Vlastní makro:
{{:orsoftopen:spravais:workshop:groovymakra:image43.png?700}}
{{:orsoftopen:spravais:workshop:groovymakra:image44.png?700}}
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 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;
}