private void getIzdFromDosStdoki() { dos_stdoki_sets = new HashSet(); izd_doki = doki.getDataModule().getTempSet(Condition.nil); izd_doki.open(); izd_stdoki = stdoki.getDataModule().getTempSet(Condition.nil); izd_stdoki.open(); dos_doki = doki.getDataModule() .getTempSet( Condition.whereAllEqual( new String[] {"CSKL", "VRDOK", "GOD", "STATUS"}, new String[] {cskl, "DOS", getGodina(), "N"}) .and(Condition.till("DATDOK", getDatumDo())) + " ORDER BY CSKL, VRDOK, GOD, BRDOK"); dos_doki.setMetaDataUpdate( MetaDataUpdate.TABLENAME + MetaDataUpdate.PRECISION + MetaDataUpdate.SCALE + MetaDataUpdate.SEARCHABLE); dos_doki.open(); for (dos_doki.first(); dos_doki.inBounds(); dos_doki.next()) { izd_doki.insertRow(false); dM.copyColumns(dos_doki, izd_doki); // 1 za 1 da ne kompliciramo izd_doki.setString("VRDOK", "IZD"); izd_doki.setInt("BRDOK", brdok); // ************** izd_doki.setTimestamp("DATDOK", getDatumDo()); izd_doki.post(); // hr.restart.robno.Util.getUtil().getBrojDokumenta(izd_doki); izd_doki.post(); dos_doki.setString("STATUS", "P"); // Prenesen? QueryDataSet dos_stdoki = stdoki .getDataModule() .getTempSet( Condition.whereAllEqual( new String[] {"CSKL", "VRDOK", "GOD", "BRDOK"}, dos_doki)); dos_stdoki.open(); for (dos_stdoki.first(); dos_stdoki.inBounds(); dos_stdoki.next()) { izd_stdoki.insertRow(false); dM.copyColumns(dos_stdoki, izd_stdoki); izd_stdoki.setString("VRDOK", "IZD"); izd_stdoki.setInt("BRDOK", izd_doki.getInt("BRDOK")); izd_stdoki.setString("VEZA", dos_stdoki.getString("ID_STAVKA")); // c/p iz raIz* izd_stdoki.setString( "ID_STAVKA", raControlDocs.getKey( izd_stdoki, new String[] {"cskl", "vrdok", "god", "brdok", "rbsid"}, "stdoki")); dos_stdoki.setString("VEZA", izd_stdoki.getString("ID_STAVKA")); izd_stdoki.setString("CSKLART", izd_stdoki.getString("CSKL")); calcSklad(izd_stdoki, qstanje); izd_stdoki.post(); dos_stdoki.post(); // System.out.println(izd_stdoki); } dos_stdoki_sets.add(dos_stdoki); brdok++; } }
private void performMatching() { QueryDataSet sks = null, pok = null; Int2 run = new Int2(); String lastcpar = ""; total.clear(); for (int row = 0; row < model.getRowCount(); row++) if (model.isRowSelected(row)) { MatchableCollection mc = (MatchableCollection) model.getValueAt(row, 0); String mkey = mc.getRow(0).getMasterKey(); String cpar = mkey.substring(0, mkey.indexOf('$')); if (!cpar.equals(lastcpar)) { if (sks != null && raTransaction.saveChangesInTransaction(new QueryDataSet[] {sks, pok})) total = total.add(run); run.clear(); sks = dM.getDataModule().getSkstavke(); Skstavke.getDataModule() .setFilter( Aus.getKnjigCond() .and(Aus.getFreeYearCond()) .and(Condition.equal("CPAR", Aus.getNumber(lastcpar = cpar)))); sks.open(); pok = Pokriveni.getDataModule().getFilteredDataSet("1=0"); pok.open(); } PotentialMatch pm = new PotentialMatch(); for (int i = 0; i < mc.getRowCount(); i++) pm.addStavka(mc.getRow(i)); for (int i = 0; i < mc.getMatch().getRowCount(); i++) pm.addStavka(mc.getMatch().getRow(i)); run = run.add(pm.realize(sks, pok)); } if (sks != null && R2Handler.saveChangesInTransaction(new QueryDataSet[] {sks, pok})) total = total.add(run); dM.getDataModule().getSynchronizer().markAsDirty("pokriveni"); }
/** * Pokrece pilot-beanshell skripte za ubacivanje podataka iz stranih baza Potrebno je prijaviti * reportext sa NASLOVOM kao naziv klase za knjizenje, te aplikacijum sisfun npr. IME=1, * NASLOV=hr.restart.robno.frmKnjRobno, URL=robnoloader.sql, APP=sisfun i sve skripte sa tim * naslovom ce se izvrsiti prije validacija() metode u NASLOV klasi sortirane by IME (pazi string * sort!) * * @return */ private boolean runPreloader() { try { String cname = this.getClass().getName(); // executeReport(java.net.URL rep, String title, Window owner) QueryDataSet preloaders = Reportext.getDataModule() .getFilteredDataSet( Condition.whereAllEqual( new String[] {"NASLOV", "APP"}, new String[] {cname, "sisfun"})); preloaders.open(); if (preloaders.getRowCount() == 0) return true; preloaders.setSort(new SortDescriptor("IME")); for (preloaders.first(); preloaders.inBounds(); preloaders.next()) { // // raPilot.executeReport(Aus.findFileAnywhere(preloaders.getString("URL")).toURL(),cname, // this ); Interpreter interpreter = new Interpreter(); Object ret = interpreter.eval( FileHandler.readFile( Aus.findFileAnywhere(preloaders.getString("URL")).getAbsolutePath())); return ((Boolean) ret).booleanValue(); } } catch (Exception e) { e.printStackTrace(); return false; } return true; }
public QueryDataSet getPjDS(int cpar) { return hr.restart.baza.Pjpar.getDataModule().getFilteredDataSet(Condition.equal("CPAR", cpar)); /* String qStr = "select * from pjpar where cpar="+cpar; QueryDataSet qds = new QueryDataSet(); qds.setColumns(new Column[]{ (Column) dm.getPjpar().getColumn("LOKK").clone(), (Column) dm.getPjpar().getColumn("AKTIV").clone(), (Column) dm.getPjpar().getColumn("CPAR").clone(), (Column) dm.getPjpar().getColumn("PJ").clone(), (Column) dm.getPjpar().getColumn("NAZPJ").clone(), (Column) dm.getPjpar().getColumn("MJPJ").clone(), (Column) dm.getPjpar().getColumn("ADRPJ").clone(), (Column) dm.getPjpar().getColumn("PBRPJ").clone(), (Column) dm.getPjpar().getColumn("TELPJ").clone(), (Column) dm.getPjpar().getColumn("TELFAXPJ").clone(), (Column) dm.getPjpar().getColumn("KOPJ").clone(), (Column) dm.getPjpar().getColumn("REGIJA").clone(), (Column) dm.getPjpar().getColumn("CAGENT").clone() }); qds.getColumn("CPAR").setRowId(true); qds.setQuery(new QueryDescriptor(dm.getDatabase1(), qStr)); return qds; */ }
static String getPripOrg(String corg, String tekst) { com.borland.dx.dataset.StorageDataSet tds = hr.restart.zapod.OrgStr.getOrgStr().getOrgstrAndKnjig(corg); return Condition.in(tekst, tds, "corg").toString(); // int i=0; // String cVrati=tekst+" in ("; // tds.first(); // do { // if (i>0) { // cVrati=cVrati+','; // } // i++; // cVrati=cVrati+"'"+tds.getString("CORG")+"'"; // } while (tds.next()); // cVrati=cVrati+")"; // return cVrati; }
public QueryDataSet getZiroParDS(int cpar) { return hr.restart.baza.Ziropar.getDataModule() .getFilteredDataSet(Condition.equal("CPAR", cpar)); /* String qStr = "select * from ziropar where cpar="+cpar; QueryDataSet qds = new QueryDataSet(); qds.setColumns(new Column[]{ (Column) dm.getZiropar().getColumn("CPAR").clone(), (Column) dm.getZiropar().getColumn("ZIRO").clone(), (Column) dm.getZiropar().getColumn("DEV").clone(), (Column) dm.getZiropar().getColumn("OZNVAL").clone() }); qds.setQuery(new QueryDescriptor(dm.getDatabase1(), qStr)); return qds; */ }
private String getUpit() { String selStr = "select artikli.cart, artikli.cart1, artikli.bc, artikli.nazart, doki.cpar, doki.datdok, stdoki.kol, stdoki.jm, stdoki.IPRODSP "; // if (fieldSet.getString("SLJED").equalsIgnoreCase("RUC")){ // selStr += "(stdoki.iprodbp-stdoki.inab) as ruc "; // } else if (fieldSet.getString("SLJED").equalsIgnoreCase("POR")){ // selStr += "(stdoki.iprodsp - stdoki.iprodbp) as por "; // } else { // selStr += "stdoki.IPRODSP "; // } String inq; StorageDataSet corgs = hr.restart.zapod.OrgStr.getOrgStr().getOrgstrAndKnjig(fieldSet.getString("CORG")); if (corgs.rowCount() == 0) inq = "1=1"; else if (corgs.rowCount() == 1) inq = "DOKI.CSKL = '" + fieldSet.getString("CORG") + "'"; else inq = "(DOKI.CSKL in " + hr.restart.zapod.OrgStr.getOrgStr().getInQuery(corgs, "DOKI.CSKL") + ") "; hr.restart.baza.Condition oj = hr.restart.baza.Condition.in("DOKI.VRDOK", TypeDoc.araj_docsOJ); String exInClude = "AND ((" + oj + " AND " + inq + ") OR (" + oj.not() + " AND DOKI.CSKL = '" + getCskl() + "')) "; String artikliFilter; if (fieldSet.getString("VRART").equals("") || fieldSet.getString("VRART").equals("X")) artikliFilter = ""; else artikliFilter = " AND ARTIKLI.VRART='" + fieldSet.getString("VRART") + "' "; String carting = ""; if (!rpcart.findCART(podgrupe).equals("")) { carting = " AND " + rpcart.findCART(podgrupe); } String ckupca = ""; if (!getCkup().equals("")) ckupca = "and doki.cpar='" + getCkup() + "' "; selStr += " from doki,stdoki,artikli,partneri WHERE doki.cskl = stdoki.cskl AND doki.vrdok = stdoki.vrdok AND doki.god = stdoki.god " + "AND doki.brdok = stdoki.brdok AND stdoki.cart = artikli.cart AND doki.cpar = partneri.cpar and doki.god='" + hr.restart.robno.Aut.getAut().getKnjigodRobno() + "' AND doki.vrdok not in ('PON','NDO','NKU','RNL','REV','PRV','OTR','INM','INV','IZD','TRE','ZAH') " + exInClude + ckupca + artikliFilter + carting + " order by datdok"; // REMARK!! // nešto što sam primjetio, a moglo bi dobro doæi kad se bude implementirao nabavljaè je da // postoji i CPAR kolona u tablici artikli // i predstavlja dobavljaèa za taj artikl. // System.out.println("\n\n"+selStr+"\n\n"); return selStr; }
private boolean findAll(int maxDepth, Condition cond) { // nadji sve stavke koje zadovoljavaju uvjet, a nisu pokrivene. DataSet ds = Skstavke.getDataModule() .getTempSet( Aus.getKnjigCond() .and(cond) .and(Aus.getFreeYearCond()) .and(Condition.equal(raSaldaKonti.colPok(), "N"))); // ako je metoda pozvana iz raProcess sustava, iskoristi ga if (!raProcess.isRunning()) ds.open(); else { raProcess.setMessage("Dohvat nepokrivenih stavaka salda konti ...", true); raProcess.openScratchDataSet(ds); } // najprije prevrti cijeli dataset i prebaci sve stavke u MatchRow, // te ih napuni u LinkedList iz kojih cemo ih izbacivati kad i ako // pronadjemo kombinaciju u kojoj se moze pokriti. LinkedList stavke = new LinkedList(); for (ds.first(); ds.inBounds(); ds.next()) stavke.addLast(new MatchRow(ds)); // pocni raditi kombinacije. Najprije svaka stavka pojedinacno, // onda sve do 'maxDepth' stavki po kombinaciji. Prati i potrosnju // objekata da ne predje neku razumnu granicu. int slots = 0, collections = 0; master.clear(); for (int depth = 1; depth <= maxDepth; depth++) { if (raProcess.isRunning()) raProcess.setMessage("Provjera moguæeg pokrivanja stupnja " + depth + " ...", false); // prodji kroz sve preostale stavke i puni glavnu mapu, // koja se sastoji od po jedne mape salda na popis dokumenata za // svaku razlicitu kombinaciju cpar$konto$valuta$godina$uloga // koja postoji u nadjenim stavkama. Jebeno. for (Iterator st = stavke.iterator(); st.hasNext(); ) { MatchRow mr = (MatchRow) st.next(); if (raProcess.isRunning()) raProcess.checkClosing(); // probaj naci vec postojecu grupu salda za ovaj kljuc ili napravi novu SaldoGroup salda = (SaldoGroup) master.get(mr.getMasterKey()); if (salda == null) master.put(mr.getMasterKey(), salda = new SaldoGroup()); // Inicijaliziraj listu kombinacija koja ce se kasnije ubaciti u mapu salda. // Kombinacije se ne mogu odmah ubacivati u mapu jer se po njoj iterira, pa // bi to rezultiralo gadnim kolizijama. Ako je depth 1, onda se napravi // kombinacija od samo teukce stavke, inace se prolazi kroz cijelu mapu // salda i priprema dodavanje novih kombinacija duljine depth. ArrayList toAdd = new ArrayList(); if (depth == 1) toAdd.add(new MatchableCollection(mr)); else for (Iterator it = salda.slotIterator(); it.hasNext(); ) { SaldoSlot ss = (SaldoSlot) it.next(); if (raProcess.isRunning()) raProcess.checkClosing(); // prodji koz sve kombinacije u ovom slotu (koje imaju taj saldo) // i pripremi dodavanje po jedne nove kombinacije za svaku koja // ima depth-1 clanova, i koja je istog tipa kao nova stavka // (tip racuni ili uplate), te koja vec nije u toj kombinaciji. for (int i = 0; i < ss.getCollectionCount(); i++) { MatchableCollection mc = ss.getCollection(i); if (mc.checkAdd(mr, depth)) toAdd.add(mc.copyAndExtend(mr)); } } // i na kraju ubaci sve pripremljene kombinacije iz liste toAdd // u odgovarajuce slotove mape salda. slots -= salda.countSlots(); for (int i = 0; i < toAdd.size(); i++) { MatchableCollection mc = (MatchableCollection) toAdd.get(i); if (raProcess.isRunning()) raProcess.checkClosing(); // probaj naci postojeci saldo slot ili napravi novog ako ga nema, // te dodaj ovu kombinaciju u njega. SaldoSlot ss = (SaldoSlot) salda.getSlot(mc.getMatchSaldo()); if (ss == null) salda.addSlot(mc.getMatchSaldo(), ss = new SaldoSlot()); ss.addCollection(mc); mc.setOwner(ss); } slots += salda.countSlots(); collections += toAdd.size(); if (collections > 100000) break; } if (collections > 100000) break; // ako se stavka vec nalazi u nekoj kombinaciji koja se moze pokriti, // nema potrebe traziti daljnje kombinacije s njom, tj kombinacije s // vise clanova. Cilj je da se minimiziraju visestruka pokrivanja. for (Iterator st = stavke.iterator(); st.hasNext(); ) { MatchRow mr = (MatchRow) st.next(); if (mr.isMatchable()) st.remove(); } } // na kraju balade, u glavnoj mapi imamo mnostvo mapa (za svaki kljuc // cpar$konto$valuta$godina$uloga po jedna) u cijim slotovima se // potencijalno nalaze kombinacije stavaka koje se mogu medjusobno // pokriti. Sve te kombinacije bit ce ponudjene za pokrivanje, grupirane // po saldu. No najprije treba izbaciti iz mape sve one slotove kod kojih // nema bar po jedna kombinacija tipa uplate i jedna tipa racun. for (Iterator it = master.values().iterator(); it.hasNext(); ) { SaldoGroup salda = (SaldoGroup) it.next(); for (Iterator s = salda.slotIterator(); s.hasNext(); ) { SaldoSlot ss = (SaldoSlot) s.next(); if (!ss.isMatchable()) s.remove(); } if (salda.countSlots() == 0) it.remove(); } // medju preostalim mapama probaj naci najbolje matcheve. for (Iterator it = master.values().iterator(); it.hasNext(); ) { SaldoGroup salda = (SaldoGroup) it.next(); for (Iterator s = salda.slotIterator(); s.hasNext(); ) { SaldoSlot ss = (SaldoSlot) s.next(); for (int i = 0; i < ss.getCollectionCount(); i++) { MatchableCollection mi = ss.getCollection(i); mi.findRepresentations(); double now; for (int j = 0; j < ss.getCollectionCount(); j++) { MatchableCollection mj = ss.getCollection(j); if (mi.isRacunTip() != mj.isRacunTip() && (now = mi.getMatchFactor(mj)) > mi.getMatchedFactor() && now > mj.getMatchedFactor() && now > mi.getMaxMatchStrength() && now > mj.getMaxMatchStrength()) mi.setMatch(mj); } } } salda.findMarks(); } return master.size() > 0; }
public void start() { if (getCskl() == null) { raProcess.fail(); throw new IllegalArgumentException("Cskl mora biti postavljen"); } System.out.println("DOStoIZD.start() :: cskl = " + getCskl() + ", datum = " + getDatumDo()); QueryDataSet izd_stdoki_greske = stdoki.getDataModule().getTempSet(Condition.nil); izd_stdoki_greske.open(); msg("Dohvat stanja ..."); qstanje = Stanje.getDataModule() .getTempSet( Condition.whereAllEqual( new String[] {"CSKL", "GOD"}, new String[] {getCskl(), getGodina()})); qstanje.open(); setBrdok(); msg("Obrada dokumenata ..."); getIzdFromDosStdoki(); msg("Provjera kolièina ..."); if (!raIZD.isStanjeExist4allDS(izd_stdoki, izd_stdoki_greske, getGodina(), getCskl(), true)) { JOptionPane.showMessageDialog(null, "Za neke artikle ne postoje zalihe na skladištu."); frmTableDataView dw = new frmTableDataView(false, false); dw.setDataSet(izd_stdoki_greske); dw.setVisibleCols(new int[] {3, 4, 5, 6, 7, 8, 9, 11}); dw.show(); raProcess.fail(); // test // dw = new frmTableDataView(false, false); // dw.setDataSet(izd_stdoki); // dw.show(); } else { msg("Snimanje promjena ..."); // test // test // frmTableDataView dw = new frmTableDataView(false, false); // dw.setDataSet(izd_stdoki); // dw.show(); // // dw = new frmTableDataView(false, false); // dw.setDataSet(izd_doki); // dw.show(); // // dw = new frmTableDataView(false, false); // dw.setDataSet(dos_doki); // dw.show(); // endtest // seq!!!! Valid.getValid().setSeqFilter(seqO); dM.getDataModule().getSeq().setDouble("BROJ", brdok); // raTransaction.saveChangesInTransaction(new QueryDataSet[] { // dos_doki, // izd_doki, // izd_stdoki, // dM.getDataModule().getSeq()}); final QueryDataSet[] qdses = new QueryDataSet[] {dos_doki, izd_doki, izd_stdoki, dM.getDataModule().getSeq()}; new raLocalTransaction() { public boolean transaction() { for (int i = 0; i < qdses.length; i++) { raTransaction.saveChanges(qdses[i]); } for (Iterator iterator = dos_stdoki_sets.iterator(); iterator.hasNext(); ) { QueryDataSet qds = (QueryDataSet) iterator.next(); raTransaction.saveChanges(qds); } return true; } }.execTransaction(); msg("Rekalkulacija stanja"); BatchRekalkulacijaStanja.start(getCskl(), getGodina()); } }