EN · DE · RU · FR · ES

#160: LiquidityEntryListForm.java

plugins/org.projectforge.plugins.liquidityplanning/src/main/java/org/projectforge/plugins/liquidityplanning/LiquidityEntryListForm.java Type: Java · Role: Form · Source: plugins/org.projectforge.plugins.liquidityplanning/src/main/java/org/projectforge/plugins/liquidityplanning/LiquidityEntryListForm.java 194 lines · 148 code · 34 comments · 12 blank
Wicket Form implementation for LiquidityEntry list. Handles form validation, submit logic, and field-to-entity binding.

Code Structure

Package: org.projectforge.plugins.liquidityplanning

Classes: LiquidityEntryListForm

Extends: AbstractListForm

Methods (14): getStats, init, getObject, isVisible, getObject, getObject, getObject, getObject, onOptionsPanelCreate, onUpdate, onUpdate, newSearchFilterInstance, getLogger, getBaseDateProperties

Fields (1): serialVersionUID

Imports: 16 packages

Source Code (abridged)

package org.projectforge.plugins.liquidityplanning;

import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.FormComponentUpdatingBehavior;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.projectforge.business.fibu.AmountType;
import org.projectforge.business.fibu.PaymentStatus;
import org.projectforge.business.utils.CurrencyFormatter;
import org.projectforge.framework.time.PFDay;
import org.projectforge.web.wicket.AbstractListForm;
import org.projectforge.web.wicket.WebConstants;
import org.projectforge.web.wicket.components.LabelValueChoiceRenderer;
import org.projectforge.web.wicket.components.LocalDateModel;
import org.projectforge.web.wicket.components.LocalDatePanel;
import org.projectforge.web.wicket.flowlayout.*;
import org.slf4j.Logger;

import java.time.LocalDate;

/**
 * The list formular for the list view (this example has no filter settings). See ToDoListPage for seeing how to use
 * filter settings.
 *
 * @author Kai Reinhard (k.reinhard@micromata.de)
 */
public class LiquidityEntryListForm extends AbstractListForm<LiquidityFilter, LiquidityEntryListPage> {
  private static final long serialVersionUID = 2040255193023406307L;

  private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LiquidityEntryListForm.class);

  public LiquidityEntryListForm(final LiquidityEntryListPage parentPage) {
    super(parentPage);
  }

  private LiquidityEntriesStatistics getStats() {
    return parentPage.getStatistics();
  }

  @SuppressWarnings("serial")
  @Override
  protected void init() {
    super.init();
    gridBuilder.newGridPanel();
    {
      final FieldsetPanel fs = gridBuilder.newFieldset(getString("plugins.liquidityplanning.forecast.baseDate"));
      final FieldProperties<LocalDate> props = getBaseDateProperties();
      LocalDatePanel baseDatePanel = new LocalDatePanel(fs.newChildId(), new LocalDateModel(props.getModel()));
      baseDatePanel.setRequired(false);
      fs.add(baseDatePanel);
      fs.addHelpIcon(getString("plugins.liquidityplanning.forecast.baseDate.tooltip"));
    }
    gridBuilder.newGridPanel();
    {
      // Statistics
      final FieldsetPanel fs = gridBuilder.newFieldset(getString("statistics")).suppressLabelForWarning();
      fs.add(new DivTextPanel(fs.newChildId(), new Model<String>() {
        @Override
        public String getObject() {
          return "*** " + getString("plugins.liquidityplanning.forecast.baseDate") + ": " + PFDay.fromOrNow(getSearchFilter().getBaseDate()).format() + " ***"
                  + WebConstants.HTML_TEXT_DIVIDER;
        }
      }, TextStyle.RED) {
        @Override
        public boolean isVisible() {
          final LocalDate baseDate = getSearchFilter().getBaseDate();
          return baseDate != null && baseDate.isBefore(LocalDate.now());
        }
      });
      fs.add(new DivTextPanel(fs.newChildId(), new Model<String>() {
        @Override
        public String getObject() {
          return getString("fibu.rechnung.status.bezahlt")
                  + ": "
                  + CurrencyFormatter.format(getStats().getPaid())
                  + WebConstants.HTML_TEXT_DIVIDER;
        }
      }));
      fs.add(new DivTextPanel(fs.newChildId(), new Model<String>() {
        @Override
        public String getObject() {
          return getString("totalSum") + ": " + CurrencyFormatter.format(getStats().getTotal())
                  + WebConstants.HTML_TEXT_DIVIDER;
        }
      }));
      fs.add(new DivTextPanel(fs.newChildId(), new Model<String>() {
        @Override
        public String getObject() {
          return getString("fibu.rechnung.offen") + ": " + CurrencyFormatter.format(getStats().getOpen())
                  + WebConstants.HTML_TEXT_DIVIDER;
        }
      }, TextStyle.BLUE));
      fs.add(new DivTextPanel(fs.newChildId(), new Model<String>() {
        @Override
        public String getObject() {
          return getString("fibu.rechnung.filter.ueberfaellig") + ": "
                  + CurrencyFormatter.format(getStats().getOverdue());
        }
      }, TextStyle.RED));
    }
  }

  /**
   * @see org.projectforge.web.wicket.AbstractListForm#onOptionsPanelCreate(org.projectforge.web.wicket.flowlayout.FieldsetPanel,
   * org.projectforge.web.wicket.flowlayout.DivPanel)
   */
  @SuppressWarnings("serial")
  @Override
  protected void onOptionsPanelCreate(final FieldsetPanel optionsFieldsetPanel, final DivPanel optionsCheckBoxesPanel) {
    // DropDownChoice next days
    final LabelValueChoiceRenderer<Integer> nextDaysRenderer = new LabelValueChoiceRenderer<>();
    nextDaysRenderer.addValue(0, getString("filter.all"));
    nextDaysRenderer.addValue(7, getLocalizedMessage("search.nextDays", 7));
    nextDaysRenderer.addValue(10, getLocalizedMessage("search.nextDays", 10));
    nextDaysRenderer.addValue(14, getLocalizedMessage("search.nextDays", 14));
    nextDaysRenderer.addValue(30, getLocalizedMessage("search.nextDays", 30));
    nextDaysRenderer.addValue(60, getLocalizedMessage("search.nextDays", 60));
    nextDaysRenderer.addValue(90, getLocalizedMessage("search.nextDays", 90));
    final DropDownChoice<Integer> nextDaysChoice = new DropDownChoice<>(
// ... (truncated, total 172 lines)

Git History

868d6abb7 2025 -> 2026
63081666f Source file headers: 2024-> 2025.
b6092df09 Copyright 2023 -> 2024
ab45d51fa Copyright 2001-2022 -> 2001-2023.
4548710df WIP: migration.