EN · DE · RU · FR · ES

#157: LiquidityEntryDao.java

plugins/org.projectforge.plugins.liquidityplanning/src/main/java/org/projectforge/plugins/liquidityplanning/LiquidityEntryDao.java Typ: Java · Rolle: Datenzugriffsobjekt · Quelle: plugins/org.projectforge.plugins.liquidityplanning/src/main/java/org/projectforge/plugins/liquidityplanning/LiquidityEntryDao.java 111 Zeilen · 76 Code · 28 Kommentare · 7 leer
Datenzugriffsobjekt für LiquidityEntry-Entitäten. Erweitert BaseDao, um CRUD-Operationen, Hibernate-Search-Abfragen und Datenzugriff auf Geschäftslogikebene bereitzustellen.

Codestruktur

Paket: org.projectforge.plugins.liquidityplanning

Klassen: LiquidityEntryDao

Erweitert: BaseDao

Methoden (3): buildStatistics, select, newInstance

Importe: 10 Pakete

Quellcode (gekürzt)

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())) {
          // Eintrag liegt vor heute:
          if (myFilter.getPaymentStatus() == PaymentStatus.PAID || entry.getPaid()) {
            // Ignoriere vergangene Einträge, wenn sie bezahlt wurden. Ignoriere auch unbezahlte vergangene Einträge, wenn der Benutzer nur bezahlte
            // Einträge filtern möchte.
            continue;
          }
        } else {
          if (baseDate.daysBetween(entry.getDateOfPayment()) > myFilter.getNextDays()) {
            continue;
          }
        }
      }
      result.add(entry);
    }
    return result;
  }

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

Git-Verlauf

868d6abb7 2025 -> 2026
63081666f Quellcode-Dateiköpfe: 2024 -> 2025.
b71b5073d Migration in Arbeit... (alle Tests aller Pakete: OK).
1b50060c3 BaseDao: umbenannt: get -> find, save -> insert, getList -> select, load -> select
5bafe7941 @Repository -> @Service. @Transactional-Anmerkungen entfernt.