Пример #1
0
  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++;
    }
  }
Пример #2
0
  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");
  }
Пример #3
0
 /**
  * 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;
 }
Пример #4
0
  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;
    */
  }
Пример #5
0
 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;
 }
Пример #6
0
  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;
     */
  }
Пример #7
0
  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;
  }
Пример #8
0
  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;
  }
Пример #9
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());
    }
  }