EN · DE · RU · FR · ES

#415: KundeDao.java

projectforge-business/src/main/java/org/projectforge/business/fibu/KundeDao.java Tipo: Java · Rol: Objeto de Acceso a Datos · Fuente: projectforge-business/src/main/java/org/projectforge/business/fibu/KundeDao.java 129 líneas · 89 código · 26 comentarios · 14 en blanco
Objeto de Acceso a Datos para entidades Kunde. Extiende BaseDao para proporcionar operaciones CRUD, consultas de Hibernate Search y acceso a datos a nivel de lógica de negocio.

Estructura del Código

Paquete: org.projectforge.business.fibu

Clases: KundeDao

Extiende: BaseDao

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

Importaciones: 11 paquetes

Código Fuente (resumido)

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);
    }

    /**
     * return Siempre verdadero, no se necesita acceso de selección genérico para objetos de dirección.
     */
    @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 jefe de proyecto no ve clientes inactivos o eliminados.
                return true;
            }
        }
        if (throwException) {
            accessChecker.checkIsUserMemberOfGroup(user, ProjectForgeGroup.FINANCE_GROUP);
            log.error("¡No debería ocurrir! Debería lanzarse una excepción.");
        }
        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; // id no es nulo al insertar nuevos clientes
    }

    @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;
    }
}

Historial Git

868d6abb7 2025 -> 2026
88be16404 BaseDao/KundeDao.isNew(data)
63081666f Encabezados de archivos fuente: 2024 -> 2025.
3785f8347 Trabajo de migración en curso...
1b50060c3 BaseDao: renombrado: get -> find, save -> insert, getList -> select, load -> select