OpenConcerto

Dépôt officiel du code source de l'ERP OpenConcerto
sonarqube

svn://code.openconcerto.org/openconcerto

Rev

Blame | Last modification | View Log | RSS feed

package org.openconcerto.modules.customersupport;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.sql.Date;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;

import org.openconcerto.erp.action.CreateFrameAbstractAction;
import org.openconcerto.erp.core.common.ui.IListFilterDatePanel;
import org.openconcerto.sql.Configuration;
import org.openconcerto.sql.element.SQLElement;
import org.openconcerto.sql.model.FieldPath;
import org.openconcerto.sql.model.SQLField;
import org.openconcerto.sql.model.SQLRowAccessor;
import org.openconcerto.sql.model.SQLSelect;
import org.openconcerto.sql.model.Where;
import org.openconcerto.sql.model.graph.Path;
import org.openconcerto.sql.view.ListeAddPanel;
import org.openconcerto.sql.view.list.BaseSQLTableModelColumn;
import org.openconcerto.sql.view.list.IListe;
import org.openconcerto.sql.view.list.SQLTableModelSourceOnline;
import org.openconcerto.ui.DefaultGridBagConstraints;
import org.openconcerto.ui.PanelFrame;
import org.openconcerto.utils.CollectionUtils;

public class CustomerSupportTicketListAction extends CreateFrameAbstractAction {

    private SQLElement eltTicket = Configuration.getInstance().getDirectory().getElement(Module.TABLE_CUSTOMER_SUPPORT_TICKET);

    @Override
    public JFrame createFrame() {
        return new PanelFrame(getPanel(), "Liste des tickets de support");
    }

    public CustomerSupportTicketListAction() {
        super("Liste des tickets de support");
    }

    @SuppressWarnings("unchecked")
    public JPanel getPanel() {

        JPanel panel = new JPanel(new GridBagLayout());

        final GridBagConstraints c = new DefaultGridBagConstraints();
        c.fill = GridBagConstraints.NONE;

        JTabbedPane tabbedPane = new JTabbedPane();

        // Tous
        Map<IListe, SQLField> listeFilter = new HashMap<IListe, SQLField>();
        ListeAddPanel panelAll = createPanel(null);
        listeFilter.put(panelAll.getListe(), panelAll.getListe().getModel().getTable().getField("DATE"));

        tabbedPane.add("Tous", panelAll);

        // Sans statut
        ListeAddPanel panelEmpty = createPanel("");
        listeFilter.put(panelEmpty.getListe(), panelEmpty.getListe().getModel().getTable().getField("DATE"));

        tabbedPane.add("Sans statut", panelEmpty);

        SQLSelect selStatus = new SQLSelect();
        selStatus.addSelect(this.eltTicket.getTable().getField("STATUS"));
        selStatus.addGroupBy(this.eltTicket.getTable().getField("STATUS"));
        selStatus.addFieldOrder(this.eltTicket.getTable().getField("STATUS"));

        final List<String> listStatus = Configuration.getInstance().getBase().getDataSource().executeCol(selStatus.asString());

        // Date panel

        for (String status : listStatus) {
            if (status != null && status.trim().length() > 0) {
                ListeAddPanel p = createPanel(status);
                listeFilter.put(p.getListe(), p.getListe().getModel().getTable().getField("DATE"));
                tabbedPane.add(status, p);
            }
        }

        c.weightx = 1;
        c.weighty = 1;
        c.fill = GridBagConstraints.BOTH;
        c.gridx = 0;
        c.gridy++;
        c.gridwidth = GridBagConstraints.REMAINDER;
        panel.add(tabbedPane, c);
        IListFilterDatePanel panelDate = new IListFilterDatePanel(listeFilter, IListFilterDatePanel.getDefaultMap());

        c.gridy = 1;
        c.gridwidth = GridBagConstraints.REMAINDER;
        c.weightx = 1;
        c.weighty = 0;
        c.gridy++;
        panel.add(panelDate, c);

        return panel;
    }

    private ListeAddPanel createPanel(String status) {
        // Filter
        final SQLTableModelSourceOnline source = this.eltTicket.getTableSource(true);

        if (status != null) {
            Where wAttente = new Where(this.eltTicket.getTable().getField("STATUS"), "=", status);
            source.getReq().setWhere(wAttente);
        }

        // Filter
        BaseSQLTableModelColumn dateRemind = new BaseSQLTableModelColumn("Date de rappel", Date.class) {

            @Override
            protected Object show_(SQLRowAccessor r) {

                Calendar c = r.getDate("REMIND_DATE");
                if (c == null) {
                    return null;
                } else {
                    return c.getTime();
                }

            }

            @Override
            public Set<FieldPath> getPaths() {
                Path p = new Path(eltTicket.getTable());
                return CollectionUtils.createSet(new FieldPath(p, "REMIND_DATE"));
            }
        };

        dateRemind.setRenderer(new RemindDateRenderer());
        source.getColumns().add(dateRemind);

        final ListeAddPanel pane = new ListeAddPanel(this.eltTicket, new IListe(source), "Status" + status);
        pane.getListe().setOpaque(false);
        pane.setOpaque(false);

        return pane;
    }
}