Dépôt officiel du code source de l'ERP OpenConcerto
Rev 182 | Blame | Compare with Previous | Last modification | View Log | RSS feed
/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright 2011-2019 OpenConcerto, by ILM Informatique. All rights reserved.
*
* The contents of this file are subject to the terms of the GNU General Public License Version 3
* only ("GPL"). You may not use this file except in compliance with the License. You can obtain a
* copy of the License at http://www.gnu.org/licenses/gpl-3.0.html See the License for the specific
* language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each file.
*/
package org.openconcerto.erp.core.customerrelationship.customer.element;
import org.openconcerto.erp.config.ComptaPropsConfiguration;
import org.openconcerto.erp.core.common.element.ComptaSQLConfElement;
import org.openconcerto.erp.core.customerrelationship.customer.report.FicheClientXmlSheet;
import org.openconcerto.erp.preferences.GestionClientPreferencePanel;
import org.openconcerto.erp.preferences.PrinterNXProps;
import org.openconcerto.ql.LabelCreator;
import org.openconcerto.ql.QLPrinter;
import org.openconcerto.sql.Configuration;
import org.openconcerto.sql.element.SQLComponent;
import org.openconcerto.sql.model.FieldPath;
import org.openconcerto.sql.model.SQLRow;
import org.openconcerto.sql.model.SQLRowAccessor;
import org.openconcerto.sql.model.SQLRowValues;
import org.openconcerto.sql.model.Where;
import org.openconcerto.sql.model.graph.Path;
import org.openconcerto.sql.preferences.SQLPreferences;
import org.openconcerto.sql.request.ComboSQLRequest;
import org.openconcerto.sql.request.ListSQLRequest;
import org.openconcerto.sql.view.list.BaseSQLTableModelColumn;
import org.openconcerto.sql.view.list.IListe;
import org.openconcerto.sql.view.list.IListeAction.IListeEvent;
import org.openconcerto.sql.view.list.RowAction.PredicateRowAction;
import org.openconcerto.sql.view.list.SQLTableModelSource;
import org.openconcerto.ui.EmailComposer;
import org.openconcerto.utils.CollectionUtils;
import org.openconcerto.utils.ExceptionHandler;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import javax.swing.AbstractAction;
public class ClientNormalSQLElement extends ComptaSQLConfElement {
public ClientNormalSQLElement() {
super("CLIENT", "un client", "clients");
try {
final String property = PrinterNXProps.getInstance().getProperty("QLPrinter");
if (property != null && property.trim().length() > 0) {
PredicateRowAction actionPrintLabel = new PredicateRowAction(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
final SQLRowAccessor row = IListe.get(e).fetchSelectedRow();
printLabel(row, property);
}
}, false, "customerrelationship.customer.label.print");
actionPrintLabel.setPredicate(IListeEvent.getSingleSelectionPredicate());
getRowActions().add(actionPrintLabel);
}
PredicateRowAction actionFicheClient = new PredicateRowAction(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
final SQLRowAccessor row = IListe.get(e).fetchSelectedRow();
FicheClientXmlSheet sheet = new FicheClientXmlSheet(row.asRow());
sheet.createDocumentAsynchronous();
sheet.showPrintAndExportAsynchronous(true, false, true, Collections.emptyList());
}
}, false, "customerrelationship.customer.info.create");
actionFicheClient.setPredicate(IListeEvent.getSingleSelectionPredicate());
getRowActions().add(actionFicheClient);
PredicateRowAction action = new PredicateRowAction(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
sendMail(IListe.get(e).getSelectedRows());
}
}, true, "customerrelationship.customer.email.send");
action.setPredicate(IListeEvent.getNonEmptySelectionPredicate());
getRowActions().add(action);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public String getDescription(SQLRow fromRow) {
return fromRow.getString("CODE") + " " + fromRow.getString("NOM");
}
public void printLabel(SQLRowAccessor row, String qlPrinterProperty) {
final LabelCreator c = new LabelCreator(720);
c.setLeftMargin(10);
c.setTopMargin(10);
c.setDefaultFont(new Font("Verdana", Font.PLAIN, 50));
c.addLineBold(row.getString("NOM"));
final SQLRowAccessor foreignRow = row.asRow().getForeign("ID_ADRESSE");
final String string = foreignRow.getString("RUE");
String[] s = string.split("\n");
for (String string2 : s) {
c.addLineNormal(string2);
}
c.addLineNormal(foreignRow.getString("CODE_POSTAL") + " " + foreignRow.getString("VILLE"));
final String pays = foreignRow.getString("PAYS");
if (pays != null && pays.trim().length() > 0 && !pays.equalsIgnoreCase(ComptaPropsConfiguration.getInstanceCompta().getRowSociete().getForeignRow("ID_ADRESSE_COMMON").getString("PAYS"))) {
c.addLineNormal(pays);
}
final QLPrinter prt = new QLPrinter(qlPrinterProperty);
try {
prt.print(c.getImage());
} catch (Exception ex) {
ex.printStackTrace();
}
}
protected void sendMail(List<SQLRowValues> l) {
String mail = "";
for (SQLRowAccessor rowCli : l) {
String string = rowCli.getString("MAIL");
if (string == null) {
// Refetch au cas où la colonne n'est pas présente dans la liste
string = rowCli.asRow().getString("MAIL");
}
if (string != null && string.trim().length() > 0) {
mail += string + ";";
}
}
try {
EmailComposer.getInstance().compose(mail, "", "");
} catch (Exception exn) {
ExceptionHandler.handle(null, "Impossible de créer le courriel", exn);
}
}
protected boolean showMdr = true;
protected List<String> getListFields() {
final List<String> l = new ArrayList<String>();
l.add("CODE");
l.add("NOM");
l.add("RESPONSABLE");
l.add("ID_ADRESSE");
l.add("TEL");
l.add("TEL_P");
l.add("FAX");
l.add("MAIL");
l.add("NUMERO_TVA");
l.add("SIRET");
l.add("ID_COMPTE_PCE");
l.add("ID_MODE_REGLEMENT");
l.add("INFOS");
l.add("ID_COMMERCIAL");
return l;
}
@Override
protected void _initListRequest(ListSQLRequest req) {
super._initListRequest(req);
req.addForeignToGraphToFetch("ID_MODE_REGLEMENT", Arrays.asList("AJOURS", "LENJOUR"));
}
protected List<String> getComboFields() {
final List<String> l = new ArrayList<String>();
l.add("GROUPE");
l.add("NOM");
if (getTable().getFieldsName().contains("LOCALISATION")) {
l.add("LOCALISATION");
} else {
l.add("CODE");
}
SQLPreferences prefs = SQLPreferences.getMemCached(getTable().getDBRoot());
if (prefs.getBoolean(GestionClientPreferencePanel.DISPLAY_CLIENT_PCE, false)) {
l.add("ID_COMPTE_PCE");
}
return l;
}
@Override
protected void _initTableSource(SQLTableModelSource res) {
super._initTableSource(res);
addCommercialFilter(res, getTable().getField("ID_COMMERCIAL"));
res.getColumns().add(new BaseSQLTableModelColumn(getDirectory().getTranslator().getLabelFor(getTable().getField("CATEGORIES")), String.class) {
@Override
protected Object show_(SQLRowAccessor r) {
return r.getString("CATEGORIES");
}
@Override
public Set<FieldPath> getPaths() {
Path p = new Path(getTable());
return CollectionUtils.createSet(new FieldPath(p, "CATEGORIES"));
}
});
}
@Override
protected void _initComboRequest(ComboSQLRequest req) {
super._initComboRequest(req);
addCommercialFilterCombo(req, getTable().getField("ID_COMMERCIAL"));
req.putWhere("Obsolete", new Where(getTable().getField("OBSOLETE"), "=", Boolean.FALSE));
}
/*
* (non-Javadoc)
*
* @see org.openconcerto.devis.SQLElement#getComponent()
*/
public SQLComponent createComponent() {
return new ClientNormalSQLComponent(this);
}
@Override
protected String createCode() {
return "customerrelationship.customer";
}
}