EN · DE · RU · FR · ES

#415: KundeDao.java

projectforge-business/src/main/java/org/projectforge/business/fibu/KundeDao.java Type : Java · Rôle : Objet d'accès aux données · Source : projectforge-business/src/main/java/org/projectforge/business/fibu/KundeDao.java 129 lignes · 89 code · 26 commentaires · 14 vides
Objet d'accès aux données pour les entités Kunde. Étend BaseDao pour fournir des opérations CRUD, des requêtes Hibernate Search et un accès aux données au niveau de la logique métier.

Structure du code

Package : org.projectforge.business.fibu

Classes : KundeDao

Étend : BaseDao

Méthodes (9) : select, hasUserSelectAccess, hasUserSelectAccess, hasAccess, hasHistoryAccess, newInstance, isNew, onInsert, doesNumberAlreadyExist

Importations : 11 packages

Code source (abrégé)

package org.projectforge.business.fibu;

import org.jetbrains.annotations.NotNull;
import org.projectforge.business.user.ProjectForgeGroup;
import org.projectforge.common.i18n.UserException;
import org.projectforge.framework.access.OperationType;
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.persistence.api.SortProperty;
import org.projectforge.framework.persistence.user.entities.PFUserDO;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class KundeDao extends BaseDao<KundeDO> {
    private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(KundeDao.class);

    public KundeDao() {
        super(KundeDO.class);
        avoidNullIdCheckBeforeSave = true;
        this.idProperty = "nummer";
    }

    @Override
    public List<KundeDO> select(final BaseSearchFilter filter) {
        final QueryFilter queryFilter = new QueryFilter(filter);
        queryFilter.addOrder(SortProperty.asc("nummer"));
        return select(queryFilter);
    }

    /**
     * retourne Toujours vrai, aucun accès de sélection générique nécessaire pour les objets adresse.
     */
    @Override
    public boolean hasUserSelectAccess(final PFUserDO user, final boolean throwException) {
        return accessChecker.isUserMemberOfGroup(user, throwException, ProjectForgeGroup.FINANCE_GROUP,
                ProjectForgeGroup.CONTROLLING_GROUP,
                ProjectForgeGroup.PROJECT_MANAGER, ProjectForgeGroup.PROJECT_ASSISTANT);
    }

    @Override
    public boolean hasUserSelectAccess(final PFUserDO user, final KundeDO obj, final boolean throwException) {
        if (obj == null) {
            return true;
        }
        if (accessChecker.isUserMemberOfGroup(user, ProjectForgeGroup.FINANCE_GROUP,
                ProjectForgeGroup.CONTROLLING_GROUP)) {
            return true;
        }
        if (accessChecker.isUserMemberOfGroup(user, ProjectForgeGroup.PROJECT_MANAGER,
                ProjectForgeGroup.PROJECT_ASSISTANT)) {
            if (obj.getStatus() != null
                    && !obj.getStatus().isIn(KundeStatus.ENDED, KundeStatus.NONACTIVE, KundeStatus.NONEXISTENT)
                    && !obj.getDeleted()) {
                // Un chef de projet ne voit pas les clients inactifs ou supprimés.
                return true;
            }
        }
        if (throwException) {
            accessChecker.checkIsUserMemberOfGroup(user, ProjectForgeGroup.FINANCE_GROUP);
            log.error("Cela ne devrait pas arriver ! Une exception devrait être levée.");
        }
        return false;
    }

    @Override
    public boolean hasAccess(final PFUserDO user, final KundeDO obj, final KundeDO oldObj,
                             final OperationType operationType,
                             final boolean throwException) {
        return accessChecker.isUserMemberOfGroup(user, throwException, ProjectForgeGroup.FINANCE_GROUP);
    }

    @Override
    public boolean hasHistoryAccess(final PFUserDO user, final boolean throwException) {
        return accessChecker.isUserMemberOfGroup(user, throwException, ProjectForgeGroup.FINANCE_GROUP,
                ProjectForgeGroup.CONTROLLING_GROUP);
    }

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

    @Override
    public boolean isNew(@NotNull KundeDO obj) {
        return obj.getCreated() == null; // l'identifiant n'est pas nul lors de l'insertion de nouveaux clients
    }

    @Override
    public void onInsert(KundeDO obj) {
        if (doesNumberAlreadyExist(obj)) {
            obj.setCreated(null);
            throw new UserException("fibu.kunde.validation.existingCustomerNr");
        }
    }

    public boolean doesNumberAlreadyExist(final KundeDO customer) {
        if (customer == null || customer.getNummer() == null) {
            return false;
        }
        KundeDO existingCustomer = find(customer.getNummer(), false);
        return existingCustomer != null;
    }
}

Historique Git

868d6abb7 2025 -> 2026
88be16404 BaseDao/KundeDao.isNew(data)
63081666f En-têtes des fichiers source : 2024 -> 2025.
3785f8347 Migration en cours...
1b50060c3 BaseDao : renommé : get -> find, save -> insert, getList -> select, load -> select