Dépôt officiel du code source de l'ERP OpenConcerto
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;
}
}