EN · DE · RU · FR · ES

#3053: HRListPage.java

projectforge-wicket/src/main/java/org/projectforge/web/humanresources/HRListPage.java Tipo: Java · Rol: Página · Fuente: projectforge-wicket/src/main/java/org/projectforge/web/humanresources/HRListPage.java 346 líneas · 284 código · 36 comentarios · 26 en blanco
Implementación de página Wicket para el listado de RRHH. Compone paneles, formularios y navegación.

Estructura del código

Paquete: org.projectforge.web.humanresources

Clases: HRListPage

Extiende: AbstractListPage

Implementa: ISelectCallerPage

Métodos (25): init, recreateDataTable, populateItem, populateItem, populateItem, onClick, populateItem, populateItem, onClick, populateItem, addListEntry, addLabel, addBottomPanel, isVisible, recreateBottomPanel, newListForm, getHRViewData, buildList, getBaseDao, cancelSelection, select, unselect, refresh, providesOwnRebuildDatabaseIndex, ownRebuildDatabaseIndex

Campos (4): serialVersionUID, hrViewData, resourceLinkPanel, weekMillis

Importaciones: 29 paquetes

Código fuente (resumido)

package org.projectforge.web.humanresources;

import org.apache.wicket.AttributeModifier;
import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.projectforge.business.fibu.KundeDO;
import org.projectforge.business.fibu.ProjektDO;
import org.projectforge.business.humanresources.*;
import org.projectforge.framework.persistence.api.ReindexSettings;
import org.projectforge.framework.persistence.database.DatabaseDao;
import org.projectforge.framework.time.PFDateTime;
import org.projectforge.framework.time.PFDay;
import org.projectforge.framework.utils.NumberFormatter;
import org.projectforge.framework.utils.NumberHelper;
import org.projectforge.web.WicketSupport;
import org.projectforge.web.fibu.ISelectCallerPage;
import org.projectforge.web.timesheet.TimesheetListPage;
import org.projectforge.web.user.UserPropertyColumn;
import org.projectforge.web.wicket.*;
import org.projectforge.web.wicket.flowlayout.DivPanel;

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

/**
 * @author Mario Groß (m.gross@micromata.de)
 * @author Kai Reinhard (k.reinhard@micromata.de)
 */
@ListPage(editPage = HRPlanningEditPage.class)
public class HRListPage extends AbstractListPage<HRListForm, HRViewDao, HRViewUserData> implements ISelectCallerPage {
    private static final long serialVersionUID = -718881597957595460L;

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

    private HRViewData hrViewData;

    private HRListResourceLinkPanel resourceLinkPanel;

    private Long weekMillis;

    public HRListPage(final PageParameters parameters) {
        super(parameters, "hr.planning");
    }

    @Override
    protected void init() {
        recreateDataTable();
        recreateBottomPanel();
    }

    @SuppressWarnings("serial")
    private void recreateDataTable() {
        final LocalDate date = form.getSearchFilter().getStartDay();
        weekMillis = date != null ? PFDateTime.from(date).getBeginOfWeek().getEpochMilli() : null;
        if (dataTable != null) {
            form.remove(dataTable);
        }
        final List<IColumn<HRViewUserData, String>> columns = new ArrayList<IColumn<HRViewUserData, String>>();
        final CellItemListener<HRViewUserData> cellItemListener = new CellItemListener<HRViewUserData>() {
            @Override
            public void populateItem(final Item<ICellPopulator<HRViewUserData>> item, final String componentId,
                                     final IModel<HRViewUserData> rowModel) {
                final HRViewUserData entry = rowModel.getObject();
                appendCssClasses(item, entry.getPlanningId(), entry.isDeleted());
            }
        };
        columns.add(new UserPropertyColumn<HRViewUserData>(getUserGroupCache(), getString("timesheet.user"),
                "user.fullname", "user",
                cellItemListener) {
            @Override
            public void populateItem(final Item<ICellPopulator<HRViewUserData>> item, final String componentId,
                                     final IModel<HRViewUserData> rowModel) {
                final Long planningId = rowModel.getObject().getPlanningId();
                final String[] params;
                if (planningId == null) {
                    // Campos predefinidos para agregar nueva entrada:
                    final Long userId = rowModel.getObject().getUserId();
                    params = new String[]{WebConstants.PARAMETER_USER_ID, userId != null ? String.valueOf(userId) : null,
                            WebConstants.PARAMETER_DATE, weekMillis != null ? String.valueOf(weekMillis) : null};
                } else {
                    params = null;
                }
                item.add(new ListSelectActionPanel(componentId, rowModel, HRPlanningEditPage.class, planningId, HRListPage.this,
                        getLabelString(rowModel), params));
                cellItemListener.populateItem(item, componentId, rowModel);
                addRowClick(item);
            }
        });
        columns.add(new CellItemListenerPropertyColumn<HRViewUserData>(getString("sum"), "plannedDaysSum", "plannedDaysSum",
                cellItemListener) {
            @Override
            public void populateItem(final Item<ICellPopulator<HRViewUserData>> item, final String componentId,
                                     final IModel<HRViewUserData> rowModel) {
                final HRViewUserData userData = rowModel.getObject();
                final HRFilter filter = form.getSearchFilter();
                addListEntry(item, componentId, userData.getPlannedDaysSum(), userData.getActualDaysSum(),
                        new Link<Object>("actualDaysLink") {
                            @Override
                            public void onClick() {
                                // Redirigir a la página de listado de hojas de tiempo y mostrar las correspondientes.
                                final PageParameters parameters = new PageParameters();
                                parameters.add(TimesheetListPage.PARAMETER_KEY_STORE_FILTER, false);
                                parameters.add(TimesheetListPage.PARAMETER_KEY_START_TIME, PFDateTime.from(filter.getStartDay()).getBeginOfDay().getEpochMilli());
                                parameters.add(TimesheetListPage.PARAMETER_KEY_STOP_TIME, PFDateTime.from(filter.getStopDay()).getEpochMilli());
                                parameters.add(TimesheetListPage.PARAMETER_KEY_USER_ID, userData.getUserId());
                                final TimesheetListPage timesheetListPage = new TimesheetListPage(parameters);
                                setResponsePage(timesheetListPage);
                            }
                        });
                item.add(AttributeModifier.append("style", new Model<String>("text-align: right;")));
// ... (truncado, total 324 líneas)

Historial Git

868d6abb7 2025 -> 2026
63081666f Encabezados de archivos fuente: 2024 -> 2025.
b810d1c78 Migración en progreso... (todas las pruebas de todos los paquetes: OK).
3785f8347 Migración en progreso...
a72903e36 *.java, *.kt: StringBuffer -> StringBuilder.