void loadLeftTable() {
    Vector<Vector> dataLeft = new Vector<>();
    listSummaries = ResValueTools.getLiquidBalances(resident, startDay, 20);

    for (Object[] obj : listSummaries) {
      Vector line = new Vector();
      line.add(new LocalDate(((java.sql.Date) obj[0]).getTime()));
      BigDecimal liquidin = (BigDecimal) obj[1];
      line.add(liquidin);

      line.add(obj[2]);

      BigDecimal liquidresult = (BigDecimal) obj[3];
      line.add(liquidresult);

      if (highIn != null || lowIn != null) {
        String evaluation = "";
        if (lowIn != null && liquidin.compareTo(lowIn) < 0) {
          evaluation = SYSConst.html_color(Color.blue, SYSConst.html_bold("misc.msg.too.less"));
        } else if (highIn != null && liquidin.compareTo(highIn) > 0) {
          evaluation = SYSConst.html_color(Color.red, SYSConst.html_bold("misc.msg.too.much"));
        } else {
          evaluation = SYSConst.html_color(Color.green.darker(), SYSConst.html_bold("misc.msg.ok"));
        }
        line.add(evaluation);
      }

      dataLeft.add(line);
    }

    Vector<String> headerLeft = new Vector<>();
    headerLeft.add(SYSTools.xx("misc.msg.Date"));
    headerLeft.add(SYSTools.xx("misc.msg.ingestion"));
    headerLeft.add(SYSTools.xx("misc.msg.egestion"));
    headerLeft.add(SYSTools.xx("misc.msg.liquid.result"));
    if (highIn != null || lowIn != null) {
      headerLeft.add(SYSTools.xx("misc.msg.evaluation"));
    }
    DefaultTableModel tmLeft =
        new DefaultTableModel(dataLeft, headerLeft) {
          @Override
          public boolean isCellEditable(int row, int column) {
            return false;
          }
        };

    tblLeft.setModel(tmLeft);
    tblLeft
        .getSelectionModel()
        .addListSelectionListener(
            new ListSelectionListener() {
              @Override
              public void valueChanged(ListSelectionEvent e) {
                if (e.getValueIsAdjusting()) return;
                ListSelectionModel lsm = (ListSelectionModel) e.getSource();

                int minIndex = lsm.getMinSelectionIndex();
                int maxIndex = lsm.getMaxSelectionIndex();

                if (minIndex < 0 || maxIndex < 0) return;

                cleanup();

                loadRightTable(
                    (LocalDate) tblLeft.getModel().getValueAt(maxIndex, 0),
                    (LocalDate) tblLeft.getModel().getValueAt(minIndex, 0));
              }
            });
    tblLeft
        .getColumnModel()
        .getColumn(0)
        .setCellRenderer(
            new TableCellRenderer() {
              @Override
              public Component getTableCellRendererComponent(
                  JTable table,
                  Object o,
                  boolean isSelected,
                  boolean hasFocus,
                  int row,
                  int column) {
                String text;
                if (o == null) {
                  text = SYSTools.xx("misc.commands.>>noselection<<");
                } else if (o instanceof LocalDate) {
                  text = ((LocalDate) o).toString("dd.MM.yyyy");
                } else {
                  text = o.toString();
                }
                return new DefaultTableCellRenderer()
                    .getTableCellRendererComponent(table, text, isSelected, hasFocus, row, column);
              }
            });

    DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
    rightRenderer.setHorizontalAlignment(JLabel.RIGHT);
    tblLeft.getColumnModel().getColumn(1).setCellRenderer(rightRenderer);
    tblLeft.getColumnModel().getColumn(2).setCellRenderer(rightRenderer);
    tblLeft.getColumnModel().getColumn(3).setCellRenderer(rightRenderer);

    if (highIn != null || lowIn != null) {
      tblLeft.getColumnModel().getColumn(4).setCellRenderer(new RNDHTML());
    }

    scrlLeftComponentResized(null);
  }
  void loadRightTable(final LocalDate from, final LocalDate to) {

    if (listValues != null) {
      listValues.clear();
    }
    listValues =
        ResValueTools.getResValuesNoEdits(resident, ResValueTypesTools.LIQUIDBALANCE, from, to);

    Object[][] data = new Object[listValues.size()][5];
    int row = 0;
    for (ResValue val : listValues) {
      data[row][0] = df.format(val.getPit());
      data[row][1] = nf.format(val.getVal1());
      data[row][2] = val.getText();
      data[row][3] = SYSTools.anonymizeUser(val.getUser().getUID());
      data[row][4] = SYSConst.icon22delete;
      row++;
    }

    Object[] headers =
        new Object[] {
          SYSTools.xx("misc.msg.Date"),
          SYSTools.xx("misc.msg.amount"),
          SYSTools.xx("misc.msg.Text"),
          SYSTools.xx("misc.msg.user"),
          SYSTools.xx("misc.msg.delete")
        };

    final DefaultTableModel tmRight =
        new DefaultTableModel(data, headers) {
          @Override
          public boolean isCellEditable(int row, int column) {
            return column == 4; // only the del-button
          }
        };

    tmRight.setColumnCount(5);
    tblRight.setModel(tmRight);

    tblRight.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

    DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
    rightRenderer.setHorizontalAlignment(JLabel.RIGHT);
    tblRight.getColumnModel().getColumn(1).setCellRenderer(rightRenderer);

    TableUtils.autoResizeAllColumns(
        tblRight, null, new int[] {200, 200, 200, 200, 100}, true, false);
    TableUtils.autoResizeAllRows(tblRight);

    /**
     * * ____ _ _ | _ \ ___| | ___| |_ ___ | | | |/ _ \ |/ _ \ __/ _ \ | |_| | __/ | __/ || __/
     * |____/ \___|_|\___|\__\___|
     */
    ButtonColumn bc =
        new ButtonColumn(
            tblRight,
            new AbstractAction() {
              @Override
              public void actionPerformed(ActionEvent ae) {
                final int row = Integer.parseInt(ae.getActionCommand());
                final ResValue val2Delete = listValues.get(row);
                new DlgYesNo(
                    SYSTools.xx("misc.questions.delete1")
                        + "<br/><i>"
                        + "<br/><i>"
                        + df.format(val2Delete.getPit())
                        + "<br/>"
                        + nf.format(val2Delete.getVal1())
                        + " ml<br/>"
                        + val2Delete.getUser().toString()
                        + "</i><br/>"
                        + SYSTools.xx("misc.questions.delete2"),
                    SYSConst.icon48delete,
                    new Closure() {
                      @Override
                      public void execute(Object answer) {
                        if (answer.equals(JOptionPane.YES_OPTION)) {

                          EntityManager em = OPDE.createEM();
                          try {
                            em.getTransaction().begin();
                            ResValue myValue = em.merge(val2Delete);
                            em.lock(myValue, LockModeType.OPTIMISTIC);
                            myValue.setDeletedBy(em.merge(OPDE.getLogin().getUser()));
                            for (SYSVAL2FILE file : myValue.getAttachedFilesConnections()) {
                              em.remove(file);
                            }
                            myValue.getAttachedFilesConnections().clear();
                            for (SYSVAL2PROCESS connObj : myValue.getAttachedProcessConnections()) {
                              em.remove(connObj);
                            }
                            myValue.getAttachedProcessConnections().clear();
                            myValue.getAttachedProcesses().clear();
                            em.getTransaction().commit();
                            listValues.remove(row);
                            tmRight.removeRow(row);
                            loadLeftTable();
                          } catch (OptimisticLockException ole) {
                            OPDE.warn(ole);
                            if (em.getTransaction().isActive()) {
                              em.getTransaction().rollback();
                            }
                            if (ole.getMessage().indexOf("Class> entity.info.Resident") > -1) {
                              OPDE.getMainframe().emptyFrame();
                              OPDE.getMainframe().afterLogin();
                            }
                            OPDE.getDisplayManager().addSubMessage(DisplayManager.getLockMessage());
                          } catch (Exception e) {
                            if (em.getTransaction().isActive()) {
                              em.getTransaction().rollback();
                            }
                            OPDE.fatal(e);
                          } finally {
                            em.close();
                          }
                        }
                      }
                    });
              }
            },
            4);
    bc.setMnemonic(KeyEvent.VK_DELETE);
  }
 private void btnPrintActionPerformed(ActionEvent e) {
   if (listValues == null || listValues.isEmpty()) return;
   SYSFilesTools.print(SYSTools.toHTML(ResValueTools.getAsHTML(listValues)), true);
 }