private void txtSearchActionPerformed(ActionEvent e) {
   stock = StockTools.findByIDORScanner(txtSearch.getText());
   if (stock != null) {
     if (stock.isAusgebucht() && !cbZombieRevive.isSelected()) {
       Tools.log(
           txtLog,
           stock.getId(),
           stock.getProdukt().getBezeichnung(),
           "Dieser Vorrat wurde bereits ausgebucht.");
       Tools.fadeout(lblProdukt);
       sp.error();
       stock = null;
     } else {
       if (btnSofortUmbuchen.isSelected()) {
         umbuchen();
         Tools.fadeinout(
             lblProdukt, "[" + stock.getId() + "] " + stock.getProdukt().getBezeichnung());
         stock = null;
       } else {
         Tools.fadein(
             lblProdukt, "[" + stock.getId() + "] " + stock.getProdukt().getBezeichnung());
       }
     }
   } else {
     Tools.log(txtLog, 0, txtSearch.getText(), "Unbekannte Vorrat Nummer.");
     Tools.fadeout(lblProdukt);
     sp.warning();
   }
   btnUmbuchen.setEnabled(stock != null);
   txtSearch.selectAll();
   txtSearch.requestFocus();
   txtSearchChecked = true;
 }
  private void btnAusbuchenActionPerformed(ActionEvent e) {
    EntityManager em = Main.getEMF().createEntityManager();
    try {
      em.getTransaction().begin();
      int[] rows = tblVorrat.getSelectedRows();

      for (int r = 0; r < rows.length; r++) {
        // Diese Zeile ist sehr wichtig, da sie die Auswahl in der Tabelle bzgl. einer Umsortierung
        // berücksichtigt.
        int row = tblVorrat.convertRowIndexToModel(rows[r]);
        Stock stock = ((StockTableModel2) tblVorrat.getModel()).getVorrat(row);

        Main.logger.info("AUSBUCHEN STOCK: " + stock.toString());
        Tools.log(txtLog, stock.getId(), stock.getProdukt().getBezeichnung(), "AUSGEBUCHT");
        StockTools.ausbuchen(stock, "Abschlussbuchung");
      }
      em.getTransaction().commit();
    } catch (Exception e1) {
      em.getTransaction().rollback();
    } finally {
      em.close();
      loadVorratTable();
    }
  }
 @Override
 public Object getValueAt(int row, int column) {
   Object value;
   Stock stock = (Stock) ((Object[]) data.get(row))[0];
   BigDecimal menge = (BigDecimal) ((Object[]) data.get(row))[1];
   switch (column) {
     case COL_VORRAT_ID:
       {
         value = stock.getId();
         break;
       }
     case COL_BEZEICHNUNG:
       {
         // Main.debug(vorrat);
         value = stock.getProdukt().getBezeichnung();
         break;
       }
     case COL_LAGER:
       {
         value = stock.getLager();
         break;
       }
     case COL_LIEFERANT:
       {
         value = stock.getLieferant();
         break;
       }
     case COL_GTIN:
       {
         value = tools.Tools.catchNull(stock.getProdukt().getGtin(), "--");
         break;
       }
     case COL_EINGANGSMENGE:
       {
         value =
             decf.format(StockTools.getEingangsbestand(stock))
                 + " "
                 + IngTypesTools.EINHEIT[stock.getProdukt().getIngTypes().getEinheit()];
         break;
       }
     case COL_RESTMENGE:
       {
         value =
             decf.format(menge)
                 + " "
                 + IngTypesTools.EINHEIT[stock.getProdukt().getIngTypes().getEinheit()];
         break;
       }
     case COL_STOFFART:
       {
         value = stock.getProdukt().getIngTypes().getBezeichnung();
         break;
       }
     case COL_WARENGRUPPE:
       {
         value = stock.getProdukt().getIngTypes().getWarengruppe().getBezeichnung();
         break;
       }
     case COL_EINGANG:
       {
         value = df.format(stock.getEingang());
         break;
       }
     case COL_ANBRUCH:
       {
         if (stock.getAnbruch().equals(Const.DATE_BIS_AUF_WEITERES)) {
           value = "--";
         } else {
           value = df.format(stock.getAnbruch());
         }
         break;
       }
     case COL_AUSGANG:
       {
         if (stock.getAusgang().equals(Const.DATE_BIS_AUF_WEITERES)) {
           value = "--";
         } else {
           value = df.format(stock.getAusgang());
         }
         break;
       }
     default:
       {
         value = null;
       }
   }
   return value;
 }