EN · DE · RU · FR · ES

#157: LiquidityEntryDao.java

plugins/org.projectforge.plugins.liquidityplanning/src/main/java/org/projectforge/plugins/liquidityplanning/LiquidityEntryDao.java Type: Java · Role: Data Access Object · Source: plugins/org.projectforge.plugins.liquidityplanning/src/main/java/org/projectforge/plugins/liquidityplanning/LiquidityEntryDao.java 111 lines · 76 code · 28 comments · 7 blank
Data Access Object for LiquidityEntry entities. Extends BaseDao to provide CRUD operations, Hibernate Search queries, and business-logic-level data access.

Code Structure

Package: org.projectforge.plugins.liquidityplanning

Classes: LiquidityEntryDao

Extends: BaseDao

Methods (3): buildStatistics, select, newInstance

Imports: 10 packages

Source Code (abridged)

package org.projectforge.plugins.liquidityplanning;

import org.projectforge.business.fibu.AmountType;
import org.projectforge.business.fibu.PaymentStatus;
import org.projectforge.framework.persistence.api.BaseDao;
import org.projectforge.framework.persistence.api.BaseSearchFilter;
import org.projectforge.framework.persistence.api.QueryFilter;
import org.projectforge.framework.time.PFDay;
import org.springframework.stereotype.Service;

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;

/**
 * @author Kai Reinhard (k.reinhard@micromata.de)
 */
@Service
public class LiquidityEntryDao extends BaseDao<LiquidityEntryDO> {
  public LiquidityEntryDao() {
    super(LiquidityEntryDO.class);
    userRightId = LiquidityplanningPluginUserRightId.PLUGIN_LIQUIDITY_PLANNING;
  }

  public LiquidityEntriesStatistics buildStatistics(final List<LiquidityEntryDO> list) {
    final LiquidityEntriesStatistics stats = new LiquidityEntriesStatistics();
    if (list == null) {
      return stats;
    }
    for (final LiquidityEntryDO entry : list) {
      stats.add(entry);
    }
    return stats;
  }

  @Override
  public List<LiquidityEntryDO> select(final BaseSearchFilter filter) {
    final LiquidityFilter myFilter;
    if (filter instanceof LiquidityFilter) {
      myFilter = (LiquidityFilter) filter;
    } else {
      myFilter = new LiquidityFilter(filter);
    }
    final QueryFilter queryFilter = new QueryFilter(myFilter);
    final List<LiquidityEntryDO> list = select(queryFilter);
    if (myFilter.getPaymentStatus() == PaymentStatus.ALL
            && myFilter.getAmountType() == AmountType.ALL
            && myFilter.getNextDays() <= 0
            || myFilter.getDeleted()) {
      return list;
    }
    final List<LiquidityEntryDO> result = new ArrayList<>();
    final PFDay baseDate = PFDay.fromOrNow(myFilter.getBaseDate());
    for (final LiquidityEntryDO entry : list) {
      if (myFilter.getPaymentStatus() == PaymentStatus.PAID && !entry.getPaid()) {
        continue;
      }
      if (myFilter.getPaymentStatus() == PaymentStatus.UNPAID && entry.getPaid()) {
        continue;
      }
      if (myFilter.getNextDays() > 0) {
        LocalDate dateOfPayment = entry.getDateOfPayment();
        if (dateOfPayment == null) {
          dateOfPayment = baseDate.getLocalDate();
        }
        if (dateOfPayment.isBefore(baseDate.getLocalDate())) {
          // Entry is before today:
          if (myFilter.getPaymentStatus() == PaymentStatus.PAID || entry.getPaid()) {
            // Ignore entries of the past if they were paid. Also ignore unpaid entries of the past if the user wants to filter only paid
            // entries.
            continue;
          }
        } else {
          if (baseDate.daysBetween(entry.getDateOfPayment()) > myFilter.getNextDays()) {
            continue;
          }
        }
      }
      result.add(entry);
    }
    return result;
  }

  @Override
  public LiquidityEntryDO newInstance() {
    return new LiquidityEntryDO();
  }
}

Git History

868d6abb7 2025 -> 2026
63081666f Source file headers: 2024-> 2025.
b71b5073d Migration stuff in progress... (all tests of all packages: OK).
1b50060c3 BaseDao: renamed: get -> find, save -> insert, getList -> select, load -> select
5bafe7941 @Repository -> @Service. @Transactional-Annotations removed.